@ouro.bot/cli 0.1.0-alpha.95 → 0.1.0-alpha.951
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +154 -23
- package/RepairGuide.ouro/agent.json +5 -0
- package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
- package/RepairGuide.ouro/psyche/SOUL.md +55 -0
- package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
- package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
- package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
- package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
- package/assets/bluebubbles-host +264 -0
- package/assets/sanctuary-host-launcher.sh +16 -0
- package/changelog.json +6021 -16
- package/deploy/unraid/Dockerfile +58 -0
- package/deploy/unraid/README.txt +2997 -0
- package/deploy/unraid/audit-container-spec.sh +4 -0
- package/deploy/unraid/container-runtime.json +1 -0
- package/deploy/unraid/docker-man-template-transaction.mjs +711 -0
- package/deploy/unraid/docker-man-template-xml.cjs +105 -0
- package/deploy/unraid/migrate-sanctuary-bundle.mjs +60 -0
- package/deploy/unraid/ouro-events/bootstrap-spool.sh +92 -0
- package/deploy/unraid/ouro-events/emit-event.mjs +310 -0
- package/deploy/unraid/ouro-events/emit-usenet-event.sh +54 -0
- package/deploy/unraid/ouro-events/install-usenet-guard.sh +435 -0
- package/deploy/unraid/ouro-events/usenet-health.sh +176 -0
- package/deploy/unraid/sanctuary-acceptance-adapter.sh +43 -0
- package/deploy/unraid/sanctuary-acceptance-contract.json +198 -0
- package/deploy/unraid/sanctuary-acceptance-harness.sh +23 -0
- package/deploy/unraid/sanctuary-authority-installation.json +36 -0
- package/deploy/unraid/sanctuary-authority-service.sh +30 -0
- package/deploy/unraid/sanctuary-butler-upgrade.mjs +1274 -0
- package/deploy/unraid/sanctuary-deployment-target.mjs +710 -0
- package/deploy/unraid/sanctuary-replay-gate.mjs +1586 -0
- package/deploy/unraid/sanctuary-safe-rename.py +24 -0
- package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2086 -0
- package/deploy/unraid/sanctuary-unit16-run.sh +560 -0
- package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
- package/deploy/unraid/sanctuary.ouro/agent.json +66 -0
- package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
- package/deploy/unraid/sanctuary.ouro/awaiting/house-care-sweep.md +17 -0
- package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
- package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
- package/deploy/unraid/sanctuary.ouro/mcp/media-mcp.mjs +2231 -0
- package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
- package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
- package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +5 -0
- package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +33 -0
- package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +27 -0
- package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +22 -0
- package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
- package/deploy/unraid/sanctuary.ouro/tool-profiles.json +232 -0
- package/deploy/unraid/sanctuary.xml +30 -0
- package/dist/a2a/card.js +57 -0
- package/dist/a2a/client.js +250 -0
- package/dist/a2a/config.js +50 -0
- package/dist/a2a/delegated-command-grants.js +93 -0
- package/dist/a2a/delegated-command.js +197 -0
- package/dist/a2a/delegation-stores.js +56 -0
- package/dist/a2a/did-resolution.js +93 -0
- package/dist/a2a/escalation-grants.js +84 -0
- package/dist/a2a/escalation-wiring.js +60 -0
- package/dist/a2a/identity.js +258 -0
- package/dist/a2a/inbound-share.js +110 -0
- package/dist/a2a/mission-result-wire.js +196 -0
- package/dist/a2a/onboarding.js +133 -0
- package/dist/a2a/operator-trust.js +399 -0
- package/dist/a2a/outbox-client.js +57 -0
- package/dist/a2a/outbox-store.js +188 -0
- package/dist/a2a/outbox-wire.js +95 -0
- package/dist/a2a/pin-store.js +132 -0
- package/dist/a2a/replay-grant-holders.js +33 -0
- package/dist/a2a/replay-harness.js +188 -0
- package/dist/a2a/resolution-proof.js +53 -0
- package/dist/a2a/sealed-chat.js +113 -0
- package/dist/a2a/seen-ledger.js +120 -0
- package/dist/a2a/server.js +771 -0
- package/dist/a2a/task-store.js +69 -0
- package/dist/a2a/transport.js +45 -0
- package/dist/a2a/trust-commands.js +203 -0
- package/dist/a2a/trusted-files.js +185 -0
- package/dist/a2a/types.js +3 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +360 -0
- package/dist/arc/episodes.js +118 -0
- package/dist/arc/evolution.js +490 -0
- package/dist/arc/flight-recorder.js +1034 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +386 -0
- package/dist/arc/packets.js +336 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/commerce/store.js +755 -0
- package/dist/commerce/types.js +3 -0
- package/dist/heart/active-work.js +798 -40
- package/dist/heart/agent-entry.js +252 -3
- package/dist/heart/approval-files.js +113 -0
- package/dist/heart/approval-store.js +960 -0
- package/dist/heart/attachments/image-normalize.js +201 -0
- package/dist/heart/attachments/materialize.js +97 -0
- package/dist/heart/attachments/originals.js +88 -0
- package/dist/heart/attachments/render.js +29 -0
- package/dist/heart/attachments/sources/bluebubbles.js +156 -0
- package/dist/heart/attachments/sources/cli-local-file.js +78 -0
- package/dist/heart/attachments/sources/index.js +18 -0
- package/dist/heart/attachments/sources/telegram.js +71 -0
- package/dist/heart/attachments/store.js +132 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +497 -0
- package/dist/heart/autonomy-budget.js +478 -0
- package/dist/heart/awaiting/a2a-await-delivery.js +109 -0
- package/dist/heart/awaiting/await-alert.js +152 -0
- package/dist/heart/awaiting/await-expiry.js +143 -0
- package/dist/heart/awaiting/await-loader.js +91 -0
- package/dist/heart/awaiting/await-parser.js +152 -0
- package/dist/heart/awaiting/await-runtime-state.js +111 -0
- package/dist/heart/awaiting/await-scheduler.js +391 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bluebubbles-host-account.js +78 -0
- package/dist/heart/bridges/manager.js +137 -17
- package/dist/heart/bridges/store.js +14 -2
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +44 -18
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +174 -131
- package/dist/heart/context-loss-gauntlet.js +387 -0
- package/dist/heart/context-loss-sentinel.js +1159 -0
- package/dist/heart/core.js +2356 -586
- package/dist/heart/cross-chat-delivery.js +9 -22
- package/dist/heart/daemon/agent-config-check.js +474 -0
- package/dist/heart/daemon/agent-discovery.js +283 -3
- package/dist/heart/daemon/agent-home.js +319 -0
- package/dist/heart/daemon/agent-service.js +542 -0
- package/dist/heart/daemon/agentic-repair.js +547 -0
- package/dist/heart/daemon/await-private-wake.js +59 -0
- package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
- package/dist/heart/daemon/bluebubbles-host.js +273 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +180 -0
- package/dist/heart/daemon/cli-arg-redaction.js +26 -0
- package/dist/heart/daemon/cli-defaults.js +881 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +9235 -0
- package/dist/heart/daemon/cli-help.js +742 -0
- package/dist/heart/daemon/cli-parse.js +3236 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +819 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
- package/dist/heart/daemon/container-healthcheck.js +112 -0
- package/dist/heart/daemon/container-runtime.js +97 -0
- package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
- package/dist/heart/daemon/container-spec-auditor.js +235 -0
- package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
- package/dist/heart/daemon/daemon-cli.js +29 -2360
- package/dist/heart/daemon/daemon-entry.js +953 -11
- package/dist/heart/daemon/daemon-health.js +186 -0
- package/dist/heart/daemon/daemon-rollup.js +57 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +2110 -104
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +1766 -0
- package/dist/heart/daemon/freshness.js +345 -0
- package/dist/heart/daemon/habit-private-wake.js +61 -0
- package/dist/heart/daemon/health-monitor.js +154 -11
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +78 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +79 -10
- package/dist/heart/daemon/logs-prune.js +132 -0
- package/dist/heart/daemon/mcp-canary.js +524 -0
- package/dist/heart/daemon/message-router.js +65 -5
- package/dist/heart/daemon/migrate-to-desk.js +848 -0
- package/dist/heart/daemon/os-cron-deps.js +135 -0
- package/dist/heart/daemon/os-cron.js +22 -14
- package/dist/heart/daemon/ouro-bot-entry.js +6 -3
- package/dist/heart/daemon/ouro-entry.js +9 -3
- package/dist/heart/daemon/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +760 -61
- package/dist/heart/daemon/provider-discovery.js +137 -0
- package/dist/heart/daemon/provider-ping-progress.js +83 -0
- package/dist/heart/daemon/prunable-bundle.js +144 -0
- package/dist/heart/daemon/pulse.js +511 -0
- package/dist/heart/daemon/readiness-repair.js +365 -0
- package/dist/heart/daemon/run-hooks.js +2 -0
- package/dist/heart/daemon/runtime-logging.js +47 -14
- package/dist/heart/daemon/runtime-metadata.js +2 -30
- package/dist/heart/daemon/runtime-mode.js +13 -2
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2654 -0
- package/dist/heart/daemon/sanctuary-acceptance-harness.js +1830 -0
- package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
- package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +955 -0
- package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
- package/dist/heart/daemon/sanctuary-authority-epoch.js +281 -0
- package/dist/heart/daemon/sanctuary-authority-installation.js +161 -0
- package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
- package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +1282 -0
- package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
- package/dist/heart/daemon/sanctuary-bundle-migration.js +730 -0
- package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
- package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +493 -0
- package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
- package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
- package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
- package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
- package/dist/heart/daemon/sanctuary-package-management.js +103 -0
- package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
- package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +475 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-service.js +676 -0
- package/dist/heart/daemon/sense-manager.js +786 -48
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +1 -1
- package/dist/heart/daemon/socket-client.js +180 -12
- package/dist/heart/daemon/stale-bundle-prune.js +113 -0
- package/dist/heart/daemon/startup-tui.js +339 -0
- package/dist/heart/daemon/supercronic-supervisor.js +282 -0
- package/dist/heart/daemon/task-scheduler.js +117 -39
- package/dist/heart/daemon/terminal-ui.js +503 -0
- package/dist/heart/daemon/thoughts.js +138 -54
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -4
- package/dist/heart/external-events/router.js +1523 -0
- package/dist/heart/failure-reports.js +336 -0
- package/dist/heart/file-lock.js +109 -0
- package/dist/heart/frontend-approval-runtime.js +506 -0
- package/dist/heart/frontend-journal.js +215 -0
- package/dist/heart/frontend-session-service.js +271 -0
- package/dist/heart/frontend-socket-client.js +173 -0
- package/dist/heart/frontend-socket.js +434 -0
- package/dist/heart/frontend-turn-errors.js +20 -0
- package/dist/heart/habits/habit-cancel.js +810 -0
- package/dist/heart/habits/habit-lifecycle.js +1327 -0
- package/dist/heart/habits/habit-migration.js +194 -0
- package/dist/heart/habits/habit-parser.js +278 -0
- package/dist/heart/habits/habit-runtime-state.js +93 -0
- package/dist/heart/habits/habit-scheduler.js +653 -0
- package/dist/heart/habits/habit-session-summary.js +318 -0
- package/dist/heart/habits/habit-session.js +636 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
- package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
- package/dist/heart/identity.js +239 -59
- package/dist/heart/kept-notes.js +289 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +175 -0
- package/dist/heart/mail-import-discovery.js +356 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +99 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +406 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +272 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +41 -0
- package/dist/heart/mailbox/mailbox-supervision.js +131 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +197 -0
- package/dist/heart/mailbox/readers/agent-machine.js +428 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
- package/dist/heart/mailbox/readers/mail.js +375 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
- package/dist/heart/mailbox/readers/sessions.js +231 -0
- package/dist/heart/mailbox/readers/shared.js +111 -0
- package/dist/heart/mcp/mcp-server.js +760 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +83 -16
- package/dist/heart/orientation-frame.js +345 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/primitives.js +1 -1
- package/dist/heart/private-runtime/decision-renderer.js +158 -0
- package/dist/heart/private-runtime/index.js +18 -0
- package/dist/heart/private-runtime/ledger.js +221 -0
- package/dist/heart/private-runtime/policy.js +260 -0
- package/dist/heart/private-runtime/types.js +2 -0
- package/dist/heart/progress-story.js +1 -1
- package/dist/heart/provider-attempt.js +137 -0
- package/dist/heart/provider-binding-resolver.js +273 -0
- package/dist/heart/provider-credentials.js +449 -0
- package/dist/heart/provider-failover.js +311 -0
- package/dist/heart/provider-models.js +96 -0
- package/dist/heart/provider-ping.js +265 -0
- package/dist/heart/provider-readiness-cache.js +119 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +188 -65
- package/dist/heart/providers/azure.js +23 -11
- package/dist/heart/providers/error-classification.js +129 -0
- package/dist/heart/providers/github-copilot.js +38 -39
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +26 -8
- package/dist/heart/providers/openai-codex-token.js +349 -0
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/providers/openai-compatible.js +177 -0
- package/dist/heart/reach-channel.js +85 -0
- package/dist/heart/reply-style.js +52 -0
- package/dist/heart/run-ledger.js +247 -0
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +607 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +24 -4
- package/dist/heart/session-activity.js +94 -24
- package/dist/heart/session-events.js +1521 -0
- package/dist/heart/session-playback-cli-main.js +5 -0
- package/dist/heart/session-playback-cli.js +36 -0
- package/dist/heart/session-playback.js +231 -0
- package/dist/heart/session-redaction-repair-cli-main.js +31 -0
- package/dist/heart/session-redaction-repair.js +552 -0
- package/dist/heart/session-stats-cli-main.js +5 -0
- package/dist/heart/session-stats.js +183 -0
- package/dist/heart/session-transcript.js +133 -0
- package/dist/heart/shelf-claims.js +78 -0
- package/dist/heart/shepherd/custody-types.js +2 -0
- package/dist/heart/shepherd/mandates.js +352 -0
- package/dist/heart/shepherd/operation-commands.js +19 -0
- package/dist/heart/shepherd/operations.js +135 -0
- package/dist/heart/shepherd/supervision.js +114 -0
- package/dist/heart/shepherd/types.js +2 -0
- package/dist/heart/shepherd-config.js +113 -0
- package/dist/heart/source-grounding.js +297 -0
- package/dist/heart/start-of-turn-packet.js +372 -0
- package/dist/heart/steward-policy.js +656 -0
- package/dist/heart/streaming.js +631 -207
- package/dist/heart/structured-output.js +196 -0
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync-health.js +152 -0
- package/dist/heart/sync.js +726 -0
- package/dist/heart/target-resolution.js +11 -7
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/timeouts.js +101 -0
- package/dist/heart/tool-activity-callbacks.js +59 -0
- package/dist/heart/tool-approval.js +382 -0
- package/dist/heart/tool-description.js +155 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +206 -0
- package/dist/heart/turn-context.js +496 -0
- package/dist/heart/turn-execution-lease.js +30 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +3 -2
- package/dist/heart/versioning/ouro-path-installer.js +432 -0
- package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
- package/dist/heart/versioning/ouro-version-manager.js +432 -0
- package/dist/heart/versioning/release-sources.js +173 -0
- package/dist/heart/versioning/self-update-defaults.js +294 -0
- package/dist/heart/versioning/self-update.js +196 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/versioning/update-hooks.js +154 -0
- package/dist/heart/versioning/update-state.js +126 -0
- package/dist/heart/versioning/updater-launchd.js +150 -0
- package/dist/heart/versioning/version-intent.js +114 -0
- package/dist/heart/work-card.js +380 -0
- package/dist/mailbox-ui/assets/index-Dbska1tZ.js +1 -0
- package/dist/mailbox-ui/assets/index-DsiKaPyH.css +1 -0
- package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
- package/dist/mailbox-ui/index.html +16 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +889 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/cache-sync-cli.js +58 -0
- package/dist/mailroom/core.js +803 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +568 -0
- package/dist/mailroom/hosted-cache-sync.js +384 -0
- package/dist/mailroom/mbox-import.js +393 -0
- package/dist/mailroom/migration.js +164 -0
- package/dist/mailroom/outbound.js +380 -0
- package/dist/mailroom/policy.js +263 -0
- package/dist/mailroom/reader.js +292 -0
- package/dist/mailroom/search-cache.js +513 -0
- package/dist/mailroom/search-relevance.js +319 -0
- package/dist/mailroom/smtp-ingress.js +176 -0
- package/dist/mailroom/source-state.js +176 -0
- package/dist/mailroom/thread.js +109 -0
- package/dist/mailroom/travel-extract.js +89 -0
- package/dist/mind/bundle-manifest.js +24 -2
- package/dist/mind/context.js +328 -139
- package/dist/mind/desk-section.js +362 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +68 -77
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/friend-link-codes.js +209 -0
- package/dist/mind/friend-merge.js +330 -0
- package/dist/mind/{associative-recall.js → note-search.js} +47 -58
- package/dist/mind/obligation-steering.js +199 -3
- package/dist/mind/outbound-record.js +165 -0
- package/dist/mind/pending.js +36 -10
- package/dist/mind/prompt-budget.js +479 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1085 -198
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/record-paths.js +312 -0
- package/dist/mind/scrutiny.js +173 -0
- package/dist/mind/session-transaction.js +622 -0
- package/dist/nerves/cli-logging.js +7 -1
- package/dist/nerves/coverage/audit-rules.js +15 -6
- package/dist/nerves/coverage/audit.js +28 -2
- package/dist/nerves/coverage/cli.js +1 -1
- package/dist/nerves/coverage/contract.js +5 -5
- package/dist/nerves/coverage/file-completeness.js +143 -5
- package/dist/nerves/coverage/run-artifacts.js +55 -35
- package/dist/nerves/coverage/source-scanner.js +4 -4
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +293 -9
- package/dist/nerves/observation.js +20 -0
- package/dist/nerves/redact.js +79 -0
- package/dist/nerves/review/cli-main.js +5 -0
- package/dist/nerves/review/cli.js +156 -0
- package/dist/nerves/review/core.js +159 -0
- package/dist/nerves/runtime.js +17 -1
- package/dist/repertoire/ado-client.js +15 -56
- package/dist/repertoire/ado-semantic.js +16 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +1201 -0
- package/dist/repertoire/bundle-templates.js +71 -0
- package/dist/repertoire/bw-installer.js +231 -0
- package/dist/repertoire/coding/codex-jsonl.js +64 -0
- package/dist/repertoire/coding/context-pack.js +331 -0
- package/dist/repertoire/coding/feedback.js +174 -32
- package/dist/repertoire/coding/index.js +15 -3
- package/dist/repertoire/coding/manager.js +159 -10
- package/dist/repertoire/coding/spawner.js +40 -11
- package/dist/repertoire/coding/tools.js +182 -18
- package/dist/repertoire/coding/workbench-client.js +272 -0
- package/dist/repertoire/coding/workbench-manager.js +346 -0
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +183 -0
- package/dist/repertoire/desk/classifier.js +362 -0
- package/dist/repertoire/duffel-client.js +185 -0
- package/dist/repertoire/github-client.js +14 -55
- package/dist/repertoire/graph-client.js +11 -52
- package/dist/repertoire/guardrails.js +971 -20
- package/dist/repertoire/house-sweep.js +469 -0
- package/dist/repertoire/mcp-client.js +58 -5
- package/dist/repertoire/mcp-manager.js +427 -139
- package/dist/repertoire/mcp-tools.js +132 -0
- package/dist/repertoire/mcp-write-guard.js +46 -0
- package/dist/repertoire/plugin-mcp.js +175 -0
- package/dist/repertoire/plugins.js +253 -0
- package/dist/repertoire/relationship-authorization.js +322 -0
- package/dist/repertoire/sanctuary-container-policy.js +46 -0
- package/dist/repertoire/shell-sessions.js +134 -0
- package/dist/repertoire/skills.js +48 -4
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-arguments.js +182 -0
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-a2a.js +699 -0
- package/dist/repertoire/tools-attachments.js +322 -0
- package/dist/repertoire/tools-awaiting.js +872 -0
- package/dist/repertoire/tools-base.js +83 -1168
- package/dist/repertoire/tools-bluebubbles.js +2 -0
- package/dist/repertoire/tools-bridge.js +144 -0
- package/dist/repertoire/tools-bundle.js +995 -0
- package/dist/repertoire/tools-commerce.js +253 -0
- package/dist/repertoire/tools-config.js +186 -0
- package/dist/repertoire/tools-continuity.js +582 -0
- package/dist/repertoire/tools-credential.js +383 -0
- package/dist/repertoire/tools-escalation.js +84 -0
- package/dist/repertoire/tools-evolution.js +527 -0
- package/dist/repertoire/tools-files.js +344 -0
- package/dist/repertoire/tools-flight.js +290 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-friend-link.js +57 -0
- package/dist/repertoire/tools-github.js +3 -8
- package/dist/repertoire/tools-habits.js +103 -0
- package/dist/repertoire/tools-house-care.js +174 -0
- package/dist/repertoire/tools-mail.js +1828 -0
- package/dist/repertoire/tools-notes.js +501 -0
- package/dist/repertoire/tools-obligations.js +182 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +482 -0
- package/dist/repertoire/tools-rsvp.js +139 -0
- package/dist/repertoire/tools-runtime.js +238 -0
- package/dist/repertoire/tools-sanctuary-host.js +202 -0
- package/dist/repertoire/tools-session.js +1141 -0
- package/dist/repertoire/tools-shell.js +154 -0
- package/dist/repertoire/tools-shepherd-guidance.js +171 -0
- package/dist/repertoire/tools-shepherd.js +323 -0
- package/dist/repertoire/tools-steward-policy.js +147 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +369 -0
- package/dist/repertoire/tools-teams.js +50 -39
- package/dist/repertoire/tools-telegram-contacts.js +37 -0
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +982 -0
- package/dist/repertoire/tools-unraid.js +556 -0
- package/dist/repertoire/tools-user-profile.js +146 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools-voice-local.js +198 -0
- package/dist/repertoire/tools-voice.js +145 -0
- package/dist/repertoire/tools.js +518 -156
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/unraid-client.js +155 -0
- package/dist/repertoire/unraid-restart.js +339 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +686 -0
- package/dist/rsvp/aisleplanner-client.js +354 -0
- package/dist/rsvp/cli.js +936 -0
- package/dist/rsvp/config.js +327 -0
- package/dist/rsvp/cutover.js +433 -0
- package/dist/rsvp/diagnostics.js +232 -0
- package/dist/rsvp/diff-renderer.js +176 -0
- package/dist/rsvp/habit-policy.js +110 -0
- package/dist/rsvp/habit-stage.js +123 -0
- package/dist/rsvp/incident-bundle.js +97 -0
- package/dist/rsvp/migration.js +204 -0
- package/dist/rsvp/native-habit-runner.js +630 -0
- package/dist/rsvp/outbound-state.js +628 -0
- package/dist/rsvp/query.js +118 -0
- package/dist/rsvp/replay.js +233 -0
- package/dist/rsvp/snapshot.js +232 -0
- package/dist/rsvp/spend-ledger.js +175 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/a2a-entry.js +132 -0
- package/dist/senses/acp-server.js +386 -0
- package/dist/senses/attention-queue.js +186 -0
- package/dist/senses/await-turn-message.js +65 -0
- package/dist/senses/bluebubbles/active-turns.js +216 -0
- package/dist/senses/bluebubbles/attachment-cache.js +53 -0
- package/dist/senses/bluebubbles/attachment-download.js +137 -0
- package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +385 -43
- package/dist/senses/bluebubbles/context-packet.js +207 -0
- package/dist/senses/bluebubbles/context-smoke.js +144 -0
- package/dist/senses/bluebubbles/entry.js +90 -0
- package/dist/senses/bluebubbles/host-account-verifier.js +88 -0
- package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
- package/dist/senses/bluebubbles/index.js +3940 -0
- package/dist/senses/bluebubbles/latest-turn.js +311 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
- package/dist/senses/bluebubbles/outbound-state.js +308 -0
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/reaction-policy.js +47 -0
- package/dist/senses/bluebubbles/replay.js +284 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- package/dist/senses/bluebubbles/webhook-registration.js +257 -0
- package/dist/senses/bluebubbles-meta-guard.js +39 -0
- package/dist/senses/cli/bracketed-paste.js +82 -0
- package/dist/senses/cli/image-paste.js +287 -0
- package/dist/senses/cli/image-ref-navigation.js +75 -0
- package/dist/senses/cli/ink-app.js +156 -0
- package/dist/senses/cli/inline-diff.js +64 -0
- package/dist/senses/cli/input-keys.js +174 -0
- package/dist/senses/cli/kill-ring.js +86 -0
- package/dist/senses/cli/message-list.js +51 -0
- package/dist/senses/cli/ouro-tui.js +607 -0
- package/dist/senses/cli/spinner-imperative.js +135 -0
- package/dist/senses/cli/spinner.js +101 -0
- package/dist/senses/cli/status-line.js +60 -0
- package/dist/senses/cli/streaming-markdown.js +526 -0
- package/dist/senses/cli/tool-display.js +85 -0
- package/dist/senses/cli/tool-render.js +85 -0
- package/dist/senses/cli/tui-store.js +241 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +60 -8
- package/dist/senses/cli.js +570 -309
- package/dist/senses/commands.js +66 -3
- package/dist/senses/context-packet-ledger.js +371 -0
- package/dist/senses/context-packets.js +154 -0
- package/dist/senses/habit-lifecycle-guard.js +24 -0
- package/dist/senses/habit-turn-message.js +160 -0
- package/dist/senses/ingress-evidence.js +2 -0
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +524 -0
- package/dist/senses/pipeline.js +1158 -204
- package/dist/senses/private-runtime-worker.js +805 -0
- package/dist/senses/private-runtime.js +1627 -0
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/root-host-approval-port.js +345 -0
- package/dist/senses/root-host-approval-runtime.js +393 -0
- package/dist/senses/sanctuary-authority-resident.js +102 -0
- package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
- package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
- package/dist/senses/sanctuary-grounding.js +118 -0
- package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
- package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
- package/dist/senses/sanctuary-health-runner.js +104 -0
- package/dist/senses/sanctuary-health.js +422 -0
- package/dist/senses/sanctuary-install-state-contract.js +169 -0
- package/dist/senses/sanctuary-interactive-control.js +410 -0
- package/dist/senses/sanctuary-media-catalog-contract.js +268 -0
- package/dist/senses/sanctuary-media-optimization.js +514 -0
- package/dist/senses/sanctuary-runtime.js +369 -0
- package/dist/senses/sanctuary-sab.js +85 -0
- package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
- package/dist/senses/shared-turn.js +804 -0
- package/dist/senses/shepherd/agent-presentation.js +88 -0
- package/dist/senses/shepherd/attention-page.js +166 -0
- package/dist/senses/shepherd/attention-sidebar.js +76 -0
- package/dist/senses/shepherd/attention.js +295 -0
- package/dist/senses/shepherd/checkin-config.js +76 -0
- package/dist/senses/shepherd/checkin-store.js +386 -0
- package/dist/senses/shepherd/client.js +196 -0
- package/dist/senses/shepherd/cmux.js +483 -0
- package/dist/senses/shepherd/composer.js +336 -0
- package/dist/senses/shepherd/feedback-reply.js +108 -0
- package/dist/senses/shepherd/feedback-source.js +20 -0
- package/dist/senses/shepherd/feedback-store.js +331 -0
- package/dist/senses/shepherd/feedback-submit.js +182 -0
- package/dist/senses/shepherd/feedback-worker.js +208 -0
- package/dist/senses/shepherd/guidance.js +273 -0
- package/dist/senses/shepherd/herdr.js +427 -0
- package/dist/senses/shepherd/host.js +14 -0
- package/dist/senses/shepherd/human-decision-guard.js +29 -0
- package/dist/senses/shepherd/judge-evaluation-command.js +183 -0
- package/dist/senses/shepherd/judge-evaluation-entry.js +13 -0
- package/dist/senses/shepherd/judge-evaluation.js +155 -0
- package/dist/senses/shepherd/judge.js +202 -0
- package/dist/senses/shepherd/notice-outbox.js +262 -0
- package/dist/senses/shepherd/observation-publisher.js +320 -0
- package/dist/senses/shepherd/operations-defaults.js +86 -0
- package/dist/senses/shepherd/operations.js +159 -0
- package/dist/senses/shepherd/owner-notice.js +465 -0
- package/dist/senses/shepherd/prompt-state.js +60 -0
- package/dist/senses/shepherd/recovery.js +543 -0
- package/dist/senses/shepherd/redact.js +66 -0
- package/dist/senses/shepherd/returns.js +79 -0
- package/dist/senses/shepherd/sense.js +821 -0
- package/dist/senses/shepherd/shepherd-judge-corpus-v1.json +170 -0
- package/dist/senses/shepherd/surface.js +123 -0
- package/dist/senses/shepherd/target-binding.js +13 -0
- package/dist/senses/shepherd/terminal-process.js +147 -0
- package/dist/senses/shepherd-entry.js +98 -0
- package/dist/senses/surface-tool.js +109 -0
- package/dist/senses/teams-entry.js +68 -8
- package/dist/senses/teams-image.js +119 -0
- package/dist/senses/teams.js +949 -337
- package/dist/senses/telegram-admission.js +718 -0
- package/dist/senses/telegram-approval-runtime.js +793 -0
- package/dist/senses/telegram-attachments.js +186 -0
- package/dist/senses/telegram-audit-ledger.js +220 -0
- package/dist/senses/telegram-authority-transport.js +231 -0
- package/dist/senses/telegram-client.js +1749 -0
- package/dist/senses/telegram-effect-adapter.js +904 -0
- package/dist/senses/telegram-entry.js +83 -0
- package/dist/senses/telegram-handoff.js +80 -0
- package/dist/senses/telegram.js +2435 -0
- package/dist/senses/trust-gate.js +104 -9
- package/dist/senses/voice/audio-playback.js +237 -0
- package/dist/senses/voice/audio-routing.js +119 -0
- package/dist/senses/voice/call-auth.js +250 -0
- package/dist/senses/voice/elevenlabs.js +202 -0
- package/dist/senses/voice/floor-control.js +431 -0
- package/dist/senses/voice/floor-controller.js +115 -0
- package/dist/senses/voice/golden-path.js +116 -0
- package/dist/senses/voice/index.js +29 -0
- package/dist/senses/voice/local-audio-control.js +344 -0
- package/dist/senses/voice/local-audio-devices.js +516 -0
- package/dist/senses/voice/local-audio-disclosure.js +174 -0
- package/dist/senses/voice/local-audio-identity.js +103 -0
- package/dist/senses/voice/local-audio-join.js +325 -0
- package/dist/senses/voice/local-audio-mute.js +199 -0
- package/dist/senses/voice/local-audio-notify.js +124 -0
- package/dist/senses/voice/local-audio-prompts.js +116 -0
- package/dist/senses/voice/local-audio-transport.js +427 -0
- package/dist/senses/voice/local-audio.js +281 -0
- package/dist/senses/voice/local-media-stream.js +145 -0
- package/dist/senses/voice/meeting.js +113 -0
- package/dist/senses/voice/outbound.js +190 -0
- package/dist/senses/voice/phone.js +33 -0
- package/dist/senses/voice/playback.js +139 -0
- package/dist/senses/voice/process-guards.js +51 -0
- package/dist/senses/voice/realtime-eval.js +496 -0
- package/dist/senses/voice/realtime-tool-schema.js +195 -0
- package/dist/senses/voice/realtime-trace.js +531 -0
- package/dist/senses/voice/transcript.js +70 -0
- package/dist/senses/voice/turn.js +191 -0
- package/dist/senses/voice/twilio-phone-runtime.js +836 -0
- package/dist/senses/voice/twilio-phone.js +5454 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +83 -0
- package/dist/senses/voice-realtime-eval-command.js +99 -0
- package/dist/senses/voice-realtime-eval-entry.js +21 -0
- package/dist/senses/voice-twilio-entry.js +87 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +265 -0
- package/dist/util/frontmatter.js +69 -0
- package/npm-shrinkwrap.json +8165 -0
- package/package.json +75 -13
- package/skills/agent-commerce.md +113 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +99 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/auth-flow.js +0 -430
- package/dist/heart/daemon/ouro-path-installer.js +0 -260
- package/dist/heart/daemon/ouro-version-manager.js +0 -171
- package/dist/heart/daemon/update-hooks.js +0 -138
- package/dist/heart/obligations.js +0 -191
- package/dist/heart/safe-workspace.js +0 -362
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/friends/channel.js +0 -84
- package/dist/mind/friends/group-context.js +0 -144
- package/dist/mind/friends/resolver.js +0 -84
- package/dist/mind/friends/store-file.js +0 -190
- package/dist/mind/friends/store.js +0 -4
- package/dist/mind/friends/tokens.js +0 -26
- package/dist/mind/friends/trust-explanation.js +0 -74
- package/dist/mind/friends/types.js +0 -29
- package/dist/repertoire/tasks/board.js +0 -134
- package/dist/repertoire/tasks/index.js +0 -224
- package/dist/repertoire/tasks/lifecycle.js +0 -80
- package/dist/repertoire/tasks/middleware.js +0 -65
- package/dist/repertoire/tasks/parser.js +0 -173
- package/dist/repertoire/tasks/scanner.js +0 -132
- package/dist/repertoire/tasks/transitions.js +0 -144
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1181
- package/dist/senses/debug-activity.js +0 -154
- package/dist/senses/inner-dialog-worker.js +0 -90
- package/dist/senses/inner-dialog.js +0 -525
- package/subagents/README.md +0 -7
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
- /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
- /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
- /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
- /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
- /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
|
@@ -1,12 +1,65 @@
|
|
|
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 });
|
|
36
|
+
exports.BlueBubblesSendError = void 0;
|
|
3
37
|
exports.createBlueBubblesClient = createBlueBubblesClient;
|
|
4
38
|
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const config_1 = require("
|
|
6
|
-
const identity_1 = require("
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
39
|
+
const config_1 = require("../../heart/config");
|
|
40
|
+
const identity_1 = require("../../heart/identity");
|
|
41
|
+
const bluebubbles_health_diagnostics_1 = require("../../heart/daemon/bluebubbles-health-diagnostics");
|
|
42
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
43
|
+
const minimax_1 = require("../../heart/providers/minimax");
|
|
44
|
+
const minimax_vlm_1 = require("../../heart/providers/minimax-vlm");
|
|
45
|
+
const model_1 = require("./model");
|
|
46
|
+
const media_1 = require("./media");
|
|
47
|
+
const host_account_verifier_1 = require("./host-account-verifier");
|
|
48
|
+
class BlueBubblesSendError extends Error {
|
|
49
|
+
httpStatus;
|
|
50
|
+
status;
|
|
51
|
+
errorCode;
|
|
52
|
+
transportInvoked;
|
|
53
|
+
constructor(input) {
|
|
54
|
+
super(input.message, input.cause === undefined ? undefined : { cause: input.cause });
|
|
55
|
+
this.name = "BlueBubblesSendError";
|
|
56
|
+
this.httpStatus = input.httpStatus;
|
|
57
|
+
this.status = input.httpStatus;
|
|
58
|
+
this.errorCode = input.errorCode;
|
|
59
|
+
this.transportInvoked = input.transportInvoked;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.BlueBubblesSendError = BlueBubblesSendError;
|
|
10
63
|
function buildBlueBubblesApiUrl(baseUrl, endpoint, password) {
|
|
11
64
|
const root = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
|
|
12
65
|
const url = new URL(endpoint.replace(/^\//, ""), root);
|
|
@@ -55,6 +108,31 @@ async function parseJsonBody(response) {
|
|
|
55
108
|
return null;
|
|
56
109
|
}
|
|
57
110
|
}
|
|
111
|
+
function describeCaughtValue(error) {
|
|
112
|
+
return error instanceof Error ? error.message : String(error);
|
|
113
|
+
}
|
|
114
|
+
function sendTransportErrorCode(error) {
|
|
115
|
+
if (error instanceof Error && error.name === "TimeoutError")
|
|
116
|
+
return "timeout";
|
|
117
|
+
if (error instanceof Error && error.name === "AbortError")
|
|
118
|
+
return "abort";
|
|
119
|
+
if (error instanceof TypeError)
|
|
120
|
+
return "socket";
|
|
121
|
+
return "transport_error";
|
|
122
|
+
}
|
|
123
|
+
function emitBlueBubblesSendError(input) {
|
|
124
|
+
(0, runtime_1.emitNervesEvent)({
|
|
125
|
+
level: "error",
|
|
126
|
+
component: "senses",
|
|
127
|
+
event: "senses.bluebubbles_send_error",
|
|
128
|
+
message: "bluebubbles send failed",
|
|
129
|
+
meta: {
|
|
130
|
+
status: input.status,
|
|
131
|
+
errorCode: input.errorCode,
|
|
132
|
+
reason: input.reason,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
}
|
|
58
136
|
function buildRepairUrl(baseUrl, messageGuid, password) {
|
|
59
137
|
const url = buildBlueBubblesApiUrl(baseUrl, `/api/v1/message/${encodeURIComponent(messageGuid)}`, password);
|
|
60
138
|
const parsed = new URL(url);
|
|
@@ -99,6 +177,23 @@ function extractChatQueryRows(payload) {
|
|
|
99
177
|
}
|
|
100
178
|
return data.map((entry) => asRecord(entry)).filter((entry) => entry !== null);
|
|
101
179
|
}
|
|
180
|
+
function extractMessageQueryRows(payload) {
|
|
181
|
+
const record = asRecord(payload);
|
|
182
|
+
const data = asRecord(record?.data);
|
|
183
|
+
const rows = Array.isArray(record?.data) ? record.data
|
|
184
|
+
: Array.isArray(data?.messages) ? data.messages
|
|
185
|
+
: Array.isArray(data?.results) ? data.results
|
|
186
|
+
: Array.isArray(record?.messages) ? record.messages
|
|
187
|
+
: Array.isArray(payload) ? payload
|
|
188
|
+
: [];
|
|
189
|
+
return rows;
|
|
190
|
+
}
|
|
191
|
+
function hasValidRawMessageCausalTimestamp(row) {
|
|
192
|
+
const record = asRecord(row);
|
|
193
|
+
return typeof record?.dateCreated === "number"
|
|
194
|
+
&& Number.isFinite(record.dateCreated)
|
|
195
|
+
&& record.dateCreated > 0;
|
|
196
|
+
}
|
|
102
197
|
async function resolveChatGuidForIdentifier(config, channelConfig, chatIdentifier) {
|
|
103
198
|
const trimmedIdentifier = chatIdentifier.trim();
|
|
104
199
|
if (!trimmedIdentifier)
|
|
@@ -209,21 +304,39 @@ async function resolveChatGuid(chat, config, channelConfig) {
|
|
|
209
304
|
return chat.chatGuid
|
|
210
305
|
?? await resolveChatGuidForIdentifier(config, channelConfig, chat.chatIdentifier ?? "");
|
|
211
306
|
}
|
|
212
|
-
function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(), channelConfig = (0, config_1.getBlueBubblesChannelConfig)()) {
|
|
307
|
+
function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(), channelConfig = (0, config_1.getBlueBubblesChannelConfig)(), hostOptions = {}) {
|
|
308
|
+
// Everything that acts as the signed-in Apple ID first confirms the server
|
|
309
|
+
// runs under the agent's declared macOS host account.
|
|
310
|
+
// Sends recheck every time; quieter actions may reuse a recent confirmation.
|
|
311
|
+
const assertHostAccount = (options = {}) => (0, host_account_verifier_1.verifyBlueBubblesServerAccount)({
|
|
312
|
+
agent: hostOptions.agent ?? (0, identity_1.getAgentName)(),
|
|
313
|
+
hostUsername: "hostUsername" in hostOptions
|
|
314
|
+
? hostOptions.hostUsername
|
|
315
|
+
: (0, identity_1.loadAgentConfig)().senses?.bluebubbles.hostUsername,
|
|
316
|
+
serverUrl: config.serverUrl,
|
|
317
|
+
password: config.password,
|
|
318
|
+
requestTimeoutMs: channelConfig.requestTimeoutMs,
|
|
319
|
+
fresh: options.fresh,
|
|
320
|
+
});
|
|
213
321
|
return {
|
|
214
322
|
async sendText(params) {
|
|
215
323
|
const trimmedText = params.text.trim();
|
|
216
324
|
if (!trimmedText) {
|
|
217
325
|
throw new Error("BlueBubbles send requires non-empty text.");
|
|
218
326
|
}
|
|
327
|
+
await assertHostAccount({ fresh: true });
|
|
219
328
|
const resolvedChatGuid = await resolveChatGuid(params.chat, config, channelConfig);
|
|
220
329
|
if (!resolvedChatGuid) {
|
|
221
|
-
|
|
330
|
+
// Nothing reached the server, so a caller may safely send again once the chat exists.
|
|
331
|
+
throw new BlueBubblesSendError({
|
|
332
|
+
message: "BlueBubbles send currently requires chat.chatGuid from the inbound event.",
|
|
333
|
+
httpStatus: null, errorCode: "chat_unresolved", transportInvoked: false,
|
|
334
|
+
});
|
|
222
335
|
}
|
|
223
336
|
const url = buildBlueBubblesApiUrl(config.serverUrl, "/api/v1/message/text", config.password);
|
|
224
337
|
const body = {
|
|
225
338
|
chatGuid: resolvedChatGuid,
|
|
226
|
-
tempGuid: (0, node_crypto_1.randomUUID)(),
|
|
339
|
+
tempGuid: params.tempGuid?.trim() || (0, node_crypto_1.randomUUID)(),
|
|
227
340
|
message: trimmedText,
|
|
228
341
|
};
|
|
229
342
|
if (params.replyToMessageGuid?.trim()) {
|
|
@@ -240,27 +353,70 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
240
353
|
hasReplyTarget: Boolean(params.replyToMessageGuid?.trim()),
|
|
241
354
|
},
|
|
242
355
|
});
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
356
|
+
const requestTimeoutSignal = AbortSignal.timeout(channelConfig.requestTimeoutMs);
|
|
357
|
+
if (params.beforeTransportInvocation && !params.beforeTransportInvocation()) {
|
|
358
|
+
throw new BlueBubblesSendError({
|
|
359
|
+
message: "BlueBubbles send was not admitted at the transport boundary.",
|
|
360
|
+
httpStatus: null,
|
|
361
|
+
errorCode: "admission_denied",
|
|
362
|
+
transportInvoked: false,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
params.onTransportInvocation?.();
|
|
366
|
+
let response;
|
|
367
|
+
try {
|
|
368
|
+
response = await fetch(url, {
|
|
369
|
+
method: "POST",
|
|
370
|
+
headers: { "Content-Type": "application/json" },
|
|
371
|
+
body: JSON.stringify(body),
|
|
372
|
+
redirect: "manual",
|
|
373
|
+
signal: params.signal
|
|
374
|
+
? AbortSignal.any([params.signal, requestTimeoutSignal])
|
|
375
|
+
: requestTimeoutSignal,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
const errorCode = sendTransportErrorCode(error);
|
|
380
|
+
const reason = describeCaughtValue(error);
|
|
381
|
+
emitBlueBubblesSendError({ status: null, errorCode, reason });
|
|
382
|
+
throw new BlueBubblesSendError({
|
|
383
|
+
message: `BlueBubbles send failed (${errorCode}): ${reason}`,
|
|
384
|
+
httpStatus: null,
|
|
385
|
+
errorCode,
|
|
386
|
+
transportInvoked: true,
|
|
387
|
+
cause: error,
|
|
388
|
+
});
|
|
389
|
+
}
|
|
249
390
|
if (!response.ok) {
|
|
250
391
|
const errorText = await response.text().catch(() => "");
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
message:
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
},
|
|
392
|
+
const reason = errorText || "unknown";
|
|
393
|
+
const errorCode = `http_${response.status}`;
|
|
394
|
+
emitBlueBubblesSendError({ status: response.status, errorCode, reason });
|
|
395
|
+
throw new BlueBubblesSendError({
|
|
396
|
+
message: `BlueBubbles send failed (${response.status}): ${reason}`,
|
|
397
|
+
httpStatus: response.status,
|
|
398
|
+
errorCode,
|
|
399
|
+
transportInvoked: true,
|
|
260
400
|
});
|
|
261
|
-
throw new Error(`BlueBubbles send failed (${response.status}): ${errorText || "unknown"}`);
|
|
262
401
|
}
|
|
263
|
-
const
|
|
402
|
+
const rawPayload = await response.text();
|
|
403
|
+
let payload = null;
|
|
404
|
+
if (rawPayload.trim()) {
|
|
405
|
+
try {
|
|
406
|
+
payload = JSON.parse(rawPayload);
|
|
407
|
+
}
|
|
408
|
+
catch (error) {
|
|
409
|
+
const errorCode = "malformed_response";
|
|
410
|
+
emitBlueBubblesSendError({ status: response.status, errorCode, reason: errorCode });
|
|
411
|
+
throw new BlueBubblesSendError({
|
|
412
|
+
message: `BlueBubbles send failed (${response.status}): malformed response`,
|
|
413
|
+
httpStatus: response.status,
|
|
414
|
+
errorCode,
|
|
415
|
+
transportInvoked: true,
|
|
416
|
+
cause: error,
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
}
|
|
264
420
|
const messageGuid = extractMessageGuid(payload);
|
|
265
421
|
(0, runtime_1.emitNervesEvent)({
|
|
266
422
|
component: "senses",
|
|
@@ -271,9 +427,10 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
271
427
|
messageGuid: messageGuid ?? null,
|
|
272
428
|
},
|
|
273
429
|
});
|
|
274
|
-
return { messageGuid };
|
|
430
|
+
return { messageGuid, chatGuid: resolvedChatGuid };
|
|
275
431
|
},
|
|
276
432
|
async editMessage(params) {
|
|
433
|
+
await assertHostAccount();
|
|
277
434
|
const messageGuid = params.messageGuid.trim();
|
|
278
435
|
const text = params.text.trim();
|
|
279
436
|
if (!messageGuid) {
|
|
@@ -299,30 +456,34 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
299
456
|
throw new Error(`BlueBubbles edit failed (${response.status}): ${errorText || "unknown"}`);
|
|
300
457
|
}
|
|
301
458
|
},
|
|
302
|
-
async setTyping(chat, typing) {
|
|
459
|
+
async setTyping(chat, typing, signal) {
|
|
460
|
+
await assertHostAccount();
|
|
303
461
|
const resolvedChatGuid = await resolveChatGuid(chat, config, channelConfig);
|
|
304
462
|
if (!resolvedChatGuid) {
|
|
305
463
|
return;
|
|
306
464
|
}
|
|
307
465
|
const url = buildBlueBubblesApiUrl(config.serverUrl, `/api/v1/chat/${encodeURIComponent(resolvedChatGuid)}/typing`, config.password);
|
|
466
|
+
const requestTimeoutSignal = AbortSignal.timeout(channelConfig.requestTimeoutMs);
|
|
308
467
|
const response = await fetch(url, {
|
|
309
468
|
method: typing ? "POST" : "DELETE",
|
|
310
|
-
signal: AbortSignal.
|
|
469
|
+
signal: signal ? AbortSignal.any([signal, requestTimeoutSignal]) : requestTimeoutSignal,
|
|
311
470
|
});
|
|
312
471
|
if (!response.ok) {
|
|
313
472
|
const errorText = await response.text().catch(() => "");
|
|
314
473
|
throw new Error(`BlueBubbles typing failed (${response.status}): ${errorText || "unknown"}`);
|
|
315
474
|
}
|
|
316
475
|
},
|
|
317
|
-
async markChatRead(chat) {
|
|
476
|
+
async markChatRead(chat, signal) {
|
|
477
|
+
await assertHostAccount();
|
|
318
478
|
const resolvedChatGuid = await resolveChatGuid(chat, config, channelConfig);
|
|
319
479
|
if (!resolvedChatGuid) {
|
|
320
480
|
return;
|
|
321
481
|
}
|
|
322
482
|
const url = buildBlueBubblesApiUrl(config.serverUrl, `/api/v1/chat/${encodeURIComponent(resolvedChatGuid)}/read`, config.password);
|
|
483
|
+
const requestTimeoutSignal = AbortSignal.timeout(channelConfig.requestTimeoutMs);
|
|
323
484
|
const response = await fetch(url, {
|
|
324
485
|
method: "POST",
|
|
325
|
-
signal: AbortSignal.
|
|
486
|
+
signal: signal ? AbortSignal.any([signal, requestTimeoutSignal]) : requestTimeoutSignal,
|
|
326
487
|
});
|
|
327
488
|
if (!response.ok) {
|
|
328
489
|
const errorText = await response.text().catch(() => "");
|
|
@@ -330,19 +491,19 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
330
491
|
}
|
|
331
492
|
},
|
|
332
493
|
async checkHealth() {
|
|
333
|
-
const url = buildBlueBubblesApiUrl(config.serverUrl, "/api/v1/message/count", config.password);
|
|
334
494
|
(0, runtime_1.emitNervesEvent)({
|
|
335
495
|
component: "senses",
|
|
336
496
|
event: "senses.bluebubbles_healthcheck_start",
|
|
337
497
|
message: "probing bluebubbles upstream health",
|
|
338
498
|
meta: { serverUrl: config.serverUrl },
|
|
339
499
|
});
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
500
|
+
const result = await (0, bluebubbles_health_diagnostics_1.probeBlueBubblesHealth)({
|
|
501
|
+
serverUrl: config.serverUrl,
|
|
502
|
+
password: config.password,
|
|
503
|
+
requestTimeoutMs: channelConfig.requestTimeoutMs,
|
|
504
|
+
fetchImpl: fetch,
|
|
343
505
|
});
|
|
344
|
-
if (!
|
|
345
|
-
const errorText = await response.text().catch(() => "");
|
|
506
|
+
if (!result.ok) {
|
|
346
507
|
(0, runtime_1.emitNervesEvent)({
|
|
347
508
|
level: "warn",
|
|
348
509
|
component: "senses",
|
|
@@ -350,12 +511,15 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
350
511
|
message: "bluebubbles upstream health probe failed",
|
|
351
512
|
meta: {
|
|
352
513
|
serverUrl: config.serverUrl,
|
|
353
|
-
status:
|
|
354
|
-
reason:
|
|
514
|
+
status: result.status,
|
|
515
|
+
reason: result.reason,
|
|
516
|
+
classification: result.classification,
|
|
517
|
+
detail: (0, bluebubbles_health_diagnostics_1.redactBlueBubblesHealthDetailForNerves)(result.detail),
|
|
355
518
|
},
|
|
356
519
|
});
|
|
357
|
-
throw new Error(
|
|
520
|
+
throw new Error(result.detail);
|
|
358
521
|
}
|
|
522
|
+
await assertHostAccount();
|
|
359
523
|
(0, runtime_1.emitNervesEvent)({
|
|
360
524
|
component: "senses",
|
|
361
525
|
event: "senses.bluebubbles_healthcheck_end",
|
|
@@ -363,6 +527,98 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
363
527
|
meta: { serverUrl: config.serverUrl },
|
|
364
528
|
});
|
|
365
529
|
},
|
|
530
|
+
async queryRecentMessagesWithMetadata(params = {}) {
|
|
531
|
+
const limit = Math.max(1, Math.min(100, Math.floor(params.limit ?? 50)));
|
|
532
|
+
const offset = Math.max(0, Math.floor(params.offset ?? 0));
|
|
533
|
+
// Reading messages is gated like sending: never read another account's iMessages.
|
|
534
|
+
await assertHostAccount();
|
|
535
|
+
const url = buildBlueBubblesApiUrl(config.serverUrl, "/api/v1/message/query", config.password);
|
|
536
|
+
(0, runtime_1.emitNervesEvent)({
|
|
537
|
+
component: "senses",
|
|
538
|
+
event: "senses.bluebubbles_query_recent_start",
|
|
539
|
+
message: "querying recent bluebubbles messages",
|
|
540
|
+
meta: { limit, offset },
|
|
541
|
+
});
|
|
542
|
+
const request = {
|
|
543
|
+
limit,
|
|
544
|
+
offset,
|
|
545
|
+
sort: "DESC",
|
|
546
|
+
...(params.chatGuid?.trim() ? { chatGuid: params.chatGuid.trim() } : {}),
|
|
547
|
+
...(params.chatIdentifier?.trim() ? { chatIdentifier: params.chatIdentifier.trim() } : {}),
|
|
548
|
+
...(typeof params.beforeTimestamp === "number" && Number.isFinite(params.beforeTimestamp)
|
|
549
|
+
? { beforeTimestamp: params.beforeTimestamp }
|
|
550
|
+
: {}),
|
|
551
|
+
};
|
|
552
|
+
const { beforeTimestamp, ...wireRequest } = request;
|
|
553
|
+
const body = {
|
|
554
|
+
...wireRequest,
|
|
555
|
+
// BlueBubbles names its inclusive message-date upper bound `before`.
|
|
556
|
+
...(beforeTimestamp !== undefined ? { before: beforeTimestamp } : {}),
|
|
557
|
+
with: ["chats", "attachments", "payloadData", "messageSummaryInfo"],
|
|
558
|
+
};
|
|
559
|
+
const response = await fetch(url, {
|
|
560
|
+
method: "POST",
|
|
561
|
+
headers: { "Content-Type": "application/json" },
|
|
562
|
+
body: JSON.stringify(body),
|
|
563
|
+
signal: AbortSignal.timeout(channelConfig.requestTimeoutMs),
|
|
564
|
+
});
|
|
565
|
+
if (!response.ok) {
|
|
566
|
+
const errorText = await response.text().catch(() => "");
|
|
567
|
+
(0, runtime_1.emitNervesEvent)({
|
|
568
|
+
level: "warn",
|
|
569
|
+
component: "senses",
|
|
570
|
+
event: "senses.bluebubbles_query_recent_error",
|
|
571
|
+
message: "bluebubbles recent message query failed",
|
|
572
|
+
meta: {
|
|
573
|
+
status: response.status,
|
|
574
|
+
reason: errorText || "unknown",
|
|
575
|
+
},
|
|
576
|
+
});
|
|
577
|
+
throw new Error(`BlueBubbles recent message query failed (${response.status}): ${errorText || "unknown"}`);
|
|
578
|
+
}
|
|
579
|
+
const payload = await parseJsonBody(response);
|
|
580
|
+
const rows = extractMessageQueryRows(payload);
|
|
581
|
+
const invalidCausalTimestampRowCount = rows.filter((row) => !hasValidRawMessageCausalTimestamp(row)).length;
|
|
582
|
+
const messages = [];
|
|
583
|
+
for (const row of rows) {
|
|
584
|
+
try {
|
|
585
|
+
messages.push((0, model_1.normalizeBlueBubblesEvent)({ type: "new-message", data: row }));
|
|
586
|
+
}
|
|
587
|
+
catch (error) {
|
|
588
|
+
(0, runtime_1.emitNervesEvent)({
|
|
589
|
+
level: "warn",
|
|
590
|
+
component: "senses",
|
|
591
|
+
event: "senses.bluebubbles_query_recent_skip",
|
|
592
|
+
message: "skipped unusable bluebubbles recent message row",
|
|
593
|
+
meta: {
|
|
594
|
+
reason: describeCaughtValue(error),
|
|
595
|
+
},
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
(0, runtime_1.emitNervesEvent)({
|
|
600
|
+
component: "senses",
|
|
601
|
+
event: "senses.bluebubbles_query_recent_end",
|
|
602
|
+
message: "queried recent bluebubbles messages",
|
|
603
|
+
meta: {
|
|
604
|
+
rows: rows.length,
|
|
605
|
+
normalized: messages.length,
|
|
606
|
+
skipped: rows.length - messages.length,
|
|
607
|
+
},
|
|
608
|
+
});
|
|
609
|
+
return {
|
|
610
|
+
messages,
|
|
611
|
+
rawRowCount: rows.length,
|
|
612
|
+
normalizedRowCount: messages.length,
|
|
613
|
+
skippedRowCount: rows.length - messages.length,
|
|
614
|
+
invalidCausalTimestampRowCount,
|
|
615
|
+
request,
|
|
616
|
+
};
|
|
617
|
+
},
|
|
618
|
+
async listRecentMessages(params = {}) {
|
|
619
|
+
const result = await this.queryRecentMessagesWithMetadata(params);
|
|
620
|
+
return result.messages;
|
|
621
|
+
},
|
|
366
622
|
async repairEvent(event) {
|
|
367
623
|
if (!event.requiresRepair) {
|
|
368
624
|
(0, runtime_1.emitNervesEvent)({
|
|
@@ -377,6 +633,7 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
377
633
|
return event;
|
|
378
634
|
}
|
|
379
635
|
(0, runtime_1.emitNervesEvent)({
|
|
636
|
+
level: "warn",
|
|
380
637
|
component: "senses",
|
|
381
638
|
event: "senses.bluebubbles_repair_start",
|
|
382
639
|
message: "repairing bluebubbles event by guid",
|
|
@@ -386,6 +643,7 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
386
643
|
eventType: event.eventType,
|
|
387
644
|
},
|
|
388
645
|
});
|
|
646
|
+
await assertHostAccount();
|
|
389
647
|
const url = buildRepairUrl(config.serverUrl, event.messageGuid, config.password);
|
|
390
648
|
try {
|
|
391
649
|
const response = await fetch(url, {
|
|
@@ -423,13 +681,13 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
423
681
|
});
|
|
424
682
|
return repaired;
|
|
425
683
|
}
|
|
426
|
-
const normalized = (0,
|
|
684
|
+
const normalized = (0, model_1.normalizeBlueBubblesEvent)({
|
|
427
685
|
type: event.eventType,
|
|
428
686
|
data,
|
|
429
687
|
});
|
|
430
688
|
const recoveredMessage = event.kind === "mutation"
|
|
431
689
|
&& !event.shouldNotifyAgent
|
|
432
|
-
? (0,
|
|
690
|
+
? (0, model_1.normalizeBlueBubblesEvent)({
|
|
433
691
|
type: "new-message",
|
|
434
692
|
data,
|
|
435
693
|
})
|
|
@@ -440,8 +698,42 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
440
698
|
if (hydrated.kind === "message" &&
|
|
441
699
|
hydrated.balloonBundleId !== "com.apple.messages.URLBalloonProvider" &&
|
|
442
700
|
hydrated.attachments.length > 0) {
|
|
443
|
-
const
|
|
444
|
-
|
|
701
|
+
const agentConfig = (0, identity_1.loadAgentConfig)();
|
|
702
|
+
const chatModel = agentConfig.humanFacing.model;
|
|
703
|
+
const chatProvider = agentConfig.humanFacing.provider;
|
|
704
|
+
const vlmDescribe = async (params) => {
|
|
705
|
+
if (chatProvider !== "minimax") {
|
|
706
|
+
throw new Error("VLM fallback requires a minimax credential for this agent — " +
|
|
707
|
+
"configure one or switch to a vision-capable chat model");
|
|
708
|
+
}
|
|
709
|
+
const { readProviderCredentialRecord } = await Promise.resolve().then(() => __importStar(require("../../heart/provider-credentials")));
|
|
710
|
+
const credential = await readProviderCredentialRecord((0, identity_1.getAgentName)(), "minimax");
|
|
711
|
+
const apiKey = credential.ok ? credential.record.credentials.apiKey : undefined;
|
|
712
|
+
if (!apiKey) {
|
|
713
|
+
throw new Error("VLM fallback: minimax API key not found in the agent vault — " +
|
|
714
|
+
"run `ouro auth --agent <agent> --provider minimax`");
|
|
715
|
+
}
|
|
716
|
+
return (0, minimax_vlm_1.minimaxVlmDescribe)({
|
|
717
|
+
apiKey: String(apiKey),
|
|
718
|
+
prompt: params.prompt,
|
|
719
|
+
imageDataUrl: params.imageDataUrl,
|
|
720
|
+
baseURL: minimax_1.MINIMAX_PROVIDER_BASE_URL,
|
|
721
|
+
attachmentGuid: params.attachmentGuid,
|
|
722
|
+
mimeType: params.mimeType,
|
|
723
|
+
chatModel: params.chatModel,
|
|
724
|
+
});
|
|
725
|
+
};
|
|
726
|
+
// VLM prompt context wants the user's raw inbound text — NOT
|
|
727
|
+
// the agent-facing rendering, which now carries the attachment
|
|
728
|
+
// marker after the B2 fix. Pull it from the source payload.
|
|
729
|
+
const rawUserText = typeof data.text === "string"
|
|
730
|
+
? (data.text).trim()
|
|
731
|
+
: "";
|
|
732
|
+
const media = await (0, media_1.hydrateBlueBubblesAttachments)(hydrated.attachments, config, channelConfig, {
|
|
733
|
+
preferAudioInput: providerSupportsAudioInput(chatProvider),
|
|
734
|
+
chatModel,
|
|
735
|
+
vlmDescribe,
|
|
736
|
+
userText: rawUserText,
|
|
445
737
|
});
|
|
446
738
|
const transcriptSuffix = media.transcriptAdditions.map((entry) => `[${entry}]`).join("\n");
|
|
447
739
|
const noticeSuffix = media.notices.map((entry) => `[${entry}]`).join("\n");
|
|
@@ -453,6 +745,7 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
453
745
|
};
|
|
454
746
|
}
|
|
455
747
|
(0, runtime_1.emitNervesEvent)({
|
|
748
|
+
level: "warn",
|
|
456
749
|
component: "senses",
|
|
457
750
|
event: "senses.bluebubbles_repair_end",
|
|
458
751
|
message: "bluebubbles event repaired",
|
|
@@ -480,5 +773,54 @@ function createBlueBubblesClient(config = (0, config_1.getBlueBubblesConfig)(),
|
|
|
480
773
|
return applyRepairNotice(event, `BlueBubbles repair failed: ${reason}`);
|
|
481
774
|
}
|
|
482
775
|
},
|
|
776
|
+
async getMessageText(messageGuid) {
|
|
777
|
+
await assertHostAccount();
|
|
778
|
+
const url = buildRepairUrl(config.serverUrl, messageGuid, config.password);
|
|
779
|
+
try {
|
|
780
|
+
const response = await fetch(url, {
|
|
781
|
+
method: "GET",
|
|
782
|
+
signal: AbortSignal.timeout(channelConfig.requestTimeoutMs),
|
|
783
|
+
});
|
|
784
|
+
if (!response.ok) {
|
|
785
|
+
(0, runtime_1.emitNervesEvent)({
|
|
786
|
+
level: "warn",
|
|
787
|
+
component: "senses",
|
|
788
|
+
event: "senses.bluebubbles_get_message_text_error",
|
|
789
|
+
message: "failed to fetch message text",
|
|
790
|
+
meta: { messageGuid, status: response.status },
|
|
791
|
+
});
|
|
792
|
+
return null;
|
|
793
|
+
}
|
|
794
|
+
const payload = await parseJsonBody(response);
|
|
795
|
+
const data = extractRepairData(payload);
|
|
796
|
+
if (!data || typeof data.text !== "string") {
|
|
797
|
+
(0, runtime_1.emitNervesEvent)({
|
|
798
|
+
level: "warn",
|
|
799
|
+
component: "senses",
|
|
800
|
+
event: "senses.bluebubbles_get_message_text_error",
|
|
801
|
+
message: "message payload missing text field",
|
|
802
|
+
meta: { messageGuid, hasData: !!data, textType: data ? typeof data.text : "n/a" },
|
|
803
|
+
});
|
|
804
|
+
return null;
|
|
805
|
+
}
|
|
806
|
+
(0, runtime_1.emitNervesEvent)({
|
|
807
|
+
component: "senses",
|
|
808
|
+
event: "senses.bluebubbles_get_message_text",
|
|
809
|
+
message: "fetched message text by guid",
|
|
810
|
+
meta: { messageGuid },
|
|
811
|
+
});
|
|
812
|
+
return data.text.trim() || null;
|
|
813
|
+
}
|
|
814
|
+
catch (error) {
|
|
815
|
+
(0, runtime_1.emitNervesEvent)({
|
|
816
|
+
level: "warn",
|
|
817
|
+
component: "senses",
|
|
818
|
+
event: "senses.bluebubbles_get_message_text_error",
|
|
819
|
+
message: "exception fetching message text",
|
|
820
|
+
meta: { messageGuid, reason: error instanceof Error ? error.message : String(error) },
|
|
821
|
+
});
|
|
822
|
+
return null;
|
|
823
|
+
}
|
|
824
|
+
},
|
|
483
825
|
};
|
|
484
826
|
}
|