@ouro.bot/cli 0.1.0-alpha.70 → 0.1.0-alpha.701
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 -23
- package/RepairGuide.ouro/agent.json +5 -0
- package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
- package/RepairGuide.ouro/psyche/SOUL.md +55 -0
- package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
- package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
- package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
- package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
- package/changelog.json +4461 -14
- package/dist/a2a/card.js +57 -0
- package/dist/a2a/client.js +180 -0
- package/dist/a2a/config.js +50 -0
- package/dist/a2a/delegation-stores.js +56 -0
- package/dist/a2a/did-resolution.js +93 -0
- package/dist/a2a/identity.js +170 -0
- package/dist/a2a/inbound-share.js +107 -0
- package/dist/a2a/mission-result-wire.js +196 -0
- package/dist/a2a/onboarding.js +115 -0
- package/dist/a2a/pin-store.js +132 -0
- package/dist/a2a/seen-ledger.js +120 -0
- package/dist/a2a/server.js +604 -0
- package/dist/a2a/task-store.js +69 -0
- package/dist/a2a/transport.js +45 -0
- package/dist/a2a/types.js +3 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +144 -0
- package/dist/arc/episodes.js +118 -0
- package/dist/arc/evolution.js +490 -0
- package/dist/arc/flight-recorder.js +928 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +348 -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 +867 -43
- package/dist/heart/agent-entry.js +190 -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/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/autonomy-budget.js +434 -0
- package/dist/heart/awaiting/await-alert.js +146 -0
- package/dist/heart/awaiting/await-expiry.js +108 -0
- package/dist/heart/awaiting/await-loader.js +91 -0
- package/dist/heart/awaiting/await-parser.js +141 -0
- package/dist/heart/awaiting/await-runtime-state.js +100 -0
- package/dist/heart/awaiting/await-scheduler.js +378 -0
- package/dist/heart/background-operations.js +281 -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 +135 -0
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +119 -127
- package/dist/heart/context-loss-gauntlet.js +354 -0
- package/dist/heart/context-loss-sentinel.js +1155 -0
- package/dist/heart/core.js +1306 -278
- package/dist/heart/cross-chat-delivery.js +8 -22
- package/dist/heart/daemon/agent-config-check.js +451 -0
- package/dist/heart/daemon/agent-discovery.js +185 -3
- package/dist/heart/daemon/agent-service.js +523 -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-health-diagnostics.js +122 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +180 -0
- package/dist/heart/daemon/cli-defaults.js +825 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +8142 -0
- package/dist/heart/daemon/cli-help.js +675 -0
- package/dist/heart/daemon/cli-parse.js +2461 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +770 -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 -1930
- package/dist/heart/daemon/daemon-entry.js +822 -10
- package/dist/heart/daemon/daemon-health.js +176 -0
- package/dist/heart/daemon/daemon-rollup.js +57 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +1264 -84
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +1126 -0
- package/dist/heart/daemon/habit-private-wake.js +56 -0
- package/dist/heart/daemon/health-monitor.js +142 -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 +110 -0
- package/dist/heart/daemon/mcp-canary.js +297 -0
- package/dist/heart/daemon/message-router.js +45 -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 +4 -2
- package/dist/heart/daemon/ouro-entry.js +3 -1
- package/dist/heart/daemon/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +519 -40
- 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 +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 +41 -14
- package/dist/heart/daemon/runtime-metadata.js +2 -30
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +670 -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 +171 -12
- package/dist/heart/daemon/stale-bundle-prune.js +113 -0
- package/dist/heart/daemon/startup-tui.js +338 -0
- package/dist/heart/daemon/task-scheduler.js +117 -39
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +255 -43
- 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 +121 -0
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +214 -0
- package/dist/heart/habits/habit-runtime-state.js +114 -0
- package/dist/heart/habits/habit-scheduler.js +431 -0
- package/dist/heart/habits/habit-session-summary.js +318 -0
- package/dist/heart/habits/habit-session.js +617 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +51 -60
- 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 +174 -59
- package/dist/heart/kept-notes.js +289 -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 +96 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +375 -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 +37 -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 +815 -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 +696 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +11 -0
- package/dist/heart/orientation-frame.js +217 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/primitives.js +1 -1
- package/dist/heart/private-runtime/decision-renderer.js +156 -0
- package/dist/heart/private-runtime/index.js +18 -0
- package/dist/heart/private-runtime/ledger.js +218 -0
- package/dist/heart/private-runtime/policy.js +214 -0
- package/dist/heart/private-runtime/types.js +2 -0
- package/dist/heart/progress-story.js +1 -1
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +273 -0
- package/dist/heart/provider-credentials.js +441 -0
- package/dist/heart/provider-failover.js +311 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -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 +139 -52
- package/dist/heart/providers/azure.js +23 -11
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +34 -38
- 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/run-ledger.js +247 -0
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +398 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +20 -4
- package/dist/heart/session-activity.js +90 -24
- package/dist/heart/session-events.js +1133 -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 +133 -0
- package/dist/heart/start-of-turn-packet.js +365 -0
- package/dist/heart/streaming.js +44 -27
- package/dist/heart/structured-output.js +196 -0
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync.js +449 -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-description.js +155 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +472 -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 +409 -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/work-card.js +380 -0
- package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
- package/dist/mailbox-ui/assets/index-J8zDwHmE.js +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 +715 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/core.js +788 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +568 -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 +233 -0
- package/dist/mailroom/search-cache.js +334 -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 +250 -101
- 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/{associative-recall.js → note-search.js} +47 -58
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +13 -8
- package/dist/mind/prompt-budget.js +380 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1028 -169
- 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/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/event-buffer.js +111 -0
- package/dist/nerves/index.js +234 -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 +16 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +1042 -0
- package/dist/repertoire/bundle-templates.js +71 -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 +331 -0
- package/dist/repertoire/coding/feedback.js +218 -30
- package/dist/repertoire/coding/index.js +15 -3
- package/dist/repertoire/coding/manager.js +166 -10
- package/dist/repertoire/coding/spawner.js +58 -11
- package/dist/repertoire/coding/tools.js +242 -14
- 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 +178 -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 +156 -27
- package/dist/repertoire/mcp-client.js +44 -3
- package/dist/repertoire/mcp-manager.js +259 -20
- package/dist/repertoire/mcp-tools.js +83 -0
- package/dist/repertoire/plugin-mcp.js +175 -0
- package/dist/repertoire/plugins.js +253 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +48 -4
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-a2a.js +699 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-awaiting.js +372 -0
- package/dist/repertoire/tools-base.js +65 -1095
- package/dist/repertoire/tools-bluebubbles.js +2 -0
- package/dist/repertoire/tools-bridge.js +144 -0
- package/dist/repertoire/tools-bundle.js +993 -0
- package/dist/repertoire/tools-commerce.js +253 -0
- package/dist/repertoire/tools-config.js +186 -0
- package/dist/repertoire/tools-continuity.js +252 -0
- package/dist/repertoire/tools-credential.js +383 -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-github.js +3 -8
- package/dist/repertoire/tools-mail.js +1975 -0
- package/dist/repertoire/tools-notes.js +459 -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 +150 -0
- package/dist/repertoire/tools-session.js +881 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +355 -0
- package/dist/repertoire/tools-teams.js +12 -39
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +982 -0
- package/dist/repertoire/tools-user-profile.js +146 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools-voice.js +145 -0
- package/dist/repertoire/tools.js +250 -80
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +594 -0
- package/dist/rsvp/aisleplanner-client.js +354 -0
- package/dist/rsvp/cli.js +704 -0
- package/dist/rsvp/config.js +327 -0
- package/dist/rsvp/cutover.js +431 -0
- package/dist/rsvp/diagnostics.js +222 -0
- package/dist/rsvp/diff-renderer.js +161 -0
- package/dist/rsvp/habit-policy.js +85 -0
- package/dist/rsvp/habit-stage.js +93 -0
- package/dist/rsvp/incident-bundle.js +97 -0
- package/dist/rsvp/migration.js +204 -0
- package/dist/rsvp/outbound-state.js +254 -0
- package/dist/rsvp/query.js +118 -0
- package/dist/rsvp/replay.js +233 -0
- package/dist/rsvp/snapshot.js +232 -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 +115 -0
- package/dist/senses/attention-queue.js +186 -0
- package/dist/senses/await-turn-message.js +58 -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} +226 -19
- 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 +2937 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
- 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/outbound-state.js +304 -0
- package/dist/senses/bluebubbles/processed-log.js +133 -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-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- 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 +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 +100 -0
- package/dist/senses/cli.js +521 -214
- package/dist/senses/commands.js +66 -3
- package/dist/senses/context-packet-ledger.js +245 -0
- package/dist/senses/context-packets.js +154 -0
- package/dist/senses/habit-turn-message.js +160 -0
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +395 -0
- package/dist/senses/pipeline.js +952 -178
- package/dist/senses/private-runtime-worker.js +723 -0
- package/dist/senses/private-runtime.js +1157 -0
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +416 -0
- package/dist/senses/surface-tool.js +109 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +397 -112
- 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/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/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/realtime-eval.js +496 -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 +807 -0
- package/dist/senses/voice/twilio-phone.js +5081 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +81 -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/package.json +57 -12
- 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 -409
- package/dist/heart/daemon/ouro-path-installer.js +0 -178
- package/dist/heart/daemon/update-hooks.js +0 -138
- package/dist/heart/safe-workspace.js +0 -228
- 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 -1180
- package/dist/senses/debug-activity.js +0 -148
- package/dist/senses/inner-dialog-worker.js +0 -90
- package/dist/senses/inner-dialog.js +0 -480
- 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,134 @@
|
|
|
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.captureIntention = captureIntention;
|
|
37
|
+
exports.readOpenIntentions = readOpenIntentions;
|
|
38
|
+
exports.resolveIntention = resolveIntention;
|
|
39
|
+
exports.dismissIntention = dismissIntention;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const session_events_1 = require("../heart/session-events");
|
|
42
|
+
const runtime_1 = require("../nerves/runtime");
|
|
43
|
+
const json_store_1 = require("./json-store");
|
|
44
|
+
function intentionsDir(agentRoot) {
|
|
45
|
+
return path.join(agentRoot, "arc", "intentions");
|
|
46
|
+
}
|
|
47
|
+
const SALIENCE_ORDER = {
|
|
48
|
+
high: 3,
|
|
49
|
+
medium: 2,
|
|
50
|
+
low: 1,
|
|
51
|
+
};
|
|
52
|
+
function salienceRank(salience) {
|
|
53
|
+
if (!salience)
|
|
54
|
+
return 0;
|
|
55
|
+
return SALIENCE_ORDER[salience] ?? 0;
|
|
56
|
+
}
|
|
57
|
+
function captureIntention(agentRoot, input) {
|
|
58
|
+
const now = new Date().toISOString();
|
|
59
|
+
const id = (0, json_store_1.generateTimestampId)("int");
|
|
60
|
+
const intention = {
|
|
61
|
+
id,
|
|
62
|
+
content: (0, session_events_1.capStructuredRecordString)(input.content),
|
|
63
|
+
status: "open",
|
|
64
|
+
createdAt: now,
|
|
65
|
+
updatedAt: now,
|
|
66
|
+
...(input.salience ? { salience: input.salience } : {}),
|
|
67
|
+
source: input.source,
|
|
68
|
+
...(input.relatedFriendId ? { relatedFriendId: input.relatedFriendId } : {}),
|
|
69
|
+
...(input.relatedObligationId ? { relatedObligationId: input.relatedObligationId } : {}),
|
|
70
|
+
...(input.relatedCareId ? { relatedCareId: input.relatedCareId } : {}),
|
|
71
|
+
...(input.nudgeAfter ? { nudgeAfter: input.nudgeAfter } : {}),
|
|
72
|
+
};
|
|
73
|
+
(0, json_store_1.writeJsonFile)(intentionsDir(agentRoot), id, intention);
|
|
74
|
+
(0, runtime_1.emitNervesEvent)({
|
|
75
|
+
component: "heart",
|
|
76
|
+
event: "heart.intention_captured",
|
|
77
|
+
message: `intention captured: ${input.content.slice(0, 60)}`,
|
|
78
|
+
meta: { intentionId: id, source: input.source, salience: input.salience },
|
|
79
|
+
});
|
|
80
|
+
return intention;
|
|
81
|
+
}
|
|
82
|
+
function readOpenIntentions(agentRoot, options) {
|
|
83
|
+
const dir = intentionsDir(agentRoot);
|
|
84
|
+
const all = (0, json_store_1.readJsonDir)(dir);
|
|
85
|
+
const limit = options?.limit ?? 20;
|
|
86
|
+
const intentions = all.filter((i) => i.status === "open");
|
|
87
|
+
// Sort by salience descending, then createdAt descending
|
|
88
|
+
intentions.sort((a, b) => {
|
|
89
|
+
const salienceDiff = salienceRank(b.salience) - salienceRank(a.salience);
|
|
90
|
+
if (salienceDiff !== 0)
|
|
91
|
+
return salienceDiff;
|
|
92
|
+
return b.createdAt.localeCompare(a.createdAt);
|
|
93
|
+
});
|
|
94
|
+
const result = intentions.slice(0, limit);
|
|
95
|
+
(0, runtime_1.emitNervesEvent)({
|
|
96
|
+
component: "heart",
|
|
97
|
+
event: "heart.intentions_read",
|
|
98
|
+
message: `read ${result.length} open intentions`,
|
|
99
|
+
meta: { count: result.length, total: intentions.length, limit },
|
|
100
|
+
});
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
function readIntentionFile(agentRoot, id) {
|
|
104
|
+
return (0, json_store_1.readJsonFileOrThrow)(intentionsDir(agentRoot), id, "Intention");
|
|
105
|
+
}
|
|
106
|
+
function writeIntentionFile(agentRoot, intention) {
|
|
107
|
+
(0, json_store_1.writeJsonFile)(intentionsDir(agentRoot), intention.id, intention);
|
|
108
|
+
}
|
|
109
|
+
function resolveIntention(agentRoot, id) {
|
|
110
|
+
const intention = readIntentionFile(agentRoot, id);
|
|
111
|
+
intention.status = "done";
|
|
112
|
+
intention.updatedAt = new Date().toISOString();
|
|
113
|
+
writeIntentionFile(agentRoot, intention);
|
|
114
|
+
(0, runtime_1.emitNervesEvent)({
|
|
115
|
+
component: "heart",
|
|
116
|
+
event: "heart.intention_resolved",
|
|
117
|
+
message: `intention resolved: ${intention.content.slice(0, 60)}`,
|
|
118
|
+
meta: { intentionId: id },
|
|
119
|
+
});
|
|
120
|
+
return intention;
|
|
121
|
+
}
|
|
122
|
+
function dismissIntention(agentRoot, id) {
|
|
123
|
+
const intention = readIntentionFile(agentRoot, id);
|
|
124
|
+
intention.status = "dismissed";
|
|
125
|
+
intention.updatedAt = new Date().toISOString();
|
|
126
|
+
writeIntentionFile(agentRoot, intention);
|
|
127
|
+
(0, runtime_1.emitNervesEvent)({
|
|
128
|
+
component: "heart",
|
|
129
|
+
event: "heart.intention_dismissed",
|
|
130
|
+
message: `intention dismissed: ${intention.content.slice(0, 60)}`,
|
|
131
|
+
meta: { intentionId: id },
|
|
132
|
+
});
|
|
133
|
+
return intention;
|
|
134
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared JSON file store helpers for arc/ modules.
|
|
4
|
+
*
|
|
5
|
+
* obligations.ts, cares.ts, and intentions.ts all use the same pattern:
|
|
6
|
+
* individual JSON files in a directory, with read-all / read-one / write-one
|
|
7
|
+
* operations. This module extracts those patterns.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.generateTimestampId = generateTimestampId;
|
|
44
|
+
exports.readJsonDir = readJsonDir;
|
|
45
|
+
exports.readJsonFile = readJsonFile;
|
|
46
|
+
exports.readJsonFileOrThrow = readJsonFileOrThrow;
|
|
47
|
+
exports.writeJsonFile = writeJsonFile;
|
|
48
|
+
const fs = __importStar(require("fs"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
/**
|
|
51
|
+
* Generate a timestamped random ID.
|
|
52
|
+
* @param prefix Optional prefix (e.g. "care", "int"). Omit for plain timestamp IDs.
|
|
53
|
+
*/
|
|
54
|
+
function generateTimestampId(prefix) {
|
|
55
|
+
const timestamp = Date.now();
|
|
56
|
+
const random = Math.random().toString(36).slice(2, 10);
|
|
57
|
+
return prefix ? `${prefix}-${timestamp}-${random}` : `${timestamp}-${random}`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Read all JSON files from a directory, parse each, and return an array.
|
|
61
|
+
* Silently skips malformed files. Returns empty array if directory is missing.
|
|
62
|
+
*/
|
|
63
|
+
function readJsonDir(dir) {
|
|
64
|
+
if (!fs.existsSync(dir))
|
|
65
|
+
return [];
|
|
66
|
+
let entries;
|
|
67
|
+
try {
|
|
68
|
+
entries = fs.readdirSync(dir);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
/* v8 ignore next -- defensive: readdirSync race after existsSync @preserve */
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
const jsonFiles = entries.filter((entry) => entry.endsWith(".json")).sort();
|
|
75
|
+
const records = [];
|
|
76
|
+
for (const file of jsonFiles) {
|
|
77
|
+
try {
|
|
78
|
+
const raw = fs.readFileSync(path.join(dir, file), "utf-8");
|
|
79
|
+
records.push(JSON.parse(raw));
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Skip malformed JSON files
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return records;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Read a single JSON file by ID from a directory.
|
|
89
|
+
* Returns null if the file doesn't exist or is unparseable.
|
|
90
|
+
*/
|
|
91
|
+
function readJsonFile(dir, id) {
|
|
92
|
+
try {
|
|
93
|
+
const raw = fs.readFileSync(path.join(dir, `${id}.json`), "utf-8");
|
|
94
|
+
return JSON.parse(raw);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Read a single JSON file by ID, throwing if not found.
|
|
102
|
+
*/
|
|
103
|
+
function readJsonFileOrThrow(dir, id, label) {
|
|
104
|
+
const filePath = path.join(dir, `${id}.json`);
|
|
105
|
+
if (!fs.existsSync(filePath)) {
|
|
106
|
+
throw new Error(`${label} not found: ${id}`);
|
|
107
|
+
}
|
|
108
|
+
return JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Write a record to a JSON file, creating the directory if needed.
|
|
112
|
+
*/
|
|
113
|
+
function writeJsonFile(dir, id, record) {
|
|
114
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
115
|
+
const filePath = path.join(dir, `${id}.json`);
|
|
116
|
+
fs.writeFileSync(filePath, JSON.stringify(record, null, 2), "utf-8");
|
|
117
|
+
}
|
|
@@ -0,0 +1,348 @@
|
|
|
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.readObligation = readObligation;
|
|
37
|
+
exports.isOpenObligationStatus = isOpenObligationStatus;
|
|
38
|
+
exports.isOpenObligation = isOpenObligation;
|
|
39
|
+
exports.createObligation = createObligation;
|
|
40
|
+
exports.readObligations = readObligations;
|
|
41
|
+
exports.readPendingObligations = readPendingObligations;
|
|
42
|
+
exports.readVerifiedObligations = readVerifiedObligations;
|
|
43
|
+
exports.readVerifiedPendingObligations = readVerifiedPendingObligations;
|
|
44
|
+
exports.advanceObligation = advanceObligation;
|
|
45
|
+
exports.fulfillObligation = fulfillObligation;
|
|
46
|
+
exports.findPendingObligationForOrigin = findPendingObligationForOrigin;
|
|
47
|
+
exports.enrichObligation = enrichObligation;
|
|
48
|
+
exports.generateObligationId = generateObligationId;
|
|
49
|
+
exports.getReturnObligationsDir = getReturnObligationsDir;
|
|
50
|
+
exports.getReturnObligationsDirForRoot = getReturnObligationsDirForRoot;
|
|
51
|
+
exports.createReturnObligation = createReturnObligation;
|
|
52
|
+
exports.readReturnObligation = readReturnObligation;
|
|
53
|
+
exports.readReturnObligationForRoot = readReturnObligationForRoot;
|
|
54
|
+
exports.advanceReturnObligation = advanceReturnObligation;
|
|
55
|
+
exports.isActiveReturnObligationStatus = isActiveReturnObligationStatus;
|
|
56
|
+
exports.listReturnObligationsForRoot = listReturnObligationsForRoot;
|
|
57
|
+
exports.isActiveReturnObligationRecord = isActiveReturnObligationRecord;
|
|
58
|
+
exports.listActiveReturnObligations = listActiveReturnObligations;
|
|
59
|
+
exports.listActiveReturnObligationsForRoot = listActiveReturnObligationsForRoot;
|
|
60
|
+
const path = __importStar(require("path"));
|
|
61
|
+
const identity_1 = require("../heart/identity");
|
|
62
|
+
const session_events_1 = require("../heart/session-events");
|
|
63
|
+
const runtime_1 = require("../nerves/runtime");
|
|
64
|
+
const json_store_1 = require("./json-store");
|
|
65
|
+
function obligationsDir(agentRoot) {
|
|
66
|
+
return path.join(agentRoot, "arc", "obligations");
|
|
67
|
+
}
|
|
68
|
+
function readObligation(agentRoot, obligationId) {
|
|
69
|
+
return (0, json_store_1.readJsonFile)(obligationsDir(agentRoot), obligationId);
|
|
70
|
+
}
|
|
71
|
+
function isOpenObligationStatus(status) {
|
|
72
|
+
return status !== "fulfilled";
|
|
73
|
+
}
|
|
74
|
+
function isOpenObligation(obligation) {
|
|
75
|
+
return isOpenObligationStatus(obligation.status);
|
|
76
|
+
}
|
|
77
|
+
function isReadableObligation(value) {
|
|
78
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
79
|
+
return false;
|
|
80
|
+
const obligation = value;
|
|
81
|
+
return typeof obligation.id === "string"
|
|
82
|
+
&& typeof obligation.content === "string";
|
|
83
|
+
}
|
|
84
|
+
function isVerifiedObligationStatus(value) {
|
|
85
|
+
return value === "pending"
|
|
86
|
+
|| value === "investigating"
|
|
87
|
+
|| value === "waiting_for_merge"
|
|
88
|
+
|| value === "updating_runtime"
|
|
89
|
+
|| value === "fulfilled";
|
|
90
|
+
}
|
|
91
|
+
function isVerifiedObligation(value) {
|
|
92
|
+
if (!isReadableObligation(value))
|
|
93
|
+
return false;
|
|
94
|
+
const obligation = value;
|
|
95
|
+
return isVerifiedObligationStatus(obligation.status)
|
|
96
|
+
&& typeof obligation.createdAt === "string"
|
|
97
|
+
&& !!obligation.origin
|
|
98
|
+
&& typeof obligation.origin.friendId === "string"
|
|
99
|
+
&& typeof obligation.origin.channel === "string"
|
|
100
|
+
&& typeof obligation.origin.key === "string";
|
|
101
|
+
}
|
|
102
|
+
function createObligation(agentRoot, input) {
|
|
103
|
+
const now = new Date().toISOString();
|
|
104
|
+
const id = (0, json_store_1.generateTimestampId)();
|
|
105
|
+
const obligation = {
|
|
106
|
+
id,
|
|
107
|
+
origin: input.origin,
|
|
108
|
+
...(input.bridgeId ? { bridgeId: input.bridgeId } : {}),
|
|
109
|
+
content: (0, session_events_1.capStructuredRecordString)(input.content),
|
|
110
|
+
status: "pending",
|
|
111
|
+
createdAt: now,
|
|
112
|
+
updatedAt: now,
|
|
113
|
+
};
|
|
114
|
+
(0, json_store_1.writeJsonFile)(obligationsDir(agentRoot), id, obligation);
|
|
115
|
+
(0, runtime_1.emitNervesEvent)({
|
|
116
|
+
component: "engine",
|
|
117
|
+
event: "engine.obligation_created",
|
|
118
|
+
message: "obligation created",
|
|
119
|
+
meta: {
|
|
120
|
+
obligationId: id,
|
|
121
|
+
friendId: input.origin.friendId,
|
|
122
|
+
channel: input.origin.channel,
|
|
123
|
+
key: input.origin.key,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
return obligation;
|
|
127
|
+
}
|
|
128
|
+
function readObligations(agentRoot) {
|
|
129
|
+
const all = (0, json_store_1.readJsonDir)(obligationsDir(agentRoot));
|
|
130
|
+
return all.filter(isReadableObligation);
|
|
131
|
+
}
|
|
132
|
+
function readPendingObligations(agentRoot) {
|
|
133
|
+
return readObligations(agentRoot).filter(isOpenObligation);
|
|
134
|
+
}
|
|
135
|
+
function readVerifiedObligations(agentRoot) {
|
|
136
|
+
const all = (0, json_store_1.readJsonDir)(obligationsDir(agentRoot));
|
|
137
|
+
return all.filter(isVerifiedObligation);
|
|
138
|
+
}
|
|
139
|
+
function readVerifiedPendingObligations(agentRoot) {
|
|
140
|
+
return readVerifiedObligations(agentRoot).filter(isOpenObligation);
|
|
141
|
+
}
|
|
142
|
+
function advanceObligation(agentRoot, obligationId, update) {
|
|
143
|
+
const dir = obligationsDir(agentRoot);
|
|
144
|
+
const obligation = (0, json_store_1.readJsonFile)(dir, obligationId);
|
|
145
|
+
if (!obligation)
|
|
146
|
+
return;
|
|
147
|
+
const previousStatus = obligation.status;
|
|
148
|
+
if (update.status) {
|
|
149
|
+
obligation.status = update.status;
|
|
150
|
+
if (update.status === "fulfilled") {
|
|
151
|
+
obligation.fulfilledAt = new Date().toISOString();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (update.currentSurface) {
|
|
155
|
+
obligation.currentSurface = update.currentSurface;
|
|
156
|
+
}
|
|
157
|
+
if (typeof update.currentArtifact === "string") {
|
|
158
|
+
obligation.currentArtifact = (0, session_events_1.capStructuredRecordString)(update.currentArtifact);
|
|
159
|
+
}
|
|
160
|
+
if (typeof update.nextAction === "string") {
|
|
161
|
+
obligation.nextAction = (0, session_events_1.capStructuredRecordString)(update.nextAction);
|
|
162
|
+
}
|
|
163
|
+
if (typeof update.latestNote === "string") {
|
|
164
|
+
obligation.latestNote = (0, session_events_1.capStructuredRecordString)(update.latestNote);
|
|
165
|
+
}
|
|
166
|
+
obligation.updatedAt = new Date().toISOString();
|
|
167
|
+
(0, json_store_1.writeJsonFile)(dir, obligationId, obligation);
|
|
168
|
+
(0, runtime_1.emitNervesEvent)({
|
|
169
|
+
component: "engine",
|
|
170
|
+
event: "engine.obligation_advanced",
|
|
171
|
+
message: "obligation advanced",
|
|
172
|
+
meta: {
|
|
173
|
+
obligationId,
|
|
174
|
+
previousStatus,
|
|
175
|
+
status: obligation.status,
|
|
176
|
+
friendId: obligation.origin.friendId,
|
|
177
|
+
channel: obligation.origin.channel,
|
|
178
|
+
key: obligation.origin.key,
|
|
179
|
+
surfaceKind: obligation.currentSurface?.kind ?? null,
|
|
180
|
+
surfaceLabel: obligation.currentSurface?.label ?? null,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function fulfillObligation(agentRoot, obligationId) {
|
|
185
|
+
advanceObligation(agentRoot, obligationId, { status: "fulfilled" });
|
|
186
|
+
const obligation = (0, json_store_1.readJsonFile)(obligationsDir(agentRoot), obligationId);
|
|
187
|
+
if (!obligation)
|
|
188
|
+
return;
|
|
189
|
+
(0, runtime_1.emitNervesEvent)({
|
|
190
|
+
component: "engine",
|
|
191
|
+
event: "engine.obligation_fulfilled",
|
|
192
|
+
message: "obligation fulfilled",
|
|
193
|
+
meta: {
|
|
194
|
+
obligationId,
|
|
195
|
+
friendId: obligation.origin.friendId,
|
|
196
|
+
channel: obligation.origin.channel,
|
|
197
|
+
key: obligation.origin.key,
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
function findPendingObligationForOrigin(agentRoot, origin) {
|
|
202
|
+
return readPendingObligations(agentRoot).find((ob) => ob.origin.friendId === origin.friendId
|
|
203
|
+
&& ob.origin.channel === origin.channel
|
|
204
|
+
&& ob.origin.key === origin.key);
|
|
205
|
+
}
|
|
206
|
+
function enrichObligation(agentRoot, id, meaning) {
|
|
207
|
+
const dir = obligationsDir(agentRoot);
|
|
208
|
+
const existing = (0, json_store_1.readJsonFile)(dir, id);
|
|
209
|
+
if (!existing) {
|
|
210
|
+
throw new Error(`Obligation not found: ${id}`);
|
|
211
|
+
}
|
|
212
|
+
const obligation = existing;
|
|
213
|
+
obligation.meaning = {
|
|
214
|
+
...meaning,
|
|
215
|
+
...(typeof meaning.careReason === "string" ? { careReason: (0, session_events_1.capStructuredRecordString)(meaning.careReason) } : {}),
|
|
216
|
+
...(typeof meaning.resumeHint === "string" ? { resumeHint: (0, session_events_1.capStructuredRecordString)(meaning.resumeHint) } : {}),
|
|
217
|
+
...(meaning.waitingOn
|
|
218
|
+
? { waitingOn: { ...meaning.waitingOn, detail: (0, session_events_1.capStructuredRecordString)(meaning.waitingOn.detail) } }
|
|
219
|
+
: {}),
|
|
220
|
+
};
|
|
221
|
+
obligation.updatedAt = new Date().toISOString();
|
|
222
|
+
(0, json_store_1.writeJsonFile)(dir, id, obligation);
|
|
223
|
+
(0, runtime_1.emitNervesEvent)({
|
|
224
|
+
component: "engine",
|
|
225
|
+
event: "engine.obligation_enriched",
|
|
226
|
+
message: "obligation enriched with meaning",
|
|
227
|
+
meta: {
|
|
228
|
+
obligationId: id,
|
|
229
|
+
salience: meaning.salience,
|
|
230
|
+
stalenessClass: meaning.stalenessClass,
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
return obligation;
|
|
234
|
+
}
|
|
235
|
+
function generateObligationId(timestamp) {
|
|
236
|
+
return `${timestamp}-${Math.random().toString(36).slice(2, 10)}`;
|
|
237
|
+
}
|
|
238
|
+
function getReturnObligationsDir(agentName) {
|
|
239
|
+
return path.join((0, identity_1.getAgentRoot)(agentName), "arc", "obligations", "inner");
|
|
240
|
+
}
|
|
241
|
+
function getReturnObligationsDirForRoot(agentRoot) {
|
|
242
|
+
return path.join(agentRoot, "arc", "obligations", "inner");
|
|
243
|
+
}
|
|
244
|
+
function createReturnObligation(agentName, obligation) {
|
|
245
|
+
const dir = getReturnObligationsDir(agentName);
|
|
246
|
+
const cappedObligation = {
|
|
247
|
+
...obligation,
|
|
248
|
+
delegatedContent: (0, session_events_1.capStructuredRecordString)(obligation.delegatedContent),
|
|
249
|
+
};
|
|
250
|
+
(0, json_store_1.writeJsonFile)(dir, obligation.id, cappedObligation);
|
|
251
|
+
const filePath = path.join(dir, `${obligation.id}.json`);
|
|
252
|
+
(0, runtime_1.emitNervesEvent)({
|
|
253
|
+
event: "mind.obligation_created",
|
|
254
|
+
component: "mind",
|
|
255
|
+
message: "return obligation created",
|
|
256
|
+
meta: {
|
|
257
|
+
obligationId: obligation.id,
|
|
258
|
+
origin: `${obligation.origin.friendId}/${obligation.origin.channel}/${obligation.origin.key}`,
|
|
259
|
+
status: obligation.status,
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
return filePath;
|
|
263
|
+
}
|
|
264
|
+
function readReturnObligation(agentName, obligationId) {
|
|
265
|
+
return (0, json_store_1.readJsonFile)(getReturnObligationsDir(agentName), obligationId);
|
|
266
|
+
}
|
|
267
|
+
function readReturnObligationForRoot(agentRoot, obligationId) {
|
|
268
|
+
return (0, json_store_1.readJsonFile)(getReturnObligationsDirForRoot(agentRoot), obligationId);
|
|
269
|
+
}
|
|
270
|
+
function advanceReturnObligation(agentName, obligationId, update) {
|
|
271
|
+
const existing = readReturnObligation(agentName, obligationId);
|
|
272
|
+
if (!existing)
|
|
273
|
+
return null;
|
|
274
|
+
const updated = {
|
|
275
|
+
...existing,
|
|
276
|
+
status: update.status,
|
|
277
|
+
...(update.startedAt !== undefined ? { startedAt: update.startedAt } : {}),
|
|
278
|
+
...(update.returnedAt !== undefined ? { returnedAt: update.returnedAt } : {}),
|
|
279
|
+
...(update.returnTarget !== undefined ? { returnTarget: update.returnTarget } : {}),
|
|
280
|
+
};
|
|
281
|
+
(0, json_store_1.writeJsonFile)(getReturnObligationsDir(agentName), obligationId, updated);
|
|
282
|
+
(0, runtime_1.emitNervesEvent)({
|
|
283
|
+
event: "mind.obligation_advanced",
|
|
284
|
+
component: "mind",
|
|
285
|
+
message: `obligation advanced to ${update.status}`,
|
|
286
|
+
meta: {
|
|
287
|
+
obligationId,
|
|
288
|
+
status: update.status,
|
|
289
|
+
...(update.returnTarget ? { returnTarget: update.returnTarget } : {}),
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
return updated;
|
|
293
|
+
}
|
|
294
|
+
// Private-runtime return obligations that have been sitting in queued/running state
|
|
295
|
+
// longer than this are auto-pruned from the "held work items" injection.
|
|
296
|
+
// Anything older is overwhelmingly noise: the agent has had many turns to
|
|
297
|
+
// resolve them and has not, and reinjecting them every turn just burns
|
|
298
|
+
// attention without producing progress. The file stays on disk and can
|
|
299
|
+
// still be inspected or surfaced explicitly; it just no longer gets
|
|
300
|
+
// re-piped into the active prompt.
|
|
301
|
+
const RETURN_OBLIGATION_INJECTION_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000;
|
|
302
|
+
// Strict allow-list of statuses that should appear in the "held work items"
|
|
303
|
+
// section. Anything else (including legacy/migrated `"fulfilled"` values left
|
|
304
|
+
// over from before the ObligationStatus → ReturnObligationStatus split, plus
|
|
305
|
+
// any future invalid value that slips past the `as any` casts at the
|
|
306
|
+
// surface-tool boundary) is treated as terminal — i.e., we do not re-inject
|
|
307
|
+
// it. This is a read-time defense; the underlying file is left as-is.
|
|
308
|
+
const ACTIVE_RETURN_OBLIGATION_STATUSES = new Set(["queued", "running"]);
|
|
309
|
+
function isActiveReturnObligationStatus(status) {
|
|
310
|
+
return ACTIVE_RETURN_OBLIGATION_STATUSES.has(status);
|
|
311
|
+
}
|
|
312
|
+
function isSelfInnerReturnObligation(obligation) {
|
|
313
|
+
return obligation.origin?.friendId === "self" && obligation.origin.channel === "inner";
|
|
314
|
+
}
|
|
315
|
+
function isReturnObligationRecord(value) {
|
|
316
|
+
if (!value || typeof value !== "object")
|
|
317
|
+
return false;
|
|
318
|
+
const candidate = value;
|
|
319
|
+
return typeof candidate.id === "string"
|
|
320
|
+
&& typeof candidate.status === "string"
|
|
321
|
+
&& typeof candidate.delegatedContent === "string"
|
|
322
|
+
&& typeof candidate.createdAt === "number"
|
|
323
|
+
&& !!candidate.origin
|
|
324
|
+
&& typeof candidate.origin.friendId === "string"
|
|
325
|
+
&& typeof candidate.origin.channel === "string"
|
|
326
|
+
&& typeof candidate.origin.key === "string";
|
|
327
|
+
}
|
|
328
|
+
function listReturnObligationsForRoot(agentRoot) {
|
|
329
|
+
return (0, json_store_1.readJsonDir)(getReturnObligationsDirForRoot(agentRoot))
|
|
330
|
+
.filter(isReturnObligationRecord);
|
|
331
|
+
}
|
|
332
|
+
function isActiveReturnObligationRecord(value, options = {}) {
|
|
333
|
+
if (!isReturnObligationRecord(value))
|
|
334
|
+
return false;
|
|
335
|
+
const nowMs = (options.now ?? Date.now)();
|
|
336
|
+
return isActiveReturnObligationStatus(value.status)
|
|
337
|
+
&& !isSelfInnerReturnObligation(value)
|
|
338
|
+
&& nowMs - value.createdAt <= RETURN_OBLIGATION_INJECTION_MAX_AGE_MS;
|
|
339
|
+
}
|
|
340
|
+
function listActiveReturnObligations(agentName, options = {}) {
|
|
341
|
+
return listActiveReturnObligationsForRoot((0, identity_1.getAgentRoot)(agentName), options);
|
|
342
|
+
}
|
|
343
|
+
function listActiveReturnObligationsForRoot(agentRoot, options = {}) {
|
|
344
|
+
const nowMs = (options.now ?? Date.now)();
|
|
345
|
+
return listReturnObligationsForRoot(agentRoot)
|
|
346
|
+
.filter((parsed) => isActiveReturnObligationRecord(parsed, { now: () => nowMs }))
|
|
347
|
+
.sort((a, b) => a.createdAt - b.createdAt);
|
|
348
|
+
}
|