@ouro.bot/cli 0.1.0-alpha.56 → 0.1.0-alpha.560
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/README.md +127 -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/changelog.json +3596 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +140 -0
- package/dist/arc/episodes.js +117 -0
- package/dist/arc/intentions.js +133 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +237 -0
- package/dist/arc/packets.js +193 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +65 -0
- package/dist/heart/active-work.js +837 -26
- package/dist/heart/agent-entry.js +58 -3
- package/dist/heart/attachments/image-normalize.js +194 -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/adapter.js +2 -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 +16 -0
- package/dist/heart/attachments/store.js +103 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +479 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +111 -0
- package/dist/heart/config-registry.js +322 -0
- package/dist/heart/config.js +114 -118
- package/dist/heart/core.js +913 -246
- package/dist/heart/cross-chat-delivery.js +3 -18
- package/dist/heart/daemon/agent-config-check.js +419 -0
- package/dist/heart/daemon/agent-discovery.js +102 -3
- package/dist/heart/daemon/agent-service.js +522 -0
- package/dist/heart/daemon/agentic-repair.js +547 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +70 -0
- package/dist/heart/daemon/cli-defaults.js +776 -0
- package/dist/heart/daemon/cli-exec.js +7457 -0
- package/dist/heart/daemon/cli-help.js +498 -0
- package/dist/heart/daemon/cli-parse.js +1592 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +763 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/daemon-cli.js +29 -1698
- package/dist/heart/daemon/daemon-entry.js +387 -2
- package/dist/heart/daemon/daemon-health.js +176 -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 +796 -71
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +826 -0
- package/dist/heart/daemon/health-monitor.js +122 -1
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +115 -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 +89 -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 +82 -12
- package/dist/heart/daemon/logs-prune.js +110 -0
- package/dist/heart/daemon/mcp-canary.js +297 -0
- package/dist/heart/daemon/message-router.js +2 -2
- package/dist/heart/daemon/os-cron-deps.js +135 -0
- package/dist/heart/daemon/os-cron.js +14 -12
- package/dist/heart/daemon/ouro-bot-entry.js +4 -2
- package/dist/heart/daemon/ouro-entry.js +3 -1
- package/dist/heart/daemon/process-manager.js +375 -33
- package/dist/heart/daemon/provider-discovery.js +137 -0
- package/dist/heart/daemon/provider-ping-progress.js +83 -0
- package/dist/heart/daemon/pulse.js +475 -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 +67 -16
- package/dist/heart/daemon/runtime-metadata.js +3 -31
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +389 -38
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +94 -0
- package/dist/heart/daemon/socket-client.js +158 -11
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +330 -0
- package/dist/heart/daemon/task-scheduler.js +3 -25
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +162 -17
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -1
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +140 -0
- package/dist/heart/habits/habit-runtime-state.js +100 -0
- package/dist/heart/habits/habit-scheduler.js +372 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
- 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 +35 -12
- package/dist/heart/identity.js +203 -57
- package/dist/heart/kept-notes.js +357 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +161 -0
- package/dist/heart/mail-import-discovery.js +353 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +31 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +195 -0
- package/dist/heart/mailbox/readers/agent-machine.js +382 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
- package/dist/heart/mailbox/readers/mail.js +362 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
- package/dist/heart/mailbox/readers/sessions.js +232 -0
- package/dist/heart/mailbox/readers/shared.js +111 -0
- package/dist/heart/mcp/mcp-server.js +683 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +19 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +267 -0
- package/dist/heart/provider-credentials.js +425 -0
- package/dist/heart/provider-failover.js +301 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -0
- package/dist/heart/provider-readiness-cache.js +40 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +139 -52
- package/dist/heart/providers/azure.js +97 -13
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +145 -0
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +26 -8
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +367 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +13 -4
- package/dist/heart/session-activity.js +43 -22
- package/dist/heart/session-events.js +1149 -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-stats-cli-main.js +5 -0
- package/dist/heart/session-stats.js +182 -0
- package/dist/heart/session-transcript.js +243 -0
- package/dist/heart/start-of-turn-packet.js +345 -0
- package/dist/heart/streaming.js +44 -27
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync.js +449 -0
- package/dist/heart/target-resolution.js +9 -5
- 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-description.js +139 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +389 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
- package/dist/heart/versioning/ouro-path-installer.js +426 -0
- package/dist/heart/versioning/ouro-version-manager.js +295 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
- package/dist/mailbox-ui/assets/index-B-461hes.js +61 -0
- package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
- package/dist/mailbox-ui/index.html +15 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +674 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/core.js +720 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +430 -0
- package/dist/mailroom/mbox-import.js +383 -0
- package/dist/mailroom/outbound.js +380 -0
- package/dist/mailroom/policy.js +263 -0
- package/dist/mailroom/reader.js +233 -0
- package/dist/mailroom/search-cache.js +256 -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 +7 -1
- package/dist/mind/context.js +165 -101
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +62 -75
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/friends/channel.js +39 -0
- package/dist/mind/friends/resolver.js +54 -2
- package/dist/mind/friends/store-file.js +39 -3
- package/dist/mind/friends/types.js +2 -2
- package/dist/mind/journal-index.js +161 -0
- package/dist/mind/note-search.js +268 -0
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +4 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1011 -123
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/scrutiny.js +173 -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 +129 -5
- package/dist/nerves/coverage/run-artifacts.js +1 -1
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +224 -4
- 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 +152 -0
- package/dist/nerves/runtime.js +5 -1
- package/dist/repertoire/ado-client.js +15 -56
- package/dist/repertoire/ado-semantic.js +11 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +963 -0
- package/dist/repertoire/bundle-templates.js +72 -0
- package/dist/repertoire/bw-installer.js +180 -0
- package/dist/repertoire/coding/codex-jsonl.js +64 -0
- package/dist/repertoire/coding/context-pack.js +330 -0
- package/dist/repertoire/coding/feedback.js +197 -30
- package/dist/repertoire/coding/manager.js +158 -9
- package/dist/repertoire/coding/spawner.js +55 -9
- package/dist/repertoire/coding/tools.js +170 -7
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +178 -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 +396 -0
- package/dist/repertoire/mcp-client.js +295 -0
- package/dist/repertoire/mcp-manager.js +362 -0
- package/dist/repertoire/mcp-tools.js +63 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +15 -24
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tasks/board.js +31 -5
- package/dist/repertoire/tasks/fix.js +182 -0
- package/dist/repertoire/tasks/index.js +16 -4
- package/dist/repertoire/tasks/lifecycle.js +2 -2
- package/dist/repertoire/tasks/parser.js +3 -2
- package/dist/repertoire/tasks/scanner.js +194 -37
- package/dist/repertoire/tasks/transitions.js +16 -78
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-base.js +47 -1075
- package/dist/repertoire/tools-bluebubbles.js +1 -0
- package/dist/repertoire/tools-bridge.js +142 -0
- package/dist/repertoire/tools-bundle.js +984 -0
- package/dist/repertoire/tools-config.js +185 -0
- package/dist/repertoire/tools-continuity.js +248 -0
- package/dist/repertoire/tools-credential.js +381 -0
- package/dist/repertoire/tools-files.js +342 -0
- package/dist/repertoire/tools-flight.js +224 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-github.js +1 -7
- package/dist/repertoire/tools-mail.js +1857 -0
- package/dist/repertoire/tools-notes.js +421 -0
- package/dist/repertoire/tools-session.js +750 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +180 -0
- package/dist/repertoire/tools-surface.js +243 -0
- package/dist/repertoire/tools-teams.js +9 -39
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +604 -0
- package/dist/repertoire/tools-user-profile.js +144 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools.js +108 -100
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +594 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/attention-queue.js +116 -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} +219 -18
- package/dist/senses/bluebubbles/entry.js +77 -0
- package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
- package/dist/senses/bluebubbles/index.js +2305 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/replay.js +137 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- 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 +240 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +60 -8
- package/dist/senses/cli-layout.js +187 -0
- package/dist/senses/cli.js +520 -209
- package/dist/senses/commands.js +66 -3
- package/dist/senses/habit-turn-message.js +108 -0
- package/dist/senses/inner-dialog-worker.js +175 -21
- package/dist/senses/inner-dialog.js +330 -27
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +379 -0
- package/dist/senses/pipeline.js +549 -181
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +248 -0
- package/dist/senses/surface-tool.js +68 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +387 -98
- package/dist/senses/trust-gate.js +100 -5
- package/dist/senses/voice/elevenlabs.js +125 -0
- package/dist/senses/voice/index.js +22 -0
- package/dist/senses/voice/transcript.js +70 -0
- package/dist/senses/voice/turn.js +85 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +133 -0
- package/dist/senses/voice-entry.js +80 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +146 -0
- package/package.json +38 -7
- package/skills/agent-commerce.md +106 -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 +101 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/auth-flow.js +0 -351
- package/dist/heart/daemon/ouro-path-installer.js +0 -178
- package/dist/heart/daemon/subagent-installer.js +0 -166
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/associative-recall.js +0 -209
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1177
- package/dist/senses/debug-activity.js +0 -148
- package/subagents/README.md +0 -86
- package/subagents/work-doer.md +0 -237
- package/subagents/work-merger.md +0 -618
- package/subagents/work-planner.md +0 -390
- /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/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
|
@@ -3,34 +3,44 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MINIMAX_PROVIDER_BASE_URL = void 0;
|
|
7
|
+
exports.classifyMinimaxError = classifyMinimaxError;
|
|
6
8
|
exports.createMinimaxProviderRuntime = createMinimaxProviderRuntime;
|
|
7
9
|
const openai_1 = __importDefault(require("openai"));
|
|
8
10
|
const config_1 = require("../config");
|
|
9
11
|
const runtime_1 = require("../../nerves/runtime");
|
|
12
|
+
const error_classification_1 = require("./error-classification");
|
|
13
|
+
/**
|
|
14
|
+
* Canonical MiniMax chat-completions base URL. Exported so the BlueBubbles
|
|
15
|
+
* VLM fallback (which targets a sibling endpoint under the same host) can
|
|
16
|
+
* derive its URL from one source of truth instead of hard-coding.
|
|
17
|
+
*/
|
|
18
|
+
exports.MINIMAX_PROVIDER_BASE_URL = "https://api.minimaxi.chat/v1";
|
|
19
|
+
function classifyMinimaxError(error) {
|
|
20
|
+
return (0, error_classification_1.classifyHttpError)(error);
|
|
21
|
+
}
|
|
10
22
|
const streaming_1 = require("../streaming");
|
|
11
23
|
const model_capabilities_1 = require("../model-capabilities");
|
|
12
|
-
function createMinimaxProviderRuntime() {
|
|
24
|
+
function createMinimaxProviderRuntime(model, minimaxConfig = (0, config_1.getMinimaxConfig)()) {
|
|
13
25
|
(0, runtime_1.emitNervesEvent)({
|
|
14
26
|
component: "engine",
|
|
15
27
|
event: "engine.provider_init",
|
|
16
28
|
message: "minimax provider init",
|
|
17
29
|
meta: { provider: "minimax" },
|
|
18
30
|
});
|
|
19
|
-
const minimaxConfig = (0, config_1.getMinimaxConfig)();
|
|
20
31
|
if (!minimaxConfig.apiKey) {
|
|
21
|
-
throw new Error("provider 'minimax' is selected
|
|
32
|
+
throw new Error("provider 'minimax' is selected but minimax.apiKey is missing in the agent vault. Run `ouro auth --agent <agent> --provider minimax`.");
|
|
22
33
|
}
|
|
23
34
|
// Registry consulted; MiniMax models return empty defaults (no capabilities to derive)
|
|
24
|
-
(0, model_capabilities_1.getModelCapabilities)(
|
|
35
|
+
(0, model_capabilities_1.getModelCapabilities)(model);
|
|
25
36
|
const client = new openai_1.default({
|
|
26
37
|
apiKey: minimaxConfig.apiKey,
|
|
27
|
-
baseURL:
|
|
28
|
-
timeout: 30000,
|
|
38
|
+
baseURL: exports.MINIMAX_PROVIDER_BASE_URL,
|
|
29
39
|
maxRetries: 0,
|
|
30
40
|
});
|
|
31
41
|
return {
|
|
32
42
|
id: "minimax",
|
|
33
|
-
model
|
|
43
|
+
model,
|
|
34
44
|
client,
|
|
35
45
|
capabilities: new Set(),
|
|
36
46
|
resetTurnState(_messages) {
|
|
@@ -51,7 +61,15 @@ function createMinimaxProviderRuntime() {
|
|
|
51
61
|
params.metadata = { trace_id: request.traceId };
|
|
52
62
|
if (request.toolChoiceRequired)
|
|
53
63
|
params.tool_choice = "required";
|
|
54
|
-
return (0, streaming_1.streamChatCompletion)(this.client, params, request.callbacks, request.signal);
|
|
64
|
+
return (0, streaming_1.streamChatCompletion)(this.client, params, request.callbacks, request.signal, request.eagerSettleStreaming);
|
|
65
|
+
},
|
|
66
|
+
/* v8 ignore start -- ping: tested via provider-ping.test.ts @preserve */
|
|
67
|
+
async ping(signal) {
|
|
68
|
+
await this.client.chat.completions.create({ model: this.model, max_tokens: 1, messages: [{ role: "user", content: "ping" }] }, { signal });
|
|
69
|
+
},
|
|
70
|
+
/* v8 ignore stop */
|
|
71
|
+
classifyError(error) {
|
|
72
|
+
return classifyMinimaxError(error);
|
|
55
73
|
},
|
|
56
74
|
};
|
|
57
75
|
}
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.classifyOpenAICodexError = classifyOpenAICodexError;
|
|
6
7
|
exports.createOpenAICodexProviderRuntime = createOpenAICodexProviderRuntime;
|
|
7
8
|
const openai_1 = __importDefault(require("openai"));
|
|
8
9
|
const config_1 = require("../config");
|
|
@@ -10,6 +11,7 @@ const identity_1 = require("../identity");
|
|
|
10
11
|
const runtime_1 = require("../../nerves/runtime");
|
|
11
12
|
const streaming_1 = require("../streaming");
|
|
12
13
|
const model_capabilities_1 = require("../model-capabilities");
|
|
14
|
+
const error_classification_1 = require("./error-classification");
|
|
13
15
|
const OPENAI_CODEX_AUTH_FAILURE_MARKERS = [
|
|
14
16
|
"authentication failed",
|
|
15
17
|
"unauthorized",
|
|
@@ -18,9 +20,16 @@ const OPENAI_CODEX_AUTH_FAILURE_MARKERS = [
|
|
|
18
20
|
"invalid bearer token",
|
|
19
21
|
];
|
|
20
22
|
const OPENAI_CODEX_BACKEND_BASE_URL = "https://chatgpt.com/backend-api/codex";
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
23
|
+
const OPENAI_CODEX_PING_INPUT = [{ role: "user", content: "ping" }];
|
|
24
|
+
const OPENAI_CODEX_PING_CALLBACKS = {
|
|
25
|
+
onModelStart() { },
|
|
26
|
+
onModelStreamStart() { },
|
|
27
|
+
onTextChunk() { },
|
|
28
|
+
onReasoningChunk() { },
|
|
29
|
+
onToolStart() { },
|
|
30
|
+
onToolEnd() { },
|
|
31
|
+
onError() { },
|
|
32
|
+
};
|
|
24
33
|
function getOpenAICodexAgentNameForGuidance() {
|
|
25
34
|
return (0, identity_1.getAgentName)();
|
|
26
35
|
}
|
|
@@ -28,11 +37,9 @@ function getOpenAICodexOAuthInstructions() {
|
|
|
28
37
|
const agentName = getOpenAICodexAgentNameForGuidance();
|
|
29
38
|
return [
|
|
30
39
|
"Fix:",
|
|
31
|
-
` 1. Run \`ouro auth --agent ${agentName}\``,
|
|
32
|
-
|
|
33
|
-
" 3.
|
|
34
|
-
" 4. This provider uses chatgpt.com/backend-api/codex/responses (not api.openai.com/responses).",
|
|
35
|
-
" 5. After reauth, retry the failed ouro command or reconnect this session.",
|
|
40
|
+
` 1. Run \`ouro auth --agent ${agentName} --provider openai-codex\``,
|
|
41
|
+
" 2. This provider uses chatgpt.com/backend-api/codex/responses (not api.openai.com/responses).",
|
|
42
|
+
" 3. After reauth, retry the failed ouro command or reconnect this session.",
|
|
36
43
|
].join("\n");
|
|
37
44
|
}
|
|
38
45
|
function getOpenAICodexReauthGuidance(reason) {
|
|
@@ -42,22 +49,19 @@ function getOpenAICodexReauthGuidance(reason) {
|
|
|
42
49
|
getOpenAICodexOAuthInstructions(),
|
|
43
50
|
].join("\n");
|
|
44
51
|
}
|
|
52
|
+
function classifyOpenAICodexError(error) {
|
|
53
|
+
return (0, error_classification_1.classifyHttpError)(error, {
|
|
54
|
+
isAuthFailure: isOpenAICodexAuthFailure,
|
|
55
|
+
isUsageLimit: (e) => {
|
|
56
|
+
const lower = e.message.toLowerCase();
|
|
57
|
+
return lower.includes("usage") || lower.includes("quota") || lower.includes("exceeded your");
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
45
61
|
function isOpenAICodexAuthFailure(error) {
|
|
46
|
-
if (!(error instanceof Error))
|
|
47
|
-
return false;
|
|
48
|
-
const status = error.status;
|
|
49
|
-
if (status === 401 || status === 403)
|
|
50
|
-
return true;
|
|
51
62
|
const lower = error.message.toLowerCase();
|
|
52
63
|
return OPENAI_CODEX_AUTH_FAILURE_MARKERS.some((marker) => lower.includes(marker));
|
|
53
64
|
}
|
|
54
|
-
function withOpenAICodexAuthGuidance(error) {
|
|
55
|
-
const base = error instanceof Error ? error.message : String(error);
|
|
56
|
-
if (isOpenAICodexAuthFailure(error)) {
|
|
57
|
-
return new Error(getOpenAICodexReauthGuidance(`OpenAI Codex authentication failed (${base}).`));
|
|
58
|
-
}
|
|
59
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
60
|
-
}
|
|
61
65
|
function decodeJwtPayload(token) {
|
|
62
66
|
const parts = token.split(".");
|
|
63
67
|
if (parts.length < 2)
|
|
@@ -88,16 +92,27 @@ function getChatGPTAccountIdFromToken(token) {
|
|
|
88
92
|
return "";
|
|
89
93
|
return accountId.trim();
|
|
90
94
|
}
|
|
91
|
-
function
|
|
95
|
+
function createOpenAICodexResponsesParams(input, instructions, model, reasoningEffort) {
|
|
96
|
+
return {
|
|
97
|
+
model,
|
|
98
|
+
input,
|
|
99
|
+
instructions,
|
|
100
|
+
tools: [],
|
|
101
|
+
reasoning: { effort: reasoningEffort, summary: "detailed" },
|
|
102
|
+
stream: true,
|
|
103
|
+
store: false,
|
|
104
|
+
include: ["reasoning.encrypted_content"],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function createOpenAICodexProviderRuntime(model, codexConfig = (0, config_1.getOpenAICodexConfig)()) {
|
|
92
108
|
(0, runtime_1.emitNervesEvent)({
|
|
93
109
|
component: "engine",
|
|
94
110
|
event: "engine.provider_init",
|
|
95
111
|
message: "openai-codex provider init",
|
|
96
112
|
meta: { provider: "openai-codex" },
|
|
97
113
|
});
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
throw new Error(getOpenAICodexReauthGuidance("provider 'openai-codex' is selected in agent.json but providers.openai-codex.model/oauthAccessToken is incomplete in secrets.json."));
|
|
114
|
+
if (!codexConfig.oauthAccessToken) {
|
|
115
|
+
throw new Error(getOpenAICodexReauthGuidance("provider 'openai-codex' is selected but openai-codex.oauthAccessToken is missing in the agent vault."));
|
|
101
116
|
}
|
|
102
117
|
const token = codexConfig.oauthAccessToken.trim();
|
|
103
118
|
if (!token) {
|
|
@@ -107,7 +122,7 @@ function createOpenAICodexProviderRuntime() {
|
|
|
107
122
|
if (!chatgptAccountId) {
|
|
108
123
|
throw new Error(getOpenAICodexReauthGuidance("OpenAI Codex OAuth access token is missing a chatgpt_account_id claim required for chatgpt.com/backend-api/codex."));
|
|
109
124
|
}
|
|
110
|
-
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(
|
|
125
|
+
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(model);
|
|
111
126
|
const capabilities = new Set();
|
|
112
127
|
if (modelCaps.reasoningEffort)
|
|
113
128
|
capabilities.add("reasoning-effort");
|
|
@@ -121,14 +136,13 @@ function createOpenAICodexProviderRuntime() {
|
|
|
121
136
|
"OpenAI-Beta": "responses=experimental",
|
|
122
137
|
originator: "ouroboros",
|
|
123
138
|
},
|
|
124
|
-
timeout: 30000,
|
|
125
139
|
maxRetries: 0,
|
|
126
140
|
});
|
|
127
141
|
let nativeInput = null;
|
|
128
142
|
let nativeInstructions = "";
|
|
129
143
|
return {
|
|
130
144
|
id: "openai-codex",
|
|
131
|
-
model
|
|
145
|
+
model,
|
|
132
146
|
client,
|
|
133
147
|
capabilities,
|
|
134
148
|
supportedReasoningEfforts: modelCaps.reasoningEffort,
|
|
@@ -140,32 +154,33 @@ function createOpenAICodexProviderRuntime() {
|
|
|
140
154
|
appendToolOutput(callId, output) {
|
|
141
155
|
if (!nativeInput)
|
|
142
156
|
return;
|
|
143
|
-
nativeInput.push({ type: "function_call_output", call_id: callId, output });
|
|
157
|
+
nativeInput.push({ type: "function_call_output", call_id: callId, output: (0, streaming_1.truncateResponsesFunctionCallOutput)(output) });
|
|
144
158
|
},
|
|
145
159
|
async streamTurn(request) {
|
|
146
160
|
if (!nativeInput)
|
|
147
161
|
this.resetTurnState(request.messages);
|
|
148
|
-
const params =
|
|
149
|
-
|
|
150
|
-
input: nativeInput,
|
|
151
|
-
instructions: nativeInstructions,
|
|
152
|
-
tools: (0, streaming_1.toResponsesTools)(request.activeTools),
|
|
153
|
-
reasoning: { effort: request.reasoningEffort ?? "medium", summary: "detailed" },
|
|
154
|
-
stream: true,
|
|
155
|
-
store: false,
|
|
156
|
-
include: ["reasoning.encrypted_content"],
|
|
157
|
-
};
|
|
162
|
+
const params = createOpenAICodexResponsesParams(nativeInput, nativeInstructions, this.model, request.reasoningEffort ?? "medium");
|
|
163
|
+
params.tools = (0, streaming_1.toResponsesTools)(request.activeTools);
|
|
158
164
|
if (request.toolChoiceRequired)
|
|
159
165
|
params.tool_choice = "required";
|
|
160
166
|
try {
|
|
161
|
-
const result = await (0, streaming_1.streamResponsesApi)(this.client, params, request.callbacks, request.signal);
|
|
167
|
+
const result = await (0, streaming_1.streamResponsesApi)(this.client, params, request.callbacks, request.signal, request.eagerSettleStreaming);
|
|
162
168
|
for (const item of result.outputItems)
|
|
163
169
|
nativeInput.push(item);
|
|
164
170
|
return result;
|
|
165
171
|
}
|
|
166
172
|
catch (error) {
|
|
167
|
-
throw
|
|
173
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
168
174
|
}
|
|
169
175
|
},
|
|
176
|
+
/* v8 ignore start -- ping: tested via provider-ping.test.ts @preserve */
|
|
177
|
+
async ping(signal) {
|
|
178
|
+
await (0, streaming_1.streamResponsesApi)(this.client, createOpenAICodexResponsesParams(OPENAI_CODEX_PING_INPUT, "", this.model, "medium"), OPENAI_CODEX_PING_CALLBACKS, signal);
|
|
179
|
+
},
|
|
180
|
+
/* v8 ignore stop */
|
|
181
|
+
/* v8 ignore next 3 -- delegation: classification logic tested via classifyOpenAICodexError @preserve */
|
|
182
|
+
classifyError(error) {
|
|
183
|
+
return classifyOpenAICodexError(error);
|
|
184
|
+
},
|
|
170
185
|
};
|
|
171
186
|
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyPerplexityCapability = verifyPerplexityCapability;
|
|
4
|
+
exports.verifyEmbeddingsCapability = verifyEmbeddingsCapability;
|
|
5
|
+
const runtime_1 = require("../nerves/runtime");
|
|
6
|
+
function sanitizeCapabilityError(message) {
|
|
7
|
+
const statusMatch = message.match(/^(\d{3})\s/);
|
|
8
|
+
if (!statusMatch)
|
|
9
|
+
return message;
|
|
10
|
+
const status = statusMatch[1];
|
|
11
|
+
const body = message.slice(status.length).trim();
|
|
12
|
+
if (body.startsWith("<") || body.includes("<!DOCTYPE") || body.includes("<html")) {
|
|
13
|
+
return `HTTP ${status}`;
|
|
14
|
+
}
|
|
15
|
+
if (body.startsWith("{")) {
|
|
16
|
+
try {
|
|
17
|
+
const json = JSON.parse(body);
|
|
18
|
+
const inner = json?.error?.message;
|
|
19
|
+
if (typeof inner === "string" && inner && inner !== "Error") {
|
|
20
|
+
return `${status} ${inner}`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Keep the HTTP status fallback below.
|
|
25
|
+
}
|
|
26
|
+
return `HTTP ${status}`;
|
|
27
|
+
}
|
|
28
|
+
return message;
|
|
29
|
+
}
|
|
30
|
+
async function readHttpFailureSummary(response) {
|
|
31
|
+
let detail = `${response.status} ${response.statusText}`.trim();
|
|
32
|
+
try {
|
|
33
|
+
const json = await response.json();
|
|
34
|
+
if (typeof json.error === "string" && json.error.trim()) {
|
|
35
|
+
detail = `${response.status} ${json.error}`;
|
|
36
|
+
}
|
|
37
|
+
else if (typeof json.error === "object" && json.error !== null) {
|
|
38
|
+
const errObj = json.error;
|
|
39
|
+
if (typeof errObj.message === "string" && errObj.message.trim()) {
|
|
40
|
+
detail = `${response.status} ${errObj.message}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if (typeof json.message === "string" && json.message.trim()) {
|
|
44
|
+
detail = `${response.status} ${json.message}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Keep the HTTP status summary if the body is not JSON.
|
|
49
|
+
}
|
|
50
|
+
return sanitizeCapabilityError(detail);
|
|
51
|
+
}
|
|
52
|
+
function reportRuntimeCapabilityCheckStart(capability, url) {
|
|
53
|
+
(0, runtime_1.emitNervesEvent)({
|
|
54
|
+
component: "daemon",
|
|
55
|
+
event: "daemon.runtime_capability_check_start",
|
|
56
|
+
message: "starting runtime capability check",
|
|
57
|
+
meta: { capability, url },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function reportRuntimeCapabilityCheckEnd(capability, url) {
|
|
61
|
+
(0, runtime_1.emitNervesEvent)({
|
|
62
|
+
component: "daemon",
|
|
63
|
+
event: "daemon.runtime_capability_check_end",
|
|
64
|
+
message: "runtime capability check passed",
|
|
65
|
+
meta: { capability, url },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function reportRuntimeCapabilityCheckError(capability, url, summary) {
|
|
69
|
+
(0, runtime_1.emitNervesEvent)({
|
|
70
|
+
level: "warn",
|
|
71
|
+
component: "daemon",
|
|
72
|
+
event: "daemon.runtime_capability_check_error",
|
|
73
|
+
message: "runtime capability check failed",
|
|
74
|
+
meta: { capability, url, summary },
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async function verifyPerplexityCapability(apiKey, fetchImpl = fetch) {
|
|
78
|
+
const url = "https://api.perplexity.ai/search";
|
|
79
|
+
reportRuntimeCapabilityCheckStart("perplexity-search", url);
|
|
80
|
+
try {
|
|
81
|
+
const response = await fetchImpl(url, {
|
|
82
|
+
method: "POST",
|
|
83
|
+
headers: {
|
|
84
|
+
Authorization: `Bearer ${apiKey}`,
|
|
85
|
+
"Content-Type": "application/json",
|
|
86
|
+
},
|
|
87
|
+
body: JSON.stringify({
|
|
88
|
+
query: "ping",
|
|
89
|
+
max_results: 1,
|
|
90
|
+
}),
|
|
91
|
+
});
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
const summary = await readHttpFailureSummary(response);
|
|
94
|
+
reportRuntimeCapabilityCheckError("perplexity-search", url, summary);
|
|
95
|
+
return {
|
|
96
|
+
ok: false,
|
|
97
|
+
summary,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const payload = await response.json();
|
|
101
|
+
if (!Array.isArray(payload.results) || payload.results.length === 0) {
|
|
102
|
+
const summary = "Perplexity returned no search results";
|
|
103
|
+
reportRuntimeCapabilityCheckError("perplexity-search", url, summary);
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
summary,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
reportRuntimeCapabilityCheckEnd("perplexity-search", url);
|
|
110
|
+
return {
|
|
111
|
+
ok: true,
|
|
112
|
+
summary: "live check passed",
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
const summary = sanitizeCapabilityError(error instanceof Error ? error.message : String(error));
|
|
117
|
+
reportRuntimeCapabilityCheckError("perplexity-search", url, summary);
|
|
118
|
+
return {
|
|
119
|
+
ok: false,
|
|
120
|
+
summary,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function verifyEmbeddingsCapability(apiKey, fetchImpl = fetch) {
|
|
125
|
+
const url = "https://api.openai.com/v1/embeddings";
|
|
126
|
+
reportRuntimeCapabilityCheckStart("memory-embeddings", url);
|
|
127
|
+
try {
|
|
128
|
+
const response = await fetchImpl(url, {
|
|
129
|
+
method: "POST",
|
|
130
|
+
headers: {
|
|
131
|
+
Authorization: `Bearer ${apiKey}`,
|
|
132
|
+
"Content-Type": "application/json",
|
|
133
|
+
},
|
|
134
|
+
body: JSON.stringify({
|
|
135
|
+
model: "text-embedding-3-small",
|
|
136
|
+
input: ["ping"],
|
|
137
|
+
}),
|
|
138
|
+
});
|
|
139
|
+
if (!response.ok) {
|
|
140
|
+
const summary = await readHttpFailureSummary(response);
|
|
141
|
+
reportRuntimeCapabilityCheckError("memory-embeddings", url, summary);
|
|
142
|
+
return {
|
|
143
|
+
ok: false,
|
|
144
|
+
summary,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const payload = await response.json();
|
|
148
|
+
if (!Array.isArray(payload.data) || payload.data.length !== 1 || !Array.isArray(payload.data[0]?.embedding) || payload.data[0].embedding.length === 0) {
|
|
149
|
+
const summary = "embeddings response missing expected vectors";
|
|
150
|
+
reportRuntimeCapabilityCheckError("memory-embeddings", url, summary);
|
|
151
|
+
return {
|
|
152
|
+
ok: false,
|
|
153
|
+
summary,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
reportRuntimeCapabilityCheckEnd("memory-embeddings", url);
|
|
157
|
+
return {
|
|
158
|
+
ok: true,
|
|
159
|
+
summary: "live check passed",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
const summary = sanitizeCapabilityError(error instanceof Error ? error.message : String(error));
|
|
164
|
+
reportRuntimeCapabilityCheckError("memory-embeddings", url, summary);
|
|
165
|
+
return {
|
|
166
|
+
ok: false,
|
|
167
|
+
summary,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|