@ouro.bot/cli 0.1.0-alpha.55 → 0.1.0-alpha.550
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +133 -19
- package/RepairGuide.ouro/agent.json +5 -0
- package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
- package/RepairGuide.ouro/psyche/SOUL.md +55 -0
- package/RepairGuide.ouro/skills/diagnose-bootstrap-drift.md +54 -0
- package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
- package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
- package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
- package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
- package/changelog.json +3555 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +140 -0
- package/dist/arc/episodes.js +117 -0
- package/dist/arc/intentions.js +133 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +237 -0
- package/dist/arc/packets.js +193 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +65 -0
- package/dist/heart/active-work.js +837 -26
- package/dist/heart/agent-entry.js +58 -3
- package/dist/heart/attachments/image-normalize.js +194 -0
- package/dist/heart/attachments/materialize.js +97 -0
- package/dist/heart/attachments/originals.js +88 -0
- package/dist/heart/attachments/render.js +29 -0
- package/dist/heart/attachments/sources/adapter.js +2 -0
- package/dist/heart/attachments/sources/bluebubbles.js +156 -0
- package/dist/heart/attachments/sources/cli-local-file.js +78 -0
- package/dist/heart/attachments/sources/index.js +16 -0
- package/dist/heart/attachments/store.js +103 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +479 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +111 -0
- package/dist/heart/config-registry.js +304 -0
- package/dist/heart/config.js +114 -118
- package/dist/heart/core.js +925 -246
- package/dist/heart/cross-chat-delivery.js +3 -18
- package/dist/heart/daemon/agent-config-check.js +512 -0
- package/dist/heart/daemon/agent-discovery.js +102 -3
- package/dist/heart/daemon/agent-service.js +522 -0
- package/dist/heart/daemon/agentic-repair.js +554 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +70 -0
- package/dist/heart/daemon/cli-defaults.js +665 -0
- package/dist/heart/daemon/cli-exec.js +7565 -0
- package/dist/heart/daemon/cli-help.js +498 -0
- package/dist/heart/daemon/cli-parse.js +1590 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +775 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/daemon-cli.js +29 -1672
- package/dist/heart/daemon/daemon-entry.js +417 -2
- package/dist/heart/daemon/daemon-health.js +183 -0
- package/dist/heart/daemon/daemon-rollup.js +58 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +87 -13
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +758 -71
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +844 -0
- package/dist/heart/daemon/drift-detection.js +146 -0
- package/dist/heart/daemon/health-monitor.js +122 -1
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +102 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +82 -12
- package/dist/heart/daemon/logs-prune.js +110 -0
- package/dist/heart/daemon/mcp-canary.js +297 -0
- package/dist/heart/daemon/message-router.js +2 -2
- package/dist/heart/daemon/os-cron-deps.js +135 -0
- package/dist/heart/daemon/os-cron.js +14 -12
- package/dist/heart/daemon/ouro-bot-entry.js +4 -2
- package/dist/heart/daemon/ouro-entry.js +3 -1
- package/dist/heart/daemon/process-manager.js +375 -33
- package/dist/heart/daemon/provider-discovery.js +137 -0
- package/dist/heart/daemon/provider-ping-progress.js +83 -0
- package/dist/heart/daemon/pulse.js +475 -0
- package/dist/heart/daemon/readiness-repair.js +365 -0
- package/dist/heart/daemon/run-hooks.js +2 -0
- package/dist/heart/daemon/runtime-logging.js +67 -16
- package/dist/heart/daemon/runtime-metadata.js +3 -31
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +353 -38
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +94 -0
- package/dist/heart/daemon/socket-client.js +158 -11
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +330 -0
- package/dist/heart/daemon/task-scheduler.js +3 -25
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +162 -17
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -1
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +140 -0
- package/dist/heart/habits/habit-runtime-state.js +100 -0
- package/dist/heart/habits/habit-scheduler.js +372 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +52 -117
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
- package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
- package/dist/heart/identity.js +200 -51
- package/dist/heart/kept-notes.js +357 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +161 -0
- package/dist/heart/mail-import-discovery.js +353 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +31 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +195 -0
- package/dist/heart/mailbox/readers/agent-machine.js +382 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
- package/dist/heart/mailbox/readers/mail.js +362 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
- package/dist/heart/mailbox/readers/sessions.js +232 -0
- package/dist/heart/mailbox/readers/shared.js +111 -0
- package/dist/heart/mcp/mcp-server.js +683 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +19 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +255 -0
- package/dist/heart/provider-credentials.js +425 -0
- package/dist/heart/provider-failover.js +301 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -0
- package/dist/heart/provider-state.js +216 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +139 -52
- package/dist/heart/providers/azure.js +97 -13
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +145 -0
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +26 -8
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +367 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +11 -4
- package/dist/heart/session-activity.js +43 -22
- package/dist/heart/session-events.js +1149 -0
- package/dist/heart/session-playback-cli-main.js +5 -0
- package/dist/heart/session-playback-cli.js +36 -0
- package/dist/heart/session-playback.js +231 -0
- package/dist/heart/session-stats-cli-main.js +5 -0
- package/dist/heart/session-stats.js +182 -0
- package/dist/heart/session-transcript.js +243 -0
- package/dist/heart/start-of-turn-packet.js +345 -0
- package/dist/heart/streaming.js +44 -27
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync.js +449 -0
- package/dist/heart/target-resolution.js +9 -5
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/timeouts.js +101 -0
- package/dist/heart/tool-activity-callbacks.js +59 -0
- package/dist/heart/tool-description.js +139 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +381 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
- package/dist/heart/versioning/ouro-path-installer.js +426 -0
- package/dist/heart/versioning/ouro-version-manager.js +295 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
- package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
- package/dist/mailbox-ui/assets/index-Cm51CY9W.js +61 -0
- package/dist/mailbox-ui/index.html +15 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +674 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/core.js +720 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +430 -0
- package/dist/mailroom/mbox-import.js +383 -0
- package/dist/mailroom/outbound.js +380 -0
- package/dist/mailroom/policy.js +263 -0
- package/dist/mailroom/reader.js +233 -0
- package/dist/mailroom/search-cache.js +256 -0
- package/dist/mailroom/search-relevance.js +319 -0
- package/dist/mailroom/smtp-ingress.js +176 -0
- package/dist/mailroom/source-state.js +176 -0
- package/dist/mailroom/thread.js +109 -0
- package/dist/mailroom/travel-extract.js +89 -0
- package/dist/mind/bundle-manifest.js +7 -1
- package/dist/mind/context.js +165 -101
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +62 -75
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/friends/channel.js +30 -0
- package/dist/mind/friends/resolver.js +54 -2
- package/dist/mind/friends/store-file.js +39 -3
- package/dist/mind/friends/types.js +2 -2
- package/dist/mind/journal-index.js +161 -0
- package/dist/mind/note-search.js +268 -0
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +4 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +995 -123
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/scrutiny.js +173 -0
- package/dist/nerves/cli-logging.js +7 -1
- package/dist/nerves/coverage/audit-rules.js +15 -6
- package/dist/nerves/coverage/audit.js +28 -2
- package/dist/nerves/coverage/cli.js +1 -1
- package/dist/nerves/coverage/contract.js +5 -5
- package/dist/nerves/coverage/file-completeness.js +139 -5
- package/dist/nerves/coverage/run-artifacts.js +1 -1
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +224 -4
- package/dist/nerves/observation.js +20 -0
- package/dist/nerves/redact.js +79 -0
- package/dist/nerves/review/cli-main.js +5 -0
- package/dist/nerves/review/cli.js +156 -0
- package/dist/nerves/review/core.js +152 -0
- package/dist/nerves/runtime.js +5 -1
- package/dist/repertoire/ado-client.js +15 -56
- package/dist/repertoire/ado-semantic.js +11 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +816 -0
- package/dist/repertoire/bundle-templates.js +72 -0
- package/dist/repertoire/bw-installer.js +180 -0
- package/dist/repertoire/coding/codex-jsonl.js +64 -0
- package/dist/repertoire/coding/context-pack.js +330 -0
- package/dist/repertoire/coding/feedback.js +197 -30
- package/dist/repertoire/coding/manager.js +158 -9
- package/dist/repertoire/coding/spawner.js +55 -9
- package/dist/repertoire/coding/tools.js +170 -7
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +111 -0
- package/dist/repertoire/duffel-client.js +185 -0
- package/dist/repertoire/github-client.js +14 -55
- package/dist/repertoire/graph-client.js +11 -52
- package/dist/repertoire/guardrails.js +396 -0
- package/dist/repertoire/mcp-client.js +295 -0
- package/dist/repertoire/mcp-manager.js +362 -0
- package/dist/repertoire/mcp-tools.js +63 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +15 -24
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tasks/board.js +31 -5
- package/dist/repertoire/tasks/fix.js +182 -0
- package/dist/repertoire/tasks/index.js +16 -4
- package/dist/repertoire/tasks/lifecycle.js +2 -2
- package/dist/repertoire/tasks/parser.js +3 -2
- package/dist/repertoire/tasks/scanner.js +194 -37
- package/dist/repertoire/tasks/transitions.js +16 -78
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-base.js +47 -1075
- package/dist/repertoire/tools-bluebubbles.js +1 -0
- package/dist/repertoire/tools-bridge.js +142 -0
- package/dist/repertoire/tools-bundle.js +984 -0
- package/dist/repertoire/tools-config.js +185 -0
- package/dist/repertoire/tools-continuity.js +248 -0
- package/dist/repertoire/tools-credential.js +381 -0
- package/dist/repertoire/tools-files.js +342 -0
- package/dist/repertoire/tools-flight.js +224 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-github.js +1 -7
- package/dist/repertoire/tools-mail.js +1857 -0
- package/dist/repertoire/tools-notes.js +421 -0
- package/dist/repertoire/tools-session.js +750 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +180 -0
- package/dist/repertoire/tools-surface.js +243 -0
- package/dist/repertoire/tools-teams.js +9 -39
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +604 -0
- package/dist/repertoire/tools-user-profile.js +144 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools.js +108 -100
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +561 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/attention-queue.js +116 -0
- package/dist/senses/bluebubbles/active-turns.js +216 -0
- package/dist/senses/bluebubbles/attachment-cache.js +53 -0
- package/dist/senses/bluebubbles/attachment-download.js +137 -0
- package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
- package/dist/senses/bluebubbles/entry.js +77 -0
- package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
- package/dist/senses/bluebubbles/index.js +2305 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/replay.js +137 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- package/dist/senses/cli/bracketed-paste.js +82 -0
- package/dist/senses/cli/image-paste.js +287 -0
- package/dist/senses/cli/image-ref-navigation.js +75 -0
- package/dist/senses/cli/ink-app.js +156 -0
- package/dist/senses/cli/inline-diff.js +64 -0
- package/dist/senses/cli/input-keys.js +174 -0
- package/dist/senses/cli/kill-ring.js +86 -0
- package/dist/senses/cli/message-list.js +51 -0
- package/dist/senses/cli/ouro-tui.js +607 -0
- package/dist/senses/cli/spinner-imperative.js +135 -0
- package/dist/senses/cli/spinner.js +101 -0
- package/dist/senses/cli/status-line.js +60 -0
- package/dist/senses/cli/streaming-markdown.js +526 -0
- package/dist/senses/cli/tool-display.js +85 -0
- package/dist/senses/cli/tool-render.js +85 -0
- package/dist/senses/cli/tui-store.js +240 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +60 -8
- package/dist/senses/cli-layout.js +187 -0
- package/dist/senses/cli.js +520 -209
- package/dist/senses/commands.js +66 -3
- package/dist/senses/habit-turn-message.js +108 -0
- package/dist/senses/inner-dialog-worker.js +175 -21
- package/dist/senses/inner-dialog.js +330 -27
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +379 -0
- package/dist/senses/pipeline.js +569 -182
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +248 -0
- package/dist/senses/surface-tool.js +68 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +387 -98
- package/dist/senses/trust-gate.js +100 -5
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +146 -0
- package/package.json +38 -7
- package/skills/agent-commerce.md +106 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +101 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/ouro-path-installer.js +0 -178
- package/dist/heart/daemon/subagent-installer.js +0 -166
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/associative-recall.js +0 -209
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1177
- package/dist/senses/debug-activity.js +0 -148
- package/subagents/README.md +0 -86
- package/subagents/work-doer.md +0 -237
- package/subagents/work-merger.md +0 -618
- package/subagents/work-planner.md +0 -390
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
- /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
- /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
- /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
- /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InlineDiff = InlineDiff;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const ink_1 = require("ink");
|
|
6
|
+
// Ouroboros brand colors
|
|
7
|
+
const OURO_GREEN = "#2ecc40"; // added lines -- serpent green
|
|
8
|
+
const OURO_RED = "#e74c3c"; // removed lines
|
|
9
|
+
const OURO_HEADER = "#4ec9b0"; // file header -- teal
|
|
10
|
+
const OURO_LINE_NUM = "gray"; // line numbers -- subtle
|
|
11
|
+
/**
|
|
12
|
+
* Simple line-level diff algorithm (Myers-like via LCS).
|
|
13
|
+
* Produces a sequence of add/remove/context lines.
|
|
14
|
+
*/
|
|
15
|
+
function computeDiff(before, after) {
|
|
16
|
+
const oldLines = before ? before.split("\n") : [];
|
|
17
|
+
const newLines = after ? after.split("\n") : [];
|
|
18
|
+
// LCS-based diff
|
|
19
|
+
const m = oldLines.length;
|
|
20
|
+
const n = newLines.length;
|
|
21
|
+
const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
|
|
22
|
+
for (let i = 1; i <= m; i++) {
|
|
23
|
+
for (let j = 1; j <= n; j++) {
|
|
24
|
+
if (oldLines[i - 1] === newLines[j - 1]) {
|
|
25
|
+
dp[i][j] = dp[i - 1][j - 1] + 1;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Backtrack to build diff
|
|
33
|
+
const result = [];
|
|
34
|
+
let i = m;
|
|
35
|
+
let j = n;
|
|
36
|
+
while (i > 0 || j > 0) {
|
|
37
|
+
if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {
|
|
38
|
+
result.unshift({ type: "context", content: oldLines[i - 1], oldNum: i, newNum: j });
|
|
39
|
+
i--;
|
|
40
|
+
j--;
|
|
41
|
+
}
|
|
42
|
+
else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {
|
|
43
|
+
result.unshift({ type: "add", content: newLines[j - 1], newNum: j });
|
|
44
|
+
j--;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
result.unshift({ type: "remove", content: oldLines[i - 1], oldNum: i });
|
|
48
|
+
i--;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
function DiffLineComponent({ line }) {
|
|
54
|
+
const num = line.type === "remove" ? line.oldNum : line.newNum;
|
|
55
|
+
/* v8 ignore next -- defensive fallback; line numbers always present @preserve */
|
|
56
|
+
const lineNum = num !== undefined ? String(num) : "";
|
|
57
|
+
const prefix = line.type === "add" ? "+" : line.type === "remove" ? "-" : " ";
|
|
58
|
+
const color = line.type === "add" ? OURO_GREEN : line.type === "remove" ? OURO_RED : undefined;
|
|
59
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Text, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { color: OURO_LINE_NUM, children: lineNum.padStart(4) }), (0, jsx_runtime_1.jsx)(ink_1.Text, { color: color, children: ` ${prefix} ${line.content}` })] }));
|
|
60
|
+
}
|
|
61
|
+
function InlineDiff({ before, after, filePath }) {
|
|
62
|
+
const diffLines = computeDiff(before, after);
|
|
63
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { color: OURO_HEADER, bold: true, children: filePath }), diffLines.map((line, i) => ((0, jsx_runtime_1.jsx)(DiffLineComponent, { line: line }, i)))] }));
|
|
64
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleKillToEnd = handleKillToEnd;
|
|
4
|
+
exports.handleKillToStart = handleKillToStart;
|
|
5
|
+
exports.handleKillWordBack = handleKillWordBack;
|
|
6
|
+
exports.handleYank = handleYank;
|
|
7
|
+
exports.handleCursorLeft = handleCursorLeft;
|
|
8
|
+
exports.handleCursorRight = handleCursorRight;
|
|
9
|
+
exports.handleBackspace = handleBackspace;
|
|
10
|
+
exports.handleForwardDelete = handleForwardDelete;
|
|
11
|
+
exports.handleHome = handleHome;
|
|
12
|
+
exports.handleEnd = handleEnd;
|
|
13
|
+
exports.classifyEscapeSequence = classifyEscapeSequence;
|
|
14
|
+
exports.handleYankPop = handleYankPop;
|
|
15
|
+
exports.handleEmptyPaste = handleEmptyPaste;
|
|
16
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
17
|
+
/**
|
|
18
|
+
* Ctrl+K: kill from cursor to end of line.
|
|
19
|
+
* Pushes killed text to ring with "append" direction.
|
|
20
|
+
*/
|
|
21
|
+
function handleKillToEnd(text, cursorPos, ring) {
|
|
22
|
+
(0, runtime_1.emitNervesEvent)({ component: "senses", event: "senses.input_kill", message: "kill to end", meta: { direction: "end" } });
|
|
23
|
+
if (cursorPos >= text.length) {
|
|
24
|
+
return { text, cursorPos };
|
|
25
|
+
}
|
|
26
|
+
const killed = text.slice(cursorPos);
|
|
27
|
+
ring.push(killed, "append");
|
|
28
|
+
return { text: text.slice(0, cursorPos), cursorPos };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Ctrl+U: kill from start of line to cursor.
|
|
32
|
+
* Pushes killed text to ring with "prepend" direction.
|
|
33
|
+
*/
|
|
34
|
+
function handleKillToStart(text, cursorPos, ring) {
|
|
35
|
+
if (cursorPos === 0) {
|
|
36
|
+
return { text, cursorPos };
|
|
37
|
+
}
|
|
38
|
+
const killed = text.slice(0, cursorPos);
|
|
39
|
+
ring.push(killed, "prepend");
|
|
40
|
+
return { text: text.slice(cursorPos), cursorPos: 0 };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Ctrl+W / Meta+Backspace: kill word before cursor.
|
|
44
|
+
* Pushes killed word to ring with "prepend" direction.
|
|
45
|
+
*/
|
|
46
|
+
function handleKillWordBack(text, cursorPos, ring) {
|
|
47
|
+
if (cursorPos === 0) {
|
|
48
|
+
return { text, cursorPos };
|
|
49
|
+
}
|
|
50
|
+
const before = text.slice(0, cursorPos);
|
|
51
|
+
const after = text.slice(cursorPos);
|
|
52
|
+
const wordStart = before.replace(/\s*\S+\s*$/, "");
|
|
53
|
+
const killed = before.slice(wordStart.length);
|
|
54
|
+
ring.push(killed, "prepend");
|
|
55
|
+
return { text: wordStart + after, cursorPos: wordStart.length };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Ctrl+Y: yank (paste) from kill ring at cursor.
|
|
59
|
+
* Returns null if ring is empty.
|
|
60
|
+
*/
|
|
61
|
+
function handleYank(text, cursorPos, ring) {
|
|
62
|
+
const yanked = ring.yank();
|
|
63
|
+
if (yanked === undefined)
|
|
64
|
+
return null;
|
|
65
|
+
const before = text.slice(0, cursorPos);
|
|
66
|
+
const after = text.slice(cursorPos);
|
|
67
|
+
return { text: before + yanked + after, cursorPos: cursorPos + yanked.length };
|
|
68
|
+
}
|
|
69
|
+
// ─── Emacs Cursor Navigation ─────────────────────────────────────
|
|
70
|
+
/** Ctrl+B: move cursor left by 1. Returns new cursor position. */
|
|
71
|
+
function handleCursorLeft(_text, cursorPos) {
|
|
72
|
+
return Math.max(0, cursorPos - 1);
|
|
73
|
+
}
|
|
74
|
+
/** Ctrl+F: move cursor right by 1. Returns new cursor position. */
|
|
75
|
+
function handleCursorRight(text, cursorPos) {
|
|
76
|
+
return Math.min(text.length, cursorPos + 1);
|
|
77
|
+
}
|
|
78
|
+
/** Ctrl+H: backspace (delete char before cursor). */
|
|
79
|
+
function handleBackspace(text, cursorPos) {
|
|
80
|
+
if (cursorPos === 0)
|
|
81
|
+
return { text, cursorPos };
|
|
82
|
+
const before = text.slice(0, cursorPos - 1);
|
|
83
|
+
const after = text.slice(cursorPos);
|
|
84
|
+
return { text: before + after, cursorPos: cursorPos - 1 };
|
|
85
|
+
}
|
|
86
|
+
/** Forward delete: delete char at cursor position. */
|
|
87
|
+
function handleForwardDelete(text, cursorPos) {
|
|
88
|
+
if (cursorPos >= text.length)
|
|
89
|
+
return { text, cursorPos };
|
|
90
|
+
const before = text.slice(0, cursorPos);
|
|
91
|
+
const after = text.slice(cursorPos + 1);
|
|
92
|
+
return { text: before + after, cursorPos };
|
|
93
|
+
}
|
|
94
|
+
// ─── Home / End ──────────────────────────────────────────────────
|
|
95
|
+
/** Home key: move cursor to position 0. Returns new cursor position. */
|
|
96
|
+
function handleHome(_text, _cursorPos) {
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
/** End key: move cursor to end of text. Returns new cursor position. */
|
|
100
|
+
function handleEnd(text, _cursorPos) {
|
|
101
|
+
return text.length;
|
|
102
|
+
}
|
|
103
|
+
// ─── Escape Sequence Classification ──────────────────────────────
|
|
104
|
+
/**
|
|
105
|
+
* Classify raw escape sequences that Ink passes through as regular characters.
|
|
106
|
+
* Returns:
|
|
107
|
+
* "home" — Home key sequences
|
|
108
|
+
* "end" — End key sequences
|
|
109
|
+
* "ignore" — PageUp, PageDown, mouse wheel (should be suppressed)
|
|
110
|
+
* null — not a recognized escape sequence
|
|
111
|
+
*/
|
|
112
|
+
function classifyEscapeSequence(inputChar) {
|
|
113
|
+
if (!inputChar.startsWith("\x1b["))
|
|
114
|
+
return null;
|
|
115
|
+
const seq = inputChar.slice(2); // after \x1b[
|
|
116
|
+
// Home: \x1b[H or \x1b[1~
|
|
117
|
+
if (seq === "H" || seq === "1~")
|
|
118
|
+
return "home";
|
|
119
|
+
// End: \x1b[F or \x1b[4~
|
|
120
|
+
if (seq === "F" || seq === "4~")
|
|
121
|
+
return "end";
|
|
122
|
+
// Option+Left: \x1b[1;3D (CSI modified arrow with Alt modifier)
|
|
123
|
+
if (seq === "1;3D")
|
|
124
|
+
return "word-left";
|
|
125
|
+
// Option+Right: \x1b[1;3C
|
|
126
|
+
if (seq === "1;3C")
|
|
127
|
+
return "word-right";
|
|
128
|
+
// PageUp: \x1b[5~, PageDown: \x1b[6~
|
|
129
|
+
if (seq === "5~" || seq === "6~")
|
|
130
|
+
return "ignore";
|
|
131
|
+
// SGR mouse wheel: \x1b[<64;... or \x1b[<65;...
|
|
132
|
+
if (seq.startsWith("<64;") || seq.startsWith("<65;"))
|
|
133
|
+
return "ignore";
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Alt+Y: yank-pop -- replace previously yanked text with next ring entry.
|
|
138
|
+
* Returns null if not in yanking state or ring is empty.
|
|
139
|
+
*/
|
|
140
|
+
function handleYankPop(text, cursorPos, ring) {
|
|
141
|
+
const lastYanked = ring.lastYankedText;
|
|
142
|
+
if (!ring.isYanking || lastYanked === undefined)
|
|
143
|
+
return null;
|
|
144
|
+
const popped = ring.yankPop();
|
|
145
|
+
if (popped === undefined)
|
|
146
|
+
return null;
|
|
147
|
+
// Find where the last yanked text ends (at current cursor position)
|
|
148
|
+
// and starts (cursorPos - lastYanked.length)
|
|
149
|
+
const yankStart = cursorPos - lastYanked.length;
|
|
150
|
+
const before = text.slice(0, yankStart);
|
|
151
|
+
const after = text.slice(cursorPos);
|
|
152
|
+
return { text: before + popped + after, cursorPos: yankStart + popped.length };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Handle an empty paste event by checking clipboard for images (macOS only).
|
|
156
|
+
* Returns null if no image found, not on macOS, or clipboard empty.
|
|
157
|
+
*/
|
|
158
|
+
async function handleEmptyPaste(text, cursorPos, currentImageCount, platform, clipboardReader) {
|
|
159
|
+
if (platform !== "darwin")
|
|
160
|
+
return null;
|
|
161
|
+
const imageData = await clipboardReader();
|
|
162
|
+
if (!imageData)
|
|
163
|
+
return null;
|
|
164
|
+
const refNum = currentImageCount + 1;
|
|
165
|
+
const ref = `[Image #${refNum}]`;
|
|
166
|
+
const before = text.slice(0, cursorPos);
|
|
167
|
+
const after = text.slice(cursorPos);
|
|
168
|
+
return {
|
|
169
|
+
text: before + ref + after,
|
|
170
|
+
cursorPos: cursorPos + ref.length,
|
|
171
|
+
imageRef: refNum,
|
|
172
|
+
imageData,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KillRing = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Kill ring — emacs-style cut buffer with accumulation and yank-pop cycling.
|
|
6
|
+
*
|
|
7
|
+
* Stores up to MAX_SIZE killed text entries. Consecutive kills in the same
|
|
8
|
+
* direction accumulate into a single entry. Yank retrieves the most recent
|
|
9
|
+
* entry; yank-pop cycles backward through the ring.
|
|
10
|
+
*/
|
|
11
|
+
const runtime_1 = require("../../nerves/runtime");
|
|
12
|
+
const MAX_SIZE = 10;
|
|
13
|
+
class KillRing {
|
|
14
|
+
entries = [];
|
|
15
|
+
accumulating = false;
|
|
16
|
+
yankIndex = -1;
|
|
17
|
+
_isYanking = false;
|
|
18
|
+
_lastYankedText = undefined;
|
|
19
|
+
/** Whether the ring is currently in yank-cycling mode. */
|
|
20
|
+
get isYanking() {
|
|
21
|
+
return this._isYanking;
|
|
22
|
+
}
|
|
23
|
+
/** The text that was last returned by yank() or yankPop(). */
|
|
24
|
+
get lastYankedText() {
|
|
25
|
+
return this._lastYankedText;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Push killed text onto the ring.
|
|
29
|
+
*
|
|
30
|
+
* If accumulating (consecutive kills without a reset), the text is merged
|
|
31
|
+
* with the top entry: "append" concatenates to the end, "prepend" prepends
|
|
32
|
+
* to the start. Otherwise a new entry is created, evicting the oldest if
|
|
33
|
+
* the ring is full.
|
|
34
|
+
*/
|
|
35
|
+
push(text, direction) {
|
|
36
|
+
(0, runtime_1.emitNervesEvent)({ component: "senses", event: "senses.kill_ring_push", message: "killed text to ring", meta: { direction, length: text.length } });
|
|
37
|
+
if (this.accumulating && this.entries.length > 0) {
|
|
38
|
+
const top = this.entries[this.entries.length - 1];
|
|
39
|
+
this.entries[this.entries.length - 1] =
|
|
40
|
+
direction === "append" ? top + text : text + top;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
if (this.entries.length >= MAX_SIZE) {
|
|
44
|
+
this.entries.shift();
|
|
45
|
+
}
|
|
46
|
+
this.entries.push(text);
|
|
47
|
+
}
|
|
48
|
+
this.accumulating = true;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Return the most recent kill ring entry and enter yanking mode.
|
|
52
|
+
* Returns undefined if the ring is empty.
|
|
53
|
+
*/
|
|
54
|
+
yank() {
|
|
55
|
+
if (this.entries.length === 0)
|
|
56
|
+
return undefined;
|
|
57
|
+
this.yankIndex = this.entries.length - 1;
|
|
58
|
+
this._isYanking = true;
|
|
59
|
+
this._lastYankedText = this.entries[this.yankIndex];
|
|
60
|
+
return this._lastYankedText;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Cycle to the next older entry in the ring (wrapping around).
|
|
64
|
+
* Must be called after yank(). Returns undefined if ring is empty
|
|
65
|
+
* or not in yanking state.
|
|
66
|
+
*/
|
|
67
|
+
yankPop() {
|
|
68
|
+
if (!this._isYanking || this.entries.length === 0)
|
|
69
|
+
return undefined;
|
|
70
|
+
this.yankIndex =
|
|
71
|
+
(this.yankIndex - 1 + this.entries.length) % this.entries.length;
|
|
72
|
+
this._lastYankedText = this.entries[this.yankIndex];
|
|
73
|
+
return this._lastYankedText;
|
|
74
|
+
}
|
|
75
|
+
/** Stop consecutive-kill accumulation (called on non-kill keystrokes). */
|
|
76
|
+
resetAccumulation() {
|
|
77
|
+
this.accumulating = false;
|
|
78
|
+
}
|
|
79
|
+
/** Exit yank-cycling mode (called on non-yank keystrokes). */
|
|
80
|
+
resetYankState() {
|
|
81
|
+
this._isYanking = false;
|
|
82
|
+
this._lastYankedText = undefined;
|
|
83
|
+
this.yankIndex = -1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.KillRing = KillRing;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScrollableMessageList = ScrollableMessageList;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const ink_1 = require("ink");
|
|
7
|
+
const streaming_markdown_1 = require("./streaming-markdown");
|
|
8
|
+
/**
|
|
9
|
+
* Scrollable message list with virtual rendering.
|
|
10
|
+
*
|
|
11
|
+
* Only renders messages within the viewport window. Supports:
|
|
12
|
+
* - Auto-scroll to bottom (pinned mode, default)
|
|
13
|
+
* - Scroll lock at a specific offset
|
|
14
|
+
* - "N below" indicator when scrolled up
|
|
15
|
+
*
|
|
16
|
+
* Ouroboros-themed: green serpent palette, no padding decoration.
|
|
17
|
+
*/
|
|
18
|
+
// Ouroboros brand palette
|
|
19
|
+
const OURO_TEAL = "#4ec9b0";
|
|
20
|
+
const OURO_INDICATOR = "#2ecc40";
|
|
21
|
+
function MessageItem({ message }) {
|
|
22
|
+
if (message.role === "user" && message.content) {
|
|
23
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { color: OURO_TEAL, bold: true, children: ") " }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: message.content })] }));
|
|
24
|
+
}
|
|
25
|
+
if (message.role === "assistant" && message.content) {
|
|
26
|
+
return (0, jsx_runtime_1.jsx)(streaming_markdown_1.StreamingMarkdown, { text: message.content });
|
|
27
|
+
}
|
|
28
|
+
// system or empty messages render nothing visible
|
|
29
|
+
return (0, jsx_runtime_1.jsx)(ink_1.Text, { children: "" });
|
|
30
|
+
}
|
|
31
|
+
function ScrollableMessageList({ messages, viewportHeight, scrollOffset, }) {
|
|
32
|
+
const { visibleMessages, belowCount } = (0, react_1.useMemo)(() => {
|
|
33
|
+
if (messages.length === 0) {
|
|
34
|
+
return { visibleMessages: [], belowCount: 0 };
|
|
35
|
+
}
|
|
36
|
+
let start;
|
|
37
|
+
if (scrollOffset !== undefined) {
|
|
38
|
+
start = Math.max(0, Math.min(scrollOffset, messages.length - 1));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Auto-scroll: pin to bottom
|
|
42
|
+
start = Math.max(0, messages.length - viewportHeight);
|
|
43
|
+
}
|
|
44
|
+
const end = Math.min(start + viewportHeight, messages.length);
|
|
45
|
+
return {
|
|
46
|
+
visibleMessages: messages.slice(start, end),
|
|
47
|
+
belowCount: messages.length - end,
|
|
48
|
+
};
|
|
49
|
+
}, [messages, viewportHeight, scrollOffset]);
|
|
50
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [visibleMessages.map((msg, i) => ((0, jsx_runtime_1.jsx)(MessageItem, { message: msg }, i))), belowCount > 0 ? ((0, jsx_runtime_1.jsx)(ink_1.Text, { color: OURO_INDICATOR, dimColor: true, children: `${belowCount} below` })) : null] }));
|
|
51
|
+
}
|