@ouro.bot/cli 0.1.0-alpha.62 → 0.1.0-alpha.637
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +127 -23
- package/RepairGuide.ouro/agent.json +5 -0
- package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
- package/RepairGuide.ouro/psyche/SOUL.md +55 -0
- package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
- package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
- package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
- package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
- package/changelog.json +4087 -13
- 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 +487 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +270 -0
- package/dist/arc/packets.js +288 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/heart/active-work.js +860 -43
- package/dist/heart/agent-entry.js +69 -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/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 +377 -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 +322 -0
- package/dist/heart/config.js +114 -119
- package/dist/heart/core.js +1028 -248
- package/dist/heart/cross-chat-delivery.js +3 -18
- package/dist/heart/daemon/agent-config-check.js +419 -0
- package/dist/heart/daemon/agent-discovery.js +102 -3
- package/dist/heart/daemon/agent-service.js +522 -0
- package/dist/heart/daemon/agentic-repair.js +547 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +70 -0
- package/dist/heart/daemon/cli-defaults.js +776 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +7468 -0
- package/dist/heart/daemon/cli-help.js +505 -0
- package/dist/heart/daemon/cli-parse.js +1554 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +763 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/daemon-cli.js +29 -1700
- package/dist/heart/daemon/daemon-entry.js +485 -2
- package/dist/heart/daemon/daemon-health.js +176 -0
- package/dist/heart/daemon/daemon-rollup.js +57 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +906 -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 +873 -0
- package/dist/heart/daemon/health-monitor.js +122 -1
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +89 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +79 -10
- package/dist/heart/daemon/logs-prune.js +110 -0
- package/dist/heart/daemon/mcp-canary.js +297 -0
- 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 +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/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +501 -35
- 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 +11 -3
- 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 +493 -38
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +22 -9
- 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 +117 -39
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +229 -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 -4
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +140 -0
- package/dist/heart/habits/habit-runtime-state.js +100 -0
- package/dist/heart/habits/habit-scheduler.js +372 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
- package/dist/heart/{daemon → hatch}/specialist-tools.js +37 -14
- package/dist/heart/identity.js +168 -57
- package/dist/heart/kept-notes.js +357 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +161 -0
- package/dist/heart/mail-import-discovery.js +353 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +31 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +197 -0
- package/dist/heart/mailbox/readers/agent-machine.js +418 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +319 -0
- package/dist/heart/mailbox/readers/mail.js +375 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +756 -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 +692 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +19 -0
- package/dist/heart/orientation-frame.js +217 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +272 -0
- package/dist/heart/provider-credentials.js +425 -0
- package/dist/heart/provider-failover.js +301 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -0
- package/dist/heart/provider-readiness-cache.js +40 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +139 -52
- package/dist/heart/providers/azure.js +23 -11
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +145 -0
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +26 -8
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +367 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +13 -4
- package/dist/heart/session-activity.js +48 -24
- package/dist/heart/session-events.js +1163 -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 +345 -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 +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 +143 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +389 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
- package/dist/heart/versioning/ouro-path-installer.js +426 -0
- package/dist/heart/versioning/ouro-version-manager.js +295 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
- package/dist/mailbox-ui/assets/index-9-AxCxuB.js +61 -0
- package/dist/mailbox-ui/assets/index-CWzt267f.css +1 -0
- package/dist/mailbox-ui/index.html +15 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +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 +14 -1
- package/dist/mind/context.js +251 -101
- package/dist/mind/desk-section.js +310 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +68 -76
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/friends/channel.js +39 -0
- package/dist/mind/friends/resolver.js +54 -2
- package/dist/mind/friends/store-file.js +48 -4
- package/dist/mind/friends/types.js +2 -2
- package/dist/mind/journal-index.js +162 -0
- package/dist/mind/note-search.js +268 -0
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +6 -1
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1075 -146
- 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/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 +16 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +1040 -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 +331 -0
- package/dist/repertoire/coding/feedback.js +197 -30
- package/dist/repertoire/coding/manager.js +166 -10
- package/dist/repertoire/coding/spawner.js +55 -9
- package/dist/repertoire/coding/tools.js +219 -7
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +178 -0
- package/dist/repertoire/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 +385 -0
- package/dist/repertoire/mcp-client.js +295 -0
- package/dist/repertoire/mcp-manager.js +403 -0
- 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-attachments.js +317 -0
- package/dist/repertoire/tools-awaiting.js +372 -0
- package/dist/repertoire/tools-base.js +59 -1082
- 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-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 +227 -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 +438 -0
- package/dist/repertoire/tools-obligations.js +143 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +464 -0
- package/dist/repertoire/tools-runtime.js +150 -0
- package/dist/repertoire/tools-session.js +766 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +182 -0
- package/dist/repertoire/tools-surface.js +344 -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 +215 -103
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +594 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/attention-queue.js +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} +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 +2737 -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/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/bluebubbles-meta-guard.js +40 -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 +517 -204
- package/dist/senses/commands.js +66 -3
- package/dist/senses/habit-turn-message.js +108 -0
- package/dist/senses/inner-dialog-worker.js +254 -22
- package/dist/senses/inner-dialog.js +505 -40
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +379 -0
- package/dist/senses/pipeline.js +666 -181
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +393 -0
- package/dist/senses/surface-tool.js +108 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +388 -98
- package/dist/senses/trust-gate.js +100 -5
- 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 +5079 -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 +53 -0
- package/package.json +48 -8
- 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 +99 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/auth-flow.js +0 -351
- package/dist/heart/daemon/ouro-path-installer.js +0 -178
- package/dist/heart/safe-workspace.js +0 -228
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/associative-recall.js +0 -209
- 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 -1177
- package/dist/senses/debug-activity.js +0 -148
- 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,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,270 @@
|
|
|
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.isOpenObligationStatus = isOpenObligationStatus;
|
|
37
|
+
exports.isOpenObligation = isOpenObligation;
|
|
38
|
+
exports.createObligation = createObligation;
|
|
39
|
+
exports.readObligations = readObligations;
|
|
40
|
+
exports.readPendingObligations = readPendingObligations;
|
|
41
|
+
exports.advanceObligation = advanceObligation;
|
|
42
|
+
exports.fulfillObligation = fulfillObligation;
|
|
43
|
+
exports.findPendingObligationForOrigin = findPendingObligationForOrigin;
|
|
44
|
+
exports.enrichObligation = enrichObligation;
|
|
45
|
+
exports.generateObligationId = generateObligationId;
|
|
46
|
+
exports.getReturnObligationsDir = getReturnObligationsDir;
|
|
47
|
+
exports.createReturnObligation = createReturnObligation;
|
|
48
|
+
exports.readReturnObligation = readReturnObligation;
|
|
49
|
+
exports.advanceReturnObligation = advanceReturnObligation;
|
|
50
|
+
exports.listActiveReturnObligations = listActiveReturnObligations;
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const identity_1 = require("../heart/identity");
|
|
53
|
+
const session_events_1 = require("../heart/session-events");
|
|
54
|
+
const runtime_1 = require("../nerves/runtime");
|
|
55
|
+
const json_store_1 = require("./json-store");
|
|
56
|
+
function obligationsDir(agentRoot) {
|
|
57
|
+
return path.join(agentRoot, "arc", "obligations");
|
|
58
|
+
}
|
|
59
|
+
function isOpenObligationStatus(status) {
|
|
60
|
+
return status !== "fulfilled";
|
|
61
|
+
}
|
|
62
|
+
function isOpenObligation(obligation) {
|
|
63
|
+
return isOpenObligationStatus(obligation.status);
|
|
64
|
+
}
|
|
65
|
+
function createObligation(agentRoot, input) {
|
|
66
|
+
const now = new Date().toISOString();
|
|
67
|
+
const id = (0, json_store_1.generateTimestampId)();
|
|
68
|
+
const obligation = {
|
|
69
|
+
id,
|
|
70
|
+
origin: input.origin,
|
|
71
|
+
...(input.bridgeId ? { bridgeId: input.bridgeId } : {}),
|
|
72
|
+
content: (0, session_events_1.capStructuredRecordString)(input.content),
|
|
73
|
+
status: "pending",
|
|
74
|
+
createdAt: now,
|
|
75
|
+
updatedAt: now,
|
|
76
|
+
};
|
|
77
|
+
(0, json_store_1.writeJsonFile)(obligationsDir(agentRoot), id, obligation);
|
|
78
|
+
(0, runtime_1.emitNervesEvent)({
|
|
79
|
+
component: "engine",
|
|
80
|
+
event: "engine.obligation_created",
|
|
81
|
+
message: "obligation created",
|
|
82
|
+
meta: {
|
|
83
|
+
obligationId: id,
|
|
84
|
+
friendId: input.origin.friendId,
|
|
85
|
+
channel: input.origin.channel,
|
|
86
|
+
key: input.origin.key,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
return obligation;
|
|
90
|
+
}
|
|
91
|
+
function readObligations(agentRoot) {
|
|
92
|
+
const all = (0, json_store_1.readJsonDir)(obligationsDir(agentRoot));
|
|
93
|
+
return all.filter((parsed) => typeof parsed.id === "string" && typeof parsed.content === "string");
|
|
94
|
+
}
|
|
95
|
+
function readPendingObligations(agentRoot) {
|
|
96
|
+
return readObligations(agentRoot).filter(isOpenObligation);
|
|
97
|
+
}
|
|
98
|
+
function advanceObligation(agentRoot, obligationId, update) {
|
|
99
|
+
const dir = obligationsDir(agentRoot);
|
|
100
|
+
const obligation = (0, json_store_1.readJsonFile)(dir, obligationId);
|
|
101
|
+
if (!obligation)
|
|
102
|
+
return;
|
|
103
|
+
const previousStatus = obligation.status;
|
|
104
|
+
if (update.status) {
|
|
105
|
+
obligation.status = update.status;
|
|
106
|
+
if (update.status === "fulfilled") {
|
|
107
|
+
obligation.fulfilledAt = new Date().toISOString();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (update.currentSurface) {
|
|
111
|
+
obligation.currentSurface = update.currentSurface;
|
|
112
|
+
}
|
|
113
|
+
if (typeof update.currentArtifact === "string") {
|
|
114
|
+
obligation.currentArtifact = (0, session_events_1.capStructuredRecordString)(update.currentArtifact);
|
|
115
|
+
}
|
|
116
|
+
if (typeof update.nextAction === "string") {
|
|
117
|
+
obligation.nextAction = (0, session_events_1.capStructuredRecordString)(update.nextAction);
|
|
118
|
+
}
|
|
119
|
+
if (typeof update.latestNote === "string") {
|
|
120
|
+
obligation.latestNote = (0, session_events_1.capStructuredRecordString)(update.latestNote);
|
|
121
|
+
}
|
|
122
|
+
obligation.updatedAt = new Date().toISOString();
|
|
123
|
+
(0, json_store_1.writeJsonFile)(dir, obligationId, obligation);
|
|
124
|
+
(0, runtime_1.emitNervesEvent)({
|
|
125
|
+
component: "engine",
|
|
126
|
+
event: "engine.obligation_advanced",
|
|
127
|
+
message: "obligation advanced",
|
|
128
|
+
meta: {
|
|
129
|
+
obligationId,
|
|
130
|
+
previousStatus,
|
|
131
|
+
status: obligation.status,
|
|
132
|
+
friendId: obligation.origin.friendId,
|
|
133
|
+
channel: obligation.origin.channel,
|
|
134
|
+
key: obligation.origin.key,
|
|
135
|
+
surfaceKind: obligation.currentSurface?.kind ?? null,
|
|
136
|
+
surfaceLabel: obligation.currentSurface?.label ?? null,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
function fulfillObligation(agentRoot, obligationId) {
|
|
141
|
+
advanceObligation(agentRoot, obligationId, { status: "fulfilled" });
|
|
142
|
+
const obligation = (0, json_store_1.readJsonFile)(obligationsDir(agentRoot), obligationId);
|
|
143
|
+
if (!obligation)
|
|
144
|
+
return;
|
|
145
|
+
(0, runtime_1.emitNervesEvent)({
|
|
146
|
+
component: "engine",
|
|
147
|
+
event: "engine.obligation_fulfilled",
|
|
148
|
+
message: "obligation fulfilled",
|
|
149
|
+
meta: {
|
|
150
|
+
obligationId,
|
|
151
|
+
friendId: obligation.origin.friendId,
|
|
152
|
+
channel: obligation.origin.channel,
|
|
153
|
+
key: obligation.origin.key,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function findPendingObligationForOrigin(agentRoot, origin) {
|
|
158
|
+
return readPendingObligations(agentRoot).find((ob) => ob.origin.friendId === origin.friendId
|
|
159
|
+
&& ob.origin.channel === origin.channel
|
|
160
|
+
&& ob.origin.key === origin.key);
|
|
161
|
+
}
|
|
162
|
+
function enrichObligation(agentRoot, id, meaning) {
|
|
163
|
+
const dir = obligationsDir(agentRoot);
|
|
164
|
+
const existing = (0, json_store_1.readJsonFile)(dir, id);
|
|
165
|
+
if (!existing) {
|
|
166
|
+
throw new Error(`Obligation not found: ${id}`);
|
|
167
|
+
}
|
|
168
|
+
const obligation = existing;
|
|
169
|
+
obligation.meaning = {
|
|
170
|
+
...meaning,
|
|
171
|
+
...(typeof meaning.careReason === "string" ? { careReason: (0, session_events_1.capStructuredRecordString)(meaning.careReason) } : {}),
|
|
172
|
+
...(typeof meaning.resumeHint === "string" ? { resumeHint: (0, session_events_1.capStructuredRecordString)(meaning.resumeHint) } : {}),
|
|
173
|
+
...(meaning.waitingOn
|
|
174
|
+
? { waitingOn: { ...meaning.waitingOn, detail: (0, session_events_1.capStructuredRecordString)(meaning.waitingOn.detail) } }
|
|
175
|
+
: {}),
|
|
176
|
+
};
|
|
177
|
+
obligation.updatedAt = new Date().toISOString();
|
|
178
|
+
(0, json_store_1.writeJsonFile)(dir, id, obligation);
|
|
179
|
+
(0, runtime_1.emitNervesEvent)({
|
|
180
|
+
component: "engine",
|
|
181
|
+
event: "engine.obligation_enriched",
|
|
182
|
+
message: "obligation enriched with meaning",
|
|
183
|
+
meta: {
|
|
184
|
+
obligationId: id,
|
|
185
|
+
salience: meaning.salience,
|
|
186
|
+
stalenessClass: meaning.stalenessClass,
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
return obligation;
|
|
190
|
+
}
|
|
191
|
+
function generateObligationId(timestamp) {
|
|
192
|
+
return `${timestamp}-${Math.random().toString(36).slice(2, 10)}`;
|
|
193
|
+
}
|
|
194
|
+
function getReturnObligationsDir(agentName) {
|
|
195
|
+
return path.join((0, identity_1.getAgentRoot)(agentName), "arc", "obligations", "inner");
|
|
196
|
+
}
|
|
197
|
+
function createReturnObligation(agentName, obligation) {
|
|
198
|
+
const dir = getReturnObligationsDir(agentName);
|
|
199
|
+
const cappedObligation = {
|
|
200
|
+
...obligation,
|
|
201
|
+
delegatedContent: (0, session_events_1.capStructuredRecordString)(obligation.delegatedContent),
|
|
202
|
+
};
|
|
203
|
+
(0, json_store_1.writeJsonFile)(dir, obligation.id, cappedObligation);
|
|
204
|
+
const filePath = path.join(dir, `${obligation.id}.json`);
|
|
205
|
+
(0, runtime_1.emitNervesEvent)({
|
|
206
|
+
event: "mind.obligation_created",
|
|
207
|
+
component: "mind",
|
|
208
|
+
message: "return obligation created",
|
|
209
|
+
meta: {
|
|
210
|
+
obligationId: obligation.id,
|
|
211
|
+
origin: `${obligation.origin.friendId}/${obligation.origin.channel}/${obligation.origin.key}`,
|
|
212
|
+
status: obligation.status,
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
return filePath;
|
|
216
|
+
}
|
|
217
|
+
function readReturnObligation(agentName, obligationId) {
|
|
218
|
+
return (0, json_store_1.readJsonFile)(getReturnObligationsDir(agentName), obligationId);
|
|
219
|
+
}
|
|
220
|
+
function advanceReturnObligation(agentName, obligationId, update) {
|
|
221
|
+
const existing = readReturnObligation(agentName, obligationId);
|
|
222
|
+
if (!existing)
|
|
223
|
+
return null;
|
|
224
|
+
const updated = {
|
|
225
|
+
...existing,
|
|
226
|
+
status: update.status,
|
|
227
|
+
...(update.startedAt !== undefined ? { startedAt: update.startedAt } : {}),
|
|
228
|
+
...(update.returnedAt !== undefined ? { returnedAt: update.returnedAt } : {}),
|
|
229
|
+
...(update.returnTarget !== undefined ? { returnTarget: update.returnTarget } : {}),
|
|
230
|
+
};
|
|
231
|
+
(0, json_store_1.writeJsonFile)(getReturnObligationsDir(agentName), obligationId, updated);
|
|
232
|
+
(0, runtime_1.emitNervesEvent)({
|
|
233
|
+
event: "mind.obligation_advanced",
|
|
234
|
+
component: "mind",
|
|
235
|
+
message: `obligation advanced to ${update.status}`,
|
|
236
|
+
meta: {
|
|
237
|
+
obligationId,
|
|
238
|
+
status: update.status,
|
|
239
|
+
...(update.returnTarget ? { returnTarget: update.returnTarget } : {}),
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
return updated;
|
|
243
|
+
}
|
|
244
|
+
// Inner return obligations that have been sitting in queued/running state
|
|
245
|
+
// longer than this are auto-pruned from the "held work items" injection.
|
|
246
|
+
// Anything older is overwhelmingly noise: the agent has had many turns to
|
|
247
|
+
// resolve them and has not, and reinjecting them every turn just burns
|
|
248
|
+
// attention without producing progress. The file stays on disk and can
|
|
249
|
+
// still be inspected or surfaced explicitly; it just no longer gets
|
|
250
|
+
// re-piped into the active prompt.
|
|
251
|
+
const RETURN_OBLIGATION_INJECTION_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000;
|
|
252
|
+
// Strict allow-list of statuses that should appear in the "held work items"
|
|
253
|
+
// section. Anything else (including legacy/migrated `"fulfilled"` values left
|
|
254
|
+
// over from before the ObligationStatus → ReturnObligationStatus split, plus
|
|
255
|
+
// any future invalid value that slips past the `as any` casts at the
|
|
256
|
+
// surface-tool boundary) is treated as terminal — i.e., we do not re-inject
|
|
257
|
+
// it. This is a read-time defense; the underlying file is left as-is.
|
|
258
|
+
const ACTIVE_RETURN_OBLIGATION_STATUSES = new Set(["queued", "running"]);
|
|
259
|
+
function isSelfInnerReturnObligation(obligation) {
|
|
260
|
+
return obligation.origin.friendId === "self" && obligation.origin.channel === "inner";
|
|
261
|
+
}
|
|
262
|
+
function listActiveReturnObligations(agentName, options = {}) {
|
|
263
|
+
const all = (0, json_store_1.readJsonDir)(getReturnObligationsDir(agentName));
|
|
264
|
+
const nowMs = (options.now ?? Date.now)();
|
|
265
|
+
return all
|
|
266
|
+
.filter((parsed) => ACTIVE_RETURN_OBLIGATION_STATUSES.has(parsed.status))
|
|
267
|
+
.filter((parsed) => !isSelfInnerReturnObligation(parsed))
|
|
268
|
+
.filter((parsed) => nowMs - parsed.createdAt <= RETURN_OBLIGATION_INJECTION_MAX_AGE_MS)
|
|
269
|
+
.sort((a, b) => a.createdAt - b.createdAt);
|
|
270
|
+
}
|
|
@@ -0,0 +1,288 @@
|
|
|
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.getPonderPacketArtifactsDir = getPonderPacketArtifactsDir;
|
|
37
|
+
exports.listPonderPackets = listPonderPackets;
|
|
38
|
+
exports.readPonderPacket = readPonderPacket;
|
|
39
|
+
exports.createPonderPacket = createPonderPacket;
|
|
40
|
+
exports.revisePonderPacket = revisePonderPacket;
|
|
41
|
+
exports.advancePonderPacket = advancePonderPacket;
|
|
42
|
+
exports.completePonderPacket = completePonderPacket;
|
|
43
|
+
exports.findHarnessFrictionPacket = findHarnessFrictionPacket;
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const session_events_1 = require("../heart/session-events");
|
|
46
|
+
const runtime_1 = require("../nerves/runtime");
|
|
47
|
+
const task_lifecycle_1 = require("./task-lifecycle");
|
|
48
|
+
const json_store_1 = require("./json-store");
|
|
49
|
+
const evolution_1 = require("./evolution");
|
|
50
|
+
function packetsDir(agentRoot) {
|
|
51
|
+
return path.join(agentRoot, "arc", "packets");
|
|
52
|
+
}
|
|
53
|
+
function getPonderPacketArtifactsDir(agentRoot, packetId) {
|
|
54
|
+
return path.join(agentRoot, "state", "packets", packetId);
|
|
55
|
+
}
|
|
56
|
+
function packetLocator(packetId) {
|
|
57
|
+
return `arc/packets/${packetId}.json`;
|
|
58
|
+
}
|
|
59
|
+
function packetSop(kind) {
|
|
60
|
+
switch (kind) {
|
|
61
|
+
case "harness_friction":
|
|
62
|
+
return "harness_friction_v1";
|
|
63
|
+
case "research":
|
|
64
|
+
return "research_v1";
|
|
65
|
+
case "reflection":
|
|
66
|
+
return "reflection_v1";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function isPacketKind(value) {
|
|
70
|
+
return value === "harness_friction" || value === "research" || value === "reflection";
|
|
71
|
+
}
|
|
72
|
+
function isPonderPacket(value) {
|
|
73
|
+
if (!value || typeof value !== "object")
|
|
74
|
+
return false;
|
|
75
|
+
const packet = value;
|
|
76
|
+
return typeof packet.id === "string"
|
|
77
|
+
&& isPacketKind(packet.kind)
|
|
78
|
+
&& typeof packet.objective === "string"
|
|
79
|
+
&& typeof packet.summary === "string"
|
|
80
|
+
&& Array.isArray(packet.successCriteria)
|
|
81
|
+
&& (0, task_lifecycle_1.isTaskStatus)(packet.status)
|
|
82
|
+
&& typeof packet.createdAt === "number"
|
|
83
|
+
&& typeof packet.updatedAt === "number";
|
|
84
|
+
}
|
|
85
|
+
function payloadString(payload, key) {
|
|
86
|
+
const value = payload[key];
|
|
87
|
+
return typeof value === "string" && value.trim().length > 0 ? value : null;
|
|
88
|
+
}
|
|
89
|
+
function evolutionOriginForPacket(packet) {
|
|
90
|
+
if (packet.origin) {
|
|
91
|
+
return {
|
|
92
|
+
kind: "session",
|
|
93
|
+
label: `${packet.origin.friendId}/${packet.origin.channel}/${packet.origin.key}`,
|
|
94
|
+
locator: packetLocator(packet.id),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
kind: "runtime",
|
|
99
|
+
label: "ponder packet",
|
|
100
|
+
locator: packetLocator(packet.id),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function desiredBehaviorForPacket(packet) {
|
|
104
|
+
return packet.successCriteria.length > 0
|
|
105
|
+
? packet.successCriteria.join("; ")
|
|
106
|
+
: "Resolve the captured harness friction.";
|
|
107
|
+
}
|
|
108
|
+
function evidenceForPacket(packet, reason) {
|
|
109
|
+
return {
|
|
110
|
+
kind: "ponder_packet",
|
|
111
|
+
locator: packetLocator(packet.id),
|
|
112
|
+
capturedAt: new Date(packet.createdAt).toISOString(),
|
|
113
|
+
redaction: "summary",
|
|
114
|
+
reason,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function bindHarnessFrictionEvolutionCase(agentRoot, packet) {
|
|
118
|
+
if (packet.kind !== "harness_friction")
|
|
119
|
+
return packet;
|
|
120
|
+
const frictionSignature = payloadString(packet.payload, "frictionSignature");
|
|
121
|
+
if (!frictionSignature)
|
|
122
|
+
return packet;
|
|
123
|
+
const existing = (0, evolution_1.findOpenEvolutionCaseByFrictionSignature)(agentRoot, frictionSignature);
|
|
124
|
+
const evidenceReason = existing
|
|
125
|
+
? "Harness-friction ponder packet added evidence to this evolution case"
|
|
126
|
+
: "Harness-friction ponder packet created this evolution case";
|
|
127
|
+
const evidence = evidenceForPacket(packet, evidenceReason);
|
|
128
|
+
const evolutionCase = existing
|
|
129
|
+
? (0, evolution_1.addEvolutionEvidence)(agentRoot, existing.id, evidence)
|
|
130
|
+
: (0, evolution_1.createEvolutionCase)(agentRoot, {
|
|
131
|
+
title: packet.objective,
|
|
132
|
+
problemStatement: packet.summary,
|
|
133
|
+
desiredBehavior: desiredBehaviorForPacket(packet),
|
|
134
|
+
origin: evolutionOriginForPacket(packet),
|
|
135
|
+
evidenceRefs: [evidence],
|
|
136
|
+
frictionSignature,
|
|
137
|
+
packetId: packet.id,
|
|
138
|
+
});
|
|
139
|
+
if (!existing) {
|
|
140
|
+
(0, evolution_1.appendEvolutionTraceEvent)(agentRoot, evolutionCase.id, {
|
|
141
|
+
type: "evidence_added",
|
|
142
|
+
reason: evidence.reason,
|
|
143
|
+
evidenceRefs: [evidence.locator],
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
...packet,
|
|
148
|
+
payload: {
|
|
149
|
+
...packet.payload,
|
|
150
|
+
evolutionCaseId: evolutionCase.id,
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function listPonderPackets(agentRoot) {
|
|
155
|
+
return (0, json_store_1.readJsonDir)(packetsDir(agentRoot))
|
|
156
|
+
.filter(isPonderPacket)
|
|
157
|
+
.sort((left, right) => left.createdAt - right.createdAt);
|
|
158
|
+
}
|
|
159
|
+
function readPonderPacket(agentRoot, packetId) {
|
|
160
|
+
const packet = (0, json_store_1.readJsonFile)(packetsDir(agentRoot), packetId);
|
|
161
|
+
return isPonderPacket(packet) ? packet : null;
|
|
162
|
+
}
|
|
163
|
+
function createPonderPacket(agentRoot, input) {
|
|
164
|
+
const now = Date.now();
|
|
165
|
+
const packet = bindHarnessFrictionEvolutionCase(agentRoot, {
|
|
166
|
+
id: (0, json_store_1.generateTimestampId)("pkt"),
|
|
167
|
+
kind: input.kind,
|
|
168
|
+
sop: packetSop(input.kind),
|
|
169
|
+
status: "drafting",
|
|
170
|
+
objective: (0, session_events_1.capStructuredRecordString)(input.objective),
|
|
171
|
+
summary: (0, session_events_1.capStructuredRecordString)(input.summary),
|
|
172
|
+
successCriteria: (0, session_events_1.capStructuredRecordStringArray)(input.successCriteria),
|
|
173
|
+
...(input.origin ? { origin: input.origin } : {}),
|
|
174
|
+
...(input.relatedObligationId ? { relatedObligationId: input.relatedObligationId } : {}),
|
|
175
|
+
...(input.relatedReturnObligationId ? { relatedReturnObligationId: input.relatedReturnObligationId } : {}),
|
|
176
|
+
...(input.followsPacketId ? { followsPacketId: input.followsPacketId } : {}),
|
|
177
|
+
payload: (0, session_events_1.capStructuredRecordStringLeaves)(input.payload),
|
|
178
|
+
createdAt: now,
|
|
179
|
+
updatedAt: now,
|
|
180
|
+
});
|
|
181
|
+
(0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packet.id, packet);
|
|
182
|
+
(0, runtime_1.emitNervesEvent)({
|
|
183
|
+
component: "mind",
|
|
184
|
+
event: "mind.packet_created",
|
|
185
|
+
message: "ponder packet created",
|
|
186
|
+
meta: { packetId: packet.id, kind: packet.kind, status: packet.status },
|
|
187
|
+
});
|
|
188
|
+
return packet;
|
|
189
|
+
}
|
|
190
|
+
function revisePonderPacket(agentRoot, packetId, input) {
|
|
191
|
+
const existing = readPonderPacket(agentRoot, packetId);
|
|
192
|
+
if (!existing) {
|
|
193
|
+
throw new Error(`packet not found: ${packetId}`);
|
|
194
|
+
}
|
|
195
|
+
if (existing.status !== "drafting") {
|
|
196
|
+
throw new Error("packet is no longer drafting; file a follow-up packet instead");
|
|
197
|
+
}
|
|
198
|
+
const revised = {
|
|
199
|
+
...existing,
|
|
200
|
+
kind: input.kind,
|
|
201
|
+
sop: packetSop(input.kind),
|
|
202
|
+
objective: (0, session_events_1.capStructuredRecordString)(input.objective),
|
|
203
|
+
summary: (0, session_events_1.capStructuredRecordString)(input.summary),
|
|
204
|
+
successCriteria: (0, session_events_1.capStructuredRecordStringArray)(input.successCriteria),
|
|
205
|
+
payload: (0, session_events_1.capStructuredRecordStringLeaves)(input.payload),
|
|
206
|
+
updatedAt: Date.now(),
|
|
207
|
+
};
|
|
208
|
+
(0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packetId, revised);
|
|
209
|
+
(0, runtime_1.emitNervesEvent)({
|
|
210
|
+
component: "mind",
|
|
211
|
+
event: "mind.packet_revised",
|
|
212
|
+
message: "ponder packet revised",
|
|
213
|
+
meta: { packetId, kind: revised.kind, status: revised.status },
|
|
214
|
+
});
|
|
215
|
+
return revised;
|
|
216
|
+
}
|
|
217
|
+
function advancePonderPacket(agentRoot, packetId, update) {
|
|
218
|
+
const existing = readPonderPacket(agentRoot, packetId);
|
|
219
|
+
if (!existing) {
|
|
220
|
+
throw new Error(`packet not found: ${packetId}`);
|
|
221
|
+
}
|
|
222
|
+
const nextStatus = update.status ?? existing.status;
|
|
223
|
+
if (update.status) {
|
|
224
|
+
const transition = (0, task_lifecycle_1.validateTransition)(existing.status, update.status);
|
|
225
|
+
if (!transition.ok) {
|
|
226
|
+
throw new Error(transition.reason);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const advanced = {
|
|
230
|
+
...existing,
|
|
231
|
+
status: nextStatus,
|
|
232
|
+
...(update.relatedObligationId ? { relatedObligationId: update.relatedObligationId } : {}),
|
|
233
|
+
...(update.relatedReturnObligationId ? { relatedReturnObligationId: update.relatedReturnObligationId } : {}),
|
|
234
|
+
updatedAt: Date.now(),
|
|
235
|
+
};
|
|
236
|
+
(0, json_store_1.writeJsonFile)(packetsDir(agentRoot), packetId, advanced);
|
|
237
|
+
(0, runtime_1.emitNervesEvent)({
|
|
238
|
+
component: "mind",
|
|
239
|
+
event: "mind.packet_advanced",
|
|
240
|
+
message: "ponder packet advanced",
|
|
241
|
+
meta: { packetId, status: advanced.status },
|
|
242
|
+
});
|
|
243
|
+
return advanced;
|
|
244
|
+
}
|
|
245
|
+
const PONDER_PACKET_COMPLETION_PATH = {
|
|
246
|
+
drafting: ["processing", "validating", "done"],
|
|
247
|
+
processing: ["validating", "done"],
|
|
248
|
+
validating: ["done"],
|
|
249
|
+
collaborating: ["validating", "done"],
|
|
250
|
+
paused: ["processing", "validating", "done"],
|
|
251
|
+
blocked: ["processing", "validating", "done"],
|
|
252
|
+
done: [],
|
|
253
|
+
cancelled: [],
|
|
254
|
+
};
|
|
255
|
+
function completePonderPacket(agentRoot, packetId) {
|
|
256
|
+
let packet = readPonderPacket(agentRoot, packetId);
|
|
257
|
+
if (!packet) {
|
|
258
|
+
throw new Error(`packet not found: ${packetId}`);
|
|
259
|
+
}
|
|
260
|
+
for (const status of PONDER_PACKET_COMPLETION_PATH[packet.status]) {
|
|
261
|
+
packet = advancePonderPacket(agentRoot, packet.id, { status });
|
|
262
|
+
}
|
|
263
|
+
return packet;
|
|
264
|
+
}
|
|
265
|
+
function findHarnessFrictionPacket(agentRoot, origin, frictionSignature) {
|
|
266
|
+
const found = listPonderPackets(agentRoot).find((packet) => {
|
|
267
|
+
if (packet.kind !== "harness_friction")
|
|
268
|
+
return false;
|
|
269
|
+
if (!packet.origin)
|
|
270
|
+
return false;
|
|
271
|
+
return packet.origin.friendId === origin.friendId
|
|
272
|
+
&& packet.origin.channel === origin.channel
|
|
273
|
+
&& packet.origin.key === origin.key
|
|
274
|
+
&& packet.payload.frictionSignature === frictionSignature;
|
|
275
|
+
}) ?? null;
|
|
276
|
+
(0, runtime_1.emitNervesEvent)({
|
|
277
|
+
component: "mind",
|
|
278
|
+
event: "mind.packet_lookup",
|
|
279
|
+
message: "ponder packet lookup completed",
|
|
280
|
+
meta: {
|
|
281
|
+
kind: "harness_friction",
|
|
282
|
+
found: found !== null,
|
|
283
|
+
origin: `${origin.friendId}/${origin.channel}/${origin.key}`,
|
|
284
|
+
frictionSignature,
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
return found;
|
|
288
|
+
}
|