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,236 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
|
|
3
|
-
import { createAgentApiServiceHost } from './agent-api-service-host.mjs';
|
|
4
|
-
|
|
5
|
-
const LOOPBACK_HOST = '127.0.0.1';
|
|
6
|
-
const PROVIDER_NAME = 'privateAgentProvider';
|
|
7
|
-
const PUBLIC_MODEL = 'king';
|
|
8
|
-
|
|
9
|
-
function requireEnvironment(env) {
|
|
10
|
-
if (env === null || typeof env !== 'object' || Array.isArray(env)) {
|
|
11
|
-
throw new TypeError('env must be an object');
|
|
12
|
-
}
|
|
13
|
-
return env;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function requiredValue(env, name, options = {}) {
|
|
17
|
-
const value = env[name];
|
|
18
|
-
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
19
|
-
throw new TypeError(`${name} is required`);
|
|
20
|
-
}
|
|
21
|
-
const normalized = options.preserve === true ? value : value.trim();
|
|
22
|
-
return normalized;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function optionalValue(env, name) {
|
|
26
|
-
if (!Object.hasOwn(env, name)) return undefined;
|
|
27
|
-
const value = env[name];
|
|
28
|
-
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
29
|
-
throw new TypeError(`${name} must be a non-empty string`);
|
|
30
|
-
}
|
|
31
|
-
return value.trim();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function integerValue(value, name, options = {}) {
|
|
35
|
-
if (!/^\d+$/u.test(value)) {
|
|
36
|
-
throw new TypeError(`${name} must be a positive safe integer`);
|
|
37
|
-
}
|
|
38
|
-
const parsed = Number(value);
|
|
39
|
-
const minimum = options.minimum ?? 1;
|
|
40
|
-
const maximum = options.maximum ?? Number.MAX_SAFE_INTEGER;
|
|
41
|
-
if (!Number.isSafeInteger(parsed) || parsed < minimum || parsed > maximum) {
|
|
42
|
-
if (options.rangeMessage !== undefined) {
|
|
43
|
-
throw new TypeError(`${name} ${options.rangeMessage}`);
|
|
44
|
-
}
|
|
45
|
-
if (minimum === 1024) {
|
|
46
|
-
throw new TypeError(`${name} must be an integer of at least 1024`);
|
|
47
|
-
}
|
|
48
|
-
throw new TypeError(`${name} must be a positive safe integer`);
|
|
49
|
-
}
|
|
50
|
-
return parsed;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function requireSecret(env, name) {
|
|
54
|
-
const value = requiredValue(env, name, { preserve: true });
|
|
55
|
-
if (Buffer.byteLength(value, 'utf8') < 32) {
|
|
56
|
-
throw new TypeError(`${name} must contain at least 32 bytes`);
|
|
57
|
-
}
|
|
58
|
-
return value;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function requireAbsoluteRoot(env) {
|
|
62
|
-
const value = requiredValue(env, 'BLUN_AGENT_API_ROOT_DIR');
|
|
63
|
-
if (!path.isAbsolute(value)) {
|
|
64
|
-
throw new TypeError('BLUN_AGENT_API_ROOT_DIR must be an absolute path');
|
|
65
|
-
}
|
|
66
|
-
return path.resolve(value);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function requireProviderBaseUrl(env) {
|
|
70
|
-
const value = requiredValue(env, 'BLUN_AGENT_API_PROVIDER_BASE_URL');
|
|
71
|
-
let parsed;
|
|
72
|
-
try {
|
|
73
|
-
parsed = new URL(value);
|
|
74
|
-
} catch {
|
|
75
|
-
throw new TypeError('BLUN_AGENT_API_PROVIDER_BASE_URL must be a valid URL');
|
|
76
|
-
}
|
|
77
|
-
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
78
|
-
throw new TypeError('BLUN_AGENT_API_PROVIDER_BASE_URL must use http or https');
|
|
79
|
-
}
|
|
80
|
-
if (parsed.username.length > 0 || parsed.password.length > 0) {
|
|
81
|
-
throw new TypeError('BLUN_AGENT_API_PROVIDER_BASE_URL must not contain credentials');
|
|
82
|
-
}
|
|
83
|
-
if (parsed.search.length > 0 || parsed.hash.length > 0) {
|
|
84
|
-
throw new TypeError('BLUN_AGENT_API_PROVIDER_BASE_URL must not contain a query or fragment');
|
|
85
|
-
}
|
|
86
|
-
return value;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function loadAgentApiServiceEnvironment(input = process.env) {
|
|
90
|
-
const env = requireEnvironment(input);
|
|
91
|
-
const rootDir = requireAbsoluteRoot(env);
|
|
92
|
-
const internalSecret = requireSecret(env, 'BLUN_AGENT_API_INTERNAL_SECRET');
|
|
93
|
-
const isolationSecret = requireSecret(env, 'BLUN_AGENT_API_ISOLATION_SECRET');
|
|
94
|
-
if (internalSecret === isolationSecret) {
|
|
95
|
-
throw new TypeError('Agent API internal and isolation secrets must be different');
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const port = integerValue(
|
|
99
|
-
requiredValue(env, 'BLUN_AGENT_API_PORT'),
|
|
100
|
-
'BLUN_AGENT_API_PORT',
|
|
101
|
-
{ maximum: 65_535, rangeMessage: 'must be an integer from 1 through 65535' },
|
|
102
|
-
);
|
|
103
|
-
const providerBaseUrl = requireProviderBaseUrl(env);
|
|
104
|
-
const providerApiKey = requiredValue(
|
|
105
|
-
env,
|
|
106
|
-
'BLUN_AGENT_API_PROVIDER_API_KEY',
|
|
107
|
-
{ preserve: true },
|
|
108
|
-
);
|
|
109
|
-
const providerModel = requiredValue(env, 'BLUN_AGENT_API_PROVIDER_MODEL');
|
|
110
|
-
const maxContextSize = integerValue(
|
|
111
|
-
requiredValue(env, 'BLUN_AGENT_API_MAX_CONTEXT_TOKENS'),
|
|
112
|
-
'BLUN_AGENT_API_MAX_CONTEXT_TOKENS',
|
|
113
|
-
);
|
|
114
|
-
const maxOutputSize = integerValue(
|
|
115
|
-
requiredValue(env, 'BLUN_AGENT_API_MAX_OUTPUT_TOKENS'),
|
|
116
|
-
'BLUN_AGENT_API_MAX_OUTPUT_TOKENS',
|
|
117
|
-
);
|
|
118
|
-
if (maxOutputSize > maxContextSize) {
|
|
119
|
-
throw new TypeError(
|
|
120
|
-
'BLUN_AGENT_API_MAX_OUTPUT_TOKENS must not exceed BLUN_AGENT_API_MAX_CONTEXT_TOKENS',
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
const maxBodyBytes = integerValue(
|
|
124
|
-
requiredValue(env, 'BLUN_AGENT_API_MAX_BODY_BYTES'),
|
|
125
|
-
'BLUN_AGENT_API_MAX_BODY_BYTES',
|
|
126
|
-
{ minimum: 1024 },
|
|
127
|
-
);
|
|
128
|
-
const maxPrincipals = integerValue(
|
|
129
|
-
requiredValue(env, 'BLUN_AGENT_API_MAX_PRINCIPALS'),
|
|
130
|
-
'BLUN_AGENT_API_MAX_PRINCIPALS',
|
|
131
|
-
);
|
|
132
|
-
const maxSessionsPerPrincipal = integerValue(
|
|
133
|
-
requiredValue(env, 'BLUN_AGENT_API_MAX_SESSIONS_PER_PRINCIPAL'),
|
|
134
|
-
'BLUN_AGENT_API_MAX_SESSIONS_PER_PRINCIPAL',
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
const idleTimeoutRaw = optionalValue(env, 'BLUN_AGENT_API_SESSION_IDLE_TIMEOUT_MS');
|
|
138
|
-
const idleSweepRaw = optionalValue(env, 'BLUN_AGENT_API_IDLE_SWEEP_INTERVAL_MS');
|
|
139
|
-
const sessionIdleTimeoutMs = idleTimeoutRaw === undefined
|
|
140
|
-
? 0
|
|
141
|
-
: integerValue(idleTimeoutRaw, 'BLUN_AGENT_API_SESSION_IDLE_TIMEOUT_MS');
|
|
142
|
-
if (idleSweepRaw !== undefined && sessionIdleTimeoutMs === 0) {
|
|
143
|
-
throw new TypeError(
|
|
144
|
-
'BLUN_AGENT_API_IDLE_SWEEP_INTERVAL_MS requires BLUN_AGENT_API_SESSION_IDLE_TIMEOUT_MS',
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
|
-
const idleSweepIntervalMs = idleSweepRaw === undefined
|
|
148
|
-
? undefined
|
|
149
|
-
: integerValue(idleSweepRaw, 'BLUN_AGENT_API_IDLE_SWEEP_INTERVAL_MS');
|
|
150
|
-
|
|
151
|
-
const providerConfig = Object.freeze({
|
|
152
|
-
type: 'blun',
|
|
153
|
-
apiKey: providerApiKey,
|
|
154
|
-
baseUrl: providerBaseUrl,
|
|
155
|
-
defaultModel: providerModel,
|
|
156
|
-
});
|
|
157
|
-
const modelConfig = Object.freeze({
|
|
158
|
-
provider: PROVIDER_NAME,
|
|
159
|
-
model: providerModel,
|
|
160
|
-
maxContextSize,
|
|
161
|
-
maxOutputSize,
|
|
162
|
-
capabilities: Object.freeze(['tool_use']),
|
|
163
|
-
});
|
|
164
|
-
const harnessConfig = Object.freeze({
|
|
165
|
-
providers: Object.freeze({ [PROVIDER_NAME]: providerConfig }),
|
|
166
|
-
models: Object.freeze({ [PUBLIC_MODEL]: modelConfig }),
|
|
167
|
-
defaultModel: PUBLIC_MODEL,
|
|
168
|
-
});
|
|
169
|
-
const hostOptions = Object.freeze({
|
|
170
|
-
rootDir,
|
|
171
|
-
internalSecret,
|
|
172
|
-
isolationSecret,
|
|
173
|
-
harnessConfig,
|
|
174
|
-
maxBodyBytes,
|
|
175
|
-
maxPrincipals,
|
|
176
|
-
maxSessionsPerPrincipal,
|
|
177
|
-
sessionIdleTimeoutMs,
|
|
178
|
-
idleSweepIntervalMs,
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
return Object.freeze({
|
|
182
|
-
listen: Object.freeze({ host: LOOPBACK_HOST, port }),
|
|
183
|
-
hostOptions,
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
async function startAgentApiServiceFromEnvironment(options = {}) {
|
|
188
|
-
const createServiceHost = options.createServiceHost === undefined
|
|
189
|
-
? createAgentApiServiceHost
|
|
190
|
-
: options.createServiceHost;
|
|
191
|
-
if (typeof createServiceHost !== 'function') {
|
|
192
|
-
throw new TypeError('createServiceHost must be a function');
|
|
193
|
-
}
|
|
194
|
-
const config = loadAgentApiServiceEnvironment(
|
|
195
|
-
options.env === undefined ? process.env : options.env,
|
|
196
|
-
);
|
|
197
|
-
const service = createServiceHost(config.hostOptions);
|
|
198
|
-
if (service === null || typeof service !== 'object'
|
|
199
|
-
|| typeof service.listen !== 'function'
|
|
200
|
-
|| typeof service.close !== 'function') {
|
|
201
|
-
throw new TypeError('Agent API service host must provide listen and close');
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
let address;
|
|
205
|
-
try {
|
|
206
|
-
address = await service.listen(config.listen);
|
|
207
|
-
} catch (error) {
|
|
208
|
-
try {
|
|
209
|
-
await service.close();
|
|
210
|
-
} catch {
|
|
211
|
-
// The listen failure is the actionable error; cleanup remains best-effort.
|
|
212
|
-
}
|
|
213
|
-
throw error;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
let closePromise;
|
|
217
|
-
return Object.freeze({
|
|
218
|
-
address: Object.freeze({
|
|
219
|
-
address: address.address,
|
|
220
|
-
family: address.family,
|
|
221
|
-
port: address.port,
|
|
222
|
-
}),
|
|
223
|
-
close() {
|
|
224
|
-
closePromise ??= Promise.resolve().then(() => service.close());
|
|
225
|
-
return closePromise;
|
|
226
|
-
},
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
export {
|
|
231
|
-
LOOPBACK_HOST,
|
|
232
|
-
PROVIDER_NAME,
|
|
233
|
-
PUBLIC_MODEL,
|
|
234
|
-
loadAgentApiServiceEnvironment,
|
|
235
|
-
startAgentApiServiceFromEnvironment,
|
|
236
|
-
};
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
|
|
3
|
-
import { createAgentApiHttpAdapter } from './agent-api-http-adapter.mjs';
|
|
4
|
-
import { createAgentApiPrivateHttpServer } from './agent-api-private-http-server.mjs';
|
|
5
|
-
import { createAgentApiRuntime } from './agent-api-runtime.mjs';
|
|
6
|
-
import { createAgentApiSessionRegistry } from './agent-api-session-registry.mjs';
|
|
7
|
-
import { createAgentApiTurnController } from './agent-api-turn-controller.mjs';
|
|
8
|
-
|
|
9
|
-
const MIN_SECRET_BYTES = 32;
|
|
10
|
-
|
|
11
|
-
function requireSecret(value, label) {
|
|
12
|
-
if (typeof value !== 'string' || Buffer.byteLength(value, 'utf8') < MIN_SECRET_BYTES) {
|
|
13
|
-
throw new TypeError(`${label} must contain at least ${MIN_SECRET_BYTES} bytes`);
|
|
14
|
-
}
|
|
15
|
-
return value;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function requireAbsoluteRoot(value) {
|
|
19
|
-
if (typeof value !== 'string' || !path.isAbsolute(value)) {
|
|
20
|
-
throw new TypeError('rootDir must be an absolute path');
|
|
21
|
-
}
|
|
22
|
-
return path.resolve(value);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function requireObject(value, label) {
|
|
26
|
-
if (value === undefined) return {};
|
|
27
|
-
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
28
|
-
throw new TypeError(`${label} must be an object`);
|
|
29
|
-
}
|
|
30
|
-
return value;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function cloneHarnessConfig(value) {
|
|
34
|
-
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
35
|
-
throw new TypeError('harnessConfig must be an object');
|
|
36
|
-
}
|
|
37
|
-
let config;
|
|
38
|
-
try {
|
|
39
|
-
config = structuredClone(value);
|
|
40
|
-
} catch {
|
|
41
|
-
throw new TypeError('harnessConfig must be structured-cloneable');
|
|
42
|
-
}
|
|
43
|
-
if (config.defaultModel !== 'king') {
|
|
44
|
-
throw new TypeError('harnessConfig.defaultModel must be king');
|
|
45
|
-
}
|
|
46
|
-
if (config.models === null
|
|
47
|
-
|| typeof config.models !== 'object'
|
|
48
|
-
|| Array.isArray(config.models)
|
|
49
|
-
|| config.models.king === null
|
|
50
|
-
|| typeof config.models.king !== 'object'
|
|
51
|
-
|| Array.isArray(config.models.king)) {
|
|
52
|
-
throw new TypeError('harnessConfig.models.king must be an object');
|
|
53
|
-
}
|
|
54
|
-
const provider = config.models.king.provider;
|
|
55
|
-
if (typeof provider !== 'string'
|
|
56
|
-
|| provider.length === 0
|
|
57
|
-
|| config.providers === null
|
|
58
|
-
|| typeof config.providers !== 'object'
|
|
59
|
-
|| Array.isArray(config.providers)
|
|
60
|
-
|| !Object.hasOwn(config.providers, provider)) {
|
|
61
|
-
throw new TypeError('harnessConfig must define the provider used by models.king');
|
|
62
|
-
}
|
|
63
|
-
return config;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async function createBundledHarness(input) {
|
|
67
|
-
const { createBlunHarness } = await import('../blun.mjs');
|
|
68
|
-
return createBlunHarness(input);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function resolveHarnessPreparation(options) {
|
|
72
|
-
const hasConfig = options.harnessConfig !== undefined;
|
|
73
|
-
const hasPrepare = options.prepareHarness !== undefined;
|
|
74
|
-
if (hasConfig && hasPrepare) {
|
|
75
|
-
throw new TypeError('only one of harnessConfig or prepareHarness may be provided');
|
|
76
|
-
}
|
|
77
|
-
if (!hasConfig && !hasPrepare) {
|
|
78
|
-
throw new TypeError('harnessConfig or prepareHarness is required');
|
|
79
|
-
}
|
|
80
|
-
if (hasPrepare) {
|
|
81
|
-
if (typeof options.prepareHarness !== 'function') {
|
|
82
|
-
throw new TypeError('prepareHarness must be a function');
|
|
83
|
-
}
|
|
84
|
-
return options.prepareHarness;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const config = cloneHarnessConfig(options.harnessConfig);
|
|
88
|
-
return async ({ harness }) => {
|
|
89
|
-
if (typeof harness?.setConfig !== 'function') {
|
|
90
|
-
throw new TypeError('Agent API harness must provide setConfig');
|
|
91
|
-
}
|
|
92
|
-
await harness.setConfig(structuredClone(config));
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function createAgentApiServiceHost(options = {}) {
|
|
97
|
-
const rootDir = requireAbsoluteRoot(options.rootDir);
|
|
98
|
-
const internalSecret = requireSecret(options.internalSecret, 'internalSecret');
|
|
99
|
-
const isolationSecret = requireSecret(options.isolationSecret, 'isolationSecret');
|
|
100
|
-
if (internalSecret === isolationSecret) {
|
|
101
|
-
throw new TypeError('internalSecret and isolationSecret must be different');
|
|
102
|
-
}
|
|
103
|
-
if (options.createHarness !== undefined && typeof options.createHarness !== 'function') {
|
|
104
|
-
throw new TypeError('createHarness must be a function');
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const runtimeOptions = requireObject(options.runtimeOptions, 'runtimeOptions');
|
|
108
|
-
const controllerOptions = requireObject(options.controllerOptions, 'controllerOptions');
|
|
109
|
-
const prepareHarness = resolveHarnessPreparation(options);
|
|
110
|
-
const runtime = createAgentApiRuntime(runtimeOptions);
|
|
111
|
-
const controller = createAgentApiTurnController({
|
|
112
|
-
...controllerOptions,
|
|
113
|
-
runtime,
|
|
114
|
-
publicModel: 'king',
|
|
115
|
-
});
|
|
116
|
-
let adapter;
|
|
117
|
-
const sessionRegistry = createAgentApiSessionRegistry({
|
|
118
|
-
rootDir,
|
|
119
|
-
isolationSecret,
|
|
120
|
-
createHarness: options.createHarness ?? createBundledHarness,
|
|
121
|
-
prepareHarness,
|
|
122
|
-
sessionOptions: options.sessionOptions,
|
|
123
|
-
maxPrincipals: options.maxPrincipals,
|
|
124
|
-
maxSessionsPerPrincipal: options.maxSessionsPerPrincipal,
|
|
125
|
-
sessionIdleTimeoutMs: options.sessionIdleTimeoutMs,
|
|
126
|
-
idleSweepIntervalMs: options.idleSweepIntervalMs,
|
|
127
|
-
now: options.now,
|
|
128
|
-
scheduleInterval: options.scheduleInterval,
|
|
129
|
-
cancelInterval: options.cancelInterval,
|
|
130
|
-
isSessionActive(input) {
|
|
131
|
-
return adapter?.isSessionActive(input) === true;
|
|
132
|
-
},
|
|
133
|
-
});
|
|
134
|
-
adapter = createAgentApiHttpAdapter({
|
|
135
|
-
controller,
|
|
136
|
-
resolveSession: sessionRegistry.resolveSession,
|
|
137
|
-
closeSession: sessionRegistry.closeSession,
|
|
138
|
-
touchSession: sessionRegistry.touchSession,
|
|
139
|
-
});
|
|
140
|
-
const privateServer = createAgentApiPrivateHttpServer({
|
|
141
|
-
adapter,
|
|
142
|
-
internalSecret,
|
|
143
|
-
maxBodyBytes: options.maxBodyBytes,
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
let state = 'idle';
|
|
147
|
-
let listenPromise;
|
|
148
|
-
let closePromise;
|
|
149
|
-
|
|
150
|
-
async function listen(input = {}) {
|
|
151
|
-
if (state === 'closed' || state === 'closing') {
|
|
152
|
-
throw new Error('Agent API service host is closed');
|
|
153
|
-
}
|
|
154
|
-
if (state !== 'idle') {
|
|
155
|
-
throw new Error('Agent API service host is already listening');
|
|
156
|
-
}
|
|
157
|
-
state = 'starting';
|
|
158
|
-
try {
|
|
159
|
-
listenPromise = privateServer.listen(input);
|
|
160
|
-
const address = await listenPromise;
|
|
161
|
-
if (state === 'closing' || state === 'closed') {
|
|
162
|
-
await privateServer.close();
|
|
163
|
-
throw new Error('Agent API service host is closed');
|
|
164
|
-
}
|
|
165
|
-
state = 'listening';
|
|
166
|
-
return address;
|
|
167
|
-
} catch (error) {
|
|
168
|
-
if (state === 'starting') state = 'idle';
|
|
169
|
-
throw error;
|
|
170
|
-
} finally {
|
|
171
|
-
listenPromise = undefined;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
function close() {
|
|
176
|
-
if (closePromise !== undefined) return closePromise;
|
|
177
|
-
state = 'closing';
|
|
178
|
-
closePromise = (async () => {
|
|
179
|
-
let firstError;
|
|
180
|
-
if (listenPromise !== undefined) {
|
|
181
|
-
try {
|
|
182
|
-
await listenPromise;
|
|
183
|
-
} catch {
|
|
184
|
-
// The listen failure remains with its caller; cleanup continues here.
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
try {
|
|
188
|
-
await privateServer.close();
|
|
189
|
-
} catch (error) {
|
|
190
|
-
firstError = error;
|
|
191
|
-
}
|
|
192
|
-
try {
|
|
193
|
-
await sessionRegistry.close();
|
|
194
|
-
} catch (error) {
|
|
195
|
-
firstError ??= error;
|
|
196
|
-
}
|
|
197
|
-
state = 'closed';
|
|
198
|
-
if (firstError !== undefined) throw firstError;
|
|
199
|
-
})();
|
|
200
|
-
return closePromise;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
return Object.freeze({ close, listen });
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
export {
|
|
207
|
-
MIN_SECRET_BYTES,
|
|
208
|
-
createAgentApiServiceHost,
|
|
209
|
-
};
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { pathToFileURL } from 'node:url';
|
|
3
|
-
|
|
4
|
-
import { startAgentApiServiceFromEnvironment } from './agent-api-service-environment.mjs';
|
|
5
|
-
|
|
6
|
-
function requireProcessLike(value) {
|
|
7
|
-
if (value === null
|
|
8
|
-
|| typeof value !== 'object'
|
|
9
|
-
|| typeof value.on !== 'function'
|
|
10
|
-
|| typeof value.removeListener !== 'function') {
|
|
11
|
-
throw new TypeError('processLike must provide on and removeListener');
|
|
12
|
-
}
|
|
13
|
-
return value;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function requireFunction(value, label) {
|
|
17
|
-
if (typeof value !== 'function') {
|
|
18
|
-
throw new TypeError(`${label} must be a function`);
|
|
19
|
-
}
|
|
20
|
-
return value;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function copyAddress(value) {
|
|
24
|
-
if (value === null
|
|
25
|
-
|| typeof value !== 'object'
|
|
26
|
-
|| typeof value.address !== 'string'
|
|
27
|
-
|| typeof value.family !== 'string'
|
|
28
|
-
|| !Number.isInteger(value.port)) {
|
|
29
|
-
throw new TypeError('Agent API service must provide a network address');
|
|
30
|
-
}
|
|
31
|
-
return Object.freeze({
|
|
32
|
-
address: value.address,
|
|
33
|
-
family: value.family,
|
|
34
|
-
port: value.port,
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async function runAgentApiServiceProcess(options = {}) {
|
|
39
|
-
const processLike = requireProcessLike(
|
|
40
|
-
options.processLike === undefined ? process : options.processLike,
|
|
41
|
-
);
|
|
42
|
-
const startService = requireFunction(
|
|
43
|
-
options.startService === undefined
|
|
44
|
-
? startAgentApiServiceFromEnvironment
|
|
45
|
-
: options.startService,
|
|
46
|
-
'startService',
|
|
47
|
-
);
|
|
48
|
-
const writeStdout = requireFunction(
|
|
49
|
-
options.writeStdout === undefined
|
|
50
|
-
? (value) => process.stdout.write(value)
|
|
51
|
-
: options.writeStdout,
|
|
52
|
-
'writeStdout',
|
|
53
|
-
);
|
|
54
|
-
const writeStderr = requireFunction(
|
|
55
|
-
options.writeStderr === undefined
|
|
56
|
-
? (value) => process.stderr.write(value)
|
|
57
|
-
: options.writeStderr,
|
|
58
|
-
'writeStderr',
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
let running;
|
|
62
|
-
let requestedSignal;
|
|
63
|
-
let shutdownPromise;
|
|
64
|
-
let resolveClosed;
|
|
65
|
-
let rejectClosed;
|
|
66
|
-
const closed = new Promise((resolve, reject) => {
|
|
67
|
-
resolveClosed = resolve;
|
|
68
|
-
rejectClosed = reject;
|
|
69
|
-
});
|
|
70
|
-
closed.catch(() => {});
|
|
71
|
-
|
|
72
|
-
function removeSignalHandlers() {
|
|
73
|
-
processLike.removeListener('SIGINT', onSigint);
|
|
74
|
-
processLike.removeListener('SIGTERM', onSigterm);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function beginShutdown(signal) {
|
|
78
|
-
if (shutdownPromise !== undefined) return shutdownPromise;
|
|
79
|
-
removeSignalHandlers();
|
|
80
|
-
shutdownPromise = (async () => {
|
|
81
|
-
try {
|
|
82
|
-
await running.close();
|
|
83
|
-
if (signal !== undefined) {
|
|
84
|
-
processLike.exitCode = 0;
|
|
85
|
-
writeStdout(`Agent API service stopped after ${signal}.\n`);
|
|
86
|
-
}
|
|
87
|
-
resolveClosed();
|
|
88
|
-
} catch (error) {
|
|
89
|
-
if (signal !== undefined) {
|
|
90
|
-
processLike.exitCode = 1;
|
|
91
|
-
writeStderr('Agent API service shutdown failed.\n');
|
|
92
|
-
}
|
|
93
|
-
rejectClosed(error);
|
|
94
|
-
throw error;
|
|
95
|
-
}
|
|
96
|
-
})();
|
|
97
|
-
return shutdownPromise;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function requestShutdown(signal) {
|
|
101
|
-
if (requestedSignal !== undefined) return;
|
|
102
|
-
requestedSignal = signal;
|
|
103
|
-
if (running !== undefined) {
|
|
104
|
-
void beginShutdown(signal).catch(() => {});
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function onSigint() {
|
|
109
|
-
requestShutdown('SIGINT');
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function onSigterm() {
|
|
113
|
-
requestShutdown('SIGTERM');
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
processLike.on('SIGINT', onSigint);
|
|
117
|
-
processLike.on('SIGTERM', onSigterm);
|
|
118
|
-
|
|
119
|
-
try {
|
|
120
|
-
running = await startService({
|
|
121
|
-
env: options.env === undefined ? process.env : options.env,
|
|
122
|
-
});
|
|
123
|
-
if (running === null
|
|
124
|
-
|| typeof running !== 'object'
|
|
125
|
-
|| typeof running.close !== 'function') {
|
|
126
|
-
throw new TypeError('Agent API service must provide close');
|
|
127
|
-
}
|
|
128
|
-
const address = copyAddress(running.address);
|
|
129
|
-
if (requestedSignal !== undefined) {
|
|
130
|
-
void beginShutdown(requestedSignal).catch(() => {});
|
|
131
|
-
} else {
|
|
132
|
-
writeStdout(`Agent API service listening on ${address.address}:${address.port}.\n`);
|
|
133
|
-
}
|
|
134
|
-
return Object.freeze({
|
|
135
|
-
address,
|
|
136
|
-
close() {
|
|
137
|
-
return beginShutdown();
|
|
138
|
-
},
|
|
139
|
-
closed,
|
|
140
|
-
});
|
|
141
|
-
} catch (error) {
|
|
142
|
-
removeSignalHandlers();
|
|
143
|
-
if (running !== undefined
|
|
144
|
-
&& typeof running?.close === 'function'
|
|
145
|
-
&& shutdownPromise === undefined) {
|
|
146
|
-
try {
|
|
147
|
-
await running.close();
|
|
148
|
-
} catch {
|
|
149
|
-
// The startup error remains the actionable failure.
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
rejectClosed(error);
|
|
153
|
-
throw error;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function isDirectExecution() {
|
|
158
|
-
if (typeof process.argv[1] !== 'string' || process.argv[1].length === 0) return false;
|
|
159
|
-
return pathToFileURL(path.resolve(process.argv[1])).href === import.meta.url;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
if (isDirectExecution()) {
|
|
163
|
-
runAgentApiServiceProcess().catch(() => {
|
|
164
|
-
process.exitCode = 1;
|
|
165
|
-
process.stderr.write('Agent API service failed to start.\n');
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export {
|
|
170
|
-
runAgentApiServiceProcess,
|
|
171
|
-
};
|