@ouro.bot/cli 0.1.0-alpha.40 → 0.1.0-alpha.401

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.
Files changed (333) hide show
  1. package/README.md +109 -14
  2. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +3 -2
  3. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  4. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  5. package/changelog.json +2465 -6
  6. package/dist/arc/attention-types.js +8 -0
  7. package/dist/arc/cares.js +140 -0
  8. package/dist/arc/episodes.js +117 -0
  9. package/dist/arc/intentions.js +133 -0
  10. package/dist/arc/json-store.js +117 -0
  11. package/dist/arc/obligations.js +237 -0
  12. package/dist/arc/packets.js +193 -0
  13. package/dist/arc/presence.js +185 -0
  14. package/dist/arc/task-lifecycle.js +65 -0
  15. package/dist/heart/active-work.js +832 -0
  16. package/dist/heart/agent-entry.js +58 -3
  17. package/dist/heart/attachments/image-normalize.js +194 -0
  18. package/dist/heart/attachments/materialize.js +97 -0
  19. package/dist/heart/attachments/originals.js +88 -0
  20. package/dist/heart/attachments/render.js +29 -0
  21. package/dist/heart/attachments/sources/adapter.js +2 -0
  22. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  23. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  24. package/dist/heart/attachments/sources/index.js +16 -0
  25. package/dist/heart/attachments/store.js +103 -0
  26. package/dist/heart/attachments/types.js +93 -0
  27. package/dist/heart/auth/auth-flow.js +417 -0
  28. package/dist/heart/bridges/manager.js +358 -0
  29. package/dist/heart/bridges/state-machine.js +135 -0
  30. package/dist/heart/bridges/store.js +123 -0
  31. package/dist/heart/bundle-state.js +168 -0
  32. package/dist/heart/commitments.js +111 -0
  33. package/dist/heart/config-registry.js +304 -0
  34. package/dist/heart/config.js +101 -128
  35. package/dist/heart/core.js +801 -217
  36. package/dist/heart/cross-chat-delivery.js +131 -0
  37. package/dist/heart/daemon/agent-config-check.js +397 -0
  38. package/dist/heart/daemon/agent-discovery.js +79 -3
  39. package/dist/heart/daemon/agent-service.js +360 -0
  40. package/dist/heart/daemon/agentic-repair.js +213 -0
  41. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  42. package/dist/heart/daemon/cadence.js +70 -0
  43. package/dist/heart/daemon/cli-defaults.js +599 -0
  44. package/dist/heart/daemon/cli-exec.js +3616 -0
  45. package/dist/heart/daemon/cli-help.js +396 -0
  46. package/dist/heart/daemon/cli-parse.js +1118 -0
  47. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  48. package/dist/heart/daemon/cli-render.js +560 -0
  49. package/dist/heart/daemon/cli-types.js +8 -0
  50. package/dist/heart/daemon/daemon-cli.js +28 -1582
  51. package/dist/heart/daemon/daemon-entry.js +356 -3
  52. package/dist/heart/daemon/daemon-health.js +141 -0
  53. package/dist/heart/daemon/daemon-runtime-sync.js +157 -12
  54. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  55. package/dist/heart/daemon/daemon.js +684 -58
  56. package/dist/heart/daemon/doctor-types.js +8 -0
  57. package/dist/heart/daemon/doctor.js +419 -0
  58. package/dist/heart/daemon/health-monitor.js +79 -1
  59. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  60. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  61. package/dist/heart/daemon/http-health-probe.js +80 -0
  62. package/dist/heart/daemon/inner-status.js +89 -0
  63. package/dist/heart/daemon/interactive-repair.js +209 -0
  64. package/dist/heart/daemon/launchd.js +46 -9
  65. package/dist/heart/daemon/log-tailer.js +82 -12
  66. package/dist/heart/daemon/logs-prune.js +105 -0
  67. package/dist/heart/daemon/message-router.js +17 -8
  68. package/dist/heart/daemon/os-cron-deps.js +134 -0
  69. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  70. package/dist/heart/daemon/ouro-entry.js +3 -1
  71. package/dist/heart/daemon/process-manager.js +201 -0
  72. package/dist/heart/daemon/provider-discovery.js +137 -0
  73. package/dist/heart/daemon/pulse.js +475 -0
  74. package/dist/heart/daemon/readiness-repair.js +216 -0
  75. package/dist/heart/daemon/run-hooks.js +2 -0
  76. package/dist/heart/daemon/runtime-logging.js +67 -16
  77. package/dist/heart/daemon/runtime-metadata.js +73 -0
  78. package/dist/heart/daemon/runtime-mode.js +67 -0
  79. package/dist/heart/daemon/safe-mode.js +161 -0
  80. package/dist/heart/daemon/sense-manager.js +119 -30
  81. package/dist/heart/daemon/session-id-resolver.js +131 -0
  82. package/dist/heart/daemon/skill-management-installer.js +94 -0
  83. package/dist/heart/daemon/socket-client.js +307 -0
  84. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  85. package/dist/heart/daemon/startup-tui.js +237 -0
  86. package/dist/heart/daemon/task-scheduler.js +3 -25
  87. package/dist/heart/daemon/thoughts.js +510 -0
  88. package/dist/heart/daemon/up-progress.js +135 -0
  89. package/dist/heart/delegation.js +62 -0
  90. package/dist/heart/habits/habit-migration.js +181 -0
  91. package/dist/heart/habits/habit-parser.js +140 -0
  92. package/dist/heart/habits/habit-scheduler.js +371 -0
  93. package/dist/heart/{daemon → hatch}/hatch-flow.js +53 -117
  94. package/dist/heart/{daemon → hatch}/hatch-specialist.js +3 -3
  95. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  96. package/dist/heart/{daemon → hatch}/specialist-tools.js +33 -12
  97. package/dist/heart/identity.js +161 -65
  98. package/dist/heart/kept-notes.js +357 -0
  99. package/dist/heart/kicks.js +1 -1
  100. package/dist/heart/machine-identity.js +161 -0
  101. package/dist/heart/mcp/mcp-server.js +653 -0
  102. package/dist/heart/migrate-config.js +100 -0
  103. package/dist/heart/model-capabilities.js +59 -0
  104. package/dist/heart/outlook/outlook-http-hooks.js +64 -0
  105. package/dist/heart/outlook/outlook-http-response.js +7 -0
  106. package/dist/heart/outlook/outlook-http-routes.js +232 -0
  107. package/dist/heart/outlook/outlook-http-static.js +99 -0
  108. package/dist/heart/outlook/outlook-http-transport.js +116 -0
  109. package/dist/heart/outlook/outlook-http.js +99 -0
  110. package/dist/heart/outlook/outlook-read.js +28 -0
  111. package/dist/heart/outlook/outlook-types.js +27 -0
  112. package/dist/heart/outlook/outlook-view.js +195 -0
  113. package/dist/heart/outlook/readers/agent-machine.js +359 -0
  114. package/dist/heart/outlook/readers/continuity-readers.js +332 -0
  115. package/dist/heart/outlook/readers/runtime-readers.js +660 -0
  116. package/dist/heart/outlook/readers/sessions.js +232 -0
  117. package/dist/heart/outlook/readers/shared.js +111 -0
  118. package/dist/heart/platform.js +81 -0
  119. package/dist/heart/progress-story.js +42 -0
  120. package/dist/heart/provider-attempt.js +133 -0
  121. package/dist/heart/provider-binding-resolver.js +239 -0
  122. package/dist/heart/provider-credentials.js +383 -0
  123. package/dist/heart/provider-failover.js +266 -0
  124. package/dist/heart/provider-models.js +81 -0
  125. package/dist/heart/provider-ping.js +237 -0
  126. package/dist/heart/provider-state.js +216 -0
  127. package/dist/heart/provider-visibility.js +186 -0
  128. package/dist/heart/providers/anthropic-token.js +131 -0
  129. package/dist/heart/providers/anthropic.js +193 -55
  130. package/dist/heart/providers/azure.js +103 -12
  131. package/dist/heart/providers/error-classification.js +63 -0
  132. package/dist/heart/providers/github-copilot.js +145 -0
  133. package/dist/heart/providers/minimax-vlm.js +189 -0
  134. package/dist/heart/providers/minimax.js +29 -7
  135. package/dist/heart/providers/openai-codex.js +39 -29
  136. package/dist/heart/runtime-credentials.js +181 -0
  137. package/dist/heart/session-activity.js +190 -0
  138. package/dist/heart/session-events.js +855 -0
  139. package/dist/heart/session-transcript.js +167 -0
  140. package/dist/heart/start-of-turn-packet.js +345 -0
  141. package/dist/heart/streaming.js +36 -27
  142. package/dist/heart/sync.js +332 -0
  143. package/dist/heart/target-resolution.js +127 -0
  144. package/dist/heart/tempo.js +93 -0
  145. package/dist/heart/temporal-view.js +41 -0
  146. package/dist/heart/tool-activity-callbacks.js +36 -0
  147. package/dist/heart/tool-description.js +135 -0
  148. package/dist/heart/tool-friction.js +55 -0
  149. package/dist/heart/tool-loop.js +200 -0
  150. package/dist/heart/turn-context.js +351 -0
  151. package/dist/heart/turn-coordinator.js +28 -0
  152. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +1 -1
  153. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  154. package/dist/heart/versioning/ouro-path-installer.js +301 -0
  155. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  156. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  157. package/dist/heart/{daemon → versioning}/update-checker.js +12 -2
  158. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  159. package/dist/mind/bundle-manifest.js +7 -1
  160. package/dist/mind/context.js +134 -87
  161. package/dist/mind/diary-integrity.js +60 -0
  162. package/dist/mind/{memory.js → diary.js} +84 -96
  163. package/dist/mind/embedding-provider.js +60 -0
  164. package/dist/mind/file-state.js +179 -0
  165. package/dist/mind/first-impressions.js +14 -1
  166. package/dist/mind/friends/channel.js +21 -0
  167. package/dist/mind/friends/group-context.js +144 -0
  168. package/dist/mind/friends/resolver.js +38 -1
  169. package/dist/mind/friends/store-file.js +39 -3
  170. package/dist/mind/friends/trust-explanation.js +74 -0
  171. package/dist/mind/friends/types.js +1 -1
  172. package/dist/mind/journal-index.js +161 -0
  173. package/dist/mind/note-search.js +268 -0
  174. package/dist/mind/obligation-steering.js +221 -0
  175. package/dist/mind/pending.js +66 -7
  176. package/dist/mind/prompt-refresh.js +3 -2
  177. package/dist/mind/prompt.js +946 -167
  178. package/dist/mind/provenance-trust.js +26 -0
  179. package/dist/mind/scrutiny.js +173 -0
  180. package/dist/nerves/cli-logging.js +7 -1
  181. package/dist/nerves/coverage/audit-rules.js +15 -6
  182. package/dist/nerves/coverage/audit.js +28 -2
  183. package/dist/nerves/coverage/cli.js +1 -1
  184. package/dist/nerves/coverage/contract.js +5 -5
  185. package/dist/nerves/coverage/file-completeness.js +83 -5
  186. package/dist/nerves/coverage/run-artifacts.js +1 -1
  187. package/dist/nerves/event-buffer.js +111 -0
  188. package/dist/nerves/index.js +224 -4
  189. package/dist/nerves/observation.js +20 -0
  190. package/dist/nerves/redact.js +79 -0
  191. package/dist/nerves/runtime.js +5 -1
  192. package/dist/outlook-ui/assets/index-BAcU08c-.css +1 -0
  193. package/dist/outlook-ui/assets/index-D7l3l4vY.js +61 -0
  194. package/dist/outlook-ui/index.html +15 -0
  195. package/dist/repertoire/ado-client.js +15 -56
  196. package/dist/repertoire/ado-semantic.js +11 -10
  197. package/dist/repertoire/api-client.js +97 -0
  198. package/dist/repertoire/bitwarden-store.js +519 -0
  199. package/dist/repertoire/bundle-templates.js +72 -0
  200. package/dist/repertoire/bw-installer.js +79 -0
  201. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  202. package/dist/repertoire/coding/context-pack.js +330 -0
  203. package/dist/repertoire/coding/feedback.js +197 -30
  204. package/dist/repertoire/coding/manager.js +158 -9
  205. package/dist/repertoire/coding/spawner.js +55 -9
  206. package/dist/repertoire/coding/tools.js +170 -7
  207. package/dist/repertoire/commerce-errors.js +109 -0
  208. package/dist/repertoire/commerce-self-test.js +156 -0
  209. package/dist/repertoire/credential-access.js +107 -0
  210. package/dist/repertoire/duffel-client.js +185 -0
  211. package/dist/repertoire/github-client.js +14 -55
  212. package/dist/repertoire/graph-client.js +11 -52
  213. package/dist/repertoire/guardrails.js +371 -0
  214. package/dist/repertoire/mcp-client.js +255 -0
  215. package/dist/repertoire/mcp-manager.js +305 -0
  216. package/dist/repertoire/mcp-tools.js +63 -0
  217. package/dist/repertoire/shell-sessions.js +133 -0
  218. package/dist/repertoire/skills.js +15 -24
  219. package/dist/repertoire/stripe-client.js +131 -0
  220. package/dist/repertoire/tasks/board.js +43 -5
  221. package/dist/repertoire/tasks/fix.js +182 -0
  222. package/dist/repertoire/tasks/index.js +26 -1
  223. package/dist/repertoire/tasks/lifecycle.js +2 -2
  224. package/dist/repertoire/tasks/parser.js +3 -2
  225. package/dist/repertoire/tasks/scanner.js +194 -37
  226. package/dist/repertoire/tasks/transitions.js +16 -78
  227. package/dist/repertoire/tool-results.js +29 -0
  228. package/dist/repertoire/tools-attachments.js +317 -0
  229. package/dist/repertoire/tools-base.js +42 -687
  230. package/dist/repertoire/tools-bluebubbles.js +1 -0
  231. package/dist/repertoire/tools-bridge.js +141 -0
  232. package/dist/repertoire/tools-bundle.js +984 -0
  233. package/dist/repertoire/tools-config.js +185 -0
  234. package/dist/repertoire/tools-continuity.js +248 -0
  235. package/dist/repertoire/tools-credential.js +182 -0
  236. package/dist/repertoire/tools-files.js +342 -0
  237. package/dist/repertoire/tools-flight.js +224 -0
  238. package/dist/repertoire/tools-flow.js +105 -0
  239. package/dist/repertoire/tools-github.js +1 -7
  240. package/dist/repertoire/tools-notes.js +376 -0
  241. package/dist/repertoire/tools-session.js +739 -0
  242. package/dist/repertoire/tools-shell.js +120 -0
  243. package/dist/repertoire/tools-stripe.js +180 -0
  244. package/dist/repertoire/tools-surface.js +243 -0
  245. package/dist/repertoire/tools-teams.js +9 -39
  246. package/dist/repertoire/tools-travel.js +125 -0
  247. package/dist/repertoire/tools-user-profile.js +144 -0
  248. package/dist/repertoire/tools-vault.js +40 -0
  249. package/dist/repertoire/tools.js +144 -113
  250. package/dist/repertoire/travel-api-client.js +360 -0
  251. package/dist/repertoire/user-profile.js +118 -0
  252. package/dist/repertoire/vault-setup.js +246 -0
  253. package/dist/repertoire/vault-unlock.js +382 -0
  254. package/dist/scripts/claude-code-hook.js +41 -0
  255. package/dist/scripts/claude-code-stop-hook.js +47 -0
  256. package/dist/senses/attention-queue.js +116 -0
  257. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  258. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  259. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +260 -9
  260. package/dist/senses/bluebubbles/entry.js +70 -0
  261. package/dist/senses/bluebubbles/inbound-log.js +113 -0
  262. package/dist/senses/bluebubbles/index.js +1620 -0
  263. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  264. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  265. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +45 -3
  266. package/dist/senses/bluebubbles/replay.js +129 -0
  267. package/dist/senses/bluebubbles/runtime-state.js +109 -0
  268. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  269. package/dist/senses/cli/bracketed-paste.js +82 -0
  270. package/dist/senses/cli/image-paste.js +287 -0
  271. package/dist/senses/cli/image-ref-navigation.js +75 -0
  272. package/dist/senses/cli/ink-app.js +156 -0
  273. package/dist/senses/cli/inline-diff.js +64 -0
  274. package/dist/senses/cli/input-keys.js +174 -0
  275. package/dist/senses/cli/kill-ring.js +86 -0
  276. package/dist/senses/cli/message-list.js +51 -0
  277. package/dist/senses/cli/ouro-tui.js +605 -0
  278. package/dist/senses/cli/spinner-imperative.js +135 -0
  279. package/dist/senses/cli/spinner.js +101 -0
  280. package/dist/senses/cli/status-line.js +60 -0
  281. package/dist/senses/cli/streaming-markdown.js +526 -0
  282. package/dist/senses/cli/tool-display.js +83 -0
  283. package/dist/senses/cli/tool-render.js +85 -0
  284. package/dist/senses/cli/tui-store.js +240 -0
  285. package/dist/senses/cli/virtual-list.js +35 -0
  286. package/dist/senses/cli-entry.js +60 -8
  287. package/dist/senses/cli-layout.js +187 -0
  288. package/dist/senses/cli.js +526 -211
  289. package/dist/senses/commands.js +66 -3
  290. package/dist/senses/continuity.js +94 -0
  291. package/dist/senses/habit-turn-message.js +108 -0
  292. package/dist/senses/inner-dialog-worker.js +112 -19
  293. package/dist/senses/inner-dialog.js +600 -95
  294. package/dist/senses/pipeline.js +539 -61
  295. package/dist/senses/proactive-content-guard.js +51 -0
  296. package/dist/senses/shared-turn.js +205 -0
  297. package/dist/senses/surface-tool.js +68 -0
  298. package/dist/senses/teams-entry.js +60 -8
  299. package/dist/senses/teams.js +569 -237
  300. package/dist/senses/trust-gate.js +5 -5
  301. package/package.json +28 -7
  302. package/skills/agent-commerce.md +106 -0
  303. package/skills/browser-navigation.md +110 -0
  304. package/skills/commerce-setup-guide.md +116 -0
  305. package/skills/commerce-setup.md +84 -0
  306. package/skills/configure-dev-tools.md +101 -0
  307. package/skills/travel-planning.md +134 -0
  308. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  309. package/dist/heart/daemon/subagent-installer.js +0 -134
  310. package/dist/mind/associative-recall.js +0 -197
  311. package/dist/senses/bluebubbles-entry.js +0 -11
  312. package/dist/senses/bluebubbles.js +0 -832
  313. package/dist/senses/debug-activity.js +0 -127
  314. package/subagents/README.md +0 -60
  315. package/subagents/work-doer.md +0 -235
  316. package/subagents/work-merger.md +0 -618
  317. package/subagents/work-planner.md +0 -382
  318. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  319. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  320. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  321. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  322. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  323. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  324. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  325. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  326. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  327. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  328. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  329. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  330. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  331. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  332. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  333. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,185 @@
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.configToolDefinitions = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const runtime_1 = require("../nerves/runtime");
40
+ const identity_1 = require("../heart/identity");
41
+ const config_registry_1 = require("../heart/config-registry");
42
+ exports.configToolDefinitions = [
43
+ {
44
+ tool: {
45
+ type: "function",
46
+ function: {
47
+ name: "read_config",
48
+ description: "Read current agent configuration with tier annotations, descriptions, defaults, and effects. Optionally filter by topic to see only related settings.",
49
+ parameters: {
50
+ type: "object",
51
+ properties: {
52
+ related_to: {
53
+ type: "string",
54
+ description: "Optional topic to filter results (e.g., 'model', 'logging', 'senses'). Case-insensitive partial match.",
55
+ },
56
+ },
57
+ },
58
+ },
59
+ },
60
+ handler: (a) => {
61
+ const entries = a.related_to
62
+ ? (0, config_registry_1.getRegistryEntriesByTopic)(a.related_to)
63
+ : (0, config_registry_1.getRegistryEntries)();
64
+ const agentRoot = (0, identity_1.getAgentRoot)();
65
+ const configPath = path.join(agentRoot, "agent.json");
66
+ let rawConfig = {};
67
+ try {
68
+ rawConfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
69
+ }
70
+ catch {
71
+ /* v8 ignore next -- defensive: agent.json read failure in read_config @preserve */
72
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.read_config_error", message: "failed to read agent.json", meta: { path: configPath } });
73
+ }
74
+ const result = entries.map((entry) => {
75
+ const parts = entry.path.split(".");
76
+ let current = rawConfig;
77
+ for (const part of parts) {
78
+ if (current && typeof current === "object" && !Array.isArray(current)) {
79
+ current = current[part];
80
+ }
81
+ else {
82
+ current = undefined;
83
+ break;
84
+ }
85
+ }
86
+ const isExplicit = current !== undefined;
87
+ let source;
88
+ let currentValue;
89
+ if (isExplicit) {
90
+ source = "explicit";
91
+ currentValue = current;
92
+ }
93
+ else if (entry.default !== undefined) {
94
+ source = "default";
95
+ currentValue = entry.default;
96
+ }
97
+ else {
98
+ source = "unset";
99
+ currentValue = null;
100
+ }
101
+ return {
102
+ path: entry.path,
103
+ currentValue,
104
+ source,
105
+ tier: entry.tier,
106
+ description: entry.description,
107
+ default: entry.default !== undefined ? entry.default : null,
108
+ effects: entry.effects,
109
+ topics: entry.topics,
110
+ };
111
+ });
112
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.read_config", message: `read_config returned ${result.length} entries`, meta: { count: result.length, topic: a.related_to ?? null } });
113
+ return JSON.stringify({ entries: result }, null, 2);
114
+ },
115
+ },
116
+ {
117
+ tool: {
118
+ type: "function",
119
+ function: {
120
+ name: "update_config",
121
+ description: "Update an agent configuration value. Managed keys (version, enabled) cannot be modified.",
122
+ parameters: {
123
+ type: "object",
124
+ properties: {
125
+ path: { type: "string", description: "Config key in dot-notation (e.g., 'context.contextMargin', 'logging.level')" },
126
+ value: { type: "string", description: "New value as JSON (e.g., '25', '\"debug\"', '[\"terminal\", \"ndjson\"]')" },
127
+ },
128
+ required: ["path", "value"],
129
+ },
130
+ },
131
+ },
132
+ handler: (a) => {
133
+ const entry = (0, config_registry_1.getRegistryEntry)(a.path);
134
+ if (!entry) {
135
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.update_config_error", message: `unknown config path: ${a.path}`, meta: { path: a.path } });
136
+ return `Error: unknown config path "${a.path}". Use read_config to see available paths.`;
137
+ }
138
+ let parsedValue;
139
+ try {
140
+ parsedValue = JSON.parse(a.value);
141
+ }
142
+ catch {
143
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.update_config_error", message: `invalid JSON value for ${a.path}`, meta: { path: a.path, value: a.value } });
144
+ return `Error: invalid JSON value. Provide value as valid JSON (e.g., 25, "debug", ["terminal"]).`;
145
+ }
146
+ // Validate value against registry entry's validator
147
+ /* v8 ignore next -- all current entries have validators; guard kept for future entries without one @preserve */
148
+ if (entry.validate) {
149
+ const validationError = entry.validate(parsedValue);
150
+ if (validationError) {
151
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.update_config_error", message: `validation failed for ${a.path}: ${validationError}`, meta: { path: a.path, value: a.value, validationError } });
152
+ return `Error: validation failed for "${a.path}": ${validationError}`;
153
+ }
154
+ }
155
+ // Managed: refuse
156
+ if (entry.tier === "managed") {
157
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.update_config_refused", message: `refused managed change to ${a.path}`, meta: { path: a.path, tier: "managed" } });
158
+ return `This key is managed by the harness and cannot be modified directly.`;
159
+ }
160
+ const agentRoot = (0, identity_1.getAgentRoot)();
161
+ const configPath = path.join(agentRoot, "agent.json");
162
+ let rawConfig;
163
+ try {
164
+ rawConfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
165
+ }
166
+ catch {
167
+ /* v8 ignore next -- defensive: agent.json read failure in update_config @preserve */
168
+ return `Error: failed to read agent.json at ${configPath}`;
169
+ }
170
+ // Apply change immediately
171
+ const parts = entry.path.split(".");
172
+ let target = rawConfig;
173
+ for (let i = 0; i < parts.length - 1; i++) {
174
+ if (!(parts[i] in target) || typeof target[parts[i]] !== "object" || target[parts[i]] === null) {
175
+ target[parts[i]] = {};
176
+ }
177
+ target = target[parts[i]];
178
+ }
179
+ target[parts[parts.length - 1]] = parsedValue;
180
+ fs.writeFileSync(configPath, JSON.stringify(rawConfig, null, 2) + "\n", "utf-8");
181
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.update_config_applied", message: `applied config change to ${a.path}`, meta: { path: a.path, tier: entry.tier, value: parsedValue } });
182
+ return `Success: "${a.path}" updated to ${JSON.stringify(parsedValue)}. Change applied immediately.`;
183
+ },
184
+ },
185
+ ];
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.continuityToolDefinitions = void 0;
4
+ const identity_1 = require("../heart/identity");
5
+ const runtime_1 = require("../nerves/runtime");
6
+ const episodes_1 = require("../arc/episodes");
7
+ const cares_1 = require("../arc/cares");
8
+ const presence_1 = require("../arc/presence");
9
+ const intentions_1 = require("../arc/intentions");
10
+ exports.continuityToolDefinitions = [
11
+ // ── Continuity tools ──────────────────────────────────────────────
12
+ {
13
+ tool: {
14
+ type: "function",
15
+ function: {
16
+ name: "query_episodes",
17
+ description: "Query recent episodes from my continuity log. Returns timestamped records of significant events (obligation shifts, coding milestones, bridge events, care events, turning points).",
18
+ parameters: {
19
+ type: "object",
20
+ properties: {
21
+ limit: { type: "number", description: "Maximum episodes to return (default 20)" },
22
+ kind: { type: "string", description: "Filter by episode kind: obligation_shift, coding_milestone, bridge_event, care_event, tempo_shift, turning_point" },
23
+ since: { type: "string", description: "ISO timestamp — only return episodes after this time" },
24
+ },
25
+ },
26
+ },
27
+ },
28
+ handler: (a) => {
29
+ const agentRoot = (0, identity_1.getAgentRoot)();
30
+ const options = {};
31
+ if (a.limit)
32
+ options.limit = parseInt(a.limit, 10);
33
+ if (a.kind)
34
+ options.kinds = [a.kind];
35
+ if (a.since)
36
+ options.since = a.since;
37
+ const episodes = (0, episodes_1.readRecentEpisodes)(agentRoot, options);
38
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.query_episodes", message: `queried ${episodes.length} episodes`, meta: { count: episodes.length } });
39
+ return JSON.stringify(episodes, null, 2);
40
+ },
41
+ },
42
+ {
43
+ tool: {
44
+ type: "function",
45
+ function: {
46
+ name: "capture_episode",
47
+ description: "Record a turning point or significant moment. This is my tool for saying 'that was important — keep it.' Nearly frictionless: only summary and whyItMattered required.",
48
+ parameters: {
49
+ type: "object",
50
+ properties: {
51
+ summary: { type: "string", description: "What happened" },
52
+ whyItMattered: { type: "string", description: "Why this was significant" },
53
+ kind: { type: "string", description: "Episode kind (default: turning_point)" },
54
+ salience: { type: "string", description: "low, medium, high, or critical (default: medium)" },
55
+ },
56
+ required: ["summary", "whyItMattered"],
57
+ },
58
+ },
59
+ },
60
+ handler: (a) => {
61
+ const agentRoot = (0, identity_1.getAgentRoot)();
62
+ const episode = (0, episodes_1.emitEpisode)(agentRoot, {
63
+ kind: a.kind ?? "turning_point",
64
+ summary: a.summary,
65
+ whyItMattered: a.whyItMattered,
66
+ relatedEntities: [],
67
+ salience: a.salience ?? "medium",
68
+ });
69
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.capture_episode", message: `captured episode ${episode.id}`, meta: { id: episode.id } });
70
+ return JSON.stringify(episode, null, 2);
71
+ },
72
+ },
73
+ {
74
+ tool: {
75
+ type: "function",
76
+ function: {
77
+ name: "query_presence",
78
+ description: "Check who's around — my own availability/lane and known peer agents.",
79
+ parameters: { type: "object", properties: {} },
80
+ },
81
+ },
82
+ handler: () => {
83
+ const agentRoot = (0, identity_1.getAgentRoot)();
84
+ const agentName = (0, identity_1.getAgentName)();
85
+ const self = (0, presence_1.readPresence)(agentRoot, agentName);
86
+ const peers = (0, presence_1.readPeerPresence)(agentRoot);
87
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.query_presence", message: `presence: self + ${peers.length} peers`, meta: { peerCount: peers.length } });
88
+ return JSON.stringify({ self, peers }, null, 2);
89
+ },
90
+ },
91
+ {
92
+ tool: {
93
+ type: "function",
94
+ function: {
95
+ name: "query_cares",
96
+ description: "Query things I care about — ongoing concerns, watched situations, projects, people.",
97
+ parameters: {
98
+ type: "object",
99
+ properties: {
100
+ status: { type: "string", description: "Filter by status: 'active', 'watching', 'resolved', 'dormant', or 'all' (default: active cares only)" },
101
+ },
102
+ },
103
+ },
104
+ },
105
+ handler: (a) => {
106
+ const agentRoot = (0, identity_1.getAgentRoot)();
107
+ const cares = a.status === "all" ? (0, cares_1.readCares)(agentRoot) : (0, cares_1.readActiveCares)(agentRoot);
108
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.query_cares", message: `queried ${cares.length} cares`, meta: { count: cares.length } });
109
+ return JSON.stringify(cares, null, 2);
110
+ },
111
+ },
112
+ {
113
+ tool: {
114
+ type: "function",
115
+ function: {
116
+ name: "care_manage",
117
+ description: "Create, update, or resolve a care. Cares are things I watch over — people, projects, missions, system health.",
118
+ parameters: {
119
+ type: "object",
120
+ properties: {
121
+ action: { type: "string", enum: ["create", "update", "resolve"], description: "What to do" },
122
+ id: { type: "string", description: "Care ID (required for update/resolve)" },
123
+ label: { type: "string", description: "Short label for the care" },
124
+ why: { type: "string", description: "Why this matters" },
125
+ salience: { type: "string", description: "low, medium, high, or critical" },
126
+ kind: { type: "string", description: "person, agent, project, mission, or system" },
127
+ stewardship: { type: "string", description: "mine, shared, or delegated" },
128
+ },
129
+ required: ["action"],
130
+ },
131
+ },
132
+ },
133
+ handler: (a) => {
134
+ const agentRoot = (0, identity_1.getAgentRoot)();
135
+ let result;
136
+ if (a.action === "create") {
137
+ result = (0, cares_1.createCare)(agentRoot, {
138
+ label: a.label ?? "untitled",
139
+ why: a.why ?? "",
140
+ kind: a.kind ?? "project",
141
+ status: "active",
142
+ salience: a.salience ?? "medium",
143
+ steward: a.stewardship ?? "mine",
144
+ relatedFriendIds: [],
145
+ relatedAgentIds: [],
146
+ relatedObligationIds: [],
147
+ relatedEpisodeIds: [],
148
+ currentRisk: null,
149
+ nextCheckAt: null,
150
+ });
151
+ }
152
+ else if (a.action === "update") {
153
+ const updates = {};
154
+ if (a.label)
155
+ updates.label = a.label;
156
+ if (a.why)
157
+ updates.why = a.why;
158
+ if (a.salience)
159
+ updates.salience = a.salience;
160
+ result = (0, cares_1.updateCare)(agentRoot, a.id, updates);
161
+ }
162
+ else if (a.action === "resolve") {
163
+ result = (0, cares_1.resolveCare)(agentRoot, a.id);
164
+ }
165
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.care_manage", message: `care ${a.action}`, meta: { action: a.action, id: a.id } });
166
+ return JSON.stringify(result, null, 2);
167
+ },
168
+ },
169
+ {
170
+ tool: {
171
+ type: "function",
172
+ function: {
173
+ name: "query_relationships",
174
+ description: "Query known agent relationships — familiarity, trust, shared missions, interaction history.",
175
+ parameters: {
176
+ type: "object",
177
+ properties: {
178
+ agentName: { type: "string", description: "Specific agent name to query (omit for all)" },
179
+ },
180
+ },
181
+ },
182
+ },
183
+ handler: async (a, ctx) => {
184
+ const allFriends = ctx?.friendStore?.listAll ? await ctx.friendStore.listAll() : [];
185
+ let agents = allFriends.filter((f) => f.kind === "agent");
186
+ if (a.agentName) {
187
+ const needle = a.agentName.toLowerCase();
188
+ agents = agents.filter((f) => f.name?.toLowerCase() === needle);
189
+ }
190
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.query_relationships", message: `queried relationships`, meta: { agentName: a.agentName ?? "all" } });
191
+ return JSON.stringify(agents, null, 2);
192
+ },
193
+ },
194
+ {
195
+ tool: {
196
+ type: "function",
197
+ function: {
198
+ name: "intention_capture",
199
+ description: "File a lightweight mental note — something I want to do or check later, below the ceremony threshold of tasks or cares. Cheap to create, easy to close.",
200
+ parameters: {
201
+ type: "object",
202
+ properties: {
203
+ content: { type: "string", description: "What I want to keep track of" },
204
+ salience: { type: "string", description: "low, medium, or high (default: low)" },
205
+ nudgeAfter: { type: "string", description: "ISO timestamp — nudge me after this time" },
206
+ },
207
+ required: ["content"],
208
+ },
209
+ },
210
+ },
211
+ handler: (a) => {
212
+ const agentRoot = (0, identity_1.getAgentRoot)();
213
+ const intention = (0, intentions_1.captureIntention)(agentRoot, {
214
+ content: a.content,
215
+ salience: a.salience ?? "low",
216
+ source: "tool",
217
+ ...(a.nudgeAfter ? { nudgeAfter: a.nudgeAfter } : {}),
218
+ });
219
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.intention_capture", message: `captured intention ${intention.id}`, meta: { id: intention.id } });
220
+ return JSON.stringify(intention, null, 2);
221
+ },
222
+ },
223
+ {
224
+ tool: {
225
+ type: "function",
226
+ function: {
227
+ name: "intention_manage",
228
+ description: "Resolve or dismiss an intention. Resolve = done. Dismiss = no longer relevant. Both remove it from active list.",
229
+ parameters: {
230
+ type: "object",
231
+ properties: {
232
+ action: { type: "string", enum: ["resolve", "dismiss"], description: "What to do" },
233
+ id: { type: "string", description: "Intention ID" },
234
+ },
235
+ required: ["action", "id"],
236
+ },
237
+ },
238
+ },
239
+ handler: (a) => {
240
+ const agentRoot = (0, identity_1.getAgentRoot)();
241
+ const result = a.action === "resolve"
242
+ ? (0, intentions_1.resolveIntention)(agentRoot, a.id)
243
+ : (0, intentions_1.dismissIntention)(agentRoot, a.id);
244
+ (0, runtime_1.emitNervesEvent)({ component: "repertoire", event: "repertoire.intention_manage", message: `intention ${a.action}: ${a.id}`, meta: { action: a.action, id: a.id } });
245
+ return JSON.stringify(result, null, 2);
246
+ },
247
+ },
248
+ ];
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.credentialToolDefinitions = void 0;
4
+ const credential_access_1 = require("./credential-access");
5
+ const runtime_1 = require("../nerves/runtime");
6
+ exports.credentialToolDefinitions = [
7
+ {
8
+ tool: {
9
+ type: "function",
10
+ function: {
11
+ name: "credential_get",
12
+ description: "Get credential metadata for a domain. Returns username, notes, and creation date. Never returns passwords — the credential gateway handles secret injection internally.",
13
+ parameters: {
14
+ type: "object",
15
+ properties: {
16
+ domain: {
17
+ type: "string",
18
+ description: "Domain to look up (e.g. 'airbnb.com', 'api.openweathermap.org')",
19
+ },
20
+ },
21
+ required: ["domain"],
22
+ },
23
+ },
24
+ },
25
+ handler: async (args) => {
26
+ (0, runtime_1.emitNervesEvent)({
27
+ component: "repertoire",
28
+ event: "repertoire.credential_tool_call",
29
+ message: "credential_get invoked",
30
+ meta: { tool: "credential_get", domain: args.domain },
31
+ });
32
+ try {
33
+ const store = (0, credential_access_1.getCredentialStore)();
34
+ const meta = await store.get(args.domain);
35
+ if (!meta) {
36
+ return `No credential found for "${args.domain}".`;
37
+ }
38
+ return JSON.stringify(meta, null, 2);
39
+ }
40
+ catch (err) {
41
+ /* v8 ignore next -- defensive: store.get wraps errors @preserve */
42
+ return `Credential error: ${err instanceof Error ? err.message : String(err)}`;
43
+ }
44
+ },
45
+ summaryKeys: ["domain"],
46
+ },
47
+ {
48
+ tool: {
49
+ type: "function",
50
+ function: {
51
+ name: "credential_store",
52
+ description: "Store credentials the agent acquired (e.g. during sign-up). The password is accepted in args because the model generated it. Stored passwords are never returned later — only metadata is visible.",
53
+ parameters: {
54
+ type: "object",
55
+ properties: {
56
+ domain: {
57
+ type: "string",
58
+ description: "Domain these credentials are for (e.g. 'airbnb.com')",
59
+ },
60
+ username: {
61
+ type: "string",
62
+ description: "Username or email for the account",
63
+ },
64
+ password: {
65
+ type: "string",
66
+ description: "Password for the account",
67
+ },
68
+ notes: {
69
+ type: "string",
70
+ description: "Optional notes about this credential",
71
+ },
72
+ },
73
+ required: ["domain", "username", "password"],
74
+ },
75
+ },
76
+ },
77
+ handler: async (args) => {
78
+ (0, runtime_1.emitNervesEvent)({
79
+ component: "repertoire",
80
+ event: "repertoire.credential_tool_call",
81
+ message: "credential_store invoked",
82
+ meta: { tool: "credential_store", domain: args.domain },
83
+ });
84
+ try {
85
+ const store = (0, credential_access_1.getCredentialStore)();
86
+ await store.store(args.domain, {
87
+ username: args.username,
88
+ password: args.password,
89
+ notes: args.notes,
90
+ });
91
+ return `Credentials stored for "${args.domain}".`;
92
+ }
93
+ catch (err) {
94
+ /* v8 ignore next -- defensive: store.store wraps errors @preserve */
95
+ return `Credential store error: ${err instanceof Error ? err.message : String(err)}`;
96
+ }
97
+ },
98
+ summaryKeys: ["domain"],
99
+ },
100
+ {
101
+ tool: {
102
+ type: "function",
103
+ function: {
104
+ name: "credential_list",
105
+ description: "List stored credential domains. Returns metadata only (domain, username, notes, creation date). Never returns passwords.",
106
+ parameters: {
107
+ type: "object",
108
+ properties: {
109
+ search: {
110
+ type: "string",
111
+ description: "Optional search filter to match against domain names",
112
+ },
113
+ },
114
+ },
115
+ },
116
+ },
117
+ handler: async (args) => {
118
+ (0, runtime_1.emitNervesEvent)({
119
+ component: "repertoire",
120
+ event: "repertoire.credential_tool_call",
121
+ message: "credential_list invoked",
122
+ meta: { tool: "credential_list" },
123
+ });
124
+ try {
125
+ const store = (0, credential_access_1.getCredentialStore)();
126
+ let items = await store.list();
127
+ // Client-side search filter
128
+ if (args.search) {
129
+ const term = args.search.toLowerCase();
130
+ items = items.filter((item) => item.domain.toLowerCase().includes(term) ||
131
+ (item.username && item.username.toLowerCase().includes(term)));
132
+ }
133
+ return JSON.stringify(items, null, 2);
134
+ }
135
+ catch (err) {
136
+ /* v8 ignore next -- defensive: store.list wraps errors @preserve */
137
+ return `Credential list error: ${err instanceof Error ? err.message : String(err)}`;
138
+ }
139
+ },
140
+ summaryKeys: ["search"],
141
+ },
142
+ {
143
+ tool: {
144
+ type: "function",
145
+ function: {
146
+ name: "credential_delete",
147
+ description: "Delete stored credentials for a domain.",
148
+ parameters: {
149
+ type: "object",
150
+ properties: {
151
+ domain: {
152
+ type: "string",
153
+ description: "Domain whose credentials should be deleted",
154
+ },
155
+ },
156
+ required: ["domain"],
157
+ },
158
+ },
159
+ },
160
+ handler: async (args) => {
161
+ (0, runtime_1.emitNervesEvent)({
162
+ component: "repertoire",
163
+ event: "repertoire.credential_tool_call",
164
+ message: "credential_delete invoked",
165
+ meta: { tool: "credential_delete", domain: args.domain },
166
+ });
167
+ try {
168
+ const store = (0, credential_access_1.getCredentialStore)();
169
+ const deleted = await store.delete(args.domain);
170
+ if (deleted) {
171
+ return `Credentials for "${args.domain}" deleted.`;
172
+ }
173
+ return `No credential found for "${args.domain}".`;
174
+ }
175
+ catch (err) {
176
+ /* v8 ignore next -- defensive: store.delete wraps errors @preserve */
177
+ return `Credential delete error: ${err instanceof Error ? err.message : String(err)}`;
178
+ }
179
+ },
180
+ summaryKeys: ["domain"],
181
+ },
182
+ ];