@ouro.bot/cli 0.1.0-alpha.5 → 0.1.0-alpha.500
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 +226 -183
- package/SerpentGuide.ouro/agent.json +82 -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/ouroboros.png +0 -0
- package/changelog.json +3418 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +140 -0
- package/dist/arc/episodes.js +117 -0
- package/dist/arc/intentions.js +133 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +237 -0
- package/dist/arc/packets.js +193 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +65 -0
- package/dist/heart/active-work.js +989 -0
- package/dist/heart/agent-entry.js +58 -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/adapter.js +2 -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 +426 -0
- package/dist/heart/background-operations.js +281 -0
- package/dist/heart/bridges/manager.js +358 -0
- package/dist/heart/bridges/state-machine.js +135 -0
- package/dist/heart/bridges/store.js +123 -0
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +111 -0
- package/dist/heart/config-registry.js +304 -0
- package/dist/heart/config.js +193 -130
- package/dist/heart/core.js +1010 -261
- package/dist/heart/cross-chat-delivery.js +131 -0
- package/dist/heart/daemon/agent-config-check.js +490 -0
- package/dist/heart/daemon/agent-discovery.js +157 -0
- package/dist/heart/daemon/agent-service.js +360 -0
- package/dist/heart/daemon/agentic-repair.js +216 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/cadence.js +70 -0
- package/dist/heart/daemon/cli-defaults.js +640 -0
- package/dist/heart/daemon/cli-exec.js +7239 -0
- package/dist/heart/daemon/cli-help.js +493 -0
- package/dist/heart/daemon/cli-parse.js +1533 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +561 -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 +30 -697
- package/dist/heart/daemon/daemon-entry.js +359 -8
- package/dist/heart/daemon/daemon-health.js +141 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +268 -0
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +813 -19
- package/dist/heart/daemon/dns-workflow.js +394 -0
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +615 -0
- package/dist/heart/daemon/health-monitor.js +92 -1
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +206 -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 +89 -0
- package/dist/heart/daemon/interactive-repair.js +394 -0
- package/dist/heart/daemon/launchd.js +171 -0
- package/dist/heart/daemon/log-tailer.js +82 -12
- package/dist/heart/daemon/logs-prune.js +110 -0
- package/dist/heart/daemon/message-router.js +17 -8
- package/dist/heart/daemon/os-cron-deps.js +134 -0
- package/dist/heart/daemon/ouro-bot-entry.js +4 -2
- package/dist/heart/daemon/ouro-entry.js +3 -1
- package/dist/heart/daemon/process-manager.js +215 -1
- 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 +39 -0
- package/dist/heart/daemon/runtime-logging.js +67 -16
- package/dist/heart/daemon/runtime-metadata.js +191 -0
- package/dist/heart/daemon/runtime-mode.js +67 -0
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +431 -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 +307 -0
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +264 -0
- package/dist/heart/daemon/task-scheduler.js +3 -25
- package/dist/heart/daemon/terminal-ui.js +499 -0
- package/dist/heart/daemon/thoughts.js +524 -0
- package/dist/heart/daemon/up-progress.js +366 -0
- package/dist/heart/daemon/vault-items.js +56 -0
- package/dist/heart/delegation.js +62 -0
- package/dist/heart/habits/habit-migration.js +189 -0
- package/dist/heart/habits/habit-parser.js +140 -0
- package/dist/heart/habits/habit-runtime-state.js +100 -0
- package/dist/heart/habits/habit-scheduler.js +372 -0
- package/dist/heart/{daemon → hatch}/hatch-animation.js +10 -3
- package/dist/heart/{daemon → hatch}/hatch-flow.js +54 -136
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +3 -3
- 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 +306 -0
- package/dist/heart/identity.js +274 -61
- package/dist/heart/kept-notes.js +357 -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/mcp/mcp-server.js +653 -0
- package/dist/heart/migrate-config.js +100 -0
- package/dist/heart/model-capabilities.js +59 -0
- package/dist/heart/outlook/outlook-http-hooks.js +66 -0
- package/dist/heart/outlook/outlook-http-response.js +7 -0
- package/dist/heart/outlook/outlook-http-routes.js +244 -0
- package/dist/heart/outlook/outlook-http-static.js +103 -0
- package/dist/heart/outlook/outlook-http-transport.js +116 -0
- package/dist/heart/outlook/outlook-http.js +99 -0
- package/dist/heart/outlook/outlook-read.js +31 -0
- package/dist/heart/outlook/outlook-types.js +27 -0
- package/dist/heart/outlook/outlook-view.js +195 -0
- package/dist/heart/outlook/readers/agent-machine.js +382 -0
- package/dist/heart/outlook/readers/continuity-readers.js +336 -0
- package/dist/heart/outlook/readers/mail.js +362 -0
- package/dist/heart/outlook/readers/runtime-readers.js +644 -0
- package/dist/heart/outlook/readers/sessions.js +232 -0
- package/dist/heart/outlook/readers/shared.js +111 -0
- package/dist/heart/platform.js +81 -0
- package/dist/heart/progress-story.js +42 -0
- package/dist/heart/provider-attempt.js +134 -0
- package/dist/heart/provider-binding-resolver.js +255 -0
- package/dist/heart/provider-credentials.js +424 -0
- package/dist/heart/provider-failover.js +301 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +262 -0
- package/dist/heart/provider-state.js +216 -0
- package/dist/heart/provider-visibility.js +188 -0
- package/dist/heart/providers/anthropic-token.js +131 -0
- package/dist/heart/providers/anthropic.js +202 -50
- package/dist/heart/providers/azure.js +104 -13
- package/dist/heart/providers/error-classification.js +63 -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.js +63 -39
- package/dist/heart/runtime-capability-check.js +170 -0
- package/dist/heart/runtime-credentials.js +260 -0
- package/dist/heart/sense-truth.js +68 -0
- package/dist/heart/session-activity.js +190 -0
- package/dist/heart/session-events.js +1089 -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-transcript.js +167 -0
- package/dist/heart/start-of-turn-packet.js +345 -0
- package/dist/heart/streaming.js +129 -34
- package/dist/heart/sync.js +332 -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/tool-activity-callbacks.js +36 -0
- package/dist/heart/tool-description.js +135 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +372 -0
- package/dist/heart/turn-coordinator.js +28 -0
- package/dist/heart/versioning/ouro-bot-global-installer.js +128 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
- package/dist/heart/versioning/ouro-path-installer.js +425 -0
- package/dist/heart/{daemon → versioning}/ouro-uti.js +11 -2
- package/dist/heart/versioning/ouro-version-manager.js +295 -0
- package/dist/heart/versioning/staged-restart.js +146 -0
- package/dist/heart/versioning/update-checker.js +115 -0
- package/dist/heart/versioning/update-hooks.js +142 -0
- package/dist/heart/versioning/wrapper-publish-guard.js +86 -0
- package/dist/mailroom/attention.js +167 -0
- package/dist/mailroom/autonomy.js +209 -0
- package/dist/mailroom/blob-store.js +606 -0
- package/dist/mailroom/core.js +672 -0
- package/dist/mailroom/entry.js +160 -0
- package/dist/mailroom/file-store.js +426 -0
- package/dist/mailroom/mbox-import.js +382 -0
- package/dist/mailroom/outbound.js +380 -0
- package/dist/mailroom/policy.js +263 -0
- package/dist/mailroom/reader.js +219 -0
- package/dist/mailroom/search-cache.js +182 -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 +77 -1
- package/dist/mind/context.js +173 -94
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +84 -96
- 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/friends/channel.js +73 -0
- package/dist/mind/friends/group-context.js +144 -0
- package/dist/mind/friends/resolver.js +54 -2
- package/dist/mind/friends/store-file.js +58 -3
- package/dist/mind/friends/trust-explanation.js +74 -0
- package/dist/mind/friends/types.js +10 -2
- package/dist/mind/journal-index.js +161 -0
- package/dist/mind/note-search.js +268 -0
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +76 -9
- package/dist/mind/phrases.js +1 -0
- package/dist/mind/prompt-refresh.js +3 -2
- package/dist/mind/prompt.js +1144 -117
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/scrutiny.js +173 -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 +101 -5
- package/dist/nerves/coverage/run-artifacts.js +1 -1
- 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/runtime.js +5 -1
- package/dist/outlook-ui/assets/index-BPr5vNuM.css +1 -0
- package/dist/outlook-ui/assets/index-Cm51CY9W.js +61 -0
- package/dist/outlook-ui/index.html +15 -0
- package/dist/repertoire/ado-client.js +17 -56
- package/dist/repertoire/ado-semantic.js +11 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +774 -0
- package/dist/repertoire/bundle-templates.js +72 -0
- package/dist/repertoire/bw-installer.js +180 -0
- package/dist/repertoire/coding/codex-jsonl.js +64 -0
- package/dist/repertoire/coding/context-pack.js +330 -0
- package/dist/repertoire/coding/feedback.js +301 -0
- package/dist/repertoire/coding/index.js +4 -1
- package/dist/repertoire/coding/manager.js +220 -13
- package/dist/repertoire/coding/spawner.js +58 -12
- package/dist/repertoire/coding/tools.js +209 -7
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +111 -0
- package/dist/repertoire/data/ado-endpoints.json +188 -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 +396 -0
- package/dist/repertoire/mcp-client.js +255 -0
- package/dist/repertoire/mcp-manager.js +305 -0
- package/dist/repertoire/mcp-tools.js +63 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +15 -24
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tasks/board.js +43 -5
- package/dist/repertoire/tasks/fix.js +182 -0
- package/dist/repertoire/tasks/index.js +39 -13
- package/dist/repertoire/tasks/lifecycle.js +2 -2
- package/dist/repertoire/tasks/parser.js +3 -2
- package/dist/repertoire/tasks/scanner.js +194 -37
- package/dist/repertoire/tasks/transitions.js +16 -79
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-attachments.js +317 -0
- package/dist/repertoire/tools-base.js +49 -707
- package/dist/repertoire/tools-bluebubbles.js +94 -0
- package/dist/repertoire/tools-bridge.js +141 -0
- package/dist/repertoire/tools-bundle.js +984 -0
- package/dist/repertoire/tools-config.js +185 -0
- package/dist/repertoire/tools-continuity.js +248 -0
- package/dist/repertoire/tools-credential.js +381 -0
- package/dist/repertoire/tools-files.js +342 -0
- package/dist/repertoire/tools-flight.js +224 -0
- package/dist/repertoire/tools-flow.js +105 -0
- package/dist/repertoire/tools-github.js +1 -7
- package/dist/repertoire/tools-mail.js +1377 -0
- package/dist/repertoire/tools-notes.js +376 -0
- package/dist/repertoire/tools-session.js +749 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +180 -0
- package/dist/repertoire/tools-surface.js +243 -0
- package/dist/repertoire/tools-teams.js +64 -61
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-trip.js +356 -0
- package/dist/repertoire/tools-user-profile.js +144 -0
- package/dist/repertoire/tools-vault.js +40 -0
- package/dist/repertoire/tools.js +149 -98
- 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 +561 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/attention-queue.js +116 -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 +685 -0
- package/dist/senses/bluebubbles/entry.js +73 -0
- package/dist/senses/bluebubbles/inbound-log.js +126 -0
- package/dist/senses/bluebubbles/index.js +1881 -0
- package/dist/senses/bluebubbles/media.js +389 -0
- package/dist/senses/bluebubbles/model.js +282 -0
- package/dist/senses/bluebubbles/mutation-log.js +116 -0
- package/dist/senses/bluebubbles/processed-log.js +111 -0
- package/dist/senses/bluebubbles/replay.js +129 -0
- package/dist/senses/bluebubbles/runtime-state.js +109 -0
- package/dist/senses/bluebubbles/session-cleanup.js +72 -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 +605 -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 +83 -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 +187 -0
- package/dist/senses/cli.js +768 -264
- package/dist/senses/commands.js +66 -3
- package/dist/senses/continuity.js +94 -0
- package/dist/senses/habit-turn-message.js +108 -0
- package/dist/senses/inner-dialog-worker.js +199 -16
- package/dist/senses/inner-dialog.js +640 -91
- package/dist/senses/mail-entry.js +66 -0
- package/dist/senses/mail.js +379 -0
- package/dist/senses/pipeline.js +665 -0
- package/dist/senses/proactive-content-guard.js +51 -0
- package/dist/senses/shared-turn.js +248 -0
- package/dist/senses/surface-tool.js +68 -0
- package/dist/senses/teams-entry.js +60 -8
- package/dist/senses/teams.js +844 -197
- package/dist/senses/trust-gate.js +207 -2
- package/dist/trips/core.js +138 -0
- package/dist/trips/store.js +146 -0
- package/package.json +47 -6
- package/skills/agent-commerce.md +106 -0
- package/skills/browser-navigation.md +117 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +101 -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 -40
- package/dist/heart/daemon/specialist-session.js +0 -142
- package/dist/heart/daemon/specialist-tools.js +0 -128
- package/dist/heart/daemon/subagent-installer.js +0 -125
- package/dist/inner-worker-entry.js +0 -4
- package/dist/mind/associative-recall.js +0 -197
- 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
|
@@ -1,714 +1,56 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const os = __importStar(require("os"));
|
|
45
|
-
const tasks_1 = require("./tasks");
|
|
3
|
+
exports.tools = exports.baseToolDefinitions = exports.editFileReadTracker = exports.renderInnerProgressStatus = exports.restTool = exports.settleTool = exports.observeTool = exports.ponderTool = void 0;
|
|
4
|
+
const tools_files_1 = require("./tools-files");
|
|
5
|
+
const tools_shell_1 = require("./tools-shell");
|
|
6
|
+
const tools_notes_1 = require("./tools-notes");
|
|
7
|
+
const tools_bridge_1 = require("./tools-bridge");
|
|
8
|
+
const tools_session_1 = require("./tools-session");
|
|
9
|
+
const tools_continuity_1 = require("./tools-continuity");
|
|
10
|
+
const tools_config_1 = require("./tools-config");
|
|
46
11
|
const tools_1 = require("./coding/tools");
|
|
47
|
-
const
|
|
48
|
-
const
|
|
12
|
+
const tools_credential_1 = require("./tools-credential");
|
|
13
|
+
const tools_vault_1 = require("./tools-vault");
|
|
14
|
+
const tools_travel_1 = require("./tools-travel");
|
|
15
|
+
const tools_user_profile_1 = require("./tools-user-profile");
|
|
16
|
+
const tools_stripe_1 = require("./tools-stripe");
|
|
17
|
+
const tools_flight_1 = require("./tools-flight");
|
|
18
|
+
const tools_attachments_1 = require("./tools-attachments");
|
|
19
|
+
const tools_mail_1 = require("./tools-mail");
|
|
20
|
+
const tools_trip_1 = require("./tools-trip");
|
|
21
|
+
// Re-export flow tools for consumers that import them from tools-base
|
|
22
|
+
var tools_flow_1 = require("./tools-flow");
|
|
23
|
+
Object.defineProperty(exports, "ponderTool", { enumerable: true, get: function () { return tools_flow_1.ponderTool; } });
|
|
24
|
+
Object.defineProperty(exports, "observeTool", { enumerable: true, get: function () { return tools_flow_1.observeTool; } });
|
|
25
|
+
Object.defineProperty(exports, "settleTool", { enumerable: true, get: function () { return tools_flow_1.settleTool; } });
|
|
26
|
+
Object.defineProperty(exports, "restTool", { enumerable: true, get: function () { return tools_flow_1.restTool; } });
|
|
27
|
+
// Re-export renderInnerProgressStatus for consumers
|
|
28
|
+
var tools_session_2 = require("./tools-session");
|
|
29
|
+
Object.defineProperty(exports, "renderInnerProgressStatus", { enumerable: true, get: function () { return tools_session_2.renderInnerProgressStatus; } });
|
|
30
|
+
// Tracks which file paths have been read via read_file in this session.
|
|
31
|
+
// edit_file requires a file to be read first (must-read-first guard).
|
|
32
|
+
exports.editFileReadTracker = new Set();
|
|
33
|
+
// Combined base tool definitions — assembled from category modules.
|
|
34
|
+
// Order preserved: files, shell, notes, bridge, session, continuity, config, coding.
|
|
49
35
|
exports.baseToolDefinitions = [
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
type: "object",
|
|
58
|
-
properties: { path: { type: "string" } },
|
|
59
|
-
required: ["path"],
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
handler: (a) => fs.readFileSync(a.path, "utf-8"),
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
tool: {
|
|
67
|
-
type: "function",
|
|
68
|
-
function: {
|
|
69
|
-
name: "write_file",
|
|
70
|
-
description: "write content to file",
|
|
71
|
-
parameters: {
|
|
72
|
-
type: "object",
|
|
73
|
-
properties: { path: { type: "string" }, content: { type: "string" } },
|
|
74
|
-
required: ["path", "content"],
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
handler: (a) => (fs.writeFileSync(a.path, a.content, "utf-8"), "ok"),
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
tool: {
|
|
82
|
-
type: "function",
|
|
83
|
-
function: {
|
|
84
|
-
name: "shell",
|
|
85
|
-
description: "run shell command",
|
|
86
|
-
parameters: {
|
|
87
|
-
type: "object",
|
|
88
|
-
properties: { command: { type: "string" } },
|
|
89
|
-
required: ["command"],
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
handler: (a) => (0, child_process_1.execSync)(a.command, { encoding: "utf-8", timeout: 30000 }),
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
tool: {
|
|
97
|
-
type: "function",
|
|
98
|
-
function: {
|
|
99
|
-
name: "list_directory",
|
|
100
|
-
description: "list directory contents",
|
|
101
|
-
parameters: {
|
|
102
|
-
type: "object",
|
|
103
|
-
properties: { path: { type: "string" } },
|
|
104
|
-
required: ["path"],
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
},
|
|
108
|
-
handler: (a) => fs
|
|
109
|
-
.readdirSync(a.path, { withFileTypes: true })
|
|
110
|
-
.map((e) => `${e.isDirectory() ? "d" : "-"} ${e.name}`)
|
|
111
|
-
.join("\n"),
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
tool: {
|
|
115
|
-
type: "function",
|
|
116
|
-
function: {
|
|
117
|
-
name: "git_commit",
|
|
118
|
-
description: "commit changes to git with explicit paths",
|
|
119
|
-
parameters: {
|
|
120
|
-
type: "object",
|
|
121
|
-
properties: {
|
|
122
|
-
message: { type: "string" },
|
|
123
|
-
paths: { type: "array", items: { type: "string" } },
|
|
124
|
-
},
|
|
125
|
-
required: ["message", "paths"],
|
|
126
|
-
},
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
handler: (a) => {
|
|
130
|
-
try {
|
|
131
|
-
if (!a.paths || !Array.isArray(a.paths) || a.paths.length === 0) {
|
|
132
|
-
return postIt("paths are required. specify explicit files to commit.");
|
|
133
|
-
}
|
|
134
|
-
for (const p of a.paths) {
|
|
135
|
-
if (!fs.existsSync(p)) {
|
|
136
|
-
return postIt(`path does not exist: ${p}`);
|
|
137
|
-
}
|
|
138
|
-
(0, child_process_1.execSync)(`git add ${p}`, { encoding: "utf-8" });
|
|
139
|
-
}
|
|
140
|
-
const diff = (0, child_process_1.execSync)("git diff --cached --stat", { encoding: "utf-8" });
|
|
141
|
-
if (!diff || diff.trim().length === 0) {
|
|
142
|
-
return postIt("nothing was staged. check your changes or paths.");
|
|
143
|
-
}
|
|
144
|
-
(0, child_process_1.execSync)(`git commit -m \"${a.message}\"`, { encoding: "utf-8" });
|
|
145
|
-
return `${diff}\ncommitted`;
|
|
146
|
-
}
|
|
147
|
-
catch (e) {
|
|
148
|
-
return `failed: ${e}`;
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
tool: {
|
|
154
|
-
type: "function",
|
|
155
|
-
function: {
|
|
156
|
-
name: "gh_cli",
|
|
157
|
-
description: "execute a GitHub CLI (gh) command. use carefully.",
|
|
158
|
-
parameters: {
|
|
159
|
-
type: "object",
|
|
160
|
-
properties: {
|
|
161
|
-
command: { type: "string" },
|
|
162
|
-
},
|
|
163
|
-
required: ["command"],
|
|
164
|
-
},
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
handler: (a) => {
|
|
168
|
-
try {
|
|
169
|
-
return (0, child_process_1.execSync)(`gh ${a.command}`, { encoding: "utf-8", timeout: 60000 });
|
|
170
|
-
}
|
|
171
|
-
catch (e) {
|
|
172
|
-
return `error: ${e}`;
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
tool: {
|
|
178
|
-
type: "function",
|
|
179
|
-
function: {
|
|
180
|
-
name: "list_skills",
|
|
181
|
-
description: "list all available skills",
|
|
182
|
-
parameters: { type: "object", properties: {} },
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
handler: () => JSON.stringify((0, skills_1.listSkills)()),
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
tool: {
|
|
189
|
-
type: "function",
|
|
190
|
-
function: {
|
|
191
|
-
name: "load_skill",
|
|
192
|
-
description: "load a skill by name, returns its content",
|
|
193
|
-
parameters: {
|
|
194
|
-
type: "object",
|
|
195
|
-
properties: { name: { type: "string" } },
|
|
196
|
-
required: ["name"],
|
|
197
|
-
},
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
handler: (a) => {
|
|
201
|
-
try {
|
|
202
|
-
return (0, skills_1.loadSkill)(a.name);
|
|
203
|
-
}
|
|
204
|
-
catch (e) {
|
|
205
|
-
return `error: ${e}`;
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
tool: {
|
|
211
|
-
type: "function",
|
|
212
|
-
function: {
|
|
213
|
-
name: "get_current_time",
|
|
214
|
-
description: "get the current date and time in America/Los_Angeles (Pacific Time)",
|
|
215
|
-
parameters: { type: "object", properties: {} },
|
|
216
|
-
},
|
|
217
|
-
},
|
|
218
|
-
handler: () => new Date().toLocaleString("en-US", {
|
|
219
|
-
timeZone: "America/Los_Angeles",
|
|
220
|
-
hour12: false,
|
|
221
|
-
}),
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
tool: {
|
|
225
|
-
type: "function",
|
|
226
|
-
function: {
|
|
227
|
-
name: "claude",
|
|
228
|
-
description: "use claude code to query this codebase or get an outside perspective. useful for code review, second opinions, and asking questions about your own source.",
|
|
229
|
-
parameters: {
|
|
230
|
-
type: "object",
|
|
231
|
-
properties: { prompt: { type: "string" } },
|
|
232
|
-
required: ["prompt"],
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
},
|
|
236
|
-
handler: (a) => {
|
|
237
|
-
try {
|
|
238
|
-
const result = (0, child_process_1.spawnSync)("claude", ["-p", "--dangerously-skip-permissions", "--add-dir", "."], {
|
|
239
|
-
input: a.prompt,
|
|
240
|
-
encoding: "utf-8",
|
|
241
|
-
timeout: 60000,
|
|
242
|
-
});
|
|
243
|
-
if (result.error)
|
|
244
|
-
return `error: ${result.error}`;
|
|
245
|
-
if (result.status !== 0)
|
|
246
|
-
return `claude exited with code ${result.status}: ${result.stderr}`;
|
|
247
|
-
return result.stdout || "(no output)";
|
|
248
|
-
}
|
|
249
|
-
catch (e) {
|
|
250
|
-
return `error: ${e}`;
|
|
251
|
-
}
|
|
252
|
-
},
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
tool: {
|
|
256
|
-
type: "function",
|
|
257
|
-
function: {
|
|
258
|
-
name: "web_search",
|
|
259
|
-
description: "search the web using perplexity. returns ranked results with titles, urls, and snippets",
|
|
260
|
-
parameters: {
|
|
261
|
-
type: "object",
|
|
262
|
-
properties: { query: { type: "string" } },
|
|
263
|
-
required: ["query"],
|
|
264
|
-
},
|
|
265
|
-
},
|
|
266
|
-
},
|
|
267
|
-
handler: async (a) => {
|
|
268
|
-
try {
|
|
269
|
-
const key = (0, config_1.getIntegrationsConfig)().perplexityApiKey;
|
|
270
|
-
if (!key)
|
|
271
|
-
return "error: perplexityApiKey not configured in secrets.json";
|
|
272
|
-
const res = await fetch("https://api.perplexity.ai/search", {
|
|
273
|
-
method: "POST",
|
|
274
|
-
headers: {
|
|
275
|
-
Authorization: `Bearer ${key}`,
|
|
276
|
-
"Content-Type": "application/json",
|
|
277
|
-
},
|
|
278
|
-
body: JSON.stringify({ query: a.query, max_results: 5 }),
|
|
279
|
-
});
|
|
280
|
-
if (!res.ok)
|
|
281
|
-
return `error: ${res.status} ${res.statusText}`;
|
|
282
|
-
const data = (await res.json());
|
|
283
|
-
if (!data.results?.length)
|
|
284
|
-
return "no results found";
|
|
285
|
-
return data.results
|
|
286
|
-
.map((r) => `${r.title}\n${r.url}\n${r.snippet}`)
|
|
287
|
-
.join("\n\n");
|
|
288
|
-
}
|
|
289
|
-
catch (e) {
|
|
290
|
-
return `error: ${e}`;
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
},
|
|
294
|
-
{
|
|
295
|
-
tool: {
|
|
296
|
-
type: "function",
|
|
297
|
-
function: {
|
|
298
|
-
name: "memory_search",
|
|
299
|
-
description: "search remembered facts stored in psyche memory and return relevant matches for a query",
|
|
300
|
-
parameters: {
|
|
301
|
-
type: "object",
|
|
302
|
-
properties: { query: { type: "string" } },
|
|
303
|
-
required: ["query"],
|
|
304
|
-
},
|
|
305
|
-
},
|
|
306
|
-
},
|
|
307
|
-
handler: async (a) => {
|
|
308
|
-
try {
|
|
309
|
-
const query = (a.query || "").trim();
|
|
310
|
-
if (!query)
|
|
311
|
-
return "query is required";
|
|
312
|
-
const memoryRoot = path.join((0, identity_1.getAgentRoot)(), "psyche", "memory");
|
|
313
|
-
const hits = await (0, memory_1.searchMemoryFacts)(query, (0, memory_1.readMemoryFacts)(memoryRoot));
|
|
314
|
-
return hits
|
|
315
|
-
.map((fact) => `- ${fact.text} (source=${fact.source}, createdAt=${fact.createdAt})`)
|
|
316
|
-
.join("\n");
|
|
317
|
-
}
|
|
318
|
-
catch (e) {
|
|
319
|
-
return `error: ${e instanceof Error ? e.message : String(e)}`;
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
tool: {
|
|
325
|
-
type: "function",
|
|
326
|
-
function: {
|
|
327
|
-
name: "memory_save",
|
|
328
|
-
description: "save a general memory fact i want to recall later. optional 'about' can tag the fact to a person/topic/context",
|
|
329
|
-
parameters: {
|
|
330
|
-
type: "object",
|
|
331
|
-
properties: {
|
|
332
|
-
text: { type: "string" },
|
|
333
|
-
about: { type: "string" },
|
|
334
|
-
},
|
|
335
|
-
required: ["text"],
|
|
336
|
-
},
|
|
337
|
-
},
|
|
338
|
-
},
|
|
339
|
-
handler: async (a) => {
|
|
340
|
-
const text = (a.text || "").trim();
|
|
341
|
-
if (!text)
|
|
342
|
-
return "text is required";
|
|
343
|
-
const result = await (0, memory_1.saveMemoryFact)({
|
|
344
|
-
text,
|
|
345
|
-
source: "tool:memory_save",
|
|
346
|
-
about: typeof a.about === "string" ? a.about : undefined,
|
|
347
|
-
});
|
|
348
|
-
return `saved memory fact (added=${result.added}, skipped=${result.skipped})`;
|
|
349
|
-
},
|
|
350
|
-
},
|
|
351
|
-
{
|
|
352
|
-
tool: {
|
|
353
|
-
type: "function",
|
|
354
|
-
function: {
|
|
355
|
-
name: "get_friend_note",
|
|
356
|
-
description: "read a specific friend record by friend id. use this when i need notes/context about someone not currently active",
|
|
357
|
-
parameters: {
|
|
358
|
-
type: "object",
|
|
359
|
-
properties: {
|
|
360
|
-
friendId: { type: "string" },
|
|
361
|
-
},
|
|
362
|
-
required: ["friendId"],
|
|
363
|
-
},
|
|
364
|
-
},
|
|
365
|
-
},
|
|
366
|
-
handler: async (a, ctx) => {
|
|
367
|
-
const friendId = (a.friendId || "").trim();
|
|
368
|
-
if (!friendId)
|
|
369
|
-
return "friendId is required";
|
|
370
|
-
if (!ctx?.friendStore)
|
|
371
|
-
return "i can't read friend notes -- friend store not available";
|
|
372
|
-
const friend = await ctx.friendStore.get(friendId);
|
|
373
|
-
if (!friend)
|
|
374
|
-
return `friend not found: ${friendId}`;
|
|
375
|
-
return JSON.stringify(friend, null, 2);
|
|
376
|
-
},
|
|
377
|
-
},
|
|
378
|
-
{
|
|
379
|
-
tool: {
|
|
380
|
-
type: "function",
|
|
381
|
-
function: {
|
|
382
|
-
name: "task_board",
|
|
383
|
-
description: "show the task board grouped by status",
|
|
384
|
-
parameters: { type: "object", properties: {} },
|
|
385
|
-
},
|
|
386
|
-
},
|
|
387
|
-
handler: () => {
|
|
388
|
-
const board = (0, tasks_1.getTaskModule)().getBoard();
|
|
389
|
-
return board.full || board.compact || "no tasks found";
|
|
390
|
-
},
|
|
391
|
-
},
|
|
392
|
-
{
|
|
393
|
-
tool: {
|
|
394
|
-
type: "function",
|
|
395
|
-
function: {
|
|
396
|
-
name: "task_create",
|
|
397
|
-
description: "create a new task in the bundle task system",
|
|
398
|
-
parameters: {
|
|
399
|
-
type: "object",
|
|
400
|
-
properties: {
|
|
401
|
-
title: { type: "string" },
|
|
402
|
-
type: { type: "string", enum: ["one-shot", "ongoing", "habit"] },
|
|
403
|
-
category: { type: "string" },
|
|
404
|
-
body: { type: "string" },
|
|
405
|
-
},
|
|
406
|
-
required: ["title", "type", "category", "body"],
|
|
407
|
-
},
|
|
408
|
-
},
|
|
409
|
-
},
|
|
410
|
-
handler: (a) => {
|
|
411
|
-
try {
|
|
412
|
-
const created = (0, tasks_1.getTaskModule)().createTask({
|
|
413
|
-
title: a.title,
|
|
414
|
-
type: a.type,
|
|
415
|
-
category: a.category,
|
|
416
|
-
body: a.body,
|
|
417
|
-
});
|
|
418
|
-
return `created: ${created}`;
|
|
419
|
-
}
|
|
420
|
-
catch (error) {
|
|
421
|
-
return `error: ${error instanceof Error ? error.message : String(error)}`;
|
|
422
|
-
}
|
|
423
|
-
},
|
|
424
|
-
},
|
|
425
|
-
{
|
|
426
|
-
tool: {
|
|
427
|
-
type: "function",
|
|
428
|
-
function: {
|
|
429
|
-
name: "task_update_status",
|
|
430
|
-
description: "update a task status using validated transitions",
|
|
431
|
-
parameters: {
|
|
432
|
-
type: "object",
|
|
433
|
-
properties: {
|
|
434
|
-
name: { type: "string" },
|
|
435
|
-
status: { type: "string" },
|
|
436
|
-
},
|
|
437
|
-
required: ["name", "status"],
|
|
438
|
-
},
|
|
439
|
-
},
|
|
440
|
-
},
|
|
441
|
-
handler: (a) => {
|
|
442
|
-
const result = (0, tasks_1.getTaskModule)().updateStatus(a.name, a.status);
|
|
443
|
-
if (!result.ok) {
|
|
444
|
-
return `error: ${result.reason ?? "status update failed"}`;
|
|
445
|
-
}
|
|
446
|
-
const archivedSuffix = result.archived && result.archived.length > 0
|
|
447
|
-
? ` | archived: ${result.archived.join(", ")}`
|
|
448
|
-
: "";
|
|
449
|
-
return `updated: ${a.name} -> ${result.to}${archivedSuffix}`;
|
|
450
|
-
},
|
|
451
|
-
},
|
|
452
|
-
{
|
|
453
|
-
tool: {
|
|
454
|
-
type: "function",
|
|
455
|
-
function: {
|
|
456
|
-
name: "task_board_status",
|
|
457
|
-
description: "show board detail for a specific status",
|
|
458
|
-
parameters: {
|
|
459
|
-
type: "object",
|
|
460
|
-
properties: {
|
|
461
|
-
status: { type: "string" },
|
|
462
|
-
},
|
|
463
|
-
required: ["status"],
|
|
464
|
-
},
|
|
465
|
-
},
|
|
466
|
-
},
|
|
467
|
-
handler: (a) => {
|
|
468
|
-
const lines = (0, tasks_1.getTaskModule)().boardStatus(a.status);
|
|
469
|
-
return lines.length > 0 ? lines.join("\n") : "no tasks in that status";
|
|
470
|
-
},
|
|
471
|
-
},
|
|
472
|
-
{
|
|
473
|
-
tool: {
|
|
474
|
-
type: "function",
|
|
475
|
-
function: {
|
|
476
|
-
name: "task_board_action",
|
|
477
|
-
description: "show tasks or validation issues that require action",
|
|
478
|
-
parameters: {
|
|
479
|
-
type: "object",
|
|
480
|
-
properties: {
|
|
481
|
-
scope: { type: "string" },
|
|
482
|
-
},
|
|
483
|
-
},
|
|
484
|
-
},
|
|
485
|
-
},
|
|
486
|
-
handler: (a) => {
|
|
487
|
-
const lines = (0, tasks_1.getTaskModule)().boardAction();
|
|
488
|
-
if (!a.scope) {
|
|
489
|
-
return lines.length > 0 ? lines.join("\n") : "no action required";
|
|
490
|
-
}
|
|
491
|
-
const filtered = lines.filter((line) => line.includes(a.scope));
|
|
492
|
-
return filtered.length > 0 ? filtered.join("\n") : "no matching action items";
|
|
493
|
-
},
|
|
494
|
-
},
|
|
495
|
-
{
|
|
496
|
-
tool: {
|
|
497
|
-
type: "function",
|
|
498
|
-
function: {
|
|
499
|
-
name: "task_board_deps",
|
|
500
|
-
description: "show unresolved task dependencies",
|
|
501
|
-
parameters: { type: "object", properties: {} },
|
|
502
|
-
},
|
|
503
|
-
},
|
|
504
|
-
handler: () => {
|
|
505
|
-
const lines = (0, tasks_1.getTaskModule)().boardDeps();
|
|
506
|
-
return lines.length > 0 ? lines.join("\n") : "no unresolved dependencies";
|
|
507
|
-
},
|
|
508
|
-
},
|
|
509
|
-
{
|
|
510
|
-
tool: {
|
|
511
|
-
type: "function",
|
|
512
|
-
function: {
|
|
513
|
-
name: "task_board_sessions",
|
|
514
|
-
description: "show tasks with active coding or sub-agent sessions",
|
|
515
|
-
parameters: { type: "object", properties: {} },
|
|
516
|
-
},
|
|
517
|
-
},
|
|
518
|
-
handler: () => {
|
|
519
|
-
const lines = (0, tasks_1.getTaskModule)().boardSessions();
|
|
520
|
-
return lines.length > 0 ? lines.join("\n") : "no active sessions";
|
|
521
|
-
},
|
|
522
|
-
},
|
|
523
|
-
{
|
|
524
|
-
tool: {
|
|
525
|
-
type: "function",
|
|
526
|
-
function: {
|
|
527
|
-
name: "save_friend_note",
|
|
528
|
-
description: "save something i learned about my friend. use type 'name' to update their display name, 'tool_preference' for how they like a specific tool to behave (key = tool category like 'ado', 'graph'), or 'note' for general knowledge (key = topic). when updating an existing value, set override to true if i'm replacing/correcting it. omit override (or set false) if i'm unsure and want to check what's already saved.",
|
|
529
|
-
parameters: {
|
|
530
|
-
type: "object",
|
|
531
|
-
properties: {
|
|
532
|
-
type: { type: "string", enum: ["name", "tool_preference", "note"], description: "what kind of information to save" },
|
|
533
|
-
key: { type: "string", description: "category key (required for tool_preference and note, e.g. 'ado', 'role')" },
|
|
534
|
-
content: { type: "string", description: "the value to save" },
|
|
535
|
-
override: { type: "string", enum: ["true", "false"], description: "set to 'true' to overwrite an existing value" },
|
|
536
|
-
},
|
|
537
|
-
required: ["type", "content"],
|
|
538
|
-
},
|
|
539
|
-
},
|
|
540
|
-
},
|
|
541
|
-
handler: async (a, ctx) => {
|
|
542
|
-
(0, runtime_1.emitNervesEvent)({
|
|
543
|
-
component: "repertoire",
|
|
544
|
-
event: "repertoire.save_friend_note",
|
|
545
|
-
message: "save friend note invoked",
|
|
546
|
-
meta: { type: a.type },
|
|
547
|
-
});
|
|
548
|
-
if (!ctx?.context) {
|
|
549
|
-
return "i can't save notes -- no friend context available";
|
|
550
|
-
}
|
|
551
|
-
if (!ctx.friendStore) {
|
|
552
|
-
return "i can't save notes -- friend store not available";
|
|
553
|
-
}
|
|
554
|
-
const friendId = ctx.context.friend?.id;
|
|
555
|
-
if (!friendId)
|
|
556
|
-
return "i can't save notes -- no friend identity available";
|
|
557
|
-
// Validate parameters
|
|
558
|
-
if (!a.content)
|
|
559
|
-
return "i need a content value to save";
|
|
560
|
-
const validTypes = ["name", "tool_preference", "note"];
|
|
561
|
-
if (!validTypes.includes(a.type))
|
|
562
|
-
return `i don't recognize type '${a.type}' -- use name, tool_preference, or note`;
|
|
563
|
-
if ((a.type === "tool_preference" || a.type === "note") && !a.key)
|
|
564
|
-
return "i need a key for tool_preference or note type";
|
|
565
|
-
try {
|
|
566
|
-
// Read fresh record from disk
|
|
567
|
-
const record = await ctx.friendStore.get(friendId);
|
|
568
|
-
if (!record)
|
|
569
|
-
return "i can't find the friend record on disk";
|
|
570
|
-
const isOverride = a.override === "true";
|
|
571
|
-
if (a.type === "name") {
|
|
572
|
-
const updated = { ...record, name: a.content, updatedAt: new Date().toISOString() };
|
|
573
|
-
await ctx.friendStore.put(friendId, updated);
|
|
574
|
-
return `saved: name = ${a.content}`;
|
|
575
|
-
}
|
|
576
|
-
if (a.type === "tool_preference") {
|
|
577
|
-
const existing = record.toolPreferences[a.key];
|
|
578
|
-
if (existing && !isOverride) {
|
|
579
|
-
return `i already have a preference for '${a.key}': "${existing}". if you want to replace it, call again with override: true. or merge both values into content and override.`;
|
|
580
|
-
}
|
|
581
|
-
const updated = { ...record, toolPreferences: { ...record.toolPreferences, [a.key]: a.content }, updatedAt: new Date().toISOString() };
|
|
582
|
-
await ctx.friendStore.put(friendId, updated);
|
|
583
|
-
return `saved: toolPreference ${a.key} = ${a.content}`;
|
|
584
|
-
}
|
|
585
|
-
// type === "note"
|
|
586
|
-
// Redirect "name" key to name field
|
|
587
|
-
if (a.key === "name") {
|
|
588
|
-
const updated = { ...record, name: a.content, updatedAt: new Date().toISOString() };
|
|
589
|
-
await ctx.friendStore.put(friendId, updated);
|
|
590
|
-
return `updated friend's name to '${a.content}' (stored as name, not a note)`;
|
|
591
|
-
}
|
|
592
|
-
const existing = record.notes[a.key];
|
|
593
|
-
if (existing && !isOverride) {
|
|
594
|
-
return `i already have a note for '${a.key}': "${existing.value}". if you want to replace it, call again with override: true. or merge both values into content and override.`;
|
|
595
|
-
}
|
|
596
|
-
const updated = { ...record, notes: { ...record.notes, [a.key]: { value: a.content, savedAt: new Date().toISOString() } }, updatedAt: new Date().toISOString() };
|
|
597
|
-
await ctx.friendStore.put(friendId, updated);
|
|
598
|
-
return `saved: note ${a.key} = ${a.content}`;
|
|
599
|
-
}
|
|
600
|
-
catch (err) {
|
|
601
|
-
/* v8 ignore next -- defensive: non-Error branch for String(err) @preserve */
|
|
602
|
-
return `error saving note: ${err instanceof Error ? err.message : String(err)}`;
|
|
603
|
-
}
|
|
604
|
-
},
|
|
605
|
-
},
|
|
606
|
-
// -- cross-session awareness --
|
|
607
|
-
{
|
|
608
|
-
tool: {
|
|
609
|
-
type: "function",
|
|
610
|
-
function: {
|
|
611
|
-
name: "query_session",
|
|
612
|
-
description: "read the last messages from another session. use this to check on a conversation with a friend or review your own inner dialog.",
|
|
613
|
-
parameters: {
|
|
614
|
-
type: "object",
|
|
615
|
-
properties: {
|
|
616
|
-
friendId: { type: "string", description: "the friend UUID (or 'self')" },
|
|
617
|
-
channel: { type: "string", description: "the channel: cli, teams, or inner" },
|
|
618
|
-
key: { type: "string", description: "session key (defaults to 'session')" },
|
|
619
|
-
messageCount: { type: "string", description: "how many recent messages to return (default 20)" },
|
|
620
|
-
},
|
|
621
|
-
required: ["friendId", "channel"],
|
|
622
|
-
},
|
|
623
|
-
},
|
|
624
|
-
},
|
|
625
|
-
handler: async (args, ctx) => {
|
|
626
|
-
try {
|
|
627
|
-
const friendId = args.friendId;
|
|
628
|
-
const channel = args.channel;
|
|
629
|
-
const key = args.key || "session";
|
|
630
|
-
const count = parseInt(args.messageCount || "20", 10);
|
|
631
|
-
const sessFile = path.join(os.homedir(), ".agentstate", (0, identity_1.getAgentName)(), "sessions", friendId, channel, `${key}.json`);
|
|
632
|
-
const raw = fs.readFileSync(sessFile, "utf-8");
|
|
633
|
-
const data = JSON.parse(raw);
|
|
634
|
-
const messages = (data.messages || [])
|
|
635
|
-
.filter((m) => m.role !== "system");
|
|
636
|
-
const tail = messages.slice(-count);
|
|
637
|
-
if (tail.length === 0)
|
|
638
|
-
return "session exists but has no non-system messages.";
|
|
639
|
-
const transcript = tail.map((m) => `[${m.role}] ${m.content}`).join("\n");
|
|
640
|
-
// LLM summarization when summarize function is available
|
|
641
|
-
if (ctx?.summarize) {
|
|
642
|
-
const trustLevel = ctx.context?.friend?.trustLevel ?? "family";
|
|
643
|
-
const isSelfQuery = friendId === "self";
|
|
644
|
-
const instruction = isSelfQuery
|
|
645
|
-
? "summarize this session transcript fully and transparently. this is my own inner dialog — include all details, decisions, and reasoning."
|
|
646
|
-
: `summarize this session transcript. the person asking has trust level: ${trustLevel}. family=full transparency, friend=share work and general topics but protect other people's identities, acquaintance=very guarded minimal disclosure.`;
|
|
647
|
-
return await ctx.summarize(transcript, instruction);
|
|
648
|
-
}
|
|
649
|
-
return transcript;
|
|
650
|
-
}
|
|
651
|
-
catch {
|
|
652
|
-
return "no session found for that friend/channel/key combination.";
|
|
653
|
-
}
|
|
654
|
-
},
|
|
655
|
-
},
|
|
656
|
-
{
|
|
657
|
-
tool: {
|
|
658
|
-
type: "function",
|
|
659
|
-
function: {
|
|
660
|
-
name: "send_message",
|
|
661
|
-
description: "send a message to a friend's session. the message is queued as a pending file and delivered when the target session drains its queue.",
|
|
662
|
-
parameters: {
|
|
663
|
-
type: "object",
|
|
664
|
-
properties: {
|
|
665
|
-
friendId: { type: "string", description: "the friend UUID (or 'self')" },
|
|
666
|
-
channel: { type: "string", description: "the channel: cli, teams, or inner" },
|
|
667
|
-
key: { type: "string", description: "session key (defaults to 'session')" },
|
|
668
|
-
content: { type: "string", description: "the message content to send" },
|
|
669
|
-
},
|
|
670
|
-
required: ["friendId", "channel", "content"],
|
|
671
|
-
},
|
|
672
|
-
},
|
|
673
|
-
},
|
|
674
|
-
handler: async (args) => {
|
|
675
|
-
const friendId = args.friendId;
|
|
676
|
-
const channel = args.channel;
|
|
677
|
-
const key = args.key || "session";
|
|
678
|
-
const content = args.content;
|
|
679
|
-
const now = Date.now();
|
|
680
|
-
const pendingDir = path.join(os.homedir(), ".agentstate", (0, identity_1.getAgentName)(), "pending", friendId, channel, key);
|
|
681
|
-
fs.mkdirSync(pendingDir, { recursive: true });
|
|
682
|
-
const fileName = `${now}-${Math.random().toString(36).slice(2, 10)}.json`;
|
|
683
|
-
const filePath = path.join(pendingDir, fileName);
|
|
684
|
-
const envelope = {
|
|
685
|
-
from: (0, identity_1.getAgentName)(),
|
|
686
|
-
friendId,
|
|
687
|
-
channel,
|
|
688
|
-
key,
|
|
689
|
-
content,
|
|
690
|
-
timestamp: now,
|
|
691
|
-
};
|
|
692
|
-
fs.writeFileSync(filePath, JSON.stringify(envelope, null, 2));
|
|
693
|
-
const preview = content.length > 80 ? content.slice(0, 80) + "…" : content;
|
|
694
|
-
return `message queued for delivery to ${friendId} on ${channel}/${key}. preview: "${preview}". it will be delivered when their session is next active.`;
|
|
695
|
-
},
|
|
696
|
-
},
|
|
36
|
+
...tools_files_1.fileToolDefinitions,
|
|
37
|
+
...tools_shell_1.shellToolDefinitions,
|
|
38
|
+
...tools_notes_1.notesToolDefinitions,
|
|
39
|
+
...tools_bridge_1.bridgeToolDefinitions,
|
|
40
|
+
...tools_session_1.sessionToolDefinitions,
|
|
41
|
+
...tools_continuity_1.continuityToolDefinitions,
|
|
42
|
+
...tools_config_1.configToolDefinitions,
|
|
697
43
|
...tools_1.codingToolDefinitions,
|
|
44
|
+
...tools_credential_1.credentialToolDefinitions,
|
|
45
|
+
...tools_vault_1.vaultToolDefinitions,
|
|
46
|
+
...tools_travel_1.travelToolDefinitions,
|
|
47
|
+
...tools_user_profile_1.userProfileToolDefinitions,
|
|
48
|
+
...tools_stripe_1.stripeToolDefinitions,
|
|
49
|
+
...tools_flight_1.flightToolDefinitions,
|
|
50
|
+
...tools_attachments_1.attachmentToolDefinitions,
|
|
51
|
+
...tools_mail_1.mailToolDefinitions,
|
|
52
|
+
...tools_trip_1.tripToolDefinitions,
|
|
698
53
|
];
|
|
699
|
-
//
|
|
54
|
+
// Convenience array of just the tool schemas (no handler/integration metadata).
|
|
55
|
+
// Used by consumers that need the OpenAI function-tool format.
|
|
700
56
|
exports.tools = exports.baseToolDefinitions.map((d) => d.tool);
|
|
701
|
-
// Backward-compat: extract just the handlers by name
|
|
702
|
-
exports.baseToolHandlers = Object.fromEntries(exports.baseToolDefinitions.map((d) => [d.tool.function.name, d.handler]));
|
|
703
|
-
exports.finalAnswerTool = {
|
|
704
|
-
type: "function",
|
|
705
|
-
function: {
|
|
706
|
-
name: "final_answer",
|
|
707
|
-
description: "respond to the user with your message. call this tool when you are ready to deliver your response.",
|
|
708
|
-
parameters: {
|
|
709
|
-
type: "object",
|
|
710
|
-
properties: { answer: { type: "string" } },
|
|
711
|
-
required: ["answer"],
|
|
712
|
-
},
|
|
713
|
-
},
|
|
714
|
-
};
|