@ouro.bot/cli 0.1.0-alpha.30 → 0.1.0-alpha.300

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 (284) hide show
  1. package/README.md +188 -190
  2. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +3 -2
  3. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +1 -1
  4. package/changelog.json +1808 -0
  5. package/dist/arc/attention-types.js +8 -0
  6. package/dist/arc/cares.js +140 -0
  7. package/dist/arc/episodes.js +117 -0
  8. package/dist/arc/intentions.js +133 -0
  9. package/dist/arc/json-store.js +117 -0
  10. package/dist/arc/obligations.js +237 -0
  11. package/dist/arc/packets.js +203 -0
  12. package/dist/arc/presence.js +185 -0
  13. package/dist/heart/active-work.js +832 -0
  14. package/dist/heart/agent-entry.js +37 -2
  15. package/dist/heart/attachments/image-normalize.js +194 -0
  16. package/dist/heart/attachments/materialize.js +230 -0
  17. package/dist/heart/attachments/render.js +29 -0
  18. package/dist/heart/attachments/store.js +103 -0
  19. package/dist/heart/attachments/types.js +138 -0
  20. package/dist/heart/auth/auth-flow.js +456 -0
  21. package/dist/heart/bridges/manager.js +358 -0
  22. package/dist/heart/bridges/state-machine.js +135 -0
  23. package/dist/heart/bridges/store.js +123 -0
  24. package/dist/heart/bundle-state.js +168 -0
  25. package/dist/heart/commitments.js +111 -0
  26. package/dist/heart/config-registry.js +304 -0
  27. package/dist/heart/config.js +63 -30
  28. package/dist/heart/core.js +669 -195
  29. package/dist/heart/cross-chat-delivery.js +131 -0
  30. package/dist/heart/daemon/agent-config-check.js +149 -0
  31. package/dist/heart/daemon/agent-discovery.js +79 -3
  32. package/dist/heart/daemon/agent-service.js +360 -0
  33. package/dist/heart/daemon/cadence.js +70 -0
  34. package/dist/heart/daemon/cli-defaults.js +574 -0
  35. package/dist/heart/daemon/cli-exec.js +1945 -0
  36. package/dist/heart/daemon/cli-parse.js +808 -0
  37. package/dist/heart/daemon/cli-render.js +503 -0
  38. package/dist/heart/daemon/cli-types.js +8 -0
  39. package/dist/heart/daemon/daemon-cli.js +29 -1171
  40. package/dist/heart/daemon/daemon-entry.js +245 -3
  41. package/dist/heart/daemon/daemon-health.js +136 -0
  42. package/dist/heart/daemon/daemon-runtime-sync.js +153 -12
  43. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  44. package/dist/heart/daemon/daemon.js +706 -57
  45. package/dist/heart/daemon/health-monitor.js +38 -0
  46. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  47. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  48. package/dist/heart/daemon/inner-status.js +89 -0
  49. package/dist/heart/daemon/launchd.js +46 -9
  50. package/dist/heart/daemon/log-tailer.js +82 -12
  51. package/dist/heart/daemon/logs-prune.js +105 -0
  52. package/dist/heart/daemon/message-router.js +17 -8
  53. package/dist/heart/daemon/os-cron-deps.js +134 -0
  54. package/dist/heart/daemon/ouro-bot-entry.js +1 -1
  55. package/dist/heart/daemon/process-manager.js +180 -0
  56. package/dist/heart/daemon/pulse.js +463 -0
  57. package/dist/heart/daemon/run-hooks.js +2 -0
  58. package/dist/heart/daemon/runtime-logging.js +67 -16
  59. package/dist/heart/daemon/runtime-metadata.js +101 -0
  60. package/dist/heart/daemon/runtime-mode.js +67 -0
  61. package/dist/heart/daemon/safe-mode.js +161 -0
  62. package/dist/heart/daemon/sense-manager.js +72 -3
  63. package/dist/heart/daemon/session-id-resolver.js +131 -0
  64. package/dist/heart/daemon/skill-management-installer.js +94 -0
  65. package/dist/heart/daemon/socket-client.js +307 -0
  66. package/dist/heart/daemon/task-scheduler.js +3 -25
  67. package/dist/heart/daemon/thoughts.js +510 -0
  68. package/dist/heart/delegation.js +62 -0
  69. package/dist/heart/habits/habit-migration.js +181 -0
  70. package/dist/heart/habits/habit-parser.js +140 -0
  71. package/dist/heart/habits/habit-scheduler.js +371 -0
  72. package/dist/heart/{daemon → hatch}/hatch-flow.js +30 -120
  73. package/dist/heart/{daemon → hatch}/hatch-specialist.js +3 -3
  74. package/dist/heart/{daemon → hatch}/specialist-prompt.js +10 -7
  75. package/dist/heart/{daemon → hatch}/specialist-tools.js +49 -3
  76. package/dist/heart/identity.js +163 -60
  77. package/dist/heart/kicks.js +2 -20
  78. package/dist/heart/mcp/mcp-server.js +653 -0
  79. package/dist/heart/migrate-config.js +127 -0
  80. package/dist/heart/model-capabilities.js +59 -0
  81. package/dist/heart/outlook/outlook-http.js +439 -0
  82. package/dist/heart/outlook/outlook-read.js +1618 -0
  83. package/dist/heart/outlook/outlook-render.js +1032 -0
  84. package/dist/heart/outlook/outlook-types.js +7 -0
  85. package/dist/heart/outlook/outlook-view.js +194 -0
  86. package/dist/heart/progress-story.js +42 -0
  87. package/dist/heart/provider-failover.js +88 -0
  88. package/dist/heart/provider-ping.js +162 -0
  89. package/dist/heart/providers/anthropic-token.js +163 -0
  90. package/dist/heart/providers/anthropic.js +169 -46
  91. package/dist/heart/providers/azure.js +98 -11
  92. package/dist/heart/providers/error-classification.js +63 -0
  93. package/dist/heart/providers/github-copilot.js +136 -0
  94. package/dist/heart/providers/minimax-vlm.js +189 -0
  95. package/dist/heart/providers/minimax.js +23 -5
  96. package/dist/heart/providers/openai-codex.js +33 -22
  97. package/dist/heart/session-activity.js +172 -0
  98. package/dist/heart/session-recall.js +216 -0
  99. package/dist/heart/start-of-turn-packet.js +339 -0
  100. package/dist/heart/streaming.js +36 -27
  101. package/dist/heart/sync.js +332 -0
  102. package/dist/heart/target-resolution.js +127 -0
  103. package/dist/heart/tempo.js +93 -0
  104. package/dist/heart/temporal-view.js +41 -0
  105. package/dist/heart/tool-activity-callbacks.js +36 -0
  106. package/dist/heart/tool-description.js +135 -0
  107. package/dist/heart/tool-friction.js +55 -0
  108. package/dist/heart/tool-loop.js +200 -0
  109. package/dist/heart/turn-context.js +358 -0
  110. package/dist/heart/turn-coordinator.js +28 -0
  111. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +1 -1
  112. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  113. package/dist/heart/{daemon → versioning}/ouro-path-installer.js +78 -35
  114. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  115. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  116. package/dist/heart/{daemon → versioning}/update-checker.js +12 -2
  117. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  118. package/dist/mind/associative-recall.js +135 -66
  119. package/dist/mind/bundle-manifest.js +8 -1
  120. package/dist/mind/context.js +125 -14
  121. package/dist/mind/diary-integrity.js +60 -0
  122. package/dist/mind/{memory.js → diary.js} +84 -96
  123. package/dist/mind/embedding-provider.js +60 -0
  124. package/dist/mind/file-state.js +179 -0
  125. package/dist/mind/first-impressions.js +14 -1
  126. package/dist/mind/friends/channel.js +56 -0
  127. package/dist/mind/friends/group-context.js +144 -0
  128. package/dist/mind/friends/resolver.js +37 -0
  129. package/dist/mind/friends/store-file.js +58 -3
  130. package/dist/mind/friends/trust-explanation.js +74 -0
  131. package/dist/mind/friends/types.js +8 -0
  132. package/dist/mind/journal-index.js +161 -0
  133. package/dist/mind/obligation-steering.js +221 -0
  134. package/dist/mind/pending.js +76 -9
  135. package/dist/mind/prompt.js +922 -109
  136. package/dist/mind/scrutiny.js +173 -0
  137. package/dist/mind/token-estimate.js +8 -12
  138. package/dist/nerves/cli-logging.js +7 -1
  139. package/dist/nerves/coverage/audit.js +1 -1
  140. package/dist/nerves/coverage/file-completeness.js +59 -5
  141. package/dist/nerves/coverage/run-artifacts.js +1 -1
  142. package/dist/nerves/event-buffer.js +111 -0
  143. package/dist/nerves/index.js +224 -4
  144. package/dist/nerves/observation.js +20 -0
  145. package/dist/nerves/redact.js +79 -0
  146. package/dist/nerves/runtime.js +5 -1
  147. package/dist/outlook-ui/assets/index-Ck8agNeO.js +61 -0
  148. package/dist/outlook-ui/assets/index-LwChZTgL.css +1 -0
  149. package/dist/outlook-ui/index.html +15 -0
  150. package/dist/repertoire/ado-client.js +15 -56
  151. package/dist/repertoire/ado-semantic.js +11 -10
  152. package/dist/repertoire/api-client.js +97 -0
  153. package/dist/repertoire/bitwarden-store.js +319 -0
  154. package/dist/repertoire/bundle-templates.js +72 -0
  155. package/dist/repertoire/bw-installer.js +79 -0
  156. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  157. package/dist/repertoire/coding/context-pack.js +330 -0
  158. package/dist/repertoire/coding/feedback.js +197 -30
  159. package/dist/repertoire/coding/manager.js +159 -11
  160. package/dist/repertoire/coding/spawner.js +55 -9
  161. package/dist/repertoire/coding/tools.js +170 -7
  162. package/dist/repertoire/commerce-errors.js +109 -0
  163. package/dist/repertoire/commerce-self-test.js +156 -0
  164. package/dist/repertoire/credential-access.js +527 -0
  165. package/dist/repertoire/duffel-client.js +185 -0
  166. package/dist/repertoire/github-client.js +14 -55
  167. package/dist/repertoire/graph-client.js +11 -52
  168. package/dist/repertoire/guardrails.js +375 -0
  169. package/dist/repertoire/mcp-client.js +255 -0
  170. package/dist/repertoire/mcp-manager.js +305 -0
  171. package/dist/repertoire/mcp-tools.js +63 -0
  172. package/dist/repertoire/shell-sessions.js +133 -0
  173. package/dist/repertoire/skills.js +14 -23
  174. package/dist/repertoire/stripe-client.js +131 -0
  175. package/dist/repertoire/tasks/board.js +43 -5
  176. package/dist/repertoire/tasks/fix.js +182 -0
  177. package/dist/repertoire/tasks/index.js +28 -10
  178. package/dist/repertoire/tasks/lifecycle.js +2 -2
  179. package/dist/repertoire/tasks/parser.js +3 -2
  180. package/dist/repertoire/tasks/scanner.js +194 -37
  181. package/dist/repertoire/tasks/transitions.js +11 -28
  182. package/dist/repertoire/tool-results.js +29 -0
  183. package/dist/repertoire/tools-attachments.js +316 -0
  184. package/dist/repertoire/tools-base.js +45 -771
  185. package/dist/repertoire/tools-bluebubbles.js +94 -0
  186. package/dist/repertoire/tools-bridge.js +141 -0
  187. package/dist/repertoire/tools-bundle.js +984 -0
  188. package/dist/repertoire/tools-config.js +185 -0
  189. package/dist/repertoire/tools-continuity.js +248 -0
  190. package/dist/repertoire/tools-credential.js +182 -0
  191. package/dist/repertoire/tools-files.js +342 -0
  192. package/dist/repertoire/tools-flight.js +224 -0
  193. package/dist/repertoire/tools-flow.js +105 -0
  194. package/dist/repertoire/tools-github.js +1 -7
  195. package/dist/repertoire/tools-memory.js +374 -0
  196. package/dist/repertoire/tools-session.js +739 -0
  197. package/dist/repertoire/tools-shell.js +120 -0
  198. package/dist/repertoire/tools-stripe.js +180 -0
  199. package/dist/repertoire/tools-surface.js +243 -0
  200. package/dist/repertoire/tools-teams.js +12 -62
  201. package/dist/repertoire/tools-travel.js +125 -0
  202. package/dist/repertoire/tools-user-profile.js +144 -0
  203. package/dist/repertoire/tools-vault.js +110 -0
  204. package/dist/repertoire/tools.js +148 -130
  205. package/dist/repertoire/travel-api-client.js +360 -0
  206. package/dist/repertoire/user-profile.js +118 -0
  207. package/dist/repertoire/vault-setup.js +241 -0
  208. package/dist/scripts/claude-code-hook.js +41 -0
  209. package/dist/scripts/claude-code-stop-hook.js +47 -0
  210. package/dist/senses/attention-queue.js +116 -0
  211. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  212. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  213. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +143 -9
  214. package/dist/senses/bluebubbles/entry.js +13 -0
  215. package/dist/senses/bluebubbles/inbound-log.js +113 -0
  216. package/dist/senses/bluebubbles/index.js +1427 -0
  217. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +122 -70
  218. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +43 -12
  219. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +46 -6
  220. package/dist/senses/bluebubbles/replay.js +129 -0
  221. package/dist/senses/bluebubbles/runtime-state.js +109 -0
  222. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +12 -13
  223. package/dist/senses/cli/bracketed-paste.js +82 -0
  224. package/dist/senses/cli/image-paste.js +287 -0
  225. package/dist/senses/cli/image-ref-navigation.js +75 -0
  226. package/dist/senses/cli/ink-app.js +156 -0
  227. package/dist/senses/cli/inline-diff.js +64 -0
  228. package/dist/senses/cli/input-keys.js +174 -0
  229. package/dist/senses/cli/kill-ring.js +86 -0
  230. package/dist/senses/cli/message-list.js +51 -0
  231. package/dist/senses/cli/ouro-tui.js +595 -0
  232. package/dist/senses/cli/spinner-imperative.js +135 -0
  233. package/dist/senses/cli/spinner.js +101 -0
  234. package/dist/senses/cli/status-line.js +60 -0
  235. package/dist/senses/cli/streaming-markdown.js +526 -0
  236. package/dist/senses/cli/tool-display.js +83 -0
  237. package/dist/senses/cli/tool-render.js +85 -0
  238. package/dist/senses/cli/tui-store.js +240 -0
  239. package/dist/senses/cli/virtual-list.js +35 -0
  240. package/dist/senses/cli-entry.js +1 -1
  241. package/dist/senses/cli-layout.js +187 -0
  242. package/dist/senses/cli.js +588 -246
  243. package/dist/senses/commands.js +65 -1
  244. package/dist/senses/continuity.js +94 -0
  245. package/dist/senses/habit-turn-message.js +108 -0
  246. package/dist/senses/inner-dialog-worker.js +112 -19
  247. package/dist/senses/inner-dialog.js +633 -86
  248. package/dist/senses/pipeline.js +560 -0
  249. package/dist/senses/shared-turn.js +195 -0
  250. package/dist/senses/surface-tool.js +68 -0
  251. package/dist/senses/teams.js +664 -165
  252. package/dist/senses/trust-gate.js +112 -2
  253. package/package.json +14 -7
  254. package/skills/agent-commerce.md +106 -0
  255. package/skills/browser-navigation.md +110 -0
  256. package/skills/commerce-setup-guide.md +116 -0
  257. package/skills/commerce-setup.md +84 -0
  258. package/skills/configure-dev-tools.md +81 -0
  259. package/skills/travel-planning.md +138 -0
  260. package/dist/heart/daemon/subagent-installer.js +0 -134
  261. package/dist/senses/bluebubbles-entry.js +0 -11
  262. package/dist/senses/bluebubbles.js +0 -449
  263. package/dist/senses/debug-activity.js +0 -108
  264. package/subagents/README.md +0 -73
  265. package/subagents/work-doer.md +0 -235
  266. package/subagents/work-merger.md +0 -618
  267. package/subagents/work-planner.md +0 -382
  268. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  269. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  270. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  271. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  272. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  273. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  274. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  275. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  276. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  277. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  278. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  279. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +0 -0
  280. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  281. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  282. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  283. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  284. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bluebubblesToolDefinitions = void 0;
