@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,527 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evolutionToolDefinitions = void 0;
|
|
4
|
+
exports.getOpenEvolutionCasesForActiveWork = getOpenEvolutionCasesForActiveWork;
|
|
5
|
+
const identity_1 = require("../heart/identity");
|
|
6
|
+
const evolution_1 = require("../arc/evolution");
|
|
7
|
+
const runtime_1 = require("../nerves/runtime");
|
|
8
|
+
const EVOLUTION_ACTIONS = new Set([
|
|
9
|
+
"create_case",
|
|
10
|
+
"add_evidence",
|
|
11
|
+
"write_journal",
|
|
12
|
+
"write_desk",
|
|
13
|
+
"write_diary",
|
|
14
|
+
"spawn_coding",
|
|
15
|
+
"create_branch",
|
|
16
|
+
"commit",
|
|
17
|
+
"open_pr",
|
|
18
|
+
"merge_pr",
|
|
19
|
+
"release_publish",
|
|
20
|
+
"install_local",
|
|
21
|
+
"mutate_shared_skill",
|
|
22
|
+
"mutate_identity",
|
|
23
|
+
"mutate_voice",
|
|
24
|
+
"mutate_credentials",
|
|
25
|
+
"mutate_provider_config",
|
|
26
|
+
"send_external_message",
|
|
27
|
+
"change_hosted_infra",
|
|
28
|
+
"ratify",
|
|
29
|
+
]);
|
|
30
|
+
const ORIGIN_KINDS = new Set(["session", "mcp", "sense", "desk", "habit", "human", "coding", "runtime"]);
|
|
31
|
+
const BUDGET_PROFILES = new Set(["capture", "conservative", "trusted-local"]);
|
|
32
|
+
const EVIDENCE_KINDS = new Set([
|
|
33
|
+
"session_event",
|
|
34
|
+
"session_envelope",
|
|
35
|
+
"nerves_event",
|
|
36
|
+
"ponder_packet",
|
|
37
|
+
"obligation",
|
|
38
|
+
"return_obligation",
|
|
39
|
+
"coding_session",
|
|
40
|
+
"coding_artifact",
|
|
41
|
+
"desk_doc",
|
|
42
|
+
"desk_friction",
|
|
43
|
+
"git_commit",
|
|
44
|
+
"pull_request",
|
|
45
|
+
"ci_run",
|
|
46
|
+
"release",
|
|
47
|
+
"installed_runtime",
|
|
48
|
+
"diary_entry",
|
|
49
|
+
"journal_file",
|
|
50
|
+
"skill_file",
|
|
51
|
+
"sense_artifact",
|
|
52
|
+
"hosted_audit",
|
|
53
|
+
"human_message",
|
|
54
|
+
"external_doc",
|
|
55
|
+
]);
|
|
56
|
+
const REDACTIONS = new Set(["none", "summary", "private_ref", "secret_ref"]);
|
|
57
|
+
const DECISIONS = new Set(["ignore", "defer", "journal", "ask", "delegate", "act", "abandon"]);
|
|
58
|
+
const VERIFICATION_STATUSES = new Set(["not-verified", "partial", "passed", "failed"]);
|
|
59
|
+
const RATIFICATION_DESTINATIONS = new Set([
|
|
60
|
+
"code",
|
|
61
|
+
"repo_doc",
|
|
62
|
+
"shared_skill",
|
|
63
|
+
"desk_lesson",
|
|
64
|
+
"desk_task",
|
|
65
|
+
"diary",
|
|
66
|
+
"journal",
|
|
67
|
+
"habit",
|
|
68
|
+
"policy",
|
|
69
|
+
"agent_config",
|
|
70
|
+
"hosted_substrate",
|
|
71
|
+
"none_needed",
|
|
72
|
+
]);
|
|
73
|
+
function nowIso() {
|
|
74
|
+
return new Date().toISOString();
|
|
75
|
+
}
|
|
76
|
+
function json(value) {
|
|
77
|
+
return JSON.stringify(value);
|
|
78
|
+
}
|
|
79
|
+
function withEvolutionToolTelemetry(toolName, handler) {
|
|
80
|
+
return (args, ctx) => {
|
|
81
|
+
(0, runtime_1.emitNervesEvent)({
|
|
82
|
+
component: "repertoire",
|
|
83
|
+
event: "repertoire.evolution_tool_call",
|
|
84
|
+
message: "evolution tool invoked",
|
|
85
|
+
meta: { toolName },
|
|
86
|
+
});
|
|
87
|
+
return handler(args, ctx);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function required(args, name) {
|
|
91
|
+
const value = args[name];
|
|
92
|
+
if (typeof value !== "string" || value.trim().length === 0)
|
|
93
|
+
return null;
|
|
94
|
+
return value.trim();
|
|
95
|
+
}
|
|
96
|
+
function optional(args, name) {
|
|
97
|
+
const value = args[name];
|
|
98
|
+
if (typeof value !== "string" || value.trim().length === 0)
|
|
99
|
+
return null;
|
|
100
|
+
return value.trim();
|
|
101
|
+
}
|
|
102
|
+
function parseEnum(value, allowed, label) {
|
|
103
|
+
return allowed.has(value) ? value : `invalid ${label}: ${value}`;
|
|
104
|
+
}
|
|
105
|
+
function parseStringArray(value, label) {
|
|
106
|
+
if (value === null)
|
|
107
|
+
return [];
|
|
108
|
+
try {
|
|
109
|
+
const parsed = JSON.parse(value);
|
|
110
|
+
if (Array.isArray(parsed) && parsed.every((item) => typeof item === "string"))
|
|
111
|
+
return parsed.map((item) => item.trim()).filter(Boolean);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return value
|
|
115
|
+
.split(/\n|,/)
|
|
116
|
+
.map((item) => item.trim())
|
|
117
|
+
.filter(Boolean);
|
|
118
|
+
}
|
|
119
|
+
return `${label} must be a JSON string array, newline list, or comma list`;
|
|
120
|
+
}
|
|
121
|
+
function parseDelivery(value) {
|
|
122
|
+
if (value === null)
|
|
123
|
+
return "delivery is required";
|
|
124
|
+
try {
|
|
125
|
+
const parsed = JSON.parse(value);
|
|
126
|
+
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed))
|
|
127
|
+
return parsed;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return "delivery must be valid JSON";
|
|
131
|
+
}
|
|
132
|
+
return "delivery must be a JSON object";
|
|
133
|
+
}
|
|
134
|
+
function buildRatification(args) {
|
|
135
|
+
const destinationRaw = required(args, "destination");
|
|
136
|
+
if (!destinationRaw)
|
|
137
|
+
return "destination is required";
|
|
138
|
+
const destination = parseEnum(destinationRaw, RATIFICATION_DESTINATIONS, "destination");
|
|
139
|
+
if (typeof destination === "string" && !RATIFICATION_DESTINATIONS.has(destination))
|
|
140
|
+
return destination;
|
|
141
|
+
const locator = required(args, "locator");
|
|
142
|
+
if (!locator)
|
|
143
|
+
return "locator is required";
|
|
144
|
+
const reason = required(args, "reason");
|
|
145
|
+
if (!reason)
|
|
146
|
+
return "reason is required";
|
|
147
|
+
return {
|
|
148
|
+
destination: destination,
|
|
149
|
+
locator,
|
|
150
|
+
landedAt: optional(args, "landedAt") ?? nowIso(),
|
|
151
|
+
reason,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function buildEvidence(args) {
|
|
155
|
+
const kindRaw = optional(args, "evidenceKind");
|
|
156
|
+
const locator = optional(args, "evidenceLocator");
|
|
157
|
+
const reason = optional(args, "evidenceReason");
|
|
158
|
+
if (!kindRaw && !locator && !reason)
|
|
159
|
+
return null;
|
|
160
|
+
if (!kindRaw)
|
|
161
|
+
return "evidenceKind is required when evidence is provided";
|
|
162
|
+
if (!locator)
|
|
163
|
+
return "evidenceLocator is required when evidence is provided";
|
|
164
|
+
if (!reason)
|
|
165
|
+
return "evidenceReason is required when evidence is provided";
|
|
166
|
+
const kind = parseEnum(kindRaw, EVIDENCE_KINDS, "evidenceKind");
|
|
167
|
+
if (typeof kind === "string" && !EVIDENCE_KINDS.has(kind))
|
|
168
|
+
return kind;
|
|
169
|
+
const redactionRaw = optional(args, "evidenceRedaction") ?? "summary";
|
|
170
|
+
const redaction = parseEnum(redactionRaw, REDACTIONS, "evidenceRedaction");
|
|
171
|
+
if (typeof redaction === "string" && !REDACTIONS.has(redaction))
|
|
172
|
+
return redaction;
|
|
173
|
+
return {
|
|
174
|
+
kind: kind,
|
|
175
|
+
locator,
|
|
176
|
+
capturedAt: optional(args, "evidenceCapturedAt") ?? nowIso(),
|
|
177
|
+
redaction: redaction,
|
|
178
|
+
reason,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function caseOrError(agentRoot, caseId) {
|
|
182
|
+
const item = (0, evolution_1.readEvolutionCase)(agentRoot, caseId);
|
|
183
|
+
if (!item)
|
|
184
|
+
return { ok: false, error: `Evolution case not found: ${caseId}` };
|
|
185
|
+
return { ok: true, case: item };
|
|
186
|
+
}
|
|
187
|
+
const rawEvolutionToolDefinitions = [
|
|
188
|
+
{
|
|
189
|
+
/* v8 ignore next -- static OpenAI tool schema is validated by the registry contract */
|
|
190
|
+
tool: {
|
|
191
|
+
type: "function",
|
|
192
|
+
function: {
|
|
193
|
+
name: "evolution_status",
|
|
194
|
+
description: "list open evolution cases with their status, next action, and budget profile.",
|
|
195
|
+
parameters: {
|
|
196
|
+
type: "object",
|
|
197
|
+
properties: {},
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
handler: () => {
|
|
202
|
+
const openCases = (0, evolution_1.summarizeOpenEvolutionCases)((0, identity_1.getAgentRoot)());
|
|
203
|
+
return json({ ok: true, count: openCases.length, openCases });
|
|
204
|
+
},
|
|
205
|
+
riskProfile: { mutates: "none", risk: "low", reason: "reads evolution case summaries" },
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
tool: {
|
|
209
|
+
type: "function",
|
|
210
|
+
function: {
|
|
211
|
+
name: "evolution_case",
|
|
212
|
+
description: "show one evolution case with its trace events.",
|
|
213
|
+
parameters: {
|
|
214
|
+
type: "object",
|
|
215
|
+
properties: {
|
|
216
|
+
caseId: { type: "string", description: "evolution case id, such as evo-..." },
|
|
217
|
+
},
|
|
218
|
+
required: ["caseId"],
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
handler: (args) => {
|
|
223
|
+
const caseId = required(args, "caseId");
|
|
224
|
+
if (!caseId)
|
|
225
|
+
return json({ ok: false, error: "caseId is required" });
|
|
226
|
+
const agentRoot = (0, identity_1.getAgentRoot)();
|
|
227
|
+
const result = caseOrError(agentRoot, caseId);
|
|
228
|
+
if (!result.ok)
|
|
229
|
+
return json(result);
|
|
230
|
+
return json({ ok: true, case: result.case, trace: (0, evolution_1.readEvolutionTrace)(agentRoot, caseId) });
|
|
231
|
+
},
|
|
232
|
+
riskProfile: { mutates: "none", risk: "low", reason: "reads a local evolution case and trace" },
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
tool: {
|
|
236
|
+
type: "function",
|
|
237
|
+
function: {
|
|
238
|
+
name: "evolution_capture",
|
|
239
|
+
description: "capture a new harness evolution case from observed friction or desired behavior.",
|
|
240
|
+
parameters: {
|
|
241
|
+
type: "object",
|
|
242
|
+
properties: {
|
|
243
|
+
title: { type: "string" },
|
|
244
|
+
problemStatement: { type: "string" },
|
|
245
|
+
desiredBehavior: { type: "string" },
|
|
246
|
+
originKind: { type: "string" },
|
|
247
|
+
originLabel: { type: "string" },
|
|
248
|
+
originLocator: { type: "string" },
|
|
249
|
+
budgetProfile: { type: "string" },
|
|
250
|
+
frictionSignature: { type: "string" },
|
|
251
|
+
packetId: { type: "string" },
|
|
252
|
+
obligationId: { type: "string" },
|
|
253
|
+
evidenceKind: { type: "string" },
|
|
254
|
+
evidenceLocator: { type: "string" },
|
|
255
|
+
evidenceReason: { type: "string" },
|
|
256
|
+
evidenceRedaction: { type: "string" },
|
|
257
|
+
evidenceCapturedAt: { type: "string" },
|
|
258
|
+
},
|
|
259
|
+
required: ["title", "problemStatement", "desiredBehavior", "originKind", "originLabel", "originLocator"],
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
handler: (args) => {
|
|
264
|
+
const title = required(args, "title");
|
|
265
|
+
const problemStatement = required(args, "problemStatement");
|
|
266
|
+
const desiredBehavior = required(args, "desiredBehavior");
|
|
267
|
+
const originKindRaw = required(args, "originKind");
|
|
268
|
+
const originLabel = required(args, "originLabel");
|
|
269
|
+
const originLocator = required(args, "originLocator");
|
|
270
|
+
if (!title)
|
|
271
|
+
return json({ ok: false, error: "title is required" });
|
|
272
|
+
if (!problemStatement)
|
|
273
|
+
return json({ ok: false, error: "problemStatement is required" });
|
|
274
|
+
if (!desiredBehavior)
|
|
275
|
+
return json({ ok: false, error: "desiredBehavior is required" });
|
|
276
|
+
if (!originKindRaw)
|
|
277
|
+
return json({ ok: false, error: "originKind is required" });
|
|
278
|
+
if (!originLabel)
|
|
279
|
+
return json({ ok: false, error: "originLabel is required" });
|
|
280
|
+
if (!originLocator)
|
|
281
|
+
return json({ ok: false, error: "originLocator is required" });
|
|
282
|
+
const originKind = parseEnum(originKindRaw, ORIGIN_KINDS, "originKind");
|
|
283
|
+
if (typeof originKind === "string" && !ORIGIN_KINDS.has(originKind))
|
|
284
|
+
return json({ ok: false, error: originKind });
|
|
285
|
+
const budgetProfileRaw = optional(args, "budgetProfile") ?? "conservative";
|
|
286
|
+
const budgetProfile = parseEnum(budgetProfileRaw, BUDGET_PROFILES, "budgetProfile");
|
|
287
|
+
if (typeof budgetProfile === "string" && !BUDGET_PROFILES.has(budgetProfile))
|
|
288
|
+
return json({ ok: false, error: budgetProfile });
|
|
289
|
+
const evidence = buildEvidence(args);
|
|
290
|
+
if (typeof evidence === "string")
|
|
291
|
+
return json({ ok: false, error: evidence });
|
|
292
|
+
const frictionSignature = optional(args, "frictionSignature");
|
|
293
|
+
const packetId = optional(args, "packetId");
|
|
294
|
+
const obligationId = optional(args, "obligationId");
|
|
295
|
+
const item = (0, evolution_1.createEvolutionCase)((0, identity_1.getAgentRoot)(), {
|
|
296
|
+
title,
|
|
297
|
+
problemStatement,
|
|
298
|
+
desiredBehavior,
|
|
299
|
+
origin: { kind: originKind, label: originLabel, locator: originLocator },
|
|
300
|
+
budgetProfile: budgetProfile,
|
|
301
|
+
evidenceRefs: evidence ? [evidence] : [],
|
|
302
|
+
...(frictionSignature ? { frictionSignature } : {}),
|
|
303
|
+
...(packetId ? { packetId } : {}),
|
|
304
|
+
...(obligationId ? { obligationId } : {}),
|
|
305
|
+
});
|
|
306
|
+
return json({ ok: true, case: item, nextAction: (0, evolution_1.nextEvolutionActionForStatus)(item.status) });
|
|
307
|
+
},
|
|
308
|
+
riskProfile: { mutates: "durable_state_write", risk: "high", reason: "creates durable evolution case and trace state" },
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
tool: {
|
|
312
|
+
type: "function",
|
|
313
|
+
function: {
|
|
314
|
+
name: "evolution_decide",
|
|
315
|
+
description: "record an evolution decision after checking the action against case authority and budget.",
|
|
316
|
+
parameters: {
|
|
317
|
+
type: "object",
|
|
318
|
+
properties: {
|
|
319
|
+
caseId: { type: "string" },
|
|
320
|
+
decision: { type: "string" },
|
|
321
|
+
action: { type: "string" },
|
|
322
|
+
reason: { type: "string" },
|
|
323
|
+
},
|
|
324
|
+
required: ["caseId", "decision", "action", "reason"],
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
handler: (args) => {
|
|
329
|
+
const caseId = required(args, "caseId");
|
|
330
|
+
const decisionRaw = required(args, "decision");
|
|
331
|
+
const actionRaw = required(args, "action");
|
|
332
|
+
const reason = required(args, "reason");
|
|
333
|
+
if (!caseId)
|
|
334
|
+
return json({ ok: false, error: "caseId is required" });
|
|
335
|
+
if (!decisionRaw)
|
|
336
|
+
return json({ ok: false, error: "decision is required" });
|
|
337
|
+
if (!DECISIONS.has(decisionRaw))
|
|
338
|
+
return json({ ok: false, error: `invalid decision: ${decisionRaw}` });
|
|
339
|
+
if (!actionRaw)
|
|
340
|
+
return json({ ok: false, error: "action is required" });
|
|
341
|
+
const action = parseEnum(actionRaw, EVOLUTION_ACTIONS, "action");
|
|
342
|
+
if (typeof action === "string" && !EVOLUTION_ACTIONS.has(action))
|
|
343
|
+
return json({ ok: false, error: action });
|
|
344
|
+
if (!reason)
|
|
345
|
+
return json({ ok: false, error: "reason is required" });
|
|
346
|
+
const agentRoot = (0, identity_1.getAgentRoot)();
|
|
347
|
+
const gate = (0, evolution_1.evaluateEvolutionAction)(agentRoot, caseId, action);
|
|
348
|
+
if (!gate.allowed) {
|
|
349
|
+
return json({ ok: false, blocked: true, caseId, action, code: gate.code, reason: gate.reason });
|
|
350
|
+
}
|
|
351
|
+
const item = (0, evolution_1.recordEvolutionDecision)(agentRoot, caseId, {
|
|
352
|
+
decision: decisionRaw,
|
|
353
|
+
reason,
|
|
354
|
+
authorityMode: gate.code,
|
|
355
|
+
});
|
|
356
|
+
return json({ ok: true, action, case: item });
|
|
357
|
+
},
|
|
358
|
+
riskProfile: { mutates: "durable_state_write", risk: "high", reason: "records durable evolution decision state" },
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
tool: {
|
|
362
|
+
type: "function",
|
|
363
|
+
function: {
|
|
364
|
+
name: "evolution_verify",
|
|
365
|
+
description: "record verification status, commands, evidence, residual risk, and missing checks for a case.",
|
|
366
|
+
parameters: {
|
|
367
|
+
type: "object",
|
|
368
|
+
properties: {
|
|
369
|
+
caseId: { type: "string" },
|
|
370
|
+
status: { type: "string" },
|
|
371
|
+
objective: { type: "string" },
|
|
372
|
+
commands: { type: "string" },
|
|
373
|
+
evidenceRefs: { type: "string" },
|
|
374
|
+
residualRisk: { type: "string" },
|
|
375
|
+
missingChecks: { type: "string" },
|
|
376
|
+
checkedAt: { type: "string" },
|
|
377
|
+
},
|
|
378
|
+
required: ["caseId", "status", "objective"],
|
|
379
|
+
},
|
|
380
|
+
},
|
|
381
|
+
},
|
|
382
|
+
handler: (args) => {
|
|
383
|
+
const caseId = required(args, "caseId");
|
|
384
|
+
const statusRaw = required(args, "status");
|
|
385
|
+
const objective = required(args, "objective");
|
|
386
|
+
if (!caseId)
|
|
387
|
+
return json({ ok: false, error: "caseId is required" });
|
|
388
|
+
if (!statusRaw)
|
|
389
|
+
return json({ ok: false, error: "status is required" });
|
|
390
|
+
if (!VERIFICATION_STATUSES.has(statusRaw))
|
|
391
|
+
return json({ ok: false, error: `invalid status: ${statusRaw}` });
|
|
392
|
+
if (!objective)
|
|
393
|
+
return json({ ok: false, error: "objective is required" });
|
|
394
|
+
const commands = parseStringArray(optional(args, "commands"), "commands");
|
|
395
|
+
if (typeof commands === "string")
|
|
396
|
+
return json({ ok: false, error: commands });
|
|
397
|
+
const evidenceRefs = parseStringArray(optional(args, "evidenceRefs"), "evidenceRefs");
|
|
398
|
+
if (typeof evidenceRefs === "string")
|
|
399
|
+
return json({ ok: false, error: evidenceRefs });
|
|
400
|
+
const missingChecks = parseStringArray(optional(args, "missingChecks"), "missingChecks");
|
|
401
|
+
if (typeof missingChecks === "string")
|
|
402
|
+
return json({ ok: false, error: missingChecks });
|
|
403
|
+
const item = (0, evolution_1.recordEvolutionVerification)((0, identity_1.getAgentRoot)(), caseId, {
|
|
404
|
+
status: statusRaw,
|
|
405
|
+
checkedAt: optional(args, "checkedAt") ?? nowIso(),
|
|
406
|
+
objective,
|
|
407
|
+
commands,
|
|
408
|
+
evidenceRefs,
|
|
409
|
+
residualRisk: optional(args, "residualRisk"),
|
|
410
|
+
missingChecks,
|
|
411
|
+
});
|
|
412
|
+
return json({ ok: true, case: item });
|
|
413
|
+
},
|
|
414
|
+
riskProfile: { mutates: "durable_state_write", risk: "high", reason: "records durable evolution verification state" },
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
tool: {
|
|
418
|
+
type: "function",
|
|
419
|
+
function: {
|
|
420
|
+
name: "evolution_deliver",
|
|
421
|
+
description: "record branch, commit, pull request, merge, release, publish, install, or runtime-refresh delivery state from a JSON object.",
|
|
422
|
+
parameters: {
|
|
423
|
+
type: "object",
|
|
424
|
+
properties: {
|
|
425
|
+
caseId: { type: "string" },
|
|
426
|
+
delivery: { type: "string" },
|
|
427
|
+
},
|
|
428
|
+
required: ["caseId", "delivery"],
|
|
429
|
+
},
|
|
430
|
+
},
|
|
431
|
+
},
|
|
432
|
+
handler: (args) => {
|
|
433
|
+
const caseId = required(args, "caseId");
|
|
434
|
+
if (!caseId)
|
|
435
|
+
return json({ ok: false, error: "caseId is required" });
|
|
436
|
+
const delivery = parseDelivery(optional(args, "delivery"));
|
|
437
|
+
if (typeof delivery === "string")
|
|
438
|
+
return json({ ok: false, error: delivery });
|
|
439
|
+
const item = (0, evolution_1.recordEvolutionDelivery)((0, identity_1.getAgentRoot)(), caseId, delivery);
|
|
440
|
+
return json({ ok: true, case: item });
|
|
441
|
+
},
|
|
442
|
+
riskProfile: { mutates: "durable_state_write", risk: "high", reason: "records durable evolution delivery state" },
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
tool: {
|
|
446
|
+
type: "function",
|
|
447
|
+
function: {
|
|
448
|
+
name: "evolution_ratify",
|
|
449
|
+
description: "record where the verified lesson landed, including none_needed when no durable lesson should be written.",
|
|
450
|
+
parameters: {
|
|
451
|
+
type: "object",
|
|
452
|
+
properties: {
|
|
453
|
+
caseId: { type: "string" },
|
|
454
|
+
destination: { type: "string" },
|
|
455
|
+
locator: { type: "string" },
|
|
456
|
+
landedAt: { type: "string" },
|
|
457
|
+
reason: { type: "string" },
|
|
458
|
+
},
|
|
459
|
+
required: ["caseId", "destination", "locator", "reason"],
|
|
460
|
+
},
|
|
461
|
+
},
|
|
462
|
+
},
|
|
463
|
+
handler: (args) => {
|
|
464
|
+
const caseId = required(args, "caseId");
|
|
465
|
+
if (!caseId)
|
|
466
|
+
return json({ ok: false, error: "caseId is required" });
|
|
467
|
+
const ratification = buildRatification(args);
|
|
468
|
+
if (typeof ratification === "string")
|
|
469
|
+
return json({ ok: false, error: ratification });
|
|
470
|
+
const item = (0, evolution_1.recordEvolutionRatification)((0, identity_1.getAgentRoot)(), caseId, ratification);
|
|
471
|
+
return json({ ok: true, case: item });
|
|
472
|
+
},
|
|
473
|
+
riskProfile: { mutates: "durable_state_write", risk: "high", reason: "records durable evolution ratification state" },
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
tool: {
|
|
477
|
+
type: "function",
|
|
478
|
+
function: {
|
|
479
|
+
name: "evolution_close",
|
|
480
|
+
description: "close a ratified evolution case. can include inline ratification fields, including destination none_needed.",
|
|
481
|
+
parameters: {
|
|
482
|
+
type: "object",
|
|
483
|
+
properties: {
|
|
484
|
+
caseId: { type: "string" },
|
|
485
|
+
reason: { type: "string" },
|
|
486
|
+
destination: { type: "string" },
|
|
487
|
+
locator: { type: "string" },
|
|
488
|
+
landedAt: { type: "string" },
|
|
489
|
+
},
|
|
490
|
+
required: ["caseId", "reason"],
|
|
491
|
+
},
|
|
492
|
+
},
|
|
493
|
+
},
|
|
494
|
+
handler: (args) => {
|
|
495
|
+
const caseId = required(args, "caseId");
|
|
496
|
+
const reason = required(args, "reason");
|
|
497
|
+
if (!caseId)
|
|
498
|
+
return json({ ok: false, error: "caseId is required" });
|
|
499
|
+
if (!reason)
|
|
500
|
+
return json({ ok: false, error: "reason is required" });
|
|
501
|
+
const ratification = optional(args, "destination") ? buildRatification(args) : undefined;
|
|
502
|
+
if (typeof ratification === "string")
|
|
503
|
+
return json({ ok: false, error: ratification });
|
|
504
|
+
try {
|
|
505
|
+
const item = (0, evolution_1.closeEvolutionCase)((0, identity_1.getAgentRoot)(), caseId, { reason, ...(ratification ? { ratification } : {}) });
|
|
506
|
+
return json({ ok: true, case: item });
|
|
507
|
+
}
|
|
508
|
+
catch (error) {
|
|
509
|
+
return json({ ok: false, error: error.message });
|
|
510
|
+
}
|
|
511
|
+
},
|
|
512
|
+
riskProfile: { mutates: "durable_state_write", risk: "high", reason: "closes durable evolution case state" },
|
|
513
|
+
},
|
|
514
|
+
];
|
|
515
|
+
exports.evolutionToolDefinitions = rawEvolutionToolDefinitions.map((definition) => ({
|
|
516
|
+
...definition,
|
|
517
|
+
handler: withEvolutionToolTelemetry(definition.tool.function.name, definition.handler),
|
|
518
|
+
}));
|
|
519
|
+
function getOpenEvolutionCasesForActiveWork(agentRoot = (0, identity_1.getAgentRoot)()) {
|
|
520
|
+
return (0, evolution_1.listOpenEvolutionCases)(agentRoot).map((item) => ({
|
|
521
|
+
id: item.id,
|
|
522
|
+
title: item.title,
|
|
523
|
+
status: item.status,
|
|
524
|
+
nextAction: (0, evolution_1.nextEvolutionActionForStatus)(item.status),
|
|
525
|
+
budgetProfile: item.budget.profile,
|
|
526
|
+
}));
|
|
527
|
+
}
|