@ouro.bot/cli 0.1.0-alpha.8 → 0.1.0-alpha.800
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 +249 -176
- 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/SerpentGuide.ouro/agent.json +83 -0
- package/SerpentGuide.ouro/psyche/SOUL.md +25 -0
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +2 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
- package/assets/bluebubbles-host +264 -0
- package/assets/ouroboros.png +0 -0
- package/changelog.json +5563 -0
- package/deploy/unraid/Dockerfile +48 -0
- package/deploy/unraid/README.txt +3012 -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 +526 -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-deployment-target.mjs +709 -0
- package/deploy/unraid/sanctuary-safe-rename.py +24 -0
- package/deploy/unraid/sanctuary-unit16-host-broker.mjs +2030 -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 +24 -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/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 +11 -0
- package/deploy/unraid/sanctuary.ouro/psyche/SOUL.md +25 -0
- package/deploy/unraid/sanctuary.ouro/psyche/TACIT.md +11 -0
- package/deploy/unraid/sanctuary.ouro/state/policy/steward.json +7 -0
- package/deploy/unraid/sanctuary.ouro/tool-profiles.json +23 -0
- package/deploy/unraid/sanctuary.xml +27 -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 +1009 -0
- package/dist/heart/agent-entry.js +252 -3
- package/dist/heart/approval-files.js +113 -0
- package/dist/heart/approval-store.js +950 -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 +100 -0
- package/dist/heart/awaiting/await-scheduler.js +382 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bridges/manager.js +478 -0
- package/dist/heart/bridges/state-machine.js +135 -0
- package/dist/heart/bridges/store.js +135 -0
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +135 -0
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +195 -137
- package/dist/heart/context-loss-gauntlet.js +387 -0
- package/dist/heart/context-loss-sentinel.js +1157 -0
- package/dist/heart/core.js +2257 -338
- package/dist/heart/cross-chat-delivery.js +133 -0
- package/dist/heart/daemon/agent-config-check.js +451 -0
- package/dist/heart/daemon/agent-discovery.js +263 -0
- 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 +836 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +8730 -0
- package/dist/heart/daemon/cli-help.js +710 -0
- package/dist/heart/daemon/cli-parse.js +2719 -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 +170 -0
- package/dist/heart/daemon/container-spec-auditor.js +236 -0
- package/dist/heart/daemon/daemon-bootstrap-startup.js +107 -0
- package/dist/heart/daemon/daemon-cli.js +30 -786
- package/dist/heart/daemon/daemon-entry.js +971 -13
- 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 +287 -0
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +2156 -28
- 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 +226 -0
- 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 +188 -0
- package/dist/heart/daemon/log-tailer.js +82 -12
- 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 +80 -11
- 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 +739 -54
- 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 +39 -0
- package/dist/heart/daemon/runtime-logging.js +92 -16
- package/dist/heart/daemon/runtime-metadata.js +191 -0
- package/dist/{repertoire/tasks/lifecycle.js → heart/daemon/runtime-mode.js} +37 -39
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sanctuary-acceptance-adapter.js +2609 -0
- package/dist/heart/daemon/sanctuary-acceptance-harness.js +1866 -0
- package/dist/heart/daemon/sanctuary-acceptance-marker.js +267 -0
- package/dist/heart/daemon/sanctuary-acceptance-scenarios.js +976 -0
- package/dist/heart/daemon/sanctuary-bundle-migration.js +728 -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/sense-manager.js +948 -0
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +94 -0
- package/dist/heart/daemon/socket-client.js +370 -0
- 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 +591 -0
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +59 -0
- package/dist/heart/external-events/router.js +1414 -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-animation.js +10 -3
- package/dist/heart/{daemon → hatch}/hatch-flow.js +57 -139
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/hatch/specialist-orchestrator.js +129 -0
- package/dist/heart/hatch/specialist-prompt.js +102 -0
- package/dist/heart/hatch/specialist-tools.js +318 -0
- package/dist/heart/identity.js +297 -67
- package/dist/heart/kept-notes.js +289 -0
- package/dist/heart/kicks.js +2 -20
- 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 +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 +232 -0
- package/dist/heart/mailbox/readers/shared.js +111 -0
- package/dist/heart/mcp/mcp-server.js +696 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +59 -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 +42 -0
- 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 +236 -58
- package/dist/heart/providers/azure.js +104 -13
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +145 -0
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +29 -7
- package/dist/heart/providers/openai-codex-token.js +349 -0
- package/dist/heart/providers/openai-codex.js +63 -39
- 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 +79 -0
- package/dist/heart/session-activity.js +235 -0
- package/dist/heart/session-events.js +1318 -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 +372 -0
- package/dist/heart/steward-policy.js +302 -0
- package/dist/heart/streaming.js +682 -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 +127 -0
- 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 +342 -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 +481 -0
- package/dist/heart/turn-coordinator.js +28 -0
- package/dist/heart/versioning/ouro-bot-global-installer.js +129 -0
- 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/{daemon → versioning}/ouro-uti.js +11 -2
- package/dist/heart/versioning/ouro-version-manager.js +409 -0
- package/dist/heart/versioning/staged-restart.js +146 -0
- package/dist/heart/versioning/update-checker.js +116 -0
- package/dist/heart/versioning/update-hooks.js +154 -0
- package/dist/heart/versioning/version-intent.js +114 -0
- package/dist/heart/versioning/wrapper-publish-guard.js +86 -0
- package/dist/heart/work-card.js +380 -0
- package/dist/mailbox-ui/assets/index-Du_9G9WO.css +1 -0
- package/dist/mailbox-ui/assets/index-J8zDwHmE.js +1 -0
- package/dist/mailbox-ui/assets/vendor-CcN1XpQ9.js +61 -0
- package/dist/mailbox-ui/index.html +16 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +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 +93 -1
- package/dist/mind/context.js +287 -104
- package/dist/mind/desk-section.js +362 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +90 -98
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/first-impressions.js +16 -2
- package/dist/mind/{associative-recall.js → note-search.js} +61 -60
- package/dist/mind/obligation-steering.js +227 -0
- package/dist/mind/pending.js +102 -9
- package/dist/mind/phrases.js +1 -0
- package/dist/mind/prompt-budget.js +479 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1377 -140
- 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 +415 -0
- package/dist/mind/token-estimate.js +8 -12
- package/dist/nerves/cli-logging.js +22 -3
- 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 +56 -36
- package/dist/nerves/coverage/source-scanner.js +4 -4
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +305 -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 +17 -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 +322 -0
- package/dist/repertoire/coding/index.js +18 -3
- package/dist/repertoire/coding/manager.js +228 -14
- package/dist/repertoire/coding/spawner.js +61 -14
- package/dist/repertoire/coding/tools.js +279 -12
- 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/data/ado-endpoints.json +188 -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 +1083 -0
- package/dist/repertoire/mcp-client.js +295 -0
- package/dist/repertoire/mcp-manager.js +434 -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/relationship-authorization.js +194 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +45 -24
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-arguments.js +148 -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 +85 -707
- package/dist/repertoire/tools-bluebubbles.js +95 -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-session.js +1108 -0
- package/dist/repertoire/tools-shell.js +133 -0
- package/dist/repertoire/tools-steward-policy.js +95 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +369 -0
- package/dist/repertoire/tools-teams.js +67 -61
- 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 +484 -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 +441 -102
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/unraid-client.js +155 -0
- package/dist/repertoire/unraid-restart.js +212 -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/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 +799 -0
- 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 +127 -0
- package/dist/senses/bluebubbles/index.js +3839 -0
- package/dist/senses/bluebubbles/latest-turn.js +311 -0
- package/dist/senses/bluebubbles/media.js +389 -0
- package/dist/senses/bluebubbles/model.js +392 -0
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +57 -6
- 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 +137 -0
- package/dist/senses/bluebubbles/semantic-receipts.js +1986 -0
- package/dist/senses/bluebubbles/session-cleanup.js +72 -0
- 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-layout.js +187 -0
- package/dist/senses/cli.js +813 -281
- 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/continuity.js +94 -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 +1213 -0
- package/dist/senses/private-runtime-worker.js +859 -0
- package/dist/senses/private-runtime.js +1496 -0
- package/dist/senses/proactive-content-guard.js +51 -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 +101 -0
- package/dist/senses/sanctuary-health.js +408 -0
- package/dist/senses/sanctuary-interactive-control.js +306 -0
- package/dist/senses/sanctuary-media-catalog-contract.js +235 -0
- package/dist/senses/sanctuary-media-optimization.js +514 -0
- package/dist/senses/sanctuary-runtime.js +338 -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 +571 -0
- package/dist/senses/surface-tool.js +109 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +953 -211
- package/dist/senses/telegram-admission.js +711 -0
- package/dist/senses/telegram-approval-runtime.js +566 -0
- package/dist/senses/telegram-attachments.js +182 -0
- package/dist/senses/telegram-audit-ledger.js +220 -0
- package/dist/senses/telegram-client.js +1677 -0
- package/dist/senses/telegram-effect-adapter.js +859 -0
- package/dist/senses/telegram-entry.js +83 -0
- package/dist/senses/telegram.js +2026 -0
- package/dist/senses/trust-gate.js +207 -2
- package/dist/senses/voice/audio-playback.js +237 -0
- package/dist/senses/voice/audio-routing.js +119 -0
- package/dist/senses/voice/elevenlabs.js +202 -0
- package/dist/senses/voice/floor-control.js +431 -0
- package/dist/senses/voice/floor-controller.js +115 -0
- package/dist/senses/voice/golden-path.js +116 -0
- package/dist/senses/voice/index.js +29 -0
- package/dist/senses/voice/meeting.js +113 -0
- package/dist/senses/voice/outbound.js +190 -0
- package/dist/senses/voice/phone.js +33 -0
- package/dist/senses/voice/playback.js +139 -0
- package/dist/senses/voice/realtime-eval.js +496 -0
- package/dist/senses/voice/realtime-trace.js +531 -0
- package/dist/senses/voice/transcript.js +70 -0
- package/dist/senses/voice/turn.js +191 -0
- package/dist/senses/voice/twilio-phone-runtime.js +807 -0
- package/dist/senses/voice/twilio-phone.js +5081 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +81 -0
- package/dist/senses/voice-realtime-eval-command.js +99 -0
- package/dist/senses/voice-realtime-eval-entry.js +21 -0
- package/dist/senses/voice-twilio-entry.js +87 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +265 -0
- package/dist/util/frontmatter.js +69 -0
- package/npm-shrinkwrap.json +8144 -0
- package/package.json +82 -12
- package/skills/agent-commerce.md +113 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +99 -0
- package/skills/travel-planning.md +138 -0
- package/AdoptionSpecialist.ouro/agent.json +0 -20
- package/AdoptionSpecialist.ouro/psyche/SOUL.md +0 -22
- package/dist/heart/daemon/specialist-orchestrator.js +0 -160
- package/dist/heart/daemon/specialist-prompt.js +0 -47
- package/dist/heart/daemon/specialist-session.js +0 -142
- package/dist/heart/daemon/specialist-tools.js +0 -132
- package/dist/heart/daemon/subagent-installer.js +0 -125
- package/dist/inner-worker-entry.js +0 -4
- package/dist/mind/friends/channel.js +0 -49
- package/dist/mind/friends/resolver.js +0 -84
- package/dist/mind/friends/store-file.js +0 -171
- package/dist/mind/friends/store.js +0 -4
- package/dist/mind/friends/tokens.js +0 -26
- package/dist/mind/friends/types.js +0 -21
- package/dist/repertoire/tasks/board.js +0 -122
- package/dist/repertoire/tasks/index.js +0 -210
- 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 -145
- package/dist/senses/bluebubbles-client.js +0 -279
- package/dist/senses/bluebubbles-entry.js +0 -11
- package/dist/senses/bluebubbles-model.js +0 -253
- package/dist/senses/bluebubbles.js +0 -332
- package/dist/senses/inner-dialog-worker.js +0 -61
- package/dist/senses/inner-dialog.js +0 -231
- package/subagents/README.md +0 -73
- package/subagents/work-doer.md +0 -233
- package/subagents/work-merger.md +0 -624
- package/subagents/work-planner.md +0 -373
- /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/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
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Travel Planning Skill
|
|
2
|
+
|
|
3
|
+
Compose all travel infrastructure to plan and book trips effectively.
|
|
4
|
+
|
|
5
|
+
## Research Phase
|
|
6
|
+
|
|
7
|
+
### Destination Research
|
|
8
|
+
1. Use `geocode_search` to find candidate destinations and get coordinates
|
|
9
|
+
2. Use `weather_lookup` to check climate for travel dates
|
|
10
|
+
3. Use `travel_advisory` to check US State Dept safety levels (1-4):
|
|
11
|
+
- Level 1: Exercise Normal Precautions
|
|
12
|
+
- Level 2: Exercise Increased Caution
|
|
13
|
+
- Level 3: Reconsider Travel
|
|
14
|
+
- Level 4: Do Not Travel
|
|
15
|
+
4. Use browser tools (see `browser-navigation` skill) for destination reviews, travel blogs, local tips
|
|
16
|
+
5. Compare multiple destinations on weather, safety, cost, and flight availability
|
|
17
|
+
|
|
18
|
+
### Information Gathering Workflow
|
|
19
|
+
```
|
|
20
|
+
geocode_search -> get coordinates
|
|
21
|
+
weather_lookup -> check weather at coordinates
|
|
22
|
+
travel_advisory -> check safety level
|
|
23
|
+
browser tools -> reviews, local info, pricing
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Flight Search
|
|
27
|
+
|
|
28
|
+
### Using Duffel MCP (when available)
|
|
29
|
+
- Search via `duffel_search_flights` tool (first-class MCP tool)
|
|
30
|
+
- Provide: origin, destination, dates, passengers, cabin class
|
|
31
|
+
- Compare options on price, duration, stops, airline
|
|
32
|
+
|
|
33
|
+
### Using Browser (fallback)
|
|
34
|
+
- Use browser-navigation skill patterns for Google Flights, airline sites
|
|
35
|
+
- Add delays between searches to avoid detection
|
|
36
|
+
|
|
37
|
+
### Comparison Criteria
|
|
38
|
+
Present top 3-5 options comparing:
|
|
39
|
+
- Total price (including bags, seat selection)
|
|
40
|
+
- Duration and number of stops
|
|
41
|
+
- Airline and aircraft
|
|
42
|
+
- Departure/arrival times
|
|
43
|
+
- Cancellation/change policy
|
|
44
|
+
|
|
45
|
+
## Accommodation Search
|
|
46
|
+
|
|
47
|
+
### Hotel Search
|
|
48
|
+
- Use Expedia MCP when available (`expedia_search_hotels` tool)
|
|
49
|
+
- Compare: price per night, total stay cost, location, rating, amenities
|
|
50
|
+
- Check cancellation policies (crucial for travel planning)
|
|
51
|
+
|
|
52
|
+
### Vacation Rentals (Browser-based)
|
|
53
|
+
- Use browser-navigation skill for Airbnb/VRBO
|
|
54
|
+
- Search by location, dates, guests, budget
|
|
55
|
+
- Compare: price, location proximity, reviews, amenities, host rating
|
|
56
|
+
- Screenshot listings for user review
|
|
57
|
+
|
|
58
|
+
### Comparison Criteria
|
|
59
|
+
- Price per night and total cost
|
|
60
|
+
- Location (distance to key attractions/activities)
|
|
61
|
+
- Reviews and ratings
|
|
62
|
+
- Amenities (WiFi, kitchen, parking, pool)
|
|
63
|
+
- Cancellation flexibility
|
|
64
|
+
|
|
65
|
+
## Booking Workflow
|
|
66
|
+
|
|
67
|
+
### Critical Safety Gates
|
|
68
|
+
- **ALWAYS confirm with user before any booking action**
|
|
69
|
+
- **ALWAYS confirm before entering payment information**
|
|
70
|
+
- **ALWAYS confirm before agreeing to terms**
|
|
71
|
+
- **Never proceed with a financial commitment without explicit approval**
|
|
72
|
+
|
|
73
|
+
### Credential Handling
|
|
74
|
+
|
|
75
|
+
Credentials are managed through the credential access layer, which stores
|
|
76
|
+
agent-owned secrets in the agent's Bitwarden/Vaultwarden credential vault.
|
|
77
|
+
Stored passwords stay in the vault. A brand-new signup password may enter
|
|
78
|
+
model context briefly when the agent explicitly generates or types it during
|
|
79
|
+
an interactive sign-up flow.
|
|
80
|
+
|
|
81
|
+
- Use `credential_get` to check what credentials exist for a domain (metadata only, never passwords)
|
|
82
|
+
- Use `credential_generate_password` to mint a strong password for a new sign-up
|
|
83
|
+
- Use `credential_store` to save credentials the agent acquired after the site accepts them
|
|
84
|
+
- The credential gateway automatically injects secrets into API requests via `getRawSecret()`
|
|
85
|
+
- Use browser-navigation skill form patterns for entering credentials during interactive sessions
|
|
86
|
+
|
|
87
|
+
**How credentials work:**
|
|
88
|
+
- Agent-owned credentials live in the agent's Bitwarden/Vaultwarden vault
|
|
89
|
+
- Travel credentials such as Duffel and Stripe are ordinary vault credential items
|
|
90
|
+
- The agent can sign up for services and store its own credentials
|
|
91
|
+
- Existing stored passwords are never returned to the model — only metadata (domain, username, notes)
|
|
92
|
+
|
|
93
|
+
### Post-Booking
|
|
94
|
+
- Save confirmation details (confirmation number, dates, hotel name, airline, booking reference)
|
|
95
|
+
- Save durable travel facts to the Desk record diary or notes for future reference
|
|
96
|
+
- Set reminders for check-in windows
|
|
97
|
+
- Note cancellation deadlines
|
|
98
|
+
|
|
99
|
+
## Preference Management
|
|
100
|
+
|
|
101
|
+
### Storing Preferences
|
|
102
|
+
Track and reference these travel preferences:
|
|
103
|
+
- Preferred airlines and alliance status
|
|
104
|
+
- Preferred hotel chains and loyalty numbers
|
|
105
|
+
- Seat preferences (window/aisle, extra legroom)
|
|
106
|
+
- Dietary needs for in-flight meals
|
|
107
|
+
- Budget ranges (per night for hotels, per flight)
|
|
108
|
+
- Must-have amenities (WiFi, gym, pool)
|
|
109
|
+
|
|
110
|
+
### Using Preferences
|
|
111
|
+
- Reference stored preferences when searching
|
|
112
|
+
- Apply airline preferences to flight comparisons
|
|
113
|
+
- Apply hotel brand preferences to accommodation searches
|
|
114
|
+
- Adjust budget ranges based on destination
|
|
115
|
+
|
|
116
|
+
## Tool Reference
|
|
117
|
+
|
|
118
|
+
### Native Tools (always available)
|
|
119
|
+
- `weather_lookup` - Current weather and daily forecast by city or coordinates (Open-Meteo, zero config)
|
|
120
|
+
- `travel_advisory` - US State Dept advisory by country code
|
|
121
|
+
- `geocode_search` - Location/POI search with coordinates
|
|
122
|
+
- `credential_get` - Check credential metadata for a domain (never returns passwords)
|
|
123
|
+
- `credential_generate_password` - Generate a strong password for a new sign-up (family trust)
|
|
124
|
+
- `credential_store` - Store credentials the agent acquired (family trust)
|
|
125
|
+
- `credential_list` - List stored credential domains
|
|
126
|
+
- `credential_delete` - Delete stored credentials (family trust)
|
|
127
|
+
|
|
128
|
+
### MCP Tools (when configured)
|
|
129
|
+
- Browser tools via `@playwright/mcp` - see `browser-navigation` skill
|
|
130
|
+
- Duffel flight search (when MCP server available)
|
|
131
|
+
- Expedia hotel search (when MCP server available)
|
|
132
|
+
|
|
133
|
+
### Human Confirmation Required For
|
|
134
|
+
- Any booking or payment
|
|
135
|
+
- Entering personal information
|
|
136
|
+
- Agreeing to terms of service
|
|
137
|
+
- Creating financial obligations
|
|
138
|
+
- Sharing credentials with third parties
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 1,
|
|
3
|
-
"enabled": false,
|
|
4
|
-
"provider": "anthropic",
|
|
5
|
-
"context": {
|
|
6
|
-
"maxTokens": 80000,
|
|
7
|
-
"contextMargin": 20
|
|
8
|
-
},
|
|
9
|
-
"phrases": {
|
|
10
|
-
"thinking": [
|
|
11
|
-
"matching hatchlings"
|
|
12
|
-
],
|
|
13
|
-
"tool": [
|
|
14
|
-
"checking adoption notes"
|
|
15
|
-
],
|
|
16
|
-
"followup": [
|
|
17
|
-
"finalizing hatch plan"
|
|
18
|
-
]
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Adoption Specialist Soul
|
|
2
|
-
|
|
3
|
-
I help humans hatch new agent partners.
|
|
4
|
-
|
|
5
|
-
## Core contract
|
|
6
|
-
- I run a practical adoption interview to understand the human, their work, and constraints.
|
|
7
|
-
- I can migrate useful context from existing agent systems when the human asks.
|
|
8
|
-
- I explain where the hatchling bundle lives on disk and what was created.
|
|
9
|
-
- I use the configured provider and I verify credentials before hatch flow continues.
|
|
10
|
-
- I am professional, concise, and warm. I guide without overwhelming.
|
|
11
|
-
|
|
12
|
-
## Hatch flow
|
|
13
|
-
1. Confirm provider setup and usable credentials.
|
|
14
|
-
2. Interview for goals, style, and operating context.
|
|
15
|
-
3. Synthesize a concrete hatchling identity and bootstrap files.
|
|
16
|
-
4. Create canonical bundle structure with required defaults.
|
|
17
|
-
5. Introduce the hatchling and hand off clearly.
|
|
18
|
-
|
|
19
|
-
## Filesystem orientation
|
|
20
|
-
- Bundles live at `~/AgentBundles/<Name>.ouro/`.
|
|
21
|
-
- Secrets live at `~/.agentsecrets/<name>/secrets.json`.
|
|
22
|
-
- I tell the human exactly where their hatchling was created.
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.runAdoptionSpecialist = runAdoptionSpecialist;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
const runtime_1 = require("../../nerves/runtime");
|
|
40
|
-
const identity_1 = require("../identity");
|
|
41
|
-
const config_1 = require("../config");
|
|
42
|
-
const core_1 = require("../core");
|
|
43
|
-
const hatch_flow_1 = require("./hatch-flow");
|
|
44
|
-
const specialist_prompt_1 = require("./specialist-prompt");
|
|
45
|
-
const specialist_tools_1 = require("./specialist-tools");
|
|
46
|
-
const specialist_session_1 = require("./specialist-session");
|
|
47
|
-
function listExistingBundles(bundlesRoot) {
|
|
48
|
-
let entries;
|
|
49
|
-
try {
|
|
50
|
-
entries = fs.readdirSync(bundlesRoot, { withFileTypes: true });
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return [];
|
|
54
|
-
}
|
|
55
|
-
const discovered = [];
|
|
56
|
-
for (const entry of entries) {
|
|
57
|
-
if (!entry.isDirectory() || !entry.name.endsWith(".ouro"))
|
|
58
|
-
continue;
|
|
59
|
-
const agentName = entry.name.slice(0, -5);
|
|
60
|
-
discovered.push(agentName);
|
|
61
|
-
}
|
|
62
|
-
return discovered.sort((a, b) => a.localeCompare(b));
|
|
63
|
-
}
|
|
64
|
-
function pickRandomIdentity(identitiesDir, random) {
|
|
65
|
-
const files = fs.readdirSync(identitiesDir).filter((f) => f.endsWith(".md"));
|
|
66
|
-
if (files.length === 0) {
|
|
67
|
-
return { fileName: "default", content: "I am the adoption specialist." };
|
|
68
|
-
}
|
|
69
|
-
const idx = Math.floor(random() * files.length);
|
|
70
|
-
const fileName = files[idx];
|
|
71
|
-
const content = fs.readFileSync(path.join(identitiesDir, fileName), "utf-8");
|
|
72
|
-
return { fileName, content };
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Run the full adoption specialist flow:
|
|
76
|
-
* 1. Pick a random identity from the bundled AdoptionSpecialist.ouro
|
|
77
|
-
* 2. Read SOUL.md
|
|
78
|
-
* 3. List existing bundles
|
|
79
|
-
* 4. Build system prompt
|
|
80
|
-
* 5. Set up provider (setAgentName, setAgentConfigOverride, writeSecretsFile, reset caches)
|
|
81
|
-
* 6. Run the specialist session
|
|
82
|
-
* 7. Clean up identity/config overrides
|
|
83
|
-
* 8. Return hatchling name
|
|
84
|
-
*/
|
|
85
|
-
async function runAdoptionSpecialist(deps) {
|
|
86
|
-
const { bundleSourceDir, bundlesRoot, secretsRoot, provider, credentials, humanName, callbacks, signal } = deps;
|
|
87
|
-
const random = deps.random ?? Math.random;
|
|
88
|
-
(0, runtime_1.emitNervesEvent)({
|
|
89
|
-
component: "daemon",
|
|
90
|
-
event: "daemon.specialist_orchestrator_start",
|
|
91
|
-
message: "starting adoption specialist orchestrator",
|
|
92
|
-
meta: { provider, bundleSourceDir },
|
|
93
|
-
});
|
|
94
|
-
// 1. Read SOUL.md
|
|
95
|
-
const soulPath = path.join(bundleSourceDir, "psyche", "SOUL.md");
|
|
96
|
-
let soulText = "";
|
|
97
|
-
try {
|
|
98
|
-
soulText = fs.readFileSync(soulPath, "utf-8");
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
// No SOUL.md -- proceed without it
|
|
102
|
-
}
|
|
103
|
-
// 2. Pick random identity
|
|
104
|
-
const identitiesDir = path.join(bundleSourceDir, "psyche", "identities");
|
|
105
|
-
const identity = pickRandomIdentity(identitiesDir, random);
|
|
106
|
-
(0, runtime_1.emitNervesEvent)({
|
|
107
|
-
component: "daemon",
|
|
108
|
-
event: "daemon.specialist_identity_picked",
|
|
109
|
-
message: "picked specialist identity",
|
|
110
|
-
meta: { identity: identity.fileName },
|
|
111
|
-
});
|
|
112
|
-
// 3. List existing bundles
|
|
113
|
-
const existingBundles = listExistingBundles(bundlesRoot);
|
|
114
|
-
// 4. Build system prompt
|
|
115
|
-
const systemPrompt = (0, specialist_prompt_1.buildSpecialistSystemPrompt)(soulText, identity.content, existingBundles);
|
|
116
|
-
// 5. Set up provider
|
|
117
|
-
(0, identity_1.setAgentName)("AdoptionSpecialist");
|
|
118
|
-
(0, identity_1.setAgentConfigOverride)({
|
|
119
|
-
version: 1,
|
|
120
|
-
enabled: true,
|
|
121
|
-
provider,
|
|
122
|
-
phrases: { thinking: ["thinking"], tool: ["checking"], followup: ["processing"] },
|
|
123
|
-
});
|
|
124
|
-
(0, hatch_flow_1.writeSecretsFile)("AdoptionSpecialist", provider, credentials, secretsRoot);
|
|
125
|
-
(0, config_1.resetConfigCache)();
|
|
126
|
-
(0, core_1.resetProviderRuntime)();
|
|
127
|
-
try {
|
|
128
|
-
// Create provider runtime
|
|
129
|
-
const providerRuntime = (0, core_1.createProviderRegistry)().resolve();
|
|
130
|
-
if (!providerRuntime) {
|
|
131
|
-
throw new Error("Failed to create provider runtime for adoption specialist");
|
|
132
|
-
}
|
|
133
|
-
// 6. Run session
|
|
134
|
-
const tools = (0, specialist_tools_1.getSpecialistTools)();
|
|
135
|
-
const readline = deps.createReadline();
|
|
136
|
-
const result = await (0, specialist_session_1.runSpecialistSession)({
|
|
137
|
-
providerRuntime,
|
|
138
|
-
systemPrompt,
|
|
139
|
-
tools,
|
|
140
|
-
execTool: (name, args) => (0, specialist_tools_1.execSpecialistTool)(name, args, {
|
|
141
|
-
humanName,
|
|
142
|
-
provider,
|
|
143
|
-
credentials,
|
|
144
|
-
bundlesRoot,
|
|
145
|
-
secretsRoot,
|
|
146
|
-
specialistIdentitiesDir: identitiesDir,
|
|
147
|
-
}),
|
|
148
|
-
readline,
|
|
149
|
-
callbacks,
|
|
150
|
-
signal,
|
|
151
|
-
});
|
|
152
|
-
return result.hatchedAgentName;
|
|
153
|
-
}
|
|
154
|
-
finally {
|
|
155
|
-
// 7. Cleanup: restore identity/config state
|
|
156
|
-
(0, identity_1.setAgentConfigOverride)(null);
|
|
157
|
-
(0, config_1.resetConfigCache)();
|
|
158
|
-
(0, core_1.resetProviderRuntime)();
|
|
159
|
-
}
|
|
160
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildSpecialistSystemPrompt = buildSpecialistSystemPrompt;
|
|
4
|
-
const runtime_1 = require("../../nerves/runtime");
|
|
5
|
-
/**
|
|
6
|
-
* Build the adoption specialist's system prompt from its components.
|
|
7
|
-
* The prompt is written in first person (the specialist's own voice).
|
|
8
|
-
*/
|
|
9
|
-
function buildSpecialistSystemPrompt(soulText, identityText, existingBundles) {
|
|
10
|
-
(0, runtime_1.emitNervesEvent)({
|
|
11
|
-
component: "daemon",
|
|
12
|
-
event: "daemon.specialist_prompt_build",
|
|
13
|
-
message: "building specialist system prompt",
|
|
14
|
-
meta: { bundleCount: existingBundles.length },
|
|
15
|
-
});
|
|
16
|
-
const sections = [];
|
|
17
|
-
if (soulText) {
|
|
18
|
-
sections.push(soulText);
|
|
19
|
-
}
|
|
20
|
-
if (identityText) {
|
|
21
|
-
sections.push(identityText);
|
|
22
|
-
}
|
|
23
|
-
if (existingBundles.length > 0) {
|
|
24
|
-
sections.push(`## Existing agents\nThe human already has these agents: ${existingBundles.join(", ")}.`);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
sections.push("## Existing agents\nThe human has no agents yet. This will be their first hatchling.");
|
|
28
|
-
}
|
|
29
|
-
sections.push([
|
|
30
|
-
"## Conversation flow",
|
|
31
|
-
"I start by warmly greeting the human and asking their name.",
|
|
32
|
-
"I then learn about what they want their agent to do — goals, personality, working style.",
|
|
33
|
-
"I keep the conversation natural and concise. I do not overwhelm with questions.",
|
|
34
|
-
"When I have enough context, I suggest a name for the hatchling and confirm with the human.",
|
|
35
|
-
"Then I call `hatch_agent` with the agent name and the human's name.",
|
|
36
|
-
"",
|
|
37
|
-
"## Tools",
|
|
38
|
-
"I have these tools available:",
|
|
39
|
-
"- `hatch_agent`: Create a new agent bundle. I call this with `name` (the agent name, PascalCase) and `humanName` (what the human told me their name is).",
|
|
40
|
-
"- `final_answer`: End the conversation with a final message to the human. I call this when the adoption process is complete.",
|
|
41
|
-
"- `read_file`: Read a file from disk. Useful for reviewing existing agent bundles or migration sources.",
|
|
42
|
-
"- `list_directory`: List directory contents. Useful for exploring existing agent bundles.",
|
|
43
|
-
"",
|
|
44
|
-
"I must call `final_answer` when I am done to end the session cleanly.",
|
|
45
|
-
].join("\n"));
|
|
46
|
-
return sections.join("\n\n");
|
|
47
|
-
}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.runSpecialistSession = runSpecialistSession;
|
|
4
|
-
const runtime_1 = require("../../nerves/runtime");
|
|
5
|
-
/**
|
|
6
|
-
* Run the specialist conversation session loop.
|
|
7
|
-
*
|
|
8
|
-
* The loop:
|
|
9
|
-
* 1. Initialize messages with system prompt
|
|
10
|
-
* 2. Prompt user -> add to messages -> call streamTurn -> process result
|
|
11
|
-
* 3. If result has no tool calls: push assistant message, re-prompt
|
|
12
|
-
* 4. If result has final_answer sole call: extract answer, emit via callbacks, done
|
|
13
|
-
* 5. If result has other tool calls: execute each, push tool results, continue loop
|
|
14
|
-
* 6. On abort signal: clean exit
|
|
15
|
-
* 7. Return { hatchedAgentName } -- name from hatch_agent if called
|
|
16
|
-
*/
|
|
17
|
-
async function runSpecialistSession(deps) {
|
|
18
|
-
const { providerRuntime, systemPrompt, tools, execTool, readline, callbacks, signal } = deps;
|
|
19
|
-
(0, runtime_1.emitNervesEvent)({
|
|
20
|
-
component: "daemon",
|
|
21
|
-
event: "daemon.specialist_session_start",
|
|
22
|
-
message: "starting specialist session loop",
|
|
23
|
-
meta: {},
|
|
24
|
-
});
|
|
25
|
-
const messages = [
|
|
26
|
-
{ role: "system", content: systemPrompt },
|
|
27
|
-
];
|
|
28
|
-
let hatchedAgentName = null;
|
|
29
|
-
let done = false;
|
|
30
|
-
try {
|
|
31
|
-
while (!done) {
|
|
32
|
-
if (signal?.aborted)
|
|
33
|
-
break;
|
|
34
|
-
// Get user input
|
|
35
|
-
const userInput = await readline.question("> ");
|
|
36
|
-
if (!userInput.trim())
|
|
37
|
-
continue;
|
|
38
|
-
messages.push({ role: "user", content: userInput });
|
|
39
|
-
providerRuntime.resetTurnState(messages);
|
|
40
|
-
// Inner loop: process tool calls until we get a final_answer or plain text
|
|
41
|
-
let turnDone = false;
|
|
42
|
-
while (!turnDone) {
|
|
43
|
-
if (signal?.aborted) {
|
|
44
|
-
done = true;
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
callbacks.onModelStart();
|
|
48
|
-
const result = await providerRuntime.streamTurn({
|
|
49
|
-
messages,
|
|
50
|
-
activeTools: tools,
|
|
51
|
-
callbacks,
|
|
52
|
-
signal,
|
|
53
|
-
});
|
|
54
|
-
// Build assistant message
|
|
55
|
-
const assistantMsg = {
|
|
56
|
-
role: "assistant",
|
|
57
|
-
};
|
|
58
|
-
if (result.content)
|
|
59
|
-
assistantMsg.content = result.content;
|
|
60
|
-
if (result.toolCalls.length) {
|
|
61
|
-
assistantMsg.tool_calls = result.toolCalls.map((tc) => ({
|
|
62
|
-
id: tc.id,
|
|
63
|
-
type: "function",
|
|
64
|
-
function: { name: tc.name, arguments: tc.arguments },
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
if (!result.toolCalls.length) {
|
|
68
|
-
// Plain text response -- push and re-prompt
|
|
69
|
-
messages.push(assistantMsg);
|
|
70
|
-
turnDone = true;
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
// Check for final_answer
|
|
74
|
-
const isSoleFinalAnswer = result.toolCalls.length === 1 && result.toolCalls[0].name === "final_answer";
|
|
75
|
-
if (isSoleFinalAnswer) {
|
|
76
|
-
let answer;
|
|
77
|
-
try {
|
|
78
|
-
const parsed = JSON.parse(result.toolCalls[0].arguments);
|
|
79
|
-
if (typeof parsed === "string") {
|
|
80
|
-
answer = parsed;
|
|
81
|
-
}
|
|
82
|
-
else if (parsed.answer != null) {
|
|
83
|
-
answer = parsed.answer;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
// malformed
|
|
88
|
-
}
|
|
89
|
-
if (answer != null) {
|
|
90
|
-
callbacks.onTextChunk(answer);
|
|
91
|
-
messages.push(assistantMsg);
|
|
92
|
-
done = true;
|
|
93
|
-
turnDone = true;
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
// Malformed final_answer -- ask model to retry
|
|
97
|
-
messages.push(assistantMsg);
|
|
98
|
-
messages.push({
|
|
99
|
-
role: "tool",
|
|
100
|
-
tool_call_id: result.toolCalls[0].id,
|
|
101
|
-
content: "your final_answer was incomplete or malformed. call final_answer again with your complete response.",
|
|
102
|
-
});
|
|
103
|
-
providerRuntime.appendToolOutput(result.toolCalls[0].id, "retry");
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
// Execute tool calls
|
|
107
|
-
messages.push(assistantMsg);
|
|
108
|
-
for (const tc of result.toolCalls) {
|
|
109
|
-
if (signal?.aborted)
|
|
110
|
-
break;
|
|
111
|
-
let args = {};
|
|
112
|
-
try {
|
|
113
|
-
args = JSON.parse(tc.arguments);
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
// ignore parse error
|
|
117
|
-
}
|
|
118
|
-
callbacks.onToolStart(tc.name, args);
|
|
119
|
-
let toolResult;
|
|
120
|
-
try {
|
|
121
|
-
toolResult = await execTool(tc.name, args);
|
|
122
|
-
}
|
|
123
|
-
catch (e) {
|
|
124
|
-
toolResult = `error: ${e}`;
|
|
125
|
-
}
|
|
126
|
-
callbacks.onToolEnd(tc.name, tc.name, true);
|
|
127
|
-
// Track hatchling name
|
|
128
|
-
if (tc.name === "hatch_agent" && args.name) {
|
|
129
|
-
hatchedAgentName = args.name;
|
|
130
|
-
}
|
|
131
|
-
messages.push({ role: "tool", tool_call_id: tc.id, content: toolResult });
|
|
132
|
-
providerRuntime.appendToolOutput(tc.id, toolResult);
|
|
133
|
-
}
|
|
134
|
-
// After processing tool calls, continue inner loop for tool result processing
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
finally {
|
|
139
|
-
readline.close();
|
|
140
|
-
}
|
|
141
|
-
return { hatchedAgentName };
|
|
142
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.getSpecialistTools = getSpecialistTools;
|
|
37
|
-
exports.execSpecialistTool = execSpecialistTool;
|
|
38
|
-
const fs = __importStar(require("fs"));
|
|
39
|
-
const tools_base_1 = require("../../repertoire/tools-base");
|
|
40
|
-
const hatch_flow_1 = require("./hatch-flow");
|
|
41
|
-
const hatch_animation_1 = require("./hatch-animation");
|
|
42
|
-
const runtime_1 = require("../../nerves/runtime");
|
|
43
|
-
const hatchAgentTool = {
|
|
44
|
-
type: "function",
|
|
45
|
-
function: {
|
|
46
|
-
name: "hatch_agent",
|
|
47
|
-
description: "create a new agent bundle with the given name. call this when you have gathered enough information from the human to hatch their agent.",
|
|
48
|
-
parameters: {
|
|
49
|
-
type: "object",
|
|
50
|
-
properties: {
|
|
51
|
-
name: {
|
|
52
|
-
type: "string",
|
|
53
|
-
description: "the name for the new agent (PascalCase, e.g. 'Slugger')",
|
|
54
|
-
},
|
|
55
|
-
humanName: {
|
|
56
|
-
type: "string",
|
|
57
|
-
description: "the human's preferred name, as they told you during conversation",
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
required: ["name", "humanName"],
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
const readFileTool = tools_base_1.baseToolDefinitions.find((d) => d.tool.function.name === "read_file");
|
|
65
|
-
const listDirTool = tools_base_1.baseToolDefinitions.find((d) => d.tool.function.name === "list_directory");
|
|
66
|
-
/**
|
|
67
|
-
* Returns the specialist's tool schema array.
|
|
68
|
-
*/
|
|
69
|
-
function getSpecialistTools() {
|
|
70
|
-
return [hatchAgentTool, tools_base_1.finalAnswerTool, readFileTool.tool, listDirTool.tool];
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Execute a specialist tool call.
|
|
74
|
-
* Returns the tool result string.
|
|
75
|
-
*/
|
|
76
|
-
async function execSpecialistTool(name, args, deps) {
|
|
77
|
-
(0, runtime_1.emitNervesEvent)({
|
|
78
|
-
component: "daemon",
|
|
79
|
-
event: "daemon.specialist_tool_exec",
|
|
80
|
-
message: "executing specialist tool",
|
|
81
|
-
meta: { tool: name },
|
|
82
|
-
});
|
|
83
|
-
if (name === "hatch_agent") {
|
|
84
|
-
const agentName = args.name;
|
|
85
|
-
if (!agentName) {
|
|
86
|
-
return "error: missing required 'name' parameter for hatch_agent";
|
|
87
|
-
}
|
|
88
|
-
const input = {
|
|
89
|
-
agentName,
|
|
90
|
-
humanName: args.humanName || deps.humanName,
|
|
91
|
-
provider: deps.provider,
|
|
92
|
-
credentials: deps.credentials,
|
|
93
|
-
};
|
|
94
|
-
// Pass identity dirs to prevent hatch flow from syncing to ~/AgentBundles/AdoptionSpecialist.ouro/
|
|
95
|
-
// or cwd/AdoptionSpecialist.ouro/. The specialist already picked its identity; the hatch flow
|
|
96
|
-
// just needs a valid source dir to pick from for the hatchling's LORE.md seed.
|
|
97
|
-
const identitiesDir = deps.specialistIdentitiesDir;
|
|
98
|
-
const result = await (0, hatch_flow_1.runHatchFlow)(input, {
|
|
99
|
-
bundlesRoot: deps.bundlesRoot,
|
|
100
|
-
secretsRoot: deps.secretsRoot,
|
|
101
|
-
...(identitiesDir ? { specialistIdentitySourceDir: identitiesDir, specialistIdentityTargetDir: identitiesDir } : {}),
|
|
102
|
-
});
|
|
103
|
-
await (0, hatch_animation_1.playHatchAnimation)(agentName, deps.animationWriter);
|
|
104
|
-
return [
|
|
105
|
-
`hatched ${agentName} successfully.`,
|
|
106
|
-
`bundle path: ${result.bundleRoot}`,
|
|
107
|
-
`identity seed: ${result.selectedIdentity}`,
|
|
108
|
-
`specialist secrets: ${result.specialistSecretsPath}`,
|
|
109
|
-
`hatchling secrets: ${result.hatchlingSecretsPath}`,
|
|
110
|
-
].join("\n");
|
|
111
|
-
}
|
|
112
|
-
if (name === "read_file") {
|
|
113
|
-
try {
|
|
114
|
-
return fs.readFileSync(args.path, "utf-8");
|
|
115
|
-
}
|
|
116
|
-
catch (e) {
|
|
117
|
-
return `error: ${e instanceof Error ? e.message : /* v8 ignore next -- defensive: non-Error catch branch @preserve */ String(e)}`;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
if (name === "list_directory") {
|
|
121
|
-
try {
|
|
122
|
-
return fs
|
|
123
|
-
.readdirSync(args.path, { withFileTypes: true })
|
|
124
|
-
.map((e) => `${e.isDirectory() ? "d" : "-"} ${e.name}`)
|
|
125
|
-
.join("\n");
|
|
126
|
-
}
|
|
127
|
-
catch (e) {
|
|
128
|
-
return `error: ${e instanceof Error ? e.message : /* v8 ignore next -- defensive: non-Error catch branch @preserve */ String(e)}`;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return `error: unknown tool '${name}'`;
|
|
132
|
-
}
|