blun-king-cli 9.1.586 → 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 -178
- 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 +143078 -135241
- 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 -15
- 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 -79
- 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,252 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const MAX_SCHEMA_BYTES = 16 * 1024;
|
|
4
|
-
const MAX_OUTPUT_BYTES = 64 * 1024;
|
|
5
|
-
const MAX_SCHEMA_DEPTH = 12;
|
|
6
|
-
const MAX_SCHEMA_NODES = 128;
|
|
7
|
-
const MAX_ERROR_BYTES = 2048;
|
|
8
|
-
const STRUCTURED_SUBAGENT_OUTPUT_ERROR = 'Structured subagent output invalid after one repair attempt';
|
|
9
|
-
|
|
10
|
-
const ALLOWED_SCHEMA_KEYS = new Set([
|
|
11
|
-
'type',
|
|
12
|
-
'properties',
|
|
13
|
-
'required',
|
|
14
|
-
'additionalProperties',
|
|
15
|
-
'items',
|
|
16
|
-
'enum',
|
|
17
|
-
'const',
|
|
18
|
-
'minimum',
|
|
19
|
-
'maximum',
|
|
20
|
-
'exclusiveMinimum',
|
|
21
|
-
'exclusiveMaximum',
|
|
22
|
-
'minLength',
|
|
23
|
-
'maxLength',
|
|
24
|
-
'minItems',
|
|
25
|
-
'maxItems',
|
|
26
|
-
'description',
|
|
27
|
-
]);
|
|
28
|
-
|
|
29
|
-
const ALLOWED_TYPES = new Set([
|
|
30
|
-
'object',
|
|
31
|
-
'array',
|
|
32
|
-
'string',
|
|
33
|
-
'number',
|
|
34
|
-
'integer',
|
|
35
|
-
'boolean',
|
|
36
|
-
'null',
|
|
37
|
-
]);
|
|
38
|
-
|
|
39
|
-
function isPlainObject(value) {
|
|
40
|
-
if (value === null || typeof value !== 'object' || Array.isArray(value)) return false;
|
|
41
|
-
const prototype = Object.getPrototypeOf(value);
|
|
42
|
-
return prototype === Object.prototype || prototype === null;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function boundedText(value, maxBytes = MAX_ERROR_BYTES) {
|
|
46
|
-
const text = String(value);
|
|
47
|
-
const bytes = Buffer.from(text, 'utf8');
|
|
48
|
-
if (bytes.byteLength <= maxBytes) return text;
|
|
49
|
-
return `${bytes.subarray(0, Math.max(0, maxBytes - 3)).toString('utf8')}...`;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function assertFiniteNumber(value, path) {
|
|
53
|
-
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
54
|
-
throw new Error(`${path} must be a finite number`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function assertNonNegativeInteger(value, path) {
|
|
59
|
-
if (!Number.isInteger(value) || value < 0) {
|
|
60
|
-
throw new Error(`${path} must be a non-negative integer`);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function inspectSchemaNode(node, path, depth, state) {
|
|
65
|
-
if (!isPlainObject(node)) throw new Error(`${path} must be a JSON Schema object`);
|
|
66
|
-
if (depth > MAX_SCHEMA_DEPTH) {
|
|
67
|
-
throw new Error(`response_format.schema exceeds maximum depth ${MAX_SCHEMA_DEPTH}`);
|
|
68
|
-
}
|
|
69
|
-
state.nodes += 1;
|
|
70
|
-
if (state.nodes > MAX_SCHEMA_NODES) {
|
|
71
|
-
throw new Error(`response_format.schema exceeds maximum node count ${MAX_SCHEMA_NODES}`);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
for (const key of Object.keys(node)) {
|
|
75
|
-
if (!ALLOWED_SCHEMA_KEYS.has(key)) {
|
|
76
|
-
throw new Error(`${path}.${key} is not supported in response_format.schema`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (node.type !== undefined && (!ALLOWED_TYPES.has(node.type) || typeof node.type !== 'string')) {
|
|
81
|
-
throw new Error(`${path}.type must be one supported scalar JSON Schema type`);
|
|
82
|
-
}
|
|
83
|
-
if (node.description !== undefined && typeof node.description !== 'string') {
|
|
84
|
-
throw new Error(`${path}.description must be a string`);
|
|
85
|
-
}
|
|
86
|
-
if (node.properties !== undefined) {
|
|
87
|
-
if (!isPlainObject(node.properties)) throw new Error(`${path}.properties must be an object`);
|
|
88
|
-
for (const [name, child] of Object.entries(node.properties)) {
|
|
89
|
-
inspectSchemaNode(child, `${path}.properties[${JSON.stringify(name)}]`, depth + 1, state);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (node.required !== undefined) {
|
|
93
|
-
if (!Array.isArray(node.required) || node.required.some((item) => typeof item !== 'string')) {
|
|
94
|
-
throw new Error(`${path}.required must be an array of property names`);
|
|
95
|
-
}
|
|
96
|
-
if (new Set(node.required).size !== node.required.length) {
|
|
97
|
-
throw new Error(`${path}.required must not contain duplicate property names`);
|
|
98
|
-
}
|
|
99
|
-
if (node.required.some((name) => !isPlainObject(node.properties) || !(name in node.properties))) {
|
|
100
|
-
throw new Error(`${path}.required may reference only declared properties`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (node.additionalProperties !== undefined && typeof node.additionalProperties !== 'boolean') {
|
|
104
|
-
throw new Error(`${path}.additionalProperties must be a boolean`);
|
|
105
|
-
}
|
|
106
|
-
if (node.items !== undefined) {
|
|
107
|
-
inspectSchemaNode(node.items, `${path}.items`, depth + 1, state);
|
|
108
|
-
}
|
|
109
|
-
if (node.enum !== undefined && (!Array.isArray(node.enum) || node.enum.length === 0)) {
|
|
110
|
-
throw new Error(`${path}.enum must be a non-empty array`);
|
|
111
|
-
}
|
|
112
|
-
for (const key of ['minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum']) {
|
|
113
|
-
if (node[key] !== undefined) assertFiniteNumber(node[key], `${path}.${key}`);
|
|
114
|
-
}
|
|
115
|
-
for (const key of ['minLength', 'maxLength', 'minItems', 'maxItems']) {
|
|
116
|
-
if (node[key] !== undefined) assertNonNegativeInteger(node[key], `${path}.${key}`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function prepareStructuredResponseFormat(responseFormat, compileValidator) {
|
|
121
|
-
if (responseFormat === undefined) return undefined;
|
|
122
|
-
if (!isPlainObject(responseFormat)) throw new Error('response_format must be an object');
|
|
123
|
-
const keys = Object.keys(responseFormat);
|
|
124
|
-
if (keys.some((key) => key !== 'name' && key !== 'schema')) {
|
|
125
|
-
throw new Error('response_format accepts only name and schema');
|
|
126
|
-
}
|
|
127
|
-
if (typeof responseFormat.name !== 'string' || !/^[A-Za-z][A-Za-z0-9_-]{0,63}$/u.test(responseFormat.name)) {
|
|
128
|
-
throw new Error('response_format.name must start with a letter and contain at most 64 letters, digits, underscores, or hyphens');
|
|
129
|
-
}
|
|
130
|
-
if (!isPlainObject(responseFormat.schema) || responseFormat.schema.type !== 'object') {
|
|
131
|
-
throw new Error('response_format.schema root must have type "object"');
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
let serializedSchema;
|
|
135
|
-
try {
|
|
136
|
-
serializedSchema = JSON.stringify(responseFormat.schema);
|
|
137
|
-
} catch (error) {
|
|
138
|
-
throw new Error(`response_format.schema must be JSON-serializable: ${boundedText(error)}`);
|
|
139
|
-
}
|
|
140
|
-
if (Buffer.byteLength(serializedSchema, 'utf8') > MAX_SCHEMA_BYTES) {
|
|
141
|
-
throw new Error(`response_format.schema exceeds ${MAX_SCHEMA_BYTES} bytes`);
|
|
142
|
-
}
|
|
143
|
-
const schema = JSON.parse(serializedSchema);
|
|
144
|
-
inspectSchemaNode(schema, 'response_format.schema', 1, { nodes: 0 });
|
|
145
|
-
if (typeof compileValidator !== 'function') throw new Error('response_format validator compiler is unavailable');
|
|
146
|
-
|
|
147
|
-
let validator;
|
|
148
|
-
try {
|
|
149
|
-
validator = compileValidator(schema);
|
|
150
|
-
} catch (error) {
|
|
151
|
-
throw new Error(`response_format.schema could not be compiled: ${boundedText(error)}`);
|
|
152
|
-
}
|
|
153
|
-
if (typeof validator !== 'function') throw new Error('response_format validator compiler returned no validator');
|
|
154
|
-
return Object.freeze({
|
|
155
|
-
name: responseFormat.name,
|
|
156
|
-
schema: Object.freeze(schema),
|
|
157
|
-
serializedSchema,
|
|
158
|
-
validator,
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function formatValidatorErrors(errors) {
|
|
163
|
-
if (!Array.isArray(errors) || errors.length === 0) return 'value does not match response_format.schema';
|
|
164
|
-
return boundedText(errors.map((error) => {
|
|
165
|
-
const path = typeof error?.instancePath === 'string' && error.instancePath.length > 0
|
|
166
|
-
? error.instancePath
|
|
167
|
-
: '$';
|
|
168
|
-
if (error?.keyword === 'required' && typeof error?.params?.missingProperty === 'string') {
|
|
169
|
-
return `${path} must have required property ${JSON.stringify(error.params.missingProperty)}`;
|
|
170
|
-
}
|
|
171
|
-
if (error?.keyword === 'additionalProperties' && typeof error?.params?.additionalProperty === 'string') {
|
|
172
|
-
return `${path} must not have additional property ${JSON.stringify(error.params.additionalProperty)}`;
|
|
173
|
-
}
|
|
174
|
-
return `${path} ${error?.message || 'is invalid'}`;
|
|
175
|
-
}).join('; '));
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function validateStructuredSubagentOutput(text, prepared) {
|
|
179
|
-
if (typeof text !== 'string') return { ok: false, error: 'final response is not text' };
|
|
180
|
-
if (Buffer.byteLength(text, 'utf8') > MAX_OUTPUT_BYTES) {
|
|
181
|
-
return { ok: false, error: `final response exceeds ${MAX_OUTPUT_BYTES} bytes` };
|
|
182
|
-
}
|
|
183
|
-
let value;
|
|
184
|
-
try {
|
|
185
|
-
value = JSON.parse(text);
|
|
186
|
-
} catch (error) {
|
|
187
|
-
return { ok: false, error: `final response is not exactly one JSON value: ${boundedText(error)}` };
|
|
188
|
-
}
|
|
189
|
-
try {
|
|
190
|
-
if (!prepared.validator(value)) {
|
|
191
|
-
return { ok: false, error: formatValidatorErrors(prepared.validator.errors) };
|
|
192
|
-
}
|
|
193
|
-
} catch (error) {
|
|
194
|
-
return {
|
|
195
|
-
ok: false,
|
|
196
|
-
validatorException: true,
|
|
197
|
-
error: `response_format validator exception: ${boundedText(error)}`,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
return { ok: true, value };
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function buildStructuredResponseFormatReminder(prepared) {
|
|
204
|
-
return [
|
|
205
|
-
`Your final assistant message for this run must be exactly one JSON object matching response format ${JSON.stringify(prepared.name)}.`,
|
|
206
|
-
'Do not wrap it in Markdown, a code fence, XML, or explanatory prose.',
|
|
207
|
-
'Tool use and intermediate work remain unchanged. This schema grants no additional capability.',
|
|
208
|
-
`JSON Schema: ${prepared.serializedSchema}`,
|
|
209
|
-
].join('\n');
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
function buildStructuredResponseRepairPrompt(prepared, error) {
|
|
213
|
-
return [
|
|
214
|
-
'Your previous final response did not satisfy the required response format.',
|
|
215
|
-
`Validation error: ${boundedText(error)}`,
|
|
216
|
-
`Return exactly one corrected JSON object for ${JSON.stringify(prepared.name)} and nothing else.`,
|
|
217
|
-
`JSON Schema: ${prepared.serializedSchema}`,
|
|
218
|
-
].join('\n');
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function safeTokenCount(value) {
|
|
222
|
-
return Number.isFinite(value) && value > 0 ? Math.trunc(value) : 0;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
function buildStructuredSubagentEnvelope({ agentId, profileName, responseFormat, result, usage }) {
|
|
226
|
-
return JSON.stringify({
|
|
227
|
-
agent_id: agentId,
|
|
228
|
-
actual_subagent_type: profileName,
|
|
229
|
-
status: 'completed',
|
|
230
|
-
response_format: responseFormat.name,
|
|
231
|
-
result,
|
|
232
|
-
usage: {
|
|
233
|
-
input: safeTokenCount(usage?.inputOther),
|
|
234
|
-
output: safeTokenCount(usage?.output),
|
|
235
|
-
cache_read: safeTokenCount(usage?.inputCacheRead),
|
|
236
|
-
cache_write: safeTokenCount(usage?.inputCacheCreation),
|
|
237
|
-
},
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
module.exports = {
|
|
242
|
-
MAX_SCHEMA_BYTES,
|
|
243
|
-
MAX_OUTPUT_BYTES,
|
|
244
|
-
MAX_SCHEMA_DEPTH,
|
|
245
|
-
MAX_SCHEMA_NODES,
|
|
246
|
-
STRUCTURED_SUBAGENT_OUTPUT_ERROR,
|
|
247
|
-
prepareStructuredResponseFormat,
|
|
248
|
-
validateStructuredSubagentOutput,
|
|
249
|
-
buildStructuredResponseFormatReminder,
|
|
250
|
-
buildStructuredResponseRepairPrompt,
|
|
251
|
-
buildStructuredSubagentEnvelope,
|
|
252
|
-
};
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const DEFAULT_MAX_MESSAGES = 16;
|
|
4
|
-
const DEFAULT_MAX_CHARS = 64 * 1024;
|
|
5
|
-
const MAX_CONFIGURED_MESSAGES = 64;
|
|
6
|
-
const MAX_CONFIGURED_CHARS = 256 * 1024;
|
|
7
|
-
|
|
8
|
-
const SUBAGENT_FORK_REMINDER = [
|
|
9
|
-
'You received a bounded, redacted projection of the parent conversation.',
|
|
10
|
-
'It contains only direct local user text and completed text-only assistant replies.',
|
|
11
|
-
'It excludes system injections, private channel messages, attachments, tool calls, tool arguments, and tool results.',
|
|
12
|
-
'Treat that history as already happened. Your actual delegated task below is authoritative.',
|
|
13
|
-
'Do not launch another context fork. Return the requested result to the parent agent.',
|
|
14
|
-
].join(' ');
|
|
15
|
-
|
|
16
|
-
function boundedPositiveInteger(value, fallback, maximum, name) {
|
|
17
|
-
if (value === undefined) return fallback;
|
|
18
|
-
if (!Number.isSafeInteger(value) || value <= 0 || value > maximum) {
|
|
19
|
-
throw new TypeError(`${name} must be an integer between 1 and ${String(maximum)}`);
|
|
20
|
-
}
|
|
21
|
-
return value;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function resolveSubagentContextMode(options = {}) {
|
|
25
|
-
const requested = options.requested ?? 'isolated';
|
|
26
|
-
if (requested !== 'isolated' && requested !== 'fork') {
|
|
27
|
-
throw new TypeError('context_mode must be either "isolated" or "fork"');
|
|
28
|
-
}
|
|
29
|
-
if (requested === 'isolated') return requested;
|
|
30
|
-
if (options.resume === true) {
|
|
31
|
-
throw new Error('context_mode="fork" is available only when creating a new subagent, not while resuming one');
|
|
32
|
-
}
|
|
33
|
-
if (options.isRoot !== true) {
|
|
34
|
-
throw new Error('context_mode="fork" is available only to the root agent');
|
|
35
|
-
}
|
|
36
|
-
return requested;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function redactSecrets(value) {
|
|
40
|
-
return String(value)
|
|
41
|
-
.replaceAll(/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?-----END [^-]*PRIVATE KEY-----/giu, '[redacted]')
|
|
42
|
-
.replaceAll(/\b(authorization)\s*:\s*(?:basic|bearer)\s+\S+/giu, '$1: [redacted]')
|
|
43
|
-
.replaceAll(/\b(api[_ -]?(?:key|token)|access[_ -]?token|refresh[_ -]?token|id[_ -]?token|token|secret|password|passwd|pwd|credential)\b\s*([:=])\s*(?:"[^"]*"|'[^']*'|\S+)/giu, '$1$2[redacted]')
|
|
44
|
-
.replaceAll(/\b(?:sk|ghp|xoxb|xoxp|token)[-_][A-Za-z0-9_-]{16,}\b/gu, '[redacted]')
|
|
45
|
-
.replaceAll(/\b[A-Za-z0-9][A-Za-z0-9+/=_-]{39,}\b/gu, '[redacted]');
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function textContent(message) {
|
|
49
|
-
if (!Array.isArray(message?.content)) return '';
|
|
50
|
-
return message.content
|
|
51
|
-
.filter((part) => part?.type === 'text' && typeof part.text === 'string')
|
|
52
|
-
.map((part) => part.text)
|
|
53
|
-
.join('\n')
|
|
54
|
-
.trim();
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function eligibleMessage(message) {
|
|
58
|
-
if (message?.role === 'user') {
|
|
59
|
-
if (message.origin?.kind !== 'user') return undefined;
|
|
60
|
-
} else if (message?.role === 'assistant') {
|
|
61
|
-
if (message.origin !== undefined) return undefined;
|
|
62
|
-
if (!Array.isArray(message.toolCalls) || message.toolCalls.length > 0) return undefined;
|
|
63
|
-
} else {
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
const text = textContent(message);
|
|
67
|
-
if (text.length === 0) return undefined;
|
|
68
|
-
return { role: message.role, text: redactSecrets(text) };
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function modelMessage(role, text) {
|
|
72
|
-
return {
|
|
73
|
-
role,
|
|
74
|
-
content: [{ type: 'text', text }],
|
|
75
|
-
toolCalls: [],
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function mergeAdjacent(messages) {
|
|
80
|
-
const merged = [];
|
|
81
|
-
for (const message of messages) {
|
|
82
|
-
const previous = merged.at(-1);
|
|
83
|
-
if (previous?.role === message.role) {
|
|
84
|
-
previous.content[0].text += `\n\n${message.content[0].text}`;
|
|
85
|
-
} else {
|
|
86
|
-
merged.push(modelMessage(message.role, message.content[0].text));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
while (merged[0]?.role === 'assistant') merged.shift();
|
|
90
|
-
return merged;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function emptyProjection() {
|
|
94
|
-
return {
|
|
95
|
-
messages: [],
|
|
96
|
-
sourceMessageCount: 0,
|
|
97
|
-
sourceChars: 0,
|
|
98
|
-
truncatedOlderContext: false,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function projectSubagentForkContext(history, options = {}) {
|
|
103
|
-
if (!Array.isArray(history)) throw new TypeError('history must be an array');
|
|
104
|
-
const maxMessages = boundedPositiveInteger(
|
|
105
|
-
options.maxMessages,
|
|
106
|
-
DEFAULT_MAX_MESSAGES,
|
|
107
|
-
MAX_CONFIGURED_MESSAGES,
|
|
108
|
-
'maxMessages',
|
|
109
|
-
);
|
|
110
|
-
const maxChars = boundedPositiveInteger(
|
|
111
|
-
options.maxChars,
|
|
112
|
-
DEFAULT_MAX_CHARS,
|
|
113
|
-
MAX_CONFIGURED_CHARS,
|
|
114
|
-
'maxChars',
|
|
115
|
-
);
|
|
116
|
-
const eligible = history.map(eligibleMessage).filter((message) => message !== undefined);
|
|
117
|
-
const newestUserIndex = eligible.findLastIndex((message) => message.role === 'user');
|
|
118
|
-
if (newestUserIndex < 0) return emptyProjection();
|
|
119
|
-
const throughCurrentUser = eligible.slice(0, newestUserIndex + 1);
|
|
120
|
-
const newestUser = throughCurrentUser.at(-1);
|
|
121
|
-
if (newestUser.text.length > maxChars) {
|
|
122
|
-
throw new Error(`newest direct user message exceeds the ${String(maxChars)}-character fork context limit`);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const selected = [];
|
|
126
|
-
let sourceChars = 0;
|
|
127
|
-
let truncatedOlderContext = false;
|
|
128
|
-
for (let index = throughCurrentUser.length - 1; index >= 0; index -= 1) {
|
|
129
|
-
const message = throughCurrentUser[index];
|
|
130
|
-
if (selected.length >= maxMessages || sourceChars + message.text.length > maxChars) {
|
|
131
|
-
truncatedOlderContext = true;
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
selected.push(modelMessage(message.role, message.text));
|
|
135
|
-
sourceChars += message.text.length;
|
|
136
|
-
}
|
|
137
|
-
selected.reverse();
|
|
138
|
-
const messages = mergeAdjacent(selected);
|
|
139
|
-
const retainedMessageCount = selected.length - selected.findIndex((message) => message.role === 'user');
|
|
140
|
-
return {
|
|
141
|
-
messages,
|
|
142
|
-
sourceMessageCount: retainedMessageCount,
|
|
143
|
-
sourceChars: messages.reduce((total, message) => total + message.content[0].text.replaceAll('\n\n', '').length, 0),
|
|
144
|
-
truncatedOlderContext,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
module.exports = {
|
|
149
|
-
DEFAULT_MAX_CHARS,
|
|
150
|
-
DEFAULT_MAX_MESSAGES,
|
|
151
|
-
SUBAGENT_FORK_REMINDER,
|
|
152
|
-
projectSubagentForkContext,
|
|
153
|
-
redactSecrets,
|
|
154
|
-
resolveSubagentContextMode,
|
|
155
|
-
};
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const MAX_SUBAGENT_HANDOFF_ATTEMPTS = 1;
|
|
4
|
-
const MAX_PARTIAL_HANDOFF_CHARS = 6000;
|
|
5
|
-
const SUBAGENT_MAX_TOKENS_ERROR =
|
|
6
|
-
"Subagent turn failed before completing its final summary: reason=max_tokens";
|
|
7
|
-
const SUBAGENT_MAX_TOKENS_HANDOFF_PROMPT = [
|
|
8
|
-
"Your previous turn reached max_tokens before its final handoff.",
|
|
9
|
-
"Do not call any tools and do not repeat completed work.",
|
|
10
|
-
"Return one concise recovery handoff of at most 1200 words with:",
|
|
11
|
-
"1. completed work and concrete findings",
|
|
12
|
-
"2. exact files changed or created",
|
|
13
|
-
"3. checks already run and their actual results",
|
|
14
|
-
"4. unfinished work or blockers",
|
|
15
|
-
"5. the exact next action for the parent or this same agent",
|
|
16
|
-
"State clearly that the task is incomplete when anything remains.",
|
|
17
|
-
].join("\n");
|
|
18
|
-
|
|
19
|
-
function shouldRequestSubagentHandoff(stopReason, attempts) {
|
|
20
|
-
return stopReason === "max_tokens"
|
|
21
|
-
&& Number.isSafeInteger(attempts)
|
|
22
|
-
&& attempts >= 0
|
|
23
|
-
&& attempts < MAX_SUBAGENT_HANDOFF_ATTEMPTS;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function isSubagentMaxTokensTurnError(error) {
|
|
27
|
-
if (typeof error !== "object" || error === null) return false;
|
|
28
|
-
const details = typeof error.details === "object" && error.details !== null
|
|
29
|
-
? error.details
|
|
30
|
-
: {};
|
|
31
|
-
if (details.emptyResponseKind === "length") return true;
|
|
32
|
-
if (details.finishReason === "truncated" || details.rawFinishReason === "length") return true;
|
|
33
|
-
|
|
34
|
-
const message = typeof error.message === "string" ? error.message : "";
|
|
35
|
-
return /\bmax[_ -]?tokens?\b/iu.test(message)
|
|
36
|
-
&& /(?:\bno\b|\bwithout\b|did not produce)[^\n.]*\btool(?: call)?\b/iu.test(message);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function boundedPartialHandoff(partialSummary) {
|
|
40
|
-
const normalized = typeof partialSummary === "string" ? partialSummary.trim() : "";
|
|
41
|
-
if (normalized.length <= MAX_PARTIAL_HANDOFF_CHARS) return normalized;
|
|
42
|
-
return `${normalized.slice(0, MAX_PARTIAL_HANDOFF_CHARS)}\n[partial handoff truncated]`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function buildSubagentMaxTokensFailure(partialSummary) {
|
|
46
|
-
const partial = boundedPartialHandoff(partialSummary);
|
|
47
|
-
const lines = [
|
|
48
|
-
`${SUBAGENT_MAX_TOKENS_ERROR}.`,
|
|
49
|
-
"The automatic concise handoff also reached max_tokens.",
|
|
50
|
-
];
|
|
51
|
-
if (partial.length > 0) {
|
|
52
|
-
lines.push("", "[partial_handoff]", partial, "[/partial_handoff]");
|
|
53
|
-
}
|
|
54
|
-
lines.push(
|
|
55
|
-
"",
|
|
56
|
-
"Resume the same subagent instead of starting the task again; its context and completed tool work are preserved.",
|
|
57
|
-
);
|
|
58
|
-
return lines.join("\n");
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
module.exports = {
|
|
62
|
-
MAX_PARTIAL_HANDOFF_CHARS,
|
|
63
|
-
MAX_SUBAGENT_HANDOFF_ATTEMPTS,
|
|
64
|
-
SUBAGENT_MAX_TOKENS_ERROR,
|
|
65
|
-
SUBAGENT_MAX_TOKENS_HANDOFF_PROMPT,
|
|
66
|
-
buildSubagentMaxTokensFailure,
|
|
67
|
-
isSubagentMaxTokensTurnError,
|
|
68
|
-
shouldRequestSubagentHandoff,
|
|
69
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
function resolveSubagentRunMode({ allowBackground, requested }) {
|
|
4
|
-
if (allowBackground !== true) {
|
|
5
|
-
return {
|
|
6
|
-
runInBackground: false,
|
|
7
|
-
forcedForParentResponsiveness: false,
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return {
|
|
12
|
-
runInBackground: true,
|
|
13
|
-
forcedForParentResponsiveness: requested !== true,
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
module.exports = {
|
|
18
|
-
resolveSubagentRunMode,
|
|
19
|
-
};
|