@ouro.bot/cli 0.1.0-alpha.56 → 0.1.0-alpha.561
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 +127 -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 +3604 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +140 -0
- package/dist/arc/episodes.js +117 -0
- package/dist/arc/intentions.js +133 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +237 -0
- package/dist/arc/packets.js +193 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +65 -0
- package/dist/heart/active-work.js +837 -26
- package/dist/heart/agent-entry.js +58 -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/adapter.js +2 -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/background-operations.js +281 -0
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +111 -0
- package/dist/heart/config-registry.js +322 -0
- package/dist/heart/config.js +114 -118
- package/dist/heart/core.js +913 -246
- package/dist/heart/cross-chat-delivery.js +3 -18
- package/dist/heart/daemon/agent-config-check.js +419 -0
- package/dist/heart/daemon/agent-discovery.js +102 -3
- package/dist/heart/daemon/agent-service.js +522 -0
- package/dist/heart/daemon/agentic-repair.js +547 -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 +776 -0
- package/dist/heart/daemon/cli-exec.js +7457 -0
- package/dist/heart/daemon/cli-help.js +498 -0
- package/dist/heart/daemon/cli-parse.js +1592 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +763 -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 -1698
- package/dist/heart/daemon/daemon-entry.js +387 -2
- 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 +796 -71
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +826 -0
- package/dist/heart/daemon/health-monitor.js +122 -1
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +115 -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 +89 -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 +82 -12
- 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 +2 -2
- 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/process-manager.js +375 -33
- 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 +475 -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 +67 -16
- package/dist/heart/daemon/runtime-metadata.js +3 -31
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +389 -38
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +94 -0
- package/dist/heart/daemon/socket-client.js +158 -11
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +330 -0
- package/dist/heart/daemon/task-scheduler.js +3 -25
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +162 -17
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -1
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +140 -0
- package/dist/heart/habits/habit-runtime-state.js +100 -0
- package/dist/heart/habits/habit-scheduler.js +372 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
- 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 +35 -12
- package/dist/heart/identity.js +203 -57
- package/dist/heart/kept-notes.js +357 -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 +66 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +246 -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 +31 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +195 -0
- package/dist/heart/mailbox/readers/agent-machine.js +382 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
- package/dist/heart/mailbox/readers/mail.js +362 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +651 -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 +683 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +19 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +267 -0
- package/dist/heart/provider-credentials.js +425 -0
- package/dist/heart/provider-failover.js +301 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -0
- package/dist/heart/provider-readiness-cache.js +40 -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 +97 -13
- 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.js +55 -40
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +367 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +13 -4
- package/dist/heart/session-activity.js +43 -22
- package/dist/heart/session-events.js +1149 -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 +243 -0
- package/dist/heart/start-of-turn-packet.js +345 -0
- package/dist/heart/streaming.js +44 -27
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync.js +449 -0
- package/dist/heart/target-resolution.js +9 -5
- 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 +139 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +389 -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 +295 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
- package/dist/mailbox-ui/assets/index-B-461hes.js +61 -0
- package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
- package/dist/mailbox-ui/index.html +15 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +674 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/core.js +720 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +430 -0
- package/dist/mailroom/mbox-import.js +383 -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 +256 -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 +7 -1
- package/dist/mind/context.js +165 -101
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +62 -75
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/friends/channel.js +39 -0
- package/dist/mind/friends/resolver.js +54 -2
- package/dist/mind/friends/store-file.js +39 -3
- package/dist/mind/friends/types.js +2 -2
- package/dist/mind/journal-index.js +161 -0
- package/dist/mind/note-search.js +268 -0
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +4 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1011 -123
- package/dist/mind/provenance-trust.js +26 -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 +129 -5
- package/dist/nerves/coverage/run-artifacts.js +1 -1
- 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 +11 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +963 -0
- package/dist/repertoire/bundle-templates.js +72 -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 +330 -0
- package/dist/repertoire/coding/feedback.js +197 -30
- package/dist/repertoire/coding/manager.js +158 -9
- package/dist/repertoire/coding/spawner.js +55 -9
- package/dist/repertoire/coding/tools.js +170 -7
- 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/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 +396 -0
- package/dist/repertoire/mcp-client.js +295 -0
- package/dist/repertoire/mcp-manager.js +362 -0
- package/dist/repertoire/mcp-tools.js +63 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +15 -24
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tasks/board.js +31 -5
- package/dist/repertoire/tasks/fix.js +182 -0
- package/dist/repertoire/tasks/index.js +16 -4
- package/dist/repertoire/tasks/lifecycle.js +2 -2
- package/dist/repertoire/tasks/parser.js +3 -2
- package/dist/repertoire/tasks/scanner.js +194 -37
- package/dist/repertoire/tasks/transitions.js +16 -78
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-base.js +47 -1075
- package/dist/repertoire/tools-bluebubbles.js +1 -0
- package/dist/repertoire/tools-bridge.js +142 -0
- package/dist/repertoire/tools-bundle.js +984 -0
- package/dist/repertoire/tools-config.js +185 -0
- package/dist/repertoire/tools-continuity.js +248 -0
- package/dist/repertoire/tools-credential.js +381 -0
- package/dist/repertoire/tools-files.js +342 -0
- package/dist/repertoire/tools-flight.js +224 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-github.js +1 -7
- package/dist/repertoire/tools-mail.js +1857 -0
- package/dist/repertoire/tools-notes.js +421 -0
- package/dist/repertoire/tools-session.js +750 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +180 -0
- package/dist/repertoire/tools-surface.js +243 -0
- package/dist/repertoire/tools-teams.js +9 -39
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +604 -0
- package/dist/repertoire/tools-user-profile.js +144 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools.js +108 -100
- 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/attention-queue.js +116 -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 +2305 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
- 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/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 +187 -0
- package/dist/senses/cli.js +520 -209
- package/dist/senses/commands.js +66 -3
- package/dist/senses/habit-turn-message.js +108 -0
- package/dist/senses/inner-dialog-worker.js +175 -21
- package/dist/senses/inner-dialog.js +330 -27
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +379 -0
- package/dist/senses/pipeline.js +549 -181
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +251 -0
- package/dist/senses/surface-tool.js +68 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +387 -98
- package/dist/senses/trust-gate.js +100 -5
- package/dist/senses/voice/audio-routing.js +119 -0
- package/dist/senses/voice/elevenlabs.js +178 -0
- package/dist/senses/voice/golden-path.js +116 -0
- package/dist/senses/voice/index.js +26 -0
- package/dist/senses/voice/meeting.js +113 -0
- package/dist/senses/voice/playback.js +139 -0
- package/dist/senses/voice/transcript.js +70 -0
- package/dist/senses/voice/turn.js +85 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +80 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +146 -0
- package/package.json +38 -7
- package/skills/agent-commerce.md +106 -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 +101 -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/subagent-installer.js +0 -166
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/associative-recall.js +0 -209
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1177
- package/dist/senses/debug-activity.js +0 -148
- package/subagents/README.md +0 -86
- package/subagents/work-doer.md +0 -237
- package/subagents/work-merger.md +0 -618
- package/subagents/work-planner.md +0 -390
- /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/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
package/dist/heart/streaming.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.RESPONSES_FUNCTION_CALL_OUTPUT_CAP = exports.SettleStreamer = exports.SettleParser = void 0;
|
|
4
|
+
exports.truncateResponsesFunctionCallOutput = truncateResponsesFunctionCallOutput;
|
|
4
5
|
exports.toResponsesInput = toResponsesInput;
|
|
5
6
|
exports.toResponsesTools = toResponsesTools;
|
|
6
7
|
exports.streamChatCompletion = streamChatCompletion;
|
|
7
8
|
exports.streamResponsesApi = streamResponsesApi;
|
|
8
9
|
const runtime_1 = require("../nerves/runtime");
|
|
9
10
|
// Character-level state machine that extracts the answer value from
|
|
10
|
-
// `
|
|
11
|
+
// `settle` tool call JSON arguments as they stream in.
|
|
11
12
|
// Scans for prefix `"answer":"` or `"answer": "` in the character stream,
|
|
12
13
|
// then emits text handling JSON escapes, stopping at unescaped closing `"`.
|
|
13
|
-
class
|
|
14
|
+
class SettleParser {
|
|
14
15
|
// Possible prefixes to match (with and without space after colon)
|
|
15
16
|
static PREFIXES = ['"answer":"', '"answer": "'];
|
|
16
17
|
// Buffer of characters seen so far (pre-activation only)
|
|
@@ -29,7 +30,7 @@ class FinalAnswerParser {
|
|
|
29
30
|
if (!this._active) {
|
|
30
31
|
this.buf += ch;
|
|
31
32
|
// Check if any prefix has been fully matched in the buffer
|
|
32
|
-
for (const prefix of
|
|
33
|
+
for (const prefix of SettleParser.PREFIXES) {
|
|
33
34
|
if (this.buf.endsWith(prefix)) {
|
|
34
35
|
this._active = true;
|
|
35
36
|
break;
|
|
@@ -76,21 +77,25 @@ class FinalAnswerParser {
|
|
|
76
77
|
return out;
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
|
-
exports.
|
|
80
|
-
// Shared helper: wraps
|
|
80
|
+
exports.SettleParser = SettleParser;
|
|
81
|
+
// Shared helper: wraps SettleParser with onClearText + onTextChunk wiring.
|
|
81
82
|
// Used by all streaming providers (Chat Completions, Responses API, Anthropic)
|
|
82
|
-
// so the eager-match streaming pattern lives in one place.
|
|
83
|
-
class
|
|
84
|
-
parser = new
|
|
83
|
+
// so the eager-match settle streaming pattern lives in one place.
|
|
84
|
+
class SettleStreamer {
|
|
85
|
+
parser = new SettleParser();
|
|
85
86
|
_detected = false;
|
|
86
87
|
callbacks;
|
|
87
|
-
|
|
88
|
+
enabled;
|
|
89
|
+
constructor(callbacks, enabled = true) {
|
|
88
90
|
this.callbacks = callbacks;
|
|
91
|
+
this.enabled = enabled;
|
|
89
92
|
}
|
|
90
93
|
get detected() { return this._detected; }
|
|
91
94
|
get streamed() { return this.parser.active; }
|
|
92
|
-
/** Mark
|
|
95
|
+
/** Mark settle as detected. Calls onClearText on the callbacks. */
|
|
93
96
|
activate() {
|
|
97
|
+
if (!this.enabled)
|
|
98
|
+
return;
|
|
94
99
|
if (this._detected)
|
|
95
100
|
return;
|
|
96
101
|
this._detected = true;
|
|
@@ -98,6 +103,8 @@ class FinalAnswerStreamer {
|
|
|
98
103
|
}
|
|
99
104
|
/** Feed an argument delta through the parser. Emits text via onTextChunk. */
|
|
100
105
|
processDelta(delta) {
|
|
106
|
+
if (!this.enabled)
|
|
107
|
+
return;
|
|
101
108
|
if (!this._detected)
|
|
102
109
|
return;
|
|
103
110
|
const text = this.parser.process(delta);
|
|
@@ -105,7 +112,17 @@ class FinalAnswerStreamer {
|
|
|
105
112
|
this.callbacks.onTextChunk(text);
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
|
-
exports.
|
|
115
|
+
exports.SettleStreamer = SettleStreamer;
|
|
116
|
+
exports.RESPONSES_FUNCTION_CALL_OUTPUT_CAP = 200_000;
|
|
117
|
+
function truncateResponsesFunctionCallOutput(output, maxChars = exports.RESPONSES_FUNCTION_CALL_OUTPUT_CAP) {
|
|
118
|
+
if (output.length <= maxChars)
|
|
119
|
+
return output;
|
|
120
|
+
const marker = `\n\n[truncated — function_call_output exceeded ${maxChars} chars; original length ${output.length} chars]\n\n`;
|
|
121
|
+
const remainingBudget = Math.max(0, maxChars - marker.length);
|
|
122
|
+
const headLength = Math.ceil(remainingBudget * 0.75);
|
|
123
|
+
const tailLength = Math.max(0, remainingBudget - headLength);
|
|
124
|
+
return `${output.slice(0, headLength)}${marker}${output.slice(-tailLength)}`;
|
|
125
|
+
}
|
|
109
126
|
function toResponsesUserContent(content) {
|
|
110
127
|
if (typeof content === "string") {
|
|
111
128
|
return content;
|
|
@@ -211,7 +228,7 @@ function toResponsesInput(messages) {
|
|
|
211
228
|
input.push({
|
|
212
229
|
type: "function_call_output",
|
|
213
230
|
call_id: t.tool_call_id,
|
|
214
|
-
output: typeof t.content === "string" ? t.content : "",
|
|
231
|
+
output: truncateResponsesFunctionCallOutput(typeof t.content === "string" ? t.content : ""),
|
|
215
232
|
});
|
|
216
233
|
continue;
|
|
217
234
|
}
|
|
@@ -227,7 +244,7 @@ function toResponsesTools(ccTools) {
|
|
|
227
244
|
strict: false,
|
|
228
245
|
}));
|
|
229
246
|
}
|
|
230
|
-
async function streamChatCompletion(client, createParams, callbacks, signal) {
|
|
247
|
+
async function streamChatCompletion(client, createParams, callbacks, signal, eagerSettleStreaming = true) {
|
|
231
248
|
(0, runtime_1.emitNervesEvent)({
|
|
232
249
|
component: "engine",
|
|
233
250
|
event: "engine.stream_start",
|
|
@@ -241,7 +258,7 @@ async function streamChatCompletion(client, createParams, callbacks, signal) {
|
|
|
241
258
|
let toolCalls = {};
|
|
242
259
|
let streamStarted = false;
|
|
243
260
|
let usage;
|
|
244
|
-
const answerStreamer = new
|
|
261
|
+
const answerStreamer = new SettleStreamer(callbacks, eagerSettleStreaming);
|
|
245
262
|
// State machine for parsing inline <think> tags (MiniMax pattern)
|
|
246
263
|
let contentBuf = "";
|
|
247
264
|
let inThinkTag = false;
|
|
@@ -356,19 +373,19 @@ async function streamChatCompletion(client, createParams, callbacks, signal) {
|
|
|
356
373
|
toolCalls[tc.index].id = tc.id;
|
|
357
374
|
if (tc.function?.name) {
|
|
358
375
|
toolCalls[tc.index].name = tc.function.name;
|
|
359
|
-
// Detect
|
|
376
|
+
// Detect settle tool call on first name delta.
|
|
360
377
|
// Only activate streaming if this is the sole tool call (index 0
|
|
361
378
|
// and no other indices seen). Mixed calls are rejected by core.ts.
|
|
362
|
-
if (tc.function.name === "
|
|
379
|
+
if (tc.function.name === "settle" && !answerStreamer.detected
|
|
363
380
|
&& tc.index === 0 && Object.keys(toolCalls).length === 1) {
|
|
364
381
|
answerStreamer.activate();
|
|
365
382
|
}
|
|
366
383
|
}
|
|
367
384
|
if (tc.function?.arguments) {
|
|
368
385
|
toolCalls[tc.index].arguments += tc.function.arguments;
|
|
369
|
-
// Feed
|
|
386
|
+
// Feed settle argument deltas to the parser for progressive
|
|
370
387
|
// streaming, but only when it appears to be the sole tool call.
|
|
371
|
-
if (answerStreamer.detected && toolCalls[tc.index].name === "
|
|
388
|
+
if (answerStreamer.detected && toolCalls[tc.index].name === "settle"
|
|
372
389
|
&& Object.keys(toolCalls).length === 1) {
|
|
373
390
|
answerStreamer.processDelta(tc.function.arguments);
|
|
374
391
|
}
|
|
@@ -384,10 +401,10 @@ async function streamChatCompletion(client, createParams, callbacks, signal) {
|
|
|
384
401
|
toolCalls: Object.values(toolCalls),
|
|
385
402
|
outputItems: [],
|
|
386
403
|
usage,
|
|
387
|
-
|
|
404
|
+
settleStreamed: answerStreamer.streamed,
|
|
388
405
|
};
|
|
389
406
|
}
|
|
390
|
-
async function streamResponsesApi(client, createParams, callbacks, signal) {
|
|
407
|
+
async function streamResponsesApi(client, createParams, callbacks, signal, eagerSettleStreaming = true) {
|
|
391
408
|
(0, runtime_1.emitNervesEvent)({
|
|
392
409
|
component: "engine",
|
|
393
410
|
event: "engine.stream_start",
|
|
@@ -402,7 +419,7 @@ async function streamResponsesApi(client, createParams, callbacks, signal) {
|
|
|
402
419
|
const outputItems = [];
|
|
403
420
|
let currentToolCall = null;
|
|
404
421
|
let usage;
|
|
405
|
-
const answerStreamer = new
|
|
422
|
+
const answerStreamer = new SettleStreamer(callbacks, eagerSettleStreaming);
|
|
406
423
|
let functionCallCount = 0;
|
|
407
424
|
for await (const event of response) {
|
|
408
425
|
if (signal?.aborted)
|
|
@@ -432,10 +449,10 @@ async function streamResponsesApi(client, createParams, callbacks, signal) {
|
|
|
432
449
|
name: String(event.item.name),
|
|
433
450
|
arguments: "",
|
|
434
451
|
};
|
|
435
|
-
// Detect
|
|
452
|
+
// Detect settle function call -- clear any streamed noise.
|
|
436
453
|
// Only activate when this is the first (and so far only) function call.
|
|
437
454
|
// Mixed calls are rejected by core.ts; no need to stream their args.
|
|
438
|
-
if (String(event.item.name) === "
|
|
455
|
+
if (String(event.item.name) === "settle" && functionCallCount === 1) {
|
|
439
456
|
answerStreamer.activate();
|
|
440
457
|
}
|
|
441
458
|
}
|
|
@@ -444,9 +461,9 @@ async function streamResponsesApi(client, createParams, callbacks, signal) {
|
|
|
444
461
|
case "response.function_call_arguments.delta": {
|
|
445
462
|
if (currentToolCall) {
|
|
446
463
|
currentToolCall.arguments += event.delta;
|
|
447
|
-
// Feed
|
|
464
|
+
// Feed settle argument deltas to the parser for progressive
|
|
448
465
|
// streaming, but only when it appears to be the sole function call.
|
|
449
|
-
if (answerStreamer.detected && currentToolCall.name === "
|
|
466
|
+
if (answerStreamer.detected && currentToolCall.name === "settle"
|
|
450
467
|
&& functionCallCount === 1) {
|
|
451
468
|
answerStreamer.processDelta(String(event.delta));
|
|
452
469
|
}
|
|
@@ -488,6 +505,6 @@ async function streamResponsesApi(client, createParams, callbacks, signal) {
|
|
|
488
505
|
toolCalls,
|
|
489
506
|
outputItems,
|
|
490
507
|
usage,
|
|
491
|
-
|
|
508
|
+
settleStreamed: answerStreamer.streamed,
|
|
492
509
|
};
|
|
493
510
|
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sync failure taxonomy classifier — Layer 2 of the harness-hardening sequence.
|
|
4
|
+
*
|
|
5
|
+
* Pure pattern-matcher over (error, context) that turns common git failure
|
|
6
|
+
* shapes into the locked taxonomy variants. Used by `runBootSyncProbe` (the
|
|
7
|
+
* `ouro up` pre-flight pull orchestrator) and by `postTurnPush`'s legacy
|
|
8
|
+
* push-rejected/conflict path so both producers share one vocabulary.
|
|
9
|
+
*
|
|
10
|
+
* Pattern priority — most actionable / specific wins:
|
|
11
|
+
* 1. Abort signal (timeout-soft / timeout-hard) — caller explicitly aborted.
|
|
12
|
+
* 2. not-found-404 — 404 / "Repository not found": remote endpoint gone.
|
|
13
|
+
* 3. auth-failed — 401 / 403 / "Authentication failed".
|
|
14
|
+
* 4. network-down — ENOTFOUND / ECONNREFUSED / "Could not resolve host".
|
|
15
|
+
* 5. dirty-working-tree — "would be overwritten" / "stash them".
|
|
16
|
+
* 6. merge-conflict — CONFLICT marker in stderr (also collects file list).
|
|
17
|
+
* 7. non-fast-forward — "non-fast-forward" / "fetch first".
|
|
18
|
+
* 8. unknown — fallthrough.
|
|
19
|
+
*
|
|
20
|
+
* The classifier never throws and never writes to disk. It calls
|
|
21
|
+
* `git status --porcelain=v1` only when it has already classified the error
|
|
22
|
+
* as a merge conflict, to enumerate unmerged paths for the consumer.
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.classifySyncFailure = classifySyncFailure;
|
|
26
|
+
const child_process_1 = require("child_process");
|
|
27
|
+
/**
|
|
28
|
+
* Enumerate unmerged paths via `git status --porcelain=v1`. Pulled out as a
|
|
29
|
+
* pure helper so the classifier can be tested without a live git repo (the
|
|
30
|
+
* caller mocks `child_process.execFileSync`).
|
|
31
|
+
*
|
|
32
|
+
* Mirrors `sync.ts:collectRebaseConflictFiles` — kept as a separate copy here
|
|
33
|
+
* so this module has zero internal dep on `sync.ts`. The caller of
|
|
34
|
+
* `classifySyncFailure` doesn't see the duplication; the runtime cost is one
|
|
35
|
+
* git invocation per merge-conflict classification, same as before.
|
|
36
|
+
*/
|
|
37
|
+
function collectConflictFiles(agentRoot) {
|
|
38
|
+
try {
|
|
39
|
+
const output = (0, child_process_1.execFileSync)("git", ["status", "--porcelain=v1"], {
|
|
40
|
+
cwd: agentRoot,
|
|
41
|
+
stdio: "pipe",
|
|
42
|
+
timeout: 5000,
|
|
43
|
+
}).toString();
|
|
44
|
+
const files = [];
|
|
45
|
+
for (const line of output.split("\n")) {
|
|
46
|
+
// Unmerged paths in porcelain v1 are prefixed with UU/AA/DD/AU/UA/DU/UD.
|
|
47
|
+
if (/^(UU|AA|DD|AU|UA|DU|UD) /.test(line)) {
|
|
48
|
+
files.push(line.slice(3).trim());
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return files;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
/* v8 ignore next -- defensive: git status failure inside a git repo would require a corrupt repo @preserve */
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function isAbortError(error) {
|
|
59
|
+
if (typeof error !== "object" || error === null)
|
|
60
|
+
return false;
|
|
61
|
+
const candidate = error;
|
|
62
|
+
if (candidate.name === "AbortError")
|
|
63
|
+
return true;
|
|
64
|
+
if (candidate.code === "ABORT_ERR")
|
|
65
|
+
return true;
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
function readMessage(error) {
|
|
69
|
+
if (error instanceof Error)
|
|
70
|
+
return error.message;
|
|
71
|
+
if (typeof error === "string")
|
|
72
|
+
return error;
|
|
73
|
+
if (error === null || error === undefined)
|
|
74
|
+
return String(error);
|
|
75
|
+
try {
|
|
76
|
+
return JSON.stringify(error);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* v8 ignore next -- defensive: JSON.stringify only fails on circular/BigInt; real-world git errors don't trigger it @preserve */
|
|
80
|
+
return String(error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function readErrorCode(error) {
|
|
84
|
+
if (typeof error !== "object" || error === null)
|
|
85
|
+
return undefined;
|
|
86
|
+
const code = error.code;
|
|
87
|
+
return typeof code === "string" ? code : undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Classify a sync failure into one of the locked taxonomy variants.
|
|
91
|
+
*
|
|
92
|
+
* Pure: never throws, never writes. Calls `git status` only when the error
|
|
93
|
+
* was already classified as a merge conflict, to enumerate unmerged files.
|
|
94
|
+
*/
|
|
95
|
+
function classifySyncFailure(error, context) {
|
|
96
|
+
const message = readMessage(error);
|
|
97
|
+
const errorCode = readErrorCode(error);
|
|
98
|
+
// 1. Abort signal — highest priority. Caller's signal trumps content match.
|
|
99
|
+
if (isAbortError(error)) {
|
|
100
|
+
const reason = context.abortReason ?? "hard";
|
|
101
|
+
return {
|
|
102
|
+
classification: reason === "soft" ? "timeout-soft" : "timeout-hard",
|
|
103
|
+
error: message,
|
|
104
|
+
conflictFiles: [],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Lowercased copy for case-insensitive substring matching.
|
|
108
|
+
const lower = message.toLowerCase();
|
|
109
|
+
// 2. Not-found-404 — most actionable diagnosis when both 404 and other
|
|
110
|
+
// signals are present. "404" and "Repository not found" are the canonical
|
|
111
|
+
// shapes.
|
|
112
|
+
if (lower.includes("404") || lower.includes("repository not found")) {
|
|
113
|
+
return {
|
|
114
|
+
classification: "not-found-404",
|
|
115
|
+
error: message,
|
|
116
|
+
conflictFiles: [],
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// 3. Auth failed — 401 / 403 / "Authentication failed" / "Permission denied".
|
|
120
|
+
if (lower.includes("401")
|
|
121
|
+
|| lower.includes("403")
|
|
122
|
+
|| lower.includes("authentication failed")
|
|
123
|
+
|| lower.includes("permission denied")) {
|
|
124
|
+
return {
|
|
125
|
+
classification: "auth-failed",
|
|
126
|
+
error: message,
|
|
127
|
+
conflictFiles: [],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
// 4. Network down — DNS / connection errors.
|
|
131
|
+
if (errorCode === "ENOTFOUND"
|
|
132
|
+
|| errorCode === "ECONNREFUSED"
|
|
133
|
+
|| lower.includes("enotfound")
|
|
134
|
+
|| lower.includes("econnrefused")
|
|
135
|
+
|| lower.includes("could not resolve host")
|
|
136
|
+
|| lower.includes("connection refused")) {
|
|
137
|
+
return {
|
|
138
|
+
classification: "network-down",
|
|
139
|
+
error: message,
|
|
140
|
+
conflictFiles: [],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// 5. Dirty working tree — pull / merge would clobber uncommitted changes.
|
|
144
|
+
if (lower.includes("would be overwritten")
|
|
145
|
+
|| lower.includes("commit your changes or stash them")) {
|
|
146
|
+
return {
|
|
147
|
+
classification: "dirty-working-tree",
|
|
148
|
+
error: message,
|
|
149
|
+
conflictFiles: [],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// 6. Merge conflict — CONFLICT marker in stderr. Collect unmerged files.
|
|
153
|
+
if (lower.includes("conflict")) {
|
|
154
|
+
return {
|
|
155
|
+
classification: "merge-conflict",
|
|
156
|
+
error: message,
|
|
157
|
+
conflictFiles: collectConflictFiles(context.agentRoot),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// 7. Non-fast-forward — push rejected because remote moved.
|
|
161
|
+
if (lower.includes("non-fast-forward")
|
|
162
|
+
|| lower.includes("fetch first")
|
|
163
|
+
|| lower.includes("rejected")) {
|
|
164
|
+
return {
|
|
165
|
+
classification: "non-fast-forward",
|
|
166
|
+
error: message,
|
|
167
|
+
conflictFiles: [],
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// 8. Fallthrough.
|
|
171
|
+
return {
|
|
172
|
+
classification: "unknown",
|
|
173
|
+
error: message,
|
|
174
|
+
conflictFiles: [],
|
|
175
|
+
};
|
|
176
|
+
}
|