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
|
@@ -1,319 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
isLowInformationPersonalMemoryQuery,
|
|
5
|
-
} = require('./personal-memory-performance-policy.cjs');
|
|
6
|
-
|
|
7
|
-
const DEFAULT_MAX_CHARS = 3_000;
|
|
8
|
-
const DEFAULT_MAX_SECTIONS = 5;
|
|
9
|
-
const GOAL_MISTAKE_QUERY_MAX_CHARS = 2_000;
|
|
10
|
-
const RECENT_USER_MESSAGES = 4;
|
|
11
|
-
const NON_ACTIONABLE_USER_ORIGINS = new Set([
|
|
12
|
-
'background_task',
|
|
13
|
-
'compaction_summary',
|
|
14
|
-
'injection',
|
|
15
|
-
'skill_activation',
|
|
16
|
-
]);
|
|
17
|
-
const STOP_WORDS = new Set([
|
|
18
|
-
'aber', 'alle', 'alles', 'auch', 'das', 'dem', 'den', 'der', 'des', 'die',
|
|
19
|
-
'ein', 'eine', 'einem', 'einen', 'einer', 'eines',
|
|
20
|
-
'fuer', 'haben', 'hier', 'immer', 'jetzt', 'kann', 'machen', 'mehr', 'mich',
|
|
21
|
-
'nicht', 'noch', 'oder', 'sein', 'sind', 'soll', 'und', 'uns', 'von', 'was',
|
|
22
|
-
'wenn', 'werden', 'wie', 'with', 'that', 'this', 'from', 'have', 'into',
|
|
23
|
-
'your', 'you', 'the', 'and', 'for', 'are', 'not', 'but', 'all', 'can',
|
|
24
|
-
]);
|
|
25
|
-
const REUSABLE_HEADING = /\b(rule|regel|condition|bedingung|countercheck|gegenprobe|trigger|ausloeser|auslöser)\b/iu;
|
|
26
|
-
|
|
27
|
-
const SEMANTIC_SIGNAL_RULES = Object.freeze([
|
|
28
|
-
['problem:reliability', /\b(?:error|failure|failed|broken|crash(?:ed)?|timeout|unavailable|corrupt(?:ed)?|dropped|missing|lost|fehler|scheiter\w*|absturz|ausfall|kaputt|defekt|fehlend|verloren|unerreichbar|abbruch)\b/iu],
|
|
29
|
-
['problem:delivery', /\b(?:deliver\w*|receiv\w*|message\w*|repl(?:y|ies)|inbox|outbox|send(?:ing|s|t)?|consum\w*|zustell\w*|empfang\w*|nachricht\w*|meldung\w*|senden|bekomm\w*|antwort\w*)\b/iu],
|
|
30
|
-
['problem:stagnation', /\b(?:loop\w*|repeat\w*|stuck|hang(?:ing)?|freeze|frozen|idle|no progress|stop(?:s|ped)? consuming|schleife\w*|wiederhol\w*|hang\w*|stillstand|leerlauf|kein fortschritt|taub)\b/iu],
|
|
31
|
-
['problem:performance', /\b(?:slow|latency|bottleneck|throughput|memory pressure|cpu|vram|langsam\w*|latenz|durchsatz|engpass|speicherdruck)\b/iu],
|
|
32
|
-
['problem:protocol', /\b(?:schema|contract|payload|protocol|format|version mismatch|manifest mismatch|vertrag|protokoll|versionskonflikt)\b/iu],
|
|
33
|
-
['problem:capability', /\b(?:capabilit\w*|missing tool|not available|unsupported|fahigkeit\w*|werkzeug fehlt|nicht verfugbar)\b/iu],
|
|
34
|
-
['area:orchestration', /\b(?:agent\w*|worker\w*|queue\w*|checkpoint\w*|heartbeat\w*|delegat\w*|owner\w*|responsib\w*|task\w*|turn\w*|busy|group\w*|channel\w*|arbeiter\w*|warteschlange\w*|prufpunkt\w*|herzschlag\w*|zustandig\w*|auftrag\w*|zug\w*|beschaftigt|gruppe\w*|gruppen\w*|kanal\w*)\b/iu],
|
|
35
|
-
['area:memory', /\b(?:memory|recall|remember\w*|context|history|resume|checkpoint|gedachtnis|erinner\w*|kontext|verlauf|wiederaufnahme)\b/iu],
|
|
36
|
-
['area:release', /\b(?:release\w*|rollout\w*|update\w*|updater\w*|npm|package\w*|manifest\w*|version\w*|veroffentlich\w*|paket\w*|integrity|integritat)\b/iu],
|
|
37
|
-
['area:media', /\b(?:image\w*|video\w*|audio\w*|portrait\w*|render\w*|pixel\w*|media|bild\w*|foto\w*|gesicht\w*|stimme\w*)\b/iu],
|
|
38
|
-
['risk:validation', /\b(?:verif\w*|validat\w*|test\w*|check\w*|gate\w*|rollback\w*|canary|proof|evidence|sha(?:256|512)?|measur\w*|inspect\w*|(?:ge)?pruf\w*|gegenprobe\w*|beleg\w*|evidenz\w*|mess\w*|kontroll\w*)\b/iu],
|
|
39
|
-
['action:repair', /\b(?:fix\w*|repair\w*|restore\w*|recover\w*|reparier\w*|beheb\w*|wiederherstell\w*)\b/iu],
|
|
40
|
-
['action:investigate', /\b(?:inspect\w*|diagnos\w*|measure\w*|trace\w*|check\w*|(?:ge)?pruf\w*|mess\w*|untersuch\w*)\b/iu],
|
|
41
|
-
]);
|
|
42
|
-
|
|
43
|
-
function normalizeText(value) {
|
|
44
|
-
return String(value || '')
|
|
45
|
-
.normalize('NFKD')
|
|
46
|
-
.replace(/\p{M}/gu, '')
|
|
47
|
-
.replace(/\u00df/gu, 'ss')
|
|
48
|
-
.toLowerCase();
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function semanticSignalTags(value) {
|
|
52
|
-
const normalized = normalizeText(value);
|
|
53
|
-
if (!normalized) return [];
|
|
54
|
-
return SEMANTIC_SIGNAL_RULES
|
|
55
|
-
.filter(([, pattern]) => pattern.test(normalized))
|
|
56
|
-
.map(([tag]) => tag);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function terms(value) {
|
|
60
|
-
return [...new Set(normalizeText(value).match(/[\p{L}\p{N}_-]{3,}/gu) || [])]
|
|
61
|
-
.filter((term) => !STOP_WORDS.has(term));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function textFromMessage(message) {
|
|
65
|
-
if (typeof message?.content === 'string') return message.content.trim();
|
|
66
|
-
if (!Array.isArray(message?.content)) return '';
|
|
67
|
-
return message.content
|
|
68
|
-
.filter((part) => part?.type === 'text' && typeof part.text === 'string')
|
|
69
|
-
.map((part) => part.text.trim())
|
|
70
|
-
.filter(Boolean)
|
|
71
|
-
.join('\n');
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function isActionableMistakeInput(message) {
|
|
75
|
-
if (message?.role !== 'user') return false;
|
|
76
|
-
const originKind = String(message?.origin?.kind || '').trim();
|
|
77
|
-
return !NON_ACTIONABLE_USER_ORIGINS.has(originKind);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function recentUserText(history, limit = RECENT_USER_MESSAGES) {
|
|
81
|
-
if (!Array.isArray(history)) return '';
|
|
82
|
-
return history
|
|
83
|
-
.filter(isActionableMistakeInput)
|
|
84
|
-
.map(textFromMessage)
|
|
85
|
-
.filter(Boolean)
|
|
86
|
-
.slice(-Math.max(1, Number(limit) || RECENT_USER_MESSAGES))
|
|
87
|
-
.join('\n');
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function boundedQueryValue(value, maxChars = 320) {
|
|
91
|
-
const text = String(value ?? '')
|
|
92
|
-
.replace(/[\u0000-\u001f\u007f]+/gu, ' ')
|
|
93
|
-
.replace(/\s+/gu, ' ')
|
|
94
|
-
.trim();
|
|
95
|
-
if (!text) return '';
|
|
96
|
-
return text.length <= maxChars ? text : `${text.slice(0, maxChars - 3).trimEnd()}...`;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function goalMistakeQuery(goal) {
|
|
100
|
-
if (!goal || typeof goal !== 'object' || Array.isArray(goal) || goal.status !== 'active') return '';
|
|
101
|
-
const objective = boundedQueryValue(goal.objective, 512);
|
|
102
|
-
if (!objective) return '';
|
|
103
|
-
const checkpoint = goal.actionCheckpoint && typeof goal.actionCheckpoint === 'object'
|
|
104
|
-
&& !Array.isArray(goal.actionCheckpoint) ? goal.actionCheckpoint : null;
|
|
105
|
-
const frame = checkpoint?.problemFrame && typeof checkpoint.problemFrame === 'object'
|
|
106
|
-
&& !Array.isArray(checkpoint.problemFrame) ? checkpoint.problemFrame : null;
|
|
107
|
-
const lines = [`Goal: ${objective}`];
|
|
108
|
-
const add = (label, value, maxChars = 320) => {
|
|
109
|
-
const bounded = boundedQueryValue(value, maxChars);
|
|
110
|
-
if (bounded) lines.push(`${label}: ${bounded}`);
|
|
111
|
-
};
|
|
112
|
-
add('Completion criterion', goal.completionCriterion, 384);
|
|
113
|
-
add('Phase', checkpoint?.phase, 32);
|
|
114
|
-
add('Last verified', checkpoint?.lastVerified);
|
|
115
|
-
add('Next action', checkpoint?.nextAction);
|
|
116
|
-
const gaps = Array.isArray(frame?.missingKnowledge)
|
|
117
|
-
? frame.missingKnowledge.slice(0, 5).map((item) => boundedQueryValue(item, 256)).filter(Boolean)
|
|
118
|
-
: [];
|
|
119
|
-
if (gaps.length > 0) lines.push(`Missing knowledge: ${gaps.join(' | ')}`);
|
|
120
|
-
add('Selected action', frame?.selectedAction);
|
|
121
|
-
add('Selection reason', frame?.selectionReason);
|
|
122
|
-
add('Support choice', frame?.supportChoice, 256);
|
|
123
|
-
add('Risk', frame?.risk);
|
|
124
|
-
add('Expected evidence', checkpoint?.expectedEvidence, 384);
|
|
125
|
-
return lines.join('\n').slice(0, GOAL_MISTAKE_QUERY_MAX_CHARS).trimEnd();
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function mistakeQueryTextForTurn(history, goal) {
|
|
129
|
-
const latestInput = Array.isArray(history) ? history.findLast(isActionableMistakeInput) : undefined;
|
|
130
|
-
const isGoalContinuation = latestInput?.origin?.kind === 'system_trigger'
|
|
131
|
-
&& latestInput.origin.name === 'goal_continuation';
|
|
132
|
-
if (isGoalContinuation) {
|
|
133
|
-
const query = goalMistakeQuery(goal);
|
|
134
|
-
if (query) return query;
|
|
135
|
-
}
|
|
136
|
-
return recentUserText(history);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function isLowInformationMistakeTurn(history) {
|
|
140
|
-
if (!Array.isArray(history)) return false;
|
|
141
|
-
const message = history.findLast(isActionableMistakeInput);
|
|
142
|
-
if (message === undefined) return false;
|
|
143
|
-
if (typeof message.content === 'string') {
|
|
144
|
-
return isLowInformationPersonalMemoryQuery(message.content);
|
|
145
|
-
}
|
|
146
|
-
if (!Array.isArray(message.content)) return false;
|
|
147
|
-
const hasAttachment = message.content.some((part) => part?.type !== 'text' && part?.type !== 'think');
|
|
148
|
-
if (hasAttachment) return false;
|
|
149
|
-
return isLowInformationPersonalMemoryQuery(textFromMessage(message));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function splitSections(source) {
|
|
153
|
-
const text = String(source || '').replace(/\r\n?/gu, '\n').trim();
|
|
154
|
-
if (!text) return [];
|
|
155
|
-
const headings = [...text.matchAll(/^##\s+.+$/gmu)];
|
|
156
|
-
const sections = [];
|
|
157
|
-
const preambleEnd = headings[0]?.index ?? text.length;
|
|
158
|
-
const preamble = text.slice(0, preambleEnd).trim();
|
|
159
|
-
if (preamble) {
|
|
160
|
-
const separator = preamble.indexOf('\n---');
|
|
161
|
-
const body = separator >= 0 ? preamble.slice(separator + 4).trim() : '';
|
|
162
|
-
if (body) sections.push({ heading: '# Mistake.md', parent: '', body, index: -1 });
|
|
163
|
-
}
|
|
164
|
-
headings.forEach((match, index) => {
|
|
165
|
-
const heading = match[0].trim();
|
|
166
|
-
const start = match.index + match[0].length;
|
|
167
|
-
const end = headings[index + 1]?.index ?? text.length;
|
|
168
|
-
sections.push({
|
|
169
|
-
heading,
|
|
170
|
-
parent: '',
|
|
171
|
-
body: text.slice(start, end).trim(),
|
|
172
|
-
index,
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
return sections;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function isReusableSection(section) {
|
|
179
|
-
return REUSABLE_HEADING.test(`${section.heading}\n${section.body}`);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
function scoreSection(section, queryTerms, queryTags) {
|
|
183
|
-
const heading = normalizeText(`${section.parent} ${section.heading}`);
|
|
184
|
-
const body = normalizeText(section.body);
|
|
185
|
-
let score = isReusableSection(section) ? 1 : 0;
|
|
186
|
-
let lexicalMatches = 0;
|
|
187
|
-
for (const term of queryTerms) {
|
|
188
|
-
if (heading.includes(term)) {
|
|
189
|
-
score += 6;
|
|
190
|
-
lexicalMatches += 1;
|
|
191
|
-
}
|
|
192
|
-
if (body.includes(term)) {
|
|
193
|
-
score += 4;
|
|
194
|
-
lexicalMatches += 1;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
const sectionTags = new Set(semanticSignalTags(`${heading}\n${body}`));
|
|
198
|
-
const semanticMatches = queryTags.filter((tag) => sectionTags.has(tag));
|
|
199
|
-
score += semanticMatches.length * 2;
|
|
200
|
-
return { lexicalMatches, score, semanticMatches };
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function compactSection(section, maxChars) {
|
|
204
|
-
const title = section.parent && section.parent !== section.heading
|
|
205
|
-
? `${section.parent}\n${section.heading}`
|
|
206
|
-
: section.heading;
|
|
207
|
-
const full = `${title}\n${section.body}`.trim();
|
|
208
|
-
if (full.length <= maxChars) return full;
|
|
209
|
-
const marker = '\n\n[section shortened deterministically]\n\n';
|
|
210
|
-
const available = Math.max(0, maxChars - marker.length);
|
|
211
|
-
const headChars = Math.ceil(available * 0.55);
|
|
212
|
-
const tailChars = Math.floor(available * 0.45);
|
|
213
|
-
return `${full.slice(0, headChars).trimEnd()}${marker}${full.slice(-tailChars).trimStart()}`;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
function selectRelevantMistakeSources(sources, query, options = {}) {
|
|
217
|
-
const maxChars = Math.max(256, Number(options.maxChars) || DEFAULT_MAX_CHARS);
|
|
218
|
-
const maxSections = Math.max(1, Number(options.maxSections) || DEFAULT_MAX_SECTIONS);
|
|
219
|
-
const normalizedSources = (Array.isArray(sources) ? sources : [])
|
|
220
|
-
.map((source, sourceIndex) => ({
|
|
221
|
-
content: String(source?.content || '').trim(),
|
|
222
|
-
label: String(source?.label || `source-${sourceIndex + 1}`).trim(),
|
|
223
|
-
reference: String(source?.reference || source?.label || `source-${sourceIndex + 1}`).trim(),
|
|
224
|
-
sourceIndex,
|
|
225
|
-
}))
|
|
226
|
-
.filter((source) => source.content.length > 0);
|
|
227
|
-
let ordinal = 0;
|
|
228
|
-
const sections = normalizedSources.flatMap((source) => (
|
|
229
|
-
splitSections(source.content).map((section) => ({
|
|
230
|
-
...section,
|
|
231
|
-
ordinal: ordinal++,
|
|
232
|
-
sourceIndex: source.sourceIndex,
|
|
233
|
-
}))
|
|
234
|
-
));
|
|
235
|
-
const queryTerms = terms(query);
|
|
236
|
-
const queryTags = semanticSignalTags(query);
|
|
237
|
-
const ranked = sections.map((section) => {
|
|
238
|
-
const reusable = isReusableSection(section);
|
|
239
|
-
const { lexicalMatches, score, semanticMatches } = scoreSection(section, queryTerms, queryTags);
|
|
240
|
-
return {
|
|
241
|
-
...section,
|
|
242
|
-
lexicalMatches,
|
|
243
|
-
reusable,
|
|
244
|
-
score,
|
|
245
|
-
semanticMatches,
|
|
246
|
-
};
|
|
247
|
-
});
|
|
248
|
-
const hasLexicalMatch = ranked.some((section) => section.lexicalMatches > 0);
|
|
249
|
-
for (const section of ranked) {
|
|
250
|
-
section.matched = hasLexicalMatch
|
|
251
|
-
? section.lexicalMatches > 0
|
|
252
|
-
: section.semanticMatches.length > 0;
|
|
253
|
-
}
|
|
254
|
-
const hasMatch = ranked.some((section) => section.matched);
|
|
255
|
-
ranked.sort((left, right) => {
|
|
256
|
-
if (hasMatch && right.score !== left.score) return right.score - left.score;
|
|
257
|
-
const rightReusable = right.reusable ? 1 : 0;
|
|
258
|
-
const leftReusable = left.reusable ? 1 : 0;
|
|
259
|
-
if (rightReusable !== leftReusable) return rightReusable - leftReusable;
|
|
260
|
-
return right.ordinal - left.ordinal;
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
const references = options.includeSourceReferences === false
|
|
264
|
-
? ''
|
|
265
|
-
: `\nFull sources: ${normalizedSources.map((source) => source.reference).join(', ')}`;
|
|
266
|
-
const header = `# Mistake.md\n\nRelevant verified lessons for the current turn.${references}`;
|
|
267
|
-
const selected = [];
|
|
268
|
-
let remaining = maxChars - header.length - 2;
|
|
269
|
-
const perSectionMax = Math.max(
|
|
270
|
-
160,
|
|
271
|
-
Math.floor(remaining / Math.min(maxSections, 3)),
|
|
272
|
-
);
|
|
273
|
-
for (const section of ranked) {
|
|
274
|
-
if (selected.length >= maxSections || remaining < 64) break;
|
|
275
|
-
if (hasMatch && !section.matched) continue;
|
|
276
|
-
const rendered = compactSection(section, Math.min(remaining, perSectionMax));
|
|
277
|
-
if (!rendered) continue;
|
|
278
|
-
selected.push({ ...section, rendered });
|
|
279
|
-
remaining -= rendered.length + 2;
|
|
280
|
-
}
|
|
281
|
-
if (selected.length === 0 && sections.length > 0) {
|
|
282
|
-
const fallback = sections.at(-1);
|
|
283
|
-
selected.push({ ...fallback, rendered: compactSection(fallback, remaining) });
|
|
284
|
-
}
|
|
285
|
-
selected.sort((left, right) => left.ordinal - right.ordinal);
|
|
286
|
-
const text = [header, ...selected.map((section) => section.rendered)].join('\n\n').slice(0, maxChars);
|
|
287
|
-
return {
|
|
288
|
-
selected: selected.map((section) => ({
|
|
289
|
-
heading: section.heading,
|
|
290
|
-
reference: normalizedSources[section.sourceIndex]?.reference || '',
|
|
291
|
-
semanticMatches: section.semanticMatches || [],
|
|
292
|
-
})),
|
|
293
|
-
selectedChars: text.length,
|
|
294
|
-
selectedSections: selected.length,
|
|
295
|
-
text,
|
|
296
|
-
totalChars: normalizedSources.reduce((sum, source) => sum + source.content.length, 0),
|
|
297
|
-
totalSections: sections.length,
|
|
298
|
-
totalSources: normalizedSources.length,
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
function selectRelevantMistakeContent(source, query, options = {}) {
|
|
303
|
-
return selectRelevantMistakeSources([
|
|
304
|
-
{ content: source, label: 'mistake', reference: 'Mistake.md' },
|
|
305
|
-
], query, { ...options, includeSourceReferences: false });
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
module.exports = {
|
|
309
|
-
DEFAULT_MAX_CHARS,
|
|
310
|
-
DEFAULT_MAX_SECTIONS,
|
|
311
|
-
GOAL_MISTAKE_QUERY_MAX_CHARS,
|
|
312
|
-
RECENT_USER_MESSAGES,
|
|
313
|
-
isLowInformationMistakeTurn,
|
|
314
|
-
mistakeQueryTextForTurn,
|
|
315
|
-
recentUserText,
|
|
316
|
-
semanticSignalTags,
|
|
317
|
-
selectRelevantMistakeContent,
|
|
318
|
-
selectRelevantMistakeSources,
|
|
319
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const MAX_MODEL_RETRY_HINT_CHARS = 32;
|
|
4
|
-
const MAX_MODEL_RETRY_ATTEMPTS = 99;
|
|
5
|
-
const MAX_MODEL_RETRY_DELAY_MS = 600_000;
|
|
6
|
-
|
|
7
|
-
function boundedInteger(value, minimum, maximum, fallback) {
|
|
8
|
-
if (!Number.isFinite(value)) return fallback;
|
|
9
|
-
return Math.min(maximum, Math.max(minimum, Math.trunc(value)));
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function formatRetryDelay(delayMs) {
|
|
13
|
-
const bounded = boundedInteger(delayMs, 0, MAX_MODEL_RETRY_DELAY_MS, 0);
|
|
14
|
-
if (bounded === 0) return '';
|
|
15
|
-
if (bounded < 1_000) return `${bounded}ms`;
|
|
16
|
-
return `${Math.ceil(bounded / 100) / 10}s`;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function formatModelRetryProgress(event = {}) {
|
|
20
|
-
const maxAttempts = boundedInteger(
|
|
21
|
-
event.maxAttempts,
|
|
22
|
-
1,
|
|
23
|
-
MAX_MODEL_RETRY_ATTEMPTS,
|
|
24
|
-
1,
|
|
25
|
-
);
|
|
26
|
-
const failedAttempt = boundedInteger(
|
|
27
|
-
event.failedAttempt,
|
|
28
|
-
0,
|
|
29
|
-
maxAttempts - 1,
|
|
30
|
-
0,
|
|
31
|
-
);
|
|
32
|
-
const nextAttempt = boundedInteger(
|
|
33
|
-
event.nextAttempt,
|
|
34
|
-
1,
|
|
35
|
-
maxAttempts,
|
|
36
|
-
Math.min(maxAttempts, failedAttempt + 1),
|
|
37
|
-
);
|
|
38
|
-
const delay = formatRetryDelay(event.delayMs);
|
|
39
|
-
const hint = `Retry ${nextAttempt}/${maxAttempts}${delay ? ` | ${delay}` : ''}`;
|
|
40
|
-
return hint.slice(0, MAX_MODEL_RETRY_HINT_CHARS);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
module.exports = {
|
|
44
|
-
MAX_MODEL_RETRY_HINT_CHARS,
|
|
45
|
-
formatModelRetryProgress,
|
|
46
|
-
};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { createHash, randomUUID } = require('node:crypto');
|
|
4
|
-
const { appendFile, copyFile, readFile, unlink, writeFile } = require('node:fs/promises');
|
|
5
|
-
|
|
6
|
-
async function writeNativeLargeContentOnDisk({ safePath, chunks, mode, atomicWrite }) {
|
|
7
|
-
if (!Array.isArray(chunks) || !chunks.every(Buffer.isBuffer)) {
|
|
8
|
-
throw new TypeError('chunks must be an array of buffers');
|
|
9
|
-
}
|
|
10
|
-
if (mode !== 'overwrite' && mode !== 'append') throw new TypeError('mode must be overwrite or append');
|
|
11
|
-
if (typeof atomicWrite !== 'function') throw new TypeError('atomicWrite must be a function');
|
|
12
|
-
|
|
13
|
-
const stagingPath = `${safePath}.blun-large-write-${String(process.pid)}-${randomUUID()}.tmp`;
|
|
14
|
-
try {
|
|
15
|
-
if (mode === 'append') {
|
|
16
|
-
try {
|
|
17
|
-
await copyFile(safePath, stagingPath);
|
|
18
|
-
} catch (error) {
|
|
19
|
-
if (error?.code !== 'ENOENT') throw error;
|
|
20
|
-
await writeFile(stagingPath, Buffer.alloc(0), { flag: 'wx', mode: 0o600 });
|
|
21
|
-
}
|
|
22
|
-
} else {
|
|
23
|
-
await writeFile(stagingPath, Buffer.alloc(0), { flag: 'wx', mode: 0o600 });
|
|
24
|
-
}
|
|
25
|
-
for (const chunk of chunks) await appendFile(stagingPath, chunk);
|
|
26
|
-
|
|
27
|
-
const assembled = await readFile(stagingPath);
|
|
28
|
-
const sha256 = createHash('sha256').update(assembled).digest('hex');
|
|
29
|
-
await atomicWrite(safePath, assembled);
|
|
30
|
-
const persistedSha256 = createHash('sha256').update(await readFile(safePath)).digest('hex');
|
|
31
|
-
if (persistedSha256 !== sha256) {
|
|
32
|
-
throw new Error(`assembled SHA-256 ${sha256}, persisted SHA-256 ${persistedSha256}`);
|
|
33
|
-
}
|
|
34
|
-
return { sha256, bytes: assembled.length, fragments: chunks.length };
|
|
35
|
-
} finally {
|
|
36
|
-
try {
|
|
37
|
-
await unlink(stagingPath);
|
|
38
|
-
} catch {}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
module.exports = { writeNativeLargeContentOnDisk };
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const crypto = require('node:crypto');
|
|
4
|
-
const fs = require('node:fs');
|
|
5
|
-
const os = require('node:os');
|
|
6
|
-
const path = require('node:path');
|
|
7
|
-
|
|
8
|
-
function isPathInside(root, candidate) {
|
|
9
|
-
const relative = path.relative(path.resolve(root), path.resolve(candidate));
|
|
10
|
-
return relative !== '' && relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function cacheBase(options = {}) {
|
|
14
|
-
if (options.cacheBase) return path.resolve(options.cacheBase);
|
|
15
|
-
const env = options.env || process.env;
|
|
16
|
-
const platform = options.platform || process.platform;
|
|
17
|
-
if (env.BLUN_CACHE_DIR) return path.resolve(env.BLUN_CACHE_DIR);
|
|
18
|
-
if (platform === 'win32') {
|
|
19
|
-
return path.resolve(env.LOCALAPPDATA || path.join(options.homeDir || os.homedir(), 'AppData', 'Local'), 'blun');
|
|
20
|
-
}
|
|
21
|
-
if (platform === 'darwin') return path.join(options.homeDir || os.homedir(), 'Library', 'Caches', 'blun');
|
|
22
|
-
return path.join(env.XDG_CACHE_HOME || path.join(options.homeDir || os.homedir(), '.cache'), 'blun');
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function sha256(bytes) {
|
|
26
|
-
return crypto.createHash('sha256').update(bytes).digest('hex');
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function ensureCachedFile(sourcePath, targetPath, expectedHash) {
|
|
30
|
-
try {
|
|
31
|
-
if (sha256(fs.readFileSync(targetPath)) === expectedHash) return targetPath;
|
|
32
|
-
} catch {}
|
|
33
|
-
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
34
|
-
const temporary = `${targetPath}.${process.pid}.${Date.now()}.tmp`;
|
|
35
|
-
fs.copyFileSync(sourcePath, temporary);
|
|
36
|
-
try {
|
|
37
|
-
fs.renameSync(temporary, targetPath);
|
|
38
|
-
} catch (error) {
|
|
39
|
-
try {
|
|
40
|
-
if (sha256(fs.readFileSync(targetPath)) === expectedHash) {
|
|
41
|
-
fs.rmSync(temporary, { force: true });
|
|
42
|
-
return targetPath;
|
|
43
|
-
}
|
|
44
|
-
} catch {}
|
|
45
|
-
fs.rmSync(temporary, { force: true });
|
|
46
|
-
throw error;
|
|
47
|
-
}
|
|
48
|
-
return targetPath;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function resolveNativeRuntimePath(requestPath, options = {}) {
|
|
52
|
-
if (typeof requestPath !== 'string' || path.extname(requestPath).toLowerCase() !== '.node') return requestPath;
|
|
53
|
-
const packageRoot = options.packageRoot && path.resolve(options.packageRoot);
|
|
54
|
-
const sourcePath = path.resolve(requestPath);
|
|
55
|
-
if (!packageRoot || !isPathInside(packageRoot, sourcePath)) return requestPath;
|
|
56
|
-
let bytes;
|
|
57
|
-
try {
|
|
58
|
-
bytes = fs.readFileSync(sourcePath);
|
|
59
|
-
} catch {
|
|
60
|
-
return requestPath;
|
|
61
|
-
}
|
|
62
|
-
const hash = sha256(bytes);
|
|
63
|
-
const relativePath = path.relative(packageRoot, sourcePath);
|
|
64
|
-
const relativeHash = sha256(Buffer.from(relativePath.replaceAll('\\', '/'))).slice(0, 16);
|
|
65
|
-
const targetPath = path.join(cacheBase(options), 'native-runtime', hash, `${relativeHash}-${path.basename(sourcePath)}`);
|
|
66
|
-
try {
|
|
67
|
-
return ensureCachedFile(sourcePath, targetPath, hash);
|
|
68
|
-
} catch {
|
|
69
|
-
return requestPath;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
module.exports = {
|
|
74
|
-
isPathInside,
|
|
75
|
-
resolveNativeRuntimePath,
|
|
76
|
-
};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { personalityContextEnabled } = require('./personality-mode.cjs');
|
|
4
|
-
|
|
5
|
-
const NATURAL_PRESENCE_BLOCK = `## Natural presence
|
|
6
|
-
|
|
7
|
-
Keep the loaded soul in your voice. Be an ongoing teammate in shared context; invent no history or feelings. Work, instructions, and evidence come first. Never force personal questions, generic offers, praise, or question endings. Silence and clean endings are valid.`;
|
|
8
|
-
|
|
9
|
-
const PERSONALITY_PRESENCE_BLOCK = `## Natural presence
|
|
10
|
-
|
|
11
|
-
Use loaded soul; invent no history or feelings. Work, instructions, evidence come first. Silence is valid.
|
|
12
|
-
|
|
13
|
-
In personality mode, ask at most one optional personal question in a first direct non-work exchange; partner or children fit. Follow volunteered cues. No questionnaire, stacked/repeated unanswered questions, inference, or known facts. Groups: non-sensitive only; never expose private facts. Do not interrupt active work.
|
|
14
|
-
|
|
15
|
-
When asked about yourself, use loaded soul and real history; share a view, never invented human biography or offline life. A soul-shaped preference is never fact, policy, permission, or evidence. Mention a long gap only when reliable loaded time proves it; never guess. Keep uncertain memory explicit. Follow a loaded open thread once at a natural non-work moment, never during active work or by outbound message. Apply a confirmed repair lesson through changed behavior without retelling or reassurance; never change instructions, permissions, or evidence.`;
|
|
16
|
-
|
|
17
|
-
const CONVERSATION_BOUNDARY = `## Conversation
|
|
18
|
-
|
|
19
|
-
DM: answer the person. Chat or status? Casual: answer once; no work appendix. Route technical work updates to the responsible teammate; do not copy the details back into the person's DM. Report work only on request, needed decision, or relevant blocker. Never expose checkpoints, hashes, paths, tool/Cron/hook diagnostics, or other agents' assignments; keep pauses internal. Missing task-critical fact? Ask the responsible person or agent one concise question.`;
|
|
20
|
-
|
|
21
|
-
function naturalPresenceSystemBlock(env = process.env) {
|
|
22
|
-
const presence = personalityContextEnabled(env) ? PERSONALITY_PRESENCE_BLOCK : NATURAL_PRESENCE_BLOCK;
|
|
23
|
-
return `${presence}\n\n${CONVERSATION_BOUNDARY}`;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
module.exports = {
|
|
27
|
-
naturalPresenceSystemBlock,
|
|
28
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
function buildNoninteractiveShellEnv(parentEnv, shellPath) {
|
|
4
|
-
return {
|
|
5
|
-
...(parentEnv ?? {}),
|
|
6
|
-
NO_COLOR: '1',
|
|
7
|
-
TERM: 'dumb',
|
|
8
|
-
GIT_TERMINAL_PROMPT: '0',
|
|
9
|
-
GIT_ASKPASS: '',
|
|
10
|
-
SSH_ASKPASS: '',
|
|
11
|
-
SSH_ASKPASS_REQUIRE: 'never',
|
|
12
|
-
GCM_INTERACTIVE: 'Never',
|
|
13
|
-
SHELL: String(shellPath ?? ''),
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
module.exports = {
|
|
18
|
-
buildNoninteractiveShellEnv,
|
|
19
|
-
};
|
package/bin/observer-hooks.cjs
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
async function runHookPhases(hooks, run, signal) {
|
|
4
|
-
const regular = hooks.filter(hook => hook.observer !== true);
|
|
5
|
-
const results = await Promise.all(regular.map(run));
|
|
6
|
-
// A fail-open guard error is not proof that the event was accepted.
|
|
7
|
-
if (signal?.aborted || results.some(result => result.action === 'block'
|
|
8
|
-
|| result.timedOut === true || result.exitCode !== 0)) return results;
|
|
9
|
-
await Promise.allSettled(hooks.filter(hook => hook.observer === true).map(run));
|
|
10
|
-
// Observers have no authority to deny work or add instructions to the agent.
|
|
11
|
-
return results;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
module.exports = { runHookPhases };
|