@ouro.bot/cli 0.1.0-alpha.5 → 0.1.0-alpha.500
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 +226 -183
- package/SerpentGuide.ouro/agent.json +82 -0
- package/SerpentGuide.ouro/psyche/SOUL.md +25 -0
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +2 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
- package/assets/ouroboros.png +0 -0
- package/changelog.json +3418 -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 +989 -0
- 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 +426 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bridges/manager.js +358 -0
- package/dist/heart/bridges/state-machine.js +135 -0
- package/dist/heart/bridges/store.js +123 -0
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +111 -0
- package/dist/heart/config-registry.js +304 -0
- package/dist/heart/config.js +193 -130
- package/dist/heart/core.js +1010 -261
- package/dist/heart/cross-chat-delivery.js +131 -0
- package/dist/heart/daemon/agent-config-check.js +490 -0
- package/dist/heart/daemon/agent-discovery.js +157 -0
- package/dist/heart/daemon/agent-service.js +360 -0
- package/dist/heart/daemon/agentic-repair.js +216 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/cadence.js +70 -0
- package/dist/heart/daemon/cli-defaults.js +640 -0
- package/dist/heart/daemon/cli-exec.js +7239 -0
- package/dist/heart/daemon/cli-help.js +493 -0
- package/dist/heart/daemon/cli-parse.js +1533 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +561 -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 +30 -697
- package/dist/heart/daemon/daemon-entry.js +359 -8
- package/dist/heart/daemon/daemon-health.js +141 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +268 -0
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +813 -19
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +615 -0
- package/dist/heart/daemon/health-monitor.js +92 -1
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +206 -0
- 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 +171 -0
- package/dist/heart/daemon/log-tailer.js +82 -12
- package/dist/heart/daemon/logs-prune.js +110 -0
- package/dist/heart/daemon/message-router.js +17 -8
- package/dist/heart/daemon/os-cron-deps.js +134 -0
- 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 +215 -1
- 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 +39 -0
- package/dist/heart/daemon/runtime-logging.js +67 -16
- package/dist/heart/daemon/runtime-metadata.js +191 -0
- package/dist/heart/daemon/runtime-mode.js +67 -0
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +431 -0
- 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 +307 -0
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +264 -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 +524 -0
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +62 -0
- 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-animation.js +10 -3
- package/dist/heart/{daemon → hatch}/hatch-flow.js +54 -136
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +3 -3
- package/dist/heart/hatch/specialist-orchestrator.js +129 -0
- package/dist/heart/hatch/specialist-prompt.js +102 -0
- package/dist/heart/hatch/specialist-tools.js +306 -0
- package/dist/heart/identity.js +274 -61
- package/dist/heart/kept-notes.js +357 -0
- package/dist/heart/kicks.js +2 -20
- package/dist/heart/machine-identity.js +161 -0
- package/dist/heart/mail-import-discovery.js +353 -0
- package/dist/heart/mcp/mcp-server.js +653 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +59 -0
- package/dist/heart/outlook/outlook-http-hooks.js +66 -0
- package/dist/heart/outlook/outlook-http-response.js +7 -0
- package/dist/heart/outlook/outlook-http-routes.js +244 -0
- package/dist/heart/outlook/outlook-http-static.js +103 -0
- package/dist/heart/outlook/outlook-http-transport.js +116 -0
- package/dist/heart/outlook/outlook-http.js +99 -0
- package/dist/heart/outlook/outlook-read.js +31 -0
- package/dist/heart/outlook/outlook-types.js +27 -0
- package/dist/heart/outlook/outlook-view.js +195 -0
- package/dist/heart/outlook/readers/agent-machine.js +382 -0
- package/dist/heart/outlook/readers/continuity-readers.js +336 -0
- package/dist/heart/outlook/readers/mail.js +362 -0
- package/dist/heart/outlook/readers/runtime-readers.js +644 -0
- package/dist/heart/outlook/readers/sessions.js +232 -0
- package/dist/heart/outlook/readers/shared.js +111 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/progress-story.js +42 -0
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +255 -0
- package/dist/heart/provider-credentials.js +424 -0
- package/dist/heart/provider-failover.js +301 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -0
- package/dist/heart/provider-state.js +216 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +202 -50
- package/dist/heart/providers/azure.js +104 -13
- package/dist/heart/providers/error-classification.js +63 -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 +29 -7
- package/dist/heart/providers/openai-codex.js +63 -39
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +260 -0
- package/dist/heart/sense-truth.js +68 -0
- package/dist/heart/session-activity.js +190 -0
- package/dist/heart/session-events.js +1089 -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-transcript.js +167 -0
- package/dist/heart/start-of-turn-packet.js +345 -0
- package/dist/heart/streaming.js +129 -34
- package/dist/heart/sync.js +332 -0
- package/dist/heart/target-resolution.js +127 -0
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/tool-activity-callbacks.js +36 -0
- package/dist/heart/tool-description.js +135 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +372 -0
- package/dist/heart/turn-coordinator.js +28 -0
- package/dist/heart/versioning/ouro-bot-global-installer.js +128 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
- package/dist/heart/versioning/ouro-path-installer.js +425 -0
- package/dist/heart/{daemon → versioning}/ouro-uti.js +11 -2
- package/dist/heart/versioning/ouro-version-manager.js +295 -0
- package/dist/heart/versioning/staged-restart.js +146 -0
- package/dist/heart/versioning/update-checker.js +115 -0
- package/dist/heart/versioning/update-hooks.js +142 -0
- package/dist/heart/versioning/wrapper-publish-guard.js +86 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +606 -0
- package/dist/mailroom/core.js +672 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +426 -0
- package/dist/mailroom/mbox-import.js +382 -0
- package/dist/mailroom/outbound.js +380 -0
- package/dist/mailroom/policy.js +263 -0
- package/dist/mailroom/reader.js +219 -0
- package/dist/mailroom/search-cache.js +182 -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 +77 -1
- package/dist/mind/context.js +173 -94
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +84 -96
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/first-impressions.js +16 -2
- package/dist/mind/friends/channel.js +73 -0
- package/dist/mind/friends/group-context.js +144 -0
- package/dist/mind/friends/resolver.js +54 -2
- package/dist/mind/friends/store-file.js +58 -3
- package/dist/mind/friends/trust-explanation.js +74 -0
- package/dist/mind/friends/types.js +10 -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 +76 -9
- package/dist/mind/phrases.js +1 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1144 -117
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/scrutiny.js +173 -0
- package/dist/mind/token-estimate.js +8 -12
- package/dist/nerves/cli-logging.js +22 -3
- 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 +101 -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/runtime.js +5 -1
- package/dist/outlook-ui/assets/index-BPr5vNuM.css +1 -0
- package/dist/outlook-ui/assets/index-Cm51CY9W.js +61 -0
- package/dist/outlook-ui/index.html +15 -0
- package/dist/repertoire/ado-client.js +17 -56
- package/dist/repertoire/ado-semantic.js +11 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +774 -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 +301 -0
- package/dist/repertoire/coding/index.js +4 -1
- package/dist/repertoire/coding/manager.js +220 -13
- package/dist/repertoire/coding/spawner.js +58 -12
- package/dist/repertoire/coding/tools.js +209 -7
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +111 -0
- package/dist/repertoire/data/ado-endpoints.json +188 -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 +255 -0
- package/dist/repertoire/mcp-manager.js +305 -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 +43 -5
- package/dist/repertoire/tasks/fix.js +182 -0
- package/dist/repertoire/tasks/index.js +39 -13
- 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 -79
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-base.js +49 -707
- package/dist/repertoire/tools-bluebubbles.js +94 -0
- package/dist/repertoire/tools-bridge.js +141 -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 +105 -0
- package/dist/repertoire/tools-github.js +1 -7
- package/dist/repertoire/tools-mail.js +1377 -0
- package/dist/repertoire/tools-notes.js +376 -0
- package/dist/repertoire/tools-session.js +749 -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 +64 -61
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +356 -0
- package/dist/repertoire/tools-user-profile.js +144 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools.js +149 -98
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +561 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/attention-queue.js +116 -0
- package/dist/senses/bluebubbles/attachment-cache.js +53 -0
- package/dist/senses/bluebubbles/attachment-download.js +137 -0
- package/dist/senses/bluebubbles/client.js +685 -0
- package/dist/senses/bluebubbles/entry.js +73 -0
- package/dist/senses/bluebubbles/inbound-log.js +126 -0
- package/dist/senses/bluebubbles/index.js +1881 -0
- package/dist/senses/bluebubbles/media.js +389 -0
- package/dist/senses/bluebubbles/model.js +282 -0
- package/dist/senses/bluebubbles/mutation-log.js +116 -0
- package/dist/senses/bluebubbles/processed-log.js +111 -0
- package/dist/senses/bluebubbles/replay.js +129 -0
- package/dist/senses/bluebubbles/runtime-state.js +109 -0
- package/dist/senses/bluebubbles/session-cleanup.js +72 -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 +605 -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 +83 -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 +768 -264
- package/dist/senses/commands.js +66 -3
- package/dist/senses/continuity.js +94 -0
- package/dist/senses/habit-turn-message.js +108 -0
- package/dist/senses/inner-dialog-worker.js +199 -16
- package/dist/senses/inner-dialog.js +640 -91
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +379 -0
- package/dist/senses/pipeline.js +665 -0
- 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 +844 -197
- package/dist/senses/trust-gate.js +207 -2
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +146 -0
- package/package.json +47 -6
- 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/AdoptionSpecialist.ouro/agent.json +0 -20
- package/AdoptionSpecialist.ouro/psyche/SOUL.md +0 -22
- package/dist/heart/daemon/specialist-orchestrator.js +0 -160
- package/dist/heart/daemon/specialist-prompt.js +0 -40
- package/dist/heart/daemon/specialist-session.js +0 -142
- package/dist/heart/daemon/specialist-tools.js +0 -128
- package/dist/heart/daemon/subagent-installer.js +0 -125
- package/dist/inner-worker-entry.js +0 -4
- package/dist/mind/associative-recall.js +0 -197
- package/subagents/README.md +0 -73
- package/subagents/work-doer.md +0 -233
- package/subagents/work-merger.md +0 -624
- package/subagents/work-planner.md +0 -373
- /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/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
|
@@ -0,0 +1,425 @@
|
|
|
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.diagnoseOuroPath = diagnoseOuroPath;
|
|
37
|
+
exports.installOuroCommand = installOuroCommand;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
42
|
+
const WRAPPER_SCRIPT = `#!/bin/sh
|
|
43
|
+
# Check for dev mode — if dev-config.json exists, dispatch to the dev repo
|
|
44
|
+
# Skip dev dispatch for "up" command (explicitly returns to production)
|
|
45
|
+
DEV_CONFIG="$HOME/.ouro-cli/dev-config.json"
|
|
46
|
+
if [ -f "$DEV_CONFIG" ] && [ "$1" != "up" ]; then
|
|
47
|
+
DEV_REPO=$(node -e "try{console.log(JSON.parse(require('fs').readFileSync('$DEV_CONFIG','utf-8')).repoPath)}catch{}" 2>/dev/null)
|
|
48
|
+
DEV_ENTRY="$DEV_REPO/dist/heart/daemon/ouro-entry.js"
|
|
49
|
+
if [ -n "$DEV_REPO" ] && [ -e "$DEV_ENTRY" ]; then
|
|
50
|
+
exec node "$DEV_ENTRY" "$@"
|
|
51
|
+
fi
|
|
52
|
+
fi
|
|
53
|
+
# Fall back to installed version
|
|
54
|
+
ENTRY="$HOME/.ouro-cli/CurrentVersion/node_modules/@ouro.bot/cli/dist/heart/daemon/ouro-entry.js"
|
|
55
|
+
if [ ! -e "$ENTRY" ]; then
|
|
56
|
+
echo "ouro not installed. Run: npx ouro.bot@latest" >&2
|
|
57
|
+
exit 1
|
|
58
|
+
fi
|
|
59
|
+
exec node "$ENTRY" "$@"
|
|
60
|
+
`;
|
|
61
|
+
function writeWrapperScript(scriptPath, mkdirSync, writeFileSync, chmodSync) {
|
|
62
|
+
mkdirSync(path.dirname(scriptPath), { recursive: true });
|
|
63
|
+
writeFileSync(scriptPath, WRAPPER_SCRIPT, { mode: 0o755 });
|
|
64
|
+
chmodSync(scriptPath, 0o755);
|
|
65
|
+
}
|
|
66
|
+
function detectShellProfile(homeDir, shell, platform) {
|
|
67
|
+
if (!shell)
|
|
68
|
+
return null;
|
|
69
|
+
const base = path.basename(shell);
|
|
70
|
+
if (base === "zsh")
|
|
71
|
+
return path.join(homeDir, ".zshrc");
|
|
72
|
+
if (base === "bash") {
|
|
73
|
+
// macOS uses .bash_profile; Linux/WSL uses .bashrc (the default
|
|
74
|
+
// interactive shell config on Debian/Ubuntu). Writing to .bash_profile
|
|
75
|
+
// on Linux often has no effect because non-login shells skip it.
|
|
76
|
+
/* v8 ignore next -- ?? fallback: callers always pass platform from deps @preserve */
|
|
77
|
+
const effectivePlatform = platform ?? process.platform;
|
|
78
|
+
return effectivePlatform === "darwin"
|
|
79
|
+
? path.join(homeDir, ".bash_profile")
|
|
80
|
+
: path.join(homeDir, ".bashrc");
|
|
81
|
+
}
|
|
82
|
+
if (base === "fish")
|
|
83
|
+
return path.join(homeDir, ".config", "fish", "config.fish");
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
function isBinDirInPath(binDir, envPath) {
|
|
87
|
+
return envPath.split(path.delimiter).some((p) => p === binDir);
|
|
88
|
+
}
|
|
89
|
+
function samePath(a, b) {
|
|
90
|
+
return path.resolve(a) === path.resolve(b);
|
|
91
|
+
}
|
|
92
|
+
function buildPathExportLine(binDir, shell) {
|
|
93
|
+
const base = shell ? path.basename(shell) : /* v8 ignore next -- unreachable: only called when detectShellProfile returns non-null, which requires shell @preserve */ "";
|
|
94
|
+
if (base === "fish") {
|
|
95
|
+
return `\n# Added by ouro\nset -gx PATH ${binDir} $PATH\n`;
|
|
96
|
+
}
|
|
97
|
+
return `\n# Added by ouro\nexport PATH="${binDir}:$PATH"\n`;
|
|
98
|
+
}
|
|
99
|
+
function isWrapperCurrent(scriptPath, existsSync, readFileSync) {
|
|
100
|
+
if (!existsSync(scriptPath))
|
|
101
|
+
return false;
|
|
102
|
+
try {
|
|
103
|
+
return readFileSync(scriptPath, "utf-8") === WRAPPER_SCRIPT;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function isOwnedOuroLauncherPath(resolvedPath) {
|
|
110
|
+
const normalized = path.normalize(resolvedPath);
|
|
111
|
+
return (normalized.includes(`${path.sep}node_modules${path.sep}@ouro.bot${path.sep}cli${path.sep}`) ||
|
|
112
|
+
normalized.includes(`${path.sep}node_modules${path.sep}ouro.bot${path.sep}`));
|
|
113
|
+
}
|
|
114
|
+
function isOwnedOuroLauncherContent(content) {
|
|
115
|
+
return (content.includes("@ouro.bot/cli") ||
|
|
116
|
+
content.includes("ouro.bot@latest") ||
|
|
117
|
+
content.includes('exec npx --yes ouro.bot "$@"') ||
|
|
118
|
+
content.includes("CurrentVersion/node_modules/@ouro.bot/cli"));
|
|
119
|
+
}
|
|
120
|
+
function canRepairShadowedLauncher(shadowPath, existsSync, readFileSync, realpathSync) {
|
|
121
|
+
if (!existsSync(shadowPath))
|
|
122
|
+
return false;
|
|
123
|
+
try {
|
|
124
|
+
if (isOwnedOuroLauncherPath(realpathSync(shadowPath)))
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Fall through to content detection below.
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
return isOwnedOuroLauncherContent(readFileSync(shadowPath, "utf-8"));
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function repairShadowedLauncher(input) {
|
|
138
|
+
if (!canRepairShadowedLauncher(input.shadowPath, input.existsSync, input.readFileSync, input.realpathSync)) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
(0, runtime_1.emitNervesEvent)({
|
|
142
|
+
component: "daemon",
|
|
143
|
+
event: "daemon.ouro_path_shadow_repair_start",
|
|
144
|
+
message: "repairing stale shadowed ouro launcher",
|
|
145
|
+
meta: { shadowPath: input.shadowPath },
|
|
146
|
+
});
|
|
147
|
+
try {
|
|
148
|
+
if (input.lstatSync(input.shadowPath).isSymbolicLink()) {
|
|
149
|
+
input.unlinkSync(input.shadowPath);
|
|
150
|
+
}
|
|
151
|
+
input.writeFileSync(input.shadowPath, WRAPPER_SCRIPT, { mode: 0o755 });
|
|
152
|
+
input.chmodSync(input.shadowPath, 0o755);
|
|
153
|
+
(0, runtime_1.emitNervesEvent)({
|
|
154
|
+
component: "daemon",
|
|
155
|
+
event: "daemon.ouro_path_shadow_repair_end",
|
|
156
|
+
message: "repaired stale shadowed ouro launcher",
|
|
157
|
+
meta: { shadowPath: input.shadowPath },
|
|
158
|
+
});
|
|
159
|
+
return input.shadowPath;
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
(0, runtime_1.emitNervesEvent)({
|
|
163
|
+
level: "warn",
|
|
164
|
+
component: "daemon",
|
|
165
|
+
event: "daemon.ouro_path_shadow_repair_error",
|
|
166
|
+
message: "failed to repair stale shadowed ouro launcher",
|
|
167
|
+
meta: {
|
|
168
|
+
shadowPath: input.shadowPath,
|
|
169
|
+
error: error instanceof Error ? error.message : String(error),
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function firstOuroOnPath(envPath, existsSync) {
|
|
176
|
+
for (const dir of envPath.split(path.delimiter)) {
|
|
177
|
+
if (!dir)
|
|
178
|
+
continue;
|
|
179
|
+
const candidate = path.join(dir, "ouro");
|
|
180
|
+
if (existsSync(candidate))
|
|
181
|
+
return candidate;
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
function diagnoseOuroPath(deps) {
|
|
186
|
+
const binDir = path.join(deps.homeDir, ".ouro-cli", "bin");
|
|
187
|
+
const expectedPath = path.join(binDir, "ouro");
|
|
188
|
+
const resolvedPath = firstOuroOnPath(deps.envPath, deps.existsSync);
|
|
189
|
+
if (!resolvedPath) {
|
|
190
|
+
return {
|
|
191
|
+
status: "missing",
|
|
192
|
+
expectedPath,
|
|
193
|
+
resolvedPath: null,
|
|
194
|
+
detail: `PATH does not resolve ouro; expected ${expectedPath}`,
|
|
195
|
+
remediation: `add ${binDir} to PATH or open a new shell after ouro up updates your shell profile`,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
if (samePath(resolvedPath, expectedPath)) {
|
|
199
|
+
return {
|
|
200
|
+
status: "ok",
|
|
201
|
+
expectedPath,
|
|
202
|
+
resolvedPath,
|
|
203
|
+
detail: `PATH resolves ouro to ${expectedPath}`,
|
|
204
|
+
remediation: null,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
if (isWrapperCurrent(resolvedPath, deps.existsSync, deps.readFileSync)) {
|
|
208
|
+
return {
|
|
209
|
+
status: "ok",
|
|
210
|
+
expectedPath,
|
|
211
|
+
resolvedPath,
|
|
212
|
+
detail: `PATH resolves ouro through a compatible wrapper at ${resolvedPath}`,
|
|
213
|
+
remediation: null,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
const shadowDir = path.dirname(resolvedPath);
|
|
217
|
+
return {
|
|
218
|
+
status: "shadowed",
|
|
219
|
+
expectedPath,
|
|
220
|
+
resolvedPath,
|
|
221
|
+
detail: `PATH resolves ouro to ${resolvedPath} before ${expectedPath}`,
|
|
222
|
+
remediation: `move ${binDir} before ${shadowDir} in PATH, or remove/replace ${resolvedPath} after confirming it is the stale ouro launcher`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function installOuroCommand(deps = {}) {
|
|
226
|
+
/* v8 ignore start -- dep defaults: only used in real runtime, tests always inject @preserve */
|
|
227
|
+
const platform = deps.platform ?? process.platform;
|
|
228
|
+
const homeDir = deps.homeDir ?? os.homedir();
|
|
229
|
+
const existsSync = deps.existsSync ?? fs.existsSync;
|
|
230
|
+
const mkdirSync = deps.mkdirSync ?? fs.mkdirSync;
|
|
231
|
+
const writeFileSync = deps.writeFileSync ?? fs.writeFileSync;
|
|
232
|
+
const readFileSync = deps.readFileSync ?? ((p, enc) => fs.readFileSync(p, enc));
|
|
233
|
+
const appendFileSync = deps.appendFileSync ?? fs.appendFileSync;
|
|
234
|
+
const chmodSync = deps.chmodSync ?? fs.chmodSync;
|
|
235
|
+
const realpathSync = deps.realpathSync ?? fs.realpathSync;
|
|
236
|
+
const lstatSync = deps.lstatSync ?? fs.lstatSync;
|
|
237
|
+
const unlinkSync = deps.unlinkSync ?? fs.unlinkSync;
|
|
238
|
+
const envPath = deps.envPath ?? process.env.PATH ?? "";
|
|
239
|
+
const shell = deps.shell ?? process.env.SHELL;
|
|
240
|
+
/* v8 ignore stop */
|
|
241
|
+
if (platform === "win32") {
|
|
242
|
+
(0, runtime_1.emitNervesEvent)({
|
|
243
|
+
component: "daemon",
|
|
244
|
+
event: "daemon.ouro_path_install_skip",
|
|
245
|
+
message: "skipped ouro PATH install on Windows",
|
|
246
|
+
meta: { platform },
|
|
247
|
+
});
|
|
248
|
+
return { installed: false, scriptPath: null, pathReady: false, shellProfileUpdated: null, skippedReason: "windows", repairedOldLauncher: false };
|
|
249
|
+
}
|
|
250
|
+
// Ensure ~/.ouro-cli/ directory layout exists
|
|
251
|
+
if (deps.ensureCliLayout) {
|
|
252
|
+
deps.ensureCliLayout();
|
|
253
|
+
}
|
|
254
|
+
const binDir = path.join(homeDir, ".ouro-cli", "bin");
|
|
255
|
+
const scriptPath = path.join(binDir, "ouro");
|
|
256
|
+
const oldScriptPath = path.join(homeDir, ".local", "bin", "ouro");
|
|
257
|
+
const resolvePath = () => diagnoseOuroPath({ homeDir, envPath, existsSync, readFileSync });
|
|
258
|
+
const modernCurrent = isWrapperCurrent(scriptPath, existsSync, readFileSync);
|
|
259
|
+
const oldExists = existsSync(oldScriptPath);
|
|
260
|
+
const oldCurrent = oldExists && isWrapperCurrent(oldScriptPath, existsSync, readFileSync);
|
|
261
|
+
// ── Repair old ~/.local/bin/ouro launcher ──
|
|
262
|
+
// If the old launcher exists with stale content it can shadow the modern
|
|
263
|
+
// path and cause the wrong CLI version to run. Overwrite it with the
|
|
264
|
+
// current wrapper so both paths resolve to ~/.ouro-cli/CurrentVersion.
|
|
265
|
+
let repairedOldLauncher = false;
|
|
266
|
+
if (oldExists && !oldCurrent) {
|
|
267
|
+
(0, runtime_1.emitNervesEvent)({
|
|
268
|
+
component: "daemon",
|
|
269
|
+
event: "daemon.ouro_path_repair_old",
|
|
270
|
+
message: "repairing stale old launcher at ~/.local/bin/ouro",
|
|
271
|
+
meta: { oldScriptPath },
|
|
272
|
+
});
|
|
273
|
+
try {
|
|
274
|
+
writeFileSync(oldScriptPath, WRAPPER_SCRIPT, { mode: 0o755 });
|
|
275
|
+
chmodSync(oldScriptPath, 0o755);
|
|
276
|
+
repairedOldLauncher = true;
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// Best effort — old launcher repair failure must not block modern install
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// ── Fast-path: modern wrapper already current ──
|
|
283
|
+
if (modernCurrent) {
|
|
284
|
+
let pathResolution = resolvePath();
|
|
285
|
+
const repairedShadowedLauncherPath = pathResolution.status === "shadowed" && pathResolution.resolvedPath
|
|
286
|
+
? repairShadowedLauncher({
|
|
287
|
+
shadowPath: pathResolution.resolvedPath,
|
|
288
|
+
existsSync,
|
|
289
|
+
readFileSync,
|
|
290
|
+
writeFileSync,
|
|
291
|
+
chmodSync,
|
|
292
|
+
realpathSync,
|
|
293
|
+
lstatSync,
|
|
294
|
+
unlinkSync,
|
|
295
|
+
})
|
|
296
|
+
: null;
|
|
297
|
+
if (repairedShadowedLauncherPath) {
|
|
298
|
+
pathResolution = resolvePath();
|
|
299
|
+
}
|
|
300
|
+
if (pathResolution.status === "shadowed") {
|
|
301
|
+
(0, runtime_1.emitNervesEvent)({
|
|
302
|
+
level: "warn",
|
|
303
|
+
component: "daemon",
|
|
304
|
+
event: "daemon.ouro_path_shadowed",
|
|
305
|
+
message: "PATH resolves ouro to a stale external launcher",
|
|
306
|
+
meta: { resolvedPath: pathResolution.resolvedPath, expectedPath: pathResolution.expectedPath, remediation: pathResolution.remediation },
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
(0, runtime_1.emitNervesEvent)({
|
|
310
|
+
component: "daemon",
|
|
311
|
+
event: "daemon.ouro_path_install_skip",
|
|
312
|
+
message: "ouro command already installed",
|
|
313
|
+
meta: { scriptPath, pathStatus: pathResolution.status, resolvedPath: pathResolution.resolvedPath },
|
|
314
|
+
});
|
|
315
|
+
return {
|
|
316
|
+
installed: false,
|
|
317
|
+
scriptPath,
|
|
318
|
+
pathReady: isBinDirInPath(binDir, envPath),
|
|
319
|
+
shellProfileUpdated: null,
|
|
320
|
+
skippedReason: "already-installed",
|
|
321
|
+
repairedOldLauncher,
|
|
322
|
+
repairedShadowedLauncherPath,
|
|
323
|
+
pathResolution,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
(0, runtime_1.emitNervesEvent)({
|
|
327
|
+
component: "daemon",
|
|
328
|
+
event: "daemon.ouro_path_install_start",
|
|
329
|
+
message: existsSync(scriptPath) ? "repairing stale ouro wrapper script" : "installing ouro command to PATH",
|
|
330
|
+
meta: { scriptPath, binDir },
|
|
331
|
+
});
|
|
332
|
+
try {
|
|
333
|
+
if (!modernCurrent) {
|
|
334
|
+
writeWrapperScript(scriptPath, mkdirSync, writeFileSync, chmodSync);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
(0, runtime_1.emitNervesEvent)({
|
|
339
|
+
level: "warn",
|
|
340
|
+
component: "daemon",
|
|
341
|
+
event: "daemon.ouro_path_install_error",
|
|
342
|
+
message: "failed to install ouro command",
|
|
343
|
+
meta: { error: error instanceof Error ? error.message : /* v8 ignore next -- defensive: non-Error catch branch @preserve */ String(error) },
|
|
344
|
+
});
|
|
345
|
+
return { installed: false, scriptPath: null, pathReady: false, shellProfileUpdated: null, skippedReason: error instanceof Error ? error.message : /* v8 ignore next -- defensive @preserve */ String(error), repairedOldLauncher };
|
|
346
|
+
}
|
|
347
|
+
// Check if ~/.ouro-cli/bin is already in PATH
|
|
348
|
+
const pathReady = isBinDirInPath(binDir, envPath);
|
|
349
|
+
let shellProfileUpdated = null;
|
|
350
|
+
if (!pathReady) {
|
|
351
|
+
const profilePath = detectShellProfile(homeDir, shell, platform);
|
|
352
|
+
if (profilePath) {
|
|
353
|
+
try {
|
|
354
|
+
let existing = "";
|
|
355
|
+
try {
|
|
356
|
+
existing = readFileSync(profilePath, "utf-8");
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
// Profile doesn't exist yet — that's fine, we'll create it
|
|
360
|
+
}
|
|
361
|
+
if (!existing.includes(binDir)) {
|
|
362
|
+
appendFileSync(profilePath, buildPathExportLine(binDir, shell));
|
|
363
|
+
shellProfileUpdated = profilePath;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
(0, runtime_1.emitNervesEvent)({
|
|
368
|
+
level: "warn",
|
|
369
|
+
component: "daemon",
|
|
370
|
+
event: "daemon.ouro_path_profile_error",
|
|
371
|
+
message: "failed to update shell profile for PATH",
|
|
372
|
+
meta: { profilePath, error: error instanceof Error ? error.message : /* v8 ignore next -- defensive: non-Error catch branch @preserve */ String(error) },
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
let pathResolution = resolvePath();
|
|
378
|
+
const repairedShadowedLauncherPath = pathResolution.status === "shadowed" && pathResolution.resolvedPath
|
|
379
|
+
? repairShadowedLauncher({
|
|
380
|
+
shadowPath: pathResolution.resolvedPath,
|
|
381
|
+
existsSync,
|
|
382
|
+
readFileSync,
|
|
383
|
+
writeFileSync,
|
|
384
|
+
chmodSync,
|
|
385
|
+
realpathSync,
|
|
386
|
+
lstatSync,
|
|
387
|
+
unlinkSync,
|
|
388
|
+
})
|
|
389
|
+
: null;
|
|
390
|
+
if (repairedShadowedLauncherPath) {
|
|
391
|
+
pathResolution = resolvePath();
|
|
392
|
+
}
|
|
393
|
+
if (pathResolution.status === "shadowed") {
|
|
394
|
+
(0, runtime_1.emitNervesEvent)({
|
|
395
|
+
level: "warn",
|
|
396
|
+
component: "daemon",
|
|
397
|
+
event: "daemon.ouro_path_shadowed",
|
|
398
|
+
message: "PATH resolves ouro to a stale external launcher",
|
|
399
|
+
meta: { resolvedPath: pathResolution.resolvedPath, expectedPath: pathResolution.expectedPath, remediation: pathResolution.remediation },
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
(0, runtime_1.emitNervesEvent)({
|
|
403
|
+
component: "daemon",
|
|
404
|
+
event: "daemon.ouro_path_install_end",
|
|
405
|
+
message: "ouro command installed",
|
|
406
|
+
meta: {
|
|
407
|
+
scriptPath,
|
|
408
|
+
pathReady,
|
|
409
|
+
shellProfileUpdated,
|
|
410
|
+
oldScriptPath: oldExists ? oldScriptPath : null,
|
|
411
|
+
repairedShadowedLauncherPath,
|
|
412
|
+
pathStatus: pathResolution.status,
|
|
413
|
+
resolvedPath: pathResolution.resolvedPath,
|
|
414
|
+
},
|
|
415
|
+
});
|
|
416
|
+
return {
|
|
417
|
+
installed: true,
|
|
418
|
+
scriptPath,
|
|
419
|
+
pathReady,
|
|
420
|
+
shellProfileUpdated,
|
|
421
|
+
repairedOldLauncher,
|
|
422
|
+
repairedShadowedLauncherPath,
|
|
423
|
+
pathResolution,
|
|
424
|
+
};
|
|
425
|
+
}
|
|
@@ -42,7 +42,13 @@ const identity_1 = require("../identity");
|
|
|
42
42
|
const runtime_1 = require("../../nerves/runtime");
|
|
43
43
|
const LSREGISTER_PATH = "/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister";
|
|
44
44
|
const ICON_SIZES = [16, 32, 128, 256, 512];
|
|
45
|
-
function resolveIconSourcePath(repoRoot) {
|
|
45
|
+
function resolveIconSourcePath(repoRoot, existsSync) {
|
|
46
|
+
// Prefer bundled asset (shipped with npm package)
|
|
47
|
+
const bundledPath = path.resolve(repoRoot, "assets", "ouroboros.png");
|
|
48
|
+
if (existsSync(bundledPath)) {
|
|
49
|
+
return bundledPath;
|
|
50
|
+
}
|
|
51
|
+
// Fall back to adjacent repo path (dev environment)
|
|
46
52
|
return path.resolve(repoRoot, "..", "ouroboros-website", "public", "images", "ouroboros.png");
|
|
47
53
|
}
|
|
48
54
|
function buildIconAsset(iconSourcePath, icnsPath, iconsetDir, deps) {
|
|
@@ -91,6 +97,7 @@ function buildInfoPlist(iconInstalled) {
|
|
|
91
97
|
" <key>UTTypeConformsTo</key>",
|
|
92
98
|
" <array>",
|
|
93
99
|
" <string>public.folder</string>",
|
|
100
|
+
" <string>com.apple.package</string>",
|
|
94
101
|
" </array>",
|
|
95
102
|
" <key>UTTypeTagSpecification</key>",
|
|
96
103
|
" <dict>",
|
|
@@ -112,6 +119,8 @@ function buildInfoPlist(iconInstalled) {
|
|
|
112
119
|
" </array>",
|
|
113
120
|
" <key>CFBundleTypeRole</key>",
|
|
114
121
|
" <string>Editor</string>",
|
|
122
|
+
" <key>LSTypeIsPackage</key>",
|
|
123
|
+
" <true/>",
|
|
115
124
|
` ${iconTag.trim()}`,
|
|
116
125
|
" </dict>",
|
|
117
126
|
" </array>",
|
|
@@ -152,7 +161,7 @@ function registerOuroBundleUti(deps = {}) {
|
|
|
152
161
|
const plistPath = path.join(contentsDir, "Info.plist");
|
|
153
162
|
const icnsPath = path.join(resourcesDir, "ouro.icns");
|
|
154
163
|
const iconsetDir = path.join(supportRoot, "ouro.iconset");
|
|
155
|
-
const iconSourcePath = resolveIconSourcePath(repoRoot);
|
|
164
|
+
const iconSourcePath = resolveIconSourcePath(repoRoot, existsSync);
|
|
156
165
|
(0, runtime_1.emitNervesEvent)({
|
|
157
166
|
component: "daemon",
|
|
158
167
|
event: "daemon.ouro_uti_register_start",
|