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,99 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
canonicalEditedToolInputJson,
|
|
5
|
-
validateEditedToolInputObject,
|
|
6
|
-
} = require('./editable-tool-approval-policy.cjs');
|
|
7
|
-
|
|
8
|
-
class EditableToolReprepareError extends Error {
|
|
9
|
-
constructor(code, message) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.name = 'EditableToolReprepareError';
|
|
12
|
-
this.code = code;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function fail(code, message) {
|
|
17
|
-
throw new EditableToolReprepareError(code, message);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function buildEditedToolCallPlan({
|
|
21
|
-
step,
|
|
22
|
-
call,
|
|
23
|
-
editedArgs,
|
|
24
|
-
editCount,
|
|
25
|
-
preflightToolCall,
|
|
26
|
-
} = {}) {
|
|
27
|
-
if (editCount !== 0) {
|
|
28
|
-
fail('EDITED_REPREPARE_ALREADY_EDITED', 'A tool call may be edited at most once.');
|
|
29
|
-
}
|
|
30
|
-
if (call?.kind !== 'runnable' || call.toolCall === null || typeof call.toolCall !== 'object' || typeof call.toolCall.id !== 'string' || typeof call.toolCall.name !== 'string') {
|
|
31
|
-
fail('EDITED_REPREPARE_CALL_INVALID', 'Only a runnable tool call can be re-prepared.');
|
|
32
|
-
}
|
|
33
|
-
if (!Array.isArray(step?.toolCalls) || typeof preflightToolCall !== 'function') {
|
|
34
|
-
fail('EDITED_REPREPARE_CONTEXT_INVALID', 'Edited re-preparation requires the active ordered tool-call list and preflight function.');
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const matchingIndexes = [];
|
|
38
|
-
for (let index = 0; index < step.toolCalls.length; index += 1) {
|
|
39
|
-
if (step.toolCalls[index]?.id === call.toolCall.id) matchingIndexes.push(index);
|
|
40
|
-
}
|
|
41
|
-
if (matchingIndexes.length === 0) {
|
|
42
|
-
fail('EDITED_REPREPARE_IDENTITY_MISSING', 'The edited tool call is absent from the active ordered call list.');
|
|
43
|
-
}
|
|
44
|
-
if (matchingIndexes.length !== 1) {
|
|
45
|
-
fail('EDITED_REPREPARE_IDENTITY_AMBIGUOUS', 'The edited tool-call ID is not unique in the active call list.');
|
|
46
|
-
}
|
|
47
|
-
const position = matchingIndexes[0];
|
|
48
|
-
if (step.toolCalls[position] !== call.toolCall || call.toolName !== call.toolCall.name) {
|
|
49
|
-
fail('EDITED_REPREPARE_IDENTITY_CHANGED', 'The active tool-call identity changed before re-preparation.');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const safeEditedArgs = validateEditedToolInputObject(editedArgs);
|
|
53
|
-
const patchedToolCall = Object.freeze({
|
|
54
|
-
...call.toolCall,
|
|
55
|
-
id: call.toolCall.id,
|
|
56
|
-
name: call.toolCall.name,
|
|
57
|
-
arguments: canonicalEditedToolInputJson(safeEditedArgs),
|
|
58
|
-
});
|
|
59
|
-
const patchedToolCalls = step.toolCalls.slice();
|
|
60
|
-
patchedToolCalls[position] = patchedToolCall;
|
|
61
|
-
const editedStep = {
|
|
62
|
-
...step,
|
|
63
|
-
toolCalls: Object.freeze(patchedToolCalls),
|
|
64
|
-
};
|
|
65
|
-
const repreflight = preflightToolCall(editedStep, patchedToolCall);
|
|
66
|
-
if (repreflight === null || typeof repreflight !== 'object') {
|
|
67
|
-
fail('EDITED_REPREPARE_PREFLIGHT_INVALID', 'Edited tool preflight returned no result.');
|
|
68
|
-
}
|
|
69
|
-
if (repreflight.toolCall?.id !== call.toolCall.id || repreflight.toolCall?.name !== call.toolCall.name || repreflight.toolName !== call.toolName) {
|
|
70
|
-
fail('EDITED_REPREPARE_IDENTITY_CHANGED', 'Edited preflight changed the immutable tool identity.');
|
|
71
|
-
}
|
|
72
|
-
if (repreflight.kind === 'rejected') {
|
|
73
|
-
return Object.freeze({
|
|
74
|
-
kind: 'rejected',
|
|
75
|
-
step: editedStep,
|
|
76
|
-
call: repreflight,
|
|
77
|
-
editCount: 1,
|
|
78
|
-
output: repreflight.output,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
if (repreflight.kind !== 'runnable') {
|
|
82
|
-
fail('EDITED_REPREPARE_PREFLIGHT_INVALID', 'Edited preflight returned an unsupported call state.');
|
|
83
|
-
}
|
|
84
|
-
if (repreflight.tool !== call.tool) {
|
|
85
|
-
fail('EDITED_REPREPARE_REGISTRY_CHANGED', 'The authoritative tool registry entry changed during edited approval.');
|
|
86
|
-
}
|
|
87
|
-
return Object.freeze({
|
|
88
|
-
kind: 'runnable',
|
|
89
|
-
step: editedStep,
|
|
90
|
-
call: repreflight,
|
|
91
|
-
editCount: 1,
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
module.exports = Object.freeze({
|
|
96
|
-
EditableToolReprepareError,
|
|
97
|
-
buildEditedToolCallPlan,
|
|
98
|
-
});
|
|
99
|
-
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
function joinSystemPrompt(base, append) {
|
|
4
|
-
if (append.length === 0) return base;
|
|
5
|
-
return base.length === 0 ? append : `${base}\n\n${append}`;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
function createEffectiveSystemPromptResolver(joinPrompts = joinSystemPrompt) {
|
|
9
|
-
if (typeof joinPrompts !== 'function') {
|
|
10
|
-
throw new TypeError('joinPrompts must be a function');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
let initialized = false;
|
|
14
|
-
let cachedBase = '';
|
|
15
|
-
let cachedAppend = '';
|
|
16
|
-
let cachedPrompt = '';
|
|
17
|
-
|
|
18
|
-
return function resolveEffectiveSystemPrompt(base, append) {
|
|
19
|
-
if (initialized && base === cachedBase && append === cachedAppend) {
|
|
20
|
-
return cachedPrompt;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
cachedPrompt = joinPrompts(base, append);
|
|
24
|
-
cachedBase = base;
|
|
25
|
-
cachedAppend = append;
|
|
26
|
-
initialized = true;
|
|
27
|
-
return cachedPrompt;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
module.exports = {
|
|
32
|
-
createEffectiveSystemPromptResolver,
|
|
33
|
-
};
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const ERROR_MEMORY_MAX_CHARS = 2_800;
|
|
4
|
-
const ERROR_MEMORY_MAX_PATTERNS = 6;
|
|
5
|
-
const CORE_PATTERN_NUMBERS = new Set([4, 9, 10, 11]);
|
|
6
|
-
const STOP_WORDS = new Set([
|
|
7
|
-
'aber', 'alle', 'alles', 'auch', 'belegt', 'beweis', 'echt', 'echte', 'echten',
|
|
8
|
-
'echter', 'eine', 'einem', 'einen', 'einer', 'das', 'den', 'fuer', 'gegen',
|
|
9
|
-
'haben', 'hier', 'immer',
|
|
10
|
-
'jetzt', 'kann', 'machen', 'mehr', 'nicht', 'noch', 'oder', 'pruefe', 'pruefen',
|
|
11
|
-
'pruefung', 'sein', 'sind', 'soll', 'und', 'vollstaendig', 'vollstaendige',
|
|
12
|
-
'wenn', 'werden', 'with', 'that',
|
|
13
|
-
'this', 'from', 'have', 'into', 'your', 'you', 'the', 'and', 'for', 'are',
|
|
14
|
-
]);
|
|
15
|
-
|
|
16
|
-
function normalizedTerms(value) {
|
|
17
|
-
return [...new Set(String(value || '')
|
|
18
|
-
.normalize('NFKD')
|
|
19
|
-
.replace(/\p{M}/gu, '')
|
|
20
|
-
.toLowerCase()
|
|
21
|
-
.match(/[\p{L}\p{N}_-]{3,}/gu) || [])]
|
|
22
|
-
.filter((term) => !STOP_WORDS.has(term));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function fieldMatchesTerm(fieldTerms, term) {
|
|
26
|
-
return fieldTerms.some((fieldTerm) => (
|
|
27
|
-
fieldTerm === term
|
|
28
|
-
|| (term.length >= 6 && fieldTerm.includes(term))
|
|
29
|
-
|| (fieldTerm.length >= 6 && term.includes(fieldTerm))
|
|
30
|
-
));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function selectRelevantErrorMemoryPatterns(patterns, query, options = {}) {
|
|
34
|
-
const maxPatterns = Math.max(1, Number(options.maxPatterns) || ERROR_MEMORY_MAX_PATTERNS);
|
|
35
|
-
const source = Array.isArray(patterns) ? patterns.filter(Boolean) : [];
|
|
36
|
-
if (source.length <= maxPatterns) return source;
|
|
37
|
-
|
|
38
|
-
const queryTerms = normalizedTerms(query);
|
|
39
|
-
const ranked = source.map((pattern, index) => {
|
|
40
|
-
const title = normalizedTerms(pattern.title);
|
|
41
|
-
const rule = normalizedTerms(pattern.rule);
|
|
42
|
-
const check = normalizedTerms(pattern.check);
|
|
43
|
-
let score = 0;
|
|
44
|
-
for (const term of queryTerms) {
|
|
45
|
-
if (fieldMatchesTerm(title, term)) score += 4;
|
|
46
|
-
if (fieldMatchesTerm(rule, term)) score += 2;
|
|
47
|
-
if (fieldMatchesTerm(check, term)) score += 1;
|
|
48
|
-
}
|
|
49
|
-
return { index, pattern, score };
|
|
50
|
-
});
|
|
51
|
-
const selectedIndexes = new Set(ranked
|
|
52
|
-
.filter(({ pattern }) => CORE_PATTERN_NUMBERS.has(Number(pattern.number)))
|
|
53
|
-
.map(({ index }) => index));
|
|
54
|
-
ranked
|
|
55
|
-
.filter(({ index, score }) => !selectedIndexes.has(index) && score > 0)
|
|
56
|
-
.sort((left, right) => right.score - left.score || left.index - right.index)
|
|
57
|
-
.slice(0, Math.max(0, maxPatterns - selectedIndexes.size))
|
|
58
|
-
.forEach(({ index }) => selectedIndexes.add(index));
|
|
59
|
-
|
|
60
|
-
if (selectedIndexes.size === 0) {
|
|
61
|
-
source.slice(-Math.min(2, maxPatterns)).forEach((pattern) => {
|
|
62
|
-
selectedIndexes.add(source.indexOf(pattern));
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
return source.filter((pattern, index) => selectedIndexes.has(index)).slice(0, maxPatterns);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function buildCompactErrorMemoryReminder(patterns) {
|
|
69
|
-
const lines = [
|
|
70
|
-
'<error-memory-check>',
|
|
71
|
-
'Vor Abschluss jede Regel pruefen; Verletzungen korrigieren oder offen benennen.',
|
|
72
|
-
];
|
|
73
|
-
|
|
74
|
-
for (const pattern of patterns) {
|
|
75
|
-
const check = pattern.check ? ` | Pruefung: ${pattern.check}` : '';
|
|
76
|
-
lines.push(`${pattern.number}. ${pattern.rule}${check}`);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
lines.push(
|
|
80
|
-
'Arbeitsweise: 3-7 sichtbare Schritte; Werkzeuge proaktiv; nach zwei gleichen Fehlern Ansatz wechseln; Schritte erst nach echtem Nachweis abschliessen; nach Zielerreichung stoppen; Teilerfolg oder Scheitern mit Grund und naechstem Schritt offen melden.',
|
|
81
|
-
'</error-memory-check>',
|
|
82
|
-
);
|
|
83
|
-
return lines.join('\n');
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function compactLegacyErrorMemoryReminder(text) {
|
|
87
|
-
const source = String(text);
|
|
88
|
-
if (!source.includes('<error-memory-check>') || !source.includes(' Regel: ')) return source;
|
|
89
|
-
|
|
90
|
-
const lines = source.split(/\r?\n/u);
|
|
91
|
-
const patterns = [];
|
|
92
|
-
for (let index = 0; index + 1 < lines.length; index += 1) {
|
|
93
|
-
const title = lines[index].match(/^\s*(\d+)\.\s+(.+)$/u);
|
|
94
|
-
const rule = lines[index + 1].match(/^\s*Regel:\s*(.+)$/u);
|
|
95
|
-
if (!title || !rule) continue;
|
|
96
|
-
const check = lines[index + 2]?.match(/^\s*Pruefung:\s*(.+)$/u);
|
|
97
|
-
patterns.push({
|
|
98
|
-
number: Number(title[1]),
|
|
99
|
-
title: title[2],
|
|
100
|
-
rule: rule[1],
|
|
101
|
-
check: check?.[1],
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
return patterns.length > 0 ? buildCompactErrorMemoryReminder(patterns) : source;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
module.exports = {
|
|
108
|
-
ERROR_MEMORY_MAX_PATTERNS,
|
|
109
|
-
ERROR_MEMORY_MAX_CHARS,
|
|
110
|
-
buildCompactErrorMemoryReminder,
|
|
111
|
-
compactLegacyErrorMemoryReminder,
|
|
112
|
-
selectRelevantErrorMemoryPatterns,
|
|
113
|
-
};
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
function versionFromStat(stat) {
|
|
4
|
-
if (!stat || typeof stat !== 'object') return null;
|
|
5
|
-
return [
|
|
6
|
-
stat.stDev ?? null,
|
|
7
|
-
stat.stIno ?? null,
|
|
8
|
-
stat.stSize ?? null,
|
|
9
|
-
stat.stMtime ?? null,
|
|
10
|
-
].join(':');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function isNotFoundError(error) {
|
|
14
|
-
return error?.code === 'ENOENT' || error?.code === 'ENOTDIR';
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function createFileObservationPolicy(options = {}) {
|
|
18
|
-
const caseInsensitive = options.pathClass === 'win32';
|
|
19
|
-
const observations = new Map();
|
|
20
|
-
|
|
21
|
-
function key(filePath) {
|
|
22
|
-
const normalized = String(filePath).replaceAll('\\', '/');
|
|
23
|
-
return caseInsensitive ? normalized.toLowerCase() : normalized;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function recordPresent(filePath, stat) {
|
|
27
|
-
const version = versionFromStat(stat);
|
|
28
|
-
if (version === null) throw new TypeError('recordPresent requires a file stat');
|
|
29
|
-
observations.set(key(filePath), { kind: 'present', version });
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function recordAbsent(filePath) {
|
|
33
|
-
observations.set(key(filePath), { kind: 'absent' });
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function verifyStableRead(filePath, before, after) {
|
|
37
|
-
const beforeVersion = versionFromStat(before);
|
|
38
|
-
const afterVersion = versionFromStat(after);
|
|
39
|
-
if (beforeVersion === null || afterVersion === null || beforeVersion !== afterVersion) {
|
|
40
|
-
return {
|
|
41
|
-
allowed: false,
|
|
42
|
-
code: 'FS_STALE_VERSION',
|
|
43
|
-
error: `File changed while reading "${filePath}". Read it again before editing or overwriting it.`,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
recordPresent(filePath, after);
|
|
47
|
-
return { allowed: true, version: afterVersion };
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function authorizeEdit(filePath, currentStat) {
|
|
51
|
-
const prior = observations.get(key(filePath));
|
|
52
|
-
if (currentStat === null) {
|
|
53
|
-
return {
|
|
54
|
-
allowed: false,
|
|
55
|
-
code: prior?.kind === 'absent' ? 'FS_NOT_FOUND' : 'FS_NOT_OBSERVED',
|
|
56
|
-
error: prior?.kind === 'absent'
|
|
57
|
-
? `Cannot edit "${filePath}": the last Read confirmed that it does not exist.`
|
|
58
|
-
: `Edit requires reading "${filePath}" first. Read the exact target path, then retry.`,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
if (prior === undefined) {
|
|
62
|
-
return {
|
|
63
|
-
allowed: false,
|
|
64
|
-
code: 'FS_NOT_OBSERVED',
|
|
65
|
-
error: `Edit requires reading "${filePath}" first. Read the exact target path, then retry.`,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
if (prior.kind !== 'present' || prior.version !== versionFromStat(currentStat)) {
|
|
69
|
-
return {
|
|
70
|
-
allowed: false,
|
|
71
|
-
code: 'FS_STALE_VERSION',
|
|
72
|
-
error: `"${filePath}" changed since the last Read. Read it again, then retry the Edit.`,
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
return { allowed: true, version: prior.version };
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function authorizeWrite(filePath, currentStat) {
|
|
79
|
-
const prior = observations.get(key(filePath));
|
|
80
|
-
if (currentStat === null) {
|
|
81
|
-
if (prior?.kind === 'present') {
|
|
82
|
-
return {
|
|
83
|
-
allowed: false,
|
|
84
|
-
code: 'FS_STALE_VERSION',
|
|
85
|
-
error: `"${filePath}" disappeared since the last Read. Read it again before recreating it.`,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
return { allowed: true, version: null, create: true };
|
|
89
|
-
}
|
|
90
|
-
if (prior === undefined) {
|
|
91
|
-
return {
|
|
92
|
-
allowed: false,
|
|
93
|
-
code: 'FS_NOT_OBSERVED',
|
|
94
|
-
error: `Write would replace or append to existing file "${filePath}" without a prior Read. Read it first, then retry.`,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
if (prior.kind !== 'present' || prior.version !== versionFromStat(currentStat)) {
|
|
98
|
-
return {
|
|
99
|
-
allowed: false,
|
|
100
|
-
code: 'FS_STALE_VERSION',
|
|
101
|
-
error: `"${filePath}" changed since the last Read. Read it again, then retry the Write.`,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
return { allowed: true, version: prior.version, create: false };
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function verifyUnchanged(filePath, expectedVersion, currentStat) {
|
|
108
|
-
const currentVersion = versionFromStat(currentStat);
|
|
109
|
-
if (expectedVersion === currentVersion) return { allowed: true };
|
|
110
|
-
return {
|
|
111
|
-
allowed: false,
|
|
112
|
-
code: 'FS_STALE_VERSION',
|
|
113
|
-
error: expectedVersion === null
|
|
114
|
-
? `"${filePath}" appeared before the new file could be created. Read it before deciding whether to overwrite it.`
|
|
115
|
-
: `"${filePath}" changed before the mutation was written. Read it again, then retry.`,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
authorizeEdit,
|
|
121
|
-
authorizeWrite,
|
|
122
|
-
recordAbsent,
|
|
123
|
-
recordPresent,
|
|
124
|
-
verifyStableRead,
|
|
125
|
-
verifyUnchanged,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
module.exports = {
|
|
130
|
-
createFileObservationPolicy,
|
|
131
|
-
isNotFoundError,
|
|
132
|
-
versionFromStat,
|
|
133
|
-
};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const MAX_FOREGROUND_CAPTURE_BYTES = 16 * 1024 * 1024;
|
|
4
|
-
|
|
5
|
-
function utf8PrefixWithinBytes(text, maxBytes) {
|
|
6
|
-
if (maxBytes <= 0 || text.length === 0) return '';
|
|
7
|
-
if (Buffer.byteLength(text, 'utf8') <= maxBytes) return text;
|
|
8
|
-
|
|
9
|
-
let low = 0;
|
|
10
|
-
let high = text.length;
|
|
11
|
-
while (low < high) {
|
|
12
|
-
const middle = Math.ceil((low + high) / 2);
|
|
13
|
-
if (Buffer.byteLength(text.slice(0, middle), 'utf8') <= maxBytes) low = middle;
|
|
14
|
-
else high = middle - 1;
|
|
15
|
-
}
|
|
16
|
-
if (low > 0 && low < text.length) {
|
|
17
|
-
const last = text.charCodeAt(low - 1);
|
|
18
|
-
if (last >= 0xD800 && last <= 0xDBFF) low -= 1;
|
|
19
|
-
}
|
|
20
|
-
return text.slice(0, low);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function captureForegroundOutputChunk(text, capturedBytes, maxBytes = MAX_FOREGROUND_CAPTURE_BYTES) {
|
|
24
|
-
const observedBytes = Buffer.byteLength(text, 'utf8');
|
|
25
|
-
const remainingBytes = Math.max(0, maxBytes - Math.max(0, capturedBytes));
|
|
26
|
-
const capturedText = utf8PrefixWithinBytes(text, remainingBytes);
|
|
27
|
-
const newCapturedBytes = Buffer.byteLength(capturedText, 'utf8');
|
|
28
|
-
return {
|
|
29
|
-
capturedText,
|
|
30
|
-
observedBytes,
|
|
31
|
-
capturedBytes: newCapturedBytes,
|
|
32
|
-
droppedBytes: observedBytes - newCapturedBytes,
|
|
33
|
-
capped: newCapturedBytes < observedBytes,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
module.exports = {
|
|
38
|
-
MAX_FOREGROUND_CAPTURE_BYTES,
|
|
39
|
-
captureForegroundOutputChunk,
|
|
40
|
-
utf8PrefixWithinBytes,
|
|
41
|
-
};
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const path = require('node:path');
|
|
4
|
-
|
|
5
|
-
const JAVASCRIPT_LIKE_EXTENSIONS = new Set([
|
|
6
|
-
'.cjs',
|
|
7
|
-
'.cts',
|
|
8
|
-
'.js',
|
|
9
|
-
'.jsx',
|
|
10
|
-
'.mjs',
|
|
11
|
-
'.mts',
|
|
12
|
-
'.ts',
|
|
13
|
-
'.tsx',
|
|
14
|
-
]);
|
|
15
|
-
const DEFAULT_MIN_REPEATS = 8;
|
|
16
|
-
|
|
17
|
-
function findDegenerateGeneratedStatementRun(filePath, content, options = {}) {
|
|
18
|
-
if (!JAVASCRIPT_LIKE_EXTENSIONS.has(path.extname(filePath).toLowerCase())) return null;
|
|
19
|
-
if (typeof content !== 'string' || content.length === 0) return null;
|
|
20
|
-
|
|
21
|
-
const minRepeats = Number.isSafeInteger(options.minRepeats) && options.minRepeats >= 2
|
|
22
|
-
? options.minRepeats
|
|
23
|
-
: DEFAULT_MIN_REPEATS;
|
|
24
|
-
let state = 'code';
|
|
25
|
-
let quote = '';
|
|
26
|
-
let escaped = false;
|
|
27
|
-
let line = 1;
|
|
28
|
-
let statementStart = 0;
|
|
29
|
-
let statementStartLine = 1;
|
|
30
|
-
let parenDepth = 0;
|
|
31
|
-
let bracketDepth = 0;
|
|
32
|
-
let previous = null;
|
|
33
|
-
let runCount = 0;
|
|
34
|
-
let runLine = 1;
|
|
35
|
-
|
|
36
|
-
const resetBoundary = (nextStart) => {
|
|
37
|
-
statementStart = nextStart;
|
|
38
|
-
statementStartLine = line;
|
|
39
|
-
};
|
|
40
|
-
const recordStatement = (end) => {
|
|
41
|
-
const raw = content.slice(statementStart, end);
|
|
42
|
-
const rawStartLine = statementStartLine;
|
|
43
|
-
resetBoundary(end);
|
|
44
|
-
const leading = raw.match(/^\s*/u)?.[0] ?? '';
|
|
45
|
-
const statementLine = rawStartLine + (leading.match(/\n/gu)?.length ?? 0);
|
|
46
|
-
const normalized = raw.replace(/\s+/gu, ' ').trim();
|
|
47
|
-
if (normalized.length === 0 || !/[A-Za-z_$]/u.test(normalized)) {
|
|
48
|
-
previous = null;
|
|
49
|
-
runCount = 0;
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
if (normalized === previous) runCount += 1;
|
|
53
|
-
else {
|
|
54
|
-
previous = normalized;
|
|
55
|
-
runCount = 1;
|
|
56
|
-
runLine = statementLine;
|
|
57
|
-
}
|
|
58
|
-
if (runCount < minRepeats) return null;
|
|
59
|
-
return {
|
|
60
|
-
count: runCount,
|
|
61
|
-
line: runLine,
|
|
62
|
-
preview: normalized.slice(0, 160),
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
for (let index = 0; index < content.length; index += 1) {
|
|
67
|
-
const current = content[index] ?? '';
|
|
68
|
-
const next = content[index + 1] ?? '';
|
|
69
|
-
|
|
70
|
-
if (state === 'line-comment') {
|
|
71
|
-
if (current === '\n') {
|
|
72
|
-
line += 1;
|
|
73
|
-
state = 'code';
|
|
74
|
-
}
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (state === 'block-comment') {
|
|
78
|
-
if (current === '\n') line += 1;
|
|
79
|
-
if (current === '*' && next === '/') {
|
|
80
|
-
state = 'code';
|
|
81
|
-
index += 1;
|
|
82
|
-
}
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if (state === 'quote') {
|
|
86
|
-
if (current === '\n') line += 1;
|
|
87
|
-
if (escaped) {
|
|
88
|
-
escaped = false;
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (current === '\\') {
|
|
92
|
-
escaped = true;
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
if (current === quote) {
|
|
96
|
-
state = 'code';
|
|
97
|
-
quote = '';
|
|
98
|
-
}
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (current === '\n') {
|
|
103
|
-
line += 1;
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
if (current === '/' && next === '/') {
|
|
107
|
-
state = 'line-comment';
|
|
108
|
-
index += 1;
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
if (current === '/' && next === '*') {
|
|
112
|
-
state = 'block-comment';
|
|
113
|
-
index += 1;
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
if (current === "'" || current === '"' || current === '`') {
|
|
117
|
-
state = 'quote';
|
|
118
|
-
quote = current;
|
|
119
|
-
escaped = false;
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
if (current === '(') parenDepth += 1;
|
|
123
|
-
else if (current === ')') parenDepth = Math.max(0, parenDepth - 1);
|
|
124
|
-
else if (current === '[') bracketDepth += 1;
|
|
125
|
-
else if (current === ']') bracketDepth = Math.max(0, bracketDepth - 1);
|
|
126
|
-
else if ((current === '{' || current === '}') && parenDepth === 0 && bracketDepth === 0) {
|
|
127
|
-
previous = null;
|
|
128
|
-
runCount = 0;
|
|
129
|
-
resetBoundary(index + 1);
|
|
130
|
-
} else if (current === ';' && parenDepth === 0 && bracketDepth === 0) {
|
|
131
|
-
const finding = recordStatement(index + 1);
|
|
132
|
-
if (finding !== null) return finding;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return null;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
module.exports = {
|
|
140
|
-
DEFAULT_MIN_REPEATS,
|
|
141
|
-
findDegenerateGeneratedStatementRun,
|
|
142
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function quotedPattern(pattern) {
|
|
4
|
-
return `'${pattern.replaceAll("\\", "\\\\").replaceAll("'", "\\'")}'`;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
function globPatternError(pattern) {
|
|
8
|
-
if (typeof pattern !== "string") return "Invalid glob pattern";
|
|
9
|
-
if (!pattern.replaceAll("\\", "/").split("/").includes("..")) return undefined;
|
|
10
|
-
return `Path traversal not allowed in glob pattern ${quotedPattern(pattern)}`;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
module.exports = { globPatternError };
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
completionCriterionRef,
|
|
5
|
-
normalizeVerificationProof,
|
|
6
|
-
} = require('./cognitive-action-checkpoint.cjs');
|
|
7
|
-
|
|
8
|
-
function hasCompletionCriterion(goal) {
|
|
9
|
-
return typeof goal?.completionCriterion === 'string'
|
|
10
|
-
&& goal.completionCriterion.trim().length > 0;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function successfulRuntimeEvidence(checkpoint) {
|
|
14
|
-
const successfulTools = Number(checkpoint?.evidenceReceipt?.successfulTools);
|
|
15
|
-
return Number.isSafeInteger(successfulTools) && successfulTools > 0;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function verificationProofGaps(checkpoint, criterion, expectedProducerRef) {
|
|
19
|
-
if (!checkpoint?.verificationProof) {
|
|
20
|
-
return ['Bind the completion claim to a successful verification tool from the checkpoint turn.'];
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
const proof = normalizeVerificationProof(
|
|
24
|
-
checkpoint.verificationProof,
|
|
25
|
-
checkpoint.evidenceReceipt,
|
|
26
|
-
{ allowLegacy: true },
|
|
27
|
-
);
|
|
28
|
-
if (proof.criterionRef !== completionCriterionRef(criterion)) {
|
|
29
|
-
return ['Bind the completion proof to the active completion criterion.'];
|
|
30
|
-
}
|
|
31
|
-
if (expectedProducerRef !== undefined && proof.producerRef === undefined) {
|
|
32
|
-
return ['Bind the completion proof to the runtime that produced its measurement.'];
|
|
33
|
-
}
|
|
34
|
-
if (expectedProducerRef !== undefined && proof.producerRef !== expectedProducerRef) {
|
|
35
|
-
return ['The completion proof was produced by a different agent session; preserve it as an external report instead of relabelling it as local verification.'];
|
|
36
|
-
}
|
|
37
|
-
return [];
|
|
38
|
-
} catch (error) {
|
|
39
|
-
if (/verifier proof requires a sharpnessProof|sharpnessProof must name a distinct verification call/u
|
|
40
|
-
.test(String(error?.message ?? ''))) {
|
|
41
|
-
return ['A verifier completion needs a distinct current-turn counterexample or mutation call.'];
|
|
42
|
-
}
|
|
43
|
-
if (/sharpnessProof must match a successful current-turn verification call/u
|
|
44
|
-
.test(String(error?.message ?? ''))) {
|
|
45
|
-
return ['The verifier sharpness proof does not match a successful current-turn verification call.'];
|
|
46
|
-
}
|
|
47
|
-
if (/(?:verificationProof|sharpnessProof) kind must match the successful current-turn verification call/u
|
|
48
|
-
.test(String(error?.message ?? ''))) {
|
|
49
|
-
return ['The completion proof kind exceeds what its exact verification call measured.'];
|
|
50
|
-
}
|
|
51
|
-
if (/(?:verificationProof|sharpnessProof) scope must match the successful current-turn verification call target/u
|
|
52
|
-
.test(String(error?.message ?? ''))) {
|
|
53
|
-
return ['Bind the completion proof scope to the exact target measured by its successful current-turn verification call.'];
|
|
54
|
-
}
|
|
55
|
-
if (/action-only tool/u.test(String(error?.message ?? ''))) {
|
|
56
|
-
return ['The completion proof names an action-only tool, not a verification tool.'];
|
|
57
|
-
}
|
|
58
|
-
if (/successful current-turn (?:tool|verification call)/u.test(String(error?.message ?? ''))) {
|
|
59
|
-
return ['The completion proof does not match a successful verification call from the checkpoint turn.'];
|
|
60
|
-
}
|
|
61
|
-
return ['The completion verification proof is malformed.'];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function evaluateGoalCompletionEvidence(goal, options = {}) {
|
|
66
|
-
if (!hasCompletionCriterion(goal)) {
|
|
67
|
-
return {
|
|
68
|
-
required: false,
|
|
69
|
-
allPassed: true,
|
|
70
|
-
result: 'satisfied',
|
|
71
|
-
gaps: [],
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const checkpoint = goal?.actionCheckpoint;
|
|
76
|
-
if (!checkpoint || typeof checkpoint !== 'object' || Array.isArray(checkpoint)) {
|
|
77
|
-
return {
|
|
78
|
-
required: true,
|
|
79
|
-
allPassed: false,
|
|
80
|
-
result: 'needs_revision',
|
|
81
|
-
gaps: ['Save a verify-phase action checkpoint before completing the goal.'],
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const gaps = [];
|
|
86
|
-
if (checkpoint.phase !== 'verify') {
|
|
87
|
-
gaps.push('The latest action checkpoint must be in the verify phase.');
|
|
88
|
-
}
|
|
89
|
-
if (checkpoint.evidenceBasis !== 'runtime_tool') {
|
|
90
|
-
gaps.push('The completion proof must come from a runtime tool.');
|
|
91
|
-
}
|
|
92
|
-
if (checkpoint.epistemicState !== 'verified') {
|
|
93
|
-
gaps.push('The completion proof must be classified as verified.');
|
|
94
|
-
}
|
|
95
|
-
const hasRuntimeEvidence = successfulRuntimeEvidence(checkpoint);
|
|
96
|
-
if (!hasRuntimeEvidence) {
|
|
97
|
-
gaps.push('The runtime evidence receipt must contain at least one successful tool result.');
|
|
98
|
-
}
|
|
99
|
-
if (checkpoint.phase === 'verify'
|
|
100
|
-
&& checkpoint.evidenceBasis === 'runtime_tool'
|
|
101
|
-
&& checkpoint.epistemicState === 'verified'
|
|
102
|
-
&& hasRuntimeEvidence) {
|
|
103
|
-
gaps.push(...verificationProofGaps(
|
|
104
|
-
checkpoint,
|
|
105
|
-
goal.completionCriterion,
|
|
106
|
-
options.expectedProducerRef,
|
|
107
|
-
));
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return {
|
|
111
|
-
required: true,
|
|
112
|
-
allPassed: gaps.length === 0,
|
|
113
|
-
result: gaps.length === 0 ? 'satisfied' : 'needs_revision',
|
|
114
|
-
gaps,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
module.exports = {
|
|
119
|
-
evaluateGoalCompletionEvidence,
|
|
120
|
-
};
|