@ouro.bot/cli 0.1.0-alpha.97 → 0.1.0-alpha.971
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 +6141 -16
- package/deploy/unraid/Dockerfile +58 -0
- package/deploy/unraid/INSTALL.md +64 -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/credit-gateway.md +95 -0
- package/deploy/unraid/docker-man-template-transaction.mjs +727 -0
- package/deploy/unraid/docker-man-template-xml.cjs +105 -0
- package/deploy/unraid/install.sh +274 -0
- package/deploy/unraid/migrate-sanctuary-bundle.mjs +63 -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 +1356 -0
- package/deploy/unraid/sanctuary-deployment-target.mjs +710 -0
- package/deploy/unraid/sanctuary-replay-gate.mjs +1761 -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 +2255 -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 +27 -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/gateway/keys.js +117 -0
- package/dist/gateway/server.js +429 -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 +511 -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 +130 -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 +178 -131
- package/dist/heart/context-loss-gauntlet.js +387 -0
- package/dist/heart/context-loss-sentinel.js +1204 -0
- package/dist/heart/core.js +2377 -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 +9267 -0
- package/dist/heart/daemon/cli-help.js +754 -0
- package/dist/heart/daemon/cli-parse.js +3329 -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 +291 -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 +1324 -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 +1531 -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 +376 -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 +266 -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 +248 -67
- 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 +608 -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 +123 -0
- package/dist/heart/source-grounding.js +302 -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 +336 -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 +168 -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 +1130 -199
- 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 +1199 -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 +146 -34
- 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 +471 -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 +50 -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 +897 -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 +588 -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 +325 -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} +393 -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 +4054 -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 +335 -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 +857 -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 +786 -0
- package/dist/senses/sanctuary-health-runner.js +106 -0
- package/dist/senses/sanctuary-health.js +442 -0
- package/dist/senses/sanctuary-house.js +97 -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 +371 -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 +832 -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/copilot-app.js +648 -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 +17 -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 +210 -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 +489 -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 +849 -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 +998 -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 +1755 -0
- package/dist/senses/telegram-effect-adapter.js +904 -0
- package/dist/senses/telegram-entry.js +83 -0
- package/dist/senses/telegram-handoff.js +154 -0
- package/dist/senses/telegram.js +2474 -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 +8190 -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 -381
- 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,44 @@
|
|
|
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.toAnthropicTools = toAnthropicTools;
|
|
41
|
+
exports.classifyAnthropicError = classifyAnthropicError;
|
|
7
42
|
exports.createAnthropicProviderRuntime = createAnthropicProviderRuntime;
|
|
8
43
|
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
9
44
|
const config_1 = require("../config");
|
|
@@ -11,12 +46,13 @@ const identity_1 = require("../identity");
|
|
|
11
46
|
const runtime_1 = require("../../nerves/runtime");
|
|
12
47
|
const streaming_1 = require("../streaming");
|
|
13
48
|
const model_capabilities_1 = require("../model-capabilities");
|
|
49
|
+
const error_classification_1 = require("./error-classification");
|
|
14
50
|
const ANTHROPIC_SETUP_TOKEN_PREFIX = "sk-ant-oat01-";
|
|
15
51
|
const ANTHROPIC_SETUP_TOKEN_MIN_LENGTH = 80;
|
|
16
52
|
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
|
-
|
|
53
|
+
// The API refuses newer models to Claude Code versions it considers too old (claude-opus-5-5 needs 2.1.280 or newer),
|
|
54
|
+
// so this names a current release. Raise it when the API asks for a newer one.
|
|
55
|
+
const CLAUDE_CLI_USER_AGENT = "claude-cli/2.1.310 (external, cli)";
|
|
20
56
|
function getAnthropicAgentNameForGuidance() {
|
|
21
57
|
return (0, identity_1.getAgentName)();
|
|
22
58
|
}
|
|
@@ -24,10 +60,8 @@ function getAnthropicSetupTokenInstructions() {
|
|
|
24
60
|
const agentName = getAnthropicAgentNameForGuidance();
|
|
25
61
|
return [
|
|
26
62
|
"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.",
|
|
63
|
+
` 1. Run \`ouro auth --agent ${agentName} --provider anthropic\``,
|
|
64
|
+
" 2. After reauth, retry the failed ouro command or reconnect this session.",
|
|
31
65
|
].join("\n");
|
|
32
66
|
}
|
|
33
67
|
function getAnthropicReauthGuidance(reason) {
|
|
@@ -37,8 +71,7 @@ function getAnthropicReauthGuidance(reason) {
|
|
|
37
71
|
getAnthropicSetupTokenInstructions(),
|
|
38
72
|
].join("\n");
|
|
39
73
|
}
|
|
40
|
-
function resolveAnthropicSetupTokenCredential() {
|
|
41
|
-
const anthropicConfig = (0, config_1.getAnthropicConfig)();
|
|
74
|
+
function resolveAnthropicSetupTokenCredential(anthropicConfig) {
|
|
42
75
|
const token = anthropicConfig.setupToken?.trim();
|
|
43
76
|
if (!token) {
|
|
44
77
|
throw new Error(getAnthropicReauthGuidance("Anthropic provider is selected but no setup-token credential was found."));
|
|
@@ -75,14 +108,13 @@ function parseToolCallInput(argumentsJson) {
|
|
|
75
108
|
}
|
|
76
109
|
}
|
|
77
110
|
function toAnthropicMessages(messages) {
|
|
78
|
-
|
|
111
|
+
const systemParts = [];
|
|
79
112
|
const converted = [];
|
|
80
113
|
for (const msg of messages) {
|
|
81
114
|
if (msg.role === "system") {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
115
|
+
const text = toAnthropicTextContent(msg.content).trim();
|
|
116
|
+
if (text)
|
|
117
|
+
systemParts.push(text);
|
|
86
118
|
continue;
|
|
87
119
|
}
|
|
88
120
|
if (msg.role === "user") {
|
|
@@ -144,14 +176,20 @@ function toAnthropicMessages(messages) {
|
|
|
144
176
|
});
|
|
145
177
|
}
|
|
146
178
|
}
|
|
147
|
-
return { system, messages: converted };
|
|
179
|
+
return { system: systemParts.length > 0 ? systemParts.join("\n\n") : undefined, messages: converted };
|
|
148
180
|
}
|
|
181
|
+
// The Anthropic API rejects the whole request when any tool's input_schema has
|
|
182
|
+
// oneOf, allOf or anyOf at the top level, so those keys are dropped here. Each
|
|
183
|
+
// tool's handler still enforces its own either/or rules.
|
|
149
184
|
function toAnthropicTools(tools) {
|
|
150
|
-
return tools.map((tool) =>
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
185
|
+
return tools.map((tool) => {
|
|
186
|
+
const { oneOf: _oneOf, allOf: _allOf, anyOf: _anyOf, ...schema } = tool.function.parameters ?? { type: "object", properties: {} };
|
|
187
|
+
return {
|
|
188
|
+
name: tool.function.name,
|
|
189
|
+
description: tool.function.description ?? "",
|
|
190
|
+
input_schema: schema,
|
|
191
|
+
};
|
|
192
|
+
});
|
|
155
193
|
}
|
|
156
194
|
function toAnthropicUsage(raw) {
|
|
157
195
|
const inputTokens = Number(raw.input_tokens ?? 0) || 0;
|
|
@@ -187,27 +225,36 @@ function mergeAnthropicToolArguments(current, partial) {
|
|
|
187
225
|
}
|
|
188
226
|
return current + partial;
|
|
189
227
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
228
|
+
// An org whose prepaid API credits are used up gets HTTP 400 (or 402) with this phrase. That is a
|
|
229
|
+
// usage limit, not a malformed request, so failover tells the human the right thing.
|
|
230
|
+
const ANTHROPIC_CREDIT_LOW_PHRASE = "credit balance is too low";
|
|
231
|
+
function isAnthropicCreditExhausted(error) {
|
|
193
232
|
const status = error.status;
|
|
194
|
-
|
|
195
|
-
|
|
233
|
+
return (status === 400 || status === 402) && error.message.toLowerCase().includes(ANTHROPIC_CREDIT_LOW_PHRASE);
|
|
234
|
+
}
|
|
235
|
+
function classifyAnthropicError(error) {
|
|
236
|
+
if (isAnthropicCreditExhausted(error))
|
|
237
|
+
return "usage-limit";
|
|
238
|
+
return (0, error_classification_1.classifyHttpError)(error, {
|
|
239
|
+
isAuthFailure: isAnthropicAuthFailure,
|
|
240
|
+
isServerError: (e) => e.status === 529,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
function isAnthropicAuthFailure(error) {
|
|
196
244
|
const lower = error.message.toLowerCase();
|
|
197
245
|
return (lower.includes("oauth authentication") ||
|
|
198
246
|
lower.includes("authentication failed") ||
|
|
199
247
|
lower.includes("unauthorized") ||
|
|
200
|
-
lower.includes("invalid api key")
|
|
248
|
+
lower.includes("invalid api key") ||
|
|
249
|
+
lower.includes("invalid x-api-key"));
|
|
201
250
|
}
|
|
202
|
-
function
|
|
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
|
-
async function streamAnthropicMessages(client, model, request) {
|
|
251
|
+
async function streamAnthropicMessages(client, model, request, options = { claudeCodePreamble: true }) {
|
|
210
252
|
const { system, messages } = toAnthropicMessages(request.messages);
|
|
253
|
+
const additionalSystemParts = request.messages
|
|
254
|
+
.filter((message) => message.role === "system")
|
|
255
|
+
.slice(1)
|
|
256
|
+
.map((message) => toAnthropicTextContent(message.content).trim())
|
|
257
|
+
.filter((text) => text.length > 0);
|
|
211
258
|
const anthropicTools = toAnthropicTools(request.activeTools);
|
|
212
259
|
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(model);
|
|
213
260
|
const maxTokens = modelCaps.maxOutputTokens ?? 16384;
|
|
@@ -216,21 +263,53 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
216
263
|
max_tokens: maxTokens,
|
|
217
264
|
messages,
|
|
218
265
|
stream: true,
|
|
219
|
-
thinking: { type: "adaptive"
|
|
266
|
+
thinking: { type: "adaptive" },
|
|
267
|
+
output_config: { effort: request.reasoningEffort ?? "medium" },
|
|
220
268
|
};
|
|
221
|
-
|
|
222
|
-
|
|
269
|
+
// The Anthropic API requires a Claude Code identification block in the system
|
|
270
|
+
// prompt when using OAuth setup tokens (sk-ant-oat01). Without it, Opus/Sonnet
|
|
271
|
+
// 4.6 requests are rejected with 400. This is the API's validation that the
|
|
272
|
+
// token is being used by a Claude Code client.
|
|
273
|
+
// API-key mode (a plain API key, for example through a credit gateway) needs no such block.
|
|
274
|
+
const preambleText = options.claudeCodePreamble ? "You are Claude Code, Anthropic's official CLI for Claude." : "";
|
|
275
|
+
if (request.systemPrompt) {
|
|
276
|
+
// Structured SystemPrompt: merge preamble + stable prefix into one cached block,
|
|
277
|
+
// volatile suffix as a separate uncached block.
|
|
278
|
+
const stableBlock = {
|
|
279
|
+
type: "text",
|
|
280
|
+
text: preambleText ? preambleText + "\n\n" + request.systemPrompt.stable : request.systemPrompt.stable,
|
|
281
|
+
cache_control: { type: "ephemeral" },
|
|
282
|
+
};
|
|
283
|
+
params.system = [
|
|
284
|
+
stableBlock,
|
|
285
|
+
...(request.systemPrompt.volatile
|
|
286
|
+
? [{ type: "text", text: request.systemPrompt.volatile }]
|
|
287
|
+
: []),
|
|
288
|
+
...additionalSystemParts.map((text) => ({ type: "text", text })),
|
|
289
|
+
];
|
|
290
|
+
}
|
|
291
|
+
else if (system) {
|
|
292
|
+
// Fallback: no structured prompt, extract from messages (legacy path)
|
|
293
|
+
params.system = preambleText
|
|
294
|
+
? [{ type: "text", text: preambleText }, { type: "text", text: system }]
|
|
295
|
+
: [{ type: "text", text: system }];
|
|
296
|
+
}
|
|
297
|
+
else if (preambleText) {
|
|
298
|
+
params.system = [{ type: "text", text: preambleText }];
|
|
299
|
+
}
|
|
223
300
|
if (anthropicTools.length > 0)
|
|
224
301
|
params.tools = anthropicTools;
|
|
225
302
|
if (request.toolChoiceRequired && anthropicTools.length > 0) {
|
|
226
|
-
|
|
303
|
+
// Thinking (adaptive or enabled) only supports tool_choice "auto" or "none".
|
|
304
|
+
// "any" forces tool use which is incompatible with extended thinking.
|
|
305
|
+
params.tool_choice = params.thinking ? { type: "auto" } : /* v8 ignore next -- no-thinking path: thinking always set for 4.6 models @preserve */ { type: "any" };
|
|
227
306
|
}
|
|
228
307
|
let response;
|
|
229
308
|
try {
|
|
230
309
|
response = await client.messages.create(params, request.signal ? { signal: request.signal } : {});
|
|
231
310
|
}
|
|
232
311
|
catch (error) {
|
|
233
|
-
throw
|
|
312
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
234
313
|
}
|
|
235
314
|
let content = "";
|
|
236
315
|
let streamStarted = false;
|
|
@@ -238,7 +317,8 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
238
317
|
const toolCalls = new Map();
|
|
239
318
|
const thinkingBlocks = new Map();
|
|
240
319
|
const redactedBlocks = new Map();
|
|
241
|
-
const answerStreamer = new streaming_1.
|
|
320
|
+
const answerStreamer = new streaming_1.SettleStreamer(request.callbacks, request.eagerSettleStreaming);
|
|
321
|
+
const textOutput = new streaming_1.ProviderTextOutput(request.callbacks);
|
|
242
322
|
try {
|
|
243
323
|
for await (const event of response) {
|
|
244
324
|
if (request.signal?.aborted)
|
|
@@ -264,10 +344,11 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
264
344
|
name,
|
|
265
345
|
arguments: input,
|
|
266
346
|
});
|
|
267
|
-
// Activate eager streaming for sole
|
|
268
|
-
/* v8 ignore next --
|
|
269
|
-
if (name === "
|
|
347
|
+
// Activate eager streaming for sole settle tool call
|
|
348
|
+
/* v8 ignore next -- settle streaming activation, tested via SettleStreamer unit tests @preserve */
|
|
349
|
+
if (name === "settle" && toolCalls.size === 1) {
|
|
270
350
|
answerStreamer.activate();
|
|
351
|
+
textOutput.suppress();
|
|
271
352
|
}
|
|
272
353
|
}
|
|
273
354
|
continue;
|
|
@@ -282,7 +363,7 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
282
363
|
}
|
|
283
364
|
const text = String(delta?.text ?? "");
|
|
284
365
|
content += text;
|
|
285
|
-
|
|
366
|
+
textOutput.emit(text);
|
|
286
367
|
continue;
|
|
287
368
|
}
|
|
288
369
|
if (deltaType === "thinking_delta") {
|
|
@@ -311,8 +392,8 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
311
392
|
if (existing) {
|
|
312
393
|
const partialJson = String(delta?.partial_json ?? "");
|
|
313
394
|
existing.arguments = mergeAnthropicToolArguments(existing.arguments, partialJson);
|
|
314
|
-
/* v8 ignore next --
|
|
315
|
-
if (existing.name === "
|
|
395
|
+
/* v8 ignore next -- settle delta streaming, tested via SettleStreamer unit tests @preserve */
|
|
396
|
+
if (existing.name === "settle" && toolCalls.size === 1) {
|
|
316
397
|
answerStreamer.processDelta(partialJson);
|
|
317
398
|
}
|
|
318
399
|
}
|
|
@@ -336,7 +417,25 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
336
417
|
}
|
|
337
418
|
}
|
|
338
419
|
catch (error) {
|
|
339
|
-
|
|
420
|
+
textOutput.discard();
|
|
421
|
+
answerStreamer.cancel();
|
|
422
|
+
throw error instanceof Error ? error : /* v8 ignore next -- defensive: stream errors are always Error @preserve */ new Error(String(error));
|
|
423
|
+
}
|
|
424
|
+
const completedToolCalls = [...toolCalls.values()];
|
|
425
|
+
let settleFinalization;
|
|
426
|
+
if (request.signal?.aborted) {
|
|
427
|
+
textOutput.discard();
|
|
428
|
+
answerStreamer.cancel();
|
|
429
|
+
}
|
|
430
|
+
else if (completedToolCalls.length === 1
|
|
431
|
+
&& completedToolCalls[0].name === "settle"
|
|
432
|
+
&& answerStreamer.detected) {
|
|
433
|
+
textOutput.discard();
|
|
434
|
+
settleFinalization = (0, streaming_1.finalizeSettleStream)(answerStreamer, completedToolCalls[0].arguments);
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
answerStreamer.cancel();
|
|
438
|
+
textOutput.flush();
|
|
340
439
|
}
|
|
341
440
|
// Collect all thinking blocks (regular + redacted) sorted by index to preserve ordering
|
|
342
441
|
const allThinkingIndices = [...thinkingBlocks.keys(), ...redactedBlocks.keys()].sort((a, b) => a - b);
|
|
@@ -348,40 +447,111 @@ async function streamAnthropicMessages(client, model, request) {
|
|
|
348
447
|
});
|
|
349
448
|
return {
|
|
350
449
|
content,
|
|
351
|
-
toolCalls:
|
|
450
|
+
toolCalls: completedToolCalls,
|
|
352
451
|
outputItems,
|
|
353
452
|
usage,
|
|
354
|
-
|
|
453
|
+
settleStreamed: answerStreamer.streamed,
|
|
454
|
+
...(settleFinalization ? { settleFinalization } : {}),
|
|
355
455
|
};
|
|
356
456
|
}
|
|
357
|
-
|
|
457
|
+
const ANTHROPIC_PING_MODEL = "claude-haiku-4-5-20251001";
|
|
458
|
+
/**
|
|
459
|
+
* API-key mode: a plain Anthropic API key, optionally against another base URL such as a credit
|
|
460
|
+
* gateway. No Claude Code identity headers, no Claude Code system preamble and no token refresh;
|
|
461
|
+
* prompt caching, thinking, tools and streaming work as in setup-token mode.
|
|
462
|
+
*/
|
|
463
|
+
function createAnthropicApiKeyRuntime(model, apiKey, baseUrl) {
|
|
464
|
+
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(model);
|
|
465
|
+
const capabilities = new Set();
|
|
466
|
+
if (modelCaps.reasoningEffort)
|
|
467
|
+
capabilities.add("reasoning-effort");
|
|
468
|
+
// authToken: null keeps the SDK from also sending an ANTHROPIC_AUTH_TOKEN from the environment.
|
|
469
|
+
const client = new sdk_1.default({ apiKey, authToken: null, baseURL: baseUrl, maxRetries: 0 });
|
|
470
|
+
(0, runtime_1.emitNervesEvent)({
|
|
471
|
+
component: "engine",
|
|
472
|
+
event: "engine.anthropic_api_key_mode",
|
|
473
|
+
message: "anthropic provider using API-key mode",
|
|
474
|
+
meta: { provider: "anthropic", customBaseUrl: baseUrl !== undefined },
|
|
475
|
+
});
|
|
476
|
+
return {
|
|
477
|
+
id: "anthropic",
|
|
478
|
+
model,
|
|
479
|
+
client,
|
|
480
|
+
capabilities,
|
|
481
|
+
supportedReasoningEfforts: modelCaps.reasoningEffort,
|
|
482
|
+
resetTurnState(_messages) {
|
|
483
|
+
// Anthropic request payload is derived from canonical messages each turn.
|
|
484
|
+
},
|
|
485
|
+
appendToolOutput(_callId, _output) {
|
|
486
|
+
// Anthropic uses canonical messages for tool_result tracking.
|
|
487
|
+
},
|
|
488
|
+
streamTurn(request) {
|
|
489
|
+
return streamAnthropicMessages(client, model, request, { claudeCodePreamble: false });
|
|
490
|
+
},
|
|
491
|
+
async ping(signal) {
|
|
492
|
+
await client.messages.create({ model: ANTHROPIC_PING_MODEL, max_tokens: 1, messages: [{ role: "user", content: "ping" }] }, { signal });
|
|
493
|
+
},
|
|
494
|
+
classifyError(error) {
|
|
495
|
+
return classifyAnthropicError(error);
|
|
496
|
+
},
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
function createAnthropicProviderRuntime(model, anthropicConfig = (0, config_1.getAnthropicConfig)()) {
|
|
358
500
|
(0, runtime_1.emitNervesEvent)({
|
|
359
501
|
component: "engine",
|
|
360
502
|
event: "engine.provider_init",
|
|
361
503
|
message: "anthropic provider init",
|
|
362
504
|
meta: { provider: "anthropic" },
|
|
363
505
|
});
|
|
364
|
-
const
|
|
365
|
-
if (
|
|
366
|
-
|
|
506
|
+
const apiKey = anthropicConfig.apiKey?.trim();
|
|
507
|
+
if (apiKey)
|
|
508
|
+
return createAnthropicApiKeyRuntime(model, apiKey, anthropicConfig.baseUrl?.trim() || undefined);
|
|
509
|
+
if (!anthropicConfig.setupToken) {
|
|
510
|
+
throw new Error(getAnthropicReauthGuidance("provider 'anthropic' is selected but anthropic.setupToken is missing in the agent vault."));
|
|
367
511
|
}
|
|
368
|
-
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(
|
|
512
|
+
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(model);
|
|
369
513
|
const capabilities = new Set();
|
|
370
514
|
if (modelCaps.reasoningEffort)
|
|
371
515
|
capabilities.add("reasoning-effort");
|
|
372
|
-
const credential = resolveAnthropicSetupTokenCredential();
|
|
373
|
-
const
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
516
|
+
const credential = resolveAnthropicSetupTokenCredential(anthropicConfig);
|
|
517
|
+
const refreshToken = anthropicConfig.refreshToken;
|
|
518
|
+
const expiresAt = anthropicConfig.expiresAt;
|
|
519
|
+
function createClient(token) {
|
|
520
|
+
return new sdk_1.default({
|
|
521
|
+
authToken: token,
|
|
522
|
+
maxRetries: 0,
|
|
523
|
+
defaultHeaders: {
|
|
524
|
+
"anthropic-beta": ANTHROPIC_OAUTH_BETA_HEADER,
|
|
525
|
+
"anthropic-dangerous-direct-browser-access": "true",
|
|
526
|
+
"user-agent": CLAUDE_CLI_USER_AGENT,
|
|
527
|
+
"x-app": "cli",
|
|
528
|
+
},
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
let currentToken = credential.token;
|
|
532
|
+
let client = createClient(currentToken);
|
|
533
|
+
/* v8 ignore start -- token refresh: dynamic import + ensureFreshToken, tested via integration @preserve */
|
|
534
|
+
async function ensureClient() {
|
|
535
|
+
try {
|
|
536
|
+
const { ensureFreshToken } = await Promise.resolve().then(() => __importStar(require("./anthropic-token")));
|
|
537
|
+
const { getAgentName } = await Promise.resolve().then(() => __importStar(require("../identity")));
|
|
538
|
+
const freshToken = await ensureFreshToken(currentToken, refreshToken, expiresAt, getAgentName());
|
|
539
|
+
if (freshToken !== currentToken) {
|
|
540
|
+
currentToken = freshToken;
|
|
541
|
+
client = createClient(freshToken);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
catch {
|
|
545
|
+
// refresh failed — use existing client
|
|
546
|
+
}
|
|
547
|
+
return client;
|
|
548
|
+
}
|
|
549
|
+
/* v8 ignore stop */
|
|
381
550
|
return {
|
|
382
551
|
id: "anthropic",
|
|
383
|
-
model
|
|
384
|
-
client
|
|
552
|
+
model,
|
|
553
|
+
/* v8 ignore next -- getter: returns mutable client ref @preserve */
|
|
554
|
+
get client() { return client; },
|
|
385
555
|
capabilities,
|
|
386
556
|
supportedReasoningEfforts: modelCaps.reasoningEffort,
|
|
387
557
|
resetTurnState(_messages) {
|
|
@@ -390,8 +560,19 @@ function createAnthropicProviderRuntime() {
|
|
|
390
560
|
appendToolOutput(_callId, _output) {
|
|
391
561
|
// Anthropic uses canonical messages for tool_result tracking.
|
|
392
562
|
},
|
|
393
|
-
streamTurn(request) {
|
|
394
|
-
|
|
563
|
+
async streamTurn(request) {
|
|
564
|
+
const freshClient = await ensureClient();
|
|
565
|
+
return streamAnthropicMessages(freshClient, model, request);
|
|
566
|
+
},
|
|
567
|
+
/* v8 ignore start -- ping: tested via provider-ping.test.ts @preserve */
|
|
568
|
+
async ping(signal) {
|
|
569
|
+
const freshClient = await ensureClient();
|
|
570
|
+
await freshClient.messages.create({ model: ANTHROPIC_PING_MODEL, max_tokens: 1, messages: [{ role: "user", content: "ping" }] }, { signal, headers: { "anthropic-beta": "claude-code-20250219,oauth-2025-04-20" } });
|
|
571
|
+
},
|
|
572
|
+
/* v8 ignore stop */
|
|
573
|
+
/* v8 ignore next 3 -- delegation: classification logic tested via classifyAnthropicError @preserve */
|
|
574
|
+
classifyError(error) {
|
|
575
|
+
return classifyAnthropicError(error);
|
|
395
576
|
},
|
|
396
577
|
};
|
|
397
578
|
}
|
|
@@ -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
|
}
|