@ouro.bot/cli 0.1.0-alpha.56 → 0.1.0-alpha.560
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 +3596 -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 +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/senses/voice/elevenlabs.js +125 -0
- package/dist/senses/voice/index.js +22 -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 +133 -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
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.credentialToolDefinitions = void 0;
|
|
37
|
+
const crypto = __importStar(require("node:crypto"));
|
|
38
|
+
const credential_access_1 = require("./credential-access");
|
|
39
|
+
const bitwarden_store_1 = require("./bitwarden-store");
|
|
40
|
+
const runtime_1 = require("../nerves/runtime");
|
|
41
|
+
const DEFAULT_PASSWORD_LENGTH = 24;
|
|
42
|
+
const MIN_PASSWORD_LENGTH = 12;
|
|
43
|
+
const MAX_PASSWORD_LENGTH = 128;
|
|
44
|
+
const PASSWORD_CHARSETS = {
|
|
45
|
+
lower: "abcdefghijkmnopqrstuvwxyz",
|
|
46
|
+
upper: "ABCDEFGHJKLMNPQRSTUVWXYZ",
|
|
47
|
+
digits: "23456789",
|
|
48
|
+
symbols: "!@#$%^&*()-_=+[]{}:,.?",
|
|
49
|
+
};
|
|
50
|
+
function sanitizeCredentialToolError(err, secrets = []) {
|
|
51
|
+
const raw = err instanceof Error ? err.message : String(err);
|
|
52
|
+
return (0, bitwarden_store_1.sanitizeCredentialErrorDetail)(raw, { secrets });
|
|
53
|
+
}
|
|
54
|
+
function requireTrimmedText(value, fieldName) {
|
|
55
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
56
|
+
throw new Error(`${fieldName} must be a non-empty string.`);
|
|
57
|
+
}
|
|
58
|
+
return value.trim();
|
|
59
|
+
}
|
|
60
|
+
function requireNonBlankSecret(value, fieldName) {
|
|
61
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
62
|
+
throw new Error(`${fieldName} must be a non-empty string.`);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
function optionalTrimmedText(value, fieldName) {
|
|
67
|
+
if (value === undefined)
|
|
68
|
+
return undefined;
|
|
69
|
+
if (typeof value !== "string") {
|
|
70
|
+
throw new Error(`${fieldName} must be a string if provided.`);
|
|
71
|
+
}
|
|
72
|
+
const trimmed = value.trim();
|
|
73
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
74
|
+
}
|
|
75
|
+
function resolveVaultItemArg(args, legacyFieldName = "domain") {
|
|
76
|
+
if (args.item !== undefined)
|
|
77
|
+
return requireTrimmedText(args.item, "item");
|
|
78
|
+
return requireTrimmedText(args[legacyFieldName], legacyFieldName);
|
|
79
|
+
}
|
|
80
|
+
function parsePasswordLength(value) {
|
|
81
|
+
if (value === undefined || value === null || value === "")
|
|
82
|
+
return DEFAULT_PASSWORD_LENGTH;
|
|
83
|
+
const parsed = typeof value === "number" ? value : Number(value);
|
|
84
|
+
if (!Number.isInteger(parsed) || parsed < MIN_PASSWORD_LENGTH || parsed > MAX_PASSWORD_LENGTH) {
|
|
85
|
+
throw new Error(`length must be an integer between ${MIN_PASSWORD_LENGTH} and ${MAX_PASSWORD_LENGTH}.`);
|
|
86
|
+
}
|
|
87
|
+
return parsed;
|
|
88
|
+
}
|
|
89
|
+
function parseSymbolsFlag(value) {
|
|
90
|
+
if (value === undefined || value === null || value === "")
|
|
91
|
+
return true;
|
|
92
|
+
if (typeof value === "boolean")
|
|
93
|
+
return value;
|
|
94
|
+
/* v8 ignore next -- handler tests cover string "true"/"false"; branch mapping is noisy here @preserve */
|
|
95
|
+
if (typeof value === "string") {
|
|
96
|
+
const normalized = value.trim().toLowerCase();
|
|
97
|
+
if (normalized === "true")
|
|
98
|
+
return true;
|
|
99
|
+
if (normalized === "false")
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
throw new Error("symbols must be true or false.");
|
|
103
|
+
}
|
|
104
|
+
function randomChar(alphabet) {
|
|
105
|
+
/* v8 ignore next -- crypto.randomInt stays within bounds; fallback is defensive @preserve */
|
|
106
|
+
return alphabet[crypto.randomInt(0, alphabet.length)] ?? alphabet[0];
|
|
107
|
+
}
|
|
108
|
+
function secureShuffle(chars) {
|
|
109
|
+
for (let index = chars.length - 1; index > 0; index -= 1) {
|
|
110
|
+
const swapIndex = crypto.randomInt(0, index + 1);
|
|
111
|
+
[chars[index], chars[swapIndex]] = [chars[swapIndex], chars[index]];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function generatePassword(length, symbols) {
|
|
115
|
+
const charsets = [
|
|
116
|
+
PASSWORD_CHARSETS.lower,
|
|
117
|
+
PASSWORD_CHARSETS.upper,
|
|
118
|
+
PASSWORD_CHARSETS.digits,
|
|
119
|
+
...(symbols ? [PASSWORD_CHARSETS.symbols] : []),
|
|
120
|
+
];
|
|
121
|
+
const chars = charsets.map((alphabet) => randomChar(alphabet));
|
|
122
|
+
const combinedAlphabet = charsets.join("");
|
|
123
|
+
while (chars.length < length) {
|
|
124
|
+
chars.push(randomChar(combinedAlphabet));
|
|
125
|
+
}
|
|
126
|
+
secureShuffle(chars);
|
|
127
|
+
return chars.join("");
|
|
128
|
+
}
|
|
129
|
+
exports.credentialToolDefinitions = [
|
|
130
|
+
{
|
|
131
|
+
tool: {
|
|
132
|
+
type: "function",
|
|
133
|
+
function: {
|
|
134
|
+
name: "credential_get",
|
|
135
|
+
description: "Get credential metadata for a vault item name/path. Returns username, notes, and creation date. Never returns passwords — the credential gateway handles secret injection internally.",
|
|
136
|
+
parameters: {
|
|
137
|
+
type: "object",
|
|
138
|
+
properties: {
|
|
139
|
+
item: {
|
|
140
|
+
type: "string",
|
|
141
|
+
description: "Vault item name/path to look up (e.g. 'airbnb.com' or 'ops/porkbun/account')",
|
|
142
|
+
},
|
|
143
|
+
domain: {
|
|
144
|
+
type: "string",
|
|
145
|
+
description: "compatibility alias for item when the vault item name is a service domain",
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
required: ["domain"],
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
handler: async (args) => {
|
|
153
|
+
const itemName = resolveVaultItemArg(args);
|
|
154
|
+
(0, runtime_1.emitNervesEvent)({
|
|
155
|
+
component: "repertoire",
|
|
156
|
+
event: "repertoire.credential_tool_call",
|
|
157
|
+
message: "credential_get invoked",
|
|
158
|
+
meta: { tool: "credential_get", domain: itemName, item: itemName },
|
|
159
|
+
});
|
|
160
|
+
try {
|
|
161
|
+
const store = (0, credential_access_1.getCredentialStore)();
|
|
162
|
+
const meta = await store.get(itemName);
|
|
163
|
+
if (!meta) {
|
|
164
|
+
return `No credential found for "${itemName}".`;
|
|
165
|
+
}
|
|
166
|
+
return JSON.stringify(meta, null, 2);
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
/* v8 ignore next -- defensive: store.get wraps errors @preserve */
|
|
170
|
+
return `Credential error: ${err instanceof Error ? err.message : String(err)}`;
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
summaryKeys: ["domain"],
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
tool: {
|
|
177
|
+
type: "function",
|
|
178
|
+
function: {
|
|
179
|
+
name: "credential_generate_password",
|
|
180
|
+
description: "Generate a strong password for a new account. Use it to complete signup, then immediately call credential_store with the exact accepted password so the vault becomes the source of truth.",
|
|
181
|
+
parameters: {
|
|
182
|
+
type: "object",
|
|
183
|
+
properties: {
|
|
184
|
+
domain: {
|
|
185
|
+
type: "string",
|
|
186
|
+
description: "Domain this password will be used for (e.g. 'airbnb.com')",
|
|
187
|
+
},
|
|
188
|
+
length: {
|
|
189
|
+
type: "integer",
|
|
190
|
+
description: "Optional password length. Defaults to 24. Allowed range: 12 to 128.",
|
|
191
|
+
},
|
|
192
|
+
symbols: {
|
|
193
|
+
type: "boolean",
|
|
194
|
+
description: "Whether to include punctuation symbols. Defaults to true.",
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
required: ["domain"],
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
handler: async (args) => {
|
|
202
|
+
let domain = "";
|
|
203
|
+
try {
|
|
204
|
+
domain = requireTrimmedText(args.domain, "domain");
|
|
205
|
+
const length = parsePasswordLength(args.length);
|
|
206
|
+
const symbols = parseSymbolsFlag(args.symbols);
|
|
207
|
+
(0, runtime_1.emitNervesEvent)({
|
|
208
|
+
component: "repertoire",
|
|
209
|
+
event: "repertoire.credential_tool_call",
|
|
210
|
+
message: "credential_generate_password invoked",
|
|
211
|
+
meta: { tool: "credential_generate_password", domain, length, symbols },
|
|
212
|
+
});
|
|
213
|
+
const password = generatePassword(length, symbols);
|
|
214
|
+
return JSON.stringify({
|
|
215
|
+
domain,
|
|
216
|
+
password,
|
|
217
|
+
length,
|
|
218
|
+
symbols,
|
|
219
|
+
nextStep: "Use this password for signup, then call credential_store with the exact accepted password.",
|
|
220
|
+
}, null, 2);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
return `Credential password generation error: ${sanitizeCredentialToolError(err)}`;
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
summaryKeys: ["domain", "length", "symbols"],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
tool: {
|
|
230
|
+
type: "function",
|
|
231
|
+
function: {
|
|
232
|
+
name: "credential_store",
|
|
233
|
+
description: "Store credentials in a vault item name/path after the agent acquired or just used them successfully. Prefer credential_generate_password for new passwords, then call this tool once the site accepts the exact password. Stored passwords are never returned later — only metadata is visible.",
|
|
234
|
+
parameters: {
|
|
235
|
+
type: "object",
|
|
236
|
+
properties: {
|
|
237
|
+
item: {
|
|
238
|
+
type: "string",
|
|
239
|
+
description: "Vault item name/path to store under; domains are examples, not the schema",
|
|
240
|
+
},
|
|
241
|
+
domain: {
|
|
242
|
+
type: "string",
|
|
243
|
+
description: "compatibility alias for item when the vault item name is a service domain",
|
|
244
|
+
},
|
|
245
|
+
username: {
|
|
246
|
+
type: "string",
|
|
247
|
+
description: "Username or email for the account",
|
|
248
|
+
},
|
|
249
|
+
password: {
|
|
250
|
+
type: "string",
|
|
251
|
+
description: "Password for the account",
|
|
252
|
+
},
|
|
253
|
+
notes: {
|
|
254
|
+
type: "string",
|
|
255
|
+
description: "Optional human/agent orientation notes about this credential; not parsed by code",
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
required: ["domain", "username", "password"],
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
handler: async (args) => {
|
|
263
|
+
let domain = "";
|
|
264
|
+
let username = "";
|
|
265
|
+
let password = "";
|
|
266
|
+
let notes;
|
|
267
|
+
const itemNameForEvent = typeof args.item === "string" && args.item.trim() ? args.item.trim() : args.domain;
|
|
268
|
+
(0, runtime_1.emitNervesEvent)({
|
|
269
|
+
component: "repertoire",
|
|
270
|
+
event: "repertoire.credential_tool_call",
|
|
271
|
+
message: "credential_store invoked",
|
|
272
|
+
meta: { tool: "credential_store", domain: itemNameForEvent, item: itemNameForEvent },
|
|
273
|
+
});
|
|
274
|
+
try {
|
|
275
|
+
domain = resolveVaultItemArg(args);
|
|
276
|
+
username = requireTrimmedText(args.username, "username");
|
|
277
|
+
password = requireNonBlankSecret(args.password, "password");
|
|
278
|
+
notes = optionalTrimmedText(args.notes, "notes");
|
|
279
|
+
const store = (0, credential_access_1.getCredentialStore)();
|
|
280
|
+
await store.store(domain, {
|
|
281
|
+
username,
|
|
282
|
+
password,
|
|
283
|
+
notes,
|
|
284
|
+
});
|
|
285
|
+
return `Credentials stored and verified for "${domain}".`;
|
|
286
|
+
}
|
|
287
|
+
catch (err) {
|
|
288
|
+
/* v8 ignore next -- defensive: store.store wraps errors @preserve */
|
|
289
|
+
return `Credential store error: ${sanitizeCredentialToolError(err, [password, username, notes])}`;
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
summaryKeys: ["domain"],
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
tool: {
|
|
296
|
+
type: "function",
|
|
297
|
+
function: {
|
|
298
|
+
name: "credential_list",
|
|
299
|
+
description: "List stored vault items. Returns metadata only (item/domain name, username, notes, creation date). Never returns passwords.",
|
|
300
|
+
parameters: {
|
|
301
|
+
type: "object",
|
|
302
|
+
properties: {
|
|
303
|
+
search: {
|
|
304
|
+
type: "string",
|
|
305
|
+
description: "Optional search filter to match against vault item names/paths",
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
handler: async (args) => {
|
|
312
|
+
(0, runtime_1.emitNervesEvent)({
|
|
313
|
+
component: "repertoire",
|
|
314
|
+
event: "repertoire.credential_tool_call",
|
|
315
|
+
message: "credential_list invoked",
|
|
316
|
+
meta: { tool: "credential_list" },
|
|
317
|
+
});
|
|
318
|
+
try {
|
|
319
|
+
const store = (0, credential_access_1.getCredentialStore)();
|
|
320
|
+
let items = await store.list();
|
|
321
|
+
// Client-side search filter
|
|
322
|
+
if (args.search) {
|
|
323
|
+
const term = args.search.toLowerCase();
|
|
324
|
+
items = items.filter((item) => item.domain.toLowerCase().includes(term) ||
|
|
325
|
+
(item.username && item.username.toLowerCase().includes(term)));
|
|
326
|
+
}
|
|
327
|
+
return JSON.stringify(items, null, 2);
|
|
328
|
+
}
|
|
329
|
+
catch (err) {
|
|
330
|
+
/* v8 ignore next -- defensive: store.list wraps errors @preserve */
|
|
331
|
+
return `Credential list error: ${err instanceof Error ? err.message : String(err)}`;
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
summaryKeys: ["search"],
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
tool: {
|
|
338
|
+
type: "function",
|
|
339
|
+
function: {
|
|
340
|
+
name: "credential_delete",
|
|
341
|
+
description: "Delete stored credentials for a vault item name/path.",
|
|
342
|
+
parameters: {
|
|
343
|
+
type: "object",
|
|
344
|
+
properties: {
|
|
345
|
+
item: {
|
|
346
|
+
type: "string",
|
|
347
|
+
description: "Vault item name/path whose credentials should be deleted",
|
|
348
|
+
},
|
|
349
|
+
domain: {
|
|
350
|
+
type: "string",
|
|
351
|
+
description: "compatibility alias for item when the vault item name is a service domain",
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
required: ["domain"],
|
|
355
|
+
},
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
handler: async (args) => {
|
|
359
|
+
(0, runtime_1.emitNervesEvent)({
|
|
360
|
+
component: "repertoire",
|
|
361
|
+
event: "repertoire.credential_tool_call",
|
|
362
|
+
message: "credential_delete invoked",
|
|
363
|
+
meta: { tool: "credential_delete", domain: args.domain },
|
|
364
|
+
});
|
|
365
|
+
try {
|
|
366
|
+
const itemName = resolveVaultItemArg(args);
|
|
367
|
+
const store = (0, credential_access_1.getCredentialStore)();
|
|
368
|
+
const deleted = await store.delete(itemName);
|
|
369
|
+
if (deleted) {
|
|
370
|
+
return `Credentials for "${itemName}" deleted.`;
|
|
371
|
+
}
|
|
372
|
+
return `No credential found for "${itemName}".`;
|
|
373
|
+
}
|
|
374
|
+
catch (err) {
|
|
375
|
+
/* v8 ignore next -- defensive: store.delete wraps errors @preserve */
|
|
376
|
+
return `Credential delete error: ${err instanceof Error ? err.message : String(err)}`;
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
summaryKeys: ["domain"],
|
|
380
|
+
},
|
|
381
|
+
];
|