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,470 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""codebase-index — lokaler semantischer Index ueber einen Git-Code-Baum.
|
|
3
|
-
|
|
4
|
-
F1-Bau nach Konzept (handoffs/codebase-verstaendnis-lokal-konzept.md),
|
|
5
|
-
Auflagen Dieter 43102:
|
|
6
|
-
- Streaming in vorallokierte float32-Matrix (memmap), KEINE Vektoren-Liste
|
|
7
|
-
(Run-3-Befund: Liste trieb RAM-Spitze auf 10,5 GB).
|
|
8
|
-
- Inkrementell: Content-Hash je Datei im Manifest, Delta statt Vollindex.
|
|
9
|
-
- Query mit Frische-Auskunft + Selbstauskunft in JEDER Antwort.
|
|
10
|
-
- Query-Fehlschlag-Log lokal (query-log.jsonl) — der Moat.
|
|
11
|
-
|
|
12
|
-
Aufruf:
|
|
13
|
-
python codebase_index.py build <repo>
|
|
14
|
-
python codebase_index.py update <repo>
|
|
15
|
-
python codebase_index.py query <repo> "<frage>" [--top 5]
|
|
16
|
-
python codebase_index.py sample <repo>
|
|
17
|
-
|
|
18
|
-
Index-Ort: ~/.blun/codebase-index/<workspace-hash>/ (sichtbar, mit Rueckweg).
|
|
19
|
-
"""
|
|
20
|
-
import hashlib
|
|
21
|
-
import json
|
|
22
|
-
import os
|
|
23
|
-
import subprocess
|
|
24
|
-
import sys
|
|
25
|
-
import time
|
|
26
|
-
from datetime import datetime, timezone
|
|
27
|
-
|
|
28
|
-
import numpy as np
|
|
29
|
-
|
|
30
|
-
CODE_EXT = (
|
|
31
|
-
".ts", ".tsx", ".js", ".mjs", ".cjs", ".py", ".html", ".css",
|
|
32
|
-
".json", ".md", ".toml", ".yml", ".yaml", ".sh", ".ps1", ".sql",
|
|
33
|
-
)
|
|
34
|
-
CHUNK_SIZE = 1000
|
|
35
|
-
CHUNK_OVERLAP = 100
|
|
36
|
-
EMBED_DIM = 384
|
|
37
|
-
BATCH = 256
|
|
38
|
-
MODEL_NAME = "BAAI/bge-small-en-v1.5"
|
|
39
|
-
JINA_CODE_MODEL_NAME = "jinaai/jina-embeddings-v2-base-code"
|
|
40
|
-
KNOWN_MODELS = {
|
|
41
|
-
MODEL_NAME: 384,
|
|
42
|
-
JINA_CODE_MODEL_NAME: 768,
|
|
43
|
-
}
|
|
44
|
-
MODEL_ALIASES = {
|
|
45
|
-
"bge": MODEL_NAME,
|
|
46
|
-
"jina-code": JINA_CODE_MODEL_NAME,
|
|
47
|
-
}
|
|
48
|
-
AUTO_MODEL_ORDER = (JINA_CODE_MODEL_NAME, MODEL_NAME)
|
|
49
|
-
|
|
50
|
-
# Iteration 2 (Dieter 43135): Rausch-Filter — Backup-Kopien und Vendor-
|
|
51
|
-
# Buelle machten 66% aller Index-Rows aus und dominieren Top-5.
|
|
52
|
-
EXCLUDE_PREFIXES = ("backup-", "vendor/")
|
|
53
|
-
|
|
54
|
-
# Aktives Modell + Dim zur Laufzeit (wird per --model ueberschrieben).
|
|
55
|
-
_active_model_name = MODEL_NAME
|
|
56
|
-
_active_dim = EMBED_DIM
|
|
57
|
-
|
|
58
|
-
# Stichprobe V3 (Dieter 43141): Fragen PARAPHRASIERT aus gelesenem
|
|
59
|
-
# Dateiinhalt — keine wörtlichen Bezeichner/Funktionsnamen/Kommentare aus
|
|
60
|
-
# den Dateien (misst semantische Suche, nicht Wortgleichheit).
|
|
61
|
-
# api-chat.js: routet Chat-Nachrichten ans Modell, Fallback-Kette, Stream.
|
|
62
|
-
# terminal-manager.js: startet Shell-Prozesse mit Sandbox-/Approval-Modi.
|
|
63
|
-
# renderer-view-shell.js: wechselt Login-/Willkommens-/Chat-Ansicht.
|
|
64
|
-
SAMPLE_QUERIES = [
|
|
65
|
-
("how are conversation messages routed to the right model with a fallback chain", "api-chat"),
|
|
66
|
-
("starting sandboxed shell processes with approval modes and output history", "terminal-manager"),
|
|
67
|
-
("switching between sign-in screen, welcome page and main conversation view", "renderer-view-shell"),
|
|
68
|
-
]
|
|
69
|
-
|
|
70
|
-
SELSTAUSKUNFT = (
|
|
71
|
-
"HINWEIS: semantischer Index, kann falsch liegen — Fundstelle vor "
|
|
72
|
-
"Verwendung in der Datei verifizieren."
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
def canonical_repo_path(repo: str) -> str:
|
|
77
|
-
return os.path.normcase(os.path.realpath(os.path.abspath(repo)))
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def index_root() -> str:
|
|
81
|
-
return os.path.join(os.path.expanduser("~"), ".blun", "codebase-index")
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def index_dir(repo: str) -> str:
|
|
85
|
-
raw = canonical_repo_path(repo) + "|" + _active_model_name
|
|
86
|
-
key = hashlib.sha256(raw.encode()).hexdigest()[:12]
|
|
87
|
-
return os.path.join(index_root(), key)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def normalize_model_selector(selector: str) -> str:
|
|
91
|
-
if selector == "auto":
|
|
92
|
-
return selector
|
|
93
|
-
model = MODEL_ALIASES.get(selector, selector)
|
|
94
|
-
if model not in KNOWN_MODELS:
|
|
95
|
-
allowed = ", ".join(("auto", *MODEL_ALIASES, *KNOWN_MODELS))
|
|
96
|
-
raise ValueError(f"Unsupported index model {selector!r}; choose one of: {allowed}")
|
|
97
|
-
return model
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
def find_existing_indexes(repo: str) -> list[tuple[str, dict]]:
|
|
101
|
-
root = index_root()
|
|
102
|
-
if not os.path.isdir(root):
|
|
103
|
-
return []
|
|
104
|
-
canonical_repo = canonical_repo_path(repo)
|
|
105
|
-
canonical_root = os.path.realpath(root)
|
|
106
|
-
candidates = []
|
|
107
|
-
for entry in os.scandir(root):
|
|
108
|
-
if not entry.is_dir(follow_symlinks=False):
|
|
109
|
-
continue
|
|
110
|
-
directory = os.path.realpath(entry.path)
|
|
111
|
-
try:
|
|
112
|
-
if os.path.commonpath((canonical_root, directory)) != canonical_root:
|
|
113
|
-
continue
|
|
114
|
-
except ValueError:
|
|
115
|
-
continue
|
|
116
|
-
manifest_path = os.path.join(directory, "manifest.json")
|
|
117
|
-
vectors_path = os.path.join(directory, "vectors.npy")
|
|
118
|
-
if not os.path.isfile(manifest_path) or not os.path.isfile(vectors_path):
|
|
119
|
-
continue
|
|
120
|
-
try:
|
|
121
|
-
manifest = load_manifest(directory)
|
|
122
|
-
except (OSError, ValueError, TypeError):
|
|
123
|
-
continue
|
|
124
|
-
model = manifest.get("model")
|
|
125
|
-
if model not in KNOWN_MODELS or manifest.get("dim") != KNOWN_MODELS[model]:
|
|
126
|
-
continue
|
|
127
|
-
manifest_repo = manifest.get("repo")
|
|
128
|
-
if not isinstance(manifest_repo, str):
|
|
129
|
-
continue
|
|
130
|
-
if canonical_repo_path(manifest_repo) != canonical_repo:
|
|
131
|
-
continue
|
|
132
|
-
candidates.append((directory, manifest))
|
|
133
|
-
return sorted(candidates, key=lambda item: item[0])
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
def resolve_existing_index(repo: str, selector: str = "auto") -> tuple[str, dict]:
|
|
137
|
-
requested = normalize_model_selector(selector)
|
|
138
|
-
candidates = find_existing_indexes(repo)
|
|
139
|
-
model_order = AUTO_MODEL_ORDER if requested == "auto" else (requested,)
|
|
140
|
-
for model in model_order:
|
|
141
|
-
matches = [item for item in candidates if item[1]["model"] == model]
|
|
142
|
-
if matches:
|
|
143
|
-
return max(
|
|
144
|
-
matches,
|
|
145
|
-
key=lambda item: (str(item[1].get("built_at", "")), item[0]),
|
|
146
|
-
)
|
|
147
|
-
available = sorted({item[1]["model"] for item in candidates})
|
|
148
|
-
suffix = f"; available for this repository: {', '.join(available)}" if available else ""
|
|
149
|
-
raise FileNotFoundError(
|
|
150
|
-
f"No compatible codebase index for {os.path.abspath(repo)!r} and selector {selector!r}{suffix}"
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
def activate_model(model: str, dim: int | None = None) -> None:
|
|
155
|
-
global _active_model_name, _active_dim
|
|
156
|
-
normalized = normalize_model_selector(model)
|
|
157
|
-
if normalized == "auto":
|
|
158
|
-
raise ValueError("auto can select an existing index only; it cannot build a new one")
|
|
159
|
-
expected_dim = KNOWN_MODELS[normalized]
|
|
160
|
-
if dim is not None and dim != expected_dim:
|
|
161
|
-
raise ValueError(
|
|
162
|
-
f"Index dimension {dim} does not match {normalized} ({expected_dim})"
|
|
163
|
-
)
|
|
164
|
-
_active_model_name = normalized
|
|
165
|
-
_active_dim = expected_dim
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
def git_files(repo: str) -> list[str]:
|
|
169
|
-
out = subprocess.run(
|
|
170
|
-
["git", "ls-files"], cwd=repo, capture_output=True, text=True, check=True
|
|
171
|
-
).stdout.splitlines()
|
|
172
|
-
return [
|
|
173
|
-
f for f in out
|
|
174
|
-
if f.lower().endswith(CODE_EXT) and not f.startswith(EXCLUDE_PREFIXES)
|
|
175
|
-
]
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
def git_head(repo: str) -> str:
|
|
179
|
-
return subprocess.run(
|
|
180
|
-
["git", "rev-parse", "--short", "HEAD"],
|
|
181
|
-
cwd=repo, capture_output=True, text=True, check=True,
|
|
182
|
-
).stdout.strip()
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
def sha_file(path: str) -> str:
|
|
186
|
-
h = hashlib.sha256()
|
|
187
|
-
with open(path, "rb") as fh:
|
|
188
|
-
for block in iter(lambda: fh.read(1 << 20), b""):
|
|
189
|
-
h.update(block)
|
|
190
|
-
return h.hexdigest()
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
def chunk_text(text: str) -> list[str]:
|
|
194
|
-
step = CHUNK_SIZE - CHUNK_OVERLAP
|
|
195
|
-
return [
|
|
196
|
-
text[i : i + CHUNK_SIZE]
|
|
197
|
-
for i in range(0, len(text), step)
|
|
198
|
-
if text[i : i + CHUNK_SIZE].strip()
|
|
199
|
-
]
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
def load_model():
|
|
203
|
-
from fastembed import TextEmbedding
|
|
204
|
-
|
|
205
|
-
return TextEmbedding(_active_model_name)
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
def collect_chunks(repo: str, files: list[str]):
|
|
209
|
-
"""Liest Dateien, liefert (texts, meta, file_spans, read_errors)."""
|
|
210
|
-
texts, meta, spans, read_errors = [], [], {}, 0
|
|
211
|
-
for rel in files:
|
|
212
|
-
try:
|
|
213
|
-
with open(os.path.join(repo, rel), encoding="utf-8", errors="replace") as fh:
|
|
214
|
-
chunks = chunk_text(fh.read())
|
|
215
|
-
except OSError:
|
|
216
|
-
read_errors += 1
|
|
217
|
-
continue
|
|
218
|
-
start = len(texts)
|
|
219
|
-
for idx, chunk in enumerate(chunks):
|
|
220
|
-
texts.append(chunk)
|
|
221
|
-
meta.append(f"{rel}#{idx}")
|
|
222
|
-
spans[rel] = [start, len(texts)]
|
|
223
|
-
return texts, meta, spans, read_errors
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
def embed_into(model, texts: list[str], matrix, offset: int) -> None:
|
|
227
|
-
"""Streamt Embeddings batchweise DIREKT in die (vorallokierte) Matrix."""
|
|
228
|
-
for i in range(0, len(texts), BATCH):
|
|
229
|
-
vecs = list(model.embed(texts[i : i + BATCH]))
|
|
230
|
-
matrix[offset + i : offset + i + len(vecs)] = np.asarray(
|
|
231
|
-
vecs, dtype=np.float32
|
|
232
|
-
)
|
|
233
|
-
if i % (BATCH * 8) == 0:
|
|
234
|
-
print(f"PROGRESS embedded={offset + i}", flush=True)
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
def write_matrix(dirpath: str, total: int):
|
|
238
|
-
return np.lib.format.open_memmap(
|
|
239
|
-
os.path.join(dirpath, "vectors.npy"),
|
|
240
|
-
mode="w+", dtype=np.float32, shape=(total, _active_dim),
|
|
241
|
-
)
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
def save_manifest(dirpath: str, repo: str, files_hashes: dict, spans: dict,
|
|
245
|
-
meta: list[str], build_s: float) -> None:
|
|
246
|
-
manifest = {
|
|
247
|
-
"repo": os.path.abspath(repo),
|
|
248
|
-
"head": git_head(repo),
|
|
249
|
-
"built_at": datetime.now(timezone.utc).isoformat(),
|
|
250
|
-
"model": _active_model_name,
|
|
251
|
-
"dim": _active_dim,
|
|
252
|
-
"chunk_size": CHUNK_SIZE,
|
|
253
|
-
"chunk_overlap": CHUNK_OVERLAP,
|
|
254
|
-
"chunks": len(meta),
|
|
255
|
-
"build_s": round(build_s, 2),
|
|
256
|
-
"files": files_hashes,
|
|
257
|
-
"spans": spans,
|
|
258
|
-
"meta": meta,
|
|
259
|
-
}
|
|
260
|
-
with open(os.path.join(dirpath, "manifest.json"), "w", encoding="utf-8") as fh:
|
|
261
|
-
json.dump(manifest, fh)
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
def load_manifest(dirpath: str) -> dict:
|
|
265
|
-
with open(os.path.join(dirpath, "manifest.json"), encoding="utf-8") as fh:
|
|
266
|
-
return json.load(fh)
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
def cmd_build(repo: str) -> None:
|
|
270
|
-
t0 = time.perf_counter()
|
|
271
|
-
files = git_files(repo)
|
|
272
|
-
print(f"BUILD files={len(files)} repo={repo}")
|
|
273
|
-
texts, meta, spans, read_errors = collect_chunks(repo, files)
|
|
274
|
-
print(f"CHUNKS total={len(texts)} read_errors={read_errors}")
|
|
275
|
-
|
|
276
|
-
dirpath = index_dir(repo)
|
|
277
|
-
os.makedirs(dirpath, exist_ok=True)
|
|
278
|
-
matrix = write_matrix(dirpath, len(texts))
|
|
279
|
-
model = load_model()
|
|
280
|
-
t_embed = time.perf_counter()
|
|
281
|
-
embed_into(model, texts, matrix, 0)
|
|
282
|
-
matrix.flush()
|
|
283
|
-
build_s = time.perf_counter() - t0
|
|
284
|
-
embed_s = time.perf_counter() - t_embed
|
|
285
|
-
|
|
286
|
-
hashes = {rel: sha_file(os.path.join(repo, rel)) for rel in spans}
|
|
287
|
-
save_manifest(dirpath, repo, hashes, spans, meta, build_s)
|
|
288
|
-
mb = len(texts) * _active_dim * 4 / 1e6
|
|
289
|
-
print(
|
|
290
|
-
f"DONE build_s={build_s:.1f} embed_s={embed_s:.1f} chunks={len(texts)} "
|
|
291
|
-
f"index_mb={mb:.1f} dir={dirpath}",
|
|
292
|
-
flush=True,
|
|
293
|
-
)
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
def cmd_update(repo: str) -> None:
|
|
297
|
-
"""Delta: geaenderte/neue Dateien neu einbetten, geloeschte entfernen."""
|
|
298
|
-
t0 = time.perf_counter()
|
|
299
|
-
dirpath = index_dir(repo)
|
|
300
|
-
man = load_manifest(dirpath)
|
|
301
|
-
old_hashes: dict = man["files"]
|
|
302
|
-
old_spans: dict = man["spans"]
|
|
303
|
-
old_meta: list[str] = man["meta"]
|
|
304
|
-
old_mat = np.load(os.path.join(dirpath, "vectors.npy"))
|
|
305
|
-
|
|
306
|
-
files = git_files(repo)
|
|
307
|
-
texts_new, meta_new, spans_new, read_errors = collect_chunks(repo, files)
|
|
308
|
-
new_hashes = {rel: sha_file(os.path.join(repo, rel)) for rel in spans_new}
|
|
309
|
-
|
|
310
|
-
changed = {r for r, h in new_hashes.items() if old_hashes.get(r) != h}
|
|
311
|
-
deleted = set(old_hashes) - set(new_hashes)
|
|
312
|
-
if not changed and not deleted:
|
|
313
|
-
print(f"UPDATE noop delta_s={time.perf_counter() - t0:.1f} head={git_head(repo)}")
|
|
314
|
-
return
|
|
315
|
-
|
|
316
|
-
# Behaltene Dateien: weder geaendert noch geloescht.
|
|
317
|
-
kept_rels = [r for r in old_spans if r not in changed and r not in deleted]
|
|
318
|
-
|
|
319
|
-
changed_chunks: dict[str, list[str]] = {}
|
|
320
|
-
for rel in sorted(changed):
|
|
321
|
-
with open(os.path.join(repo, rel), encoding="utf-8", errors="replace") as fh:
|
|
322
|
-
changed_chunks[rel] = chunk_text(fh.read())
|
|
323
|
-
|
|
324
|
-
total = sum(old_spans[r][1] - old_spans[r][0] for r in kept_rels) + sum(
|
|
325
|
-
len(c) for c in changed_chunks.values()
|
|
326
|
-
)
|
|
327
|
-
matrix = write_matrix(dirpath, total)
|
|
328
|
-
model = load_model()
|
|
329
|
-
|
|
330
|
-
spans_out, meta_out, cursor = {}, [], 0
|
|
331
|
-
for rel in kept_rels:
|
|
332
|
-
a, b = old_spans[rel]
|
|
333
|
-
matrix[cursor : cursor + (b - a)] = old_mat[a:b]
|
|
334
|
-
spans_out[rel] = [cursor, cursor + (b - a)]
|
|
335
|
-
meta_out.extend(old_meta[a:b])
|
|
336
|
-
cursor += b - a
|
|
337
|
-
for rel in sorted(changed_chunks):
|
|
338
|
-
chunks = changed_chunks[rel]
|
|
339
|
-
embed_into(model, chunks, matrix, cursor)
|
|
340
|
-
spans_out[rel] = [cursor, cursor + len(chunks)]
|
|
341
|
-
meta_out.extend(f"{rel}#{i}" for i in range(len(chunks)))
|
|
342
|
-
cursor += len(chunks)
|
|
343
|
-
matrix.flush()
|
|
344
|
-
|
|
345
|
-
save_manifest(dirpath, repo, new_hashes, spans_out, meta_out,
|
|
346
|
-
time.perf_counter() - t0)
|
|
347
|
-
print(
|
|
348
|
-
f"UPDATE changed={len(changed)} deleted={len(deleted)} "
|
|
349
|
-
f"delta_s={time.perf_counter() - t0:.1f} chunks={total}",
|
|
350
|
-
flush=True,
|
|
351
|
-
)
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
def freshness(repo: str, man: dict) -> str:
|
|
355
|
-
current = git_head(repo)
|
|
356
|
-
same = "== HEAD" if current == man["head"] else f"Index {man['head']} != HEAD {current} — 'update' faellig"
|
|
357
|
-
return f"Index-Stand: {man['head']} ({man['built_at']}), {man['chunks']} Chunks | {same}"
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
def cmd_query(repo: str, question: str, top: int, selector: str = "auto") -> int:
|
|
361
|
-
dirpath, man = resolve_existing_index(repo, selector)
|
|
362
|
-
activate_model(man["model"], man["dim"])
|
|
363
|
-
mat = np.load(os.path.join(dirpath, "vectors.npy"))
|
|
364
|
-
norms = np.linalg.norm(mat, axis=1, keepdims=True)
|
|
365
|
-
mat_n = mat / np.maximum(norms, 1e-12)
|
|
366
|
-
|
|
367
|
-
model = load_model()
|
|
368
|
-
t0 = time.perf_counter()
|
|
369
|
-
qv = np.asarray(list(model.embed([question])), dtype=np.float32)[0]
|
|
370
|
-
qv = qv / max(np.linalg.norm(qv), 1e-12)
|
|
371
|
-
scores = mat_n @ qv
|
|
372
|
-
idx = np.argsort(scores)[::-1][:top]
|
|
373
|
-
latency_ms = (time.perf_counter() - t0) * 1000
|
|
374
|
-
|
|
375
|
-
hits = [(man["meta"][i], round(float(scores[i]), 4)) for i in idx]
|
|
376
|
-
print(SELSTAUSKUNFT)
|
|
377
|
-
print(f"Index-Modell: {man['model']}")
|
|
378
|
-
print(freshness(repo, man))
|
|
379
|
-
for m, s in hits:
|
|
380
|
-
print(f" {s:.4f} {m}")
|
|
381
|
-
print(f"query_ms={latency_ms:.1f}")
|
|
382
|
-
|
|
383
|
-
log_path = os.path.join(dirpath, "query-log.jsonl")
|
|
384
|
-
with open(log_path, "a", encoding="utf-8") as fh:
|
|
385
|
-
fh.write(json.dumps({
|
|
386
|
-
"ts": datetime.now(timezone.utc).isoformat(),
|
|
387
|
-
"query": question,
|
|
388
|
-
"top": hits,
|
|
389
|
-
"query_ms": round(latency_ms, 1),
|
|
390
|
-
"index_head": man["head"],
|
|
391
|
-
}) + "\n")
|
|
392
|
-
return 0
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
def cmd_sample(repo: str, selector: str = "auto") -> int:
|
|
396
|
-
"""Gate: Stichprobe aus dem Subjekt-Baum, Ziel >= 2/3 in Top-5."""
|
|
397
|
-
dirpath, man = resolve_existing_index(repo, selector)
|
|
398
|
-
activate_model(man["model"], man["dim"])
|
|
399
|
-
mat = np.load(os.path.join(dirpath, "vectors.npy"))
|
|
400
|
-
norms = np.linalg.norm(mat, axis=1, keepdims=True)
|
|
401
|
-
mat_n = mat / np.maximum(norms, 1e-12)
|
|
402
|
-
model = load_model()
|
|
403
|
-
|
|
404
|
-
hits_count = 0
|
|
405
|
-
for question, expected in SAMPLE_QUERIES:
|
|
406
|
-
qv = np.asarray(list(model.embed([question])), dtype=np.float32)[0]
|
|
407
|
-
qv = qv / max(np.linalg.norm(qv), 1e-12)
|
|
408
|
-
scores = mat_n @ qv
|
|
409
|
-
idx = np.argsort(scores)[::-1][:5]
|
|
410
|
-
hits = [(man["meta"][i], round(float(scores[i]), 4)) for i in idx]
|
|
411
|
-
ok = any(expected in m for m, _ in hits)
|
|
412
|
-
hits_count += ok
|
|
413
|
-
print(f"SAMPLE {'HIT ' if ok else 'MISS'} {question!r} expected={expected}")
|
|
414
|
-
for m, s in hits:
|
|
415
|
-
print(f" {s:.4f} {m}")
|
|
416
|
-
verdict = "PASS" if hits_count >= 2 else "FAIL"
|
|
417
|
-
print(f"SAMPLE_RESULT {hits_count}/3 gate=2/3 -> {verdict}")
|
|
418
|
-
return 0 if hits_count >= 2 else 1
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
def main() -> int:
|
|
422
|
-
global _active_model_name, _active_dim
|
|
423
|
-
if len(sys.argv) < 3:
|
|
424
|
-
print(__doc__)
|
|
425
|
-
return 2
|
|
426
|
-
cmd, repo = sys.argv[1], sys.argv[2]
|
|
427
|
-
selector = sys.argv[sys.argv.index("--model") + 1] if "--model" in sys.argv else (
|
|
428
|
-
"auto" if cmd in ("query", "sample") else MODEL_NAME
|
|
429
|
-
)
|
|
430
|
-
if cmd in ("build", "update"):
|
|
431
|
-
try:
|
|
432
|
-
activate_model(selector)
|
|
433
|
-
except ValueError as error:
|
|
434
|
-
print(f"MODEL_ERROR {error}")
|
|
435
|
-
return 2
|
|
436
|
-
from fastembed import TextEmbedding
|
|
437
|
-
|
|
438
|
-
dims = {m["model"]: m.get("dim") for m in TextEmbedding.list_supported_models()}
|
|
439
|
-
if _active_model_name not in dims:
|
|
440
|
-
print(f"MODEL_UNKNOWN {_active_model_name} — nicht im fastembed-Angebot")
|
|
441
|
-
return 2
|
|
442
|
-
_active_dim = int(dims[_active_model_name])
|
|
443
|
-
print(f"MODEL {_active_model_name} dim={_active_dim}")
|
|
444
|
-
if cmd == "build":
|
|
445
|
-
cmd_build(repo)
|
|
446
|
-
return 0
|
|
447
|
-
if cmd == "update":
|
|
448
|
-
cmd_update(repo)
|
|
449
|
-
return 0
|
|
450
|
-
if cmd == "query":
|
|
451
|
-
top = 5
|
|
452
|
-
if "--top" in sys.argv:
|
|
453
|
-
top = int(sys.argv[sys.argv.index("--top") + 1])
|
|
454
|
-
try:
|
|
455
|
-
return cmd_query(repo, sys.argv[3], top, selector)
|
|
456
|
-
except (FileNotFoundError, ValueError) as error:
|
|
457
|
-
print(f"INDEX_ERROR {error}")
|
|
458
|
-
return 2
|
|
459
|
-
if cmd == "sample":
|
|
460
|
-
try:
|
|
461
|
-
return cmd_sample(repo, selector)
|
|
462
|
-
except (FileNotFoundError, ValueError) as error:
|
|
463
|
-
print(f"INDEX_ERROR {error}")
|
|
464
|
-
return 2
|
|
465
|
-
print(f"unknown command: {cmd}")
|
|
466
|
-
return 2
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
if __name__ == "__main__":
|
|
470
|
-
sys.exit(main())
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: agent-browser
|
|
3
|
-
description: Automate and verify browser workflows with the bundled Agent Browser contract while keeping external runtime installation and activation under explicit user control.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Agent Browser
|
|
7
|
-
|
|
8
|
-
Use this skill when a task needs browser navigation, form interaction, screenshots, DOM inspection, or end-to-end UI verification.
|
|
9
|
-
|
|
10
|
-
## Workflow
|
|
11
|
-
|
|
12
|
-
1. Read [references/runtime.md](references/runtime.md) before selecting the runtime.
|
|
13
|
-
2. Prefer semantic targets and observable page state over coordinate clicks or fixed delays.
|
|
14
|
-
3. Keep an existing user MCP entry authoritative. Never add a second process for the same browser server.
|
|
15
|
-
4. Ask before enabling or downloading an external runtime. A packaged descriptor is not proof that the runtime is installed or running.
|
|
16
|
-
5. Preserve the user's session, credentials, and browser profile unless the task explicitly requires a clean isolated context.
|
|
17
|
-
6. Report the page state, screenshots, console errors, and network evidence actually observed.
|
|
18
|
-
|
|
19
|
-
Do not claim a browser workflow passed from source inspection alone.
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# Agent Browser Runtime Contract
|
|
2
|
-
|
|
3
|
-
- Tested contract: Agent Browser 0.31.2 or a compatible newer release.
|
|
4
|
-
- MCP entrypoint: `agent-browser mcp`.
|
|
5
|
-
- The standard descriptor pins `agent-browser@0.31.2` and is disabled until the user opts in.
|
|
6
|
-
- The executable is external and is not bundled with BLUN Code. Enabling the descriptor may require a package download.
|
|
7
|
-
- The default core MCP profile is sufficient for navigation and inspection. Add broader capabilities only for a named task.
|
|
8
|
-
- Reuse an existing equivalent MCP entry. Do not start a duplicate browser process.
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: blun-session-inspector
|
|
3
|
-
description: Inspect local BLUN Code session health read-only. Use when asked about compactions, token usage, tool-call volume, offloaded tool results, provider steps, or a session that appears slow or stuck.
|
|
4
|
-
license: MIT
|
|
5
|
-
compatibility: designed for BLUN Code
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# BLUN Session Inspector
|
|
9
|
-
|
|
10
|
-
Use the bundled script instead of manually reading `wire.jsonl` or telemetry files. It reports counts and timing metadata without returning prompts, system instructions, tool arguments, tool results, private paths, or hidden reasoning.
|
|
11
|
-
|
|
12
|
-
In addition to wire and telemetry counts, the summary reads only structured `turn request tools` fields from the session's own BLUN log. It reports eligible, selected, and deferred schema counts, estimated schema tokens avoided, and suppression reasons. Micro-compaction telemetry also reports how many completed tool-call arguments were relieved and the estimated argument tokens saved. Argument contents are never returned. Other log lines are ignored and never emitted.
|
|
13
|
-
|
|
14
|
-
Resolve `SKILL_DIR` to the directory containing this file. Do not assume a user-specific installation path.
|
|
15
|
-
|
|
16
|
-
List recent sessions:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
node "$SKILL_DIR/scripts/inspect-session.cjs" --list 20
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Inspect one session by full ID or unique prefix:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
node "$SKILL_DIR/scripts/inspect-session.cjs" SESSION_ID
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Use another profile or app home only when needed:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
node "$SKILL_DIR/scripts/inspect-session.cjs" SESSION_ID --profile PROFILE
|
|
32
|
-
node "$SKILL_DIR/scripts/inspect-session.cjs" SESSION_ID --blun-home PATH
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Add `--include-metadata` only when the work directory and session directory are relevant. Summarize the JSON instead of pasting it verbatim. Distinguish stored counts from your interpretation, mention warnings, and do not claim that telemetry covers periods before an event was introduced.
|
|
36
|
-
|
|
37
|
-
Keep inspection read-only. Never edit, delete, compact, resume, reload, or restart a session as part of diagnosis.
|
|
38
|
-
|
|
39
|
-
This skill adopts the read-only, smallest-useful-view approach from the MIT-licensed Deep Agents Thread Inspector while using BLUN Code's append-only wire and telemetry formats.
|
|
40
|
-
|
|
41
|
-
Source: https://github.com/langchain-ai/deepagents/tree/main/libs/code/deepagents_code/built_in_skills/deepagents-thread-inspector
|