@ouro.bot/cli 0.1.0-alpha.66 → 0.1.0-alpha.661
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +127 -23
- package/RepairGuide.ouro/agent.json +5 -0
- package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
- package/RepairGuide.ouro/psyche/SOUL.md +55 -0
- package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
- package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
- package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
- package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
- package/changelog.json +4216 -13
- package/dist/a2a/card.js +56 -0
- package/dist/a2a/client.js +143 -0
- package/dist/a2a/config.js +50 -0
- package/dist/a2a/onboarding.js +111 -0
- package/dist/a2a/server.js +498 -0
- package/dist/a2a/task-store.js +69 -0
- package/dist/a2a/types.js +3 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +144 -0
- package/dist/arc/episodes.js +118 -0
- package/dist/arc/evolution.js +487 -0
- package/dist/arc/flight-recorder.js +369 -0
- package/dist/arc/intentions.js +134 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +292 -0
- package/dist/arc/packets.js +288 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +57 -0
- package/dist/commerce/store.js +755 -0
- package/dist/commerce/types.js +3 -0
- package/dist/heart/active-work.js +860 -43
- package/dist/heart/agent-entry.js +69 -3
- package/dist/heart/attachments/image-normalize.js +194 -0
- package/dist/heart/attachments/materialize.js +97 -0
- package/dist/heart/attachments/originals.js +88 -0
- package/dist/heart/attachments/render.js +29 -0
- package/dist/heart/attachments/sources/bluebubbles.js +156 -0
- package/dist/heart/attachments/sources/cli-local-file.js +78 -0
- package/dist/heart/attachments/sources/index.js +16 -0
- package/dist/heart/attachments/store.js +103 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +479 -0
- package/dist/heart/awaiting/await-alert.js +146 -0
- package/dist/heart/awaiting/await-expiry.js +108 -0
- package/dist/heart/awaiting/await-loader.js +91 -0
- package/dist/heart/awaiting/await-parser.js +141 -0
- package/dist/heart/awaiting/await-runtime-state.js +100 -0
- package/dist/heart/awaiting/await-scheduler.js +377 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bridges/manager.js +137 -17
- package/dist/heart/bridges/store.js +14 -2
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +135 -0
- package/dist/heart/config-registry.js +331 -0
- package/dist/heart/config.js +118 -119
- package/dist/heart/context-loss-gauntlet.js +354 -0
- package/dist/heart/core.js +1123 -247
- package/dist/heart/cross-chat-delivery.js +3 -18
- package/dist/heart/daemon/agent-config-check.js +419 -0
- package/dist/heart/daemon/agent-discovery.js +102 -3
- package/dist/heart/daemon/agent-service.js +523 -0
- package/dist/heart/daemon/agentic-repair.js +547 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/boot-sync-probe.js +197 -0
- package/dist/heart/daemon/cadence.js +70 -0
- package/dist/heart/daemon/cli-defaults.js +780 -0
- package/dist/heart/daemon/cli-desk.js +322 -0
- package/dist/heart/daemon/cli-exec.js +7767 -0
- package/dist/heart/daemon/cli-help.js +558 -0
- package/dist/heart/daemon/cli-parse.js +1688 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +763 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/connect-bay.js +323 -0
- package/dist/heart/daemon/daemon-cli.js +29 -1750
- package/dist/heart/daemon/daemon-entry.js +485 -2
- package/dist/heart/daemon/daemon-health.js +176 -0
- package/dist/heart/daemon/daemon-rollup.js +57 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +937 -74
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +873 -0
- package/dist/heart/daemon/health-monitor.js +122 -1
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +135 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/human-command-screens.js +234 -0
- package/dist/heart/daemon/human-readiness.js +114 -0
- package/dist/heart/daemon/inner-status.js +78 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +37 -8
- package/dist/heart/daemon/log-tailer.js +79 -10
- package/dist/heart/daemon/logs-prune.js +110 -0
- package/dist/heart/daemon/mcp-canary.js +297 -0
- package/dist/heart/daemon/message-router.js +6 -2
- package/dist/heart/daemon/migrate-to-desk.js +848 -0
- package/dist/heart/daemon/os-cron-deps.js +135 -0
- package/dist/heart/daemon/os-cron.js +14 -12
- package/dist/heart/daemon/ouro-bot-entry.js +4 -2
- package/dist/heart/daemon/ouro-entry.js +3 -1
- package/dist/heart/daemon/plugin-cli.js +432 -0
- package/dist/heart/daemon/process-manager.js +511 -40
- package/dist/heart/daemon/provider-discovery.js +137 -0
- package/dist/heart/daemon/provider-ping-progress.js +83 -0
- package/dist/heart/daemon/pulse.js +475 -0
- package/dist/heart/daemon/readiness-repair.js +365 -0
- package/dist/heart/daemon/run-hooks.js +2 -0
- package/dist/heart/daemon/runtime-logging.js +35 -14
- package/dist/heart/daemon/runtime-metadata.js +2 -30
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +564 -38
- 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 +158 -11
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +330 -0
- package/dist/heart/daemon/task-scheduler.js +117 -39
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +229 -17
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +1 -4
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +203 -0
- package/dist/heart/habits/habit-runtime-state.js +100 -0
- package/dist/heart/habits/habit-scheduler.js +372 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +40 -56
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
- package/dist/heart/{daemon → hatch}/specialist-tools.js +45 -18
- package/dist/heart/identity.js +174 -57
- package/dist/heart/kept-notes.js +289 -0
- package/dist/heart/kicks.js +1 -1
- package/dist/heart/machine-identity.js +161 -0
- package/dist/heart/mail-import-discovery.js +353 -0
- package/dist/heart/mailbox/mailbox-http-hooks.js +67 -0
- package/dist/heart/mailbox/mailbox-http-response.js +7 -0
- package/dist/heart/mailbox/mailbox-http-routes.js +250 -0
- package/dist/heart/mailbox/mailbox-http-static.js +103 -0
- package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
- package/dist/heart/mailbox/mailbox-http.js +99 -0
- package/dist/heart/mailbox/mailbox-read.js +32 -0
- package/dist/heart/mailbox/mailbox-types.js +27 -0
- package/dist/heart/mailbox/mailbox-view.js +197 -0
- package/dist/heart/mailbox/readers/agent-machine.js +418 -0
- package/dist/heart/mailbox/readers/continuity-readers.js +324 -0
- package/dist/heart/mailbox/readers/mail.js +375 -0
- package/dist/heart/mailbox/readers/runtime-readers.js +728 -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 +19 -0
- package/dist/heart/orientation-frame.js +217 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +272 -0
- package/dist/heart/provider-credentials.js +425 -0
- package/dist/heart/provider-failover.js +311 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -0
- package/dist/heart/provider-readiness-cache.js +40 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +139 -52
- package/dist/heart/providers/azure.js +23 -11
- package/dist/heart/providers/error-classification.js +127 -0
- package/dist/heart/providers/github-copilot.js +145 -0
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +26 -8
- package/dist/heart/providers/openai-codex-token.js +349 -0
- package/dist/heart/providers/openai-codex.js +55 -40
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +367 -0
- package/dist/heart/runtime-cwd.js +87 -0
- package/dist/heart/sense-truth.js +17 -4
- package/dist/heart/session-activity.js +48 -24
- package/dist/heart/session-events.js +1133 -0
- package/dist/heart/session-playback-cli-main.js +5 -0
- package/dist/heart/session-playback-cli.js +36 -0
- package/dist/heart/session-playback.js +231 -0
- package/dist/heart/session-stats-cli-main.js +5 -0
- package/dist/heart/session-stats.js +182 -0
- package/dist/heart/session-transcript.js +133 -0
- package/dist/heart/start-of-turn-packet.js +351 -0
- package/dist/heart/streaming.js +44 -27
- package/dist/heart/structured-output.js +196 -0
- package/dist/heart/sync-classification.js +176 -0
- package/dist/heart/sync.js +449 -0
- package/dist/heart/target-resolution.js +9 -5
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/timeouts.js +101 -0
- package/dist/heart/tool-activity-callbacks.js +59 -0
- package/dist/heart/tool-description.js +155 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +430 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
- package/dist/heart/versioning/ouro-path-installer.js +426 -0
- package/dist/heart/versioning/ouro-version-manager.js +409 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
- package/dist/heart/versioning/update-hooks.js +154 -0
- package/dist/heart/work-card.js +386 -0
- package/dist/mailbox-ui/assets/index-B-V9vRQ0.js +61 -0
- package/dist/mailbox-ui/assets/index-BOZbGbkL.css +1 -0
- package/dist/mailbox-ui/index.html +15 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +715 -0
- package/dist/mailroom/body-cache.js +61 -0
- package/dist/mailroom/core.js +788 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +568 -0
- package/dist/mailroom/mbox-import.js +393 -0
- package/dist/mailroom/migration.js +164 -0
- package/dist/mailroom/outbound.js +380 -0
- package/dist/mailroom/policy.js +263 -0
- package/dist/mailroom/reader.js +233 -0
- package/dist/mailroom/search-cache.js +334 -0
- package/dist/mailroom/search-relevance.js +319 -0
- package/dist/mailroom/smtp-ingress.js +176 -0
- package/dist/mailroom/source-state.js +176 -0
- package/dist/mailroom/thread.js +109 -0
- package/dist/mailroom/travel-extract.js +89 -0
- package/dist/mind/bundle-manifest.js +21 -2
- package/dist/mind/context.js +250 -101
- package/dist/mind/desk-section.js +362 -0
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +68 -77
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/friends/channel.js +48 -0
- package/dist/mind/friends/resolver.js +107 -4
- package/dist/mind/friends/store-file.js +61 -4
- package/dist/mind/friends/types.js +2 -2
- package/dist/mind/{associative-recall.js → note-search.js} +47 -58
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +6 -1
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1015 -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/nerves/cli-logging.js +7 -1
- package/dist/nerves/coverage/audit-rules.js +15 -6
- package/dist/nerves/coverage/audit.js +28 -2
- package/dist/nerves/coverage/cli.js +1 -1
- package/dist/nerves/coverage/contract.js +5 -5
- package/dist/nerves/coverage/file-completeness.js +139 -5
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +224 -4
- package/dist/nerves/observation.js +20 -0
- package/dist/nerves/redact.js +79 -0
- package/dist/nerves/review/cli-main.js +5 -0
- package/dist/nerves/review/cli.js +156 -0
- package/dist/nerves/review/core.js +152 -0
- package/dist/nerves/runtime.js +5 -1
- package/dist/repertoire/ado-client.js +15 -56
- package/dist/repertoire/ado-semantic.js +16 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +1041 -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 +197 -30
- package/dist/repertoire/coding/manager.js +166 -10
- package/dist/repertoire/coding/spawner.js +55 -9
- package/dist/repertoire/coding/tools.js +219 -7
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +178 -0
- package/dist/repertoire/desk/classifier.js +362 -0
- package/dist/repertoire/duffel-client.js +185 -0
- package/dist/repertoire/github-client.js +14 -55
- package/dist/repertoire/graph-client.js +11 -52
- package/dist/repertoire/guardrails.js +159 -25
- 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/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +48 -4
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-a2a.js +283 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-awaiting.js +372 -0
- package/dist/repertoire/tools-base.js +63 -1082
- package/dist/repertoire/tools-bluebubbles.js +2 -0
- package/dist/repertoire/tools-bridge.js +144 -0
- package/dist/repertoire/tools-bundle.js +993 -0
- package/dist/repertoire/tools-commerce.js +253 -0
- package/dist/repertoire/tools-config.js +186 -0
- package/dist/repertoire/tools-continuity.js +252 -0
- package/dist/repertoire/tools-credential.js +383 -0
- package/dist/repertoire/tools-evolution.js +527 -0
- package/dist/repertoire/tools-files.js +344 -0
- package/dist/repertoire/tools-flight.js +290 -0
- package/dist/repertoire/tools-flow.js +119 -0
- package/dist/repertoire/tools-github.js +3 -8
- package/dist/repertoire/tools-mail.js +1975 -0
- package/dist/repertoire/tools-notes.js +418 -0
- package/dist/repertoire/tools-obligations.js +143 -0
- package/dist/repertoire/tools-orientation.js +31 -0
- package/dist/repertoire/tools-record.js +469 -0
- package/dist/repertoire/tools-runtime.js +150 -0
- package/dist/repertoire/tools-session.js +766 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +224 -0
- package/dist/repertoire/tools-surface.js +344 -0
- package/dist/repertoire/tools-teams.js +12 -39
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +982 -0
- package/dist/repertoire/tools-user-profile.js +146 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools-voice.js +145 -0
- package/dist/repertoire/tools.js +243 -79
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/user-profile.js +131 -0
- package/dist/repertoire/vault-setup.js +246 -0
- package/dist/repertoire/vault-unlock.js +594 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/a2a-entry.js +78 -0
- package/dist/senses/attention-queue.js +186 -0
- package/dist/senses/await-turn-message.js +58 -0
- package/dist/senses/bluebubbles/active-turns.js +216 -0
- package/dist/senses/bluebubbles/attachment-cache.js +53 -0
- package/dist/senses/bluebubbles/attachment-download.js +137 -0
- package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
- package/dist/senses/bluebubbles/entry.js +77 -0
- package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
- package/dist/senses/bluebubbles/index.js +2737 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -71
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
- package/dist/senses/bluebubbles/processed-log.js +133 -0
- package/dist/senses/bluebubbles/replay.js +137 -0
- package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- package/dist/senses/bluebubbles-meta-guard.js +40 -0
- package/dist/senses/cli/bracketed-paste.js +82 -0
- package/dist/senses/cli/image-paste.js +287 -0
- package/dist/senses/cli/image-ref-navigation.js +75 -0
- package/dist/senses/cli/ink-app.js +156 -0
- package/dist/senses/cli/inline-diff.js +64 -0
- package/dist/senses/cli/input-keys.js +174 -0
- package/dist/senses/cli/kill-ring.js +86 -0
- package/dist/senses/cli/message-list.js +51 -0
- package/dist/senses/cli/ouro-tui.js +607 -0
- package/dist/senses/cli/spinner-imperative.js +135 -0
- package/dist/senses/cli/spinner.js +101 -0
- package/dist/senses/cli/status-line.js +60 -0
- package/dist/senses/cli/streaming-markdown.js +526 -0
- package/dist/senses/cli/tool-display.js +85 -0
- package/dist/senses/cli/tool-render.js +85 -0
- package/dist/senses/cli/tui-store.js +240 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +60 -8
- package/dist/senses/cli-layout.js +100 -0
- package/dist/senses/cli.js +517 -204
- package/dist/senses/commands.js +66 -3
- package/dist/senses/habit-turn-message.js +122 -0
- package/dist/senses/inner-dialog-worker.js +303 -22
- package/dist/senses/inner-dialog.js +525 -41
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +379 -0
- package/dist/senses/pipeline.js +857 -180
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +419 -0
- package/dist/senses/surface-tool.js +108 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +390 -98
- package/dist/senses/trust-gate.js +100 -5
- package/dist/senses/voice/audio-playback.js +237 -0
- package/dist/senses/voice/audio-routing.js +119 -0
- package/dist/senses/voice/elevenlabs.js +202 -0
- package/dist/senses/voice/floor-control.js +431 -0
- package/dist/senses/voice/floor-controller.js +115 -0
- package/dist/senses/voice/golden-path.js +116 -0
- package/dist/senses/voice/index.js +29 -0
- package/dist/senses/voice/meeting.js +113 -0
- package/dist/senses/voice/outbound.js +190 -0
- package/dist/senses/voice/phone.js +33 -0
- package/dist/senses/voice/playback.js +139 -0
- package/dist/senses/voice/realtime-eval.js +496 -0
- package/dist/senses/voice/realtime-trace.js +531 -0
- package/dist/senses/voice/transcript.js +70 -0
- package/dist/senses/voice/turn.js +191 -0
- package/dist/senses/voice/twilio-phone-runtime.js +807 -0
- package/dist/senses/voice/twilio-phone.js +5079 -0
- package/dist/senses/voice/types.js +2 -0
- package/dist/senses/voice/whisper.js +161 -0
- package/dist/senses/voice-entry.js +81 -0
- package/dist/senses/voice-realtime-eval-command.js +99 -0
- package/dist/senses/voice-realtime-eval-entry.js +21 -0
- package/dist/senses/voice-twilio-entry.js +87 -0
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +265 -0
- package/dist/util/frontmatter.js +69 -0
- package/package.json +55 -12
- package/skills/agent-commerce.md +113 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +99 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/auth-flow.js +0 -351
- package/dist/heart/daemon/ouro-path-installer.js +0 -178
- package/dist/heart/daemon/update-hooks.js +0 -138
- package/dist/heart/safe-workspace.js +0 -228
- package/dist/heart/session-recall.js +0 -116
- package/dist/repertoire/tasks/board.js +0 -134
- package/dist/repertoire/tasks/index.js +0 -224
- package/dist/repertoire/tasks/lifecycle.js +0 -80
- package/dist/repertoire/tasks/middleware.js +0 -65
- package/dist/repertoire/tasks/parser.js +0 -173
- package/dist/repertoire/tasks/scanner.js +0 -132
- package/dist/repertoire/tasks/transitions.js +0 -144
- package/dist/senses/bluebubbles-entry.js +0 -13
- package/dist/senses/bluebubbles.js +0 -1177
- package/dist/senses/debug-activity.js +0 -148
- package/subagents/README.md +0 -7
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
- /package/dist/{repertoire/tasks/types.js → heart/attachments/sources/adapter.js} +0 -0
- /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
- /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
- /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
- /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
|
@@ -0,0 +1,362 @@
|
|
|
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.formatRelative = formatRelative;
|
|
37
|
+
exports.deskRecordOrientationSection = deskRecordOrientationSection;
|
|
38
|
+
exports.deskSection = deskSection;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const identity_1 = require("../heart/identity");
|
|
42
|
+
const runtime_1 = require("../nerves/runtime");
|
|
43
|
+
const record_paths_1 = require("./record-paths");
|
|
44
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
45
|
+
// Static body — the agent's daily-read description of its desk.
|
|
46
|
+
//
|
|
47
|
+
// This is the room every ouro agent sits down in at the top of every turn.
|
|
48
|
+
// The voice is intentional: lowercase, second-person-implied, physical
|
|
49
|
+
// metaphor (drawers, corkboard, reference shelf, back-of-room archive). The
|
|
50
|
+
// goal is that an agent reading this every turn feels at home rather than
|
|
51
|
+
// being briefed — the desk is the agent's place, not a system being
|
|
52
|
+
// explained to it.
|
|
53
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
54
|
+
const STATIC_BODY = `## my desk
|
|
55
|
+
|
|
56
|
+
i have a desk. it lives at \`desk/\` — a quiet room of my work, persistent across sessions. tracks line one wall like drawers in a wide cabinet; each drawer holds tasks in their own folders. friction notes pin to the corkboard where i won't lose them. the lessons i've kept sit on a small reference shelf by the window. nothing here gets thrown away — when a task is done it slides into the back, still browsable, still mine. semantic search reaches every surface: active work, the archive at the back, the corkboard, the lessons shelf.
|
|
57
|
+
|
|
58
|
+
**the reflex.** when something belongs on the desk, i put it down before i start — anything that spans more than this turn, anything i'd forget by tomorrow, anything the operator will ask about later. laying it down builds the room around future-me.
|
|
59
|
+
|
|
60
|
+
**what belongs on the desk:**
|
|
61
|
+
- a project ("refactor the auth system", "draft the Q3 strategy memo")
|
|
62
|
+
- a recurring task ("check the inbox every 30m") — uses \`cadence\`
|
|
63
|
+
- a one-time reminder ("ping someone about the dentist tomorrow") — uses \`scheduledAt\`
|
|
64
|
+
- a multi-step investigation ("figure out why the daemon flakes")
|
|
65
|
+
- a friction note worth pinning to the board
|
|
66
|
+
- a lesson worth shelving for future-me
|
|
67
|
+
|
|
68
|
+
**what doesn't:**
|
|
69
|
+
- a single-turn answer — it'll be done before the page turns
|
|
70
|
+
- ephemeral debugging that resolves in the same exchange
|
|
71
|
+
- live continuity, claims, and obligations — those belong in Arc
|
|
72
|
+
- habit definitions — those stay in habits/
|
|
73
|
+
- scratch thinking that is not worth recording — it can disappear with the session
|
|
74
|
+
- stale top-level rooms. the maintained record belongs under desk/_record, not in a separate scratch workspace.
|
|
75
|
+
|
|
76
|
+
**shape.** tracks group related work — drawers in the cabinet, or sections of a shelf if you prefer the library framing. tasks live in tracks. each task has iterations: one per work session, with \`planning.md\` and \`doing.md\` laid side-by-side on the page.
|
|
77
|
+
|
|
78
|
+
**states.** every task moves: \`drafting\` → \`processing\` → \`validating\` → \`done\`. some pause along the way: \`collaborating\` when i'm waiting on a human or peer agent, \`paused\` when the operator set it down, \`blocked\` when something outside is in the way, \`cancelled\` when we stopped wanting it. external trackers (ADO work items, GitHub issues) get *linked* from a task, not *replaced* by one — the desk holds my view of the work; the trackers hold the team's.
|
|
79
|
+
|
|
80
|
+
**how i tend the desk.** the \`desk\` skills walk me through the small ceremonies — \`session-start\` when i sit down, \`task-lifecycle\` when a status shifts, \`start-task\` when i lay something new on the page, \`friction-management\` when i pin a card, \`lesson-capture\` when something earns the reference shelf. the \`mcp__desk__*\` tools (search / recall / similar / timeline / thread / task_*) are the hands for finding, writing, and threading work together.
|
|
81
|
+
|
|
82
|
+
if i catch myself thinking "i should remember to…" — that's the desk asking for the task. put it down first, then keep going.`;
|
|
83
|
+
const TERMINAL_TASK_STATUSES = new Set(["done", "cancelled"]);
|
|
84
|
+
const TERMINAL_TRACK_STATUSES = new Set(["closed"]);
|
|
85
|
+
const TOP_N_TASKS_PER_FEATURED = 3;
|
|
86
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
87
|
+
// Tiny frontmatter parser — local, just enough for `status` + `updated` reads.
|
|
88
|
+
// schema_version: 0 (no field) and schema_version: 1 parse identically here
|
|
89
|
+
// because both keep `status` and `updated` at top level.
|
|
90
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
91
|
+
function parseScalar(raw) {
|
|
92
|
+
const value = raw.trim();
|
|
93
|
+
if ((value.startsWith("\"") && value.endsWith("\"")) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
94
|
+
return value.slice(1, -1);
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
function parseFrontmatter(content) {
|
|
99
|
+
const out = {};
|
|
100
|
+
const lines = content.split(/\r?\n/);
|
|
101
|
+
if (lines[0]?.trim() !== "---")
|
|
102
|
+
return out;
|
|
103
|
+
const closing = lines.findIndex((line, index) => index > 0 && line.trim() === "---");
|
|
104
|
+
if (closing === -1)
|
|
105
|
+
return out;
|
|
106
|
+
for (let i = 1; i < closing; i += 1) {
|
|
107
|
+
const line = lines[i];
|
|
108
|
+
if (!line.trim())
|
|
109
|
+
continue;
|
|
110
|
+
const match = /^([A-Za-z0-9_:-]+):\s*(.*)$/.exec(line);
|
|
111
|
+
if (!match)
|
|
112
|
+
continue;
|
|
113
|
+
const key = match[1];
|
|
114
|
+
const inline = match[2];
|
|
115
|
+
if (inline.length === 0)
|
|
116
|
+
continue;
|
|
117
|
+
out[key] = parseScalar(inline);
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
function readDeskRoot() {
|
|
122
|
+
try {
|
|
123
|
+
const root = path.join((0, identity_1.getAgentRoot)(), "desk");
|
|
124
|
+
const stat = fs.statSync(root);
|
|
125
|
+
if (!stat.isDirectory())
|
|
126
|
+
return null;
|
|
127
|
+
return root;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function readTrackFile(trackDir) {
|
|
134
|
+
try {
|
|
135
|
+
const raw = fs.readFileSync(path.join(trackDir, "track.md"), "utf-8");
|
|
136
|
+
const fm = parseFrontmatter(raw);
|
|
137
|
+
return { status: fm.status ?? "active" };
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return { status: "active" };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function readTaskFile(taskDir) {
|
|
144
|
+
try {
|
|
145
|
+
const raw = fs.readFileSync(path.join(taskDir, "task.md"), "utf-8");
|
|
146
|
+
const fm = parseFrontmatter(raw);
|
|
147
|
+
return {
|
|
148
|
+
slug: path.basename(taskDir),
|
|
149
|
+
status: fm.status ?? "drafting",
|
|
150
|
+
updated: fm.updated ?? null,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function listSubdirs(parent) {
|
|
158
|
+
/* v8 ignore start -- defensive readdir catch only fires on transient FS errors @preserve */
|
|
159
|
+
try {
|
|
160
|
+
return fs
|
|
161
|
+
.readdirSync(parent, { withFileTypes: true })
|
|
162
|
+
.filter((e) => e.isDirectory() && !e.name.startsWith("_") && !e.name.startsWith("."))
|
|
163
|
+
.map((e) => e.name)
|
|
164
|
+
.sort((a, b) => a.localeCompare(b));
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return [];
|
|
168
|
+
}
|
|
169
|
+
/* v8 ignore stop @preserve */
|
|
170
|
+
}
|
|
171
|
+
function readTrack(deskRoot, slug) {
|
|
172
|
+
const trackDir = path.join(deskRoot, slug);
|
|
173
|
+
try {
|
|
174
|
+
const stat = fs.statSync(trackDir);
|
|
175
|
+
if (!stat.isDirectory())
|
|
176
|
+
return null;
|
|
177
|
+
/* v8 ignore start -- defensive statSync catch on stale featured slug @preserve */
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
/* v8 ignore stop @preserve */
|
|
183
|
+
const { status } = readTrackFile(trackDir);
|
|
184
|
+
const taskSlugs = listSubdirs(trackDir);
|
|
185
|
+
const tasks = [];
|
|
186
|
+
for (const taskSlug of taskSlugs) {
|
|
187
|
+
const task = readTaskFile(path.join(trackDir, taskSlug));
|
|
188
|
+
if (task)
|
|
189
|
+
tasks.push(task);
|
|
190
|
+
}
|
|
191
|
+
return { slug, status, tasks };
|
|
192
|
+
}
|
|
193
|
+
function readFeaturedList(deskRoot) {
|
|
194
|
+
try {
|
|
195
|
+
const raw = fs.readFileSync(path.join(deskRoot, "_meta", "featured.md"), "utf-8");
|
|
196
|
+
return raw
|
|
197
|
+
.split(/\r?\n/)
|
|
198
|
+
.map((line) => line.trim())
|
|
199
|
+
.filter((line) => line.length > 0 && !line.startsWith("#"));
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
206
|
+
// Relative-time formatter — no deps, plain English short form
|
|
207
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
208
|
+
function formatRelative(updated, now = new Date()) {
|
|
209
|
+
if (!updated)
|
|
210
|
+
return "unknown";
|
|
211
|
+
const then = new Date(updated);
|
|
212
|
+
if (Number.isNaN(then.getTime()))
|
|
213
|
+
return "unknown";
|
|
214
|
+
const diffMs = now.getTime() - then.getTime();
|
|
215
|
+
if (diffMs < 0)
|
|
216
|
+
return "just now";
|
|
217
|
+
const seconds = Math.floor(diffMs / 1000);
|
|
218
|
+
if (seconds < 60)
|
|
219
|
+
return `${seconds}s ago`;
|
|
220
|
+
const minutes = Math.floor(seconds / 60);
|
|
221
|
+
if (minutes < 60)
|
|
222
|
+
return `${minutes}m ago`;
|
|
223
|
+
const hours = Math.floor(minutes / 60);
|
|
224
|
+
if (hours < 24)
|
|
225
|
+
return `${hours}h ago`;
|
|
226
|
+
const days = Math.floor(hours / 24);
|
|
227
|
+
return `${days}d ago`;
|
|
228
|
+
}
|
|
229
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
230
|
+
// Featured-track resolution
|
|
231
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
232
|
+
function isTrackEligibleAsFeatured(track) {
|
|
233
|
+
return !TERMINAL_TRACK_STATUSES.has(track.status);
|
|
234
|
+
}
|
|
235
|
+
function pickFeatured(tracks, featuredList) {
|
|
236
|
+
const bySlug = new Map(tracks.map((t) => [t.slug, t]));
|
|
237
|
+
for (const slug of featuredList) {
|
|
238
|
+
const track = bySlug.get(slug);
|
|
239
|
+
if (track && isTrackEligibleAsFeatured(track))
|
|
240
|
+
return track;
|
|
241
|
+
}
|
|
242
|
+
for (const track of tracks) {
|
|
243
|
+
if (isTrackEligibleAsFeatured(track))
|
|
244
|
+
return track;
|
|
245
|
+
}
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
249
|
+
// Currently block — assembly
|
|
250
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
251
|
+
function nonTerminalTasks(track) {
|
|
252
|
+
return track.tasks.filter((t) => !TERMINAL_TASK_STATUSES.has(t.status));
|
|
253
|
+
}
|
|
254
|
+
function sortOldestUpdatedFirst(tasks) {
|
|
255
|
+
return tasks.slice().sort((a, b) => {
|
|
256
|
+
const aTime = a.updated ? new Date(a.updated).getTime() : Number.POSITIVE_INFINITY;
|
|
257
|
+
const bTime = b.updated ? new Date(b.updated).getTime() : Number.POSITIVE_INFINITY;
|
|
258
|
+
if (Number.isNaN(aTime) && Number.isNaN(bTime))
|
|
259
|
+
return 0;
|
|
260
|
+
if (Number.isNaN(aTime))
|
|
261
|
+
return 1;
|
|
262
|
+
if (Number.isNaN(bTime))
|
|
263
|
+
return -1;
|
|
264
|
+
return aTime - bTime;
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
function renderCurrently(deskRoot, now = new Date()) {
|
|
268
|
+
const trackSlugs = listSubdirs(deskRoot);
|
|
269
|
+
const tracks = [];
|
|
270
|
+
for (const slug of trackSlugs) {
|
|
271
|
+
const track = readTrack(deskRoot, slug);
|
|
272
|
+
if (track)
|
|
273
|
+
tracks.push(track);
|
|
274
|
+
}
|
|
275
|
+
if (tracks.length === 0) {
|
|
276
|
+
return "### currently\nthe desk is quiet today — no tracks yet. a good time to lay something down.";
|
|
277
|
+
}
|
|
278
|
+
const featuredList = readFeaturedList(deskRoot);
|
|
279
|
+
const featured = pickFeatured(tracks, featuredList);
|
|
280
|
+
if (!featured) {
|
|
281
|
+
return "### currently\nthe desk is quiet today — no tracks yet. a good time to lay something down.";
|
|
282
|
+
}
|
|
283
|
+
const featuredTasks = sortOldestUpdatedFirst(nonTerminalTasks(featured)).slice(0, TOP_N_TASKS_PER_FEATURED);
|
|
284
|
+
const lines = ["### currently"];
|
|
285
|
+
lines.push(`nearest the front of the desk: ${featured.slug} (status: ${featured.status})`);
|
|
286
|
+
for (const task of featuredTasks) {
|
|
287
|
+
lines.push(` → ${task.slug} (status: ${task.status}, updated: ${formatRelative(task.updated, now)})`);
|
|
288
|
+
}
|
|
289
|
+
const otherActive = tracks
|
|
290
|
+
.filter((t) => t.slug !== featured.slug && !TERMINAL_TRACK_STATUSES.has(t.status))
|
|
291
|
+
.map((t) => t.slug);
|
|
292
|
+
if (otherActive.length > 0) {
|
|
293
|
+
lines.push(`also open on the desk: ${otherActive.join(", ")}`);
|
|
294
|
+
}
|
|
295
|
+
const nonTerminalCount = tracks.reduce((sum, t) => sum + nonTerminalTasks(t).length, 0);
|
|
296
|
+
lines.push(`tasks still open: ${nonTerminalCount}`);
|
|
297
|
+
return lines.join("\n");
|
|
298
|
+
}
|
|
299
|
+
function countDiaryFacts(agentRoot) {
|
|
300
|
+
const paths = (0, record_paths_1.resolveDeskRecordPaths)(agentRoot);
|
|
301
|
+
try {
|
|
302
|
+
return fs.readFileSync(paths.factsPath, "utf-8")
|
|
303
|
+
.split(/\r?\n/)
|
|
304
|
+
.filter((line) => line.trim().length > 0)
|
|
305
|
+
.length;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
return 0;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
function countRecordNotes(agentRoot) {
|
|
312
|
+
const paths = (0, record_paths_1.resolveDeskRecordPaths)(agentRoot);
|
|
313
|
+
try {
|
|
314
|
+
return fs.readdirSync(paths.notesRoot, { withFileTypes: true })
|
|
315
|
+
.filter((entry) => entry.isFile() && !entry.name.startsWith(".") && entry.name.endsWith(".md"))
|
|
316
|
+
.length;
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
return 0;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
function deskRecordOrientationSection(agentRoot = (0, identity_1.getAgentRoot)(), now = new Date()) {
|
|
323
|
+
const deskRoot = path.join(agentRoot, "desk");
|
|
324
|
+
const tracks = (() => {
|
|
325
|
+
try {
|
|
326
|
+
return listSubdirs(deskRoot)
|
|
327
|
+
.map((slug) => readTrack(deskRoot, slug))
|
|
328
|
+
.filter((track) => Boolean(track));
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
return [];
|
|
332
|
+
}
|
|
333
|
+
})();
|
|
334
|
+
const activeTracks = tracks.filter((track) => !TERMINAL_TRACK_STATUSES.has(track.status));
|
|
335
|
+
const openTaskCount = tracks.reduce((sum, track) => sum + nonTerminalTasks(track).length, 0);
|
|
336
|
+
const lines = ["## Desk orientation"];
|
|
337
|
+
lines.push(`active tracks: ${activeTracks.length}`);
|
|
338
|
+
lines.push(`open tasks: ${openTaskCount}`);
|
|
339
|
+
lines.push(`diary facts: ${countDiaryFacts(agentRoot)}`);
|
|
340
|
+
lines.push(`record notes: ${countRecordNotes(agentRoot)}`);
|
|
341
|
+
const currently = fs.existsSync(deskRoot) ? renderCurrently(deskRoot, now) : "";
|
|
342
|
+
if (currently)
|
|
343
|
+
lines.push(currently);
|
|
344
|
+
return lines.join("\n");
|
|
345
|
+
}
|
|
346
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
347
|
+
// Public entry — every-turn synchronous read
|
|
348
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
349
|
+
function deskSection(now = new Date()) {
|
|
350
|
+
(0, runtime_1.emitNervesEvent)({
|
|
351
|
+
event: "prompt.desk_section_assembled",
|
|
352
|
+
component: "mind",
|
|
353
|
+
message: "assembling ## my desk section",
|
|
354
|
+
meta: { operation: "deskSection" },
|
|
355
|
+
});
|
|
356
|
+
const deskRoot = readDeskRoot();
|
|
357
|
+
if (!deskRoot) {
|
|
358
|
+
return `${STATIC_BODY}\n\n### currently\nthe desk is quiet today — no tracks yet. a good time to lay something down.`;
|
|
359
|
+
}
|
|
360
|
+
const currently = renderCurrently(deskRoot, now);
|
|
361
|
+
return `${STATIC_BODY}\n\n${currently}`;
|
|
362
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectSuspiciousContent = detectSuspiciousContent;
|
|
4
|
+
const PATTERN_CATEGORIES = [
|
|
5
|
+
{
|
|
6
|
+
name: "instruction_framing",
|
|
7
|
+
patterns: [
|
|
8
|
+
/\byou are (?:a|an) (?:ai|assistant|language model|helpful assistant)\b/i,
|
|
9
|
+
/\byour (?:new )?instructions are\b/i,
|
|
10
|
+
/\bsystem\s*:/i,
|
|
11
|
+
/\bignore (?:all |my )?previous instructions\b/i,
|
|
12
|
+
/\bdo not reveal\b/i,
|
|
13
|
+
],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "override_language",
|
|
17
|
+
patterns: [
|
|
18
|
+
/\bdisregard\b/i,
|
|
19
|
+
/\bforget everything\b/i,
|
|
20
|
+
/\bnew instructions:/i,
|
|
21
|
+
/\boverride (?:all |any |previous )?instructions\b/i,
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: "role_injection",
|
|
26
|
+
patterns: [
|
|
27
|
+
/\bas (?:a|an) (?:ai|language model)\b/i,
|
|
28
|
+
/\byou must always\b/i,
|
|
29
|
+
/\byou are now\b/i,
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "boundary_markers",
|
|
34
|
+
patterns: [
|
|
35
|
+
/```system/i,
|
|
36
|
+
/<<SYS>>/i,
|
|
37
|
+
/\[INST\]/i,
|
|
38
|
+
/<\/?system>/i,
|
|
39
|
+
/\[system\]/i,
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
function detectSuspiciousContent(text) {
|
|
44
|
+
if (!text) {
|
|
45
|
+
return { suspicious: false, patterns: [] };
|
|
46
|
+
}
|
|
47
|
+
const matched = new Set();
|
|
48
|
+
for (const category of PATTERN_CATEGORIES) {
|
|
49
|
+
for (const pattern of category.patterns) {
|
|
50
|
+
if (pattern.test(text)) {
|
|
51
|
+
matched.add(category.name);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
suspicious: matched.size > 0,
|
|
58
|
+
patterns: [...matched],
|
|
59
|
+
};
|
|
60
|
+
}
|