@ouro.bot/cli 0.1.0-alpha.95 → 0.1.0-alpha.950
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/LICENSE +21 -0
- package/README.md +154 -23
- package/RepairGuide.ouro/agent.json +5 -0
- package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
- package/RepairGuide.ouro/psyche/SOUL.md +55 -0
- package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
- package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
- package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
- package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
- package/assets/bluebubbles-host +264 -0
- package/assets/sanctuary-host-launcher.sh +16 -0
- package/changelog.json +6015 -16
- package/deploy/unraid/Dockerfile +58 -0
- package/deploy/unraid/README.txt +2997 -0
- package/deploy/unraid/audit-container-spec.sh +4 -0
- package/deploy/unraid/container-runtime.json +1 -0
- package/deploy/unraid/docker-man-template-transaction.mjs +711 -0
- package/deploy/unraid/docker-man-template-xml.cjs +105 -0
- package/deploy/unraid/migrate-sanctuary-bundle.mjs +60 -0
- package/deploy/unraid/ouro-events/bootstrap-spool.sh +92 -0
- package/deploy/unraid/ouro-events/emit-event.mjs +310 -0
- package/deploy/unraid/ouro-events/emit-usenet-event.sh +54 -0
- package/deploy/unraid/ouro-events/install-usenet-guard.sh +435 -0
- package/deploy/unraid/ouro-events/usenet-health.sh +176 -0
- package/deploy/unraid/sanctuary-acceptance-adapter.sh +43 -0
- package/deploy/unraid/sanctuary-acceptance-contract.json +198 -0
- package/deploy/unraid/sanctuary-acceptance-harness.sh +23 -0
- package/deploy/unraid/sanctuary-authority-installation.json +36 -0
- package/deploy/unraid/sanctuary-authority-service.sh +30 -0
- package/deploy/unraid/sanctuary-butler-upgrade.mjs +1274 -0
- package/deploy/unraid/sanctuary-deployment-target.mjs +710 -0
- package/deploy/unraid/sanctuary-replay-gate.mjs +1586 -0
- package/deploy/unraid/sanctuary-safe-rename.py +24 -0
- package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2086 -0
- package/deploy/unraid/sanctuary-unit16-run.sh +560 -0
- package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
- package/deploy/unraid/sanctuary.ouro/agent.json +66 -0
- package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
- package/deploy/unraid/sanctuary.ouro/awaiting/house-care-sweep.md +17 -0
- package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
- package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
- package/deploy/unraid/sanctuary.ouro/mcp/media-mcp.mjs +2231 -0
- package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
- package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
- package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +5 -0
- package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +33 -0
- package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +27 -0
- package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +22 -0
- package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
- package/deploy/unraid/sanctuary.ouro/tool-profiles.json +232 -0
- package/deploy/unraid/sanctuary.xml +30 -0
- package/dist/a2a/card.js +57 -0
- package/dist/a2a/client.js +250 -0
- package/dist/a2a/config.js +50 -0
- package/dist/a2a/delegated-command-grants.js +93 -0
- package/dist/a2a/delegated-command.js +197 -0
- package/dist/a2a/delegation-stores.js +56 -0
- package/dist/a2a/did-resolution.js +93 -0
- package/dist/a2a/escalation-grants.js +84 -0
- package/dist/a2a/escalation-wiring.js +60 -0
- package/dist/a2a/identity.js +258 -0
- package/dist/a2a/inbound-share.js +110 -0
- package/dist/a2a/mission-result-wire.js +196 -0
- package/dist/a2a/onboarding.js +133 -0
- package/dist/a2a/operator-trust.js +399 -0
- package/dist/a2a/outbox-client.js +57 -0
- package/dist/a2a/outbox-store.js +188 -0
- package/dist/a2a/outbox-wire.js +95 -0
- package/dist/a2a/pin-store.js +132 -0
- package/dist/a2a/replay-grant-holders.js +33 -0
- package/dist/a2a/replay-harness.js +188 -0
- package/dist/a2a/resolution-proof.js +53 -0
- package/dist/a2a/sealed-chat.js +113 -0
- package/dist/a2a/seen-ledger.js +120 -0
- package/dist/a2a/server.js +771 -0
- package/dist/a2a/task-store.js +69 -0
- package/dist/a2a/transport.js +45 -0
- package/dist/a2a/trust-commands.js +203 -0
- package/dist/a2a/trusted-files.js +185 -0
- package/dist/a2a/types.js +3 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +360 -0
- package/dist/arc/episodes.js +118 -0
- package/dist/arc/evolution.js +490 -0
- package/dist/arc/flight-recorder.js +1034 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +386 -0
- package/dist/arc/packets.js +336 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/commerce/store.js +755 -0
- package/dist/commerce/types.js +3 -0
- package/dist/heart/active-work.js +798 -40
- package/dist/heart/agent-entry.js +252 -3
- package/dist/heart/approval-files.js +113 -0
- package/dist/heart/approval-store.js +960 -0
- package/dist/heart/attachments/image-normalize.js +201 -0
- package/dist/heart/attachments/materialize.js +97 -0
- package/dist/heart/attachments/originals.js +88 -0
- package/dist/heart/attachments/render.js +29 -0
- package/dist/heart/attachments/sources/bluebubbles.js +156 -0
- package/dist/heart/attachments/sources/cli-local-file.js +78 -0
- package/dist/heart/attachments/sources/index.js +18 -0
- package/dist/heart/attachments/sources/telegram.js +71 -0
- package/dist/heart/attachments/store.js +132 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +497 -0
- package/dist/heart/autonomy-budget.js +478 -0
- package/dist/heart/awaiting/a2a-await-delivery.js +109 -0
- package/dist/heart/awaiting/await-alert.js +152 -0
- package/dist/heart/awaiting/await-expiry.js +143 -0
- package/dist/heart/awaiting/await-loader.js +91 -0
- package/dist/heart/awaiting/await-parser.js +152 -0
- package/dist/heart/awaiting/await-runtime-state.js +111 -0
- package/dist/heart/awaiting/await-scheduler.js +391 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bluebubbles-host-account.js +78 -0
- package/dist/heart/bridges/manager.js +137 -17
- package/dist/heart/bridges/store.js +14 -2
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +44 -18
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +174 -131
- package/dist/heart/context-loss-gauntlet.js +387 -0
- package/dist/heart/context-loss-sentinel.js +1159 -0
- package/dist/heart/core.js +2356 -586
- package/dist/heart/cross-chat-delivery.js +9 -22
- package/dist/heart/daemon/agent-config-check.js +474 -0
- package/dist/heart/daemon/agent-discovery.js +283 -3
- package/dist/heart/daemon/agent-home.js +319 -0
- package/dist/heart/daemon/agent-service.js +542 -0
- package/dist/heart/daemon/agentic-repair.js +547 -0
- package/dist/heart/daemon/await-private-wake.js +59 -0
- package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
- package/dist/heart/daemon/bluebubbles-host.js +273 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +180 -0
- package/dist/heart/daemon/cli-arg-redaction.js +26 -0
- package/dist/heart/daemon/cli-defaults.js +881 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +9235 -0
- package/dist/heart/daemon/cli-help.js +742 -0
- package/dist/heart/daemon/cli-parse.js +3236 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +819 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
- package/dist/heart/daemon/container-healthcheck.js +112 -0
- package/dist/heart/daemon/container-runtime.js +97 -0
- package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
- package/dist/heart/daemon/container-spec-auditor.js +235 -0
- package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
- package/dist/heart/daemon/daemon-cli.js +29 -2360
- package/dist/heart/daemon/daemon-entry.js +953 -11
- package/dist/heart/daemon/daemon-health.js +186 -0
- package/dist/heart/daemon/daemon-rollup.js +57 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +2110 -104
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +1766 -0
- package/dist/heart/daemon/freshness.js +345 -0
- package/dist/heart/daemon/habit-private-wake.js +61 -0
- package/dist/heart/daemon/health-monitor.js +154 -11
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +78 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +79 -10
- package/dist/heart/daemon/logs-prune.js +132 -0
- package/dist/heart/daemon/mcp-canary.js +524 -0
- package/dist/heart/daemon/message-router.js +65 -5
- package/dist/heart/daemon/migrate-to-desk.js +848 -0
- package/dist/heart/daemon/os-cron-deps.js +135 -0
- package/dist/heart/daemon/os-cron.js +22 -14
- package/dist/heart/daemon/ouro-bot-entry.js +6 -3
- package/dist/heart/daemon/ouro-entry.js +9 -3
- package/dist/heart/daemon/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +760 -61
- package/dist/heart/daemon/provider-discovery.js +137 -0
- package/dist/heart/daemon/provider-ping-progress.js +83 -0
- package/dist/heart/daemon/prunable-bundle.js +144 -0
- package/dist/heart/daemon/pulse.js +511 -0
- package/dist/heart/daemon/readiness-repair.js +365 -0
- package/dist/heart/daemon/run-hooks.js +2 -0
- package/dist/heart/daemon/runtime-logging.js +47 -14
- package/dist/heart/daemon/runtime-metadata.js +2 -30
- package/dist/heart/daemon/runtime-mode.js +13 -2
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2654 -0
- package/dist/heart/daemon/sanctuary-acceptance-harness.js +1830 -0
- package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
- package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +955 -0
- package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
- package/dist/heart/daemon/sanctuary-authority-epoch.js +281 -0
- package/dist/heart/daemon/sanctuary-authority-installation.js +161 -0
- package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
- package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +1282 -0
- package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
- package/dist/heart/daemon/sanctuary-bundle-migration.js +730 -0
- package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
- package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +493 -0
- package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
- package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
- package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
- package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
- package/dist/heart/daemon/sanctuary-package-management.js +103 -0
- package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
- package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +475 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-service.js +676 -0
- package/dist/heart/daemon/sense-manager.js +786 -48
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +1 -1
- package/dist/heart/daemon/socket-client.js +180 -12
- package/dist/heart/daemon/stale-bundle-prune.js +113 -0
- package/dist/heart/daemon/startup-tui.js +339 -0
- package/dist/heart/daemon/supercronic-supervisor.js +282 -0
- package/dist/heart/daemon/task-scheduler.js +117 -39
- package/dist/heart/daemon/terminal-ui.js +503 -0
- package/dist/heart/daemon/thoughts.js +138 -54
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -4
- package/dist/heart/external-events/router.js +1523 -0
- package/dist/heart/failure-reports.js +336 -0
- package/dist/heart/file-lock.js +109 -0
- package/dist/heart/frontend-approval-runtime.js +506 -0
- package/dist/heart/frontend-journal.js +215 -0
- package/dist/heart/frontend-session-service.js +271 -0
- package/dist/heart/frontend-socket-client.js +173 -0
- package/dist/heart/frontend-socket.js +434 -0
- package/dist/heart/frontend-turn-errors.js +20 -0
- package/dist/heart/habits/habit-cancel.js +810 -0
- package/dist/heart/habits/habit-lifecycle.js +1327 -0
- package/dist/heart/habits/habit-migration.js +194 -0
- package/dist/heart/habits/habit-parser.js +278 -0
- package/dist/heart/habits/habit-runtime-state.js +93 -0
- package/dist/heart/habits/habit-scheduler.js +653 -0
- package/dist/heart/habits/habit-session-summary.js +318 -0
- package/dist/heart/habits/habit-session.js +636 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
- package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
- package/dist/heart/identity.js +239 -59
- package/dist/heart/kept-notes.js +289 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +175 -0
- package/dist/heart/mail-import-discovery.js +356 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +99 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +406 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +272 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +41 -0
- package/dist/heart/mailbox/mailbox-supervision.js +131 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +197 -0
- package/dist/heart/mailbox/readers/agent-machine.js +428 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
- package/dist/heart/mailbox/readers/mail.js +375 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
- package/dist/heart/mailbox/readers/sessions.js +231 -0
- package/dist/heart/mailbox/readers/shared.js +111 -0
- package/dist/heart/mcp/mcp-server.js +760 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +83 -16
- package/dist/heart/orientation-frame.js +345 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/primitives.js +1 -1
- package/dist/heart/private-runtime/decision-renderer.js +158 -0
- package/dist/heart/private-runtime/index.js +18 -0
- package/dist/heart/private-runtime/ledger.js +221 -0
- package/dist/heart/private-runtime/policy.js +260 -0
- package/dist/heart/private-runtime/types.js +2 -0
- package/dist/heart/progress-story.js +1 -1
- package/dist/heart/provider-attempt.js +137 -0
- package/dist/heart/provider-binding-resolver.js +273 -0
- package/dist/heart/provider-credentials.js +449 -0
- package/dist/heart/provider-failover.js +311 -0
- package/dist/heart/provider-models.js +96 -0
- package/dist/heart/provider-ping.js +265 -0
- package/dist/heart/provider-readiness-cache.js +119 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +176 -60
- package/dist/heart/providers/azure.js +23 -11
- package/dist/heart/providers/error-classification.js +129 -0
- package/dist/heart/providers/github-copilot.js +38 -39
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +26 -8
- package/dist/heart/providers/openai-codex-token.js +349 -0
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/providers/openai-compatible.js +177 -0
- package/dist/heart/reach-channel.js +85 -0
- package/dist/heart/reply-style.js +52 -0
- package/dist/heart/run-ledger.js +247 -0
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +607 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +24 -4
- package/dist/heart/session-activity.js +94 -24
- package/dist/heart/session-events.js +1521 -0
- package/dist/heart/session-playback-cli-main.js +5 -0
- package/dist/heart/session-playback-cli.js +36 -0
- package/dist/heart/session-playback.js +231 -0
- package/dist/heart/session-redaction-repair-cli-main.js +31 -0
- package/dist/heart/session-redaction-repair.js +552 -0
- package/dist/heart/session-stats-cli-main.js +5 -0
- package/dist/heart/session-stats.js +183 -0
- package/dist/heart/session-transcript.js +133 -0
- package/dist/heart/shelf-claims.js +78 -0
- package/dist/heart/shepherd/custody-types.js +2 -0
- package/dist/heart/shepherd/mandates.js +352 -0
- package/dist/heart/shepherd/operation-commands.js +19 -0
- package/dist/heart/shepherd/operations.js +135 -0
- package/dist/heart/shepherd/supervision.js +114 -0
- package/dist/heart/shepherd/types.js +2 -0
- package/dist/heart/shepherd-config.js +113 -0
- package/dist/heart/source-grounding.js +297 -0
- package/dist/heart/start-of-turn-packet.js +372 -0
- package/dist/heart/steward-policy.js +656 -0
- package/dist/heart/streaming.js +631 -207
- package/dist/heart/structured-output.js +196 -0
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync-health.js +152 -0
- package/dist/heart/sync.js +726 -0
- package/dist/heart/target-resolution.js +11 -7
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/timeouts.js +101 -0
- package/dist/heart/tool-activity-callbacks.js +59 -0
- package/dist/heart/tool-approval.js +382 -0
- package/dist/heart/tool-description.js +155 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +206 -0
- package/dist/heart/turn-context.js +496 -0
- package/dist/heart/turn-execution-lease.js +30 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +3 -2
- package/dist/heart/versioning/ouro-path-installer.js +432 -0
- package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
- package/dist/heart/versioning/ouro-version-manager.js +432 -0
- package/dist/heart/versioning/release-sources.js +173 -0
- package/dist/heart/versioning/self-update-defaults.js +294 -0
- package/dist/heart/versioning/self-update.js +196 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/versioning/update-hooks.js +154 -0
- package/dist/heart/versioning/update-state.js +126 -0
- package/dist/heart/versioning/updater-launchd.js +150 -0
- package/dist/heart/versioning/version-intent.js +114 -0
- package/dist/heart/work-card.js +380 -0
- package/dist/mailbox-ui/assets/index-Dbska1tZ.js +1 -0
- package/dist/mailbox-ui/assets/index-DsiKaPyH.css +1 -0
- package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
- package/dist/mailbox-ui/index.html +16 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +889 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/cache-sync-cli.js +58 -0
- package/dist/mailroom/core.js +803 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +568 -0
- package/dist/mailroom/hosted-cache-sync.js +384 -0
- package/dist/mailroom/mbox-import.js +393 -0
- package/dist/mailroom/migration.js +164 -0
- package/dist/mailroom/outbound.js +380 -0
- package/dist/mailroom/policy.js +263 -0
- package/dist/mailroom/reader.js +292 -0
- package/dist/mailroom/search-cache.js +513 -0
- package/dist/mailroom/search-relevance.js +319 -0
- package/dist/mailroom/smtp-ingress.js +176 -0
- package/dist/mailroom/source-state.js +176 -0
- package/dist/mailroom/thread.js +109 -0
- package/dist/mailroom/travel-extract.js +89 -0
- package/dist/mind/bundle-manifest.js +24 -2
- package/dist/mind/context.js +328 -139
- package/dist/mind/desk-section.js +362 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +68 -77
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/friend-link-codes.js +209 -0
- package/dist/mind/friend-merge.js +330 -0
- package/dist/mind/{associative-recall.js → note-search.js} +47 -58
- package/dist/mind/obligation-steering.js +199 -3
- package/dist/mind/outbound-record.js +165 -0
- package/dist/mind/pending.js +36 -10
- package/dist/mind/prompt-budget.js +479 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1085 -198
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/record-paths.js +312 -0
- package/dist/mind/scrutiny.js +173 -0
- package/dist/mind/session-transaction.js +622 -0
- package/dist/nerves/cli-logging.js +7 -1
- package/dist/nerves/coverage/audit-rules.js +15 -6
- package/dist/nerves/coverage/audit.js +28 -2
- package/dist/nerves/coverage/cli.js +1 -1
- package/dist/nerves/coverage/contract.js +5 -5
- package/dist/nerves/coverage/file-completeness.js +143 -5
- package/dist/nerves/coverage/run-artifacts.js +55 -35
- package/dist/nerves/coverage/source-scanner.js +4 -4
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +293 -9
- package/dist/nerves/observation.js +20 -0
- package/dist/nerves/redact.js +79 -0
- package/dist/nerves/review/cli-main.js +5 -0
- package/dist/nerves/review/cli.js +156 -0
- package/dist/nerves/review/core.js +159 -0
- package/dist/nerves/runtime.js +17 -1
- package/dist/repertoire/ado-client.js +15 -56
- package/dist/repertoire/ado-semantic.js +16 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +1201 -0
- package/dist/repertoire/bundle-templates.js +71 -0
- package/dist/repertoire/bw-installer.js +231 -0
- package/dist/repertoire/coding/codex-jsonl.js +64 -0
- package/dist/repertoire/coding/context-pack.js +331 -0
- package/dist/repertoire/coding/feedback.js +174 -32
- package/dist/repertoire/coding/index.js +15 -3
- package/dist/repertoire/coding/manager.js +159 -10
- package/dist/repertoire/coding/spawner.js +40 -11
- package/dist/repertoire/coding/tools.js +182 -18
- package/dist/repertoire/coding/workbench-client.js +272 -0
- package/dist/repertoire/coding/workbench-manager.js +346 -0
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +183 -0
- package/dist/repertoire/desk/classifier.js +362 -0
- package/dist/repertoire/duffel-client.js +185 -0
- package/dist/repertoire/github-client.js +14 -55
- package/dist/repertoire/graph-client.js +11 -52
- package/dist/repertoire/guardrails.js +971 -20
- package/dist/repertoire/house-sweep.js +469 -0
- package/dist/repertoire/mcp-client.js +58 -5
- package/dist/repertoire/mcp-manager.js +427 -139
- package/dist/repertoire/mcp-tools.js +132 -0
- package/dist/repertoire/mcp-write-guard.js +46 -0
- package/dist/repertoire/plugin-mcp.js +175 -0
- package/dist/repertoire/plugins.js +253 -0
- package/dist/repertoire/relationship-authorization.js +322 -0
- package/dist/repertoire/sanctuary-container-policy.js +46 -0
- package/dist/repertoire/shell-sessions.js +134 -0
- package/dist/repertoire/skills.js +48 -4
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-arguments.js +182 -0
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-a2a.js +699 -0
- package/dist/repertoire/tools-attachments.js +322 -0
- package/dist/repertoire/tools-awaiting.js +872 -0
- package/dist/repertoire/tools-base.js +83 -1168
- package/dist/repertoire/tools-bluebubbles.js +2 -0
- package/dist/repertoire/tools-bridge.js +144 -0
- package/dist/repertoire/tools-bundle.js +995 -0
- package/dist/repertoire/tools-commerce.js +253 -0
- package/dist/repertoire/tools-config.js +186 -0
- package/dist/repertoire/tools-continuity.js +582 -0
- package/dist/repertoire/tools-credential.js +383 -0
- package/dist/repertoire/tools-escalation.js +84 -0
- package/dist/repertoire/tools-evolution.js +527 -0
- package/dist/repertoire/tools-files.js +344 -0
- package/dist/repertoire/tools-flight.js +290 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-friend-link.js +57 -0
- package/dist/repertoire/tools-github.js +3 -8
- package/dist/repertoire/tools-habits.js +103 -0
- package/dist/repertoire/tools-house-care.js +174 -0
- package/dist/repertoire/tools-mail.js +1828 -0
- package/dist/repertoire/tools-notes.js +501 -0
- package/dist/repertoire/tools-obligations.js +182 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +482 -0
- package/dist/repertoire/tools-rsvp.js +139 -0
- package/dist/repertoire/tools-runtime.js +238 -0
- package/dist/repertoire/tools-sanctuary-host.js +202 -0
- package/dist/repertoire/tools-session.js +1141 -0
- package/dist/repertoire/tools-shell.js +154 -0
- package/dist/repertoire/tools-shepherd-guidance.js +171 -0
- package/dist/repertoire/tools-shepherd.js +323 -0
- package/dist/repertoire/tools-steward-policy.js +147 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +369 -0
- package/dist/repertoire/tools-teams.js +50 -39
- package/dist/repertoire/tools-telegram-contacts.js +37 -0
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +982 -0
- package/dist/repertoire/tools-unraid.js +556 -0
- package/dist/repertoire/tools-user-profile.js +146 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools-voice-local.js +198 -0
- package/dist/repertoire/tools-voice.js +145 -0
- package/dist/repertoire/tools.js +518 -156
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/unraid-client.js +155 -0
- package/dist/repertoire/unraid-restart.js +339 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +686 -0
- package/dist/rsvp/aisleplanner-client.js +354 -0
- package/dist/rsvp/cli.js +936 -0
- package/dist/rsvp/config.js +327 -0
- package/dist/rsvp/cutover.js +433 -0
- package/dist/rsvp/diagnostics.js +232 -0
- package/dist/rsvp/diff-renderer.js +176 -0
- package/dist/rsvp/habit-policy.js +110 -0
- package/dist/rsvp/habit-stage.js +123 -0
- package/dist/rsvp/incident-bundle.js +97 -0
- package/dist/rsvp/migration.js +204 -0
- package/dist/rsvp/native-habit-runner.js +630 -0
- package/dist/rsvp/outbound-state.js +628 -0
- package/dist/rsvp/query.js +118 -0
- package/dist/rsvp/replay.js +233 -0
- package/dist/rsvp/snapshot.js +232 -0
- package/dist/rsvp/spend-ledger.js +175 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/a2a-entry.js +132 -0
- package/dist/senses/acp-server.js +386 -0
- package/dist/senses/attention-queue.js +186 -0
- package/dist/senses/await-turn-message.js +65 -0
- package/dist/senses/bluebubbles/active-turns.js +216 -0
- package/dist/senses/bluebubbles/attachment-cache.js +53 -0
- package/dist/senses/bluebubbles/attachment-download.js +137 -0
- package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +385 -43
- package/dist/senses/bluebubbles/context-packet.js +207 -0
- package/dist/senses/bluebubbles/context-smoke.js +144 -0
- package/dist/senses/bluebubbles/entry.js +90 -0
- package/dist/senses/bluebubbles/host-account-verifier.js +88 -0
- package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
- package/dist/senses/bluebubbles/index.js +3940 -0
- package/dist/senses/bluebubbles/latest-turn.js +311 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
- package/dist/senses/bluebubbles/outbound-state.js +308 -0
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/reaction-policy.js +47 -0
- package/dist/senses/bluebubbles/replay.js +284 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- package/dist/senses/bluebubbles/webhook-registration.js +257 -0
- package/dist/senses/bluebubbles-meta-guard.js +39 -0
- package/dist/senses/cli/bracketed-paste.js +82 -0
- package/dist/senses/cli/image-paste.js +287 -0
- package/dist/senses/cli/image-ref-navigation.js +75 -0
- package/dist/senses/cli/ink-app.js +156 -0
- package/dist/senses/cli/inline-diff.js +64 -0
- package/dist/senses/cli/input-keys.js +174 -0
- package/dist/senses/cli/kill-ring.js +86 -0
- package/dist/senses/cli/message-list.js +51 -0
- package/dist/senses/cli/ouro-tui.js +607 -0
- package/dist/senses/cli/spinner-imperative.js +135 -0
- package/dist/senses/cli/spinner.js +101 -0
- package/dist/senses/cli/status-line.js +60 -0
- package/dist/senses/cli/streaming-markdown.js +526 -0
- package/dist/senses/cli/tool-display.js +85 -0
- package/dist/senses/cli/tool-render.js +85 -0
- package/dist/senses/cli/tui-store.js +241 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +60 -8
- package/dist/senses/cli.js +570 -309
- package/dist/senses/commands.js +66 -3
- package/dist/senses/context-packet-ledger.js +371 -0
- package/dist/senses/context-packets.js +154 -0
- package/dist/senses/habit-lifecycle-guard.js +24 -0
- package/dist/senses/habit-turn-message.js +160 -0
- package/dist/senses/ingress-evidence.js +2 -0
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +524 -0
- package/dist/senses/pipeline.js +1158 -204
- package/dist/senses/private-runtime-worker.js +805 -0
- package/dist/senses/private-runtime.js +1627 -0
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/root-host-approval-port.js +345 -0
- package/dist/senses/root-host-approval-runtime.js +393 -0
- package/dist/senses/sanctuary-authority-resident.js +102 -0
- package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
- package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
- package/dist/senses/sanctuary-grounding.js +118 -0
- package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
- package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
- package/dist/senses/sanctuary-health-runner.js +104 -0
- package/dist/senses/sanctuary-health.js +422 -0
- package/dist/senses/sanctuary-install-state-contract.js +169 -0
- package/dist/senses/sanctuary-interactive-control.js +410 -0
- package/dist/senses/sanctuary-media-catalog-contract.js +268 -0
- package/dist/senses/sanctuary-media-optimization.js +514 -0
- package/dist/senses/sanctuary-runtime.js +369 -0
- package/dist/senses/sanctuary-sab.js +85 -0
- package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
- package/dist/senses/shared-turn.js +804 -0
- package/dist/senses/shepherd/agent-presentation.js +88 -0
- package/dist/senses/shepherd/attention-page.js +166 -0
- package/dist/senses/shepherd/attention-sidebar.js +76 -0
- package/dist/senses/shepherd/attention.js +295 -0
- package/dist/senses/shepherd/checkin-config.js +76 -0
- package/dist/senses/shepherd/checkin-store.js +386 -0
- package/dist/senses/shepherd/client.js +196 -0
- package/dist/senses/shepherd/cmux.js +483 -0
- package/dist/senses/shepherd/composer.js +336 -0
- package/dist/senses/shepherd/feedback-reply.js +108 -0
- package/dist/senses/shepherd/feedback-source.js +20 -0
- package/dist/senses/shepherd/feedback-store.js +331 -0
- package/dist/senses/shepherd/feedback-submit.js +182 -0
- package/dist/senses/shepherd/feedback-worker.js +208 -0
- package/dist/senses/shepherd/guidance.js +273 -0
- package/dist/senses/shepherd/herdr.js +427 -0
- package/dist/senses/shepherd/host.js +14 -0
- package/dist/senses/shepherd/human-decision-guard.js +29 -0
- package/dist/senses/shepherd/judge-evaluation-command.js +183 -0
- package/dist/senses/shepherd/judge-evaluation-entry.js +13 -0
- package/dist/senses/shepherd/judge-evaluation.js +155 -0
- package/dist/senses/shepherd/judge.js +202 -0
- package/dist/senses/shepherd/notice-outbox.js +262 -0
- package/dist/senses/shepherd/observation-publisher.js +320 -0
- package/dist/senses/shepherd/operations-defaults.js +86 -0
- package/dist/senses/shepherd/operations.js +159 -0
- package/dist/senses/shepherd/owner-notice.js +465 -0
- package/dist/senses/shepherd/prompt-state.js +60 -0
- package/dist/senses/shepherd/recovery.js +543 -0
- package/dist/senses/shepherd/redact.js +66 -0
- package/dist/senses/shepherd/returns.js +79 -0
- package/dist/senses/shepherd/sense.js +821 -0
- package/dist/senses/shepherd/shepherd-judge-corpus-v1.json +170 -0
- package/dist/senses/shepherd/surface.js +123 -0
- package/dist/senses/shepherd/target-binding.js +13 -0
- package/dist/senses/shepherd/terminal-process.js +147 -0
- package/dist/senses/shepherd-entry.js +98 -0
- package/dist/senses/surface-tool.js +109 -0
- package/dist/senses/teams-entry.js +68 -8
- package/dist/senses/teams-image.js +119 -0
- package/dist/senses/teams.js +949 -337
- package/dist/senses/telegram-admission.js +718 -0
- package/dist/senses/telegram-approval-runtime.js +793 -0
- package/dist/senses/telegram-attachments.js +186 -0
- package/dist/senses/telegram-audit-ledger.js +220 -0
- package/dist/senses/telegram-authority-transport.js +231 -0
- package/dist/senses/telegram-client.js +1749 -0
- package/dist/senses/telegram-effect-adapter.js +904 -0
- package/dist/senses/telegram-entry.js +83 -0
- package/dist/senses/telegram-handoff.js +80 -0
- package/dist/senses/telegram.js +2435 -0
- package/dist/senses/trust-gate.js +104 -9
- package/dist/senses/voice/audio-playback.js +237 -0
- package/dist/senses/voice/audio-routing.js +119 -0
- package/dist/senses/voice/call-auth.js +250 -0
- package/dist/senses/voice/elevenlabs.js +202 -0
- package/dist/senses/voice/floor-control.js +431 -0
- package/dist/senses/voice/floor-controller.js +115 -0
- package/dist/senses/voice/golden-path.js +116 -0
- package/dist/senses/voice/index.js +29 -0
- package/dist/senses/voice/local-audio-control.js +344 -0
- package/dist/senses/voice/local-audio-devices.js +516 -0
- package/dist/senses/voice/local-audio-disclosure.js +174 -0
- package/dist/senses/voice/local-audio-identity.js +103 -0
- package/dist/senses/voice/local-audio-join.js +325 -0
- package/dist/senses/voice/local-audio-mute.js +199 -0
- package/dist/senses/voice/local-audio-notify.js +124 -0
- package/dist/senses/voice/local-audio-prompts.js +116 -0
- package/dist/senses/voice/local-audio-transport.js +427 -0
- package/dist/senses/voice/local-audio.js +281 -0
- package/dist/senses/voice/local-media-stream.js +145 -0
- package/dist/senses/voice/meeting.js +113 -0
- package/dist/senses/voice/outbound.js +190 -0
- package/dist/senses/voice/phone.js +33 -0
- package/dist/senses/voice/playback.js +139 -0
- package/dist/senses/voice/process-guards.js +51 -0
- package/dist/senses/voice/realtime-eval.js +496 -0
- package/dist/senses/voice/realtime-tool-schema.js +195 -0
- package/dist/senses/voice/realtime-trace.js +531 -0
- package/dist/senses/voice/transcript.js +70 -0
- package/dist/senses/voice/turn.js +191 -0
- package/dist/senses/voice/twilio-phone-runtime.js +836 -0
- package/dist/senses/voice/twilio-phone.js +5454 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +83 -0
- package/dist/senses/voice-realtime-eval-command.js +99 -0
- package/dist/senses/voice-realtime-eval-entry.js +21 -0
- package/dist/senses/voice-twilio-entry.js +87 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +265 -0
- package/dist/util/frontmatter.js +69 -0
- package/npm-shrinkwrap.json +8165 -0
- package/package.json +75 -13
- package/skills/agent-commerce.md +113 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +99 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/auth-flow.js +0 -430
- package/dist/heart/daemon/ouro-path-installer.js +0 -260
- package/dist/heart/daemon/ouro-version-manager.js +0 -171
- package/dist/heart/daemon/update-hooks.js +0 -138
- package/dist/heart/obligations.js +0 -191
- package/dist/heart/safe-workspace.js +0 -362
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/friends/channel.js +0 -84
- package/dist/mind/friends/group-context.js +0 -144
- package/dist/mind/friends/resolver.js +0 -84
- package/dist/mind/friends/store-file.js +0 -190
- package/dist/mind/friends/store.js +0 -4
- package/dist/mind/friends/tokens.js +0 -26
- package/dist/mind/friends/trust-explanation.js +0 -74
- package/dist/mind/friends/types.js +0 -29
- package/dist/repertoire/tasks/board.js +0 -134
- package/dist/repertoire/tasks/index.js +0 -224
- package/dist/repertoire/tasks/lifecycle.js +0 -80
- package/dist/repertoire/tasks/middleware.js +0 -65
- package/dist/repertoire/tasks/parser.js +0 -173
- package/dist/repertoire/tasks/scanner.js +0 -132
- package/dist/repertoire/tasks/transitions.js +0 -144
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1181
- package/dist/senses/debug-activity.js +0 -154
- package/dist/senses/inner-dialog-worker.js +0 -90
- package/dist/senses/inner-dialog.js +0 -525
- package/subagents/README.md +0 -7
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
- /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
- /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
- /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
- /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
- /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
|
@@ -1,9 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.toAnthropicMessages = toAnthropicMessages;
|
|
40
|
+
exports.classifyAnthropicError = classifyAnthropicError;
|
|
7
41
|
exports.createAnthropicProviderRuntime = createAnthropicProviderRuntime;
|
|
8
42
|
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
9
43
|
const config_1 = require("../config");
|
|
@@ -11,12 +45,13 @@ const identity_1 = require("../identity");
|
|
|
11
45
|
const runtime_1 = require("../../nerves/runtime");
|
|
12
46
|
const streaming_1 = require("../streaming");
|
|
13
47
|
const model_capabilities_1 = require("../model-capabilities");
|
|
48
|
+
const error_classification_1 = require("./error-classification");
|
|
14
49
|
const ANTHROPIC_SETUP_TOKEN_PREFIX = "sk-ant-oat01-";
|
|
15
50
|
const ANTHROPIC_SETUP_TOKEN_MIN_LENGTH = 80;
|
|
16
51
|
const ANTHROPIC_OAUTH_BETA_HEADER = "claude-code-20250219,oauth-2025-04-20,fine-grained-tool-streaming-2025-05-14,interleaved-thinking-2025-05-14";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
52
|
+
// The API refuses newer models to Claude Code versions it considers too old (claude-opus-5-5 needs 2.1.280 or newer),
|
|
53
|
+
// so this names a current release. Raise it when the API asks for a newer one.
|
|
54
|
+
const CLAUDE_CLI_USER_AGENT = "claude-cli/2.1.310 (external, cli)";
|
|
20
55
|
function getAnthropicAgentNameForGuidance() {
|
|
21
56
|
return (0, identity_1.getAgentName)();
|
|
22
57
|
}
|
|
@@ -24,10 +59,8 @@ function getAnthropicSetupTokenInstructions() {
|
|
|
24
59
|
const agentName = getAnthropicAgentNameForGuidance();
|
|
25
60
|
return [
|
|
26
61
|
"Fix:",
|
|
27
|
-
` 1. Run \`ouro auth --agent ${agentName}\``,
|
|
28
|
-
|
|
29
|
-
" 3. Confirm providers.anthropic.setupToken is set",
|
|
30
|
-
" 4. After reauth, retry the failed ouro command or reconnect this session.",
|
|
62
|
+
` 1. Run \`ouro auth --agent ${agentName} --provider anthropic\``,
|
|
63
|
+
" 2. After reauth, retry the failed ouro command or reconnect this session.",
|
|
31
64
|
].join("\n");
|
|
32
65
|
}
|
|
33
66
|
function getAnthropicReauthGuidance(reason) {
|
|
@@ -37,8 +70,7 @@ function getAnthropicReauthGuidance(reason) {
|
|
|
37
70
|
getAnthropicSetupTokenInstructions(),
|
|
38
71
|
].join("\n");
|
|
39
72
|
}
|
|
40
|
-
function resolveAnthropicSetupTokenCredential() {
|
|
41
|
-
const anthropicConfig = (0, config_1.getAnthropicConfig)();
|
|
73
|
+
function resolveAnthropicSetupTokenCredential(anthropicConfig) {
|
|
42
74
|
const token = anthropicConfig.setupToken?.trim();
|
|
43
75
|
if (!token) {
|
|
44
76
|
throw new Error(getAnthropicReauthGuidance("Anthropic provider is selected but no setup-token credential was found."));
|
|
@@ -75,14 +107,13 @@ function parseToolCallInput(argumentsJson) {
|
|
|
75
107
|
}
|
|
76
108
|
}
|
|
77
109
|
function toAnthropicMessages(messages) {
|
|
78
|
-
|
|
110
|
+
const systemParts = [];
|
|
79
111
|
const converted = [];
|
|
80
112
|
for (const msg of messages) {
|
|
81
113
|
if (msg.role === "system") {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
114
|
+
const text = toAnthropicTextContent(msg.content).trim();
|
|
115
|
+
if (text)
|
|
116
|
+
systemParts.push(text);
|
|
86
117
|
continue;
|
|
87
118
|
}
|
|
88
119
|
if (msg.role === "user") {
|
|
@@ -144,7 +175,7 @@ function toAnthropicMessages(messages) {
|
|
|
144
175
|
});
|
|
145
176
|
}
|
|
146
177
|
}
|
|
147
|
-
return { system, messages: converted };
|
|
178
|
+
return { system: systemParts.length > 0 ? systemParts.join("\n\n") : undefined, messages: converted };
|
|
148
179
|
}
|
|
149
180
|
function toAnthropicTools(tools) {
|
|
150
181
|
return tools.map((tool) => ({
|
|
@@ -187,27 +218,26 @@ function mergeAnthropicToolArguments(current, partial) {
|
|
|
187
218
|
}
|
|
188
219
|
return current + partial;
|
|
189
220
|
}
|
|
221
|
+
function classifyAnthropicError(error) {
|
|
222
|
+
return (0, error_classification_1.classifyHttpError)(error, {
|
|
223
|
+
isAuthFailure: isAnthropicAuthFailure,
|
|
224
|
+
isServerError: (e) => e.status === 529,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
190
227
|
function isAnthropicAuthFailure(error) {
|
|
191
|
-
if (!(error instanceof Error))
|
|
192
|
-
return false;
|
|
193
|
-
const status = error.status;
|
|
194
|
-
if (status === 401 || status === 403)
|
|
195
|
-
return true;
|
|
196
228
|
const lower = error.message.toLowerCase();
|
|
197
229
|
return (lower.includes("oauth authentication") ||
|
|
198
230
|
lower.includes("authentication failed") ||
|
|
199
231
|
lower.includes("unauthorized") ||
|
|
200
232
|
lower.includes("invalid api key"));
|
|
201
233
|
}
|
|
202
|
-
function withAnthropicAuthGuidance(error) {
|
|
203
|
-
const base = error instanceof Error ? error.message : String(error);
|
|
204
|
-
if (isAnthropicAuthFailure(error)) {
|
|
205
|
-
return new Error(getAnthropicReauthGuidance(`Anthropic authentication failed (${base}).`));
|
|
206
|
-
}
|
|
207
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
208
|
-
}
|
|
209
234
|
async function streamAnthropicMessages(client, model, request) {
|
|
210
235
|
const { system, messages } = toAnthropicMessages(request.messages);
|
|
236
|
+
const additionalSystemParts = request.messages
|
|
237
|
+
.filter((message) => message.role === "system")
|
|
238
|
+
.slice(1)
|
|
239
|
+
.map((message) => toAnthropicTextContent(message.content).trim())
|
|
240
|
+
.filter((text) => text.length > 0);
|
|
211
241
|
const anthropicTools = toAnthropicTools(request.activeTools);
|
|
212
242
|
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(model);
|
|
213
243
|
const maxTokens = modelCaps.maxOutputTokens ?? 16384;
|
|
@@ -216,21 +246,50 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
216
246
|
max_tokens: maxTokens,
|
|
217
247
|
messages,
|
|
218
248
|
stream: true,
|
|
219
|
-
thinking: { type: "adaptive"
|
|
249
|
+
thinking: { type: "adaptive" },
|
|
250
|
+
output_config: { effort: request.reasoningEffort ?? "medium" },
|
|
220
251
|
};
|
|
221
|
-
|
|
222
|
-
|
|
252
|
+
// The Anthropic API requires a Claude Code identification block in the system
|
|
253
|
+
// prompt when using OAuth setup tokens (sk-ant-oat01). Without it, Opus/Sonnet
|
|
254
|
+
// 4.6 requests are rejected with 400. This is the API's validation that the
|
|
255
|
+
// token is being used by a Claude Code client.
|
|
256
|
+
const preambleText = "You are Claude Code, Anthropic's official CLI for Claude.";
|
|
257
|
+
if (request.systemPrompt) {
|
|
258
|
+
// Structured SystemPrompt: merge preamble + stable prefix into one cached block,
|
|
259
|
+
// volatile suffix as a separate uncached block.
|
|
260
|
+
const stableBlock = {
|
|
261
|
+
type: "text",
|
|
262
|
+
text: preambleText + "\n\n" + request.systemPrompt.stable,
|
|
263
|
+
cache_control: { type: "ephemeral" },
|
|
264
|
+
};
|
|
265
|
+
params.system = [
|
|
266
|
+
stableBlock,
|
|
267
|
+
...(request.systemPrompt.volatile
|
|
268
|
+
? [{ type: "text", text: request.systemPrompt.volatile }]
|
|
269
|
+
: []),
|
|
270
|
+
...additionalSystemParts.map((text) => ({ type: "text", text })),
|
|
271
|
+
];
|
|
272
|
+
}
|
|
273
|
+
else if (system) {
|
|
274
|
+
// Fallback: no structured prompt, extract from messages (legacy path)
|
|
275
|
+
params.system = [{ type: "text", text: preambleText }, { type: "text", text: system }];
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
params.system = [{ type: "text", text: preambleText }];
|
|
279
|
+
}
|
|
223
280
|
if (anthropicTools.length > 0)
|
|
224
281
|
params.tools = anthropicTools;
|
|
225
282
|
if (request.toolChoiceRequired && anthropicTools.length > 0) {
|
|
226
|
-
|
|
283
|
+
// Thinking (adaptive or enabled) only supports tool_choice "auto" or "none".
|
|
284
|
+
// "any" forces tool use which is incompatible with extended thinking.
|
|
285
|
+
params.tool_choice = params.thinking ? { type: "auto" } : /* v8 ignore next -- no-thinking path: thinking always set for 4.6 models @preserve */ { type: "any" };
|
|
227
286
|
}
|
|
228
287
|
let response;
|
|
229
288
|
try {
|
|
230
289
|
response = await client.messages.create(params, request.signal ? { signal: request.signal } : {});
|
|
231
290
|
}
|
|
232
291
|
catch (error) {
|
|
233
|
-
throw
|
|
292
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
234
293
|
}
|
|
235
294
|
let content = "";
|
|
236
295
|
let streamStarted = false;
|
|
@@ -238,7 +297,8 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
238
297
|
const toolCalls = new Map();
|
|
239
298
|
const thinkingBlocks = new Map();
|
|
240
299
|
const redactedBlocks = new Map();
|
|
241
|
-
const answerStreamer = new streaming_1.
|
|
300
|
+
const answerStreamer = new streaming_1.SettleStreamer(request.callbacks, request.eagerSettleStreaming);
|
|
301
|
+
const textOutput = new streaming_1.ProviderTextOutput(request.callbacks);
|
|
242
302
|
try {
|
|
243
303
|
for await (const event of response) {
|
|
244
304
|
if (request.signal?.aborted)
|
|
@@ -264,10 +324,11 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
264
324
|
name,
|
|
265
325
|
arguments: input,
|
|
266
326
|
});
|
|
267
|
-
// Activate eager streaming for sole
|
|
268
|
-
/* v8 ignore next --
|
|
269
|
-
if (name === "
|
|
327
|
+
// Activate eager streaming for sole settle tool call
|
|
328
|
+
/* v8 ignore next -- settle streaming activation, tested via SettleStreamer unit tests @preserve */
|
|
329
|
+
if (name === "settle" && toolCalls.size === 1) {
|
|
270
330
|
answerStreamer.activate();
|
|
331
|
+
textOutput.suppress();
|
|
271
332
|
}
|
|
272
333
|
}
|
|
273
334
|
continue;
|
|
@@ -282,7 +343,7 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
282
343
|
}
|
|
283
344
|
const text = String(delta?.text ?? "");
|
|
284
345
|
content += text;
|
|
285
|
-
|
|
346
|
+
textOutput.emit(text);
|
|
286
347
|
continue;
|
|
287
348
|
}
|
|
288
349
|
if (deltaType === "thinking_delta") {
|
|
@@ -311,8 +372,8 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
311
372
|
if (existing) {
|
|
312
373
|
const partialJson = String(delta?.partial_json ?? "");
|
|
313
374
|
existing.arguments = mergeAnthropicToolArguments(existing.arguments, partialJson);
|
|
314
|
-
/* v8 ignore next --
|
|
315
|
-
if (existing.name === "
|
|
375
|
+
/* v8 ignore next -- settle delta streaming, tested via SettleStreamer unit tests @preserve */
|
|
376
|
+
if (existing.name === "settle" && toolCalls.size === 1) {
|
|
316
377
|
answerStreamer.processDelta(partialJson);
|
|
317
378
|
}
|
|
318
379
|
}
|
|
@@ -336,7 +397,25 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
336
397
|
}
|
|
337
398
|
}
|
|
338
399
|
catch (error) {
|
|
339
|
-
|
|
400
|
+
textOutput.discard();
|
|
401
|
+
answerStreamer.cancel();
|
|
402
|
+
throw error instanceof Error ? error : /* v8 ignore next -- defensive: stream errors are always Error @preserve */ new Error(String(error));
|
|
403
|
+
}
|
|
404
|
+
const completedToolCalls = [...toolCalls.values()];
|
|
405
|
+
let settleFinalization;
|
|
406
|
+
if (request.signal?.aborted) {
|
|
407
|
+
textOutput.discard();
|
|
408
|
+
answerStreamer.cancel();
|
|
409
|
+
}
|
|
410
|
+
else if (completedToolCalls.length === 1
|
|
411
|
+
&& completedToolCalls[0].name === "settle"
|
|
412
|
+
&& answerStreamer.detected) {
|
|
413
|
+
textOutput.discard();
|
|
414
|
+
settleFinalization = (0, streaming_1.finalizeSettleStream)(answerStreamer, completedToolCalls[0].arguments);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
answerStreamer.cancel();
|
|
418
|
+
textOutput.flush();
|
|
340
419
|
}
|
|
341
420
|
// Collect all thinking blocks (regular + redacted) sorted by index to preserve ordering
|
|
342
421
|
const allThinkingIndices = [...thinkingBlocks.keys(), ...redactedBlocks.keys()].sort((a, b) => a - b);
|
|
@@ -348,40 +427,66 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
348
427
|
});
|
|
349
428
|
return {
|
|
350
429
|
content,
|
|
351
|
-
toolCalls:
|
|
430
|
+
toolCalls: completedToolCalls,
|
|
352
431
|
outputItems,
|
|
353
432
|
usage,
|
|
354
|
-
|
|
433
|
+
settleStreamed: answerStreamer.streamed,
|
|
434
|
+
...(settleFinalization ? { settleFinalization } : {}),
|
|
355
435
|
};
|
|
356
436
|
}
|
|
357
|
-
function createAnthropicProviderRuntime() {
|
|
437
|
+
function createAnthropicProviderRuntime(model, anthropicConfig = (0, config_1.getAnthropicConfig)()) {
|
|
358
438
|
(0, runtime_1.emitNervesEvent)({
|
|
359
439
|
component: "engine",
|
|
360
440
|
event: "engine.provider_init",
|
|
361
441
|
message: "anthropic provider init",
|
|
362
442
|
meta: { provider: "anthropic" },
|
|
363
443
|
});
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
throw new Error(getAnthropicReauthGuidance("provider 'anthropic' is selected in agent.json but providers.anthropic.model/setupToken is incomplete in secrets.json."));
|
|
444
|
+
if (!anthropicConfig.setupToken) {
|
|
445
|
+
throw new Error(getAnthropicReauthGuidance("provider 'anthropic' is selected but anthropic.setupToken is missing in the agent vault."));
|
|
367
446
|
}
|
|
368
|
-
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(
|
|
447
|
+
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(model);
|
|
369
448
|
const capabilities = new Set();
|
|
370
449
|
if (modelCaps.reasoningEffort)
|
|
371
450
|
capabilities.add("reasoning-effort");
|
|
372
|
-
const credential = resolveAnthropicSetupTokenCredential();
|
|
373
|
-
const
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
451
|
+
const credential = resolveAnthropicSetupTokenCredential(anthropicConfig);
|
|
452
|
+
const refreshToken = anthropicConfig.refreshToken;
|
|
453
|
+
const expiresAt = anthropicConfig.expiresAt;
|
|
454
|
+
function createClient(token) {
|
|
455
|
+
return new sdk_1.default({
|
|
456
|
+
authToken: token,
|
|
457
|
+
maxRetries: 0,
|
|
458
|
+
defaultHeaders: {
|
|
459
|
+
"anthropic-beta": ANTHROPIC_OAUTH_BETA_HEADER,
|
|
460
|
+
"anthropic-dangerous-direct-browser-access": "true",
|
|
461
|
+
"user-agent": CLAUDE_CLI_USER_AGENT,
|
|
462
|
+
"x-app": "cli",
|
|
463
|
+
},
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
let currentToken = credential.token;
|
|
467
|
+
let client = createClient(currentToken);
|
|
468
|
+
/* v8 ignore start -- token refresh: dynamic import + ensureFreshToken, tested via integration @preserve */
|
|
469
|
+
async function ensureClient() {
|
|
470
|
+
try {
|
|
471
|
+
const { ensureFreshToken } = await Promise.resolve().then(() => __importStar(require("./anthropic-token")));
|
|
472
|
+
const { getAgentName } = await Promise.resolve().then(() => __importStar(require("../identity")));
|
|
473
|
+
const freshToken = await ensureFreshToken(currentToken, refreshToken, expiresAt, getAgentName());
|
|
474
|
+
if (freshToken !== currentToken) {
|
|
475
|
+
currentToken = freshToken;
|
|
476
|
+
client = createClient(freshToken);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
catch {
|
|
480
|
+
// refresh failed — use existing client
|
|
481
|
+
}
|
|
482
|
+
return client;
|
|
483
|
+
}
|
|
484
|
+
/* v8 ignore stop */
|
|
381
485
|
return {
|
|
382
486
|
id: "anthropic",
|
|
383
|
-
model
|
|
384
|
-
client
|
|
487
|
+
model,
|
|
488
|
+
/* v8 ignore next -- getter: returns mutable client ref @preserve */
|
|
489
|
+
get client() { return client; },
|
|
385
490
|
capabilities,
|
|
386
491
|
supportedReasoningEfforts: modelCaps.reasoningEffort,
|
|
387
492
|
resetTurnState(_messages) {
|
|
@@ -390,8 +495,19 @@ function createAnthropicProviderRuntime() {
|
|
|
390
495
|
appendToolOutput(_callId, _output) {
|
|
391
496
|
// Anthropic uses canonical messages for tool_result tracking.
|
|
392
497
|
},
|
|
393
|
-
streamTurn(request) {
|
|
394
|
-
|
|
498
|
+
async streamTurn(request) {
|
|
499
|
+
const freshClient = await ensureClient();
|
|
500
|
+
return streamAnthropicMessages(freshClient, model, request);
|
|
501
|
+
},
|
|
502
|
+
/* v8 ignore start -- ping: tested via provider-ping.test.ts @preserve */
|
|
503
|
+
async ping(signal) {
|
|
504
|
+
const freshClient = await ensureClient();
|
|
505
|
+
await freshClient.messages.create({ model: "claude-haiku-4-5-20251001", max_tokens: 1, messages: [{ role: "user", content: "ping" }] }, { signal, headers: { "anthropic-beta": "claude-code-20250219,oauth-2025-04-20" } });
|
|
506
|
+
},
|
|
507
|
+
/* v8 ignore stop */
|
|
508
|
+
/* v8 ignore next 3 -- delegation: classification logic tested via classifyAnthropicError @preserve */
|
|
509
|
+
classifyError(error) {
|
|
510
|
+
return classifyAnthropicError(error);
|
|
395
511
|
},
|
|
396
512
|
};
|
|
397
513
|
}
|
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.classifyAzureError = classifyAzureError;
|
|
36
37
|
exports.createAzureTokenProvider = createAzureTokenProvider;
|
|
37
38
|
exports.createAzureProviderRuntime = createAzureProviderRuntime;
|
|
38
39
|
const openai_1 = require("openai");
|
|
@@ -40,7 +41,11 @@ const config_1 = require("../config");
|
|
|
40
41
|
const runtime_1 = require("../../nerves/runtime");
|
|
41
42
|
const streaming_1 = require("../streaming");
|
|
42
43
|
const model_capabilities_1 = require("../model-capabilities");
|
|
44
|
+
const error_classification_1 = require("./error-classification");
|
|
43
45
|
const COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default";
|
|
46
|
+
function classifyAzureError(error) {
|
|
47
|
+
return (0, error_classification_1.classifyHttpError)(error);
|
|
48
|
+
}
|
|
44
49
|
// @azure/identity is imported dynamically (below) rather than at the top level
|
|
45
50
|
// because it's a heavy package (~30+ transitive deps) and we only need it when
|
|
46
51
|
// using the managed-identity auth path. API-key users and other providers
|
|
@@ -63,14 +68,13 @@ function createAzureTokenProvider(managedIdentityClientId) {
|
|
|
63
68
|
const detail = err instanceof Error ? err.message : String(err);
|
|
64
69
|
throw new Error(`Azure OpenAI authentication failed: ${detail}\n` +
|
|
65
70
|
"To fix this, either:\n" +
|
|
66
|
-
" 1.
|
|
71
|
+
" 1. Run `ouro auth --agent <agent> --provider azure`, or\n" +
|
|
67
72
|
" 2. Run 'az login' to authenticate with your Azure account (for local dev), or\n" +
|
|
68
|
-
" 3. Attach a managed identity to your App Service and
|
|
73
|
+
" 3. Attach a managed identity to your App Service and store azure.managedIdentityClientId in the agent vault.");
|
|
69
74
|
}
|
|
70
75
|
};
|
|
71
76
|
}
|
|
72
|
-
function createAzureProviderRuntime() {
|
|
73
|
-
const azureConfig = (0, config_1.getAzureConfig)();
|
|
77
|
+
function createAzureProviderRuntime(model, azureConfig = (0, config_1.getAzureConfig)()) {
|
|
74
78
|
const useApiKey = !!azureConfig.apiKey;
|
|
75
79
|
const authMethod = useApiKey ? "key" : "managed-identity";
|
|
76
80
|
(0, runtime_1.emitNervesEvent)({
|
|
@@ -79,10 +83,10 @@ function createAzureProviderRuntime() {
|
|
|
79
83
|
message: "azure provider init",
|
|
80
84
|
meta: { provider: "azure", authMethod },
|
|
81
85
|
});
|
|
82
|
-
if (!(azureConfig.endpoint && azureConfig.deployment
|
|
83
|
-
throw new Error("provider 'azure' is selected
|
|
86
|
+
if (!(azureConfig.endpoint && azureConfig.deployment)) {
|
|
87
|
+
throw new Error("provider 'azure' is selected but azure endpoint/deployment is incomplete in the agent vault. Run `ouro auth --agent <agent> --provider azure`.");
|
|
84
88
|
}
|
|
85
|
-
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(
|
|
89
|
+
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(model);
|
|
86
90
|
const capabilities = new Set();
|
|
87
91
|
if (modelCaps.reasoningEffort)
|
|
88
92
|
capabilities.add("reasoning-effort");
|
|
@@ -90,7 +94,6 @@ function createAzureProviderRuntime() {
|
|
|
90
94
|
endpoint: azureConfig.endpoint.replace(/\/openai.*$/, ""),
|
|
91
95
|
deployment: azureConfig.deployment,
|
|
92
96
|
apiVersion: azureConfig.apiVersion,
|
|
93
|
-
timeout: 30000,
|
|
94
97
|
maxRetries: 0,
|
|
95
98
|
};
|
|
96
99
|
if (useApiKey) {
|
|
@@ -105,7 +108,7 @@ function createAzureProviderRuntime() {
|
|
|
105
108
|
let nativeInstructions = "";
|
|
106
109
|
return {
|
|
107
110
|
id: "azure",
|
|
108
|
-
model
|
|
111
|
+
model,
|
|
109
112
|
client,
|
|
110
113
|
capabilities,
|
|
111
114
|
supportedReasoningEfforts: modelCaps.reasoningEffort,
|
|
@@ -117,7 +120,7 @@ function createAzureProviderRuntime() {
|
|
|
117
120
|
appendToolOutput(callId, output) {
|
|
118
121
|
if (!nativeInput)
|
|
119
122
|
return;
|
|
120
|
-
nativeInput.push({ type: "function_call_output", call_id: callId, output });
|
|
123
|
+
nativeInput.push({ type: "function_call_output", call_id: callId, output: (0, streaming_1.truncateResponsesFunctionCallOutput)(output) });
|
|
121
124
|
},
|
|
122
125
|
async streamTurn(request) {
|
|
123
126
|
if (!nativeInput)
|
|
@@ -136,10 +139,19 @@ function createAzureProviderRuntime() {
|
|
|
136
139
|
params.metadata = { trace_id: request.traceId };
|
|
137
140
|
if (request.toolChoiceRequired)
|
|
138
141
|
params.tool_choice = "required";
|
|
139
|
-
const result = await (0, streaming_1.streamResponsesApi)(this.client, params, request.callbacks, request.signal);
|
|
142
|
+
const result = await (0, streaming_1.streamResponsesApi)(this.client, params, request.callbacks, request.signal, request.eagerSettleStreaming);
|
|
140
143
|
for (const item of result.outputItems)
|
|
141
144
|
nativeInput.push(item);
|
|
142
145
|
return result;
|
|
143
146
|
},
|
|
147
|
+
/* v8 ignore start -- ping: tested via provider-ping.test.ts @preserve */
|
|
148
|
+
async ping(signal) {
|
|
149
|
+
await this.client.responses.create({ model: this.model, input: "ping", max_output_tokens: 16 }, { signal });
|
|
150
|
+
},
|
|
151
|
+
/* v8 ignore stop */
|
|
152
|
+
/* v8 ignore next 3 -- delegation: classification logic tested via classifyAzureError @preserve */
|
|
153
|
+
classifyError(error) {
|
|
154
|
+
return classifyAzureError(error);
|
|
155
|
+
},
|
|
144
156
|
};
|
|
145
157
|
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isNetworkError = isNetworkError;
|
|
4
|
+
exports.classifyHttpError = classifyHttpError;
|
|
5
|
+
exports.extractProviderErrorDetails = extractProviderErrorDetails;
|
|
6
|
+
exports.summarizeProviderError = summarizeProviderError;
|
|
7
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
8
|
+
// Node socket / DNS error codes that indicate a transient network failure.
|
|
9
|
+
const NETWORK_ERROR_CODES = new Set([
|
|
10
|
+
"ECONNRESET",
|
|
11
|
+
"ECONNREFUSED",
|
|
12
|
+
"ENOTFOUND",
|
|
13
|
+
"ETIMEDOUT",
|
|
14
|
+
"EPIPE",
|
|
15
|
+
"EAI_AGAIN",
|
|
16
|
+
"EHOSTUNREACH",
|
|
17
|
+
"ENETUNREACH",
|
|
18
|
+
"ECONNABORTED",
|
|
19
|
+
]);
|
|
20
|
+
// Substrings the OpenAI/Anthropic SDKs use when wrapping fetch/socket failures
|
|
21
|
+
// into Error.message instead of an err.code.
|
|
22
|
+
const NETWORK_ERROR_MESSAGE_PATTERNS = [
|
|
23
|
+
"fetch failed",
|
|
24
|
+
"socket hang up",
|
|
25
|
+
"getaddrinfo",
|
|
26
|
+
"request timed out", // OpenAI SDK timeout — see SDK source
|
|
27
|
+
"request timeout",
|
|
28
|
+
"connection error",
|
|
29
|
+
];
|
|
30
|
+
// True if the error looks like a transient network issue (no HTTP status, just
|
|
31
|
+
// a socket/DNS/timeout failure from the underlying transport).
|
|
32
|
+
function isNetworkError(error) {
|
|
33
|
+
if (error.status !== undefined)
|
|
34
|
+
return false;
|
|
35
|
+
const code = error.code || "";
|
|
36
|
+
if (NETWORK_ERROR_CODES.has(code))
|
|
37
|
+
return true;
|
|
38
|
+
const msg = (error.message || "").toLowerCase();
|
|
39
|
+
return NETWORK_ERROR_MESSAGE_PATTERNS.some((pat) => msg.includes(pat));
|
|
40
|
+
}
|
|
41
|
+
// Standard HTTP error → ProviderErrorClassification mapping. Providers wrap
|
|
42
|
+
// this with their own overrides.
|
|
43
|
+
function classifyHttpError(error, overrides) {
|
|
44
|
+
const status = error.status;
|
|
45
|
+
if (overrides?.isAuthFailure?.(error) || status === 401 || status === 403) {
|
|
46
|
+
return "auth-failure";
|
|
47
|
+
}
|
|
48
|
+
if (status === 429) {
|
|
49
|
+
if (overrides?.isUsageLimit?.(error))
|
|
50
|
+
return "usage-limit";
|
|
51
|
+
return "rate-limit";
|
|
52
|
+
}
|
|
53
|
+
if (overrides?.isServerError?.(error) || (status !== undefined && status >= 500)) {
|
|
54
|
+
return "server-error";
|
|
55
|
+
}
|
|
56
|
+
if (isNetworkError(error))
|
|
57
|
+
return "network-error";
|
|
58
|
+
return "unknown";
|
|
59
|
+
}
|
|
60
|
+
// Pull HTTP status and a redacted body excerpt off a provider error if
|
|
61
|
+
// either is present. SDK shapes: OpenAI puts `status` on the error, body
|
|
62
|
+
// often on `error.error` or `error.response`. Keep this purely defensive —
|
|
63
|
+
// any missing field returns undefined so callers can decide whether to
|
|
64
|
+
// include it. The body excerpt is capped to 240 chars and stripped of
|
|
65
|
+
// known auth-token-looking substrings.
|
|
66
|
+
const ERROR_BODY_EXCERPT_MAX = 240;
|
|
67
|
+
const TOKEN_PATTERN = /[A-Za-z0-9_\-]{32,}/g;
|
|
68
|
+
function shorten(value) {
|
|
69
|
+
const collapsed = value.replace(/\s+/g, " ").trim();
|
|
70
|
+
if (collapsed.length === 0)
|
|
71
|
+
return "";
|
|
72
|
+
const redacted = collapsed.replace(TOKEN_PATTERN, "[redacted]");
|
|
73
|
+
return redacted.length > ERROR_BODY_EXCERPT_MAX
|
|
74
|
+
? `${redacted.slice(0, ERROR_BODY_EXCERPT_MAX - 3)}...`
|
|
75
|
+
: redacted;
|
|
76
|
+
}
|
|
77
|
+
function extractProviderErrorDetails(error) {
|
|
78
|
+
const details = {};
|
|
79
|
+
const status = error.status;
|
|
80
|
+
if (typeof status === "number" && Number.isFinite(status))
|
|
81
|
+
details.status = status;
|
|
82
|
+
const errorAsRecord = error;
|
|
83
|
+
const candidates = [
|
|
84
|
+
errorAsRecord.error,
|
|
85
|
+
errorAsRecord.response,
|
|
86
|
+
errorAsRecord.body,
|
|
87
|
+
error.message,
|
|
88
|
+
];
|
|
89
|
+
/* v8 ignore start -- candidate-shape branches: production provider errors expose string messages; object-shaped error.body and the string-false fall-through are fallbacks for non-OpenAI SDK shapes @preserve */
|
|
90
|
+
for (const candidate of candidates) {
|
|
91
|
+
if (!candidate)
|
|
92
|
+
continue;
|
|
93
|
+
if (typeof candidate === "string") {
|
|
94
|
+
const excerpt = shorten(candidate);
|
|
95
|
+
if (excerpt) {
|
|
96
|
+
details.bodyExcerpt = excerpt;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (typeof candidate === "object") {
|
|
101
|
+
try {
|
|
102
|
+
const excerpt = shorten(JSON.stringify(candidate));
|
|
103
|
+
if (excerpt) {
|
|
104
|
+
details.bodyExcerpt = excerpt;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Circular structure or otherwise unstringifyable; skip.
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/* v8 ignore stop */
|
|
114
|
+
return details;
|
|
115
|
+
}
|
|
116
|
+
function summarizeProviderError(error, classification, providerId, model) {
|
|
117
|
+
const details = extractProviderErrorDetails(error);
|
|
118
|
+
const statusPart = details.status !== undefined ? ` HTTP ${details.status}` : "";
|
|
119
|
+
const excerptPart = details.bodyExcerpt ? ` — ${details.bodyExcerpt}` : "";
|
|
120
|
+
return `provider ${providerId}/${model}: ${classification}${statusPart}${excerptPart}`;
|
|
121
|
+
}
|
|
122
|
+
/* v8 ignore start — module-level observability event */
|
|
123
|
+
(0, runtime_1.emitNervesEvent)({
|
|
124
|
+
component: "engine",
|
|
125
|
+
event: "engine.error_classification_loaded",
|
|
126
|
+
message: "shared provider error classification loaded",
|
|
127
|
+
meta: {},
|
|
128
|
+
});
|
|
129
|
+
/* v8 ignore stop */
|