@ouro.bot/cli 0.1.0-alpha.92 → 0.1.0-alpha.921
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/LICENSE +21 -0
- package/README.md +154 -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/assets/bluebubbles-host +264 -0
- package/assets/sanctuary-host-launcher.sh +16 -0
- package/changelog.json +5826 -16
- package/deploy/unraid/Dockerfile +58 -0
- package/deploy/unraid/README.txt +2997 -0
- package/deploy/unraid/audit-container-spec.sh +4 -0
- package/deploy/unraid/container-runtime.json +1 -0
- package/deploy/unraid/docker-man-template-transaction.mjs +711 -0
- package/deploy/unraid/docker-man-template-xml.cjs +105 -0
- package/deploy/unraid/migrate-sanctuary-bundle.mjs +60 -0
- package/deploy/unraid/ouro-events/bootstrap-spool.sh +92 -0
- package/deploy/unraid/ouro-events/emit-event.mjs +310 -0
- package/deploy/unraid/ouro-events/emit-usenet-event.sh +54 -0
- package/deploy/unraid/ouro-events/install-usenet-guard.sh +435 -0
- package/deploy/unraid/ouro-events/usenet-health.sh +176 -0
- package/deploy/unraid/sanctuary-acceptance-adapter.sh +43 -0
- package/deploy/unraid/sanctuary-acceptance-contract.json +198 -0
- package/deploy/unraid/sanctuary-acceptance-harness.sh +23 -0
- package/deploy/unraid/sanctuary-authority-installation.json +36 -0
- package/deploy/unraid/sanctuary-authority-service.sh +30 -0
- package/deploy/unraid/sanctuary-butler-upgrade.mjs +1254 -0
- package/deploy/unraid/sanctuary-deployment-target.mjs +710 -0
- package/deploy/unraid/sanctuary-replay-gate.mjs +1564 -0
- package/deploy/unraid/sanctuary-safe-rename.py +24 -0
- package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2086 -0
- package/deploy/unraid/sanctuary-unit16-run.sh +560 -0
- package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
- package/deploy/unraid/sanctuary.ouro/agent.json +66 -0
- package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
- package/deploy/unraid/sanctuary.ouro/awaiting/house-care-sweep.md +17 -0
- package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
- package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
- package/deploy/unraid/sanctuary.ouro/mcp/media-mcp.mjs +2231 -0
- package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
- package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
- package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +5 -0
- package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +33 -0
- package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +27 -0
- package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +22 -0
- package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
- package/deploy/unraid/sanctuary.ouro/tool-profiles.json +232 -0
- package/deploy/unraid/sanctuary.xml +30 -0
- package/dist/a2a/card.js +57 -0
- package/dist/a2a/client.js +250 -0
- package/dist/a2a/config.js +50 -0
- package/dist/a2a/delegated-command-grants.js +93 -0
- package/dist/a2a/delegated-command.js +197 -0
- package/dist/a2a/delegation-stores.js +56 -0
- package/dist/a2a/did-resolution.js +93 -0
- package/dist/a2a/escalation-grants.js +84 -0
- package/dist/a2a/escalation-wiring.js +60 -0
- package/dist/a2a/identity.js +258 -0
- package/dist/a2a/inbound-share.js +110 -0
- package/dist/a2a/mission-result-wire.js +196 -0
- package/dist/a2a/onboarding.js +133 -0
- package/dist/a2a/operator-trust.js +382 -0
- package/dist/a2a/outbox-client.js +57 -0
- package/dist/a2a/outbox-store.js +188 -0
- package/dist/a2a/outbox-wire.js +95 -0
- package/dist/a2a/pin-store.js +132 -0
- package/dist/a2a/replay-grant-holders.js +33 -0
- package/dist/a2a/replay-harness.js +188 -0
- package/dist/a2a/resolution-proof.js +53 -0
- package/dist/a2a/sealed-chat.js +113 -0
- package/dist/a2a/seen-ledger.js +120 -0
- package/dist/a2a/server.js +771 -0
- package/dist/a2a/task-store.js +69 -0
- package/dist/a2a/transport.js +45 -0
- package/dist/a2a/trust-commands.js +203 -0
- package/dist/a2a/trusted-files.js +185 -0
- package/dist/a2a/types.js +3 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +360 -0
- package/dist/arc/episodes.js +118 -0
- package/dist/arc/evolution.js +490 -0
- package/dist/arc/flight-recorder.js +1034 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +386 -0
- package/dist/arc/packets.js +336 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/commerce/store.js +755 -0
- package/dist/commerce/types.js +3 -0
- package/dist/heart/active-work.js +798 -40
- package/dist/heart/agent-entry.js +252 -3
- package/dist/heart/approval-files.js +113 -0
- package/dist/heart/approval-store.js +960 -0
- 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 +18 -0
- package/dist/heart/attachments/sources/telegram.js +71 -0
- package/dist/heart/attachments/store.js +132 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +495 -0
- package/dist/heart/autonomy-budget.js +478 -0
- package/dist/heart/awaiting/a2a-await-delivery.js +109 -0
- package/dist/heart/awaiting/await-alert.js +152 -0
- package/dist/heart/awaiting/await-expiry.js +143 -0
- package/dist/heart/awaiting/await-loader.js +91 -0
- package/dist/heart/awaiting/await-parser.js +152 -0
- package/dist/heart/awaiting/await-runtime-state.js +111 -0
- package/dist/heart/awaiting/await-scheduler.js +391 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bluebubbles-host-account.js +78 -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 +44 -18
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +174 -131
- package/dist/heart/context-loss-gauntlet.js +387 -0
- package/dist/heart/context-loss-sentinel.js +1159 -0
- package/dist/heart/core.js +2364 -578
- package/dist/heart/cross-chat-delivery.js +9 -22
- package/dist/heart/daemon/agent-config-check.js +451 -0
- package/dist/heart/daemon/agent-discovery.js +283 -3
- package/dist/heart/daemon/agent-home.js +319 -0
- package/dist/heart/daemon/agent-service.js +542 -0
- package/dist/heart/daemon/agentic-repair.js +547 -0
- package/dist/heart/daemon/await-private-wake.js +59 -0
- package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
- package/dist/heart/daemon/bluebubbles-host.js +273 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +180 -0
- package/dist/heart/daemon/cli-arg-redaction.js +26 -0
- package/dist/heart/daemon/cli-defaults.js +876 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +9199 -0
- package/dist/heart/daemon/cli-help.js +735 -0
- package/dist/heart/daemon/cli-parse.js +3211 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +819 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
- package/dist/heart/daemon/container-healthcheck.js +112 -0
- package/dist/heart/daemon/container-runtime.js +97 -0
- package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
- package/dist/heart/daemon/container-spec-auditor.js +235 -0
- package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
- package/dist/heart/daemon/daemon-cli.js +29 -2350
- package/dist/heart/daemon/daemon-entry.js +953 -11
- package/dist/heart/daemon/daemon-health.js +186 -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 +2084 -105
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +1766 -0
- package/dist/heart/daemon/freshness.js +345 -0
- package/dist/heart/daemon/habit-private-wake.js +61 -0
- package/dist/heart/daemon/health-monitor.js +154 -11
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +78 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +79 -10
- package/dist/heart/daemon/logs-prune.js +132 -0
- package/dist/heart/daemon/mcp-canary.js +524 -0
- package/dist/heart/daemon/message-router.js +65 -5
- package/dist/heart/daemon/migrate-to-desk.js +848 -0
- package/dist/heart/daemon/os-cron-deps.js +135 -0
- package/dist/heart/daemon/os-cron.js +22 -14
- package/dist/heart/daemon/ouro-bot-entry.js +6 -3
- package/dist/heart/daemon/ouro-entry.js +5 -2
- package/dist/heart/daemon/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +760 -61
- package/dist/heart/daemon/provider-discovery.js +137 -0
- package/dist/heart/daemon/provider-ping-progress.js +83 -0
- package/dist/heart/daemon/prunable-bundle.js +144 -0
- package/dist/heart/daemon/pulse.js +511 -0
- package/dist/heart/daemon/readiness-repair.js +365 -0
- package/dist/heart/daemon/run-hooks.js +2 -0
- package/dist/heart/daemon/runtime-logging.js +47 -14
- package/dist/heart/daemon/runtime-metadata.js +2 -30
- package/dist/heart/daemon/runtime-mode.js +13 -2
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2654 -0
- package/dist/heart/daemon/sanctuary-acceptance-harness.js +1830 -0
- package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
- package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +955 -0
- package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
- package/dist/heart/daemon/sanctuary-authority-epoch.js +281 -0
- package/dist/heart/daemon/sanctuary-authority-installation.js +161 -0
- package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
- package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +1267 -0
- package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
- package/dist/heart/daemon/sanctuary-bundle-migration.js +730 -0
- package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
- package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +493 -0
- package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
- package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
- package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
- package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
- package/dist/heart/daemon/sanctuary-package-management.js +103 -0
- package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
- package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +475 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-service.js +676 -0
- package/dist/heart/daemon/sense-manager.js +733 -48
- 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 +180 -12
- package/dist/heart/daemon/stale-bundle-prune.js +113 -0
- package/dist/heart/daemon/startup-tui.js +339 -0
- package/dist/heart/daemon/supercronic-supervisor.js +282 -0
- package/dist/heart/daemon/task-scheduler.js +117 -39
- package/dist/heart/daemon/terminal-ui.js +503 -0
- package/dist/heart/daemon/thoughts.js +138 -54
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -4
- package/dist/heart/external-events/router.js +1516 -0
- package/dist/heart/failure-reports.js +336 -0
- package/dist/heart/file-lock.js +109 -0
- package/dist/heart/frontend-approval-runtime.js +506 -0
- package/dist/heart/frontend-journal.js +215 -0
- package/dist/heart/frontend-session-service.js +237 -0
- package/dist/heart/frontend-socket-client.js +164 -0
- package/dist/heart/frontend-socket.js +400 -0
- package/dist/heart/habits/habit-cancel.js +810 -0
- package/dist/heart/habits/habit-lifecycle.js +1327 -0
- package/dist/heart/habits/habit-migration.js +194 -0
- package/dist/heart/habits/habit-parser.js +278 -0
- package/dist/heart/habits/habit-runtime-state.js +93 -0
- package/dist/heart/habits/habit-scheduler.js +653 -0
- package/dist/heart/habits/habit-session-summary.js +318 -0
- package/dist/heart/habits/habit-session.js +636 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
- package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
- package/dist/heart/identity.js +230 -59
- package/dist/heart/kept-notes.js +289 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +175 -0
- package/dist/heart/mail-import-discovery.js +356 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +98 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +398 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +272 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +39 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +197 -0
- package/dist/heart/mailbox/readers/agent-machine.js +428 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
- package/dist/heart/mailbox/readers/mail.js +375 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
- package/dist/heart/mailbox/readers/sessions.js +231 -0
- package/dist/heart/mailbox/readers/shared.js +111 -0
- package/dist/heart/mcp/mcp-server.js +696 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +83 -16
- package/dist/heart/orientation-frame.js +345 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/primitives.js +1 -1
- package/dist/heart/private-runtime/decision-renderer.js +158 -0
- package/dist/heart/private-runtime/index.js +18 -0
- package/dist/heart/private-runtime/ledger.js +221 -0
- package/dist/heart/private-runtime/policy.js +260 -0
- package/dist/heart/private-runtime/types.js +2 -0
- package/dist/heart/progress-story.js +1 -1
- package/dist/heart/provider-attempt.js +137 -0
- package/dist/heart/provider-binding-resolver.js +273 -0
- package/dist/heart/provider-credentials.js +449 -0
- package/dist/heart/provider-failover.js +311 -0
- package/dist/heart/provider-models.js +96 -0
- package/dist/heart/provider-ping.js +265 -0
- package/dist/heart/provider-readiness-cache.js +119 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +173 -60
- package/dist/heart/providers/azure.js +23 -11
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +38 -39
- 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/providers/openai-compatible.js +177 -0
- package/dist/heart/reply-style.js +52 -0
- package/dist/heart/run-ledger.js +247 -0
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +607 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +24 -4
- package/dist/heart/session-activity.js +92 -24
- package/dist/heart/session-events.js +1504 -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-redaction-repair-cli-main.js +31 -0
- package/dist/heart/session-redaction-repair.js +552 -0
- package/dist/heart/session-stats-cli-main.js +5 -0
- package/dist/heart/session-stats.js +183 -0
- package/dist/heart/session-transcript.js +133 -0
- package/dist/heart/shelf-claims.js +78 -0
- package/dist/heart/shepherd-config.js +113 -0
- package/dist/heart/source-grounding.js +297 -0
- package/dist/heart/start-of-turn-packet.js +372 -0
- package/dist/heart/steward-policy.js +656 -0
- package/dist/heart/streaming.js +609 -207
- package/dist/heart/structured-output.js +196 -0
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync-health.js +152 -0
- package/dist/heart/sync.js +726 -0
- package/dist/heart/target-resolution.js +11 -7
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/timeouts.js +101 -0
- package/dist/heart/tool-activity-callbacks.js +59 -0
- package/dist/heart/tool-approval.js +382 -0
- package/dist/heart/tool-description.js +155 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +206 -0
- package/dist/heart/turn-context.js +496 -0
- package/dist/heart/turn-execution-lease.js +30 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +3 -2
- package/dist/heart/versioning/ouro-path-installer.js +432 -0
- package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
- package/dist/heart/versioning/ouro-version-manager.js +432 -0
- package/dist/heart/versioning/release-sources.js +173 -0
- package/dist/heart/versioning/self-update-defaults.js +294 -0
- package/dist/heart/versioning/self-update.js +196 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/versioning/update-hooks.js +154 -0
- package/dist/heart/versioning/update-state.js +126 -0
- package/dist/heart/versioning/updater-launchd.js +150 -0
- package/dist/heart/versioning/version-intent.js +114 -0
- package/dist/heart/work-card.js +380 -0
- package/dist/mailbox-ui/assets/index-Cyv4mw3Y.js +1 -0
- package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
- package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
- package/dist/mailbox-ui/index.html +16 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +889 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/cache-sync-cli.js +58 -0
- package/dist/mailroom/core.js +803 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +568 -0
- package/dist/mailroom/hosted-cache-sync.js +384 -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 +292 -0
- package/dist/mailroom/search-cache.js +513 -0
- package/dist/mailroom/search-relevance.js +319 -0
- package/dist/mailroom/smtp-ingress.js +176 -0
- package/dist/mailroom/source-state.js +176 -0
- package/dist/mailroom/thread.js +109 -0
- package/dist/mailroom/travel-extract.js +89 -0
- package/dist/mind/bundle-manifest.js +24 -2
- package/dist/mind/context.js +307 -139
- package/dist/mind/desk-section.js +362 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +68 -77
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/friend-link-codes.js +209 -0
- package/dist/mind/friend-merge.js +330 -0
- package/dist/mind/{associative-recall.js → note-search.js} +47 -58
- package/dist/mind/obligation-steering.js +199 -3
- package/dist/mind/pending.js +36 -10
- package/dist/mind/prompt-budget.js +479 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1085 -198
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/record-paths.js +312 -0
- package/dist/mind/scrutiny.js +173 -0
- package/dist/mind/session-transaction.js +564 -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 +55 -35
- package/dist/nerves/coverage/source-scanner.js +4 -4
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +293 -9
- 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 +159 -0
- package/dist/nerves/runtime.js +17 -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 +1201 -0
- package/dist/repertoire/bundle-templates.js +71 -0
- package/dist/repertoire/bw-installer.js +231 -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 +174 -32
- package/dist/repertoire/coding/index.js +15 -3
- package/dist/repertoire/coding/manager.js +159 -10
- package/dist/repertoire/coding/spawner.js +40 -11
- package/dist/repertoire/coding/tools.js +182 -18
- package/dist/repertoire/coding/workbench-client.js +272 -0
- package/dist/repertoire/coding/workbench-manager.js +346 -0
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +183 -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 +968 -20
- package/dist/repertoire/house-sweep.js +469 -0
- package/dist/repertoire/mcp-client.js +58 -5
- package/dist/repertoire/mcp-manager.js +427 -139
- package/dist/repertoire/mcp-tools.js +132 -0
- package/dist/repertoire/mcp-write-guard.js +46 -0
- package/dist/repertoire/plugin-mcp.js +175 -0
- package/dist/repertoire/plugins.js +253 -0
- package/dist/repertoire/relationship-authorization.js +322 -0
- package/dist/repertoire/sanctuary-container-policy.js +46 -0
- package/dist/repertoire/shell-sessions.js +134 -0
- package/dist/repertoire/skills.js +48 -4
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-arguments.js +182 -0
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-a2a.js +699 -0
- package/dist/repertoire/tools-attachments.js +322 -0
- package/dist/repertoire/tools-awaiting.js +872 -0
- package/dist/repertoire/tools-base.js +83 -1168
- package/dist/repertoire/tools-bluebubbles.js +2 -0
- package/dist/repertoire/tools-bridge.js +144 -0
- package/dist/repertoire/tools-bundle.js +995 -0
- package/dist/repertoire/tools-commerce.js +253 -0
- package/dist/repertoire/tools-config.js +186 -0
- package/dist/repertoire/tools-continuity.js +575 -0
- package/dist/repertoire/tools-credential.js +383 -0
- package/dist/repertoire/tools-escalation.js +84 -0
- package/dist/repertoire/tools-evolution.js +527 -0
- package/dist/repertoire/tools-files.js +344 -0
- package/dist/repertoire/tools-flight.js +290 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-friend-link.js +57 -0
- package/dist/repertoire/tools-github.js +3 -8
- package/dist/repertoire/tools-habits.js +103 -0
- package/dist/repertoire/tools-house-care.js +174 -0
- package/dist/repertoire/tools-mail.js +1828 -0
- package/dist/repertoire/tools-notes.js +496 -0
- package/dist/repertoire/tools-obligations.js +182 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +482 -0
- package/dist/repertoire/tools-rsvp.js +139 -0
- package/dist/repertoire/tools-runtime.js +238 -0
- package/dist/repertoire/tools-sanctuary-host.js +202 -0
- package/dist/repertoire/tools-session.js +1133 -0
- package/dist/repertoire/tools-shell.js +149 -0
- package/dist/repertoire/tools-shepherd.js +262 -0
- package/dist/repertoire/tools-steward-policy.js +147 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +369 -0
- package/dist/repertoire/tools-teams.js +12 -39
- package/dist/repertoire/tools-telegram-contacts.js +37 -0
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +982 -0
- package/dist/repertoire/tools-unraid.js +556 -0
- package/dist/repertoire/tools-user-profile.js +146 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools-voice-local.js +198 -0
- package/dist/repertoire/tools-voice.js +145 -0
- package/dist/repertoire/tools.js +514 -156
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/unraid-client.js +155 -0
- package/dist/repertoire/unraid-restart.js +339 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +686 -0
- package/dist/rsvp/aisleplanner-client.js +354 -0
- package/dist/rsvp/cli.js +936 -0
- package/dist/rsvp/config.js +327 -0
- package/dist/rsvp/cutover.js +433 -0
- package/dist/rsvp/diagnostics.js +232 -0
- package/dist/rsvp/diff-renderer.js +176 -0
- package/dist/rsvp/habit-policy.js +110 -0
- package/dist/rsvp/habit-stage.js +123 -0
- package/dist/rsvp/incident-bundle.js +97 -0
- package/dist/rsvp/migration.js +204 -0
- package/dist/rsvp/native-habit-runner.js +630 -0
- package/dist/rsvp/outbound-state.js +628 -0
- package/dist/rsvp/query.js +118 -0
- package/dist/rsvp/replay.js +233 -0
- package/dist/rsvp/snapshot.js +232 -0
- package/dist/rsvp/spend-ledger.js +175 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/a2a-entry.js +132 -0
- package/dist/senses/acp-server.js +386 -0
- package/dist/senses/attention-queue.js +186 -0
- package/dist/senses/await-turn-message.js +65 -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} +379 -41
- package/dist/senses/bluebubbles/context-packet.js +207 -0
- package/dist/senses/bluebubbles/context-smoke.js +144 -0
- package/dist/senses/bluebubbles/entry.js +90 -0
- package/dist/senses/bluebubbles/host-account-verifier.js +88 -0
- package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
- package/dist/senses/bluebubbles/index.js +3878 -0
- package/dist/senses/bluebubbles/latest-turn.js +311 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
- package/dist/senses/bluebubbles/outbound-state.js +308 -0
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/reaction-policy.js +47 -0
- package/dist/senses/bluebubbles/replay.js +284 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- package/dist/senses/bluebubbles/webhook-registration.js +257 -0
- package/dist/senses/bluebubbles-meta-guard.js +39 -0
- package/dist/senses/cli/bracketed-paste.js +82 -0
- package/dist/senses/cli/image-paste.js +287 -0
- package/dist/senses/cli/image-ref-navigation.js +75 -0
- package/dist/senses/cli/ink-app.js +156 -0
- package/dist/senses/cli/inline-diff.js +64 -0
- package/dist/senses/cli/input-keys.js +174 -0
- package/dist/senses/cli/kill-ring.js +86 -0
- package/dist/senses/cli/message-list.js +51 -0
- package/dist/senses/cli/ouro-tui.js +607 -0
- package/dist/senses/cli/spinner-imperative.js +135 -0
- package/dist/senses/cli/spinner.js +101 -0
- package/dist/senses/cli/status-line.js +60 -0
- package/dist/senses/cli/streaming-markdown.js +526 -0
- package/dist/senses/cli/tool-display.js +85 -0
- package/dist/senses/cli/tool-render.js +85 -0
- package/dist/senses/cli/tui-store.js +241 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +60 -8
- package/dist/senses/cli.js +601 -304
- package/dist/senses/commands.js +66 -3
- package/dist/senses/context-packet-ledger.js +371 -0
- package/dist/senses/context-packets.js +154 -0
- package/dist/senses/habit-lifecycle-guard.js +24 -0
- package/dist/senses/habit-turn-message.js +160 -0
- package/dist/senses/ingress-evidence.js +2 -0
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +524 -0
- package/dist/senses/pipeline.js +1158 -204
- package/dist/senses/private-runtime-worker.js +859 -0
- package/dist/senses/private-runtime.js +1627 -0
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/root-host-approval-port.js +345 -0
- package/dist/senses/root-host-approval-runtime.js +393 -0
- package/dist/senses/sanctuary-authority-resident.js +102 -0
- package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
- package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
- package/dist/senses/sanctuary-grounding.js +118 -0
- package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
- package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
- package/dist/senses/sanctuary-health-runner.js +104 -0
- package/dist/senses/sanctuary-health.js +422 -0
- package/dist/senses/sanctuary-install-state-contract.js +169 -0
- package/dist/senses/sanctuary-interactive-control.js +410 -0
- package/dist/senses/sanctuary-media-catalog-contract.js +259 -0
- package/dist/senses/sanctuary-media-optimization.js +514 -0
- package/dist/senses/sanctuary-runtime.js +369 -0
- package/dist/senses/sanctuary-sab.js +85 -0
- package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
- package/dist/senses/shared-turn.js +793 -0
- package/dist/senses/shepherd/client.js +196 -0
- package/dist/senses/shepherd/cmux.js +352 -0
- package/dist/senses/shepherd/herdr.js +315 -0
- package/dist/senses/shepherd/host.js +14 -0
- package/dist/senses/shepherd/judge.js +137 -0
- package/dist/senses/shepherd/owner-notice.js +251 -0
- package/dist/senses/shepherd/redact.js +66 -0
- package/dist/senses/shepherd/returns.js +79 -0
- package/dist/senses/shepherd/sense.js +310 -0
- package/dist/senses/shepherd/terminal-process.js +99 -0
- package/dist/senses/shepherd-entry.js +78 -0
- package/dist/senses/surface-tool.js +109 -0
- package/dist/senses/teams-entry.js +68 -8
- package/dist/senses/teams.js +598 -233
- package/dist/senses/telegram-admission.js +718 -0
- package/dist/senses/telegram-approval-runtime.js +793 -0
- package/dist/senses/telegram-attachments.js +186 -0
- package/dist/senses/telegram-audit-ledger.js +220 -0
- package/dist/senses/telegram-authority-transport.js +231 -0
- package/dist/senses/telegram-client.js +1749 -0
- package/dist/senses/telegram-effect-adapter.js +900 -0
- package/dist/senses/telegram-entry.js +83 -0
- package/dist/senses/telegram-handoff.js +80 -0
- package/dist/senses/telegram.js +2405 -0
- package/dist/senses/trust-gate.js +104 -9
- package/dist/senses/voice/audio-playback.js +237 -0
- package/dist/senses/voice/audio-routing.js +119 -0
- package/dist/senses/voice/call-auth.js +250 -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/local-audio-control.js +344 -0
- package/dist/senses/voice/local-audio-devices.js +516 -0
- package/dist/senses/voice/local-audio-disclosure.js +174 -0
- package/dist/senses/voice/local-audio-identity.js +103 -0
- package/dist/senses/voice/local-audio-join.js +325 -0
- package/dist/senses/voice/local-audio-mute.js +199 -0
- package/dist/senses/voice/local-audio-notify.js +121 -0
- package/dist/senses/voice/local-audio-prompts.js +116 -0
- package/dist/senses/voice/local-audio-transport.js +427 -0
- package/dist/senses/voice/local-audio.js +281 -0
- package/dist/senses/voice/local-media-stream.js +145 -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/process-guards.js +51 -0
- package/dist/senses/voice/realtime-eval.js +496 -0
- package/dist/senses/voice/realtime-tool-schema.js +195 -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 +836 -0
- package/dist/senses/voice/twilio-phone.js +5454 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +83 -0
- package/dist/senses/voice-realtime-eval-command.js +99 -0
- package/dist/senses/voice-realtime-eval-entry.js +21 -0
- package/dist/senses/voice-twilio-entry.js +87 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +265 -0
- package/dist/util/frontmatter.js +69 -0
- package/npm-shrinkwrap.json +8100 -0
- package/package.json +74 -13
- package/skills/agent-commerce.md +113 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +99 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/auth-flow.js +0 -430
- package/dist/heart/daemon/ouro-path-installer.js +0 -260
- package/dist/heart/daemon/ouro-version-manager.js +0 -171
- package/dist/heart/daemon/update-hooks.js +0 -138
- package/dist/heart/obligations.js +0 -191
- package/dist/heart/safe-workspace.js +0 -362
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/friends/channel.js +0 -84
- package/dist/mind/friends/group-context.js +0 -144
- package/dist/mind/friends/resolver.js +0 -84
- package/dist/mind/friends/store-file.js +0 -190
- package/dist/mind/friends/store.js +0 -4
- package/dist/mind/friends/tokens.js +0 -26
- package/dist/mind/friends/trust-explanation.js +0 -74
- package/dist/mind/friends/types.js +0 -29
- package/dist/repertoire/tasks/board.js +0 -134
- package/dist/repertoire/tasks/index.js +0 -224
- package/dist/repertoire/tasks/lifecycle.js +0 -80
- package/dist/repertoire/tasks/middleware.js +0 -65
- package/dist/repertoire/tasks/parser.js +0 -173
- package/dist/repertoire/tasks/scanner.js +0 -132
- package/dist/repertoire/tasks/transitions.js +0 -144
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1181
- package/dist/senses/debug-activity.js +0 -154
- package/dist/senses/inner-dialog-worker.js +0 -90
- package/dist/senses/inner-dialog.js +0 -525
- 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,432 @@
|
|
|
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.DEFAULT_RETAIN_VERSIONS = void 0;
|
|
37
|
+
exports.getOuroCliHome = getOuroCliHome;
|
|
38
|
+
exports.getCurrentVersion = getCurrentVersion;
|
|
39
|
+
exports.getPreviousVersion = getPreviousVersion;
|
|
40
|
+
exports.buildChangelogCommand = buildChangelogCommand;
|
|
41
|
+
exports.listInstalledVersions = listInstalledVersions;
|
|
42
|
+
exports.validateInstalledVersionForActivation = validateInstalledVersionForActivation;
|
|
43
|
+
exports.installVersion = installVersion;
|
|
44
|
+
exports.activateVersion = activateVersion;
|
|
45
|
+
exports.compareCliVersions = compareCliVersions;
|
|
46
|
+
exports.selectVersionsToPrune = selectVersionsToPrune;
|
|
47
|
+
exports.pruneOldVersions = pruneOldVersions;
|
|
48
|
+
exports.ensureLayout = ensureLayout;
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const os = __importStar(require("os"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
53
|
+
/** Maximum number of installed CLI versions to retain after pruning. */
|
|
54
|
+
exports.DEFAULT_RETAIN_VERSIONS = 5;
|
|
55
|
+
const INSTALLED_RUNTIME_PACKAGE_PAYLOAD_PATHS = [
|
|
56
|
+
"assets",
|
|
57
|
+
"dist",
|
|
58
|
+
"RepairGuide.ouro",
|
|
59
|
+
"SerpentGuide.ouro",
|
|
60
|
+
"skills",
|
|
61
|
+
"changelog.json",
|
|
62
|
+
"package.json",
|
|
63
|
+
];
|
|
64
|
+
const INSTALLED_RUNTIME_TEXT_EXTENSIONS = new Set([
|
|
65
|
+
".cjs",
|
|
66
|
+
".css",
|
|
67
|
+
".html",
|
|
68
|
+
".js",
|
|
69
|
+
".json",
|
|
70
|
+
".md",
|
|
71
|
+
".mjs",
|
|
72
|
+
".txt",
|
|
73
|
+
]);
|
|
74
|
+
const BLOCKED_INSTALLED_RUNTIME_TEXT_SIGNATURES = [
|
|
75
|
+
{
|
|
76
|
+
label: "removed BlueBubbles timeout notice",
|
|
77
|
+
base64: "bGl2ZSBpTWVzc2FnZSB0dXJuIHRpbWVkIG91dDsgSSBjYXB0dXJlZCBpdCBmb3IgcmVjb3ZlcnkgaW5zdGVhZCBvZiBzaWxlbnRseSBoYW5naW5n",
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
function getOuroCliHome(homeDir) {
|
|
81
|
+
/* v8 ignore next -- dep default: tests always inject @preserve */
|
|
82
|
+
const home = homeDir ?? os.homedir();
|
|
83
|
+
return path.join(home, ".ouro-cli");
|
|
84
|
+
}
|
|
85
|
+
function getCurrentVersion(deps) {
|
|
86
|
+
const cliHome = getOuroCliHome(deps.homeDir);
|
|
87
|
+
/* v8 ignore next -- dep default: tests always inject @preserve */
|
|
88
|
+
const readlinkSync = deps.readlinkSync ?? fs.readlinkSync;
|
|
89
|
+
try {
|
|
90
|
+
const target = readlinkSync(path.join(cliHome, "CurrentVersion"));
|
|
91
|
+
return path.basename(target);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function getPreviousVersion(deps) {
|
|
98
|
+
const cliHome = getOuroCliHome(deps.homeDir);
|
|
99
|
+
/* v8 ignore next -- dep default: tests always inject @preserve */
|
|
100
|
+
const readlinkSync = deps.readlinkSync ?? fs.readlinkSync;
|
|
101
|
+
try {
|
|
102
|
+
const target = readlinkSync(path.join(cliHome, "previous"));
|
|
103
|
+
return path.basename(target);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function buildChangelogCommand(previousVersion, currentVersion) {
|
|
110
|
+
if (!previousVersion || !currentVersion || previousVersion === currentVersion) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
return `ouro changelog --from ${previousVersion}`;
|
|
114
|
+
}
|
|
115
|
+
function listInstalledVersions(deps) {
|
|
116
|
+
const cliHome = getOuroCliHome(deps.homeDir);
|
|
117
|
+
/* v8 ignore next -- dep default: tests always inject @preserve */
|
|
118
|
+
const readdirSync = deps.readdirSync ?? ((p, opts) => fs.readdirSync(p, opts));
|
|
119
|
+
try {
|
|
120
|
+
const entries = readdirSync(path.join(cliHome, "versions"), { withFileTypes: true });
|
|
121
|
+
return entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function validateInstalledVersionForActivation(version, deps = {}) {
|
|
128
|
+
const cliHome = getOuroCliHome(deps.homeDir);
|
|
129
|
+
/* v8 ignore start -- dep defaults: tests inject @preserve */
|
|
130
|
+
const existsSync = deps.existsSync ?? fs.existsSync;
|
|
131
|
+
const readdirSync = deps.readdirSync ?? ((p, opts) => fs.readdirSync(p, opts));
|
|
132
|
+
const readFileSync = deps.readFileSync ?? fs.readFileSync;
|
|
133
|
+
/* v8 ignore stop */
|
|
134
|
+
const packageRoot = path.join(cliHome, "versions", version, "node_modules", "@ouro.bot", "cli");
|
|
135
|
+
const packageJsonPath = path.join(packageRoot, "package.json");
|
|
136
|
+
if (!existsSync(packageJsonPath)) {
|
|
137
|
+
const message = `installed runtime ${version} is missing its @ouro.bot/cli package; run 'ouro up' to restore the current release`;
|
|
138
|
+
(0, runtime_1.emitNervesEvent)({
|
|
139
|
+
component: "daemon",
|
|
140
|
+
event: "daemon.cli_version_activation_blocked",
|
|
141
|
+
message: "blocked CLI version activation",
|
|
142
|
+
meta: { version, packageRoot, reason: "missing-package" },
|
|
143
|
+
level: "warn",
|
|
144
|
+
});
|
|
145
|
+
return { ok: false, version, packageRoot, violations: ["missing @ouro.bot/cli package"], message };
|
|
146
|
+
}
|
|
147
|
+
const violations = findBlockedInstalledRuntimePayloadText(packageRoot, { existsSync, readdirSync, readFileSync });
|
|
148
|
+
if (violations.length === 0) {
|
|
149
|
+
return { ok: true, version, packageRoot, violations, message: "installed runtime package passed activation guard" };
|
|
150
|
+
}
|
|
151
|
+
const message = `installed runtime ${version} contains blocked package assets (${violations.join(", ")}); run 'ouro up' to stay on the current release`;
|
|
152
|
+
(0, runtime_1.emitNervesEvent)({
|
|
153
|
+
component: "daemon",
|
|
154
|
+
event: "daemon.cli_version_activation_blocked",
|
|
155
|
+
message: "blocked CLI version activation",
|
|
156
|
+
meta: { version, packageRoot, reason: "blocked-package-assets", violations },
|
|
157
|
+
level: "warn",
|
|
158
|
+
});
|
|
159
|
+
return { ok: false, version, packageRoot, violations, message };
|
|
160
|
+
}
|
|
161
|
+
function findBlockedInstalledRuntimePayloadText(packageRoot, deps) {
|
|
162
|
+
const violations = [];
|
|
163
|
+
const blockedText = BLOCKED_INSTALLED_RUNTIME_TEXT_SIGNATURES.map((signature) => ({
|
|
164
|
+
label: signature.label,
|
|
165
|
+
text: Buffer.from(signature.base64, "base64").toString("utf8"),
|
|
166
|
+
}));
|
|
167
|
+
for (const payloadPath of INSTALLED_RUNTIME_PACKAGE_PAYLOAD_PATHS) {
|
|
168
|
+
const absolutePath = path.join(packageRoot, payloadPath);
|
|
169
|
+
if (!deps.existsSync(absolutePath))
|
|
170
|
+
continue;
|
|
171
|
+
collectBlockedTextViolations(packageRoot, absolutePath, payloadPath, blockedText, deps, violations);
|
|
172
|
+
}
|
|
173
|
+
return violations.sort();
|
|
174
|
+
}
|
|
175
|
+
function collectBlockedTextViolations(packageRoot, absolutePath, relativePath, blockedText, deps, violations) {
|
|
176
|
+
let entries = null;
|
|
177
|
+
try {
|
|
178
|
+
entries = deps.readdirSync(absolutePath, { withFileTypes: true });
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
entries = null;
|
|
182
|
+
}
|
|
183
|
+
if (entries !== null) {
|
|
184
|
+
for (const entry of entries) {
|
|
185
|
+
const childRelativePath = `${relativePath}/${entry.name}`;
|
|
186
|
+
if (entry.isDirectory()) {
|
|
187
|
+
collectBlockedTextViolations(packageRoot, path.join(absolutePath, entry.name), childRelativePath, blockedText, deps, violations);
|
|
188
|
+
}
|
|
189
|
+
else if (entry.isFile()) {
|
|
190
|
+
inspectInstalledRuntimePayloadFile(packageRoot, childRelativePath, blockedText, deps, violations);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
inspectInstalledRuntimePayloadFile(packageRoot, relativePath, blockedText, deps, violations);
|
|
196
|
+
}
|
|
197
|
+
function inspectInstalledRuntimePayloadFile(packageRoot, relativePath, blockedText, deps, violations) {
|
|
198
|
+
if (!INSTALLED_RUNTIME_TEXT_EXTENSIONS.has(path.extname(relativePath)))
|
|
199
|
+
return;
|
|
200
|
+
let content = "";
|
|
201
|
+
try {
|
|
202
|
+
content = deps.readFileSync(path.join(packageRoot, relativePath), "utf8");
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
const reason = error instanceof Error ? error.message : /* v8 ignore next -- defensive: non-Error catch branch @preserve */ String(error);
|
|
206
|
+
violations.push(`${relativePath} could not be inspected: ${reason}`);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
for (const blocked of blockedText) {
|
|
210
|
+
if (content.includes(blocked.text)) {
|
|
211
|
+
violations.push(`${relativePath} contains ${blocked.label}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function installVersion(version, deps) {
|
|
216
|
+
const cliHome = getOuroCliHome(deps.homeDir);
|
|
217
|
+
/* v8 ignore start -- dep defaults: tests always inject @preserve */
|
|
218
|
+
const mkdirSync = deps.mkdirSync ?? fs.mkdirSync;
|
|
219
|
+
const execSync = deps.execSync ?? ((cmd, opts) => require("child_process").execSync(cmd, opts));
|
|
220
|
+
/* v8 ignore stop */
|
|
221
|
+
const versionDir = path.join(cliHome, "versions", version);
|
|
222
|
+
(0, runtime_1.emitNervesEvent)({
|
|
223
|
+
component: "daemon",
|
|
224
|
+
event: "daemon.cli_version_install_start",
|
|
225
|
+
message: "installing CLI version",
|
|
226
|
+
meta: { version, versionDir },
|
|
227
|
+
});
|
|
228
|
+
mkdirSync(versionDir, { recursive: true });
|
|
229
|
+
execSync(`npm install --prefix ${versionDir} @ouro.bot/cli@${version}`, { stdio: "pipe" });
|
|
230
|
+
(0, runtime_1.emitNervesEvent)({
|
|
231
|
+
component: "daemon",
|
|
232
|
+
event: "daemon.cli_version_install_end",
|
|
233
|
+
message: "CLI version installed",
|
|
234
|
+
meta: { version, versionDir },
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
function activateVersion(version, deps) {
|
|
238
|
+
const cliHome = getOuroCliHome(deps.homeDir);
|
|
239
|
+
/* v8 ignore start -- dep defaults: tests always inject @preserve */
|
|
240
|
+
const readlinkSync = deps.readlinkSync ?? fs.readlinkSync;
|
|
241
|
+
const unlinkSync = deps.unlinkSync ?? fs.unlinkSync;
|
|
242
|
+
const symlinkSync = deps.symlinkSync ?? fs.symlinkSync;
|
|
243
|
+
const renameSync = deps.renameSync ?? fs.renameSync;
|
|
244
|
+
const existsSync = deps.existsSync ?? fs.existsSync;
|
|
245
|
+
/* v8 ignore stop */
|
|
246
|
+
const currentVersionPath = path.join(cliHome, "CurrentVersion");
|
|
247
|
+
const previousPath = path.join(cliHome, "previous");
|
|
248
|
+
const newTarget = path.join(cliHome, "versions", version);
|
|
249
|
+
(0, runtime_1.emitNervesEvent)({
|
|
250
|
+
component: "daemon",
|
|
251
|
+
event: "daemon.cli_version_activate",
|
|
252
|
+
message: "activating CLI version",
|
|
253
|
+
meta: { version },
|
|
254
|
+
});
|
|
255
|
+
// Read old CurrentVersion target (may not exist)
|
|
256
|
+
let oldTarget = null;
|
|
257
|
+
try {
|
|
258
|
+
oldTarget = readlinkSync(currentVersionPath);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// No current version — first install
|
|
262
|
+
}
|
|
263
|
+
// Update previous symlink to point to old current
|
|
264
|
+
if (oldTarget) {
|
|
265
|
+
try {
|
|
266
|
+
unlinkSync(previousPath);
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// previous symlink may not exist yet
|
|
270
|
+
}
|
|
271
|
+
symlinkSync(oldTarget, previousPath);
|
|
272
|
+
}
|
|
273
|
+
// Swap CurrentVersion atomically: build the new link beside it and rename
|
|
274
|
+
// it over the old one, so a process killed mid-swap never leaves the
|
|
275
|
+
// machine without a CurrentVersion.
|
|
276
|
+
const tempPath = `${currentVersionPath}.next-${process.pid}`;
|
|
277
|
+
try {
|
|
278
|
+
unlinkSync(tempPath);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// No leftover from an earlier interrupted swap.
|
|
282
|
+
}
|
|
283
|
+
symlinkSync(newTarget, tempPath);
|
|
284
|
+
try {
|
|
285
|
+
renameSync(tempPath, currentVersionPath);
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// rename cannot replace a real directory; fall back to unlink + link.
|
|
289
|
+
try {
|
|
290
|
+
unlinkSync(tempPath);
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
// Already gone.
|
|
294
|
+
}
|
|
295
|
+
if (existsSync(currentVersionPath)) {
|
|
296
|
+
unlinkSync(currentVersionPath);
|
|
297
|
+
}
|
|
298
|
+
symlinkSync(newTarget, currentVersionPath);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Compare two version strings of the form `0.1.0-alpha.{n}`. Returns
|
|
303
|
+
* positive when `a` is newer, negative when `b` is newer, 0 when equal.
|
|
304
|
+
*
|
|
305
|
+
* The harness only ships `0.1.0-alpha.{n}` versions today; this comparator
|
|
306
|
+
* extracts the numeric tail and falls back to a lexicographic compare for
|
|
307
|
+
* any version that doesn't match the pattern (so unexpected version
|
|
308
|
+
* formats sort consistently rather than throwing).
|
|
309
|
+
*/
|
|
310
|
+
function compareCliVersions(a, b) {
|
|
311
|
+
const aMatch = /alpha\.(\d+)/.exec(a);
|
|
312
|
+
const bMatch = /alpha\.(\d+)/.exec(b);
|
|
313
|
+
if (aMatch && bMatch) {
|
|
314
|
+
const aN = parseInt(aMatch[1], 10);
|
|
315
|
+
const bN = parseInt(bMatch[1], 10);
|
|
316
|
+
return aN - bN;
|
|
317
|
+
}
|
|
318
|
+
// Fallback: lexicographic. Both-mismatched and one-mismatched cases land
|
|
319
|
+
// here. Predictable, even if not strictly semver-correct.
|
|
320
|
+
if (a < b)
|
|
321
|
+
return -1;
|
|
322
|
+
if (a > b)
|
|
323
|
+
return 1;
|
|
324
|
+
return 0;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Identify which installed CLI versions can be safely deleted, given a
|
|
328
|
+
* retention policy. Pure: takes the full version list and the protected
|
|
329
|
+
* (current/previous) versions, returns the versions to delete.
|
|
330
|
+
*
|
|
331
|
+
* Retention rules:
|
|
332
|
+
* - Always keep the N most recent versions (default 5).
|
|
333
|
+
* - Always keep the currently-active version (CurrentVersion symlink target).
|
|
334
|
+
* - Always keep the previous version (previous symlink target) so rollback
|
|
335
|
+
* stays one command away.
|
|
336
|
+
* - Delete everything else.
|
|
337
|
+
*
|
|
338
|
+
* Exported so tests can pin the policy without shelling out to a real fs.
|
|
339
|
+
*/
|
|
340
|
+
function selectVersionsToPrune(installedVersions, protectedVersions, retain = exports.DEFAULT_RETAIN_VERSIONS) {
|
|
341
|
+
if (installedVersions.length <= retain)
|
|
342
|
+
return [];
|
|
343
|
+
const sorted = [...installedVersions].sort(compareCliVersions).reverse();
|
|
344
|
+
const keepers = new Set(sorted.slice(0, retain));
|
|
345
|
+
if (protectedVersions.current)
|
|
346
|
+
keepers.add(protectedVersions.current);
|
|
347
|
+
if (protectedVersions.previous)
|
|
348
|
+
keepers.add(protectedVersions.previous);
|
|
349
|
+
return installedVersions.filter((v) => !keepers.has(v));
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Prune installed CLI versions according to the retention policy. Removes
|
|
353
|
+
* `~/.ouro-cli/versions/{version}/` directories for versions outside the
|
|
354
|
+
* retention window. Best-effort: per-version delete failures are logged
|
|
355
|
+
* via nerves but don't propagate.
|
|
356
|
+
*
|
|
357
|
+
* Called from the activate path (cli-defaults.ts) so that every successful
|
|
358
|
+
* `ouro up` self-prunes. The user observed `~/.ouro-cli/versions/` going
|
|
359
|
+
* back to alpha.85 from March 20 — every CLI version they'd ever installed
|
|
360
|
+
* was still on disk because nothing ever GCed.
|
|
361
|
+
*/
|
|
362
|
+
function pruneOldVersions(retain = exports.DEFAULT_RETAIN_VERSIONS, deps = {}) {
|
|
363
|
+
const cliHome = getOuroCliHome(deps.homeDir);
|
|
364
|
+
/* v8 ignore start -- dep defaults: tests always inject @preserve */
|
|
365
|
+
const readdirSync = deps.readdirSync ?? ((p, opts) => fs.readdirSync(p, opts));
|
|
366
|
+
const readlinkSync = deps.readlinkSync ?? fs.readlinkSync;
|
|
367
|
+
const rmSync = deps.rmSync ?? fs.rmSync;
|
|
368
|
+
/* v8 ignore stop */
|
|
369
|
+
const versionsDir = path.join(cliHome, "versions");
|
|
370
|
+
let installed;
|
|
371
|
+
try {
|
|
372
|
+
installed = readdirSync(versionsDir, { withFileTypes: true })
|
|
373
|
+
.filter((e) => e.isDirectory())
|
|
374
|
+
.map((e) => e.name);
|
|
375
|
+
}
|
|
376
|
+
catch {
|
|
377
|
+
return { kept: [], deleted: [], failed: [] };
|
|
378
|
+
}
|
|
379
|
+
const current = (() => {
|
|
380
|
+
try {
|
|
381
|
+
return path.basename(readlinkSync(path.join(cliHome, "CurrentVersion")));
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
})();
|
|
387
|
+
const previous = (() => {
|
|
388
|
+
try {
|
|
389
|
+
return path.basename(readlinkSync(path.join(cliHome, "previous")));
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
})();
|
|
395
|
+
const toDelete = selectVersionsToPrune(installed, { current, previous }, retain);
|
|
396
|
+
const deleted = [];
|
|
397
|
+
const failed = [];
|
|
398
|
+
for (const version of toDelete) {
|
|
399
|
+
const versionDir = path.join(versionsDir, version);
|
|
400
|
+
try {
|
|
401
|
+
rmSync(versionDir, { recursive: true, force: true });
|
|
402
|
+
deleted.push(version);
|
|
403
|
+
}
|
|
404
|
+
catch (error) {
|
|
405
|
+
failed.push({
|
|
406
|
+
version,
|
|
407
|
+
error: error instanceof Error ? error.message : /* v8 ignore next -- defensive: non-Error catch branch @preserve */ String(error),
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
(0, runtime_1.emitNervesEvent)({
|
|
412
|
+
component: "daemon",
|
|
413
|
+
event: "daemon.cli_versions_pruned",
|
|
414
|
+
message: `pruned ${deleted.length} old CLI versions`,
|
|
415
|
+
meta: { retain, deleted, failed: failed.length, kept: installed.filter((v) => !deleted.includes(v)) },
|
|
416
|
+
});
|
|
417
|
+
return { kept: installed.filter((v) => !deleted.includes(v)), deleted, failed };
|
|
418
|
+
}
|
|
419
|
+
function ensureLayout(deps) {
|
|
420
|
+
const cliHome = getOuroCliHome(deps.homeDir);
|
|
421
|
+
/* v8 ignore next -- dep default: tests always inject @preserve */
|
|
422
|
+
const mkdirSync = deps.mkdirSync ?? fs.mkdirSync;
|
|
423
|
+
mkdirSync(cliHome, { recursive: true });
|
|
424
|
+
mkdirSync(path.join(cliHome, "bin"), { recursive: true });
|
|
425
|
+
mkdirSync(path.join(cliHome, "versions"), { recursive: true });
|
|
426
|
+
(0, runtime_1.emitNervesEvent)({
|
|
427
|
+
component: "daemon",
|
|
428
|
+
event: "daemon.cli_layout_ensured",
|
|
429
|
+
message: "CLI directory layout ensured",
|
|
430
|
+
meta: { cliHome },
|
|
431
|
+
});
|
|
432
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
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.GITHUB_RELEASE_PUBLISHER = exports.GITHUB_DOWNLOAD_BASE = exports.GITHUB_RELEASES_API = exports.NPMJS_REGISTRY = exports.CLI_PACKAGE = void 0;
|
|
37
|
+
exports.selfUpdateE2eOverrides = selfUpdateE2eOverrides;
|
|
38
|
+
exports.githubTarballName = githubTarballName;
|
|
39
|
+
exports.lookupLatestRelease = lookupLatestRelease;
|
|
40
|
+
exports.installRelease = installRelease;
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
43
|
+
const ouro_version_manager_1 = require("./ouro-version-manager");
|
|
44
|
+
exports.CLI_PACKAGE = "@ouro.bot/cli";
|
|
45
|
+
exports.NPMJS_REGISTRY = "https://registry.npmjs.org/";
|
|
46
|
+
exports.GITHUB_RELEASES_API = "https://api.github.com/repos/ourostack/ouroboros/releases?per_page=20";
|
|
47
|
+
exports.GITHUB_DOWNLOAD_BASE = "https://github.com/ourostack/ouroboros/releases/download/";
|
|
48
|
+
/** Only releases and assets that our release workflow created are trusted. */
|
|
49
|
+
exports.GITHUB_RELEASE_PUBLISHER = "github-actions[bot]";
|
|
50
|
+
const LOOKUP_TIMEOUT_MS = 15_000;
|
|
51
|
+
const INSTALL_TIMEOUT_MS = 10 * 60_000;
|
|
52
|
+
/**
|
|
53
|
+
* The package end-to-end test serves a packed build as a GitHub release from
|
|
54
|
+
* a loopback HTTP server. Honored only with OURO_SELF_UPDATE_E2E=1 and a
|
|
55
|
+
* loopback base URL, so it cannot point a real machine at another host.
|
|
56
|
+
*/
|
|
57
|
+
function selfUpdateE2eOverrides(env) {
|
|
58
|
+
const base = env.OURO_SELF_UPDATE_E2E_GITHUB_BASE?.replace(/\/+$/, "");
|
|
59
|
+
if (env.OURO_SELF_UPDATE_E2E !== "1" || !base)
|
|
60
|
+
return null;
|
|
61
|
+
if (!/^http:\/\/(127\.0\.0\.1|localhost):\d+$/.test(base))
|
|
62
|
+
return null;
|
|
63
|
+
return { github: { apiUrl: `${base}/releases`, downloadBase: `${base}/releases/download/` }, githubOnly: true };
|
|
64
|
+
}
|
|
65
|
+
function githubTarballName(version) {
|
|
66
|
+
return `ouro.bot-cli-${version}.tgz`;
|
|
67
|
+
}
|
|
68
|
+
function message(error) {
|
|
69
|
+
return error instanceof Error ? error.message : String(error);
|
|
70
|
+
}
|
|
71
|
+
async function askNpmjs(deps) {
|
|
72
|
+
const body = await deps.fetchJson(`${exports.NPMJS_REGISTRY}${exports.CLI_PACKAGE.replace("/", "%2f")}`, LOOKUP_TIMEOUT_MS);
|
|
73
|
+
const version = body?.["dist-tags"]?.latest;
|
|
74
|
+
if (typeof version !== "string")
|
|
75
|
+
throw new Error("registry response has no latest dist-tag");
|
|
76
|
+
return { source: "npmjs", version };
|
|
77
|
+
}
|
|
78
|
+
async function askConfiguredRegistry(deps) {
|
|
79
|
+
const stdout = await deps.execFile("npm", ["view", exports.CLI_PACKAGE, "dist-tags.latest", "--json"], { timeoutMs: LOOKUP_TIMEOUT_MS });
|
|
80
|
+
const version = JSON.parse(stdout.trim());
|
|
81
|
+
if (typeof version !== "string")
|
|
82
|
+
throw new Error("npm view returned no latest dist-tag");
|
|
83
|
+
return { source: "npm-registry", version };
|
|
84
|
+
}
|
|
85
|
+
async function askGithub(deps) {
|
|
86
|
+
const github = deps.github ?? { apiUrl: exports.GITHUB_RELEASES_API, downloadBase: exports.GITHUB_DOWNLOAD_BASE };
|
|
87
|
+
const releases = await deps.fetchJson(github.apiUrl, LOOKUP_TIMEOUT_MS);
|
|
88
|
+
if (!Array.isArray(releases))
|
|
89
|
+
throw new Error("GitHub releases response is not a list");
|
|
90
|
+
let best = null;
|
|
91
|
+
for (const release of releases) {
|
|
92
|
+
if (release.draft === true || typeof release.tag_name !== "string")
|
|
93
|
+
continue;
|
|
94
|
+
const tag = /^v(\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?)$/.exec(release.tag_name);
|
|
95
|
+
if (!tag || release.author?.login !== exports.GITHUB_RELEASE_PUBLISHER)
|
|
96
|
+
continue;
|
|
97
|
+
const version = tag[1];
|
|
98
|
+
const name = githubTarballName(version);
|
|
99
|
+
const expectedUrl = `${github.downloadBase}v${version}/${name}`;
|
|
100
|
+
const asset = (release.assets ?? []).find((entry) => entry.name === name &&
|
|
101
|
+
entry.browser_download_url === expectedUrl &&
|
|
102
|
+
entry.uploader?.login === exports.GITHUB_RELEASE_PUBLISHER);
|
|
103
|
+
if (!asset)
|
|
104
|
+
continue;
|
|
105
|
+
if (!best || (0, ouro_version_manager_1.compareCliVersions)(version, best.version) > 0) {
|
|
106
|
+
best = { source: "github", version, tarballUrl: expectedUrl };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (!best)
|
|
110
|
+
throw new Error(`no GitHub release published by ${exports.GITHUB_RELEASE_PUBLISHER} carries an npm tarball`);
|
|
111
|
+
return best;
|
|
112
|
+
}
|
|
113
|
+
async function lookupLatestRelease(deps) {
|
|
114
|
+
const asks = [
|
|
115
|
+
["npmjs", () => askNpmjs(deps)],
|
|
116
|
+
["npm-registry", () => askConfiguredRegistry(deps)],
|
|
117
|
+
["github", () => askGithub(deps)],
|
|
118
|
+
];
|
|
119
|
+
const answers = await Promise.all(asks.filter(([source]) => !deps.githubOnly || source === "github").map(async ([source, ask]) => {
|
|
120
|
+
try {
|
|
121
|
+
return await ask();
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
return { source, error: message(error) };
|
|
125
|
+
}
|
|
126
|
+
}));
|
|
127
|
+
let latestVersion = null;
|
|
128
|
+
for (const answer of answers) {
|
|
129
|
+
if (answer.version && (!latestVersion || (0, ouro_version_manager_1.compareCliVersions)(answer.version, latestVersion) > 0)) {
|
|
130
|
+
latestVersion = answer.version;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
(0, runtime_1.emitNervesEvent)({
|
|
134
|
+
component: "daemon",
|
|
135
|
+
event: "daemon.self_update_lookup",
|
|
136
|
+
message: "looked up the latest published CLI release",
|
|
137
|
+
meta: {
|
|
138
|
+
latestVersion,
|
|
139
|
+
answers: answers.map((answer) => `${answer.source}=${answer.version ?? `error: ${answer.error}`}`).join("; "),
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
return { latestVersion, answers };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Install `version` into `~/.ouro-cli/versions/<version>`, trying each source
|
|
146
|
+
* that can serve it. Returns the source that worked.
|
|
147
|
+
*/
|
|
148
|
+
async function installRelease(version, lookup, cliHome, deps) {
|
|
149
|
+
const prefix = path.join(cliHome, "versions", version);
|
|
150
|
+
const github = lookup.answers.find((answer) => answer.source === "github" && answer.version === version && answer.tarballUrl);
|
|
151
|
+
const attempts = [
|
|
152
|
+
["npm-registry", ["install", "--prefix", prefix, `${exports.CLI_PACKAGE}@${version}`]],
|
|
153
|
+
...(github ? [["github", ["install", "--prefix", prefix, github.tarballUrl]]] : []),
|
|
154
|
+
["npmjs", ["install", "--prefix", prefix, `${exports.CLI_PACKAGE}@${version}`, "--registry", exports.NPMJS_REGISTRY]],
|
|
155
|
+
];
|
|
156
|
+
const failures = [];
|
|
157
|
+
for (const [source, args] of attempts.filter(([source]) => !deps.githubOnly || source === "github")) {
|
|
158
|
+
try {
|
|
159
|
+
await deps.execFile("npm", args, { timeoutMs: INSTALL_TIMEOUT_MS });
|
|
160
|
+
(0, runtime_1.emitNervesEvent)({
|
|
161
|
+
component: "daemon",
|
|
162
|
+
event: "daemon.self_update_installed",
|
|
163
|
+
message: "installed CLI release for self-update",
|
|
164
|
+
meta: { version, source },
|
|
165
|
+
});
|
|
166
|
+
return source;
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
failures.push(`${source}: ${message(error).split("\n")[0]}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
throw new Error(`could not install ${version} from any source (${failures.join("; ")})`);
|
|
173
|
+
}
|