@ouro.bot/cli 0.1.0-alpha.69 → 0.1.0-alpha.691
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 +133 -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 +4398 -14
- package/dist/a2a/card.js +57 -0
- package/dist/a2a/client.js +180 -0
- package/dist/a2a/config.js +50 -0
- package/dist/a2a/delegation-stores.js +56 -0
- package/dist/a2a/did-resolution.js +93 -0
- package/dist/a2a/identity.js +170 -0
- package/dist/a2a/inbound-share.js +107 -0
- package/dist/a2a/mission-result-wire.js +196 -0
- package/dist/a2a/onboarding.js +115 -0
- package/dist/a2a/pin-store.js +132 -0
- package/dist/a2a/seen-ledger.js +120 -0
- package/dist/a2a/server.js +604 -0
- package/dist/a2a/task-store.js +69 -0
- package/dist/a2a/transport.js +45 -0
- package/dist/a2a/types.js +3 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +144 -0
- package/dist/arc/episodes.js +118 -0
- package/dist/arc/evolution.js +490 -0
- package/dist/arc/flight-recorder.js +810 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +326 -0
- package/dist/arc/packets.js +288 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/commerce/store.js +755 -0
- package/dist/commerce/types.js +3 -0
- package/dist/heart/active-work.js +867 -43
- package/dist/heart/agent-entry.js +160 -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/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/awaiting/await-alert.js +146 -0
- package/dist/heart/awaiting/await-expiry.js +108 -0
- package/dist/heart/awaiting/await-loader.js +91 -0
- package/dist/heart/awaiting/await-parser.js +141 -0
- package/dist/heart/awaiting/await-runtime-state.js +100 -0
- package/dist/heart/awaiting/await-scheduler.js +378 -0
- package/dist/heart/background-operations.js +281 -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 +135 -0
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +122 -119
- package/dist/heart/context-loss-gauntlet.js +354 -0
- package/dist/heart/context-loss-sentinel.js +993 -0
- package/dist/heart/core.js +1297 -269
- package/dist/heart/cross-chat-delivery.js +8 -22
- package/dist/heart/daemon/agent-config-check.js +451 -0
- package/dist/heart/daemon/agent-discovery.js +185 -3
- package/dist/heart/daemon/agent-service.js +523 -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-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 +780 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +8100 -0
- package/dist/heart/daemon/cli-help.js +601 -0
- package/dist/heart/daemon/cli-parse.js +1995 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +770 -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 -1814
- package/dist/heart/daemon/daemon-entry.js +668 -6
- 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 +1222 -84
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +873 -0
- package/dist/heart/daemon/habit-private-wake.js +56 -0
- package/dist/heart/daemon/health-monitor.js +131 -3
- 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 +110 -0
- package/dist/heart/daemon/mcp-canary.js +297 -0
- package/dist/heart/daemon/message-router.js +45 -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 +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/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +519 -40
- 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 +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 +41 -14
- package/dist/heart/daemon/runtime-metadata.js +2 -30
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +583 -43
- 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 +171 -12
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +338 -0
- package/dist/heart/daemon/task-scheduler.js +117 -39
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +255 -43
- 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 +121 -0
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +211 -0
- package/dist/heart/habits/habit-runtime-state.js +114 -0
- package/dist/heart/habits/habit-scheduler.js +411 -0
- package/dist/heart/habits/habit-session-summary.js +318 -0
- package/dist/heart/habits/habit-session.js +618 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +51 -57
- 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 +174 -58
- package/dist/heart/kept-notes.js +289 -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 +96 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +375 -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 +37 -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 +815 -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 +696 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +19 -0
- package/dist/heart/orientation-frame.js +217 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/primitives.js +1 -1
- package/dist/heart/private-runtime/decision-renderer.js +156 -0
- package/dist/heart/private-runtime/index.js +18 -0
- package/dist/heart/private-runtime/ledger.js +218 -0
- package/dist/heart/private-runtime/policy.js +214 -0
- package/dist/heart/private-runtime/types.js +2 -0
- package/dist/heart/progress-story.js +1 -1
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +273 -0
- package/dist/heart/provider-credentials.js +425 -0
- package/dist/heart/provider-failover.js +311 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -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 +139 -52
- package/dist/heart/providers/azure.js +23 -11
- 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-token.js +349 -0
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +389 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +17 -4
- package/dist/heart/session-activity.js +90 -24
- package/dist/heart/session-events.js +1133 -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 +133 -0
- package/dist/heart/start-of-turn-packet.js +365 -0
- package/dist/heart/streaming.js +44 -27
- package/dist/heart/structured-output.js +196 -0
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync.js +449 -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-description.js +155 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +450 -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 +409 -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/work-card.js +390 -0
- package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
- package/dist/mailbox-ui/assets/index-J8zDwHmE.js +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 +715 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/core.js +788 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +568 -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 +233 -0
- package/dist/mailroom/search-cache.js +334 -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 +250 -101
- 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/{associative-recall.js → note-search.js} +47 -58
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +13 -8
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1009 -169
- 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/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 +139 -5
- 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 +16 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +1042 -0
- package/dist/repertoire/bundle-templates.js +71 -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 +331 -0
- package/dist/repertoire/coding/feedback.js +218 -30
- package/dist/repertoire/coding/index.js +15 -3
- package/dist/repertoire/coding/manager.js +166 -10
- package/dist/repertoire/coding/spawner.js +58 -11
- package/dist/repertoire/coding/tools.js +242 -14
- 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 +178 -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 +159 -27
- package/dist/repertoire/mcp-client.js +44 -3
- package/dist/repertoire/mcp-manager.js +259 -20
- package/dist/repertoire/mcp-tools.js +83 -0
- package/dist/repertoire/plugin-mcp.js +175 -0
- package/dist/repertoire/plugins.js +253 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +48 -4
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-a2a.js +699 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-awaiting.js +372 -0
- package/dist/repertoire/tools-base.js +63 -1095
- package/dist/repertoire/tools-bluebubbles.js +2 -0
- package/dist/repertoire/tools-bridge.js +144 -0
- package/dist/repertoire/tools-bundle.js +993 -0
- package/dist/repertoire/tools-commerce.js +253 -0
- package/dist/repertoire/tools-config.js +186 -0
- package/dist/repertoire/tools-continuity.js +252 -0
- package/dist/repertoire/tools-credential.js +383 -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-github.js +3 -8
- package/dist/repertoire/tools-mail.js +1975 -0
- package/dist/repertoire/tools-notes.js +459 -0
- package/dist/repertoire/tools-obligations.js +143 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +482 -0
- package/dist/repertoire/tools-runtime.js +150 -0
- package/dist/repertoire/tools-session.js +881 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +355 -0
- package/dist/repertoire/tools-teams.js +12 -39
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +982 -0
- package/dist/repertoire/tools-user-profile.js +146 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools-voice.js +145 -0
- package/dist/repertoire/tools.js +250 -80
- 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/a2a-entry.js +115 -0
- package/dist/senses/attention-queue.js +186 -0
- package/dist/senses/await-turn-message.js +58 -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 +2732 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
- 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/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 +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 +100 -0
- package/dist/senses/cli.js +521 -214
- package/dist/senses/commands.js +66 -3
- package/dist/senses/habit-turn-message.js +160 -0
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +395 -0
- package/dist/senses/pipeline.js +873 -179
- package/dist/senses/private-runtime-worker.js +584 -0
- package/dist/senses/private-runtime.js +1145 -0
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +416 -0
- package/dist/senses/surface-tool.js +109 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +397 -112
- 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/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/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/realtime-eval.js +496 -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 +807 -0
- package/dist/senses/voice/twilio-phone.js +5077 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +81 -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/package.json +57 -12
- 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 -351
- package/dist/heart/daemon/ouro-path-installer.js +0 -178
- package/dist/heart/daemon/update-hooks.js +0 -138
- package/dist/heart/safe-workspace.js +0 -228
- 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 -1180
- package/dist/senses/debug-activity.js +0 -148
- package/dist/senses/inner-dialog-worker.js +0 -90
- package/dist/senses/inner-dialog.js +0 -480
- 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
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CONFIG_REGISTRY = void 0;
|
|
4
|
+
exports.getRegistryEntries = getRegistryEntries;
|
|
5
|
+
exports.getRegistryEntriesByTier = getRegistryEntriesByTier;
|
|
6
|
+
exports.getRegistryEntriesByTopic = getRegistryEntriesByTopic;
|
|
7
|
+
exports.getRegistryEntry = getRegistryEntry;
|
|
8
|
+
const runtime_1 = require("../nerves/runtime");
|
|
9
|
+
// --- Validation helpers ---
|
|
10
|
+
const KNOWN_PROVIDERS = ["anthropic", "azure", "minimax", "openai-codex", "github-copilot"];
|
|
11
|
+
function validateNumber(value) {
|
|
12
|
+
if (typeof value !== "number")
|
|
13
|
+
return `expected number, got ${typeof value}`;
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
function validateBoolean(value) {
|
|
17
|
+
if (typeof value !== "boolean")
|
|
18
|
+
return `expected boolean, got ${typeof value}`;
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
function validateString(value) {
|
|
22
|
+
if (typeof value !== "string")
|
|
23
|
+
return `expected string, got ${typeof value}`;
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
function validateStringEnum(allowed) {
|
|
27
|
+
return (value) => {
|
|
28
|
+
if (typeof value !== "string")
|
|
29
|
+
return `expected string, got ${typeof value}`;
|
|
30
|
+
if (!allowed.includes(value))
|
|
31
|
+
return `expected one of [${allowed.join(", ")}], got "${value}"`;
|
|
32
|
+
return undefined;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function validateInteger(min, max) {
|
|
36
|
+
return (value) => {
|
|
37
|
+
if (typeof value !== "number")
|
|
38
|
+
return `expected number, got ${typeof value}`;
|
|
39
|
+
if (!Number.isInteger(value))
|
|
40
|
+
return `expected integer, got ${value}`;
|
|
41
|
+
if (value < min || value > max)
|
|
42
|
+
return `expected integer between ${min} and ${max}, got ${value}`;
|
|
43
|
+
return undefined;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function validateStringArray(value) {
|
|
47
|
+
if (!Array.isArray(value))
|
|
48
|
+
return `expected array, got ${typeof value}`;
|
|
49
|
+
for (let i = 0; i < value.length; i++) {
|
|
50
|
+
if (typeof value[i] !== "string")
|
|
51
|
+
return `expected string at index ${i}, got ${typeof value[i]}`;
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
function validateStringEnumArray(allowed) {
|
|
56
|
+
return (value) => {
|
|
57
|
+
if (!Array.isArray(value))
|
|
58
|
+
return `expected array, got ${typeof value}`;
|
|
59
|
+
for (let i = 0; i < value.length; i++) {
|
|
60
|
+
if (typeof value[i] !== "string")
|
|
61
|
+
return `expected string at index ${i}, got ${typeof value[i]}`;
|
|
62
|
+
if (!allowed.includes(value[i]))
|
|
63
|
+
return `expected one of [${allowed.join(", ")}] at index ${i}, got "${value[i]}"`;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function validateObject(requiredFields) {
|
|
69
|
+
return (value) => {
|
|
70
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
71
|
+
return `expected object, got ${Array.isArray(value) ? "array" : typeof value}`;
|
|
72
|
+
}
|
|
73
|
+
const obj = value;
|
|
74
|
+
for (const [field, validator] of Object.entries(requiredFields)) {
|
|
75
|
+
if (!(field in obj))
|
|
76
|
+
return `missing required field "${field}"`;
|
|
77
|
+
const err = validator(obj[field]);
|
|
78
|
+
if (err)
|
|
79
|
+
return `field "${field}": ${err}`;
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const registryData = [
|
|
85
|
+
// --- Managed: harness-only ---
|
|
86
|
+
{
|
|
87
|
+
path: "version",
|
|
88
|
+
tier: "managed",
|
|
89
|
+
description: "Agent config schema version. Managed by the harness. Must be an integer >= 1.",
|
|
90
|
+
default: 2,
|
|
91
|
+
effects: "Controls which config migrations apply on load. Changing incorrectly can corrupt config.",
|
|
92
|
+
topics: ["schema", "migration"],
|
|
93
|
+
validate: validateNumber,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
path: "enabled",
|
|
97
|
+
tier: "managed",
|
|
98
|
+
description: "Whether the agent is enabled. Managed by the harness. When false, the agent refuses to start.",
|
|
99
|
+
default: true,
|
|
100
|
+
effects: "Disables all agent functionality when set to false.",
|
|
101
|
+
topics: ["lifecycle", "activation"],
|
|
102
|
+
validate: validateBoolean,
|
|
103
|
+
},
|
|
104
|
+
// --- Self: agent-configurable ---
|
|
105
|
+
{
|
|
106
|
+
path: "mcpServers",
|
|
107
|
+
tier: "self",
|
|
108
|
+
description: "MCP server configurations. Maps server name to command, args, and env. The agent can add or remove MCP servers.",
|
|
109
|
+
default: undefined,
|
|
110
|
+
effects: "Adds or removes MCP tool servers.",
|
|
111
|
+
topics: ["tools", "mcp", "servers", "extensions"],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
path: "humanFacing.provider",
|
|
115
|
+
tier: "self",
|
|
116
|
+
description: "Provider for human-facing interactions (CLI, Teams, BlueBubbles).",
|
|
117
|
+
default: "anthropic",
|
|
118
|
+
effects: "Changes the LLM provider used for all human-facing conversations. Affects quality, latency, and cost.",
|
|
119
|
+
topics: ["model", "provider", "llm", "human"],
|
|
120
|
+
validate: validateStringEnum(KNOWN_PROVIDERS),
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
path: "humanFacing.model",
|
|
124
|
+
tier: "self",
|
|
125
|
+
description: "Model name for human-facing interactions.",
|
|
126
|
+
default: "claude-opus-4-6",
|
|
127
|
+
effects: "Changes the specific model used for human-facing conversations.",
|
|
128
|
+
topics: ["model", "provider", "llm", "human"],
|
|
129
|
+
validate: validateString,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
path: "agentFacing.provider",
|
|
133
|
+
tier: "self",
|
|
134
|
+
description: "Provider for agent-facing interactions (inner lane, delegation).",
|
|
135
|
+
default: "anthropic",
|
|
136
|
+
effects: "Changes the LLM provider used for private agent-facing turns and agent-to-agent communication.",
|
|
137
|
+
topics: ["model", "provider", "llm", "agent", "inner-lane"],
|
|
138
|
+
validate: validateStringEnum(KNOWN_PROVIDERS),
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
path: "agentFacing.model",
|
|
142
|
+
tier: "self",
|
|
143
|
+
description: "Model name for agent-facing interactions.",
|
|
144
|
+
default: "claude-opus-4-6",
|
|
145
|
+
effects: "Changes the specific model used for private agent-facing turns and agent-to-agent communication.",
|
|
146
|
+
topics: ["model", "provider", "llm", "agent", "inner-lane"],
|
|
147
|
+
validate: validateString,
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
path: "context.maxTokens",
|
|
151
|
+
tier: "self",
|
|
152
|
+
description: "Maximum context window size in tokens.",
|
|
153
|
+
default: 80000,
|
|
154
|
+
effects: "Larger values allow more context but increase cost and latency. Must match model capability.",
|
|
155
|
+
topics: ["context", "tokens", "notes", "performance"],
|
|
156
|
+
validate: validateInteger(1000, 1000000),
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
path: "senses.cli",
|
|
160
|
+
tier: "self",
|
|
161
|
+
description: "CLI sense configuration. Controls whether the CLI interface is enabled.",
|
|
162
|
+
default: { enabled: true },
|
|
163
|
+
effects: "Enables or disables the CLI (terminal) interaction channel.",
|
|
164
|
+
topics: ["senses", "cli", "channels", "interface"],
|
|
165
|
+
validate: validateObject({ enabled: validateBoolean }),
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
path: "senses.teams",
|
|
169
|
+
tier: "self",
|
|
170
|
+
description: "Teams sense configuration. Controls whether the Teams interface is enabled.",
|
|
171
|
+
default: { enabled: false },
|
|
172
|
+
effects: "Enables or disables the Microsoft Teams interaction channel.",
|
|
173
|
+
topics: ["senses", "teams", "channels", "interface"],
|
|
174
|
+
validate: validateObject({ enabled: validateBoolean }),
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
path: "senses.bluebubbles",
|
|
178
|
+
tier: "self",
|
|
179
|
+
description: "BlueBubbles sense configuration. Controls whether the iMessage interface is enabled.",
|
|
180
|
+
default: { enabled: false },
|
|
181
|
+
effects: "Enables or disables the BlueBubbles (iMessage) interaction channel.",
|
|
182
|
+
topics: ["senses", "bluebubbles", "imessage", "channels", "interface"],
|
|
183
|
+
validate: validateObject({ enabled: validateBoolean }),
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
path: "senses.mail",
|
|
187
|
+
tier: "self",
|
|
188
|
+
description: "Mail sense configuration. Controls whether the agent-owned Mailroom mailbox is enabled.",
|
|
189
|
+
default: { enabled: false },
|
|
190
|
+
effects: "Enables or disables the agent mail sense. Runtime credentials still live in the agent vault.",
|
|
191
|
+
topics: ["senses", "mail", "mailroom", "channels", "interface"],
|
|
192
|
+
validate: validateObject({ enabled: validateBoolean }),
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
path: "senses.voice",
|
|
196
|
+
tier: "self",
|
|
197
|
+
description: "Voice sense configuration. Controls whether conversational audio sessions are enabled.",
|
|
198
|
+
default: { enabled: false },
|
|
199
|
+
effects: "Enables or disables voice sessions. STT/TTS credentials and local audio attachments are configured separately.",
|
|
200
|
+
topics: ["senses", "voice", "audio", "speech", "channels", "interface"],
|
|
201
|
+
validate: validateObject({ enabled: validateBoolean }),
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
path: "senses.workbench",
|
|
205
|
+
tier: "self",
|
|
206
|
+
description: "Workbench sense configuration. Controls whether the native terminal-agent control room is enabled for this agent.",
|
|
207
|
+
default: { enabled: false },
|
|
208
|
+
effects: "Enables the local Ouro Workbench sense. Workbench MCP registration remains in mcpServers.ouro_workbench.",
|
|
209
|
+
topics: ["senses", "workbench", "mcp", "terminal", "channels", "interface"],
|
|
210
|
+
validate: validateObject({ enabled: validateBoolean }),
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
path: "sync.enabled",
|
|
214
|
+
tier: "self",
|
|
215
|
+
description: "Whether git-based bundle sync is enabled.",
|
|
216
|
+
default: false,
|
|
217
|
+
effects: "Enables automatic synchronization of agent state via git. Requires sync.remote to be configured.",
|
|
218
|
+
topics: ["sync", "git", "state", "backup"],
|
|
219
|
+
validate: validateBoolean,
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
path: "sync.remote",
|
|
223
|
+
tier: "self",
|
|
224
|
+
description: "Git remote name used for bundle sync.",
|
|
225
|
+
default: "origin",
|
|
226
|
+
effects: "Controls which git remote is used when sync is enabled.",
|
|
227
|
+
topics: ["sync", "git", "remote"],
|
|
228
|
+
validate: validateString,
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
path: "context.contextMargin",
|
|
232
|
+
tier: "self",
|
|
233
|
+
description: "Percentage of context window reserved as margin before compaction triggers.",
|
|
234
|
+
default: 20,
|
|
235
|
+
effects: "Higher values trigger compaction earlier, preserving more headroom. Lower values use more context.",
|
|
236
|
+
topics: ["context", "compaction", "notes", "performance"],
|
|
237
|
+
validate: validateInteger(0, 100),
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
path: "phrases.thinking",
|
|
241
|
+
tier: "self",
|
|
242
|
+
description: "Array of phrases displayed while the agent is thinking.",
|
|
243
|
+
default: ["working"],
|
|
244
|
+
effects: "Changes the thinking indicator text shown to users. Purely cosmetic.",
|
|
245
|
+
topics: ["phrases", "ux", "display", "personality"],
|
|
246
|
+
validate: validateStringArray,
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
path: "phrases.tool",
|
|
250
|
+
tier: "self",
|
|
251
|
+
description: "Array of phrases displayed while the agent is running a tool.",
|
|
252
|
+
default: ["running tool"],
|
|
253
|
+
effects: "Changes the tool-use indicator text shown to users. Purely cosmetic.",
|
|
254
|
+
topics: ["phrases", "ux", "display", "personality"],
|
|
255
|
+
validate: validateStringArray,
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
path: "phrases.followup",
|
|
259
|
+
tier: "self",
|
|
260
|
+
description: "Array of phrases displayed during follow-up processing.",
|
|
261
|
+
default: ["processing"],
|
|
262
|
+
effects: "Changes the follow-up indicator text shown to users. Purely cosmetic.",
|
|
263
|
+
topics: ["phrases", "ux", "display", "personality"],
|
|
264
|
+
validate: validateStringArray,
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
path: "shell.defaultTimeout",
|
|
268
|
+
tier: "self",
|
|
269
|
+
description: "Default timeout in milliseconds for shell command execution.",
|
|
270
|
+
default: undefined,
|
|
271
|
+
effects: "Controls how long shell commands run before timing out. Undefined uses system default.",
|
|
272
|
+
topics: ["shell", "timeout", "execution", "tools"],
|
|
273
|
+
validate: validateInteger(1000, 600000),
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
path: "logging.level",
|
|
277
|
+
tier: "self",
|
|
278
|
+
description: "Minimum log level: debug, info, warn, or error.",
|
|
279
|
+
default: undefined,
|
|
280
|
+
effects: "Controls verbosity of runtime logging. Lower levels produce more output.",
|
|
281
|
+
topics: ["logging", "debug", "diagnostics"],
|
|
282
|
+
validate: validateStringEnum(["debug", "info", "warn", "error"]),
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
path: "logging.sinks",
|
|
286
|
+
tier: "self",
|
|
287
|
+
description: "Array of log sink types: 'terminal' and/or 'ndjson'.",
|
|
288
|
+
default: undefined,
|
|
289
|
+
effects: "Controls where log output is directed. Terminal shows in console, ndjson writes structured logs.",
|
|
290
|
+
topics: ["logging", "output", "diagnostics"],
|
|
291
|
+
validate: validateStringEnumArray(["terminal", "ndjson"]),
|
|
292
|
+
},
|
|
293
|
+
];
|
|
294
|
+
exports.CONFIG_REGISTRY = new Map(registryData.map((entry) => [entry.path, entry]));
|
|
295
|
+
function getRegistryEntries() {
|
|
296
|
+
(0, runtime_1.emitNervesEvent)({
|
|
297
|
+
component: "heart",
|
|
298
|
+
event: "config_registry.access",
|
|
299
|
+
message: "listing all registry entries",
|
|
300
|
+
meta: { count: exports.CONFIG_REGISTRY.size },
|
|
301
|
+
});
|
|
302
|
+
return [...exports.CONFIG_REGISTRY.values()];
|
|
303
|
+
}
|
|
304
|
+
function getRegistryEntriesByTier(tier) {
|
|
305
|
+
(0, runtime_1.emitNervesEvent)({
|
|
306
|
+
component: "heart",
|
|
307
|
+
event: "config_registry.access",
|
|
308
|
+
message: `filtering registry entries by tier ${tier}`,
|
|
309
|
+
meta: { tier },
|
|
310
|
+
});
|
|
311
|
+
return [...exports.CONFIG_REGISTRY.values()].filter((entry) => entry.tier === tier);
|
|
312
|
+
}
|
|
313
|
+
function getRegistryEntriesByTopic(topic) {
|
|
314
|
+
const needle = topic.toLowerCase();
|
|
315
|
+
(0, runtime_1.emitNervesEvent)({
|
|
316
|
+
component: "heart",
|
|
317
|
+
event: "config_registry.access",
|
|
318
|
+
message: `filtering registry entries by topic "${topic}"`,
|
|
319
|
+
meta: { topic },
|
|
320
|
+
});
|
|
321
|
+
return [...exports.CONFIG_REGISTRY.values()].filter((entry) => entry.topics.some((t) => t.toLowerCase().includes(needle)));
|
|
322
|
+
}
|
|
323
|
+
function getRegistryEntry(path) {
|
|
324
|
+
(0, runtime_1.emitNervesEvent)({
|
|
325
|
+
component: "heart",
|
|
326
|
+
event: "config_registry.access",
|
|
327
|
+
message: `looking up registry entry for "${path}"`,
|
|
328
|
+
meta: { path },
|
|
329
|
+
});
|
|
330
|
+
return exports.CONFIG_REGISTRY.get(path);
|
|
331
|
+
}
|
package/dist/heart/config.js
CHANGED
|
@@ -35,11 +35,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.loadConfig = loadConfig;
|
|
37
37
|
exports.resetConfigCache = resetConfigCache;
|
|
38
|
+
exports.cacheRuntimeConfigForTests = cacheRuntimeConfigForTests;
|
|
39
|
+
exports.cacheMachineRuntimeConfigForTests = cacheMachineRuntimeConfigForTests;
|
|
38
40
|
exports.patchRuntimeConfig = patchRuntimeConfig;
|
|
39
41
|
exports.getAzureConfig = getAzureConfig;
|
|
40
42
|
exports.getMinimaxConfig = getMinimaxConfig;
|
|
41
43
|
exports.getAnthropicConfig = getAnthropicConfig;
|
|
42
44
|
exports.getOpenAICodexConfig = getOpenAICodexConfig;
|
|
45
|
+
exports.getGithubCopilotConfig = getGithubCopilotConfig;
|
|
43
46
|
exports.getTeamsConfig = getTeamsConfig;
|
|
44
47
|
exports.getTeamsSecondaryConfig = getTeamsSecondaryConfig;
|
|
45
48
|
exports.getContextConfig = getContextConfig;
|
|
@@ -49,6 +52,7 @@ exports.getTeamsChannelConfig = getTeamsChannelConfig;
|
|
|
49
52
|
exports.getBlueBubblesConfig = getBlueBubblesConfig;
|
|
50
53
|
exports.getBlueBubblesChannelConfig = getBlueBubblesChannelConfig;
|
|
51
54
|
exports.getIntegrationsConfig = getIntegrationsConfig;
|
|
55
|
+
exports.getSyncConfig = getSyncConfig;
|
|
52
56
|
exports.getOpenAIEmbeddingsApiKey = getOpenAIEmbeddingsApiKey;
|
|
53
57
|
exports.getLogsDir = getLogsDir;
|
|
54
58
|
exports.sanitizeKey = sanitizeKey;
|
|
@@ -59,32 +63,10 @@ exports.logPath = logPath;
|
|
|
59
63
|
const fs = __importStar(require("fs"));
|
|
60
64
|
const path = __importStar(require("path"));
|
|
61
65
|
const identity_1 = require("./identity");
|
|
66
|
+
const provider_credentials_1 = require("./provider-credentials");
|
|
67
|
+
const runtime_credentials_1 = require("./runtime-credentials");
|
|
62
68
|
const runtime_1 = require("../nerves/runtime");
|
|
63
|
-
const
|
|
64
|
-
providers: {
|
|
65
|
-
// Keep provider field ordering consistent: model first, then auth credentials,
|
|
66
|
-
// then provider-specific transport fields.
|
|
67
|
-
azure: {
|
|
68
|
-
modelName: "",
|
|
69
|
-
apiKey: "",
|
|
70
|
-
endpoint: "",
|
|
71
|
-
deployment: "",
|
|
72
|
-
apiVersion: "2025-04-01-preview",
|
|
73
|
-
managedIdentityClientId: "",
|
|
74
|
-
},
|
|
75
|
-
minimax: {
|
|
76
|
-
model: "",
|
|
77
|
-
apiKey: "",
|
|
78
|
-
},
|
|
79
|
-
anthropic: {
|
|
80
|
-
model: "claude-opus-4-6",
|
|
81
|
-
setupToken: "",
|
|
82
|
-
},
|
|
83
|
-
"openai-codex": {
|
|
84
|
-
model: "gpt-5.4",
|
|
85
|
-
oauthAccessToken: "",
|
|
86
|
-
},
|
|
87
|
-
},
|
|
69
|
+
const DEFAULT_LOCAL_RUNTIME_CONFIG = {
|
|
88
70
|
teams: {
|
|
89
71
|
clientId: "",
|
|
90
72
|
clientSecret: "",
|
|
@@ -110,40 +92,41 @@ const DEFAULT_SECRETS_TEMPLATE = {
|
|
|
110
92
|
serverUrl: "",
|
|
111
93
|
password: "",
|
|
112
94
|
accountId: "default",
|
|
95
|
+
ownHandles: [],
|
|
113
96
|
},
|
|
114
97
|
bluebubblesChannel: {
|
|
115
98
|
port: 18790,
|
|
116
99
|
webhookPath: "/bluebubbles-webhook",
|
|
117
100
|
requestTimeoutMs: 30000,
|
|
118
101
|
},
|
|
102
|
+
vault: {
|
|
103
|
+
masterPassword: "",
|
|
104
|
+
},
|
|
119
105
|
integrations: {
|
|
120
106
|
perplexityApiKey: "",
|
|
121
107
|
openaiEmbeddingsApiKey: "",
|
|
122
108
|
},
|
|
109
|
+
features: {
|
|
110
|
+
workbenchCoding: false,
|
|
111
|
+
},
|
|
123
112
|
};
|
|
124
113
|
function defaultRuntimeConfig() {
|
|
125
114
|
return {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
anthropic: { ...DEFAULT_SECRETS_TEMPLATE.providers.anthropic },
|
|
130
|
-
"openai-codex": { ...DEFAULT_SECRETS_TEMPLATE.providers["openai-codex"] },
|
|
131
|
-
},
|
|
132
|
-
teams: { ...DEFAULT_SECRETS_TEMPLATE.teams },
|
|
133
|
-
teamsSecondary: { ...DEFAULT_SECRETS_TEMPLATE.teamsSecondary },
|
|
134
|
-
oauth: { ...DEFAULT_SECRETS_TEMPLATE.oauth },
|
|
115
|
+
teams: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teams },
|
|
116
|
+
teamsSecondary: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teamsSecondary },
|
|
117
|
+
oauth: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.oauth },
|
|
135
118
|
context: { ...identity_1.DEFAULT_AGENT_CONTEXT },
|
|
136
|
-
teamsChannel: { ...
|
|
137
|
-
bluebubbles: { ...
|
|
138
|
-
bluebubblesChannel: { ...
|
|
139
|
-
|
|
119
|
+
teamsChannel: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.teamsChannel },
|
|
120
|
+
bluebubbles: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.bluebubbles },
|
|
121
|
+
bluebubblesChannel: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.bluebubblesChannel },
|
|
122
|
+
vault: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.vault },
|
|
123
|
+
integrations: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.integrations },
|
|
124
|
+
features: { ...DEFAULT_LOCAL_RUNTIME_CONFIG.features },
|
|
140
125
|
};
|
|
141
126
|
}
|
|
142
127
|
let _runtimeConfigOverride = null;
|
|
143
128
|
let _testContextOverride = null;
|
|
144
|
-
|
|
145
|
-
return (0, identity_1.getAgentSecretsPath)();
|
|
146
|
-
}
|
|
129
|
+
let _providerConfigOverride = null;
|
|
147
130
|
function deepMerge(defaults, partial) {
|
|
148
131
|
const result = { ...defaults };
|
|
149
132
|
for (const key of Object.keys(partial)) {
|
|
@@ -160,79 +143,31 @@ function deepMerge(defaults, partial) {
|
|
|
160
143
|
}
|
|
161
144
|
return result;
|
|
162
145
|
}
|
|
146
|
+
function localRuntimeFields(config) {
|
|
147
|
+
const { providers: _providers, context: _context, ...localFields } = config;
|
|
148
|
+
return localFields;
|
|
149
|
+
}
|
|
163
150
|
function loadConfig() {
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
fileData = JSON.parse(raw);
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
const errorCode = error &&
|
|
175
|
-
typeof error === "object" &&
|
|
176
|
-
"code" in error &&
|
|
177
|
-
typeof error.code === "string"
|
|
178
|
-
? error.code
|
|
179
|
-
: undefined;
|
|
180
|
-
if (errorCode === "ENOENT") {
|
|
181
|
-
try {
|
|
182
|
-
fs.writeFileSync(configPath, JSON.stringify(DEFAULT_SECRETS_TEMPLATE, null, 2) + "\n", "utf-8");
|
|
183
|
-
}
|
|
184
|
-
catch (writeError) {
|
|
185
|
-
(0, runtime_1.emitNervesEvent)({
|
|
186
|
-
level: "warn",
|
|
187
|
-
event: "config_identity.error",
|
|
188
|
-
component: "config/identity",
|
|
189
|
-
message: "failed writing default secrets config",
|
|
190
|
-
meta: {
|
|
191
|
-
phase: "loadConfig",
|
|
192
|
-
path: configPath,
|
|
193
|
-
reason: writeError instanceof Error ? writeError.message : String(writeError),
|
|
194
|
-
},
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
(0, runtime_1.emitNervesEvent)({
|
|
199
|
-
level: "warn",
|
|
200
|
-
event: "config_identity.error",
|
|
201
|
-
component: "config/identity",
|
|
202
|
-
message: "config read failed; defaults applied",
|
|
203
|
-
meta: {
|
|
204
|
-
phase: "loadConfig",
|
|
205
|
-
reason: error instanceof Error ? error.message : String(error),
|
|
206
|
-
},
|
|
207
|
-
});
|
|
208
|
-
// ENOENT or parse error -- use defaults
|
|
209
|
-
}
|
|
210
|
-
const sanitizedFileData = { ...fileData };
|
|
211
|
-
if ("context" in sanitizedFileData) {
|
|
212
|
-
delete sanitizedFileData.context;
|
|
213
|
-
(0, runtime_1.emitNervesEvent)({
|
|
214
|
-
level: "warn",
|
|
215
|
-
event: "config_identity.error",
|
|
216
|
-
component: "config/identity",
|
|
217
|
-
message: "ignored legacy context block in secrets config",
|
|
218
|
-
meta: {
|
|
219
|
-
phase: "loadConfig",
|
|
220
|
-
path: configPath,
|
|
221
|
-
},
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
const mergedConfig = deepMerge(defaultRuntimeConfig(), sanitizedFileData);
|
|
151
|
+
const agentName = (0, identity_1.getAgentName)();
|
|
152
|
+
const runtimeResult = (0, runtime_credentials_1.readRuntimeCredentialConfig)(agentName);
|
|
153
|
+
const machineRuntimeResult = (0, runtime_credentials_1.readMachineRuntimeCredentialConfig)(agentName);
|
|
154
|
+
const vaultData = runtimeResult.ok ? localRuntimeFields(runtimeResult.config) : {};
|
|
155
|
+
const machineVaultData = machineRuntimeResult.ok ? localRuntimeFields(machineRuntimeResult.config) : {};
|
|
156
|
+
const mergedConfig = deepMerge(defaultRuntimeConfig(), vaultData);
|
|
157
|
+
const mergedWithMachineConfig = deepMerge(mergedConfig, machineVaultData);
|
|
225
158
|
const config = _runtimeConfigOverride
|
|
226
|
-
? deepMerge(
|
|
227
|
-
:
|
|
159
|
+
? deepMerge(mergedWithMachineConfig, _runtimeConfigOverride)
|
|
160
|
+
: mergedWithMachineConfig;
|
|
228
161
|
(0, runtime_1.emitNervesEvent)({
|
|
229
162
|
event: "config.load",
|
|
230
163
|
component: "config/identity",
|
|
231
|
-
message: "config loaded from
|
|
164
|
+
message: "config loaded from runtime credential cache",
|
|
232
165
|
meta: {
|
|
233
|
-
source: "
|
|
234
|
-
used_defaults_only:
|
|
166
|
+
source: runtimeResult.ok ? "vault-cache" : "defaults",
|
|
167
|
+
used_defaults_only: !runtimeResult.ok,
|
|
168
|
+
machine_runtime_credentials: machineRuntimeResult.ok ? "available" : machineRuntimeResult.reason,
|
|
235
169
|
override_applied: _runtimeConfigOverride !== null,
|
|
170
|
+
runtime_credentials: runtimeResult.ok ? "available" : runtimeResult.reason,
|
|
236
171
|
},
|
|
237
172
|
});
|
|
238
173
|
return config;
|
|
@@ -240,30 +175,78 @@ function loadConfig() {
|
|
|
240
175
|
function resetConfigCache() {
|
|
241
176
|
_runtimeConfigOverride = null;
|
|
242
177
|
_testContextOverride = null;
|
|
178
|
+
_providerConfigOverride = null;
|
|
179
|
+
(0, provider_credentials_1.resetProviderCredentialCache)();
|
|
180
|
+
(0, runtime_credentials_1.resetRuntimeCredentialConfigCache)();
|
|
181
|
+
}
|
|
182
|
+
function cacheRuntimeConfigForTests(agentName, config) {
|
|
183
|
+
(0, runtime_credentials_1.cacheRuntimeCredentialConfig)(agentName, config, new Date(0));
|
|
184
|
+
}
|
|
185
|
+
function cacheMachineRuntimeConfigForTests(agentName, config) {
|
|
186
|
+
(0, runtime_credentials_1.cacheMachineRuntimeCredentialConfig)(agentName, config, new Date(0), "machine_test");
|
|
187
|
+
}
|
|
188
|
+
function seedProviderCredentialCache(providers) {
|
|
189
|
+
if (!providers)
|
|
190
|
+
return;
|
|
191
|
+
_providerConfigOverride = deepMerge((_providerConfigOverride ?? {}), providers);
|
|
192
|
+
const records = Object.entries(_providerConfigOverride).map(([provider, rawConfig]) => {
|
|
193
|
+
const split = (0, provider_credentials_1.splitProviderCredentialFields)(provider, rawConfig);
|
|
194
|
+
return (0, provider_credentials_1.createProviderCredentialRecord)({
|
|
195
|
+
provider: provider,
|
|
196
|
+
credentials: split.credentials,
|
|
197
|
+
config: split.config,
|
|
198
|
+
provenance: { source: "manual" },
|
|
199
|
+
now: new Date(0),
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
(0, provider_credentials_1.cacheProviderCredentialRecords)((0, identity_1.getAgentName)(), records, new Date(0));
|
|
243
203
|
}
|
|
244
204
|
function patchRuntimeConfig(partial) {
|
|
205
|
+
const { providers, ...runtimePartial } = partial;
|
|
206
|
+
seedProviderCredentialCache(providers);
|
|
245
207
|
const contextPatch = partial.context;
|
|
246
208
|
if (contextPatch) {
|
|
247
209
|
const base = _testContextOverride ?? identity_1.DEFAULT_AGENT_CONTEXT;
|
|
248
210
|
_testContextOverride = deepMerge(base, contextPatch);
|
|
249
211
|
}
|
|
250
|
-
_runtimeConfigOverride = deepMerge((_runtimeConfigOverride ?? {}),
|
|
212
|
+
_runtimeConfigOverride = deepMerge((_runtimeConfigOverride ?? {}), runtimePartial);
|
|
213
|
+
}
|
|
214
|
+
function readProviderConfig(provider) {
|
|
215
|
+
const cached = (0, provider_credentials_1.readCachedProviderCredentialRecord)((0, identity_1.getAgentName)(), provider);
|
|
216
|
+
return cached.ok ? { ...cached.record.config, ...cached.record.credentials } : {};
|
|
251
217
|
}
|
|
252
218
|
function getAzureConfig() {
|
|
253
|
-
const
|
|
254
|
-
return {
|
|
219
|
+
const raw = readProviderConfig("azure");
|
|
220
|
+
return {
|
|
221
|
+
apiKey: typeof raw.apiKey === "string" ? raw.apiKey : "",
|
|
222
|
+
endpoint: typeof raw.endpoint === "string" ? raw.endpoint : "",
|
|
223
|
+
deployment: typeof raw.deployment === "string" ? raw.deployment : "",
|
|
224
|
+
apiVersion: typeof raw.apiVersion === "string" ? raw.apiVersion : "2025-04-01-preview",
|
|
225
|
+
managedIdentityClientId: typeof raw.managedIdentityClientId === "string" ? raw.managedIdentityClientId : "",
|
|
226
|
+
};
|
|
255
227
|
}
|
|
256
228
|
function getMinimaxConfig() {
|
|
257
|
-
const
|
|
258
|
-
return {
|
|
229
|
+
const raw = readProviderConfig("minimax");
|
|
230
|
+
return { apiKey: typeof raw.apiKey === "string" ? raw.apiKey : "" };
|
|
259
231
|
}
|
|
260
232
|
function getAnthropicConfig() {
|
|
261
|
-
const
|
|
262
|
-
return {
|
|
233
|
+
const raw = readProviderConfig("anthropic");
|
|
234
|
+
return { setupToken: typeof raw.setupToken === "string" ? raw.setupToken : "" };
|
|
263
235
|
}
|
|
264
236
|
function getOpenAICodexConfig() {
|
|
265
|
-
const
|
|
266
|
-
return {
|
|
237
|
+
const raw = readProviderConfig("openai-codex");
|
|
238
|
+
return {
|
|
239
|
+
oauthAccessToken: typeof raw.oauthAccessToken === "string" ? raw.oauthAccessToken : "",
|
|
240
|
+
...(typeof raw.refreshToken === "string" ? { refreshToken: raw.refreshToken } : {}),
|
|
241
|
+
...(typeof raw.expiresAt === "number" ? { expiresAt: raw.expiresAt } : {}),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
function getGithubCopilotConfig() {
|
|
245
|
+
const raw = readProviderConfig("github-copilot");
|
|
246
|
+
return {
|
|
247
|
+
githubToken: typeof raw.githubToken === "string" ? raw.githubToken : "",
|
|
248
|
+
baseUrl: typeof raw.baseUrl === "string" ? raw.baseUrl : "",
|
|
249
|
+
};
|
|
267
250
|
}
|
|
268
251
|
function getTeamsConfig() {
|
|
269
252
|
const config = loadConfig();
|
|
@@ -310,17 +293,24 @@ function getTeamsChannelConfig() {
|
|
|
310
293
|
}
|
|
311
294
|
function getBlueBubblesConfig() {
|
|
312
295
|
const config = loadConfig();
|
|
313
|
-
const { serverUrl, password, accountId } = config.bluebubbles;
|
|
296
|
+
const { serverUrl, password, accountId, ownHandles } = config.bluebubbles;
|
|
314
297
|
if (!serverUrl.trim()) {
|
|
315
|
-
throw new Error("bluebubbles.serverUrl is required in
|
|
298
|
+
throw new Error("bluebubbles.serverUrl is required in this machine's agent-vault runtime config. Run `ouro connect bluebubbles --agent <agent>`.");
|
|
316
299
|
}
|
|
317
300
|
if (!password.trim()) {
|
|
318
|
-
throw new Error("bluebubbles.password is required in
|
|
301
|
+
throw new Error("bluebubbles.password is required in this machine's agent-vault runtime config. Run `ouro connect bluebubbles --agent <agent>`.");
|
|
302
|
+
}
|
|
303
|
+
const normalizedHandles = [];
|
|
304
|
+
for (const handle of ownHandles) {
|
|
305
|
+
const trimmed = handle.trim();
|
|
306
|
+
if (trimmed.length > 0)
|
|
307
|
+
normalizedHandles.push(trimmed);
|
|
319
308
|
}
|
|
320
309
|
return {
|
|
321
310
|
serverUrl: serverUrl.trim(),
|
|
322
311
|
password: password.trim(),
|
|
323
312
|
accountId: accountId.trim() || "default",
|
|
313
|
+
ownHandles: normalizedHandles,
|
|
324
314
|
};
|
|
325
315
|
}
|
|
326
316
|
function getBlueBubblesChannelConfig() {
|
|
@@ -332,6 +322,19 @@ function getIntegrationsConfig() {
|
|
|
332
322
|
const config = loadConfig();
|
|
333
323
|
return { ...config.integrations };
|
|
334
324
|
}
|
|
325
|
+
function getSyncConfig() {
|
|
326
|
+
try {
|
|
327
|
+
const agentConfig = (0, identity_1.loadAgentConfig)();
|
|
328
|
+
return {
|
|
329
|
+
enabled: agentConfig.sync?.enabled ?? false,
|
|
330
|
+
remote: agentConfig.sync?.remote ?? "origin",
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
/* v8 ignore next -- defensive: loadAgentConfig failure in test/bootstrap @preserve */
|
|
335
|
+
return { enabled: false, remote: "origin" };
|
|
336
|
+
}
|
|
337
|
+
}
|
|
335
338
|
function getOpenAIEmbeddingsApiKey() {
|
|
336
339
|
return getIntegrationsConfig().openaiEmbeddingsApiKey;
|
|
337
340
|
}
|