@ouro.bot/cli 0.1.0-alpha.55 → 0.1.0-alpha.550
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 -19
- 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-bootstrap-drift.md +54 -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 +3555 -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 +304 -0
- package/dist/heart/config.js +114 -118
- package/dist/heart/core.js +925 -246
- package/dist/heart/cross-chat-delivery.js +3 -18
- package/dist/heart/daemon/agent-config-check.js +512 -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 +554 -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 +665 -0
- package/dist/heart/daemon/cli-exec.js +7565 -0
- package/dist/heart/daemon/cli-help.js +498 -0
- package/dist/heart/daemon/cli-parse.js +1590 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +775 -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 -1672
- package/dist/heart/daemon/daemon-entry.js +417 -2
- package/dist/heart/daemon/daemon-health.js +183 -0
- package/dist/heart/daemon/daemon-rollup.js +58 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +87 -13
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +758 -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 +844 -0
- package/dist/heart/daemon/drift-detection.js +146 -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 +102 -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 +353 -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 +52 -117
- 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 +200 -51
- 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 +255 -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-state.js +216 -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 +11 -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 +381 -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-BPr5vNuM.css +1 -0
- package/dist/mailbox-ui/assets/index-Cm51CY9W.js +61 -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 +30 -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 +995 -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 +139 -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 +816 -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 +111 -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 +561 -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 +569 -182
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +248 -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/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/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
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLI command types and dependency interface.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from daemon-cli.ts — the OuroCliCommand union and OuroCliDeps
|
|
6
|
+
* interface are the contract between parsing, execution, and default wiring.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.summarizeProviderLane = summarizeProviderLane;
|
|
4
|
+
exports.summarizeProvidersForConnect = summarizeProvidersForConnect;
|
|
5
|
+
exports.connectEntryNeedsAttention = connectEntryNeedsAttention;
|
|
6
|
+
exports.renderConnectBay = renderConnectBay;
|
|
7
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
8
|
+
const terminal_ui_1 = require("./terminal-ui");
|
|
9
|
+
const readiness_repair_1 = require("./readiness-repair");
|
|
10
|
+
const CONNECT_STATUS_PRIORITY = {
|
|
11
|
+
"needs attention": 0,
|
|
12
|
+
locked: 1,
|
|
13
|
+
"needs credentials": 2,
|
|
14
|
+
"needs setup": 3,
|
|
15
|
+
missing: 4,
|
|
16
|
+
"not attached": 5,
|
|
17
|
+
ready: 6,
|
|
18
|
+
attached: 6,
|
|
19
|
+
};
|
|
20
|
+
function escapeRegExp(value) {
|
|
21
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
22
|
+
}
|
|
23
|
+
function cleanExtractedCommand(command) {
|
|
24
|
+
const cleaned = command?.trim().replace(/[`'",;:.)]+$/g, "").trim();
|
|
25
|
+
return cleaned && cleaned.length > 0 ? cleaned : undefined;
|
|
26
|
+
}
|
|
27
|
+
function extractCommand(fixHint, commandPrefix) {
|
|
28
|
+
const escapedPrefix = escapeRegExp(commandPrefix);
|
|
29
|
+
const commandBody = `${escapedPrefix}(?=\\s|$)[^\`'"]*`;
|
|
30
|
+
const quoted = fixHint.match(new RegExp(`[\`'"](${commandBody})[\`'"]`, "i"))?.[1];
|
|
31
|
+
const unquoted = fixHint.match(new RegExp(`(${escapedPrefix}(?=\\s|$)[^\\n,;.]+)`, "i"))?.[1];
|
|
32
|
+
return cleanExtractedCommand(quoted) ?? cleanExtractedCommand(unquoted);
|
|
33
|
+
}
|
|
34
|
+
function resolveProviderHealthStatus(providerHealth) {
|
|
35
|
+
if (!providerHealth || providerHealth.ok)
|
|
36
|
+
return undefined;
|
|
37
|
+
const issue = providerHealth.issue;
|
|
38
|
+
if (issue?.kind === "vault-locked")
|
|
39
|
+
return "locked";
|
|
40
|
+
if (issue?.kind === "vault-unconfigured")
|
|
41
|
+
return "needs setup";
|
|
42
|
+
if (issue?.kind === "provider-credentials-missing")
|
|
43
|
+
return "needs credentials";
|
|
44
|
+
if (issue?.kind === "provider-live-check-failed")
|
|
45
|
+
return "needs attention";
|
|
46
|
+
const error = String(providerHealth.error).toLowerCase();
|
|
47
|
+
const fix = String(providerHealth.fix).toLowerCase();
|
|
48
|
+
if (error.includes("failed live check"))
|
|
49
|
+
return "needs attention";
|
|
50
|
+
if (error.includes("has no credentials"))
|
|
51
|
+
return "needs credentials";
|
|
52
|
+
if (error.includes("missing") && error.includes("provider"))
|
|
53
|
+
return "needs setup";
|
|
54
|
+
if (error.includes("vault is locked") || error.includes("vault locked"))
|
|
55
|
+
return "locked";
|
|
56
|
+
if (fix.includes("ouro auth verify"))
|
|
57
|
+
return "needs attention";
|
|
58
|
+
if (fix.includes("ouro auth"))
|
|
59
|
+
return "needs credentials";
|
|
60
|
+
if (fix.includes("ouro use"))
|
|
61
|
+
return "needs setup";
|
|
62
|
+
if (fix.includes("vault unlock"))
|
|
63
|
+
return "locked";
|
|
64
|
+
return "needs attention";
|
|
65
|
+
}
|
|
66
|
+
function resolveProviderHealthCommand(providerHealth, status) {
|
|
67
|
+
const issueCommand = (0, readiness_repair_1.preferredConnectRepairAction)(providerHealth?.issue)?.command;
|
|
68
|
+
if (issueCommand)
|
|
69
|
+
return issueCommand;
|
|
70
|
+
const fixHint = providerHealth?.fix;
|
|
71
|
+
if (!fixHint)
|
|
72
|
+
return undefined;
|
|
73
|
+
const prefixes = status === "locked"
|
|
74
|
+
? ["ouro vault unlock", "ouro vault replace", "ouro vault recover"]
|
|
75
|
+
: status === "needs credentials"
|
|
76
|
+
? ["ouro auth", "ouro connect", "ouro provider refresh", "ouro up"]
|
|
77
|
+
: status === "needs setup"
|
|
78
|
+
? ["ouro use", "ouro connect", "ouro auth", "ouro up"]
|
|
79
|
+
: ["ouro auth verify", "ouro auth", "ouro provider refresh", "ouro use", "ouro connect", "ouro vault unlock", "ouro up"];
|
|
80
|
+
for (const prefix of prefixes) {
|
|
81
|
+
const command = extractCommand(fixHint, prefix);
|
|
82
|
+
if (command)
|
|
83
|
+
return command;
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
function providerHealthTargetLane(providerHealth) {
|
|
88
|
+
const issue = providerHealth?.issue;
|
|
89
|
+
const actionLane = issue?.actions
|
|
90
|
+
.map((action) => "lane" in action && action.lane ? action.lane : undefined)
|
|
91
|
+
.find((lane) => lane === "outward" || lane === "inner");
|
|
92
|
+
if (actionLane)
|
|
93
|
+
return actionLane;
|
|
94
|
+
const text = [issue?.summary, issue?.detail, providerHealth?.error]
|
|
95
|
+
.filter(Boolean)
|
|
96
|
+
.join(" ")
|
|
97
|
+
.toLowerCase();
|
|
98
|
+
if (/\boutward provider\b/.test(text) || /\boutward lane\b/.test(text))
|
|
99
|
+
return "outward";
|
|
100
|
+
if (/\binner provider\b/.test(text) || /\binner lane\b/.test(text))
|
|
101
|
+
return "inner";
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
function providerHealthAppliesToLane(providerHealth, lane) {
|
|
105
|
+
const targetLane = providerHealthTargetLane(providerHealth);
|
|
106
|
+
return !targetLane || targetLane === lane.lane;
|
|
107
|
+
}
|
|
108
|
+
function providerHealthDetail(providerHealth, status) {
|
|
109
|
+
if (status === "locked")
|
|
110
|
+
return "vault locked on this machine";
|
|
111
|
+
if (status === "needs credentials")
|
|
112
|
+
return "credentials missing";
|
|
113
|
+
if (status === "needs setup") {
|
|
114
|
+
return providerHealth?.issue?.detail ?? providerHealth?.error ?? "needs setup";
|
|
115
|
+
}
|
|
116
|
+
const detail = providerHealth?.issue?.detail ?? providerHealth?.error;
|
|
117
|
+
if (!detail)
|
|
118
|
+
return "live check needs attention";
|
|
119
|
+
return /failed live check/i.test(detail) ? detail : `failed live check: ${detail}`;
|
|
120
|
+
}
|
|
121
|
+
function isProblemStatus(status) {
|
|
122
|
+
return status !== "ready" && status !== "attached";
|
|
123
|
+
}
|
|
124
|
+
function providerEntrySummary(entry) {
|
|
125
|
+
return entry.description ?? "Selected provider lanes for this machine.";
|
|
126
|
+
}
|
|
127
|
+
function providerEntryDetailLines(entry) {
|
|
128
|
+
const lines = [];
|
|
129
|
+
if (entry.nextNote && !/^(Outward|Inner) lane: /.test(entry.nextNote)) {
|
|
130
|
+
lines.push(entry.nextNote);
|
|
131
|
+
}
|
|
132
|
+
if (entry.laneSummaries && entry.laneSummaries.length > 0) {
|
|
133
|
+
for (const lane of entry.laneSummaries) {
|
|
134
|
+
const laneLabel = lane.lane === "outward" ? "Outward lane" : "Inner lane";
|
|
135
|
+
lines.push(`${laneLabel}: ${lane.title} — ${lane.detail}`);
|
|
136
|
+
}
|
|
137
|
+
return lines;
|
|
138
|
+
}
|
|
139
|
+
return [...lines, ...(entry.detailLines ?? [])];
|
|
140
|
+
}
|
|
141
|
+
function capabilityEntryDetailLines(entry) {
|
|
142
|
+
return [
|
|
143
|
+
...(entry.detailLines ?? []),
|
|
144
|
+
...(entry.nextNote ? [entry.nextNote] : []),
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
function entryToWizardItem(entry) {
|
|
148
|
+
return {
|
|
149
|
+
key: entry.option,
|
|
150
|
+
label: entry.name,
|
|
151
|
+
status: entry.status,
|
|
152
|
+
...(entry.section === "Providers"
|
|
153
|
+
? { summary: providerEntrySummary(entry) }
|
|
154
|
+
: entry.description
|
|
155
|
+
? { summary: entry.description }
|
|
156
|
+
: {}),
|
|
157
|
+
detailLines: entry.section === "Providers"
|
|
158
|
+
? providerEntryDetailLines(entry)
|
|
159
|
+
: capabilityEntryDetailLines(entry),
|
|
160
|
+
...(entry.nextAction ? { command: entry.nextAction } : {}),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function nextStepFor(entries) {
|
|
164
|
+
const nextEntry = entries.find((entry) => isProblemStatus(entry.status));
|
|
165
|
+
if (!nextEntry) {
|
|
166
|
+
return {
|
|
167
|
+
label: "Everything here is already connected.",
|
|
168
|
+
detail: "Pick any capability if you want to review it, refresh it, or change its setup.",
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
label: `Start with ${nextEntry.name}.`,
|
|
173
|
+
detail: nextEntry.nextNote ?? nextEntry.description ?? `Status: ${nextEntry.status}.`,
|
|
174
|
+
command: nextEntry.nextAction,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function sectionToWizard(entries, section, summary) {
|
|
178
|
+
return {
|
|
179
|
+
title: section,
|
|
180
|
+
summary,
|
|
181
|
+
items: entries.filter((entry) => entry.section === section).map((entry) => entryToWizardItem(entry)),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function summarizeProviderLane(agent, lane, providerHealth) {
|
|
185
|
+
const providerHealthStatus = resolveProviderHealthStatus(providerHealth);
|
|
186
|
+
const providerHealthCommand = resolveProviderHealthCommand(providerHealth, providerHealthStatus);
|
|
187
|
+
if (lane.status === "unconfigured") {
|
|
188
|
+
return {
|
|
189
|
+
lane: lane.lane,
|
|
190
|
+
status: "needs setup",
|
|
191
|
+
title: "choose provider and model",
|
|
192
|
+
detail: "needs setup",
|
|
193
|
+
action: lane.repairCommand,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const fallbackAction = providerHealthCommand ?? lane.credential.repairCommand;
|
|
197
|
+
if (providerHealth?.ok) {
|
|
198
|
+
return {
|
|
199
|
+
lane: lane.lane,
|
|
200
|
+
status: "ready",
|
|
201
|
+
title: `${lane.provider} / ${lane.model}`,
|
|
202
|
+
detail: "ready",
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (providerHealthStatus && providerHealthAppliesToLane(providerHealth, lane)) {
|
|
206
|
+
return {
|
|
207
|
+
lane: lane.lane,
|
|
208
|
+
status: providerHealthStatus,
|
|
209
|
+
title: `${lane.provider} / ${lane.model}`,
|
|
210
|
+
detail: providerHealthDetail(providerHealth, providerHealthStatus),
|
|
211
|
+
action: fallbackAction,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
if (lane.credential.status === "missing") {
|
|
215
|
+
return {
|
|
216
|
+
lane: lane.lane,
|
|
217
|
+
status: "needs credentials",
|
|
218
|
+
title: `${lane.provider} / ${lane.model}`,
|
|
219
|
+
detail: "credentials missing",
|
|
220
|
+
action: fallbackAction,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
if (lane.credential.status === "invalid-pool") {
|
|
224
|
+
return {
|
|
225
|
+
lane: lane.lane,
|
|
226
|
+
status: providerHealthStatus === "locked" ? "locked" : "needs attention",
|
|
227
|
+
title: `${lane.provider} / ${lane.model}`,
|
|
228
|
+
detail: providerHealthStatus === "locked" ? "vault locked on this machine" : "vault unavailable",
|
|
229
|
+
action: fallbackAction,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
if (lane.readiness.status === "failed") {
|
|
233
|
+
return {
|
|
234
|
+
lane: lane.lane,
|
|
235
|
+
status: "needs attention",
|
|
236
|
+
title: `${lane.provider} / ${lane.model}`,
|
|
237
|
+
detail: `failed live check: ${lane.readiness.error ?? "unknown error"}`,
|
|
238
|
+
action: providerHealthCommand ?? providerHealth?.fix ?? `ouro auth --agent ${agent} --provider ${lane.provider}`,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
if (lane.readiness.status === "stale") {
|
|
242
|
+
return {
|
|
243
|
+
lane: lane.lane,
|
|
244
|
+
status: "needs attention",
|
|
245
|
+
title: `${lane.provider} / ${lane.model}`,
|
|
246
|
+
detail: ["live check is stale", lane.readiness.reason].filter(Boolean).join(": "),
|
|
247
|
+
action: providerHealth?.fix,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
if (lane.readiness.status === "ready") {
|
|
251
|
+
return {
|
|
252
|
+
lane: lane.lane,
|
|
253
|
+
status: "ready",
|
|
254
|
+
title: `${lane.provider} / ${lane.model}`,
|
|
255
|
+
detail: "ready",
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
lane: lane.lane,
|
|
260
|
+
status: "needs attention",
|
|
261
|
+
title: `${lane.provider} / ${lane.model}`,
|
|
262
|
+
detail: "live check did not complete yet",
|
|
263
|
+
action: providerHealth?.fix,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
function summarizeProvidersForConnect(agent, visibility, providerHealth) {
|
|
267
|
+
const laneSummaries = visibility.lanes.map((lane) => summarizeProviderLane(agent, lane, providerHealth));
|
|
268
|
+
const worstLaneStatus = laneSummaries.reduce((worst, lane) => CONNECT_STATUS_PRIORITY[lane.status] < CONNECT_STATUS_PRIORITY[worst] ? lane.status : worst, "ready");
|
|
269
|
+
const providerHealthStatus = resolveProviderHealthStatus(providerHealth);
|
|
270
|
+
const providerHealthCommand = resolveProviderHealthCommand(providerHealth, providerHealthStatus);
|
|
271
|
+
const nextLane = laneSummaries.find((lane) => isProblemStatus(lane.status));
|
|
272
|
+
return {
|
|
273
|
+
status: providerHealthStatus ?? worstLaneStatus,
|
|
274
|
+
laneSummaries,
|
|
275
|
+
detailLines: laneSummaries.flatMap((lane) => [
|
|
276
|
+
`${lane.lane === "outward" ? "Outward lane" : "Inner lane"}: ${lane.title}`,
|
|
277
|
+
lane.detail,
|
|
278
|
+
]),
|
|
279
|
+
nextAction: providerHealthCommand ?? nextLane?.action,
|
|
280
|
+
nextNote: providerHealthStatus === "locked"
|
|
281
|
+
? "Unlock this agent's credential vault on this machine."
|
|
282
|
+
: nextLane
|
|
283
|
+
? `${nextLane.lane === "outward" ? "Outward lane" : "Inner lane"}: ${nextLane.detail}`
|
|
284
|
+
: undefined,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
function connectEntryNeedsAttention(entry) {
|
|
288
|
+
return isProblemStatus(entry.status);
|
|
289
|
+
}
|
|
290
|
+
function renderConnectBay(entries, options) {
|
|
291
|
+
(0, runtime_1.emitNervesEvent)({
|
|
292
|
+
component: "daemon",
|
|
293
|
+
event: "daemon.connect_bay_rendered",
|
|
294
|
+
message: "rendered connect bay",
|
|
295
|
+
meta: {
|
|
296
|
+
agent: options.agent,
|
|
297
|
+
isTTY: options.isTTY,
|
|
298
|
+
entryCount: entries.length,
|
|
299
|
+
columns: options.columns ?? null,
|
|
300
|
+
},
|
|
301
|
+
});
|
|
302
|
+
return (0, terminal_ui_1.renderTerminalWizard)({
|
|
303
|
+
isTTY: options.isTTY,
|
|
304
|
+
columns: options.columns,
|
|
305
|
+
masthead: {
|
|
306
|
+
subtitle: "Set up connections one step at a time.",
|
|
307
|
+
},
|
|
308
|
+
title: `Connect ${options.agent}`,
|
|
309
|
+
summary: "Choose one capability to bring online. Each row tells you whether Ouro checked it live just now or is showing saved setup on this machine.",
|
|
310
|
+
nextStep: nextStepFor(entries),
|
|
311
|
+
sections: [
|
|
312
|
+
sectionToWizard(entries, "Providers", "Selected outward and inner lanes for this machine."),
|
|
313
|
+
sectionToWizard(entries, "Portable", "These travel with the agent bundle when their secrets are portable."),
|
|
314
|
+
sectionToWizard(entries, "This machine", "These depend on local attachments or machine-specific setup."),
|
|
315
|
+
],
|
|
316
|
+
footerLines: [
|
|
317
|
+
"6. Not now",
|
|
318
|
+
"Choose a number, or type the capability name.",
|
|
319
|
+
],
|
|
320
|
+
prompt: options.prompt,
|
|
321
|
+
suppressEvent: true,
|
|
322
|
+
});
|
|
323
|
+
}
|