@ouro.bot/cli 0.1.0-alpha.83 → 0.1.0-alpha.830
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/LICENSE +21 -0
- package/README.md +154 -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/assets/bluebubbles-host +264 -0
- package/assets/sanctuary-host-launcher.sh +16 -0
- package/changelog.json +5302 -16
- package/deploy/unraid/Dockerfile +54 -0
- package/deploy/unraid/README.txt +2983 -0
- package/deploy/unraid/audit-container-spec.sh +4 -0
- package/deploy/unraid/container-runtime.json +1 -0
- package/deploy/unraid/docker-man-template-transaction.mjs +711 -0
- package/deploy/unraid/docker-man-template-xml.cjs +105 -0
- package/deploy/unraid/migrate-sanctuary-bundle.mjs +60 -0
- package/deploy/unraid/ouro-events/bootstrap-spool.sh +92 -0
- package/deploy/unraid/ouro-events/emit-event.mjs +310 -0
- package/deploy/unraid/ouro-events/emit-usenet-event.sh +54 -0
- package/deploy/unraid/ouro-events/install-usenet-guard.sh +435 -0
- package/deploy/unraid/ouro-events/usenet-health.sh +176 -0
- package/deploy/unraid/sanctuary-acceptance-adapter.sh +43 -0
- package/deploy/unraid/sanctuary-acceptance-contract.json +198 -0
- package/deploy/unraid/sanctuary-acceptance-harness.sh +23 -0
- package/deploy/unraid/sanctuary-authority-installation.json +36 -0
- package/deploy/unraid/sanctuary-authority-service.sh +30 -0
- package/deploy/unraid/sanctuary-deployment-target.mjs +710 -0
- package/deploy/unraid/sanctuary-safe-rename.py +24 -0
- package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2084 -0
- package/deploy/unraid/sanctuary-unit16-run.sh +560 -0
- package/deploy/unraid/sanctuary-unit18-target-audit.sh +27 -0
- package/deploy/unraid/sanctuary.ouro/agent.json +66 -0
- package/deploy/unraid/sanctuary.ouro/arc/README.md +3 -0
- package/deploy/unraid/sanctuary.ouro/bundle-meta.json +5 -0
- package/deploy/unraid/sanctuary.ouro/habits/sanctuary-health.md +8 -0
- package/deploy/unraid/sanctuary.ouro/mcp/media-mcp.mjs +795 -0
- package/deploy/unraid/sanctuary.ouro/provider-readiness.json +11 -0
- package/deploy/unraid/sanctuary.ouro/psyche/ASPIRATIONS.md +5 -0
- package/deploy/unraid/sanctuary.ouro/psyche/IDENTITY.md +5 -0
- package/deploy/unraid/sanctuary.ouro/psyche/LORE.md +15 -0
- package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +25 -0
- package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +15 -0
- package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
- package/deploy/unraid/sanctuary.ouro/tool-profiles.json +135 -0
- package/deploy/unraid/sanctuary.xml +28 -0
- package/dist/a2a/card.js +57 -0
- package/dist/a2a/client.js +180 -0
- package/dist/a2a/config.js +50 -0
- package/dist/a2a/delegation-stores.js +56 -0
- package/dist/a2a/did-resolution.js +93 -0
- package/dist/a2a/identity.js +170 -0
- package/dist/a2a/inbound-share.js +107 -0
- package/dist/a2a/mission-result-wire.js +196 -0
- package/dist/a2a/onboarding.js +115 -0
- package/dist/a2a/pin-store.js +132 -0
- package/dist/a2a/seen-ledger.js +120 -0
- package/dist/a2a/server.js +604 -0
- package/dist/a2a/task-store.js +69 -0
- package/dist/a2a/transport.js +45 -0
- package/dist/a2a/types.js +3 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +360 -0
- package/dist/arc/episodes.js +118 -0
- package/dist/arc/evolution.js +490 -0
- package/dist/arc/flight-recorder.js +1034 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +386 -0
- package/dist/arc/packets.js +336 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/commerce/store.js +755 -0
- package/dist/commerce/types.js +3 -0
- package/dist/heart/active-work.js +798 -40
- package/dist/heart/agent-entry.js +252 -3
- package/dist/heart/approval-files.js +113 -0
- package/dist/heart/approval-store.js +960 -0
- 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 +18 -0
- package/dist/heart/attachments/sources/telegram.js +71 -0
- package/dist/heart/attachments/store.js +132 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +495 -0
- package/dist/heart/autonomy-budget.js +478 -0
- package/dist/heart/awaiting/await-alert.js +148 -0
- package/dist/heart/awaiting/await-expiry.js +143 -0
- package/dist/heart/awaiting/await-loader.js +91 -0
- package/dist/heart/awaiting/await-parser.js +149 -0
- package/dist/heart/awaiting/await-runtime-state.js +111 -0
- package/dist/heart/awaiting/await-scheduler.js +382 -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 +44 -18
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +174 -131
- package/dist/heart/context-loss-gauntlet.js +387 -0
- package/dist/heart/context-loss-sentinel.js +1157 -0
- package/dist/heart/core.js +2169 -581
- package/dist/heart/cross-chat-delivery.js +9 -22
- package/dist/heart/daemon/agent-config-check.js +451 -0
- package/dist/heart/daemon/agent-discovery.js +185 -3
- package/dist/heart/daemon/agent-service.js +542 -0
- package/dist/heart/daemon/agentic-repair.js +547 -0
- package/dist/heart/daemon/await-private-wake.js +59 -0
- package/dist/heart/daemon/bluebubbles-cli-integration.js +71 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/bluebubbles-host-protocol.js +433 -0
- package/dist/heart/daemon/bluebubbles-host.js +273 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +180 -0
- package/dist/heart/daemon/cli-defaults.js +854 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +8822 -0
- package/dist/heart/daemon/cli-help.js +716 -0
- package/dist/heart/daemon/cli-parse.js +2771 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +777 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/container-credential-bootstrap.js +273 -0
- package/dist/heart/daemon/container-healthcheck.js +112 -0
- package/dist/heart/daemon/container-runtime.js +97 -0
- package/dist/heart/daemon/container-spec-auditor-main.js +171 -0
- package/dist/heart/daemon/container-spec-auditor.js +229 -0
- package/dist/heart/daemon/daemon-bootstrap-startup.js +115 -0
- package/dist/heart/daemon/daemon-cli.js +29 -2349
- package/dist/heart/daemon/daemon-entry.js +930 -11
- package/dist/heart/daemon/daemon-health.js +186 -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 +2084 -105
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +1755 -0
- package/dist/heart/daemon/freshness.js +345 -0
- package/dist/heart/daemon/habit-private-wake.js +61 -0
- package/dist/heart/daemon/health-monitor.js +142 -11
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +78 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +79 -10
- package/dist/heart/daemon/logs-prune.js +132 -0
- package/dist/heart/daemon/mcp-canary.js +524 -0
- package/dist/heart/daemon/message-router.js +65 -5
- package/dist/heart/daemon/migrate-to-desk.js +848 -0
- package/dist/heart/daemon/os-cron-deps.js +135 -0
- package/dist/heart/daemon/os-cron.js +22 -14
- package/dist/heart/daemon/ouro-bot-entry.js +4 -2
- package/dist/heart/daemon/ouro-entry.js +3 -1
- package/dist/heart/daemon/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +733 -61
- package/dist/heart/daemon/provider-discovery.js +137 -0
- package/dist/heart/daemon/provider-ping-progress.js +83 -0
- package/dist/heart/daemon/prunable-bundle.js +144 -0
- package/dist/heart/daemon/pulse.js +511 -0
- package/dist/heart/daemon/readiness-repair.js +365 -0
- package/dist/heart/daemon/run-hooks.js +2 -0
- package/dist/heart/daemon/runtime-logging.js +47 -14
- package/dist/heart/daemon/runtime-metadata.js +2 -30
- package/dist/heart/daemon/runtime-mode.js +13 -2
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2654 -0
- package/dist/heart/daemon/sanctuary-acceptance-harness.js +1830 -0
- package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
- package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +955 -0
- package/dist/heart/daemon/sanctuary-authority-codec.js +86 -0
- package/dist/heart/daemon/sanctuary-authority-epoch.js +256 -0
- package/dist/heart/daemon/sanctuary-authority-installation.js +140 -0
- package/dist/heart/daemon/sanctuary-authority-ledger.js +241 -0
- package/dist/heart/daemon/sanctuary-authority-root-lifecycle.js +819 -0
- package/dist/heart/daemon/sanctuary-authority-vault-migration.js +79 -0
- package/dist/heart/daemon/sanctuary-bundle-migration.js +729 -0
- package/dist/heart/daemon/sanctuary-host-authority.js +1008 -0
- package/dist/heart/daemon/sanctuary-host-detached-supervisor.js +494 -0
- package/dist/heart/daemon/sanctuary-host-executor.js +670 -0
- package/dist/heart/daemon/sanctuary-host-linux-kernel.js +334 -0
- package/dist/heart/daemon/sanctuary-host-supervisor-entry.js +207 -0
- package/dist/heart/daemon/sanctuary-host-supervisor.js +95 -0
- package/dist/heart/daemon/sanctuary-package-management.js +103 -0
- package/dist/heart/daemon/sanctuary-scheduler-liveness.js +227 -0
- package/dist/heart/daemon/sanctuary-scheduler-origin.js +132 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-entry.js +445 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-gateway.js +585 -0
- package/dist/heart/daemon/sanctuary-telegram-authority-service.js +630 -0
- package/dist/heart/daemon/sense-manager.js +699 -48
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +1 -1
- package/dist/heart/daemon/socket-client.js +180 -12
- package/dist/heart/daemon/stale-bundle-prune.js +113 -0
- package/dist/heart/daemon/startup-tui.js +339 -0
- package/dist/heart/daemon/supercronic-supervisor.js +282 -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 +138 -54
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -4
- package/dist/heart/external-events/router.js +1430 -0
- package/dist/heart/frontend-approval-runtime.js +506 -0
- package/dist/heart/frontend-journal.js +215 -0
- package/dist/heart/frontend-session-service.js +237 -0
- package/dist/heart/frontend-socket-client.js +154 -0
- package/dist/heart/frontend-socket.js +400 -0
- package/dist/heart/habits/habit-cancel.js +810 -0
- package/dist/heart/habits/habit-lifecycle.js +1327 -0
- package/dist/heart/habits/habit-migration.js +194 -0
- package/dist/heart/habits/habit-parser.js +278 -0
- package/dist/heart/habits/habit-runtime-state.js +93 -0
- package/dist/heart/habits/habit-scheduler.js +653 -0
- package/dist/heart/habits/habit-session-summary.js +318 -0
- package/dist/heart/habits/habit-session.js +636 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +55 -62
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
- package/dist/heart/{daemon → hatch}/specialist-tools.js +53 -18
- package/dist/heart/identity.js +196 -59
- package/dist/heart/kept-notes.js +289 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +161 -0
- package/dist/heart/mail-import-discovery.js +356 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +98 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +398 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +129 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +39 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +197 -0
- package/dist/heart/mailbox/readers/agent-machine.js +428 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +329 -0
- package/dist/heart/mailbox/readers/mail.js +375 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +823 -0
- package/dist/heart/mailbox/readers/sessions.js +231 -0
- package/dist/heart/mailbox/readers/shared.js +111 -0
- package/dist/heart/mcp/mcp-server.js +696 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +11 -0
- package/dist/heart/orientation-frame.js +345 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/primitives.js +1 -1
- package/dist/heart/private-runtime/decision-renderer.js +158 -0
- package/dist/heart/private-runtime/index.js +18 -0
- package/dist/heart/private-runtime/ledger.js +221 -0
- package/dist/heart/private-runtime/policy.js +252 -0
- package/dist/heart/private-runtime/types.js +2 -0
- package/dist/heart/progress-story.js +1 -1
- package/dist/heart/provider-attempt.js +137 -0
- package/dist/heart/provider-binding-resolver.js +273 -0
- package/dist/heart/provider-credentials.js +449 -0
- package/dist/heart/provider-failover.js +311 -0
- package/dist/heart/provider-models.js +96 -0
- package/dist/heart/provider-ping.js +265 -0
- package/dist/heart/provider-readiness-cache.js +119 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +173 -60
- package/dist/heart/providers/azure.js +23 -11
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +34 -38
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +26 -8
- package/dist/heart/providers/openai-codex-token.js +349 -0
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/providers/openai-compatible.js +177 -0
- package/dist/heart/run-ledger.js +247 -0
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +607 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +22 -4
- package/dist/heart/session-activity.js +92 -24
- package/dist/heart/session-events.js +1504 -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-redaction-repair-cli-main.js +31 -0
- package/dist/heart/session-redaction-repair.js +552 -0
- package/dist/heart/session-stats-cli-main.js +5 -0
- package/dist/heart/session-stats.js +183 -0
- package/dist/heart/session-transcript.js +133 -0
- package/dist/heart/start-of-turn-packet.js +372 -0
- package/dist/heart/steward-policy.js +618 -0
- package/dist/heart/streaming.js +604 -207
- package/dist/heart/structured-output.js +196 -0
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync.js +449 -0
- package/dist/heart/target-resolution.js +11 -7
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/timeouts.js +101 -0
- package/dist/heart/tool-activity-callbacks.js +59 -0
- package/dist/heart/tool-approval.js +382 -0
- package/dist/heart/tool-description.js +155 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +482 -0
- package/dist/heart/turn-execution-lease.js +30 -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 +432 -0
- package/dist/heart/versioning/ouro-recovery-launcher.js +76 -0
- package/dist/heart/versioning/ouro-version-manager.js +409 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/versioning/update-hooks.js +154 -0
- package/dist/heart/versioning/version-intent.js +114 -0
- package/dist/heart/work-card.js +380 -0
- package/dist/mailbox-ui/assets/index-Cyv4mw3Y.js +1 -0
- package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
- package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
- package/dist/mailbox-ui/index.html +16 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +889 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/cache-sync-cli.js +58 -0
- package/dist/mailroom/core.js +803 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +568 -0
- package/dist/mailroom/hosted-cache-sync.js +384 -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 +292 -0
- package/dist/mailroom/search-cache.js +513 -0
- package/dist/mailroom/search-relevance.js +319 -0
- package/dist/mailroom/smtp-ingress.js +176 -0
- package/dist/mailroom/source-state.js +176 -0
- package/dist/mailroom/thread.js +109 -0
- package/dist/mailroom/travel-extract.js +89 -0
- package/dist/mind/bundle-manifest.js +24 -2
- package/dist/mind/context.js +309 -111
- package/dist/mind/desk-section.js +362 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +68 -77
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/{associative-recall.js → note-search.js} +47 -58
- package/dist/mind/obligation-steering.js +199 -3
- package/dist/mind/pending.js +36 -10
- package/dist/mind/prompt-budget.js +479 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1050 -189
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/record-paths.js +312 -0
- package/dist/mind/scrutiny.js +173 -0
- package/dist/mind/session-transaction.js +564 -0
- package/dist/nerves/cli-logging.js +7 -1
- package/dist/nerves/coverage/audit-rules.js +15 -6
- package/dist/nerves/coverage/audit.js +28 -2
- package/dist/nerves/coverage/cli.js +1 -1
- package/dist/nerves/coverage/contract.js +5 -5
- package/dist/nerves/coverage/file-completeness.js +139 -5
- package/dist/nerves/coverage/run-artifacts.js +55 -35
- package/dist/nerves/coverage/source-scanner.js +4 -4
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +293 -9
- 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 +159 -0
- package/dist/nerves/runtime.js +17 -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 +1045 -0
- package/dist/repertoire/bundle-templates.js +71 -0
- package/dist/repertoire/bw-installer.js +180 -0
- package/dist/repertoire/coding/codex-jsonl.js +64 -0
- package/dist/repertoire/coding/context-pack.js +331 -0
- package/dist/repertoire/coding/feedback.js +174 -32
- package/dist/repertoire/coding/index.js +15 -3
- package/dist/repertoire/coding/manager.js +159 -10
- package/dist/repertoire/coding/spawner.js +58 -11
- package/dist/repertoire/coding/tools.js +221 -15
- package/dist/repertoire/coding/workbench-client.js +272 -0
- package/dist/repertoire/coding/workbench-manager.js +346 -0
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +178 -0
- package/dist/repertoire/desk/classifier.js +362 -0
- package/dist/repertoire/duffel-client.js +185 -0
- package/dist/repertoire/github-client.js +14 -55
- package/dist/repertoire/graph-client.js +11 -52
- package/dist/repertoire/guardrails.js +811 -18
- package/dist/repertoire/mcp-client.js +44 -3
- package/dist/repertoire/mcp-manager.js +427 -139
- package/dist/repertoire/mcp-tools.js +124 -0
- package/dist/repertoire/plugin-mcp.js +175 -0
- package/dist/repertoire/plugins.js +253 -0
- package/dist/repertoire/relationship-authorization.js +322 -0
- package/dist/repertoire/shell-sessions.js +134 -0
- package/dist/repertoire/skills.js +48 -4
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-arguments.js +170 -0
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-a2a.js +699 -0
- package/dist/repertoire/tools-attachments.js +322 -0
- package/dist/repertoire/tools-awaiting.js +575 -0
- package/dist/repertoire/tools-base.js +77 -1138
- package/dist/repertoire/tools-bluebubbles.js +2 -0
- package/dist/repertoire/tools-bridge.js +144 -0
- package/dist/repertoire/tools-bundle.js +993 -0
- package/dist/repertoire/tools-commerce.js +253 -0
- package/dist/repertoire/tools-config.js +186 -0
- package/dist/repertoire/tools-continuity.js +575 -0
- package/dist/repertoire/tools-credential.js +383 -0
- package/dist/repertoire/tools-evolution.js +527 -0
- package/dist/repertoire/tools-files.js +344 -0
- package/dist/repertoire/tools-flight.js +290 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-github.js +3 -8
- package/dist/repertoire/tools-habits.js +103 -0
- package/dist/repertoire/tools-mail.js +1828 -0
- package/dist/repertoire/tools-notes.js +485 -0
- package/dist/repertoire/tools-obligations.js +182 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +482 -0
- package/dist/repertoire/tools-rsvp.js +139 -0
- package/dist/repertoire/tools-runtime.js +150 -0
- package/dist/repertoire/tools-sanctuary-host.js +202 -0
- package/dist/repertoire/tools-session.js +1133 -0
- package/dist/repertoire/tools-shell.js +149 -0
- package/dist/repertoire/tools-steward-policy.js +119 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +369 -0
- package/dist/repertoire/tools-teams.js +12 -39
- package/dist/repertoire/tools-telegram-contacts.js +37 -0
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +982 -0
- package/dist/repertoire/tools-unraid.js +531 -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 +494 -148
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/unraid-client.js +155 -0
- package/dist/repertoire/unraid-restart.js +339 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +628 -0
- package/dist/rsvp/aisleplanner-client.js +354 -0
- package/dist/rsvp/cli.js +926 -0
- package/dist/rsvp/config.js +327 -0
- package/dist/rsvp/cutover.js +433 -0
- package/dist/rsvp/diagnostics.js +232 -0
- package/dist/rsvp/diff-renderer.js +176 -0
- package/dist/rsvp/habit-policy.js +110 -0
- package/dist/rsvp/habit-stage.js +123 -0
- package/dist/rsvp/incident-bundle.js +97 -0
- package/dist/rsvp/migration.js +204 -0
- package/dist/rsvp/native-habit-runner.js +630 -0
- package/dist/rsvp/outbound-state.js +628 -0
- package/dist/rsvp/query.js +118 -0
- package/dist/rsvp/replay.js +233 -0
- package/dist/rsvp/snapshot.js +232 -0
- package/dist/rsvp/spend-ledger.js +175 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/a2a-entry.js +115 -0
- package/dist/senses/acp-server.js +386 -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} +355 -40
- package/dist/senses/bluebubbles/context-packet.js +207 -0
- package/dist/senses/bluebubbles/context-smoke.js +144 -0
- package/dist/senses/bluebubbles/entry.js +90 -0
- package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +21 -3
- package/dist/senses/bluebubbles/index.js +3841 -0
- package/dist/senses/bluebubbles/latest-turn.js +311 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +159 -28
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +24 -13
- package/dist/senses/bluebubbles/outbound-state.js +308 -0
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/reaction-policy.js +47 -0
- package/dist/senses/bluebubbles/replay.js +284 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- package/dist/senses/bluebubbles/webhook-registration.js +228 -0
- package/dist/senses/bluebubbles-meta-guard.js +39 -0
- package/dist/senses/cli/bracketed-paste.js +82 -0
- package/dist/senses/cli/image-paste.js +287 -0
- package/dist/senses/cli/image-ref-navigation.js +75 -0
- package/dist/senses/cli/ink-app.js +156 -0
- package/dist/senses/cli/inline-diff.js +64 -0
- package/dist/senses/cli/input-keys.js +174 -0
- package/dist/senses/cli/kill-ring.js +86 -0
- package/dist/senses/cli/message-list.js +51 -0
- package/dist/senses/cli/ouro-tui.js +607 -0
- package/dist/senses/cli/spinner-imperative.js +135 -0
- package/dist/senses/cli/spinner.js +101 -0
- package/dist/senses/cli/status-line.js +60 -0
- package/dist/senses/cli/streaming-markdown.js +526 -0
- package/dist/senses/cli/tool-display.js +85 -0
- package/dist/senses/cli/tool-render.js +85 -0
- package/dist/senses/cli/tui-store.js +241 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +60 -8
- package/dist/senses/cli.js +604 -320
- package/dist/senses/commands.js +66 -3
- package/dist/senses/context-packet-ledger.js +371 -0
- package/dist/senses/context-packets.js +154 -0
- package/dist/senses/habit-lifecycle-guard.js +24 -0
- package/dist/senses/habit-turn-message.js +160 -0
- package/dist/senses/ingress-evidence.js +2 -0
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +524 -0
- package/dist/senses/pipeline.js +1115 -204
- package/dist/senses/private-runtime-worker.js +859 -0
- package/dist/senses/private-runtime.js +1517 -0
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/root-host-approval-port.js +345 -0
- package/dist/senses/root-host-approval-runtime.js +393 -0
- package/dist/senses/sanctuary-authority-resident.js +102 -0
- package/dist/senses/sanctuary-download-credit-presentation.js +31 -0
- package/dist/senses/sanctuary-full-visibility-contract.js +302 -0
- package/dist/senses/sanctuary-grounding.js +118 -0
- package/dist/senses/sanctuary-health-acceptance-probe-entry.js +12 -0
- package/dist/senses/sanctuary-health-acceptance-probe.js +774 -0
- package/dist/senses/sanctuary-health-runner.js +100 -0
- package/dist/senses/sanctuary-health.js +408 -0
- package/dist/senses/sanctuary-install-state-contract.js +126 -0
- package/dist/senses/sanctuary-interactive-control.js +410 -0
- package/dist/senses/sanctuary-media-catalog-contract.js +297 -0
- package/dist/senses/sanctuary-media-optimization.js +514 -0
- package/dist/senses/sanctuary-runtime.js +340 -0
- package/dist/senses/sanctuary-sab.js +85 -0
- package/dist/senses/sanctuary-storage-optimization-contract.js +32 -0
- package/dist/senses/shared-turn.js +772 -0
- package/dist/senses/surface-tool.js +109 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +519 -218
- package/dist/senses/telegram-admission.js +718 -0
- package/dist/senses/telegram-approval-runtime.js +793 -0
- package/dist/senses/telegram-attachments.js +186 -0
- package/dist/senses/telegram-audit-ledger.js +220 -0
- package/dist/senses/telegram-authority-transport.js +231 -0
- package/dist/senses/telegram-client.js +1717 -0
- package/dist/senses/telegram-effect-adapter.js +896 -0
- package/dist/senses/telegram-entry.js +83 -0
- package/dist/senses/telegram.js +2324 -0
- package/dist/senses/trust-gate.js +104 -9
- package/dist/senses/voice/audio-playback.js +237 -0
- package/dist/senses/voice/audio-routing.js +119 -0
- package/dist/senses/voice/elevenlabs.js +202 -0
- package/dist/senses/voice/floor-control.js +431 -0
- package/dist/senses/voice/floor-controller.js +115 -0
- package/dist/senses/voice/golden-path.js +116 -0
- package/dist/senses/voice/index.js +29 -0
- package/dist/senses/voice/meeting.js +113 -0
- package/dist/senses/voice/outbound.js +190 -0
- package/dist/senses/voice/phone.js +33 -0
- package/dist/senses/voice/playback.js +139 -0
- package/dist/senses/voice/realtime-eval.js +496 -0
- package/dist/senses/voice/realtime-trace.js +531 -0
- package/dist/senses/voice/transcript.js +70 -0
- package/dist/senses/voice/turn.js +191 -0
- package/dist/senses/voice/twilio-phone-runtime.js +807 -0
- package/dist/senses/voice/twilio-phone.js +5031 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +81 -0
- package/dist/senses/voice-realtime-eval-command.js +99 -0
- package/dist/senses/voice-realtime-eval-entry.js +21 -0
- package/dist/senses/voice-twilio-entry.js +87 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +265 -0
- package/dist/util/frontmatter.js +69 -0
- package/npm-shrinkwrap.json +8138 -0
- package/package.json +72 -13
- package/skills/agent-commerce.md +113 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +99 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/auth-flow.js +0 -430
- package/dist/heart/daemon/ouro-path-installer.js +0 -260
- package/dist/heart/daemon/ouro-version-manager.js +0 -171
- package/dist/heart/daemon/update-hooks.js +0 -138
- package/dist/heart/obligations.js +0 -191
- package/dist/heart/safe-workspace.js +0 -228
- package/dist/heart/session-recall.js +0 -116
- package/dist/mind/friends/channel.js +0 -84
- package/dist/mind/friends/group-context.js +0 -144
- package/dist/mind/friends/resolver.js +0 -84
- package/dist/mind/friends/store-file.js +0 -190
- package/dist/mind/friends/store.js +0 -4
- package/dist/mind/friends/tokens.js +0 -26
- package/dist/mind/friends/trust-explanation.js +0 -74
- package/dist/mind/friends/types.js +0 -29
- package/dist/repertoire/tasks/board.js +0 -134
- package/dist/repertoire/tasks/index.js +0 -224
- package/dist/repertoire/tasks/lifecycle.js +0 -80
- package/dist/repertoire/tasks/middleware.js +0 -65
- package/dist/repertoire/tasks/parser.js +0 -173
- package/dist/repertoire/tasks/scanner.js +0 -132
- package/dist/repertoire/tasks/transitions.js +0 -144
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1181
- package/dist/senses/debug-activity.js +0 -154
- package/dist/senses/inner-dialog-worker.js +0 -90
- package/dist/senses/inner-dialog.js +0 -525
- 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
|
@@ -33,11 +33,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.buildCodingPrompt = buildCodingPrompt;
|
|
36
37
|
exports.spawnCodingProcess = spawnCodingProcess;
|
|
37
38
|
const child_process_1 = require("child_process");
|
|
38
39
|
const fs = __importStar(require("fs"));
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
39
42
|
const runtime_1 = require("../../nerves/runtime");
|
|
40
|
-
function buildCommandArgs(runner, workdir) {
|
|
43
|
+
function buildCommandArgs(runner, workdir, parentAgent) {
|
|
41
44
|
if (runner === "claude") {
|
|
42
45
|
return {
|
|
43
46
|
command: "claude",
|
|
@@ -53,25 +56,65 @@ function buildCommandArgs(runner, workdir) {
|
|
|
53
56
|
],
|
|
54
57
|
};
|
|
55
58
|
}
|
|
59
|
+
const agent = parentAgent ?? "unknown";
|
|
60
|
+
// Use absolute path to ouro-entry.js so MCP works in both dev and installed mode
|
|
61
|
+
// __dirname at runtime is dist/repertoire/coding/ — go up 2 levels to dist/
|
|
62
|
+
const distRoot = path.resolve(__dirname, "..", "..");
|
|
63
|
+
const ouroEntryPath = path.join(distRoot, "heart", "daemon", "ouro-entry.js");
|
|
56
64
|
return {
|
|
57
65
|
command: "codex",
|
|
58
|
-
args: [
|
|
66
|
+
args: [
|
|
67
|
+
"exec",
|
|
68
|
+
"--skip-git-repo-check",
|
|
69
|
+
"--cd",
|
|
70
|
+
workdir,
|
|
71
|
+
"--ephemeral",
|
|
72
|
+
"--json",
|
|
73
|
+
"-c",
|
|
74
|
+
`mcp_servers.ouro.command=node`,
|
|
75
|
+
"-c",
|
|
76
|
+
`mcp_servers.ouro.args=["${ouroEntryPath}","mcp-serve","--agent","${agent}"]`,
|
|
77
|
+
],
|
|
59
78
|
};
|
|
60
79
|
}
|
|
61
|
-
function
|
|
80
|
+
function buildSpawnEnv(baseEnv, homeDir) {
|
|
81
|
+
const binDir = path.join(homeDir, ".ouro-cli", "bin");
|
|
82
|
+
const existingPath = baseEnv.PATH ?? "";
|
|
83
|
+
const pathEntries = existingPath.split(path.delimiter).filter((entry) => entry.length > 0);
|
|
84
|
+
if (!pathEntries.includes(binDir)) {
|
|
85
|
+
pathEntries.unshift(binDir);
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
...baseEnv,
|
|
89
|
+
PATH: pathEntries.join(path.delimiter),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function appendFileSection(sections, label, filePath, deps) {
|
|
93
|
+
if (!filePath || !deps.existsSync(filePath))
|
|
94
|
+
return;
|
|
95
|
+
const content = deps.readFileSync(filePath, "utf-8").trim();
|
|
96
|
+
if (content.length === 0)
|
|
97
|
+
return;
|
|
98
|
+
sections.push(`${label} (${filePath}):\n${content}`);
|
|
99
|
+
}
|
|
100
|
+
function buildCodingPrompt(request, deps) {
|
|
62
101
|
const sections = [];
|
|
102
|
+
sections.push([
|
|
103
|
+
"Execution contract:",
|
|
104
|
+
"- You are a subordinate coding session launched by a parent Ouro agent.",
|
|
105
|
+
"- Execute the concrete request in the supplied workdir directly.",
|
|
106
|
+
"- Do not switch into planning/doing workflows, approval gates, or repo-management rituals unless the request explicitly asks for them.",
|
|
107
|
+
"- Treat the request, scope file, and state file as the authoritative briefing for this session.",
|
|
108
|
+
"- Prefer direct execution and verification over narration.",
|
|
109
|
+
].join("\n"));
|
|
63
110
|
sections.push([
|
|
64
111
|
"Coding session metadata:",
|
|
65
112
|
`sessionId: ${request.sessionId ?? "pending"}`,
|
|
66
113
|
`parentAgent: ${request.parentAgent ?? "unknown"}`,
|
|
67
114
|
`taskRef: ${request.taskRef ?? "unassigned"}`,
|
|
68
115
|
].join("\n"));
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (stateContent.length > 0) {
|
|
72
|
-
sections.push(`State file (${request.stateFile}):\n${stateContent}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
116
|
+
appendFileSection(sections, "Scope file", request.scopeFile, deps);
|
|
117
|
+
appendFileSection(sections, "State file", request.stateFile, deps);
|
|
75
118
|
sections.push(request.prompt);
|
|
76
119
|
return sections.join("\n\n---\n\n");
|
|
77
120
|
}
|
|
@@ -79,8 +122,11 @@ function spawnCodingProcess(request, deps = {}) {
|
|
|
79
122
|
const spawnFn = deps.spawnFn ?? ((command, args, options) => (0, child_process_1.spawn)(command, args, options));
|
|
80
123
|
const existsSync = deps.existsSync ?? fs.existsSync;
|
|
81
124
|
const readFileSync = deps.readFileSync ?? fs.readFileSync;
|
|
82
|
-
const
|
|
83
|
-
const
|
|
125
|
+
const homeDir = deps.homeDir ?? os.homedir();
|
|
126
|
+
const baseEnv = deps.baseEnv ?? process.env;
|
|
127
|
+
const prompt = buildCodingPrompt(request, { existsSync, readFileSync });
|
|
128
|
+
const { command, args } = buildCommandArgs(request.runner, request.workdir, request.parentAgent);
|
|
129
|
+
const env = buildSpawnEnv(baseEnv, homeDir);
|
|
84
130
|
(0, runtime_1.emitNervesEvent)({
|
|
85
131
|
component: "repertoire",
|
|
86
132
|
event: "repertoire.coding_spawn_start",
|
|
@@ -89,6 +135,7 @@ function spawnCodingProcess(request, deps = {}) {
|
|
|
89
135
|
});
|
|
90
136
|
const proc = spawnFn(command, args, {
|
|
91
137
|
cwd: request.workdir,
|
|
138
|
+
env,
|
|
92
139
|
stdio: ["pipe", "pipe", "pipe"],
|
|
93
140
|
});
|
|
94
141
|
proc.stdin.end(`${prompt}\n`);
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.codingToolDefinitions = void 0;
|
|
4
|
+
exports.countFilesInSessionOutput = countFilesInSessionOutput;
|
|
4
5
|
const index_1 = require("./index");
|
|
6
|
+
const context_pack_1 = require("./context-pack");
|
|
5
7
|
const identity_1 = require("../../heart/identity");
|
|
6
|
-
const obligations_1 = require("../../
|
|
8
|
+
const obligations_1 = require("../../arc/obligations");
|
|
9
|
+
const evolution_1 = require("../../arc/evolution");
|
|
7
10
|
const runtime_1 = require("../../nerves/runtime");
|
|
11
|
+
const scrutiny_1 = require("../../mind/scrutiny");
|
|
8
12
|
const RUNNERS = ["claude", "codex"];
|
|
9
13
|
function requireArg(args, key) {
|
|
10
14
|
const value = args[key];
|
|
@@ -31,11 +35,152 @@ function emitCodingToolEvent(toolName) {
|
|
|
31
35
|
meta: { toolName },
|
|
32
36
|
});
|
|
33
37
|
}
|
|
38
|
+
function isRefreshableCodingSessionManager(manager) {
|
|
39
|
+
return typeof manager.refreshSessions === "function"
|
|
40
|
+
&& typeof manager.refreshSession === "function";
|
|
41
|
+
}
|
|
42
|
+
async function listCodingSessions(manager) {
|
|
43
|
+
return isRefreshableCodingSessionManager(manager) ? manager.refreshSessions() : manager.listSessions();
|
|
44
|
+
}
|
|
45
|
+
async function getCodingSession(manager, sessionId) {
|
|
46
|
+
return isRefreshableCodingSessionManager(manager) ? manager.refreshSession(sessionId) : manager.getSession(sessionId);
|
|
47
|
+
}
|
|
48
|
+
async function sendCodingInput(manager, sessionId, input) {
|
|
49
|
+
return manager.sendInput(sessionId, input);
|
|
50
|
+
}
|
|
51
|
+
async function killCodingSession(manager, sessionId) {
|
|
52
|
+
return manager.killSession(sessionId);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Count distinct file paths mentioned in a coding session's stdout output.
|
|
56
|
+
* Looks for path-like tokens (containing / and a file extension).
|
|
57
|
+
* Returns the count of unique paths found.
|
|
58
|
+
*/
|
|
59
|
+
function countFilesInSessionOutput(session) {
|
|
60
|
+
const text = `${session.stdoutTail}\n${session.stderrTail}`;
|
|
61
|
+
// Match path-like tokens: contain at least one / and a file extension
|
|
62
|
+
const pathPattern = /(?:^|\s)((?:\/|\.\/|\.\.\/)?(?:[\w.@-]+\/)+[\w.-]+\.[\w]+)/gm;
|
|
63
|
+
const paths = new Set();
|
|
64
|
+
let match;
|
|
65
|
+
while ((match = pathPattern.exec(text)) !== null) {
|
|
66
|
+
paths.add(match[1]);
|
|
67
|
+
}
|
|
68
|
+
return paths.size;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* If a coding session is completed, append scrutiny to the result.
|
|
72
|
+
* Returns the original result with scrutiny appended, or unchanged if
|
|
73
|
+
* the session is not completed or has no file changes.
|
|
74
|
+
*/
|
|
75
|
+
function appendCompletionScrutiny(result, session) {
|
|
76
|
+
if (session.status !== "completed")
|
|
77
|
+
return result;
|
|
78
|
+
const fileCount = countFilesInSessionOutput(session);
|
|
79
|
+
const scrutiny = (0, scrutiny_1.getCodingCompletionScrutiny)(fileCount);
|
|
80
|
+
return scrutiny ? `${result}\n\n${scrutiny}` : result;
|
|
81
|
+
}
|
|
82
|
+
function sameOriginSession(left, right) {
|
|
83
|
+
if (!left && !right)
|
|
84
|
+
return true;
|
|
85
|
+
if (!left || !right)
|
|
86
|
+
return false;
|
|
87
|
+
return left.friendId === right.friendId && left.channel === right.channel && left.key === right.key;
|
|
88
|
+
}
|
|
89
|
+
function matchesReusableCodingSession(session, request) {
|
|
90
|
+
if (session.status !== "spawning" && session.status !== "running" && session.status !== "waiting_input" && session.status !== "stalled") {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
const scopeMatches = request.scopeFile ? session.scopeFile === request.scopeFile : true;
|
|
94
|
+
const stateMatches = request.stateFile ? session.stateFile === request.stateFile : true;
|
|
95
|
+
const evolutionCaseMatches = request.evolutionCaseId ? session.evolutionCaseId === request.evolutionCaseId : true;
|
|
96
|
+
return (session.runner === request.runner &&
|
|
97
|
+
session.workdir === request.workdir &&
|
|
98
|
+
session.taskRef === request.taskRef &&
|
|
99
|
+
scopeMatches &&
|
|
100
|
+
stateMatches &&
|
|
101
|
+
evolutionCaseMatches &&
|
|
102
|
+
session.obligationId === request.obligationId &&
|
|
103
|
+
sameOriginSession(request.originSession, session.originSession));
|
|
104
|
+
}
|
|
105
|
+
function latestSessionFirst(left, right) {
|
|
106
|
+
const lastActivityDelta = Date.parse(right.lastActivityAt) - Date.parse(left.lastActivityAt);
|
|
107
|
+
if (lastActivityDelta !== 0)
|
|
108
|
+
return lastActivityDelta;
|
|
109
|
+
return right.id.localeCompare(left.id);
|
|
110
|
+
}
|
|
111
|
+
function findReusableCodingSession(sessions, request) {
|
|
112
|
+
const matches = sessions.filter((session) => matchesReusableCodingSession(session, request)).sort(latestSessionFirst);
|
|
113
|
+
return matches[0] ?? null;
|
|
114
|
+
}
|
|
115
|
+
function isLiveCodingStatus(status) {
|
|
116
|
+
return status === "spawning" || status === "running" || status === "waiting_input" || status === "stalled";
|
|
117
|
+
}
|
|
118
|
+
function rankCodingStatusSession(session, currentSession) {
|
|
119
|
+
return sameOriginSession({
|
|
120
|
+
friendId: currentSession.friendId,
|
|
121
|
+
channel: currentSession.channel,
|
|
122
|
+
key: currentSession.key,
|
|
123
|
+
}, session.originSession)
|
|
124
|
+
? 0
|
|
125
|
+
: 1;
|
|
126
|
+
}
|
|
127
|
+
function selectCodingStatusSessions(sessions, currentSession) {
|
|
128
|
+
if (sessions.length === 0)
|
|
129
|
+
return [];
|
|
130
|
+
if (!currentSession) {
|
|
131
|
+
return sessions;
|
|
132
|
+
}
|
|
133
|
+
const activeSessions = sessions.filter((session) => isLiveCodingStatus(session.status)).sort(latestSessionFirst);
|
|
134
|
+
if (activeSessions.length > 0) {
|
|
135
|
+
return activeSessions.sort((left, right) => {
|
|
136
|
+
const rankDelta = rankCodingStatusSession(left, currentSession) - rankCodingStatusSession(right, currentSession);
|
|
137
|
+
if (rankDelta !== 0)
|
|
138
|
+
return rankDelta;
|
|
139
|
+
return latestSessionFirst(left, right);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const matchingClosedSessions = sessions
|
|
143
|
+
.filter((session) => sameOriginSession({
|
|
144
|
+
friendId: currentSession.friendId,
|
|
145
|
+
channel: currentSession.channel,
|
|
146
|
+
key: currentSession.key,
|
|
147
|
+
}, session.originSession))
|
|
148
|
+
.sort(latestSessionFirst);
|
|
149
|
+
if (matchingClosedSessions.length > 0) {
|
|
150
|
+
return matchingClosedSessions;
|
|
151
|
+
}
|
|
152
|
+
return [...sessions].sort(latestSessionFirst);
|
|
153
|
+
}
|
|
154
|
+
function buildCodingObligationContent(taskRef) {
|
|
155
|
+
return `finish ${taskRef} and bring the result back`;
|
|
156
|
+
}
|
|
157
|
+
function blockedEvolutionSpawnResult(evolutionCaseId, decision) {
|
|
158
|
+
return JSON.stringify({
|
|
159
|
+
ok: false,
|
|
160
|
+
blocked: true,
|
|
161
|
+
action: "spawn_coding",
|
|
162
|
+
evolutionCaseId,
|
|
163
|
+
code: decision.code,
|
|
164
|
+
reason: decision.reason,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
function recordBlockedEvolutionSpawn(agentRoot, evolutionCaseId, decision) {
|
|
168
|
+
if (decision.code === "case_not_found")
|
|
169
|
+
return;
|
|
170
|
+
try {
|
|
171
|
+
(0, evolution_1.consumeEvolutionBudget)(agentRoot, evolutionCaseId, "spawn_coding", {
|
|
172
|
+
reason: `coding_spawn blocked: ${decision.reason}`,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// consumeEvolutionBudget records the block before throwing.
|
|
177
|
+
}
|
|
178
|
+
}
|
|
34
179
|
const codingSpawnTool = {
|
|
35
180
|
type: "function",
|
|
36
181
|
function: {
|
|
37
182
|
name: "coding_spawn",
|
|
38
|
-
description: "
|
|
183
|
+
description: "Spawn a coding session using claude or codex with task-threaded guidance. The coding session runs as a separate process with its own context. Give it a COMPLETE, SELF-CONTAINED task description -- it cannot see this conversation, doesn't know what you've tried, doesn't understand the broader context. Include: what to do, why, what files are involved, what 'done' looks like. Never delegate understanding -- don't write 'based on the conversation, fix the bug.' Write the specific file paths, line numbers, and what to change. Include any required verification steps or tests in the task description so the coding session knows how to prove the work is done.",
|
|
39
184
|
parameters: {
|
|
40
185
|
type: "object",
|
|
41
186
|
properties: {
|
|
@@ -45,6 +190,7 @@ const codingSpawnTool = {
|
|
|
45
190
|
taskRef: { type: "string" },
|
|
46
191
|
scopeFile: { type: "string" },
|
|
47
192
|
stateFile: { type: "string" },
|
|
193
|
+
evolutionCaseId: { type: "string" },
|
|
48
194
|
},
|
|
49
195
|
required: ["runner", "workdir", "prompt", "taskRef"],
|
|
50
196
|
},
|
|
@@ -54,7 +200,7 @@ const codingStatusTool = {
|
|
|
54
200
|
type: "function",
|
|
55
201
|
function: {
|
|
56
202
|
name: "coding_status",
|
|
57
|
-
description: "
|
|
203
|
+
description: "Inspect coding sessions. Omit sessionId to list all active/known sessions with their status. Use this to check progress before asking the human for a status update.",
|
|
58
204
|
parameters: {
|
|
59
205
|
type: "object",
|
|
60
206
|
properties: {
|
|
@@ -67,7 +213,7 @@ const codingTailTool = {
|
|
|
67
213
|
type: "function",
|
|
68
214
|
function: {
|
|
69
215
|
name: "coding_tail",
|
|
70
|
-
description: "
|
|
216
|
+
description: "Show recent stdout/stderr output from a coding session. Use this to understand what the session is doing or why it might be stuck. Read the actual output before reporting status -- don't guess.",
|
|
71
217
|
parameters: {
|
|
72
218
|
type: "object",
|
|
73
219
|
properties: {
|
|
@@ -132,6 +278,9 @@ exports.codingToolDefinitions = [
|
|
|
132
278
|
prompt,
|
|
133
279
|
taskRef,
|
|
134
280
|
};
|
|
281
|
+
const evolutionCaseId = optionalArg(args, "evolutionCaseId");
|
|
282
|
+
if (evolutionCaseId)
|
|
283
|
+
request.evolutionCaseId = evolutionCaseId;
|
|
135
284
|
if (ctx?.currentSession && ctx.currentSession.channel !== "inner") {
|
|
136
285
|
request.originSession = {
|
|
137
286
|
friendId: ctx.currentSession.friendId,
|
|
@@ -150,7 +299,52 @@ exports.codingToolDefinitions = [
|
|
|
150
299
|
if (stateFile)
|
|
151
300
|
request.stateFile = stateFile;
|
|
152
301
|
const manager = (0, index_1.getCodingSessionManager)();
|
|
302
|
+
const existingSessions = await listCodingSessions(manager);
|
|
303
|
+
const existingSession = findReusableCodingSession(existingSessions, request);
|
|
304
|
+
if (existingSession) {
|
|
305
|
+
(0, runtime_1.emitNervesEvent)({
|
|
306
|
+
component: "repertoire",
|
|
307
|
+
event: "repertoire.coding_session_reused",
|
|
308
|
+
message: "reused active coding session",
|
|
309
|
+
meta: { id: existingSession.id, runner: existingSession.runner, taskRef: existingSession.taskRef },
|
|
310
|
+
});
|
|
311
|
+
if (ctx?.codingFeedback) {
|
|
312
|
+
(0, index_1.attachCodingSessionFeedback)(manager, existingSession, ctx.codingFeedback);
|
|
313
|
+
}
|
|
314
|
+
return JSON.stringify({ ...existingSession, reused: true });
|
|
315
|
+
}
|
|
316
|
+
if (request.evolutionCaseId) {
|
|
317
|
+
const decision = (0, evolution_1.evaluateEvolutionAction)((0, identity_1.getAgentRoot)(), request.evolutionCaseId, "spawn_coding");
|
|
318
|
+
if (!decision.allowed) {
|
|
319
|
+
recordBlockedEvolutionSpawn((0, identity_1.getAgentRoot)(), request.evolutionCaseId, decision);
|
|
320
|
+
return blockedEvolutionSpawnResult(request.evolutionCaseId, decision);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (request.originSession && !request.obligationId) {
|
|
324
|
+
const created = (0, obligations_1.createObligation)((0, identity_1.getAgentRoot)(), {
|
|
325
|
+
origin: request.originSession,
|
|
326
|
+
content: buildCodingObligationContent(taskRef),
|
|
327
|
+
});
|
|
328
|
+
request.obligationId = created.id;
|
|
329
|
+
}
|
|
330
|
+
if (!request.scopeFile || !request.stateFile) {
|
|
331
|
+
const generated = (0, context_pack_1.prepareCodingContextPack)({
|
|
332
|
+
request: { ...request },
|
|
333
|
+
existingSessions,
|
|
334
|
+
activeWorkFrame: ctx?.activeWorkFrame,
|
|
335
|
+
});
|
|
336
|
+
if (!request.scopeFile)
|
|
337
|
+
request.scopeFile = generated.scopeFile;
|
|
338
|
+
if (!request.stateFile)
|
|
339
|
+
request.stateFile = generated.stateFile;
|
|
340
|
+
}
|
|
153
341
|
const session = await manager.spawnSession(request);
|
|
342
|
+
if (request.evolutionCaseId) {
|
|
343
|
+
(0, evolution_1.consumeEvolutionBudget)((0, identity_1.getAgentRoot)(), request.evolutionCaseId, "spawn_coding", {
|
|
344
|
+
target: session.id,
|
|
345
|
+
reason: `coding session ${session.id} spawned`,
|
|
346
|
+
});
|
|
347
|
+
}
|
|
154
348
|
if (session.obligationId) {
|
|
155
349
|
(0, obligations_1.advanceObligation)((0, identity_1.getAgentRoot)(), session.obligationId, {
|
|
156
350
|
status: "investigating",
|
|
@@ -173,38 +367,46 @@ exports.codingToolDefinitions = [
|
|
|
173
367
|
}
|
|
174
368
|
return JSON.stringify(session);
|
|
175
369
|
},
|
|
370
|
+
summaryKeys: ["runner", "workdir", "taskRef"],
|
|
371
|
+
riskProfile: {
|
|
372
|
+
mutates: ["durable_state_write", "external_side_effect"],
|
|
373
|
+
risk: "high",
|
|
374
|
+
reason: "spawns a separate coding process and may create obligations",
|
|
375
|
+
},
|
|
176
376
|
},
|
|
177
377
|
{
|
|
178
378
|
tool: codingStatusTool,
|
|
179
|
-
handler: (args) => {
|
|
379
|
+
handler: async (args, ctx) => {
|
|
180
380
|
emitCodingToolEvent("coding_status");
|
|
181
381
|
const manager = (0, index_1.getCodingSessionManager)();
|
|
182
382
|
const sessionId = requireArg(args, "sessionId");
|
|
183
383
|
if (!sessionId) {
|
|
184
|
-
return JSON.stringify(manager
|
|
384
|
+
return JSON.stringify(selectCodingStatusSessions(await listCodingSessions(manager), ctx?.currentSession));
|
|
185
385
|
}
|
|
186
|
-
const session = manager
|
|
386
|
+
const session = await getCodingSession(manager, sessionId);
|
|
187
387
|
if (!session)
|
|
188
388
|
return `session not found: ${sessionId}`;
|
|
189
|
-
return JSON.stringify(session);
|
|
389
|
+
return appendCompletionScrutiny(JSON.stringify(session), session);
|
|
190
390
|
},
|
|
391
|
+
summaryKeys: ["sessionId"],
|
|
191
392
|
},
|
|
192
393
|
{
|
|
193
394
|
tool: codingTailTool,
|
|
194
|
-
handler: (args) => {
|
|
395
|
+
handler: async (args) => {
|
|
195
396
|
emitCodingToolEvent("coding_tail");
|
|
196
397
|
const sessionId = requireArg(args, "sessionId");
|
|
197
398
|
if (!sessionId)
|
|
198
399
|
return "sessionId is required";
|
|
199
|
-
const session = (0, index_1.getCodingSessionManager)()
|
|
400
|
+
const session = await getCodingSession((0, index_1.getCodingSessionManager)(), sessionId);
|
|
200
401
|
if (!session)
|
|
201
402
|
return `session not found: ${sessionId}`;
|
|
202
|
-
return (0, index_1.formatCodingTail)(session);
|
|
403
|
+
return appendCompletionScrutiny((0, index_1.formatCodingTail)(session), session);
|
|
203
404
|
},
|
|
405
|
+
summaryKeys: ["sessionId"],
|
|
204
406
|
},
|
|
205
407
|
{
|
|
206
408
|
tool: codingSendInputTool,
|
|
207
|
-
handler: (args) => {
|
|
409
|
+
handler: async (args) => {
|
|
208
410
|
emitCodingToolEvent("coding_send_input");
|
|
209
411
|
const sessionId = requireArg(args, "sessionId");
|
|
210
412
|
if (!sessionId)
|
|
@@ -212,17 +414,21 @@ exports.codingToolDefinitions = [
|
|
|
212
414
|
const input = requireArg(args, "input");
|
|
213
415
|
if (!input)
|
|
214
416
|
return "input is required";
|
|
215
|
-
return JSON.stringify((0, index_1.getCodingSessionManager)()
|
|
417
|
+
return JSON.stringify(await sendCodingInput((0, index_1.getCodingSessionManager)(), sessionId, input));
|
|
216
418
|
},
|
|
419
|
+
summaryKeys: ["sessionId", "input"],
|
|
420
|
+
riskProfile: { mutates: "external_side_effect", risk: "high", reason: "sends input to a live coding process" },
|
|
217
421
|
},
|
|
218
422
|
{
|
|
219
423
|
tool: codingKillTool,
|
|
220
|
-
handler: (args) => {
|
|
424
|
+
handler: async (args) => {
|
|
221
425
|
emitCodingToolEvent("coding_kill");
|
|
222
426
|
const sessionId = requireArg(args, "sessionId");
|
|
223
427
|
if (!sessionId)
|
|
224
428
|
return "sessionId is required";
|
|
225
|
-
return JSON.stringify((0, index_1.getCodingSessionManager)()
|
|
429
|
+
return JSON.stringify(await killCodingSession((0, index_1.getCodingSessionManager)(), sessionId));
|
|
226
430
|
},
|
|
431
|
+
summaryKeys: ["sessionId"],
|
|
432
|
+
riskProfile: { mutates: "external_side_effect", risk: "high", reason: "terminates a live coding process" },
|
|
227
433
|
},
|
|
228
434
|
];
|