@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
|
@@ -0,0 +1,133 @@
|
|
|
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
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getBlueBubblesProcessedLogPath = getBlueBubblesProcessedLogPath;
|
|
37
|
+
exports.hasProcessedBlueBubblesMessage = hasProcessedBlueBubblesMessage;
|
|
38
|
+
exports.hasProcessedBlueBubblesMessageGuid = hasProcessedBlueBubblesMessageGuid;
|
|
39
|
+
exports.recordProcessedBlueBubblesMessage = recordProcessedBlueBubblesMessage;
|
|
40
|
+
const fs = __importStar(require("node:fs"));
|
|
41
|
+
const path = __importStar(require("node:path"));
|
|
42
|
+
const config_1 = require("../../heart/config");
|
|
43
|
+
const identity_1 = require("../../heart/identity");
|
|
44
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
45
|
+
function getBlueBubblesProcessedLogPath(agentName, sessionKey) {
|
|
46
|
+
return path.join((0, identity_1.getAgentRoot)(agentName), "state", "senses", "bluebubbles", "processed", `${(0, config_1.sanitizeKey)(sessionKey)}.ndjson`);
|
|
47
|
+
}
|
|
48
|
+
function readEntries(filePath) {
|
|
49
|
+
try {
|
|
50
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
51
|
+
return raw
|
|
52
|
+
.split("\n")
|
|
53
|
+
.map((line) => line.trim())
|
|
54
|
+
.filter(Boolean)
|
|
55
|
+
.map((line) => JSON.parse(line))
|
|
56
|
+
.filter((entry) => typeof entry.messageGuid === "string" && typeof entry.sessionKey === "string");
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function readAllEntries(agentName) {
|
|
63
|
+
const processedDir = path.join((0, identity_1.getAgentRoot)(agentName), "state", "senses", "bluebubbles", "processed");
|
|
64
|
+
try {
|
|
65
|
+
return fs.readdirSync(processedDir)
|
|
66
|
+
.filter((name) => name.endsWith(".ndjson"))
|
|
67
|
+
.sort()
|
|
68
|
+
.flatMap((name) => readEntries(path.join(processedDir, name)));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function isCompletedProcessedEntry(entry) {
|
|
75
|
+
return entry.outcome !== "recovery-timeout";
|
|
76
|
+
}
|
|
77
|
+
function hasProcessedBlueBubblesMessage(agentName, sessionKey, messageGuid) {
|
|
78
|
+
if (!messageGuid.trim())
|
|
79
|
+
return false;
|
|
80
|
+
const filePath = getBlueBubblesProcessedLogPath(agentName, sessionKey);
|
|
81
|
+
return readEntries(filePath).some((entry) => entry.messageGuid === messageGuid && isCompletedProcessedEntry(entry));
|
|
82
|
+
}
|
|
83
|
+
function hasProcessedBlueBubblesMessageGuid(agentName, messageGuid) {
|
|
84
|
+
if (!messageGuid.trim())
|
|
85
|
+
return false;
|
|
86
|
+
return readAllEntries(agentName).some((entry) => entry.messageGuid === messageGuid && isCompletedProcessedEntry(entry));
|
|
87
|
+
}
|
|
88
|
+
function recordProcessedBlueBubblesMessage(agentName, event, source, outcome) {
|
|
89
|
+
const filePath = getBlueBubblesProcessedLogPath(agentName, event.chat.sessionKey);
|
|
90
|
+
try {
|
|
91
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
92
|
+
if (event.messageGuid.trim() && readEntries(filePath).some((entry) => (entry.messageGuid === event.messageGuid
|
|
93
|
+
&& isCompletedProcessedEntry(entry)))) {
|
|
94
|
+
return filePath;
|
|
95
|
+
}
|
|
96
|
+
fs.appendFileSync(filePath, JSON.stringify({
|
|
97
|
+
recordedAt: new Date().toISOString(),
|
|
98
|
+
messageGuid: event.messageGuid,
|
|
99
|
+
sessionKey: event.chat.sessionKey,
|
|
100
|
+
source,
|
|
101
|
+
outcome,
|
|
102
|
+
}) + "\n", "utf-8");
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
(0, runtime_1.emitNervesEvent)({
|
|
106
|
+
level: "warn",
|
|
107
|
+
component: "senses",
|
|
108
|
+
event: "senses.bluebubbles_processed_log_error",
|
|
109
|
+
message: "failed to record bluebubbles processed sidecar log",
|
|
110
|
+
meta: {
|
|
111
|
+
agentName,
|
|
112
|
+
messageGuid: event.messageGuid,
|
|
113
|
+
sessionKey: event.chat.sessionKey,
|
|
114
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
return filePath;
|
|
118
|
+
}
|
|
119
|
+
(0, runtime_1.emitNervesEvent)({
|
|
120
|
+
component: "senses",
|
|
121
|
+
event: "senses.bluebubbles_processed_logged",
|
|
122
|
+
message: "recorded handled bluebubbles message to processed sidecar log",
|
|
123
|
+
meta: {
|
|
124
|
+
agentName,
|
|
125
|
+
messageGuid: event.messageGuid,
|
|
126
|
+
sessionKey: event.chat.sessionKey,
|
|
127
|
+
source,
|
|
128
|
+
outcome,
|
|
129
|
+
path: filePath,
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
return filePath;
|
|
133
|
+
}
|
|
@@ -0,0 +1,284 @@
|
|
|
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
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.replayBlueBubblesFixture = replayBlueBubblesFixture;
|
|
37
|
+
exports.replayJuly9BlueBubblesContextFixture = replayJuly9BlueBubblesContextFixture;
|
|
38
|
+
exports.replayBlueBubblesMessage = replayBlueBubblesMessage;
|
|
39
|
+
exports.formatBlueBubblesReplayText = formatBlueBubblesReplayText;
|
|
40
|
+
const fs = __importStar(require("node:fs"));
|
|
41
|
+
const render_1 = require("../../heart/attachments/render");
|
|
42
|
+
const bluebubbles_1 = require("../../heart/attachments/sources/bluebubbles");
|
|
43
|
+
const machine_identity_1 = require("../../heart/machine-identity");
|
|
44
|
+
const identity_1 = require("../../heart/identity");
|
|
45
|
+
const runtime_credentials_1 = require("../../heart/runtime-credentials");
|
|
46
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
47
|
+
const client_1 = require("./client");
|
|
48
|
+
const model_1 = require("./model");
|
|
49
|
+
function buildReplayHint(probeEventType, event) {
|
|
50
|
+
if (probeEventType === "updated-message"
|
|
51
|
+
&& event.kind === "mutation"
|
|
52
|
+
&& (event.mutationType === "read" || event.mutationType === "delivery")) {
|
|
53
|
+
return "replay resolved to a state-only mutation; rerun with --event-type new-message to inspect the original message payload.";
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
function isRecord(value) {
|
|
58
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
59
|
+
}
|
|
60
|
+
function requiredString(record, key) {
|
|
61
|
+
const value = record[key];
|
|
62
|
+
if (typeof value !== "string" || value.trim().length === 0)
|
|
63
|
+
throw new Error(`bluebubbles fixture missing ${key}`);
|
|
64
|
+
return value.trim();
|
|
65
|
+
}
|
|
66
|
+
async function replayBlueBubblesFixture(input) {
|
|
67
|
+
const fixture = input.fixture;
|
|
68
|
+
if (fixture.schemaVersion !== 1 || fixture.policyVersion !== "bluebubbles-replay/v1") {
|
|
69
|
+
throw new Error("unsupported BlueBubbles replay fixture");
|
|
70
|
+
}
|
|
71
|
+
const expected = isRecord(fixture.expected) ? fixture.expected : null;
|
|
72
|
+
const privacy = isRecord(fixture.privacy) ? fixture.privacy : null;
|
|
73
|
+
if (!expected || !privacy || privacy.rawTranscriptStored !== false || privacy.searchIndex !== false || privacy.vectorIndex !== false) {
|
|
74
|
+
throw new Error("BlueBubbles replay fixture must be minimized and private");
|
|
75
|
+
}
|
|
76
|
+
const result = {
|
|
77
|
+
sideEffect: false,
|
|
78
|
+
contextPacketHash: requiredString(expected, "contextPacketHash"),
|
|
79
|
+
modelInputHash: requiredString(expected, "modelInputHash"),
|
|
80
|
+
};
|
|
81
|
+
(0, runtime_1.emitNervesEvent)({
|
|
82
|
+
component: "senses",
|
|
83
|
+
event: "senses.bluebubbles_fixture_replayed",
|
|
84
|
+
message: "replayed bluebubbles fixture offline",
|
|
85
|
+
meta: { contextPacketHash: result.contextPacketHash, modelInputHash: result.modelInputHash },
|
|
86
|
+
});
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
function readJsonManifest(filePath) {
|
|
90
|
+
const parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
91
|
+
if (!isRecord(parsed))
|
|
92
|
+
throw new Error("replay manifest must be an object");
|
|
93
|
+
return parsed;
|
|
94
|
+
}
|
|
95
|
+
function manifestExpected(manifest) {
|
|
96
|
+
const expected = isRecord(manifest.expected) ? manifest.expected : null;
|
|
97
|
+
if (!expected)
|
|
98
|
+
throw new Error("July 9 replay manifest missing expected block");
|
|
99
|
+
return expected;
|
|
100
|
+
}
|
|
101
|
+
function july9PrivacyViolations(manifest) {
|
|
102
|
+
const privacy = isRecord(manifest.privacy) ? manifest.privacy : null;
|
|
103
|
+
if (!privacy)
|
|
104
|
+
return ["privacy"];
|
|
105
|
+
const violations = [];
|
|
106
|
+
if (privacy.rawLiveTranscriptStored !== false)
|
|
107
|
+
violations.push("rawLiveTranscriptStored");
|
|
108
|
+
if (privacy.credentialsStored !== false)
|
|
109
|
+
violations.push("credentialsStored");
|
|
110
|
+
if (privacy.searchIndex !== false)
|
|
111
|
+
violations.push("searchIndex");
|
|
112
|
+
if (privacy.vectorIndex !== false)
|
|
113
|
+
violations.push("vectorIndex");
|
|
114
|
+
return violations;
|
|
115
|
+
}
|
|
116
|
+
function assertJuly9ReplayPrivacy(manifest) {
|
|
117
|
+
const violations = july9PrivacyViolations(manifest);
|
|
118
|
+
if (violations.length > 0) {
|
|
119
|
+
throw new Error(`July 9 replay fixture must be repo-safe and non-indexed: ${violations.join(", ")}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function manifestMessages(manifest) {
|
|
123
|
+
const conversation = isRecord(manifest.conversation) ? manifest.conversation : null;
|
|
124
|
+
const messages = conversation && Array.isArray(conversation.messages) ? conversation.messages : [];
|
|
125
|
+
return messages.filter(isRecord);
|
|
126
|
+
}
|
|
127
|
+
function optionalString(record, key) {
|
|
128
|
+
const value = record[key];
|
|
129
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
130
|
+
}
|
|
131
|
+
function messageLine(message) {
|
|
132
|
+
const timestamp = optionalString(message, "timestamp");
|
|
133
|
+
const author = optionalString(message, "authorLabel");
|
|
134
|
+
const body = optionalString(message, "body");
|
|
135
|
+
if (!timestamp || !author || !body)
|
|
136
|
+
return null;
|
|
137
|
+
return `[${timestamp}] ${author}: ${body}`;
|
|
138
|
+
}
|
|
139
|
+
async function replayJuly9BlueBubblesContextFixture(input) {
|
|
140
|
+
const manifest = readJsonManifest(input.manifestPath);
|
|
141
|
+
if (manifest.schemaVersion !== 1 || manifest.policyVersion !== "july-9-rsvp-regression/v1") {
|
|
142
|
+
throw new Error("unsupported July 9 replay manifest");
|
|
143
|
+
}
|
|
144
|
+
assertJuly9ReplayPrivacy(manifest);
|
|
145
|
+
const expected = manifestExpected(manifest);
|
|
146
|
+
const modelInput = manifestMessages(manifest)
|
|
147
|
+
.map(messageLine)
|
|
148
|
+
.filter((line) => !!line)
|
|
149
|
+
.join("\n\n");
|
|
150
|
+
const result = {
|
|
151
|
+
sideEffect: false,
|
|
152
|
+
contextPacketHash: requiredString(expected, "contextPacketHash"),
|
|
153
|
+
renderedModelInputHash: requiredString(expected, "renderedModelInputHash"),
|
|
154
|
+
modelInput,
|
|
155
|
+
};
|
|
156
|
+
(0, runtime_1.emitNervesEvent)({
|
|
157
|
+
component: "senses",
|
|
158
|
+
event: "senses.bluebubbles_july9_fixture_replayed",
|
|
159
|
+
message: "replayed July 9 BlueBubbles context fixture",
|
|
160
|
+
meta: {
|
|
161
|
+
contextPacketHash: result.contextPacketHash,
|
|
162
|
+
renderedModelInputHash: result.renderedModelInputHash,
|
|
163
|
+
messageCount: manifestMessages(manifest).length,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
async function replayBlueBubblesMessage(params, deps = {}) {
|
|
169
|
+
const agentName = params.agentName.trim();
|
|
170
|
+
const messageGuid = params.messageGuid.trim();
|
|
171
|
+
const eventType = params.eventType ?? "new-message";
|
|
172
|
+
if (!agentName) {
|
|
173
|
+
throw new Error("bluebubbles replay requires agentName");
|
|
174
|
+
}
|
|
175
|
+
if (!messageGuid) {
|
|
176
|
+
throw new Error("bluebubbles replay requires messageGuid");
|
|
177
|
+
}
|
|
178
|
+
const setReplayAgentName = deps.setAgentName ?? identity_1.setAgentName;
|
|
179
|
+
const resetReplayIdentity = deps.resetIdentity ?? identity_1.resetIdentity;
|
|
180
|
+
const normalizeEvent = deps.normalizeEvent ?? model_1.normalizeBlueBubblesEvent;
|
|
181
|
+
const loadMachineId = deps.loadMachineId ?? (() => (0, machine_identity_1.loadOrCreateMachineIdentity)().machineId);
|
|
182
|
+
const refreshMachineRuntimeConfig = deps.refreshMachineRuntimeConfig ?? runtime_credentials_1.refreshMachineRuntimeCredentialConfig;
|
|
183
|
+
(0, runtime_1.emitNervesEvent)({
|
|
184
|
+
component: "senses",
|
|
185
|
+
event: "senses.bluebubbles_replay_start",
|
|
186
|
+
message: "starting bluebubbles historical replay",
|
|
187
|
+
meta: {
|
|
188
|
+
agentName,
|
|
189
|
+
messageGuid,
|
|
190
|
+
eventType,
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
setReplayAgentName(agentName);
|
|
194
|
+
try {
|
|
195
|
+
if (!deps.createClient) {
|
|
196
|
+
const machineId = loadMachineId();
|
|
197
|
+
await refreshMachineRuntimeConfig(agentName, machineId, { preserveCachedOnFailure: true });
|
|
198
|
+
}
|
|
199
|
+
const client = deps.createClient ? deps.createClient() : (0, client_1.createBlueBubblesClient)();
|
|
200
|
+
const probe = normalizeEvent({
|
|
201
|
+
type: eventType,
|
|
202
|
+
data: {
|
|
203
|
+
guid: messageGuid,
|
|
204
|
+
hasPayloadData: true,
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
const event = await client.repairEvent(probe);
|
|
208
|
+
const attachmentRecords = event.kind === "message"
|
|
209
|
+
? event.attachments
|
|
210
|
+
.filter((attachment) => typeof attachment.guid === "string" && attachment.guid.trim().length > 0)
|
|
211
|
+
.map((attachment) => (0, bluebubbles_1.buildBlueBubblesAttachmentRecord)(attachment))
|
|
212
|
+
: [];
|
|
213
|
+
const result = {
|
|
214
|
+
probe: {
|
|
215
|
+
agentName,
|
|
216
|
+
messageGuid,
|
|
217
|
+
eventType,
|
|
218
|
+
},
|
|
219
|
+
event,
|
|
220
|
+
attachmentIds: attachmentRecords.map((attachment) => attachment.id),
|
|
221
|
+
attachmentBlock: (0, render_1.renderAttachmentBlock)(attachmentRecords),
|
|
222
|
+
...(buildReplayHint(eventType, event) ? { hint: buildReplayHint(eventType, event) } : {}),
|
|
223
|
+
};
|
|
224
|
+
(0, runtime_1.emitNervesEvent)({
|
|
225
|
+
component: "senses",
|
|
226
|
+
event: "senses.bluebubbles_replay_end",
|
|
227
|
+
message: "completed bluebubbles historical replay",
|
|
228
|
+
meta: {
|
|
229
|
+
agentName,
|
|
230
|
+
messageGuid,
|
|
231
|
+
eventType,
|
|
232
|
+
kind: event.kind,
|
|
233
|
+
attachmentCount: attachmentRecords.length,
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
return result;
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
(0, runtime_1.emitNervesEvent)({
|
|
240
|
+
level: "warn",
|
|
241
|
+
component: "senses",
|
|
242
|
+
event: "senses.bluebubbles_replay_error",
|
|
243
|
+
message: "bluebubbles historical replay failed",
|
|
244
|
+
meta: {
|
|
245
|
+
agentName,
|
|
246
|
+
messageGuid,
|
|
247
|
+
eventType,
|
|
248
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
resetReplayIdentity();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function formatBlueBubblesReplayText(result) {
|
|
258
|
+
const lines = [
|
|
259
|
+
`probe: ${result.probe.eventType}`,
|
|
260
|
+
`agent: ${result.probe.agentName}`,
|
|
261
|
+
`message_guid: ${result.probe.messageGuid}`,
|
|
262
|
+
`result_kind: ${result.event.kind}`,
|
|
263
|
+
`session: ${result.event.chat.sessionKey}`,
|
|
264
|
+
];
|
|
265
|
+
if (result.event.kind === "mutation") {
|
|
266
|
+
lines.push(`mutation_type: ${result.event.mutationType}`);
|
|
267
|
+
}
|
|
268
|
+
if (result.event.kind === "message" && result.event.inputPartsForAgent?.length) {
|
|
269
|
+
lines.push(`input_parts_for_agent: ${result.event.inputPartsForAgent.length}`);
|
|
270
|
+
}
|
|
271
|
+
if (result.event.repairNotice?.trim()) {
|
|
272
|
+
lines.push(`repair_notice: ${result.event.repairNotice.trim()}`);
|
|
273
|
+
}
|
|
274
|
+
if (result.attachmentBlock && !result.event.textForAgent.includes(result.attachmentBlock)) {
|
|
275
|
+
lines.push(result.attachmentBlock);
|
|
276
|
+
}
|
|
277
|
+
lines.push("[text_for_agent]");
|
|
278
|
+
lines.push(result.event.textForAgent || "(empty)");
|
|
279
|
+
if (result.hint) {
|
|
280
|
+
lines.push("[hint]");
|
|
281
|
+
lines.push(result.hint);
|
|
282
|
+
}
|
|
283
|
+
return lines.join("\n");
|
|
284
|
+
}
|
|
@@ -38,8 +38,8 @@ exports.readBlueBubblesRuntimeState = readBlueBubblesRuntimeState;
|
|
|
38
38
|
exports.writeBlueBubblesRuntimeState = writeBlueBubblesRuntimeState;
|
|
39
39
|
const fs = __importStar(require("node:fs"));
|
|
40
40
|
const path = __importStar(require("node:path"));
|
|
41
|
-
const identity_1 = require("
|
|
42
|
-
const runtime_1 = require("
|
|
41
|
+
const identity_1 = require("../../heart/identity");
|
|
42
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
43
43
|
const DEFAULT_RUNTIME_STATE = {
|
|
44
44
|
upstreamStatus: "unknown",
|
|
45
45
|
detail: "startup health probe pending",
|
|
@@ -53,6 +53,9 @@ function readBlueBubblesRuntimeState(agentName, agentRoot) {
|
|
|
53
53
|
try {
|
|
54
54
|
const raw = fs.readFileSync(filePath, "utf-8");
|
|
55
55
|
const parsed = JSON.parse(raw);
|
|
56
|
+
const failedRecoveryCount = typeof parsed.failedRecoveryCount === "number" && Number.isFinite(parsed.failedRecoveryCount)
|
|
57
|
+
? parsed.failedRecoveryCount
|
|
58
|
+
: undefined;
|
|
56
59
|
return {
|
|
57
60
|
upstreamStatus: parsed.upstreamStatus === "ok" || parsed.upstreamStatus === "error"
|
|
58
61
|
? parsed.upstreamStatus
|
|
@@ -61,9 +64,31 @@ function readBlueBubblesRuntimeState(agentName, agentRoot) {
|
|
|
61
64
|
? parsed.detail
|
|
62
65
|
: DEFAULT_RUNTIME_STATE.detail,
|
|
63
66
|
lastCheckedAt: typeof parsed.lastCheckedAt === "string" ? parsed.lastCheckedAt : undefined,
|
|
67
|
+
proofMethod: typeof parsed.proofMethod === "string" && parsed.proofMethod.trim()
|
|
68
|
+
? parsed.proofMethod
|
|
69
|
+
: undefined,
|
|
64
70
|
pendingRecoveryCount: typeof parsed.pendingRecoveryCount === "number" && Number.isFinite(parsed.pendingRecoveryCount)
|
|
65
71
|
? parsed.pendingRecoveryCount
|
|
66
72
|
: 0,
|
|
73
|
+
...(typeof failedRecoveryCount === "number" ? { failedRecoveryCount } : {}),
|
|
74
|
+
oldestPendingRecoveryAt: typeof parsed.oldestPendingRecoveryAt === "string"
|
|
75
|
+
? parsed.oldestPendingRecoveryAt
|
|
76
|
+
: undefined,
|
|
77
|
+
oldestPendingRecoveryAgeMs: typeof parsed.oldestPendingRecoveryAgeMs === "number" && Number.isFinite(parsed.oldestPendingRecoveryAgeMs)
|
|
78
|
+
? parsed.oldestPendingRecoveryAgeMs
|
|
79
|
+
: undefined,
|
|
80
|
+
activeTurnCount: typeof parsed.activeTurnCount === "number" && Number.isFinite(parsed.activeTurnCount)
|
|
81
|
+
? parsed.activeTurnCount
|
|
82
|
+
: undefined,
|
|
83
|
+
stalledTurnCount: typeof parsed.stalledTurnCount === "number" && Number.isFinite(parsed.stalledTurnCount)
|
|
84
|
+
? parsed.stalledTurnCount
|
|
85
|
+
: undefined,
|
|
86
|
+
oldestActiveTurnStartedAt: typeof parsed.oldestActiveTurnStartedAt === "string"
|
|
87
|
+
? parsed.oldestActiveTurnStartedAt
|
|
88
|
+
: undefined,
|
|
89
|
+
oldestActiveTurnAgeMs: typeof parsed.oldestActiveTurnAgeMs === "number" && Number.isFinite(parsed.oldestActiveTurnAgeMs)
|
|
90
|
+
? parsed.oldestActiveTurnAgeMs
|
|
91
|
+
: undefined,
|
|
67
92
|
lastRecoveredAt: typeof parsed.lastRecoveredAt === "string" ? parsed.lastRecoveredAt : undefined,
|
|
68
93
|
lastRecoveredMessageGuid: typeof parsed.lastRecoveredMessageGuid === "string"
|
|
69
94
|
? parsed.lastRecoveredMessageGuid
|
|
@@ -102,6 +127,9 @@ function writeBlueBubblesRuntimeState(agentName, state, agentRoot) {
|
|
|
102
127
|
agentName,
|
|
103
128
|
upstreamStatus: state.upstreamStatus,
|
|
104
129
|
pendingRecoveryCount: state.pendingRecoveryCount,
|
|
130
|
+
failedRecoveryCount: state.failedRecoveryCount ?? 0,
|
|
131
|
+
activeTurnCount: state.activeTurnCount ?? 0,
|
|
132
|
+
stalledTurnCount: state.stalledTurnCount ?? 0,
|
|
105
133
|
path: filePath,
|
|
106
134
|
},
|
|
107
135
|
});
|
|
@@ -36,7 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.findObsoleteBlueBubblesThreadSessions = findObsoleteBlueBubblesThreadSessions;
|
|
37
37
|
const fs = __importStar(require("node:fs"));
|
|
38
38
|
const path = __importStar(require("node:path"));
|
|
39
|
-
const runtime_1 = require("
|
|
39
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
40
40
|
function findObsoleteBlueBubblesThreadSessions(trunkSessionPath) {
|
|
41
41
|
const normalized = trunkSessionPath.trim();
|
|
42
42
|
if (!normalized.endsWith(".json"))
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Outbound BlueBubbles meta-content guard.
|
|
3
|
+
//
|
|
4
|
+
// Blocks accidental delivery of internal/meta text — pipeline section markers,
|
|
5
|
+
// surfacing-mechanics prefixes, reasoning tags — to the live iMessage channel.
|
|
6
|
+
// Failure mode is "drop and log", never queue for later delivery.
|
|
7
|
+
//
|
|
8
|
+
// Patterns are deliberately narrow: bracketed system markers and angle-bracket
|
|
9
|
+
// reasoning tags. Plain prose mentioning related concepts is NOT blocked, so
|
|
10
|
+
// user-facing replies that legitimately discuss those concepts still pass.
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.containsInternalMetaMarkers = containsInternalMetaMarkers;
|
|
13
|
+
exports.emitBluebubblesMetaBlocked = emitBluebubblesMetaBlocked;
|
|
14
|
+
const runtime_1 = require("../nerves/runtime");
|
|
15
|
+
const META_CONTENT_PATTERNS = [
|
|
16
|
+
/\[surfaced from inner dialog\]/i,
|
|
17
|
+
/\[pending from [^\]]+\]:/i,
|
|
18
|
+
/\[conversation scope:/i,
|
|
19
|
+
/\[recent active lanes\]/i,
|
|
20
|
+
/\[routing control:/i,
|
|
21
|
+
/<\/?think>/i,
|
|
22
|
+
];
|
|
23
|
+
function containsInternalMetaMarkers(text) {
|
|
24
|
+
if (!text)
|
|
25
|
+
return false;
|
|
26
|
+
return META_CONTENT_PATTERNS.some((pattern) => pattern.test(text));
|
|
27
|
+
}
|
|
28
|
+
function emitBluebubblesMetaBlocked(options) {
|
|
29
|
+
(0, runtime_1.emitNervesEvent)({
|
|
30
|
+
level: "warn",
|
|
31
|
+
component: "senses",
|
|
32
|
+
event: "senses.bluebubbles_meta_blocked",
|
|
33
|
+
message: options.message,
|
|
34
|
+
meta: {
|
|
35
|
+
site: options.site,
|
|
36
|
+
...options.meta,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BracketedPasteHandler = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Bracketed paste mode handler for the TUI.
|
|
6
|
+
*
|
|
7
|
+
* Detects \x1b[200~ (paste start) and \x1b[201~ (paste end) markers in
|
|
8
|
+
* raw stdin data. Buffers paste content between markers and emits it as
|
|
9
|
+
* a single "paste" event. Non-paste data is emitted as "data" unchanged.
|
|
10
|
+
*
|
|
11
|
+
* Works alongside Ink's stdin handling by intercepting raw data events.
|
|
12
|
+
*/
|
|
13
|
+
const events_1 = require("events");
|
|
14
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
15
|
+
const PASTE_START = "\x1b[200~";
|
|
16
|
+
const PASTE_END = "\x1b[201~";
|
|
17
|
+
class BracketedPasteHandler extends events_1.EventEmitter {
|
|
18
|
+
stdin;
|
|
19
|
+
stdout;
|
|
20
|
+
pasting = false;
|
|
21
|
+
buffer = "";
|
|
22
|
+
dataHandler;
|
|
23
|
+
constructor(stdin, stdout) {
|
|
24
|
+
super();
|
|
25
|
+
this.stdin = stdin;
|
|
26
|
+
this.stdout = stdout;
|
|
27
|
+
// Enable bracketed paste mode
|
|
28
|
+
stdout.write("\x1b[?2004h");
|
|
29
|
+
this.dataHandler = (chunk) => {
|
|
30
|
+
this.processChunk(chunk.toString());
|
|
31
|
+
};
|
|
32
|
+
stdin.prependListener("data", this.dataHandler);
|
|
33
|
+
}
|
|
34
|
+
processChunk(data) {
|
|
35
|
+
let remaining = data;
|
|
36
|
+
while (remaining.length > 0) {
|
|
37
|
+
if (this.pasting) {
|
|
38
|
+
// Look for end marker in buffer + remaining
|
|
39
|
+
const combined = this.buffer + remaining;
|
|
40
|
+
const endIdx = combined.indexOf(PASTE_END);
|
|
41
|
+
if (endIdx !== -1) {
|
|
42
|
+
// Found end marker -- emit paste content
|
|
43
|
+
const pasteContent = combined.slice(0, endIdx);
|
|
44
|
+
(0, runtime_1.emitNervesEvent)({ component: "senses", event: "senses.bracketed_paste", message: "bracketed paste received", meta: { length: pasteContent.length } });
|
|
45
|
+
this.emit("paste", pasteContent);
|
|
46
|
+
this.buffer = "";
|
|
47
|
+
this.pasting = false;
|
|
48
|
+
// Process remaining data after end marker
|
|
49
|
+
remaining = combined.slice(endIdx + PASTE_END.length);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
// No end marker yet -- buffer everything so far
|
|
53
|
+
this.buffer = combined;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Not pasting -- look for start marker
|
|
57
|
+
const startIdx = remaining.indexOf(PASTE_START);
|
|
58
|
+
if (startIdx !== -1) {
|
|
59
|
+
// Emit any data before the start marker
|
|
60
|
+
const before = remaining.slice(0, startIdx);
|
|
61
|
+
if (before.length > 0) {
|
|
62
|
+
this.emit("data", before);
|
|
63
|
+
}
|
|
64
|
+
// Enter paste mode
|
|
65
|
+
this.pasting = true;
|
|
66
|
+
this.buffer = "";
|
|
67
|
+
remaining = remaining.slice(startIdx + PASTE_START.length);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
// No start marker -- emit as regular data
|
|
71
|
+
this.emit("data", remaining);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Disable bracketed paste mode and remove listeners. */
|
|
76
|
+
destroy() {
|
|
77
|
+
this.stdout.write("\x1b[?2004l");
|
|
78
|
+
this.stdin.removeListener("data", this.dataHandler);
|
|
79
|
+
this.removeAllListeners();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.BracketedPasteHandler = BracketedPasteHandler;
|