4
+ const runtime_1 = require("../nerves/runtime");
5
+ exports.bluebubblesToolDefinitions = [
6
+ {
7
+ tool: {
8
+ type: "function",
9
+ function: {
10
+ name: "bluebubbles_set_reply_target",
11
+ description: "choose where the current iMessage turn should land. use this when you want to widen back to top-level or route your update into a specific active thread in the same chat.",
12
+ parameters: {
13
+ type: "object",
14
+ properties: {
15
+ target: {
16
+ type: "string",
17
+ enum: ["current_lane", "top_level", "thread"],
18
+ description: "current_lane mirrors the current inbound lane, top_level answers in the main chat, and thread targets a specific active thread.",
19
+ },
20
+ threadOriginatorGuid: {
21
+ type: "string",
22
+ description: "required when target=thread; use one of the thread ids surfaced in the inbound iMessage context.",
23
+ },
24
+ },
25
+ required: ["target"],
26
+ },
27
+ },
28
+ },
29
+ handler: (args, ctx) => {
30
+ const target = typeof args.target === "string" ? args.target.trim() : "";
31
+ const controller = ctx?.bluebubblesReplyTarget;
32
+ if (!controller) {
33
+ (0, runtime_1.emitNervesEvent)({
34
+ level: "warn",
35
+ component: "tools",
36
+ event: "tool.error",
37
+ message: "bluebubbles reply target missing controller",
38
+ meta: { target },
39
+ });
40
+ return "bluebubbles reply targeting is not available in this context.";
41
+ }
42
+ if (target === "current_lane") {
43
+ const result = controller.setSelection({ target: "current_lane" });
44
+ (0, runtime_1.emitNervesEvent)({
45
+ component: "tools",
46
+ event: "tool.end",
47
+ message: "bluebubbles reply target updated",
48
+ meta: { target: "current_lane", success: true },
49
+ });
50
+ return result;
51
+ }
52
+ if (target === "top_level") {
53
+ const result = controller.setSelection({ target: "top_level" });
54
+ (0, runtime_1.emitNervesEvent)({
55
+ component: "tools",
56
+ event: "tool.end",
57
+ message: "bluebubbles reply target updated",
58
+ meta: { target: "top_level", success: true },
59
+ });
60
+ return result;
61
+ }
62
+ if (target === "thread") {
63
+ const threadOriginatorGuid = typeof args.threadOriginatorGuid === "string" ? args.threadOriginatorGuid.trim() : "";
64
+ if (!threadOriginatorGuid) {
65
+ (0, runtime_1.emitNervesEvent)({
66
+ level: "warn",
67
+ component: "tools",
68
+ event: "tool.error",
69
+ message: "bluebubbles reply target missing thread id",
70
+ meta: { target: "thread" },
71
+ });
72
+ return "threadOriginatorGuid is required when target=thread.";
73
+ }
74
+ const result = controller.setSelection({ target: "thread", threadOriginatorGuid });
75
+ (0, runtime_1.emitNervesEvent)({
76
+ component: "tools",
77
+ event: "tool.end",
78
+ message: "bluebubbles reply target updated",
79
+ meta: { target: "thread", success: true },
80
+ });
81
+ return result;
82
+ }
83
+ (0, runtime_1.emitNervesEvent)({
84
+ level: "warn",
85
+ component: "tools",
86
+ event: "tool.error",
87
+ message: "bluebubbles reply target invalid target",
88
+ meta: { target },
89
+ });
90
+ return "target must be one of: current_lane, top_level, thread.";
91
+ },
92
+ summaryKeys: ["target", "threadOriginatorGuid"],
93
+ },
94
+ ];
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bridgeToolDefinitions = void 0;
4
+ const config_1 = require("../heart/config");
5
+ const manager_1 = require("../heart/bridges/manager");
6
+ const runtime_1 = require("../nerves/runtime");
7
+ const session_recall_1 = require("../heart/session-recall");
8
+ const NO_SESSION_FOUND_MESSAGE = "no session found for that friend/channel/key combination.";
9
+ const EMPTY_SESSION_MESSAGE = "session exists but has no non-system messages.";
10
+ async function recallSessionSafely(options) {
11
+ try {
12
+ return await (0, session_recall_1.recallSession)(options);
13
+ }
14
+ catch (error) {
15
+ if (options.summarize) {
16
+ (0, runtime_1.emitNervesEvent)({
17
+ component: "daemon",
18
+ event: "daemon.session_recall_summary_fallback",
19
+ message: "session recall summarization failed; using raw transcript",
20
+ meta: {
21
+ friendId: options.friendId,
22
+ channel: options.channel,
23
+ key: options.key,
24
+ /* v8 ignore next -- branch: String(error) fallback only for non-Error throws @preserve */
25
+ error: error instanceof Error ? error.message : String(error),
26
+ },
27
+ });
28
+ try {
29
+ return await (0, session_recall_1.recallSession)({
30
+ ...options,
31
+ summarize: undefined,
32
+ });
33
+ }
34
+ catch {
35
+ return { kind: "missing" };
36
+ }
37
+ }
38
+ return { kind: "missing" };
39
+ }
40
+ }
41
+ exports.bridgeToolDefinitions = [
42
+ // -- cross-session awareness --
43
+ {
44
+ tool: {
45
+ type: "function",
46
+ function: {
47
+ name: "bridge_manage",
48
+ description: "create and manage shared live-work bridges across already-active sessions.",
49
+ parameters: {
50
+ type: "object",
51
+ properties: {
52
+ action: {
53
+ type: "string",
54
+ enum: ["begin", "attach", "status", "promote_task", "complete", "cancel"],
55
+ },
56
+ bridgeId: { type: "string", description: "bridge id for all actions except begin" },
57
+ objective: { type: "string", description: "objective for begin" },
58
+ summary: { type: "string", description: "optional concise shared-work summary" },
59
+ friendId: { type: "string", description: "target friend id for attach" },
60
+ channel: { type: "string", description: "target channel for attach" },
61
+ key: { type: "string", description: "target session key for attach (defaults to 'session')" },
62
+ title: { type: "string", description: "task title override for promote_task" },
63
+ category: { type: "string", description: "task category override for promote_task" },
64
+ body: { type: "string", description: "task body override for promote_task" },
65
+ },
66
+ required: ["action"],
67
+ },
68
+ },
69
+ },
70
+ handler: async (args, ctx) => {
71
+ const manager = (0, manager_1.createBridgeManager)();
72
+ const action = (args.action || "").trim();
73
+ if (action === "begin") {
74
+ if (!ctx?.currentSession) {
75
+ return "bridge_manage begin requires an active session context.";
76
+ }
77
+ const objective = (args.objective || "").trim();
78
+ if (!objective)
79
+ return "objective is required for bridge begin.";
80
+ return (0, manager_1.formatBridgeStatus)(manager.beginBridge({
81
+ objective,
82
+ summary: (args.summary || objective).trim(),
83
+ session: ctx.currentSession,
84
+ }));
85
+ }
86
+ const bridgeId = (args.bridgeId || "").trim();
87
+ if (!bridgeId) {
88
+ return "bridgeId is required for this bridge action.";
89
+ }
90
+ if (action === "attach") {
91
+ const friendId = (args.friendId || "").trim();
92
+ const channel = (args.channel || "").trim();
93
+ const key = (args.key || "session").trim();
94
+ if (!friendId || !channel) {
95
+ return "friendId and channel are required for bridge attach.";
96
+ }
97
+ const sessionPath = (0, config_1.resolveSessionPath)(friendId, channel, key);
98
+ const recall = await recallSessionSafely({
99
+ sessionPath,
100
+ friendId,
101
+ channel,
102
+ key,
103
+ messageCount: 20,
104
+ trustLevel: ctx?.context?.friend?.trustLevel,
105
+ summarize: ctx?.summarize,
106
+ });
107
+ if (recall.kind === "missing") {
108
+ return NO_SESSION_FOUND_MESSAGE;
109
+ }
110
+ return (0, manager_1.formatBridgeStatus)(manager.attachSession(bridgeId, {
111
+ friendId,
112
+ channel,
113
+ key,
114
+ sessionPath,
115
+ snapshot: recall.kind === "ok" ? recall.snapshot : EMPTY_SESSION_MESSAGE,
116
+ }));
117
+ }
118
+ if (action === "status") {
119
+ const bridge = manager.getBridge(bridgeId);
120
+ if (!bridge)
121
+ return `bridge not found: ${bridgeId}`;
122
+ return (0, manager_1.formatBridgeStatus)(bridge);
123
+ }
124
+ if (action === "promote_task") {
125
+ return (0, manager_1.formatBridgeStatus)(manager.promoteBridgeToTask(bridgeId, {
126
+ title: args.title,
127
+ category: args.category,
128
+ body: args.body,
129
+ }));
130
+ }
131
+ if (action === "complete") {
132
+ return (0, manager_1.formatBridgeStatus)(manager.completeBridge(bridgeId));
133
+ }
134
+ if (action === "cancel") {
135
+ return (0, manager_1.formatBridgeStatus)(manager.cancelBridge(bridgeId));
136
+ }
137
+ return `unknown bridge action: ${action}`;
138
+ },
139
+ summaryKeys: ["action", "bridgeId", "objective", "friendId", "channel", "key"],
140
+ },
141
+ ];