@ouro.bot/cli 0.1.0-alpha.70 → 0.1.0-alpha.701
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 +4461 -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 +928 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +348 -0
- package/dist/arc/packets.js +336 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/commerce/store.js +755 -0
- package/dist/commerce/types.js +3 -0
- package/dist/heart/active-work.js +867 -43
- package/dist/heart/agent-entry.js +190 -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/autonomy-budget.js +434 -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 +119 -127
- package/dist/heart/context-loss-gauntlet.js +354 -0
- package/dist/heart/context-loss-sentinel.js +1155 -0
- package/dist/heart/core.js +1306 -278
- 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 +180 -0
- package/dist/heart/daemon/cli-defaults.js +825 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +8142 -0
- package/dist/heart/daemon/cli-help.js +675 -0
- package/dist/heart/daemon/cli-parse.js +2461 -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 -1930
- package/dist/heart/daemon/daemon-entry.js +822 -10
- 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 +1264 -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 +1126 -0
- package/dist/heart/daemon/habit-private-wake.js +56 -0
- package/dist/heart/daemon/health-monitor.js +142 -11
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +78 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +79 -10
- package/dist/heart/daemon/logs-prune.js +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 +22 -14
- 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 +670 -48
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +1 -1
- package/dist/heart/daemon/socket-client.js +171 -12
- package/dist/heart/daemon/stale-bundle-prune.js +113 -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 +214 -0
- package/dist/heart/habits/habit-runtime-state.js +114 -0
- package/dist/heart/habits/habit-scheduler.js +431 -0
- package/dist/heart/habits/habit-session-summary.js +318 -0
- package/dist/heart/habits/habit-session.js +617 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +51 -60
- 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 -59
- 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 +11 -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 +441 -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 +34 -38
- 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/run-ledger.js +247 -0
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +398 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +20 -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 +472 -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 +380 -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-budget.js +380 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1028 -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 +234 -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 +156 -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 +65 -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 +182 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +482 -0
- package/dist/repertoire/tools-rsvp.js +139 -0
- package/dist/repertoire/tools-runtime.js +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/rsvp/aisleplanner-client.js +354 -0
- package/dist/rsvp/cli.js +704 -0
- package/dist/rsvp/config.js +327 -0
- package/dist/rsvp/cutover.js +431 -0
- package/dist/rsvp/diagnostics.js +222 -0
- package/dist/rsvp/diff-renderer.js +161 -0
- package/dist/rsvp/habit-policy.js +85 -0
- package/dist/rsvp/habit-stage.js +93 -0
- package/dist/rsvp/incident-bundle.js +97 -0
- package/dist/rsvp/migration.js +204 -0
- package/dist/rsvp/outbound-state.js +254 -0
- package/dist/rsvp/query.js +118 -0
- package/dist/rsvp/replay.js +233 -0
- package/dist/rsvp/snapshot.js +232 -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} +226 -19
- 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 +2937 -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/outbound-state.js +304 -0
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/replay.js +284 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/{bluebubbles-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/context-packet-ledger.js +245 -0
- package/dist/senses/context-packets.js +154 -0
- 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 +952 -178
- package/dist/senses/private-runtime-worker.js +723 -0
- package/dist/senses/private-runtime.js +1157 -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 +5081 -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 -409
- 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
|
@@ -1,12 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.createBlueBubblesClient = createBlueBubblesClient;
|
|
4
37
|
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const config_1 = require("
|
|
6
|
-
const identity_1 = require("
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
38
|
+
const config_1 = require("../../heart/config");
|
|
39
|
+
const identity_1 = require("../../heart/identity");
|
|
40
|
+
const bluebubbles_health_diagnostics_1 = require("../../heart/daemon/bluebubbles-health-diagnostics");
|
|
41
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
42
|
+
const minimax_1 = require("../../heart/providers/minimax");
|
|
43
|
+
const minimax_vlm_1 = require("../../heart/providers/minimax-vlm");
|
|
44
|
+
const model_1 = require("./model");
|
|
45
|
+
const media_1 = require("./media");
|
|
10
46
|
function buildBlueBubblesApiUrl(baseUrl, endpoint, password) {
|
|
11
47
|
const root = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
|
|
12
48
|
const url = new URL(endpoint.replace(/^\//, ""), root);
|
|
@@ -55,6 +91,9 @@ async function parseJsonBody(response) {
|
|
|
55
91
|
return null;
|
|
56
92
|
}
|
|
57
93
|
}
|
|
94
|
+
function describeCaughtValue(error) {
|
|
95
|
+
return error instanceof Error ? error.message : String(error);
|
|
96
|
+
}
|
|
58
97
|
function buildRepairUrl(baseUrl, messageGuid, password) {
|
|
59
98
|
const url = buildBlueBubblesApiUrl(baseUrl, `/api/v1/message/${encodeURIComponent(messageGuid)}`, password);
|
|
60
99
|
const parsed = new URL(url);
|
|
@@ -99,6 +138,17 @@ function extractChatQueryRows(payload) {
|
|
|
99
138
|
}
|
|
100
139
|
return data.map((entry) => asRecord(entry)).filter((entry) => entry !== null);
|
|
101
140
|
}
|
|
141
|
+
function extractMessageQueryRows(payload) {
|
|
142
|
+
const record = asRecord(payload);
|
|
143
|
+
const data = asRecord(record?.data);
|
|
144
|
+
const rows = Array.isArray(record?.data) ? record.data
|
|
145
|
+
: Array.isArray(data?.messages) ? data.messages
|
|
146
|
+
: Array.isArray(data?.results) ? data.results
|
|
147
|
+
: Array.isArray(record?.messages) ? record.messages
|
|
148
|
+
: Array.isArray(payload) ? payload
|
|
149
|
+
: [];
|
|
150
|
+
return rows.map((entry) => asRecord(entry)).filter((entry) => entry !== null);
|
|
151
|
+
}
|
|
102
152
|
async function resolveChatGuidForIdentifier(config, channelConfig, chatIdentifier) {
|
|
103
153
|
const trimmedIdentifier = chatIdentifier.trim();
|
|
104
154
|
if (!trimmedIdentifier)
|
|
@@ -223,7 +273,7 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
223
273
|
const url = buildBlueBubblesApiUrl(config.serverUrl, "/api/v1/message/text", config.password);
|
|
224
274
|
const body = {
|
|
225
275
|
chatGuid: resolvedChatGuid,
|
|
226
|
-
tempGuid: (0, node_crypto_1.randomUUID)(),
|
|
276
|
+
tempGuid: params.tempGuid?.trim() || (0, node_crypto_1.randomUUID)(),
|
|
227
277
|
message: trimmedText,
|
|
228
278
|
};
|
|
229
279
|
if (params.replyToMessageGuid?.trim()) {
|
|
@@ -330,19 +380,19 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
330
380
|
}
|
|
331
381
|
},
|
|
332
382
|
async checkHealth() {
|
|
333
|
-
const url = buildBlueBubblesApiUrl(config.serverUrl, "/api/v1/message/count", config.password);
|
|
334
383
|
(0, runtime_1.emitNervesEvent)({
|
|
335
384
|
component: "senses",
|
|
336
385
|
event: "senses.bluebubbles_healthcheck_start",
|
|
337
386
|
message: "probing bluebubbles upstream health",
|
|
338
387
|
meta: { serverUrl: config.serverUrl },
|
|
339
388
|
});
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
389
|
+
const result = await (0, bluebubbles_health_diagnostics_1.probeBlueBubblesHealth)({
|
|
390
|
+
serverUrl: config.serverUrl,
|
|
391
|
+
password: config.password,
|
|
392
|
+
requestTimeoutMs: channelConfig.requestTimeoutMs,
|
|
393
|
+
fetchImpl: fetch,
|
|
343
394
|
});
|
|
344
|
-
if (!
|
|
345
|
-
const errorText = await response.text().catch(() => "");
|
|
395
|
+
if (!result.ok) {
|
|
346
396
|
(0, runtime_1.emitNervesEvent)({
|
|
347
397
|
level: "warn",
|
|
348
398
|
component: "senses",
|
|
@@ -350,11 +400,13 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
350
400
|
message: "bluebubbles upstream health probe failed",
|
|
351
401
|
meta: {
|
|
352
402
|
serverUrl: config.serverUrl,
|
|
353
|
-
status:
|
|
354
|
-
reason:
|
|
403
|
+
status: result.status,
|
|
404
|
+
reason: result.reason,
|
|
405
|
+
classification: result.classification,
|
|
406
|
+
detail: (0, bluebubbles_health_diagnostics_1.redactBlueBubblesHealthDetailForNerves)(result.detail),
|
|
355
407
|
},
|
|
356
408
|
});
|
|
357
|
-
throw new Error(
|
|
409
|
+
throw new Error(result.detail);
|
|
358
410
|
}
|
|
359
411
|
(0, runtime_1.emitNervesEvent)({
|
|
360
412
|
component: "senses",
|
|
@@ -363,6 +415,77 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
363
415
|
meta: { serverUrl: config.serverUrl },
|
|
364
416
|
});
|
|
365
417
|
},
|
|
418
|
+
async listRecentMessages(params = {}) {
|
|
419
|
+
const limit = Math.max(1, Math.min(100, Math.floor(params.limit ?? 50)));
|
|
420
|
+
const offset = Math.max(0, Math.floor(params.offset ?? 0));
|
|
421
|
+
const url = buildBlueBubblesApiUrl(config.serverUrl, "/api/v1/message/query", config.password);
|
|
422
|
+
(0, runtime_1.emitNervesEvent)({
|
|
423
|
+
component: "senses",
|
|
424
|
+
event: "senses.bluebubbles_query_recent_start",
|
|
425
|
+
message: "querying recent bluebubbles messages",
|
|
426
|
+
meta: { limit, offset },
|
|
427
|
+
});
|
|
428
|
+
const body = {
|
|
429
|
+
limit,
|
|
430
|
+
offset,
|
|
431
|
+
sort: "DESC",
|
|
432
|
+
...(params.chatGuid?.trim() ? { chatGuid: params.chatGuid.trim() } : {}),
|
|
433
|
+
...(params.chatIdentifier?.trim() ? { chatIdentifier: params.chatIdentifier.trim() } : {}),
|
|
434
|
+
...(typeof params.beforeTimestamp === "number" && Number.isFinite(params.beforeTimestamp)
|
|
435
|
+
? { beforeTimestamp: params.beforeTimestamp }
|
|
436
|
+
: {}),
|
|
437
|
+
with: ["chats", "attachments", "payloadData", "messageSummaryInfo"],
|
|
438
|
+
};
|
|
439
|
+
const response = await fetch(url, {
|
|
440
|
+
method: "POST",
|
|
441
|
+
headers: { "Content-Type": "application/json" },
|
|
442
|
+
body: JSON.stringify(body),
|
|
443
|
+
signal: AbortSignal.timeout(channelConfig.requestTimeoutMs),
|
|
444
|
+
});
|
|
445
|
+
if (!response.ok) {
|
|
446
|
+
const errorText = await response.text().catch(() => "");
|
|
447
|
+
(0, runtime_1.emitNervesEvent)({
|
|
448
|
+
level: "warn",
|
|
449
|
+
component: "senses",
|
|
450
|
+
event: "senses.bluebubbles_query_recent_error",
|
|
451
|
+
message: "bluebubbles recent message query failed",
|
|
452
|
+
meta: {
|
|
453
|
+
status: response.status,
|
|
454
|
+
reason: errorText || "unknown",
|
|
455
|
+
},
|
|
456
|
+
});
|
|
457
|
+
throw new Error(`BlueBubbles recent message query failed (${response.status}): ${errorText || "unknown"}`);
|
|
458
|
+
}
|
|
459
|
+
const payload = await parseJsonBody(response);
|
|
460
|
+
const rows = extractMessageQueryRows(payload);
|
|
461
|
+
const messages = [];
|
|
462
|
+
for (const row of rows) {
|
|
463
|
+
try {
|
|
464
|
+
messages.push((0, model_1.normalizeBlueBubblesEvent)({ type: "new-message", data: row }));
|
|
465
|
+
}
|
|
466
|
+
catch (error) {
|
|
467
|
+
(0, runtime_1.emitNervesEvent)({
|
|
468
|
+
level: "warn",
|
|
469
|
+
component: "senses",
|
|
470
|
+
event: "senses.bluebubbles_query_recent_skip",
|
|
471
|
+
message: "skipped unusable bluebubbles recent message row",
|
|
472
|
+
meta: {
|
|
473
|
+
reason: describeCaughtValue(error),
|
|
474
|
+
},
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
(0, runtime_1.emitNervesEvent)({
|
|
479
|
+
component: "senses",
|
|
480
|
+
event: "senses.bluebubbles_query_recent_end",
|
|
481
|
+
message: "queried recent bluebubbles messages",
|
|
482
|
+
meta: {
|
|
483
|
+
rows: rows.length,
|
|
484
|
+
normalized: messages.length,
|
|
485
|
+
},
|
|
486
|
+
});
|
|
487
|
+
return messages;
|
|
488
|
+
},
|
|
366
489
|
async repairEvent(event) {
|
|
367
490
|
if (!event.requiresRepair) {
|
|
368
491
|
(0, runtime_1.emitNervesEvent)({
|
|
@@ -377,6 +500,7 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
377
500
|
return event;
|
|
378
501
|
}
|
|
379
502
|
(0, runtime_1.emitNervesEvent)({
|
|
503
|
+
level: "warn",
|
|
380
504
|
component: "senses",
|
|
381
505
|
event: "senses.bluebubbles_repair_start",
|
|
382
506
|
message: "repairing bluebubbles event by guid",
|
|
@@ -423,13 +547,13 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
423
547
|
});
|
|
424
548
|
return repaired;
|
|
425
549
|
}
|
|
426
|
-
const normalized = (0,
|
|
550
|
+
const normalized = (0, model_1.normalizeBlueBubblesEvent)({
|
|
427
551
|
type: event.eventType,
|
|
428
552
|
data,
|
|
429
553
|
});
|
|
430
554
|
const recoveredMessage = event.kind === "mutation"
|
|
431
555
|
&& !event.shouldNotifyAgent
|
|
432
|
-
? (0,
|
|
556
|
+
? (0, model_1.normalizeBlueBubblesEvent)({
|
|
433
557
|
type: "new-message",
|
|
434
558
|
data,
|
|
435
559
|
})
|
|
@@ -440,8 +564,42 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
440
564
|
if (hydrated.kind === "message" &&
|
|
441
565
|
hydrated.balloonBundleId !== "com.apple.messages.URLBalloonProvider" &&
|
|
442
566
|
hydrated.attachments.length > 0) {
|
|
443
|
-
const
|
|
444
|
-
|
|
567
|
+
const agentConfig = (0, identity_1.loadAgentConfig)();
|
|
568
|
+
const chatModel = agentConfig.humanFacing.model;
|
|
569
|
+
const chatProvider = agentConfig.humanFacing.provider;
|
|
570
|
+
const vlmDescribe = async (params) => {
|
|
571
|
+
if (chatProvider !== "minimax") {
|
|
572
|
+
throw new Error("VLM fallback requires a minimax credential for this agent — " +
|
|
573
|
+
"configure one or switch to a vision-capable chat model");
|
|
574
|
+
}
|
|
575
|
+
const { readProviderCredentialRecord } = await Promise.resolve().then(() => __importStar(require("../../heart/provider-credentials")));
|
|
576
|
+
const credential = await readProviderCredentialRecord((0, identity_1.getAgentName)(), "minimax");
|
|
577
|
+
const apiKey = credential.ok ? credential.record.credentials.apiKey : undefined;
|
|
578
|
+
if (!apiKey) {
|
|
579
|
+
throw new Error("VLM fallback: minimax API key not found in the agent vault — " +
|
|
580
|
+
"run `ouro auth --agent <agent> --provider minimax`");
|
|
581
|
+
}
|
|
582
|
+
return (0, minimax_vlm_1.minimaxVlmDescribe)({
|
|
583
|
+
apiKey: String(apiKey),
|
|
584
|
+
prompt: params.prompt,
|
|
585
|
+
imageDataUrl: params.imageDataUrl,
|
|
586
|
+
baseURL: minimax_1.MINIMAX_PROVIDER_BASE_URL,
|
|
587
|
+
attachmentGuid: params.attachmentGuid,
|
|
588
|
+
mimeType: params.mimeType,
|
|
589
|
+
chatModel: params.chatModel,
|
|
590
|
+
});
|
|
591
|
+
};
|
|
592
|
+
// VLM prompt context wants the user's raw inbound text — NOT
|
|
593
|
+
// the agent-facing rendering, which now carries the attachment
|
|
594
|
+
// marker after the B2 fix. Pull it from the source payload.
|
|
595
|
+
const rawUserText = typeof data.text === "string"
|
|
596
|
+
? (data.text).trim()
|
|
597
|
+
: "";
|
|
598
|
+
const media = await (0, media_1.hydrateBlueBubblesAttachments)(hydrated.attachments, config, channelConfig, {
|
|
599
|
+
preferAudioInput: providerSupportsAudioInput(chatProvider),
|
|
600
|
+
chatModel,
|
|
601
|
+
vlmDescribe,
|
|
602
|
+
userText: rawUserText,
|
|
445
603
|
});
|
|
446
604
|
const transcriptSuffix = media.transcriptAdditions.map((entry) => `[${entry}]`).join("\n");
|
|
447
605
|
const noticeSuffix = media.notices.map((entry) => `[${entry}]`).join("\n");
|
|
@@ -453,6 +611,7 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
453
611
|
};
|
|
454
612
|
}
|
|
455
613
|
(0, runtime_1.emitNervesEvent)({
|
|
614
|
+
level: "warn",
|
|
456
615
|
component: "senses",
|
|
457
616
|
event: "senses.bluebubbles_repair_end",
|
|
458
617
|
message: "bluebubbles event repaired",
|
|
@@ -480,5 +639,53 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
480
639
|
return applyRepairNotice(event, `BlueBubbles repair failed: ${reason}`);
|
|
481
640
|
}
|
|
482
641
|
},
|
|
642
|
+
async getMessageText(messageGuid) {
|
|
643
|
+
const url = buildRepairUrl(config.serverUrl, messageGuid, config.password);
|
|
644
|
+
try {
|
|
645
|
+
const response = await fetch(url, {
|
|
646
|
+
method: "GET",
|
|
647
|
+
signal: AbortSignal.timeout(channelConfig.requestTimeoutMs),
|
|
648
|
+
});
|
|
649
|
+
if (!response.ok) {
|
|
650
|
+
(0, runtime_1.emitNervesEvent)({
|
|
651
|
+
level: "warn",
|
|
652
|
+
component: "senses",
|
|
653
|
+
event: "senses.bluebubbles_get_message_text_error",
|
|
654
|
+
message: "failed to fetch message text",
|
|
655
|
+
meta: { messageGuid, status: response.status },
|
|
656
|
+
});
|
|
657
|
+
return null;
|
|
658
|
+
}
|
|
659
|
+
const payload = await parseJsonBody(response);
|
|
660
|
+
const data = extractRepairData(payload);
|
|
661
|
+
if (!data || typeof data.text !== "string") {
|
|
662
|
+
(0, runtime_1.emitNervesEvent)({
|
|
663
|
+
level: "warn",
|
|
664
|
+
component: "senses",
|
|
665
|
+
event: "senses.bluebubbles_get_message_text_error",
|
|
666
|
+
message: "message payload missing text field",
|
|
667
|
+
meta: { messageGuid, hasData: !!data, textType: data ? typeof data.text : "n/a" },
|
|
668
|
+
});
|
|
669
|
+
return null;
|
|
670
|
+
}
|
|
671
|
+
(0, runtime_1.emitNervesEvent)({
|
|
672
|
+
component: "senses",
|
|
673
|
+
event: "senses.bluebubbles_get_message_text",
|
|
674
|
+
message: "fetched message text by guid",
|
|
675
|
+
meta: { messageGuid },
|
|
676
|
+
});
|
|
677
|
+
return data.text.trim() || null;
|
|
678
|
+
}
|
|
679
|
+
catch (error) {
|
|
680
|
+
(0, runtime_1.emitNervesEvent)({
|
|
681
|
+
level: "warn",
|
|
682
|
+
component: "senses",
|
|
683
|
+
event: "senses.bluebubbles_get_message_text_error",
|
|
684
|
+
message: "exception fetching message text",
|
|
685
|
+
meta: { messageGuid, reason: error instanceof Error ? error.message : String(error) },
|
|
686
|
+
});
|
|
687
|
+
return null;
|
|
688
|
+
}
|
|
689
|
+
},
|
|
483
690
|
};
|
|
484
691
|
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Thin entrypoint for `npm run bluebubbles` / `node dist/senses/bluebubbles/entry.js --agent <name>`.
|
|
3
|
+
// Separated from index.ts so the BlueBubbles adapter stays testable.
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
const agentArgIndex = process.argv.indexOf("--agent");
|
|
39
|
+
const agentName = agentArgIndex >= 0 ? process.argv[agentArgIndex + 1] : undefined;
|
|
40
|
+
if (!agentName) {
|
|
41
|
+
// eslint-disable-next-line no-console -- pre-boot guard: --agent check before imports
|
|
42
|
+
console.error("Missing required --agent <name> argument.\nUsage: node dist/senses/bluebubbles/entry.js --agent ouroboros");
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
const runtime_logging_1 = require("../../heart/daemon/runtime-logging");
|
|
46
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
47
|
+
(0, runtime_logging_1.configureDaemonRuntimeLogger)("bluebubbles");
|
|
48
|
+
(0, runtime_1.emitNervesEvent)({
|
|
49
|
+
component: "senses",
|
|
50
|
+
event: "senses.entry_boot",
|
|
51
|
+
message: "booting BlueBubbles entrypoint",
|
|
52
|
+
meta: { entry: "bluebubbles", agentName },
|
|
53
|
+
});
|
|
54
|
+
Promise.resolve().then(() => __importStar(require("../../heart/runtime-credentials"))).then(async ({ readMachineRuntimeCredentialConfig, refreshMachineRuntimeCredentialConfig, refreshRuntimeCredentialConfig, waitForRuntimeCredentialBootstrap, }) => {
|
|
55
|
+
await waitForRuntimeCredentialBootstrap(agentName);
|
|
56
|
+
const { loadOrCreateMachineIdentity } = await Promise.resolve().then(() => __importStar(require("../../heart/machine-identity")));
|
|
57
|
+
const machine = loadOrCreateMachineIdentity();
|
|
58
|
+
const machineConfig = readMachineRuntimeCredentialConfig(agentName);
|
|
59
|
+
if (!machineConfig.ok) {
|
|
60
|
+
await refreshMachineRuntimeCredentialConfig(agentName, machine.machineId, { preserveCachedOnFailure: true }).catch(() => undefined);
|
|
61
|
+
}
|
|
62
|
+
const { startBlueBubblesApp } = await Promise.resolve().then(() => __importStar(require("./index")));
|
|
63
|
+
await startBlueBubblesApp();
|
|
64
|
+
void refreshRuntimeCredentialConfig(agentName, { preserveCachedOnFailure: true }).catch(() => undefined);
|
|
65
|
+
})
|
|
66
|
+
.catch((error) => {
|
|
67
|
+
(0, runtime_1.emitNervesEvent)({
|
|
68
|
+
level: "error",
|
|
69
|
+
component: "senses",
|
|
70
|
+
event: "senses.entry_error",
|
|
71
|
+
message: "BlueBubbles entrypoint failed",
|
|
72
|
+
meta: { entry: "bluebubbles", agentName, error: error instanceof Error ? error.message : String(error) },
|
|
73
|
+
});
|
|
74
|
+
// eslint-disable-next-line no-console -- fatal startup guard for sense process
|
|
75
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
});
|
|
@@ -34,13 +34,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.getBlueBubblesInboundLogPath = getBlueBubblesInboundLogPath;
|
|
37
|
+
exports.listRecordedBlueBubblesInbound = listRecordedBlueBubblesInbound;
|
|
37
38
|
exports.hasRecordedBlueBubblesInbound = hasRecordedBlueBubblesInbound;
|
|
38
39
|
exports.recordBlueBubblesInbound = recordBlueBubblesInbound;
|
|
39
40
|
const fs = __importStar(require("node:fs"));
|
|
40
41
|
const path = __importStar(require("node:path"));
|
|
41
|
-
const config_1 = require("
|
|
42
|
-
const identity_1 = require("
|
|
43
|
-
const runtime_1 = require("
|
|
42
|
+
const config_1 = require("../../heart/config");
|
|
43
|
+
const identity_1 = require("../../heart/identity");
|
|
44
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
44
45
|
function getBlueBubblesInboundLogPath(agentName, sessionKey) {
|
|
45
46
|
return path.join((0, identity_1.getAgentRoot)(agentName), "state", "senses", "bluebubbles", "inbound", `${(0, config_1.sanitizeKey)(sessionKey)}.ndjson`);
|
|
46
47
|
}
|
|
@@ -58,6 +59,18 @@ function readEntries(filePath) {
|
|
|
58
59
|
return [];
|
|
59
60
|
}
|
|
60
61
|
}
|
|
62
|
+
function listRecordedBlueBubblesInbound(agentName) {
|
|
63
|
+
const inboundDir = path.join((0, identity_1.getAgentRoot)(agentName), "state", "senses", "bluebubbles", "inbound");
|
|
64
|
+
try {
|
|
65
|
+
const files = fs.readdirSync(inboundDir)
|
|
66
|
+
.filter((name) => name.endsWith(".ndjson"))
|
|
67
|
+
.sort();
|
|
68
|
+
return files.flatMap((name) => readEntries(path.join(inboundDir, name)));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
61
74
|
function hasRecordedBlueBubblesInbound(agentName, sessionKey, messageGuid) {
|
|
62
75
|
if (!messageGuid.trim())
|
|
63
76
|
return false;
|
|
@@ -68,6 +81,9 @@ function recordBlueBubblesInbound(agentName, event, source) {
|
|
|
68
81
|
const filePath = getBlueBubblesInboundLogPath(agentName, event.chat.sessionKey);
|
|
69
82
|
try {
|
|
70
83
|
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
84
|
+
if (event.messageGuid.trim() && readEntries(filePath).some((entry) => entry.messageGuid === event.messageGuid)) {
|
|
85
|
+
return filePath;
|
|
86
|
+
}
|
|
71
87
|
fs.appendFileSync(filePath, JSON.stringify({
|
|
72
88
|
recordedAt: new Date(event.timestamp).toISOString(),
|
|
73
89
|
messageGuid: event.messageGuid,
|
|
@@ -94,6 +110,7 @@ function recordBlueBubblesInbound(agentName, event, source) {
|
|
|
94
110
|
return filePath;
|
|
95
111
|
}
|
|
96
112
|
(0, runtime_1.emitNervesEvent)({
|
|
113
|
+
level: "warn",
|
|
97
114
|
component: "senses",
|
|
98
115
|
event: "senses.bluebubbles_inbound_logged",
|
|
99
116
|
message: "recorded bluebubbles inbound message to sidecar log",
|