@ouro.bot/cli 0.1.0-alpha.65 → 0.1.0-alpha.650
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 +4151 -14
- 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 +487 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +270 -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/heart/active-work.js +860 -43
- package/dist/heart/agent-entry.js +69 -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 +377 -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 +322 -0
- package/dist/heart/config.js +118 -119
- package/dist/heart/core.js +1123 -247
- 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 +780 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +7480 -0
- package/dist/heart/daemon/cli-help.js +505 -0
- package/dist/heart/daemon/cli-parse.js +1554 -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 -1750
- package/dist/heart/daemon/daemon-entry.js +485 -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 +932 -74
- 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/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 +79 -10
- package/dist/heart/daemon/logs-prune.js +110 -0
- package/dist/heart/daemon/mcp-canary.js +297 -0
- 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 +510 -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 +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 +35 -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 +493 -38
- 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 +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 +117 -39
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +229 -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 -4
- 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 +37 -14
- package/dist/heart/identity.js +168 -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 +197 -0
- package/dist/heart/mailbox/readers/agent-machine.js +418 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +319 -0
- package/dist/heart/mailbox/readers/mail.js +375 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +756 -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 +692 -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/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +272 -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 +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 +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 +367 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +13 -4
- package/dist/heart/session-activity.js +48 -24
- package/dist/heart/session-events.js +1163 -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 +345 -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 +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 +143 -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 +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/mailbox-ui/assets/index-9-AxCxuB.js +61 -0
- package/dist/mailbox-ui/assets/index-CWzt267f.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 +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 +14 -1
- package/dist/mind/context.js +251 -101
- package/dist/mind/desk-section.js +310 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +68 -76
- 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 +48 -4
- package/dist/mind/friends/types.js +2 -2
- package/dist/mind/journal-index.js +162 -0
- package/dist/mind/note-search.js +268 -0
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +6 -1
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1051 -138
- 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 +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 +1041 -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 +331 -0
- package/dist/repertoire/coding/feedback.js +197 -30
- package/dist/repertoire/coding/manager.js +166 -10
- package/dist/repertoire/coding/spawner.js +55 -9
- package/dist/repertoire/coding/tools.js +219 -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/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 +136 -25
- package/dist/repertoire/mcp-client.js +295 -0
- package/dist/repertoire/mcp-manager.js +403 -0
- 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-attachments.js +317 -0
- package/dist/repertoire/tools-awaiting.js +372 -0
- package/dist/repertoire/tools-base.js +59 -1082
- 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-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 +227 -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 +438 -0
- package/dist/repertoire/tools-obligations.js +143 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +464 -0
- package/dist/repertoire/tools-runtime.js +150 -0
- package/dist/repertoire/tools-session.js +766 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +182 -0
- package/dist/repertoire/tools-surface.js +344 -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 +193 -77
- 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 +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 +2737 -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 +40 -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 +517 -204
- package/dist/senses/commands.js +66 -3
- package/dist/senses/habit-turn-message.js +108 -0
- package/dist/senses/inner-dialog-worker.js +254 -22
- package/dist/senses/inner-dialog.js +505 -40
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +379 -0
- package/dist/senses/pipeline.js +711 -181
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +393 -0
- package/dist/senses/surface-tool.js +108 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +390 -98
- package/dist/senses/trust-gate.js +100 -5
- 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 +5079 -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 +53 -0
- package/package.json +53 -10
- 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 +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/associative-recall.js +0 -209
- 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 -1177
- package/dist/senses/debug-activity.js +0 -148
- 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,365 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.vaultLockedIssue = vaultLockedIssue;
|
|
4
|
+
exports.vaultUnconfiguredIssue = vaultUnconfiguredIssue;
|
|
5
|
+
exports.providerCredentialMissingIssue = providerCredentialMissingIssue;
|
|
6
|
+
exports.providerLiveCheckFix = providerLiveCheckFix;
|
|
7
|
+
exports.preferredConnectRepairAction = preferredConnectRepairAction;
|
|
8
|
+
exports.providerLiveCheckFailedIssue = providerLiveCheckFailedIssue;
|
|
9
|
+
exports.genericReadinessIssue = genericReadinessIssue;
|
|
10
|
+
exports.isKnownReadinessIssue = isKnownReadinessIssue;
|
|
11
|
+
exports.renderReadinessIssue = renderReadinessIssue;
|
|
12
|
+
exports.renderReadinessIssueNextSteps = renderReadinessIssueNextSteps;
|
|
13
|
+
exports.runGuidedReadinessRepair = runGuidedReadinessRepair;
|
|
14
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
15
|
+
const human_readiness_1 = require("./human-readiness");
|
|
16
|
+
const human_command_screens_1 = require("./human-command-screens");
|
|
17
|
+
function vaultLockedIssue(agentName) {
|
|
18
|
+
return {
|
|
19
|
+
kind: "vault-locked",
|
|
20
|
+
severity: "blocked",
|
|
21
|
+
actor: "human-required",
|
|
22
|
+
summary: `${agentName}: vault locked`,
|
|
23
|
+
detail: "Pick the path that matches what the human actually has. Ouro will not print or store the unlock secret as a portable file.",
|
|
24
|
+
actions: [
|
|
25
|
+
{
|
|
26
|
+
kind: "vault-unlock",
|
|
27
|
+
label: "Unlock with saved secret",
|
|
28
|
+
command: `ouro vault unlock --agent ${agentName}`,
|
|
29
|
+
actor: "human-required",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
kind: "vault-replace",
|
|
33
|
+
label: "Create empty replacement vault",
|
|
34
|
+
command: `ouro vault replace --agent ${agentName}`,
|
|
35
|
+
actor: "human-required",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
kind: "vault-recover",
|
|
39
|
+
label: "Recover from JSON export",
|
|
40
|
+
command: `ouro vault recover --agent ${agentName} --from <json>`,
|
|
41
|
+
actor: "human-required",
|
|
42
|
+
executable: false,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function vaultUnconfiguredIssue(agentName) {
|
|
48
|
+
return {
|
|
49
|
+
kind: "vault-unconfigured",
|
|
50
|
+
severity: "blocked",
|
|
51
|
+
actor: "human-required",
|
|
52
|
+
summary: `${agentName}: vault not configured`,
|
|
53
|
+
detail: "This bundle does not have a vault locator in agent.json yet. Create the agent vault before authenticating providers.",
|
|
54
|
+
actions: [
|
|
55
|
+
{
|
|
56
|
+
kind: "vault-create",
|
|
57
|
+
label: "Create this agent's vault",
|
|
58
|
+
command: `ouro vault create --agent ${agentName}`,
|
|
59
|
+
actor: "human-required",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
kind: "vault-recover",
|
|
63
|
+
label: "Recover from JSON export",
|
|
64
|
+
command: `ouro vault recover --agent ${agentName} --from <json>`,
|
|
65
|
+
actor: "human-required",
|
|
66
|
+
executable: false,
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function providerCredentialMissingIssue(input) {
|
|
72
|
+
return {
|
|
73
|
+
kind: "provider-credentials-missing",
|
|
74
|
+
severity: "blocked",
|
|
75
|
+
actor: "human-required",
|
|
76
|
+
summary: `${input.agentName}: missing ${input.provider} credentials (${input.lane}, ${input.model})`,
|
|
77
|
+
detail: `source: ${input.credentialPath}`,
|
|
78
|
+
actions: [
|
|
79
|
+
{
|
|
80
|
+
kind: "provider-auth",
|
|
81
|
+
label: `Authenticate ${input.provider}`,
|
|
82
|
+
command: `ouro auth --agent ${input.agentName} --provider ${input.provider}`,
|
|
83
|
+
actor: "human-required",
|
|
84
|
+
provider: input.provider,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
kind: "provider-use",
|
|
88
|
+
label: "Choose another provider/model",
|
|
89
|
+
command: `ouro use --agent ${input.agentName} --lane ${input.lane} --provider <provider> --model <model>`,
|
|
90
|
+
actor: "human-choice",
|
|
91
|
+
executable: false,
|
|
92
|
+
lane: input.lane,
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function normalizeProviderLiveCheckClassification(classification) {
|
|
98
|
+
switch (classification) {
|
|
99
|
+
case "auth-failure":
|
|
100
|
+
case "usage-limit":
|
|
101
|
+
case "rate-limit":
|
|
102
|
+
case "server-error":
|
|
103
|
+
case "network-error":
|
|
104
|
+
case "unknown":
|
|
105
|
+
return classification;
|
|
106
|
+
default:
|
|
107
|
+
return "unknown";
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function providerUseAction(input) {
|
|
111
|
+
return {
|
|
112
|
+
kind: "provider-use",
|
|
113
|
+
label: "Choose a different working provider/model",
|
|
114
|
+
command: `ouro use --agent ${input.agentName} --lane ${input.lane} --provider <provider> --model <model>`,
|
|
115
|
+
actor: "human-choice",
|
|
116
|
+
executable: false,
|
|
117
|
+
lane: input.lane,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function providerAuthAction(input) {
|
|
121
|
+
return {
|
|
122
|
+
kind: "provider-auth",
|
|
123
|
+
label: `Refresh ${input.provider} credentials`,
|
|
124
|
+
command: `ouro auth --agent ${input.agentName} --provider ${input.provider}`,
|
|
125
|
+
actor: "human-required",
|
|
126
|
+
provider: input.provider,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function providerRetryAction(input) {
|
|
130
|
+
return {
|
|
131
|
+
kind: "provider-retry",
|
|
132
|
+
label: input.label,
|
|
133
|
+
command: `ouro repair --agent ${input.agentName}`,
|
|
134
|
+
actor: "human-choice",
|
|
135
|
+
executable: false,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function providerLiveCheckFix(input) {
|
|
139
|
+
const classification = normalizeProviderLiveCheckClassification(input.classification);
|
|
140
|
+
const authCommand = `ouro auth --agent ${input.agentName} --provider ${input.provider}`;
|
|
141
|
+
const useCommand = `ouro use --agent ${input.agentName} --lane ${input.lane} --provider <provider> --model <model>`;
|
|
142
|
+
switch (classification) {
|
|
143
|
+
case "auth-failure":
|
|
144
|
+
return `Run '${authCommand}' to refresh credentials, or run '${useCommand}' to choose another provider/model for this lane.`;
|
|
145
|
+
case "usage-limit":
|
|
146
|
+
return `This usually means ${input.provider} hit a usage limit. Restore quota, then run 'ouro up' again. Or run '${useCommand}' to choose another provider/model for this lane.`;
|
|
147
|
+
case "rate-limit":
|
|
148
|
+
return `Run 'ouro up' again after a short wait. Or run '${useCommand}' to choose another provider/model for this lane.`;
|
|
149
|
+
case "server-error":
|
|
150
|
+
return `Run 'ouro up' again in a moment. If ${input.provider} keeps failing, run '${useCommand}' to choose another provider/model for this lane.`;
|
|
151
|
+
case "network-error":
|
|
152
|
+
return `Check the network or provider availability, then run 'ouro up' again. Or run '${useCommand}' to choose another provider/model for this lane.`;
|
|
153
|
+
case "unknown":
|
|
154
|
+
return `Run 'ouro up' again. If it keeps failing, run '${authCommand}' to refresh credentials or '${useCommand}' to choose another provider/model for this lane.`;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function providerLiveCheckActions(input) {
|
|
158
|
+
const classification = normalizeProviderLiveCheckClassification(input.classification);
|
|
159
|
+
const useAction = providerUseAction(input);
|
|
160
|
+
const authAction = providerAuthAction(input);
|
|
161
|
+
switch (classification) {
|
|
162
|
+
case "auth-failure":
|
|
163
|
+
return [authAction, useAction];
|
|
164
|
+
case "usage-limit":
|
|
165
|
+
return [
|
|
166
|
+
providerRetryAction({ agentName: input.agentName, label: "After restoring quota, check again" }),
|
|
167
|
+
useAction,
|
|
168
|
+
];
|
|
169
|
+
case "rate-limit":
|
|
170
|
+
return [
|
|
171
|
+
providerRetryAction({ agentName: input.agentName, label: "Give it a minute, then check again" }),
|
|
172
|
+
useAction,
|
|
173
|
+
];
|
|
174
|
+
case "server-error":
|
|
175
|
+
return [
|
|
176
|
+
providerRetryAction({ agentName: input.agentName, label: "Check again in a moment" }),
|
|
177
|
+
useAction,
|
|
178
|
+
];
|
|
179
|
+
case "network-error":
|
|
180
|
+
return [
|
|
181
|
+
providerRetryAction({ agentName: input.agentName, label: "Check again after the network settles" }),
|
|
182
|
+
useAction,
|
|
183
|
+
authAction,
|
|
184
|
+
];
|
|
185
|
+
case "unknown":
|
|
186
|
+
return [
|
|
187
|
+
providerRetryAction({ agentName: input.agentName, label: "Check again" }),
|
|
188
|
+
authAction,
|
|
189
|
+
useAction,
|
|
190
|
+
];
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function preferredConnectRepairAction(issue) {
|
|
194
|
+
if (!issue)
|
|
195
|
+
return undefined;
|
|
196
|
+
if (issue.kind === "provider-live-check-failed" && issue.actions[0]?.kind === "provider-retry") {
|
|
197
|
+
return issue.actions.find((action) => action.kind !== "provider-retry") ?? issue.actions[0];
|
|
198
|
+
}
|
|
199
|
+
return issue.actions[0];
|
|
200
|
+
}
|
|
201
|
+
function providerLiveCheckFailedIssue(input) {
|
|
202
|
+
return {
|
|
203
|
+
kind: "provider-live-check-failed",
|
|
204
|
+
severity: "blocked",
|
|
205
|
+
actor: "human-choice",
|
|
206
|
+
summary: `${input.agentName}: ${input.lane} provider ${input.provider} / ${input.model} failed live check`,
|
|
207
|
+
detail: input.message,
|
|
208
|
+
actions: providerLiveCheckActions(input),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function genericReadinessIssue(input) {
|
|
212
|
+
return {
|
|
213
|
+
kind: "generic",
|
|
214
|
+
severity: "degraded",
|
|
215
|
+
actor: "human-choice",
|
|
216
|
+
summary: input.summary,
|
|
217
|
+
...(input.detail ? { detail: input.detail } : {}),
|
|
218
|
+
actions: input.fix
|
|
219
|
+
? [{
|
|
220
|
+
kind: "provider-use",
|
|
221
|
+
label: "Follow the printed fix",
|
|
222
|
+
command: input.fix,
|
|
223
|
+
actor: "human-choice",
|
|
224
|
+
executable: false,
|
|
225
|
+
}]
|
|
226
|
+
: [],
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function isKnownReadinessIssue(issue) {
|
|
230
|
+
return !!issue && issue.kind !== "generic";
|
|
231
|
+
}
|
|
232
|
+
function renderReadinessIssue(issue) {
|
|
233
|
+
const lines = [issue.summary];
|
|
234
|
+
if (issue.detail) {
|
|
235
|
+
lines.push(` ${issue.detail}`);
|
|
236
|
+
}
|
|
237
|
+
if (issue.actions.length > 0) {
|
|
238
|
+
lines.push("");
|
|
239
|
+
}
|
|
240
|
+
issue.actions.forEach((action, index) => {
|
|
241
|
+
if (index > 0)
|
|
242
|
+
lines.push("");
|
|
243
|
+
lines.push(`${index + 1}. ${action.label}`);
|
|
244
|
+
lines.push(` ${action.command}`);
|
|
245
|
+
});
|
|
246
|
+
if (issue.actions.length > 0) {
|
|
247
|
+
lines.push("");
|
|
248
|
+
}
|
|
249
|
+
lines.push(`${issue.actions.length + 1}. Skip for now`);
|
|
250
|
+
return lines.join("\n");
|
|
251
|
+
}
|
|
252
|
+
function renderReadinessIssueNextSteps(issue) {
|
|
253
|
+
const lines = [issue.summary];
|
|
254
|
+
if (issue.detail && issue.kind !== "vault-locked") {
|
|
255
|
+
lines.push(` ${issue.detail}`);
|
|
256
|
+
}
|
|
257
|
+
issue.actions.forEach((action, index) => {
|
|
258
|
+
lines.push(` ${index === 0 ? "next" : "or"}: ${action.command}`);
|
|
259
|
+
});
|
|
260
|
+
return lines;
|
|
261
|
+
}
|
|
262
|
+
function selectedActionFor(answer, issue) {
|
|
263
|
+
const selected = Number.parseInt(answer.trim(), 10);
|
|
264
|
+
if (!Number.isFinite(selected))
|
|
265
|
+
return null;
|
|
266
|
+
if (selected === issue.actions.length + 1)
|
|
267
|
+
return "skip";
|
|
268
|
+
if (selected < 1 || selected > issue.actions.length)
|
|
269
|
+
return null;
|
|
270
|
+
/* v8 ignore next -- defensive: bounds were checked above, but keep sparse arrays harmless @preserve */
|
|
271
|
+
return issue.actions[selected - 1] ?? null;
|
|
272
|
+
}
|
|
273
|
+
function isExecutableAction(action) {
|
|
274
|
+
if (action.executable === false)
|
|
275
|
+
return false;
|
|
276
|
+
return !action.command.includes("<");
|
|
277
|
+
}
|
|
278
|
+
async function runGuidedReadinessRepair(reports, deps) {
|
|
279
|
+
(0, runtime_1.emitNervesEvent)({
|
|
280
|
+
level: "info",
|
|
281
|
+
component: "daemon",
|
|
282
|
+
event: "daemon.readiness_repair_start",
|
|
283
|
+
message: "guided readiness repair started",
|
|
284
|
+
meta: { reportCount: reports.length },
|
|
285
|
+
});
|
|
286
|
+
let repairsAttempted = false;
|
|
287
|
+
for (const report of reports) {
|
|
288
|
+
if (report.ok || report.issues.length === 0)
|
|
289
|
+
continue;
|
|
290
|
+
for (const issue of report.issues) {
|
|
291
|
+
if (deps.isTTY) {
|
|
292
|
+
const snapshot = (0, human_readiness_1.buildHumanReadinessSnapshot)({
|
|
293
|
+
agent: report.agent,
|
|
294
|
+
title: `Repair ${report.agent}`,
|
|
295
|
+
items: [
|
|
296
|
+
(0, human_readiness_1.readinessItemFromIssue)(issue, {
|
|
297
|
+
key: `${report.agent}:${issue.kind}`,
|
|
298
|
+
title: issue.summary,
|
|
299
|
+
}),
|
|
300
|
+
],
|
|
301
|
+
});
|
|
302
|
+
deps.writeStdout((0, human_command_screens_1.renderHumanReadinessBoard)({
|
|
303
|
+
agent: report.agent,
|
|
304
|
+
title: `Repair ${report.agent}`,
|
|
305
|
+
subtitle: "Choose the path that matches what the human actually has.",
|
|
306
|
+
snapshot,
|
|
307
|
+
isTTY: true,
|
|
308
|
+
columns: deps.stdoutColumns,
|
|
309
|
+
prompt: `Choose [1-${issue.actions.length + 1}]: `,
|
|
310
|
+
}).trimEnd());
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
deps.writeStdout(renderReadinessIssue(issue));
|
|
314
|
+
}
|
|
315
|
+
if (!deps.promptInput) {
|
|
316
|
+
deps.writeStdout(`manual repair required for ${report.agent}; run one of the commands above.`);
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
const answer = await deps.promptInput(`Choose [1-${issue.actions.length + 1}]: `);
|
|
320
|
+
const action = selectedActionFor(answer, issue);
|
|
321
|
+
if (action === "skip") {
|
|
322
|
+
deps.writeStdout(`skipped ${report.agent} for now.`);
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
if (!action) {
|
|
326
|
+
deps.writeStdout(`invalid choice for ${report.agent}; no repair attempted.`);
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
if (!isExecutableAction(action)) {
|
|
330
|
+
deps.writeStdout(`manual step for ${report.agent}: ${action.command}`);
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
if (!deps.runRepairAction) {
|
|
334
|
+
deps.writeStdout(`repair runner unavailable for ${report.agent}; run \`${action.command}\` manually.`);
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
try {
|
|
338
|
+
deps.onActionAttempted?.(report.agent, action, issue);
|
|
339
|
+
await deps.runRepairAction(report.agent, action, issue);
|
|
340
|
+
repairsAttempted = true;
|
|
341
|
+
deps.writeStdout(`repair step finished for ${report.agent}.`);
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
345
|
+
repairsAttempted = true;
|
|
346
|
+
deps.writeStdout(`repair error for ${report.agent}: ${message}`);
|
|
347
|
+
(0, runtime_1.emitNervesEvent)({
|
|
348
|
+
level: "error",
|
|
349
|
+
component: "daemon",
|
|
350
|
+
event: "daemon.readiness_repair_error",
|
|
351
|
+
message: "guided readiness repair action failed",
|
|
352
|
+
meta: { agent: report.agent, issue: issue.kind, action: action.kind, error: message },
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
(0, runtime_1.emitNervesEvent)({
|
|
358
|
+
level: "info",
|
|
359
|
+
component: "daemon",
|
|
360
|
+
event: "daemon.readiness_repair_end",
|
|
361
|
+
message: "guided readiness repair completed",
|
|
362
|
+
meta: { repairsAttempted },
|
|
363
|
+
});
|
|
364
|
+
return { repairsAttempted };
|
|
365
|
+
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.runHooks = runHooks;
|
|
4
4
|
const runtime_1 = require("../../nerves/runtime");
|
|
5
5
|
const bundle_meta_1 = require("./hooks/bundle-meta");
|
|
6
|
+
const agent_config_v2_1 = require("./hooks/agent-config-v2");
|
|
6
7
|
async function runHooks(deps) {
|
|
7
8
|
(0, runtime_1.emitNervesEvent)({
|
|
8
9
|
component: "daemon",
|
|
@@ -12,6 +13,7 @@ async function runHooks(deps) {
|
|
|
12
13
|
});
|
|
13
14
|
try {
|
|
14
15
|
deps.registerUpdateHook(bundle_meta_1.bundleMetaHook);
|
|
16
|
+
deps.registerUpdateHook(agent_config_v2_1.agentConfigV2Hook);
|
|
15
17
|
const currentVersion = deps.getPackageVersion();
|
|
16
18
|
await deps.applyPendingUpdates(deps.bundlesRoot, currentVersion);
|
|
17
19
|
(0, runtime_1.emitNervesEvent)({
|
|
@@ -39,6 +39,7 @@ const path = __importStar(require("path"));
|
|
|
39
39
|
const nerves_1 = require("../../nerves");
|
|
40
40
|
const runtime_1 = require("../../nerves/runtime");
|
|
41
41
|
const identity_1 = require("../identity");
|
|
42
|
+
const ouro_version_manager_1 = require("../versioning/ouro-version-manager");
|
|
42
43
|
const LEGACY_SHARED_RUNTIME_LOGGING = {
|
|
43
44
|
level: "info",
|
|
44
45
|
sinks: ["terminal", "ndjson"],
|
|
@@ -50,7 +51,7 @@ function defaultLoggingForProcess(processName) {
|
|
|
50
51
|
sinks: ["ndjson"],
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
|
-
if (processName === "bluebubbles") {
|
|
54
|
+
if (processName === "bluebubbles" || processName === "mail" || processName === "voice") {
|
|
54
55
|
return {
|
|
55
56
|
level: "warn",
|
|
56
57
|
sinks: ["terminal", "ndjson"],
|
|
@@ -99,32 +100,51 @@ function resolveRuntimeLoggingConfig(configPath, processName) {
|
|
|
99
100
|
sinks,
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
|
-
function
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
function machineDaemonLoggingConfigPath(homeDir) {
|
|
104
|
+
return path.join((0, ouro_version_manager_1.getOuroCliHome)(homeDir), "daemon", "logging.json");
|
|
105
|
+
}
|
|
106
|
+
function machineDaemonLogsDir(homeDir) {
|
|
107
|
+
return path.join((0, ouro_version_manager_1.getOuroCliHome)(homeDir), "daemon", "logs");
|
|
108
|
+
}
|
|
109
|
+
function resolveLoggingPathTarget(explicit) {
|
|
110
|
+
if (explicit && explicit.trim().length > 0) {
|
|
111
|
+
return { kind: "agent", agentName: explicit.trim() };
|
|
112
|
+
}
|
|
105
113
|
try {
|
|
106
|
-
return (0, identity_1.getAgentName)();
|
|
114
|
+
return { kind: "agent", agentName: (0, identity_1.getAgentName)() };
|
|
107
115
|
}
|
|
108
116
|
catch {
|
|
109
|
-
return "
|
|
117
|
+
return { kind: "machine" };
|
|
110
118
|
}
|
|
111
119
|
}
|
|
112
120
|
function configureDaemonRuntimeLogger(processName, options = {}) {
|
|
113
|
-
const
|
|
121
|
+
const pathTarget = resolveLoggingPathTarget(options.agentName);
|
|
114
122
|
const configPath = options.configPath
|
|
115
|
-
?? (
|
|
116
|
-
?
|
|
117
|
-
:
|
|
123
|
+
?? (pathTarget.kind === "machine"
|
|
124
|
+
? machineDaemonLoggingConfigPath(options.homeDir)
|
|
125
|
+
: options.homeDir
|
|
126
|
+
? path.join(options.homeDir, "AgentBundles", `${pathTarget.agentName}.ouro`, "state", "daemon", "logging.json")
|
|
127
|
+
: (0, identity_1.getAgentDaemonLoggingConfigPath)(pathTarget.agentName));
|
|
118
128
|
const config = resolveRuntimeLoggingConfig(configPath, processName);
|
|
119
|
-
const logsDir =
|
|
120
|
-
?
|
|
121
|
-
:
|
|
129
|
+
const logsDir = pathTarget.kind === "machine"
|
|
130
|
+
? machineDaemonLogsDir(options.homeDir)
|
|
131
|
+
: options.homeDir
|
|
132
|
+
? path.join(options.homeDir, "AgentBundles", `${pathTarget.agentName}.ouro`, "state", "daemon", "logs")
|
|
133
|
+
: (0, identity_1.getAgentDaemonLogsDir)(pathTarget.agentName);
|
|
134
|
+
// Rotation policy per daemon ndjson stream (Unit 1c):
|
|
135
|
+
// 25 MB threshold x 5 gzipped generations = ~30 MB peak per stream.
|
|
136
|
+
// Call sites previously relied on the implicit 50 MB default; we now pass
|
|
137
|
+
// the options object explicitly so the policy is visible at the call site.
|
|
122
138
|
const sinks = config.sinks.map((sinkName) => {
|
|
123
139
|
if (sinkName === "terminal") {
|
|
124
140
|
return (0, nerves_1.createTerminalSink)();
|
|
125
141
|
}
|
|
126
142
|
const ndjsonPath = path.join(logsDir, `${processName}.ndjson`);
|
|
127
|
-
return (0, nerves_1.createNdjsonFileSink)(ndjsonPath
|
|
143
|
+
return (0, nerves_1.createNdjsonFileSink)(ndjsonPath, {
|
|
144
|
+
maxSizeBytes: 25 * 1024 * 1024,
|
|
145
|
+
maxGenerations: 5,
|
|
146
|
+
compress: true,
|
|
147
|
+
});
|
|
128
148
|
});
|
|
129
149
|
const logger = (0, nerves_1.createLogger)({
|
|
130
150
|
level: config.level,
|
|
@@ -140,6 +160,7 @@ function configureDaemonRuntimeLogger(processName, options = {}) {
|
|
|
140
160
|
level: config.level,
|
|
141
161
|
sinks: config.sinks,
|
|
142
162
|
configPath,
|
|
163
|
+
pathTarget,
|
|
143
164
|
},
|
|
144
165
|
});
|
|
145
166
|
}
|
|
@@ -36,7 +36,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.getRuntimeMetadata = getRuntimeMetadata;
|
|
37
37
|
const crypto_1 = require("crypto");
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
|
-
const os = __importStar(require("os"));
|
|
40
39
|
const path = __importStar(require("path"));
|
|
41
40
|
const childProcess = __importStar(require("child_process"));
|
|
42
41
|
const identity_1 = require("../identity");
|
|
@@ -87,19 +86,7 @@ function readLastUpdated(repoRoot, packageJsonPath, statSyncImpl, execFileSyncIm
|
|
|
87
86
|
return { value: UNKNOWN_METADATA, source: "unknown" };
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
|
-
function
|
|
91
|
-
const homedirImpl = optionalFunction(os, "homedir");
|
|
92
|
-
if (!homedirImpl) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
try {
|
|
96
|
-
return homedirImpl.call(os);
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function listConfigTargets(bundlesRoot, secretsRoot, daemonLoggingPath, readdirSyncImpl) {
|
|
89
|
+
function listConfigTargets(bundlesRoot, daemonLoggingPath, readdirSyncImpl) {
|
|
103
90
|
if (!readdirSyncImpl)
|
|
104
91
|
return [];
|
|
105
92
|
const targets = new Set();
|
|
@@ -117,19 +104,6 @@ function listConfigTargets(bundlesRoot, secretsRoot, daemonLoggingPath, readdirS
|
|
|
117
104
|
catch {
|
|
118
105
|
// ignore unreadable bundle roots
|
|
119
106
|
}
|
|
120
|
-
if (secretsRoot) {
|
|
121
|
-
try {
|
|
122
|
-
const secretEntries = readdirSyncImpl(secretsRoot, { withFileTypes: true });
|
|
123
|
-
for (const entry of secretEntries) {
|
|
124
|
-
if (!entry.isDirectory())
|
|
125
|
-
continue;
|
|
126
|
-
targets.add(path.join(secretsRoot, entry.name, "secrets.json"));
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
// ignore unreadable secrets roots
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
107
|
return [...targets].sort();
|
|
134
108
|
}
|
|
135
109
|
function readConfigFingerprint(targets, readFileSyncImpl, existsSyncImpl) {
|
|
@@ -172,8 +146,6 @@ function readConfigFingerprint(targets, readFileSyncImpl, existsSyncImpl) {
|
|
|
172
146
|
function getRuntimeMetadata(deps = {}) {
|
|
173
147
|
const repoRoot = deps.repoRoot ?? (0, identity_1.getRepoRoot)();
|
|
174
148
|
const bundlesRoot = deps.bundlesRoot ?? (0, identity_1.getAgentBundlesRoot)();
|
|
175
|
-
const homeDir = readHomeDir();
|
|
176
|
-
const secretsRoot = deps.secretsRoot ?? (homeDir ? path.join(homeDir, ".agentsecrets") : null);
|
|
177
149
|
const daemonLoggingPath = deps.daemonLoggingPath ?? (0, identity_1.getAgentDaemonLoggingConfigPath)();
|
|
178
150
|
const readFileSyncImpl = deps.readFileSync ?? optionalFunction(fs, "readFileSync")?.bind(fs) ?? null;
|
|
179
151
|
const statSyncImpl = deps.statSync ?? optionalFunction(fs, "statSync")?.bind(fs) ?? null;
|
|
@@ -191,7 +163,7 @@ function getRuntimeMetadata(deps = {}) {
|
|
|
191
163
|
throw new Error("git unavailable");
|
|
192
164
|
}))
|
|
193
165
|
: { value: UNKNOWN_METADATA, source: "unknown" };
|
|
194
|
-
const configTargets = listConfigTargets(bundlesRoot,
|
|
166
|
+
const configTargets = listConfigTargets(bundlesRoot, daemonLoggingPath, readdirSyncImpl);
|
|
195
167
|
const configFingerprint = readConfigFingerprint(configTargets, readFileSyncImpl, existsSyncImpl);
|
|
196
168
|
(0, runtime_1.emitNervesEvent)({
|
|
197
169
|
component: "daemon",
|