@ouro.bot/cli 0.1.0-alpha.69 → 0.1.0-alpha.690
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 +4392 -14
- package/dist/a2a/card.js +57 -0
- package/dist/a2a/client.js +180 -0
- package/dist/a2a/config.js +50 -0
- package/dist/a2a/delegation-stores.js +56 -0
- package/dist/a2a/did-resolution.js +93 -0
- package/dist/a2a/identity.js +170 -0
- package/dist/a2a/inbound-share.js +107 -0
- package/dist/a2a/mission-result-wire.js +196 -0
- package/dist/a2a/onboarding.js +115 -0
- package/dist/a2a/pin-store.js +132 -0
- package/dist/a2a/seen-ledger.js +120 -0
- package/dist/a2a/server.js +604 -0
- package/dist/a2a/task-store.js +69 -0
- package/dist/a2a/transport.js +45 -0
- package/dist/a2a/types.js +3 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +144 -0
- package/dist/arc/episodes.js +118 -0
- package/dist/arc/evolution.js +490 -0
- package/dist/arc/flight-recorder.js +810 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +326 -0
- package/dist/arc/packets.js +288 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/commerce/store.js +755 -0
- package/dist/commerce/types.js +3 -0
- package/dist/heart/active-work.js +867 -43
- package/dist/heart/agent-entry.js +160 -3
- package/dist/heart/attachments/image-normalize.js +194 -0
- package/dist/heart/attachments/materialize.js +97 -0
- package/dist/heart/attachments/originals.js +88 -0
- package/dist/heart/attachments/render.js +29 -0
- package/dist/heart/attachments/sources/bluebubbles.js +156 -0
- package/dist/heart/attachments/sources/cli-local-file.js +78 -0
- package/dist/heart/attachments/sources/index.js +16 -0
- package/dist/heart/attachments/store.js +103 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +479 -0
- package/dist/heart/awaiting/await-alert.js +146 -0
- package/dist/heart/awaiting/await-expiry.js +108 -0
- package/dist/heart/awaiting/await-loader.js +91 -0
- package/dist/heart/awaiting/await-parser.js +141 -0
- package/dist/heart/awaiting/await-runtime-state.js +100 -0
- package/dist/heart/awaiting/await-scheduler.js +378 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bridges/manager.js +137 -17
- package/dist/heart/bridges/store.js +14 -2
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +135 -0
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +122 -119
- package/dist/heart/context-loss-gauntlet.js +354 -0
- package/dist/heart/context-loss-sentinel.js +946 -0
- package/dist/heart/core.js +1297 -269
- package/dist/heart/cross-chat-delivery.js +8 -22
- package/dist/heart/daemon/agent-config-check.js +451 -0
- package/dist/heart/daemon/agent-discovery.js +185 -3
- package/dist/heart/daemon/agent-service.js +523 -0
- package/dist/heart/daemon/agentic-repair.js +547 -0
- package/dist/heart/daemon/await-private-wake.js +59 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +70 -0
- package/dist/heart/daemon/cli-defaults.js +780 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +8100 -0
- package/dist/heart/daemon/cli-help.js +601 -0
- package/dist/heart/daemon/cli-parse.js +1995 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +770 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/daemon-cli.js +29 -1814
- package/dist/heart/daemon/daemon-entry.js +668 -6
- package/dist/heart/daemon/daemon-health.js +176 -0
- package/dist/heart/daemon/daemon-rollup.js +57 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +1222 -84
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +873 -0
- package/dist/heart/daemon/habit-private-wake.js +56 -0
- package/dist/heart/daemon/health-monitor.js +131 -3
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +78 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +79 -10
- package/dist/heart/daemon/logs-prune.js +110 -0
- package/dist/heart/daemon/mcp-canary.js +297 -0
- package/dist/heart/daemon/message-router.js +45 -5
- package/dist/heart/daemon/migrate-to-desk.js +848 -0
- package/dist/heart/daemon/os-cron-deps.js +135 -0
- package/dist/heart/daemon/os-cron.js +14 -12
- package/dist/heart/daemon/ouro-bot-entry.js +4 -2
- package/dist/heart/daemon/ouro-entry.js +3 -1
- package/dist/heart/daemon/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +519 -40
- package/dist/heart/daemon/provider-discovery.js +137 -0
- package/dist/heart/daemon/provider-ping-progress.js +83 -0
- package/dist/heart/daemon/pulse.js +511 -0
- package/dist/heart/daemon/readiness-repair.js +365 -0
- package/dist/heart/daemon/run-hooks.js +2 -0
- package/dist/heart/daemon/runtime-logging.js +41 -14
- package/dist/heart/daemon/runtime-metadata.js +2 -30
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +583 -43
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +1 -1
- package/dist/heart/daemon/socket-client.js +171 -12
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +338 -0
- package/dist/heart/daemon/task-scheduler.js +117 -39
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +255 -43
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -4
- package/dist/heart/external-events/router.js +121 -0
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +211 -0
- package/dist/heart/habits/habit-runtime-state.js +114 -0
- package/dist/heart/habits/habit-scheduler.js +411 -0
- package/dist/heart/habits/habit-session-summary.js +318 -0
- package/dist/heart/habits/habit-session.js +618 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +51 -57
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
- package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
- package/dist/heart/identity.js +174 -58
- package/dist/heart/kept-notes.js +289 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +161 -0
- package/dist/heart/mail-import-discovery.js +353 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +96 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +375 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +37 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +197 -0
- package/dist/heart/mailbox/readers/agent-machine.js +428 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
- package/dist/heart/mailbox/readers/mail.js +375 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +815 -0
- package/dist/heart/mailbox/readers/sessions.js +232 -0
- package/dist/heart/mailbox/readers/shared.js +111 -0
- package/dist/heart/mcp/mcp-server.js +696 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +19 -0
- package/dist/heart/orientation-frame.js +217 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/primitives.js +1 -1
- package/dist/heart/private-runtime/decision-renderer.js +156 -0
- package/dist/heart/private-runtime/index.js +18 -0
- package/dist/heart/private-runtime/ledger.js +218 -0
- package/dist/heart/private-runtime/policy.js +214 -0
- package/dist/heart/private-runtime/types.js +2 -0
- package/dist/heart/progress-story.js +1 -1
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +273 -0
- package/dist/heart/provider-credentials.js +425 -0
- package/dist/heart/provider-failover.js +311 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -0
- package/dist/heart/provider-readiness-cache.js +119 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +139 -52
- package/dist/heart/providers/azure.js +23 -11
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +145 -0
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +26 -8
- package/dist/heart/providers/openai-codex-token.js +349 -0
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +389 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +17 -4
- package/dist/heart/session-activity.js +90 -24
- package/dist/heart/session-events.js +1133 -0
- package/dist/heart/session-playback-cli-main.js +5 -0
- package/dist/heart/session-playback-cli.js +36 -0
- package/dist/heart/session-playback.js +231 -0
- package/dist/heart/session-stats-cli-main.js +5 -0
- package/dist/heart/session-stats.js +182 -0
- package/dist/heart/session-transcript.js +133 -0
- package/dist/heart/start-of-turn-packet.js +365 -0
- package/dist/heart/streaming.js +44 -27
- package/dist/heart/structured-output.js +196 -0
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync.js +449 -0
- package/dist/heart/target-resolution.js +11 -7
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/timeouts.js +101 -0
- package/dist/heart/tool-activity-callbacks.js +59 -0
- package/dist/heart/tool-description.js +155 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +450 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
- package/dist/heart/versioning/ouro-path-installer.js +426 -0
- package/dist/heart/versioning/ouro-version-manager.js +409 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/versioning/update-hooks.js +154 -0
- package/dist/heart/work-card.js +390 -0
- package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
- package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
- package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
- package/dist/mailbox-ui/index.html +16 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +715 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/core.js +788 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +568 -0
- package/dist/mailroom/mbox-import.js +393 -0
- package/dist/mailroom/migration.js +164 -0
- package/dist/mailroom/outbound.js +380 -0
- package/dist/mailroom/policy.js +263 -0
- package/dist/mailroom/reader.js +233 -0
- package/dist/mailroom/search-cache.js +334 -0
- package/dist/mailroom/search-relevance.js +319 -0
- package/dist/mailroom/smtp-ingress.js +176 -0
- package/dist/mailroom/source-state.js +176 -0
- package/dist/mailroom/thread.js +109 -0
- package/dist/mailroom/travel-extract.js +89 -0
- package/dist/mind/bundle-manifest.js +24 -2
- package/dist/mind/context.js +250 -101
- package/dist/mind/desk-section.js +362 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +68 -77
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/{associative-recall.js → note-search.js} +47 -58
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +13 -8
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1009 -169
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/record-paths.js +312 -0
- package/dist/mind/scrutiny.js +173 -0
- package/dist/nerves/cli-logging.js +7 -1
- package/dist/nerves/coverage/audit-rules.js +15 -6
- package/dist/nerves/coverage/audit.js +28 -2
- package/dist/nerves/coverage/cli.js +1 -1
- package/dist/nerves/coverage/contract.js +5 -5
- package/dist/nerves/coverage/file-completeness.js +139 -5
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +224 -4
- package/dist/nerves/observation.js +20 -0
- package/dist/nerves/redact.js +79 -0
- package/dist/nerves/review/cli-main.js +5 -0
- package/dist/nerves/review/cli.js +156 -0
- package/dist/nerves/review/core.js +152 -0
- package/dist/nerves/runtime.js +5 -1
- package/dist/repertoire/ado-client.js +15 -56
- package/dist/repertoire/ado-semantic.js +16 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +1042 -0
- package/dist/repertoire/bundle-templates.js +71 -0
- package/dist/repertoire/bw-installer.js +180 -0
- package/dist/repertoire/coding/codex-jsonl.js +64 -0
- package/dist/repertoire/coding/context-pack.js +331 -0
- package/dist/repertoire/coding/feedback.js +218 -30
- package/dist/repertoire/coding/index.js +15 -3
- package/dist/repertoire/coding/manager.js +166 -10
- package/dist/repertoire/coding/spawner.js +58 -11
- package/dist/repertoire/coding/tools.js +242 -14
- package/dist/repertoire/coding/workbench-client.js +272 -0
- package/dist/repertoire/coding/workbench-manager.js +346 -0
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +178 -0
- package/dist/repertoire/desk/classifier.js +362 -0
- package/dist/repertoire/duffel-client.js +185 -0
- package/dist/repertoire/github-client.js +14 -55
- package/dist/repertoire/graph-client.js +11 -52
- package/dist/repertoire/guardrails.js +159 -27
- package/dist/repertoire/mcp-client.js +44 -3
- package/dist/repertoire/mcp-manager.js +259 -20
- package/dist/repertoire/mcp-tools.js +83 -0
- package/dist/repertoire/plugin-mcp.js +175 -0
- package/dist/repertoire/plugins.js +253 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +48 -4
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-a2a.js +699 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-awaiting.js +372 -0
- package/dist/repertoire/tools-base.js +63 -1095
- package/dist/repertoire/tools-bluebubbles.js +2 -0
- package/dist/repertoire/tools-bridge.js +144 -0
- package/dist/repertoire/tools-bundle.js +993 -0
- package/dist/repertoire/tools-commerce.js +253 -0
- package/dist/repertoire/tools-config.js +186 -0
- package/dist/repertoire/tools-continuity.js +252 -0
- package/dist/repertoire/tools-credential.js +383 -0
- package/dist/repertoire/tools-evolution.js +527 -0
- package/dist/repertoire/tools-files.js +344 -0
- package/dist/repertoire/tools-flight.js +290 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-github.js +3 -8
- package/dist/repertoire/tools-mail.js +1975 -0
- package/dist/repertoire/tools-notes.js +459 -0
- package/dist/repertoire/tools-obligations.js +143 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +482 -0
- package/dist/repertoire/tools-runtime.js +150 -0
- package/dist/repertoire/tools-session.js +881 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +355 -0
- package/dist/repertoire/tools-teams.js +12 -39
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +982 -0
- package/dist/repertoire/tools-user-profile.js +146 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools-voice.js +145 -0
- package/dist/repertoire/tools.js +250 -80
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +594 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/a2a-entry.js +115 -0
- package/dist/senses/attention-queue.js +186 -0
- package/dist/senses/await-turn-message.js +58 -0
- package/dist/senses/bluebubbles/active-turns.js +216 -0
- package/dist/senses/bluebubbles/attachment-cache.js +53 -0
- package/dist/senses/bluebubbles/attachment-download.js +137 -0
- package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
- package/dist/senses/bluebubbles/entry.js +77 -0
- package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
- package/dist/senses/bluebubbles/index.js +2732 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/replay.js +137 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- package/dist/senses/bluebubbles-meta-guard.js +39 -0
- package/dist/senses/cli/bracketed-paste.js +82 -0
- package/dist/senses/cli/image-paste.js +287 -0
- package/dist/senses/cli/image-ref-navigation.js +75 -0
- package/dist/senses/cli/ink-app.js +156 -0
- package/dist/senses/cli/inline-diff.js +64 -0
- package/dist/senses/cli/input-keys.js +174 -0
- package/dist/senses/cli/kill-ring.js +86 -0
- package/dist/senses/cli/message-list.js +51 -0
- package/dist/senses/cli/ouro-tui.js +607 -0
- package/dist/senses/cli/spinner-imperative.js +135 -0
- package/dist/senses/cli/spinner.js +101 -0
- package/dist/senses/cli/status-line.js +60 -0
- package/dist/senses/cli/streaming-markdown.js +526 -0
- package/dist/senses/cli/tool-display.js +85 -0
- package/dist/senses/cli/tool-render.js +85 -0
- package/dist/senses/cli/tui-store.js +240 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +60 -8
- package/dist/senses/cli-layout.js +100 -0
- package/dist/senses/cli.js +521 -214
- package/dist/senses/commands.js +66 -3
- package/dist/senses/habit-turn-message.js +160 -0
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +395 -0
- package/dist/senses/pipeline.js +873 -179
- package/dist/senses/private-runtime-worker.js +584 -0
- package/dist/senses/private-runtime.js +1145 -0
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +416 -0
- package/dist/senses/surface-tool.js +109 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +397 -112
- package/dist/senses/trust-gate.js +104 -9
- package/dist/senses/voice/audio-playback.js +237 -0
- package/dist/senses/voice/audio-routing.js +119 -0
- package/dist/senses/voice/elevenlabs.js +202 -0
- package/dist/senses/voice/floor-control.js +431 -0
- package/dist/senses/voice/floor-controller.js +115 -0
- package/dist/senses/voice/golden-path.js +116 -0
- package/dist/senses/voice/index.js +29 -0
- package/dist/senses/voice/meeting.js +113 -0
- package/dist/senses/voice/outbound.js +190 -0
- package/dist/senses/voice/phone.js +33 -0
- package/dist/senses/voice/playback.js +139 -0
- package/dist/senses/voice/realtime-eval.js +496 -0
- package/dist/senses/voice/realtime-trace.js +531 -0
- package/dist/senses/voice/transcript.js +70 -0
- package/dist/senses/voice/turn.js +191 -0
- package/dist/senses/voice/twilio-phone-runtime.js +807 -0
- package/dist/senses/voice/twilio-phone.js +5077 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +81 -0
- package/dist/senses/voice-realtime-eval-command.js +99 -0
- package/dist/senses/voice-realtime-eval-entry.js +21 -0
- package/dist/senses/voice-twilio-entry.js +87 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +265 -0
- package/dist/util/frontmatter.js +69 -0
- package/package.json +57 -12
- package/skills/agent-commerce.md +113 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +99 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/auth-flow.js +0 -351
- package/dist/heart/daemon/ouro-path-installer.js +0 -178
- package/dist/heart/daemon/update-hooks.js +0 -138
- package/dist/heart/safe-workspace.js +0 -228
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/friends/channel.js +0 -84
- package/dist/mind/friends/group-context.js +0 -144
- package/dist/mind/friends/resolver.js +0 -84
- package/dist/mind/friends/store-file.js +0 -190
- package/dist/mind/friends/store.js +0 -4
- package/dist/mind/friends/tokens.js +0 -26
- package/dist/mind/friends/trust-explanation.js +0 -74
- package/dist/mind/friends/types.js +0 -29
- package/dist/repertoire/tasks/board.js +0 -134
- package/dist/repertoire/tasks/index.js +0 -224
- package/dist/repertoire/tasks/lifecycle.js +0 -80
- package/dist/repertoire/tasks/middleware.js +0 -65
- package/dist/repertoire/tasks/parser.js +0 -173
- package/dist/repertoire/tasks/scanner.js +0 -132
- package/dist/repertoire/tasks/transitions.js +0 -144
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1180
- package/dist/senses/debug-activity.js +0 -148
- package/dist/senses/inner-dialog-worker.js +0 -90
- package/dist/senses/inner-dialog.js +0 -480
- package/subagents/README.md +0 -7
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
- /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
- /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
- /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
- /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
- /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Formats
|
|
2
|
+
// Formats private-runtime session turns for human consumption.
|
|
3
3
|
// Used by `ouro thoughts` CLI command to show what the agent has been thinking.
|
|
4
4
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
5
|
if (k2 === undefined) k2 = k;
|
|
@@ -36,16 +36,19 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
})();
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
exports.formatSurfacedValue = formatSurfacedValue;
|
|
39
|
-
exports.
|
|
40
|
-
exports.
|
|
39
|
+
exports.derivePrivateRuntimeStatus = derivePrivateRuntimeStatus;
|
|
40
|
+
exports.deriveInnerJob = deriveInnerJob;
|
|
41
|
+
exports.formatPrivateRuntimeStatus = formatPrivateRuntimeStatus;
|
|
41
42
|
exports.extractThoughtResponseFromMessages = extractThoughtResponseFromMessages;
|
|
42
|
-
exports.
|
|
43
|
+
exports.parsePrivateRuntimeSession = parsePrivateRuntimeSession;
|
|
43
44
|
exports.formatThoughtTurns = formatThoughtTurns;
|
|
44
|
-
exports.
|
|
45
|
-
exports.
|
|
45
|
+
exports.getPrivateRuntimeSessionPath = getPrivateRuntimeSessionPath;
|
|
46
|
+
exports.readPrivateRuntimeStatus = readPrivateRuntimeStatus;
|
|
47
|
+
exports.readPrivateRuntimeRawData = readPrivateRuntimeRawData;
|
|
46
48
|
exports.followThoughts = followThoughts;
|
|
47
49
|
const fs = __importStar(require("fs"));
|
|
48
50
|
const path = __importStar(require("path"));
|
|
51
|
+
const session_events_1 = require("../session-events");
|
|
49
52
|
const runtime_1 = require("../../nerves/runtime");
|
|
50
53
|
function contentToText(content) {
|
|
51
54
|
if (typeof content === "string")
|
|
@@ -91,7 +94,7 @@ function extractToolNames(messages) {
|
|
|
91
94
|
if (msg.role === "assistant" && Array.isArray(msg.tool_calls)) {
|
|
92
95
|
for (const tc of msg.tool_calls) {
|
|
93
96
|
const toolFunction = extractToolFunction(tc);
|
|
94
|
-
if (toolFunction?.name && toolFunction.name !== "
|
|
97
|
+
if (toolFunction?.name && toolFunction.name !== "settle")
|
|
95
98
|
names.push(toolFunction.name);
|
|
96
99
|
}
|
|
97
100
|
}
|
|
@@ -149,14 +152,30 @@ function formatSurfacedValue(text, maxLength = 120) {
|
|
|
149
152
|
return `"${firstLine}"`;
|
|
150
153
|
return `"${firstLine.slice(0, maxLength - 3)}..."`;
|
|
151
154
|
}
|
|
152
|
-
function
|
|
155
|
+
function extractEnrichedFields(pendingMessages) {
|
|
156
|
+
const delegated = pendingMessages.find((msg) => msg.delegatedFrom);
|
|
157
|
+
if (!delegated?.delegatedFrom)
|
|
158
|
+
return {};
|
|
159
|
+
const snippet = delegated.content.length > 80 ? delegated.content.slice(0, 77) + "..." : delegated.content;
|
|
160
|
+
return {
|
|
161
|
+
origin: {
|
|
162
|
+
friendId: delegated.delegatedFrom.friendId,
|
|
163
|
+
channel: delegated.delegatedFrom.channel,
|
|
164
|
+
key: delegated.delegatedFrom.key,
|
|
165
|
+
},
|
|
166
|
+
contentSnippet: snippet,
|
|
167
|
+
...(delegated.obligationStatus === "pending" ? { obligationPending: true } : {}),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function derivePrivateRuntimeStatus(pendingMessages, turns, runtimeState) {
|
|
153
171
|
if (runtimeState?.status === "running") {
|
|
154
172
|
if (pendingMessages.length > 0) {
|
|
155
173
|
return {
|
|
156
|
-
queue: "queued to
|
|
174
|
+
queue: "queued to private runtime",
|
|
157
175
|
wake: "queued behind active turn",
|
|
158
176
|
processing: "pending",
|
|
159
177
|
surfaced: "nothing yet",
|
|
178
|
+
...extractEnrichedFields(pendingMessages),
|
|
160
179
|
};
|
|
161
180
|
}
|
|
162
181
|
return {
|
|
@@ -168,10 +187,11 @@ function deriveInnerDialogStatus(pendingMessages, turns, runtimeState) {
|
|
|
168
187
|
}
|
|
169
188
|
if (pendingMessages.length > 0) {
|
|
170
189
|
return {
|
|
171
|
-
queue: "queued to
|
|
172
|
-
wake: "awaiting
|
|
190
|
+
queue: "queued to private runtime",
|
|
191
|
+
wake: "awaiting private-runtime turn",
|
|
173
192
|
processing: "pending",
|
|
174
193
|
surfaced: "nothing yet",
|
|
194
|
+
...extractEnrichedFields(pendingMessages),
|
|
175
195
|
};
|
|
176
196
|
}
|
|
177
197
|
const latestProcessedPendingTurn = [...turns]
|
|
@@ -192,23 +212,125 @@ function deriveInnerDialogStatus(pendingMessages, turns, runtimeState) {
|
|
|
192
212
|
surfaced: formatSurfacedValue(latestProcessedPendingTurn.response),
|
|
193
213
|
};
|
|
194
214
|
}
|
|
195
|
-
function
|
|
196
|
-
|
|
215
|
+
function deriveInnerJob(pendingMessages, turns, runtimeState) {
|
|
216
|
+
const isRunning = runtimeState?.status === "running";
|
|
217
|
+
const delegated = pendingMessages.find((msg) => msg.delegatedFrom);
|
|
218
|
+
const enriched = extractEnrichedFields(pendingMessages);
|
|
219
|
+
const pendingMode = delegated && "mode" in delegated && delegated.mode ? delegated.mode : "reflect";
|
|
220
|
+
const origin = enriched.origin ?? null;
|
|
221
|
+
const content = delegated?.content ?? null;
|
|
222
|
+
const obligationStatus = delegated?.obligationStatus ?? null;
|
|
223
|
+
const queuedAt = delegated?.timestamp ?? null;
|
|
224
|
+
if (isRunning) {
|
|
225
|
+
(0, runtime_1.emitNervesEvent)({
|
|
226
|
+
component: "engine",
|
|
227
|
+
event: "engine.private_runtime_job_derive",
|
|
228
|
+
message: "derived private-runtime job state",
|
|
229
|
+
meta: { status: "running", mode: pendingMode, hasOrigin: origin !== null, hasObligation: obligationStatus !== null },
|
|
230
|
+
});
|
|
231
|
+
return {
|
|
232
|
+
status: "running",
|
|
233
|
+
content,
|
|
234
|
+
origin,
|
|
235
|
+
mode: pendingMode,
|
|
236
|
+
obligationStatus,
|
|
237
|
+
surfacedResult: null,
|
|
238
|
+
queuedAt,
|
|
239
|
+
startedAt: runtimeState?.startedAt ?? null,
|
|
240
|
+
surfacedAt: null,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
if (pendingMessages.length > 0) {
|
|
244
|
+
(0, runtime_1.emitNervesEvent)({
|
|
245
|
+
component: "engine",
|
|
246
|
+
event: "engine.private_runtime_job_derive",
|
|
247
|
+
message: "derived private-runtime job state",
|
|
248
|
+
meta: { status: "queued", mode: pendingMode, hasOrigin: origin !== null, hasObligation: obligationStatus !== null },
|
|
249
|
+
});
|
|
250
|
+
return {
|
|
251
|
+
status: "queued",
|
|
252
|
+
content,
|
|
253
|
+
origin,
|
|
254
|
+
mode: pendingMode,
|
|
255
|
+
obligationStatus,
|
|
256
|
+
surfacedResult: null,
|
|
257
|
+
queuedAt,
|
|
258
|
+
startedAt: null,
|
|
259
|
+
surfacedAt: null,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
// No pending, not running -- check for surfaced result
|
|
263
|
+
const latestProcessedPendingTurn = [...turns]
|
|
264
|
+
.reverse()
|
|
265
|
+
.find((turn) => extractPendingPromptMessages(turn.prompt).length > 0);
|
|
266
|
+
if (latestProcessedPendingTurn) {
|
|
267
|
+
const surfacedResult = extractThoughtResponseFromMessages([
|
|
268
|
+
{ role: "assistant", content: latestProcessedPendingTurn.response },
|
|
269
|
+
]);
|
|
270
|
+
(0, runtime_1.emitNervesEvent)({
|
|
271
|
+
component: "engine",
|
|
272
|
+
event: "engine.private_runtime_job_derive",
|
|
273
|
+
message: "derived private-runtime job state",
|
|
274
|
+
meta: { status: "surfaced", mode: "reflect", hasOrigin: false, hasObligation: false },
|
|
275
|
+
});
|
|
276
|
+
return {
|
|
277
|
+
status: "surfaced",
|
|
278
|
+
content: null,
|
|
279
|
+
origin: null,
|
|
280
|
+
mode: "reflect",
|
|
281
|
+
obligationStatus: null,
|
|
282
|
+
/* v8 ignore next -- defensive: surfacedResult fallback @preserve */
|
|
283
|
+
surfacedResult: surfacedResult || null,
|
|
284
|
+
queuedAt: null,
|
|
285
|
+
startedAt: null,
|
|
286
|
+
surfacedAt: null,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
(0, runtime_1.emitNervesEvent)({
|
|
290
|
+
component: "engine",
|
|
291
|
+
event: "engine.private_runtime_job_derive",
|
|
292
|
+
message: "derived private-runtime job state",
|
|
293
|
+
meta: { status: "idle", mode: "reflect", hasOrigin: false, hasObligation: false },
|
|
294
|
+
});
|
|
295
|
+
return {
|
|
296
|
+
status: "idle",
|
|
297
|
+
content: null,
|
|
298
|
+
origin: null,
|
|
299
|
+
mode: "reflect",
|
|
300
|
+
obligationStatus: null,
|
|
301
|
+
surfacedResult: null,
|
|
302
|
+
queuedAt: null,
|
|
303
|
+
startedAt: null,
|
|
304
|
+
surfacedAt: null,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
function formatPrivateRuntimeStatus(status) {
|
|
308
|
+
const lines = [
|
|
197
309
|
`queue: ${status.queue}`,
|
|
198
310
|
`wake: ${status.wake}`,
|
|
199
311
|
`processing: ${status.processing}`,
|
|
200
312
|
`surfaced: ${status.surfaced}`,
|
|
201
|
-
]
|
|
313
|
+
];
|
|
314
|
+
if (status.origin) {
|
|
315
|
+
lines.push(`origin: ${status.origin.friendId}/${status.origin.channel}/${status.origin.key}`);
|
|
316
|
+
}
|
|
317
|
+
if (status.contentSnippet) {
|
|
318
|
+
lines.push(`asked: ${status.contentSnippet}`);
|
|
319
|
+
}
|
|
320
|
+
if (status.obligationPending) {
|
|
321
|
+
lines.push("obligation: pending");
|
|
322
|
+
}
|
|
323
|
+
return lines.join("\n");
|
|
202
324
|
}
|
|
203
|
-
/** Extract text from a
|
|
204
|
-
function
|
|
325
|
+
/** Extract text from a settle tool call's arguments. */
|
|
326
|
+
function extractSettleAnswer(messages) {
|
|
205
327
|
for (let k = messages.length - 1; k >= 0; k--) {
|
|
206
328
|
const msg = messages[k];
|
|
207
329
|
if (msg.role !== "assistant" || !Array.isArray(msg.tool_calls))
|
|
208
330
|
continue;
|
|
209
331
|
for (const tc of msg.tool_calls) {
|
|
210
332
|
const toolFunction = extractToolFunction(tc);
|
|
211
|
-
if (toolFunction?.name !== "
|
|
333
|
+
if (toolFunction?.name !== "settle")
|
|
212
334
|
continue;
|
|
213
335
|
try {
|
|
214
336
|
const parsed = JSON.parse(toolFunction.arguments ?? "{}");
|
|
@@ -222,18 +344,85 @@ function extractFinalAnswer(messages) {
|
|
|
222
344
|
}
|
|
223
345
|
return "";
|
|
224
346
|
}
|
|
347
|
+
function parseToolArguments(argumentsValue) {
|
|
348
|
+
if (!argumentsValue)
|
|
349
|
+
return {};
|
|
350
|
+
try {
|
|
351
|
+
const parsed = JSON.parse(argumentsValue);
|
|
352
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed)
|
|
353
|
+
? parsed
|
|
354
|
+
: {};
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
return {};
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
function toolArgumentText(args, keys) {
|
|
361
|
+
for (const key of keys) {
|
|
362
|
+
const value = args[key];
|
|
363
|
+
if (typeof value === "string" && value.trim()) {
|
|
364
|
+
return value.trim();
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return "";
|
|
368
|
+
}
|
|
369
|
+
function truncateToolSummary(summary) {
|
|
370
|
+
if (summary.length <= 220)
|
|
371
|
+
return summary;
|
|
372
|
+
return `${summary.slice(0, 217)}...`;
|
|
373
|
+
}
|
|
374
|
+
function summarizeToolAction(name, argumentsValue) {
|
|
375
|
+
if (!name)
|
|
376
|
+
return null;
|
|
377
|
+
const args = parseToolArguments(argumentsValue);
|
|
378
|
+
if (name === "surface") {
|
|
379
|
+
const message = toolArgumentText(args, ["message", "text", "content"]);
|
|
380
|
+
return message ? `surfaced: ${message}` : null;
|
|
381
|
+
}
|
|
382
|
+
if (name === "ponder") {
|
|
383
|
+
const thought = toolArgumentText(args, ["summary", "question", "topic", "prompt"]);
|
|
384
|
+
return thought ? `pondered: ${thought}` : null;
|
|
385
|
+
}
|
|
386
|
+
if (name === "diary_write") {
|
|
387
|
+
const note = toolArgumentText(args, ["text", "content", "note", "entry"]);
|
|
388
|
+
return note ? `diary: ${note}` : null;
|
|
389
|
+
}
|
|
390
|
+
if (name === "let_go") {
|
|
391
|
+
const reason = toolArgumentText(args, ["reason", "note", "status"]);
|
|
392
|
+
return reason ? `let go: ${reason}` : null;
|
|
393
|
+
}
|
|
394
|
+
if (name === "rest") {
|
|
395
|
+
const note = toolArgumentText(args, ["note", "status"]);
|
|
396
|
+
return note ? `rested: ${note}` : null;
|
|
397
|
+
}
|
|
398
|
+
return null;
|
|
399
|
+
}
|
|
400
|
+
function extractToolActionSummary(messages) {
|
|
401
|
+
for (let k = messages.length - 1; k >= 0; k--) {
|
|
402
|
+
const msg = messages[k];
|
|
403
|
+
if (msg.role !== "assistant" || !Array.isArray(msg.tool_calls))
|
|
404
|
+
continue;
|
|
405
|
+
for (let i = msg.tool_calls.length - 1; i >= 0; i--) {
|
|
406
|
+
const toolFunction = extractToolFunction(msg.tool_calls[i]);
|
|
407
|
+
const summary = summarizeToolAction(toolFunction?.name, toolFunction?.arguments);
|
|
408
|
+
if (summary)
|
|
409
|
+
return truncateToolSummary(summary);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return "";
|
|
413
|
+
}
|
|
225
414
|
function extractThoughtResponseFromMessages(messages) {
|
|
226
415
|
const assistantMsgs = messages.filter((message) => message.role === "assistant");
|
|
227
416
|
const lastAssistant = assistantMsgs.reverse().find((message) => contentToText(message.content).trim().length > 0);
|
|
228
417
|
return lastAssistant
|
|
229
418
|
? contentToText(lastAssistant.content).trim()
|
|
230
|
-
:
|
|
419
|
+
: extractSettleAnswer(messages) || extractToolActionSummary(messages);
|
|
231
420
|
}
|
|
232
|
-
function
|
|
421
|
+
function parsePrivateRuntimeSession(sessionPath) {
|
|
233
422
|
(0, runtime_1.emitNervesEvent)({
|
|
234
423
|
component: "daemon",
|
|
235
424
|
event: "daemon.thoughts_parse",
|
|
236
|
-
message: "parsing
|
|
425
|
+
message: "parsing private-runtime session",
|
|
237
426
|
meta: { sessionPath },
|
|
238
427
|
});
|
|
239
428
|
let raw;
|
|
@@ -243,21 +432,34 @@ function parseInnerDialogSession(sessionPath) {
|
|
|
243
432
|
catch {
|
|
244
433
|
return [];
|
|
245
434
|
}
|
|
246
|
-
let
|
|
435
|
+
let parsedRaw;
|
|
247
436
|
try {
|
|
248
|
-
|
|
437
|
+
parsedRaw = JSON.parse(raw);
|
|
249
438
|
}
|
|
250
439
|
catch {
|
|
251
440
|
return [];
|
|
252
441
|
}
|
|
253
|
-
|
|
442
|
+
const legacyRecord = parsedRaw && typeof parsedRaw === "object"
|
|
443
|
+
? parsedRaw
|
|
444
|
+
: null;
|
|
445
|
+
const messages = legacyRecord?.version === 1 && Array.isArray(legacyRecord.messages)
|
|
446
|
+
? legacyRecord.messages
|
|
447
|
+
: (() => {
|
|
448
|
+
const envelope = (0, session_events_1.parseSessionEnvelope)(parsedRaw, {
|
|
449
|
+
recordedAt: new Date().toISOString(),
|
|
450
|
+
});
|
|
451
|
+
if (!envelope)
|
|
452
|
+
return null;
|
|
453
|
+
return (0, session_events_1.projectProviderMessages)(envelope);
|
|
454
|
+
})();
|
|
455
|
+
if (!messages)
|
|
254
456
|
return [];
|
|
457
|
+
const normalizedMessages = messages;
|
|
255
458
|
const turns = [];
|
|
256
|
-
const messages = data.messages;
|
|
257
459
|
// Walk messages, pairing user → (tool calls) → assistant sequences
|
|
258
460
|
let i = 0;
|
|
259
|
-
while (i <
|
|
260
|
-
const msg =
|
|
461
|
+
while (i < normalizedMessages.length) {
|
|
462
|
+
const msg = normalizedMessages[i];
|
|
261
463
|
if (msg.role === "system") {
|
|
262
464
|
i++;
|
|
263
465
|
continue;
|
|
@@ -271,12 +473,12 @@ function parseInnerDialogSession(sessionPath) {
|
|
|
271
473
|
// Collect all messages until the next user message (or end)
|
|
272
474
|
const turnMessages = [];
|
|
273
475
|
let j = i + 1;
|
|
274
|
-
while (j <
|
|
275
|
-
turnMessages.push(
|
|
476
|
+
while (j < normalizedMessages.length && normalizedMessages[j].role !== "user") {
|
|
477
|
+
turnMessages.push(normalizedMessages[j]);
|
|
276
478
|
j++;
|
|
277
479
|
}
|
|
278
480
|
// Find the last assistant text response in this turn.
|
|
279
|
-
// With tool_choice="required", the response may be inside a
|
|
481
|
+
// With tool_choice="required", the response may be inside a settle tool call.
|
|
280
482
|
const response = extractThoughtResponseFromMessages(turnMessages);
|
|
281
483
|
const tools = extractToolNames(turnMessages);
|
|
282
484
|
turns.push({
|
|
@@ -292,11 +494,11 @@ function parseInnerDialogSession(sessionPath) {
|
|
|
292
494
|
}
|
|
293
495
|
function formatThoughtTurns(turns, lastN) {
|
|
294
496
|
if (turns.length === 0)
|
|
295
|
-
return "no
|
|
497
|
+
return "no private-runtime activity";
|
|
296
498
|
const selected = lastN > 0 ? turns.slice(-lastN) : turns;
|
|
297
499
|
/* v8 ignore next -- unreachable: turns.length > 0 checked above, slice always returns ≥1 @preserve */
|
|
298
500
|
if (selected.length === 0)
|
|
299
|
-
return "no
|
|
501
|
+
return "no private-runtime activity";
|
|
300
502
|
const lines = [];
|
|
301
503
|
for (const turn of selected) {
|
|
302
504
|
const typeLabel = turn.type === "task" && turn.taskId
|
|
@@ -316,13 +518,13 @@ function formatThoughtTurns(turns, lastN) {
|
|
|
316
518
|
}
|
|
317
519
|
return lines.join("\n").trim();
|
|
318
520
|
}
|
|
319
|
-
function
|
|
521
|
+
function getPrivateRuntimeSessionPath(agentRoot) {
|
|
320
522
|
return path.join(agentRoot, "state", "sessions", "self", "inner", "dialog.json");
|
|
321
523
|
}
|
|
322
|
-
function
|
|
524
|
+
function getPrivateRuntimeStatePath(sessionPath) {
|
|
323
525
|
return path.join(path.dirname(sessionPath), "runtime.json");
|
|
324
526
|
}
|
|
325
|
-
function
|
|
527
|
+
function readPrivateRuntimeState(runtimePath) {
|
|
326
528
|
try {
|
|
327
529
|
const raw = fs.readFileSync(runtimePath, "utf-8");
|
|
328
530
|
const parsed = JSON.parse(raw);
|
|
@@ -341,26 +543,33 @@ function readInnerDialogRuntimeState(runtimePath) {
|
|
|
341
543
|
return null;
|
|
342
544
|
}
|
|
343
545
|
}
|
|
344
|
-
function
|
|
546
|
+
function readPrivateRuntimeStatus(sessionPath, pendingDir, runtimePath = getPrivateRuntimeStatePath(sessionPath)) {
|
|
547
|
+
const pendingMessages = readPendingMessagesForStatus(pendingDir);
|
|
548
|
+
const turns = parsePrivateRuntimeSession(sessionPath);
|
|
549
|
+
const runtimeState = readPrivateRuntimeState(runtimePath);
|
|
550
|
+
return derivePrivateRuntimeStatus(pendingMessages, turns, runtimeState);
|
|
551
|
+
}
|
|
552
|
+
function readPrivateRuntimeRawData(sessionPath, pendingDir) {
|
|
553
|
+
const runtimePath = getPrivateRuntimeStatePath(sessionPath);
|
|
345
554
|
const pendingMessages = readPendingMessagesForStatus(pendingDir);
|
|
346
|
-
const turns =
|
|
347
|
-
const runtimeState =
|
|
348
|
-
return
|
|
555
|
+
const turns = parsePrivateRuntimeSession(sessionPath);
|
|
556
|
+
const runtimeState = readPrivateRuntimeState(runtimePath);
|
|
557
|
+
return { pendingMessages, turns, runtimeState };
|
|
349
558
|
}
|
|
350
559
|
/**
|
|
351
560
|
* Watch a session file and emit new turns as they appear.
|
|
352
561
|
* Returns a cleanup function that stops the watcher.
|
|
353
562
|
*/
|
|
354
563
|
function followThoughts(sessionPath, onNewTurns, pollIntervalMs = 1000) {
|
|
355
|
-
let displayedCount =
|
|
564
|
+
let displayedCount = parsePrivateRuntimeSession(sessionPath).length;
|
|
356
565
|
(0, runtime_1.emitNervesEvent)({
|
|
357
566
|
component: "daemon",
|
|
358
567
|
event: "daemon.thoughts_follow_start",
|
|
359
|
-
message: "started following
|
|
568
|
+
message: "started following private-runtime session",
|
|
360
569
|
meta: { sessionPath, initialTurns: displayedCount },
|
|
361
570
|
});
|
|
362
571
|
fs.watchFile(sessionPath, { interval: pollIntervalMs }, () => {
|
|
363
|
-
const turns =
|
|
572
|
+
const turns = parsePrivateRuntimeSession(sessionPath);
|
|
364
573
|
if (turns.length > displayedCount) {
|
|
365
574
|
const newTurns = turns.slice(displayedCount);
|
|
366
575
|
onNewTurns(formatThoughtTurns(newTurns, 0));
|
|
@@ -369,10 +578,13 @@ function followThoughts(sessionPath, onNewTurns, pollIntervalMs = 1000) {
|
|
|
369
578
|
});
|
|
370
579
|
return () => {
|
|
371
580
|
fs.unwatchFile(sessionPath);
|
|
581
|
+
// Must be named `_end` (not `_stop`) to satisfy the nerves audit's
|
|
582
|
+
// start/end pairing rule — see src/nerves/coverage/audit-rules.ts which
|
|
583
|
+
// pairs `<prefix>_start` with `<prefix>_end` or `<prefix>_error`.
|
|
372
584
|
(0, runtime_1.emitNervesEvent)({
|
|
373
585
|
component: "daemon",
|
|
374
|
-
event: "daemon.
|
|
375
|
-
message: "stopped following
|
|
586
|
+
event: "daemon.thoughts_follow_end",
|
|
587
|
+
message: "stopped following private-runtime session",
|
|
376
588
|
meta: { sessionPath, totalTurns: displayedCount },
|
|
377
589
|
});
|
|
378
590
|
};
|