@superblocksteam/gateway 2.0.161-next.0 → 2.0.162-next.0

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 (232) hide show
  1. package/README.md +135 -39
  2. package/dist/capabilities/lifecycle.d.ts +46 -29
  3. package/dist/capabilities/lifecycle.js +1731 -843
  4. package/dist/capabilities/lifecycle.js.map +1 -1
  5. package/dist/capabilities/query-integration.d.ts +14 -0
  6. package/dist/capabilities/query-integration.js +172 -0
  7. package/dist/capabilities/query-integration.js.map +1 -0
  8. package/dist/capabilities/source-files-archive.d.ts +11 -0
  9. package/dist/capabilities/source-files-archive.js +54 -0
  10. package/dist/capabilities/source-files-archive.js.map +1 -0
  11. package/dist/capabilities/types.d.ts +197 -119
  12. package/dist/capabilities/types.js +45 -6
  13. package/dist/capabilities/types.js.map +1 -1
  14. package/dist/capture/browser-contract.d.ts +15 -5
  15. package/dist/capture/browser-contract.js +13 -3
  16. package/dist/capture/browser-contract.js.map +1 -1
  17. package/dist/capture/browser-instructions.d.ts +3 -2
  18. package/dist/capture/browser-instructions.js +3 -2
  19. package/dist/capture/browser-instructions.js.map +1 -1
  20. package/dist/capture/mode.d.ts +8 -1
  21. package/dist/capture/mode.js +22 -2
  22. package/dist/capture/mode.js.map +1 -1
  23. package/dist/config.d.ts +22 -23
  24. package/dist/config.js +13 -12
  25. package/dist/config.js.map +1 -1
  26. package/dist/deps.d.ts +7 -7
  27. package/dist/index.d.ts +2 -4
  28. package/dist/index.js +2 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/integrations/read-only-postgres-query.d.ts +2 -0
  31. package/dist/integrations/read-only-postgres-query.js +164 -0
  32. package/dist/integrations/read-only-postgres-query.js.map +1 -0
  33. package/dist/main.js +1 -1
  34. package/dist/main.js.map +1 -1
  35. package/dist/playwright/ensure-chromium.d.ts +5 -7
  36. package/dist/playwright/ensure-chromium.js +13 -13
  37. package/dist/playwright/ensure-chromium.js.map +1 -1
  38. package/dist/preview/capture-screenshot.d.ts +30 -4
  39. package/dist/preview/capture-screenshot.js +67 -17
  40. package/dist/preview/capture-screenshot.js.map +1 -1
  41. package/dist/preview/viewer-url.js +3 -1
  42. package/dist/preview/viewer-url.js.map +1 -1
  43. package/dist/process/fault-barrier.js +1 -1
  44. package/dist/process/fault-barrier.js.map +1 -1
  45. package/dist/sabs/agent-facing-text.d.ts +2 -0
  46. package/dist/sabs/agent-facing-text.js +56 -2
  47. package/dist/sabs/agent-facing-text.js.map +1 -1
  48. package/dist/sabs/app-state.d.ts +126 -0
  49. package/dist/sabs/app-state.js +332 -0
  50. package/dist/sabs/app-state.js.map +1 -0
  51. package/dist/sabs/awaited-decision.d.ts +49 -0
  52. package/dist/sabs/awaited-decision.js +129 -0
  53. package/dist/sabs/awaited-decision.js.map +1 -0
  54. package/dist/sabs/editor-client-methods.d.ts +23 -5
  55. package/dist/sabs/editor-client-methods.js +45 -4
  56. package/dist/sabs/editor-client-methods.js.map +1 -1
  57. package/dist/sabs/editor-socket.d.ts +85 -0
  58. package/dist/sabs/editor-socket.js +67 -0
  59. package/dist/sabs/editor-socket.js.map +1 -0
  60. package/dist/sabs/session-peer.d.ts +119 -82
  61. package/dist/sabs/session-peer.js +10 -1
  62. package/dist/sabs/session-peer.js.map +1 -1
  63. package/dist/sabs/streamed-reply.d.ts +45 -0
  64. package/dist/sabs/streamed-reply.js +125 -0
  65. package/dist/sabs/streamed-reply.js.map +1 -0
  66. package/dist/sabs/turn-collector.d.ts +50 -35
  67. package/dist/sabs/turn-collector.js +110 -176
  68. package/dist/sabs/turn-collector.js.map +1 -1
  69. package/dist/sabs/websocket-session-peer.d.ts +104 -69
  70. package/dist/sabs/websocket-session-peer.js +1329 -475
  71. package/dist/sabs/websocket-session-peer.js.map +1 -1
  72. package/dist/server/client.d.ts +41 -9
  73. package/dist/server/client.js +126 -21
  74. package/dist/server/client.js.map +1 -1
  75. package/dist/start.d.ts +1 -1
  76. package/dist/start.js +30 -8
  77. package/dist/start.js.map +1 -1
  78. package/dist/stores/memory.d.ts +46 -0
  79. package/dist/stores/memory.js +163 -0
  80. package/dist/stores/memory.js.map +1 -0
  81. package/dist/stores/types.d.ts +92 -0
  82. package/dist/stores/types.js +11 -0
  83. package/dist/stores/types.js.map +1 -0
  84. package/dist/telemetry/mcp-client.d.ts +6 -1
  85. package/dist/telemetry/mcp-client.js +100 -4
  86. package/dist/telemetry/mcp-client.js.map +1 -1
  87. package/dist/telemetry/metrics.d.ts +12 -3
  88. package/dist/telemetry/metrics.js +60 -14
  89. package/dist/telemetry/metrics.js.map +1 -1
  90. package/dist/telemetry/runtime.js +4 -6
  91. package/dist/telemetry/runtime.js.map +1 -1
  92. package/dist/transports/mcp/admin-tools.d.ts +8 -0
  93. package/dist/transports/mcp/admin-tools.js +115 -4
  94. package/dist/transports/mcp/admin-tools.js.map +1 -1
  95. package/dist/transports/mcp/app-status-html.d.ts +4 -8
  96. package/dist/transports/mcp/app-status-html.js +336 -128
  97. package/dist/transports/mcp/app-status-html.js.map +1 -1
  98. package/dist/transports/mcp/client-presentation.d.ts +16 -0
  99. package/dist/transports/mcp/client-presentation.js +13 -0
  100. package/dist/transports/mcp/client-presentation.js.map +1 -0
  101. package/dist/transports/mcp/cowork-editor-url.d.ts +6 -0
  102. package/dist/transports/mcp/cowork-editor-url.js +10 -0
  103. package/dist/transports/mcp/cowork-editor-url.js.map +1 -0
  104. package/dist/transports/mcp/decision-card-html.d.ts +26 -0
  105. package/dist/transports/mcp/decision-card-html.js +876 -0
  106. package/dist/transports/mcp/decision-card-html.js.map +1 -0
  107. package/dist/transports/mcp/decision-elicitation.d.ts +42 -0
  108. package/dist/transports/mcp/decision-elicitation.js +59 -0
  109. package/dist/transports/mcp/decision-elicitation.js.map +1 -1
  110. package/dist/transports/mcp/editor-document-probe.d.ts +4 -0
  111. package/dist/transports/mcp/editor-document-probe.js +35 -0
  112. package/dist/transports/mcp/editor-document-probe.js.map +1 -0
  113. package/dist/transports/mcp/editor-integration-setup-url.d.ts +14 -0
  114. package/dist/transports/mcp/editor-integration-setup-url.js +29 -0
  115. package/dist/transports/mcp/editor-integration-setup-url.js.map +1 -0
  116. package/dist/transports/mcp/format-tool-content.d.ts +13 -18
  117. package/dist/transports/mcp/format-tool-content.js +172 -13
  118. package/dist/transports/mcp/format-tool-content.js.map +1 -1
  119. package/dist/transports/mcp/instructions/index.d.ts +23 -0
  120. package/dist/transports/mcp/instructions/index.js +81 -0
  121. package/dist/transports/mcp/instructions/index.js.map +1 -0
  122. package/dist/transports/mcp/instructions/result.d.ts +18 -0
  123. package/dist/transports/mcp/instructions/result.js +58 -0
  124. package/dist/transports/mcp/instructions/result.js.map +1 -0
  125. package/dist/transports/mcp/instructions/tools/ask-user.d.ts +2 -0
  126. package/dist/transports/mcp/instructions/tools/ask-user.js +20 -0
  127. package/dist/transports/mcp/instructions/tools/ask-user.js.map +1 -0
  128. package/dist/transports/mcp/instructions/tools/build-app.d.ts +4 -0
  129. package/dist/transports/mcp/instructions/tools/build-app.js +54 -0
  130. package/dist/transports/mcp/instructions/tools/build-app.js.map +1 -0
  131. package/dist/transports/mcp/instructions/tools/check-app-progress.d.ts +3 -0
  132. package/dist/transports/mcp/instructions/tools/check-app-progress.js +79 -0
  133. package/dist/transports/mcp/instructions/tools/check-app-progress.js.map +1 -0
  134. package/dist/transports/mcp/instructions/tools/check-publish-progress.d.ts +3 -0
  135. package/dist/transports/mcp/instructions/tools/check-publish-progress.js +23 -0
  136. package/dist/transports/mcp/instructions/tools/check-publish-progress.js.map +1 -0
  137. package/dist/transports/mcp/instructions/tools/copy.d.ts +18 -0
  138. package/dist/transports/mcp/instructions/tools/copy.js +49 -0
  139. package/dist/transports/mcp/instructions/tools/copy.js.map +1 -0
  140. package/dist/transports/mcp/instructions/tools/create-integration.d.ts +4 -0
  141. package/dist/transports/mcp/instructions/tools/create-integration.js +41 -0
  142. package/dist/transports/mcp/instructions/tools/create-integration.js.map +1 -0
  143. package/dist/transports/mcp/instructions/tools/edit-app.d.ts +3 -0
  144. package/dist/transports/mcp/instructions/tools/edit-app.js +18 -0
  145. package/dist/transports/mcp/instructions/tools/edit-app.js.map +1 -0
  146. package/dist/transports/mcp/instructions/tools/get-app.d.ts +3 -0
  147. package/dist/transports/mcp/instructions/tools/get-app.js +49 -0
  148. package/dist/transports/mcp/instructions/tools/get-app.js.map +1 -0
  149. package/dist/transports/mcp/instructions/tools/get-integration-metadata.d.ts +2 -0
  150. package/dist/transports/mcp/instructions/tools/get-integration-metadata.js +13 -0
  151. package/dist/transports/mcp/instructions/tools/get-integration-metadata.js.map +1 -0
  152. package/dist/transports/mcp/instructions/tools/index.d.ts +7 -0
  153. package/dist/transports/mcp/instructions/tools/index.js +31 -0
  154. package/dist/transports/mcp/instructions/tools/index.js.map +1 -0
  155. package/dist/transports/mcp/instructions/tools/publish-app.d.ts +3 -0
  156. package/dist/transports/mcp/instructions/tools/publish-app.js +23 -0
  157. package/dist/transports/mcp/instructions/tools/publish-app.js.map +1 -0
  158. package/dist/transports/mcp/instructions/tools/start-app.d.ts +3 -0
  159. package/dist/transports/mcp/instructions/tools/start-app.js +22 -0
  160. package/dist/transports/mcp/instructions/tools/start-app.js.map +1 -0
  161. package/dist/transports/mcp/instructions/tools/upload-artifact.d.ts +2 -0
  162. package/dist/transports/mcp/instructions/tools/upload-artifact.js +13 -0
  163. package/dist/transports/mcp/instructions/tools/upload-artifact.js.map +1 -0
  164. package/dist/transports/mcp/mcp-app-brand-css.d.ts +1 -0
  165. package/dist/transports/mcp/mcp-app-brand-css.js +180 -0
  166. package/dist/transports/mcp/mcp-app-brand-css.js.map +1 -0
  167. package/dist/transports/mcp/mount.d.ts +14 -1
  168. package/dist/transports/mcp/mount.js +729 -172
  169. package/dist/transports/mcp/mount.js.map +1 -1
  170. package/dist/transports/mcp/native-browser-presence.d.ts +45 -0
  171. package/dist/transports/mcp/native-browser-presence.js +158 -0
  172. package/dist/transports/mcp/native-browser-presence.js.map +1 -0
  173. package/dist/transports/mcp/plan-approval.d.ts +44 -0
  174. package/dist/transports/mcp/plan-approval.js +179 -0
  175. package/dist/transports/mcp/plan-approval.js.map +1 -0
  176. package/dist/transports/mcp/session-directory.d.ts +7 -0
  177. package/dist/transports/mcp/session-directory.js +18 -0
  178. package/dist/transports/mcp/session-directory.js.map +1 -0
  179. package/dist/transports/mcp/tool-names.d.ts +2 -0
  180. package/dist/transports/mcp/tool-names.js +2 -0
  181. package/dist/transports/mcp/tool-names.js.map +1 -0
  182. package/package.json +16 -7
  183. package/skills/superblocks-build/SKILL.md +59 -0
  184. package/skills/superblocks-import/SKILL.md +125 -0
  185. package/dist/capabilities/import-prompt.d.ts +0 -11
  186. package/dist/capabilities/import-prompt.js +0 -96
  187. package/dist/capabilities/import-prompt.js.map +0 -1
  188. package/dist/capabilities/persisted-progress.d.ts +0 -46
  189. package/dist/capabilities/persisted-progress.js +0 -246
  190. package/dist/capabilities/persisted-progress.js.map +0 -1
  191. package/dist/events/cursor.d.ts +0 -43
  192. package/dist/events/cursor.js +0 -78
  193. package/dist/events/cursor.js.map +0 -1
  194. package/dist/events/memory-event-store.d.ts +0 -34
  195. package/dist/events/memory-event-store.js +0 -110
  196. package/dist/events/memory-event-store.js.map +0 -1
  197. package/dist/events/merge.d.ts +0 -23
  198. package/dist/events/merge.js +0 -97
  199. package/dist/events/merge.js.map +0 -1
  200. package/dist/events/normalized-collector.d.ts +0 -62
  201. package/dist/events/normalized-collector.js +0 -156
  202. package/dist/events/normalized-collector.js.map +0 -1
  203. package/dist/events/schema.d.ts +0 -9
  204. package/dist/events/schema.js +0 -93
  205. package/dist/events/schema.js.map +0 -1
  206. package/dist/events/snapshot.d.ts +0 -32
  207. package/dist/events/snapshot.js +0 -57
  208. package/dist/events/snapshot.js.map +0 -1
  209. package/dist/events/stream-key.d.ts +0 -2
  210. package/dist/events/stream-key.js +0 -31
  211. package/dist/events/stream-key.js.map +0 -1
  212. package/dist/events/types.d.ts +0 -179
  213. package/dist/events/types.js +0 -66
  214. package/dist/events/types.js.map +0 -1
  215. package/dist/resume/memory-progress-store.d.ts +0 -39
  216. package/dist/resume/memory-progress-store.js +0 -82
  217. package/dist/resume/memory-progress-store.js.map +0 -1
  218. package/dist/resume/memory-recent-app-store.d.ts +0 -14
  219. package/dist/resume/memory-recent-app-store.js +0 -27
  220. package/dist/resume/memory-recent-app-store.js.map +0 -1
  221. package/dist/resume/memory-turn-store.d.ts +0 -18
  222. package/dist/resume/memory-turn-store.js +0 -73
  223. package/dist/resume/memory-turn-store.js.map +0 -1
  224. package/dist/resume/progress-key.d.ts +0 -21
  225. package/dist/resume/progress-key.js +0 -58
  226. package/dist/resume/progress-key.js.map +0 -1
  227. package/dist/resume/stores.d.ts +0 -14
  228. package/dist/resume/stores.js +0 -18
  229. package/dist/resume/stores.js.map +0 -1
  230. package/dist/resume/types.d.ts +0 -124
  231. package/dist/resume/types.js +0 -13
  232. package/dist/resume/types.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-card-html.js","sourceRoot":"","sources":["../../../src/transports/mcp/decision-card-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,iCAAiC,CAAC;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AAClE,MAAM,CAAC,MAAM,yBAAyB,GAAG,gCAAgC,CAAC;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuK/B,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA4LA,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAuYhB,4BAA4B;;sCAEnB,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGjE,CAAC"}
@@ -8,6 +8,7 @@
8
8
  * call answers Superblocks itself rather than handing the question back to the
9
9
  * model.
10
10
  */
11
+ import { ElicitResultSchema } from "@modelcontextprotocol/sdk/types.js";
11
12
  import type { CapabilityResult, DecisionPayload } from "../../capabilities/types.js";
12
13
  export type DecisionAnswer = {
13
14
  kind: "answer";
@@ -53,6 +54,15 @@ export declare function clientSupportsFormElicitation(capabilities: {
53
54
  } | undefined): boolean;
54
55
  /** The decision a capability result is waiting on, if it is waiting on one. */
55
56
  export declare function pendingDecision(result: CapabilityResult<unknown>): DecisionPayload | undefined;
57
+ /**
58
+ * The application a capability result was about.
59
+ *
60
+ * A tool call that named none has it resolved to the caller's recent
61
+ * application inside the capability, so the id the result carries is the only
62
+ * one a follow-up can safely key on.
63
+ */
64
+ export declare function resultApplicationId(result: CapabilityResult<unknown>): string | undefined;
65
+ export declare function resultBranch(result: CapabilityResult<unknown>): string | undefined;
56
66
  export declare function decisionElicitationRequest(decision: DecisionPayload): DecisionElicitationRequest | undefined;
57
67
  /**
58
68
  * The answer a host collected, or undefined when there is nothing to send on —
@@ -60,6 +70,38 @@ export declare function decisionElicitationRequest(decision: DecisionPayload): D
60
70
  * feedback). Undefined means the caller should leave the decision in chat.
61
71
  */
62
72
  export declare function readDecisionAnswer(decision: DecisionPayload, outcome: ElicitationOutcome): DecisionAnswer | undefined;
73
+ /**
74
+ * How long the user gets to answer the form.
75
+ *
76
+ * The SDK would otherwise apply its own DEFAULT_REQUEST_TIMEOUT_MSEC of 60s,
77
+ * which expires while the picker is still on screen: the elicitation rejects,
78
+ * the decision falls back to chat, and the user's eventual answer lands on a
79
+ * request nobody is waiting for. Ten minutes gives a user time to answer
80
+ * without leaving a host request open indefinitely.
81
+ *
82
+ * Kept well under 2^31-1, the point at which setTimeout clamps a delay to 1ms
83
+ * and a nominally "never" timeout would fire immediately.
84
+ */
85
+ export declare const DECISION_ANSWER_TIMEOUT_MS = 600000;
86
+ /** The slice of a tool call's `extra` that carrying a decision to the host needs. */
87
+ type DecisionSender = {
88
+ sendRequest: (request: {
89
+ method: "elicitation/create";
90
+ params: DecisionElicitationRequest;
91
+ }, resultSchema: typeof ElicitResultSchema, options: {
92
+ signal: AbortSignal;
93
+ timeout: number;
94
+ }) => Promise<ElicitationOutcome>;
95
+ signal: AbortSignal;
96
+ };
97
+ /**
98
+ * Asks the host to show the form, on the tool call's own request stream.
99
+ *
100
+ * Riding that stream matters: a request the gateway raises on its own goes to
101
+ * the standalone stream instead, which a host that never opened one silently
102
+ * drops, leaving the tool call waiting for an answer that cannot arrive.
103
+ */
104
+ export declare function elicitDecision(extra: DecisionSender): (request: DecisionElicitationRequest) => Promise<ElicitationOutcome>;
63
105
  /**
64
106
  * Puts a decision to the user as a form and sends their answer on, returning
65
107
  * the follow-up turn. Returns undefined when the decision should stay in chat,
@@ -8,6 +8,7 @@
8
8
  * call answers Superblocks itself rather than handing the question back to the
9
9
  * model.
10
10
  */
11
+ import { ElicitResultSchema } from "@modelcontextprotocol/sdk/types.js";
11
12
  import { gatewayDebug } from "../../debug.js";
12
13
  /**
13
14
  * True when the client advertised form elicitation at initialize.
@@ -65,7 +66,39 @@ export function pendingDecision(result) {
65
66
  });
66
67
  return decision;
67
68
  }
69
+ /**
70
+ * The application a capability result was about.
71
+ *
72
+ * A tool call that named none has it resolved to the caller's recent
73
+ * application inside the capability, so the id the result carries is the only
74
+ * one a follow-up can safely key on.
75
+ */
76
+ export function resultApplicationId(result) {
77
+ if (result.kind !== "ok" ||
78
+ !result.value ||
79
+ typeof result.value !== "object") {
80
+ return undefined;
81
+ }
82
+ const { applicationId } = result.value;
83
+ return typeof applicationId === "string" ? applicationId : undefined;
84
+ }
85
+ export function resultBranch(result) {
86
+ if (result.kind !== "ok" ||
87
+ !result.value ||
88
+ typeof result.value !== "object") {
89
+ return undefined;
90
+ }
91
+ const { branch } = result.value;
92
+ return typeof branch === "string" ? branch : undefined;
93
+ }
68
94
  export function decisionElicitationRequest(decision) {
95
+ if (decision.kind === "missing_integrations") {
96
+ gatewayDebug("decision request skipped", {
97
+ "decision.kind": decision.kind,
98
+ "decision.reason": "host_action",
99
+ });
100
+ return undefined;
101
+ }
69
102
  if (decision.kind === "plan") {
70
103
  gatewayDebug("decision request created", {
71
104
  "decision.kind": decision.kind,
@@ -128,6 +161,9 @@ export function decisionElicitationRequest(decision) {
128
161
  * feedback). Undefined means the caller should leave the decision in chat.
129
162
  */
130
163
  export function readDecisionAnswer(decision, outcome) {
164
+ if (decision.kind === "missing_integrations") {
165
+ return undefined;
166
+ }
131
167
  if (outcome.action !== "accept" || !outcome.content) {
132
168
  gatewayDebug("decision answer read", {
133
169
  "decision.answer_kind": "none",
@@ -174,6 +210,29 @@ export function readDecisionAnswer(decision, outcome) {
174
210
  });
175
211
  return offered ? { kind: "answer", prompt: choice } : undefined;
176
212
  }
213
+ /**
214
+ * How long the user gets to answer the form.
215
+ *
216
+ * The SDK would otherwise apply its own DEFAULT_REQUEST_TIMEOUT_MSEC of 60s,
217
+ * which expires while the picker is still on screen: the elicitation rejects,
218
+ * the decision falls back to chat, and the user's eventual answer lands on a
219
+ * request nobody is waiting for. Ten minutes gives a user time to answer
220
+ * without leaving a host request open indefinitely.
221
+ *
222
+ * Kept well under 2^31-1, the point at which setTimeout clamps a delay to 1ms
223
+ * and a nominally "never" timeout would fire immediately.
224
+ */
225
+ export const DECISION_ANSWER_TIMEOUT_MS = 600_000;
226
+ /**
227
+ * Asks the host to show the form, on the tool call's own request stream.
228
+ *
229
+ * Riding that stream matters: a request the gateway raises on its own goes to
230
+ * the standalone stream instead, which a host that never opened one silently
231
+ * drops, leaving the tool call waiting for an answer that cannot arrive.
232
+ */
233
+ export function elicitDecision(extra) {
234
+ return (request) => extra.sendRequest({ method: "elicitation/create", params: request }, ElicitResultSchema, { signal: extra.signal, timeout: DECISION_ANSWER_TIMEOUT_MS });
235
+ }
177
236
  /**
178
237
  * Puts a decision to the user as a form and sends their answer on, returning
179
238
  * the follow-up turn. Returns undefined when the decision should stay in chat,
@@ -1 +1 @@
1
- {"version":3,"file":"decision-elicitation.js","sourceRoot":"","sources":["../../../src/transports/mcp/decision-elicitation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decision-elicitation.js","sourceRoot":"","sources":["../../../src/transports/mcp/decision-elicitation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type EditorDocumentProbe = (editUrl: string, signal?: AbortSignal) => Promise<boolean>;
2
+ export declare function createEditorDocumentProbe(options?: {
3
+ fetchImpl?: typeof fetch;
4
+ }): EditorDocumentProbe;
@@ -0,0 +1,35 @@
1
+ const EDITOR_DOCUMENT_DEADLINE_MS = 1_000;
2
+ export function createEditorDocumentProbe(options = {}) {
3
+ const fetchImpl = options.fetchImpl ?? fetch;
4
+ return async (editUrl, signal) => {
5
+ if (signal?.aborted) {
6
+ return false;
7
+ }
8
+ const controller = new AbortController();
9
+ const abort = () => controller.abort(signal?.reason);
10
+ signal?.addEventListener("abort", abort, { once: true });
11
+ const deadline = setTimeout(() => controller.abort(), EDITOR_DOCUMENT_DEADLINE_MS);
12
+ deadline.unref?.();
13
+ try {
14
+ const response = await fetchImpl(new URL(editUrl), {
15
+ method: "GET",
16
+ redirect: "manual",
17
+ signal: controller.signal,
18
+ });
19
+ const available = response.ok ||
20
+ (response.status >= 300 && response.status < 400) ||
21
+ response.status === 401 ||
22
+ response.status === 403;
23
+ await response.body?.cancel().catch(() => undefined);
24
+ return available;
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ finally {
30
+ clearTimeout(deadline);
31
+ signal?.removeEventListener("abort", abort);
32
+ }
33
+ };
34
+ }
35
+ //# sourceMappingURL=editor-document-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-document-probe.js","sourceRoot":"","sources":["../../../src/transports/mcp/editor-document-probe.ts"],"names":[],"mappings":"AAKA,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAE1C,MAAM,UAAU,yBAAyB,CACvC,UAAwC,EAAE;IAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,UAAU,CACzB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,2BAA2B,CAC5B,CAAC;QACF,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE;gBACjD,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,MAAM,SAAS,GACb,QAAQ,CAAC,EAAE;gBACX,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;gBACjD,QAAQ,CAAC,MAAM,KAAK,GAAG;gBACvB,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;YAC1B,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACrD,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * How recently the session must have worked on an application for it to count
3
+ * as the editor the user is still sitting in. Matches the held-session idle
4
+ * window, which is this process's existing notion of one working session.
5
+ */
6
+ export declare const EDITOR_SETUP_RECENT_APP_WINDOW_MS: number;
7
+ export declare function editorIntegrationSetupUrl(input: {
8
+ applicationId: string;
9
+ branch?: string;
10
+ cowork?: boolean;
11
+ integrationId: string;
12
+ uiBaseUrl: string;
13
+ }): string;
14
+ export declare function isEditorIntegrationSetupUrl(url: string): boolean;
@@ -0,0 +1,29 @@
1
+ import { URL_PARAMS } from "@superblocksteam/library-shared";
2
+ /**
3
+ * How recently the session must have worked on an application for it to count
4
+ * as the editor the user is still sitting in. Matches the held-session idle
5
+ * window, which is this process's existing notion of one working session.
6
+ */
7
+ export const EDITOR_SETUP_RECENT_APP_WINDOW_MS = 30 * 60 * 1000;
8
+ export function editorIntegrationSetupUrl(input) {
9
+ const url = new URL(`${input.uiBaseUrl.replace(/\/$/, "")}/code-mode/applications/edit/${encodeURIComponent(input.applicationId)}`);
10
+ if (input.branch) {
11
+ url.searchParams.set("branch", input.branch);
12
+ }
13
+ url.searchParams.set(URL_PARAMS.integrationSetup, input.integrationId);
14
+ if (input.cowork) {
15
+ url.searchParams.set(URL_PARAMS.editorHost, "cowork");
16
+ }
17
+ return url.toString();
18
+ }
19
+ export function isEditorIntegrationSetupUrl(url) {
20
+ try {
21
+ const parsed = new URL(url);
22
+ return (parsed.pathname.includes("/applications/edit/") &&
23
+ parsed.searchParams.has(URL_PARAMS.integrationSetup));
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ //# sourceMappingURL=editor-integration-setup-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-integration-setup-url.js","sourceRoot":"","sources":["../../../src/transports/mcp/editor-integration-setup-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhE,MAAM,UAAU,yBAAyB,CAAC,KAMzC;IACC,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,gCAAgC,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAC/G,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CACL,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAC/C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CACrD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,25 +1,20 @@
1
+ import type { ContentBlock } from "@modelcontextprotocol/sdk/types.js";
1
2
  import type { CapabilityResult } from "../../capabilities/types.js";
2
- type ContentBlock = {
3
- type: "text";
4
- text: string;
5
- } | {
6
- type: "image";
7
- data: string;
8
- mimeType: "image/jpeg";
9
- };
3
+ import type { ClientProfile } from "./client-presentation.js";
10
4
  /**
11
- * Serializes a capability result for MCP. Screenshot bytes stay in the JSON
12
- * (Cursor CLI agents never see the image content block) and are also emitted
13
- * as an image block for hosts that render it. App URLs stay in the JSON for
14
- * the model and MCP Apps openLink buttons — they are not duplicated as a
15
- * markdown chat dump.
5
+ * Serializes a capability result into MCP content blocks.
16
6
  *
17
- * Decisions travel as data too. Prepending a rendered plan plus instructions
18
- * on how to offer the options made the model paste that scaffolding into the
19
- * chat; the server instructions say how to ask.
7
+ * Block order is important: callers read `content[0]` as the JSON body and
8
+ * `content.at(-1)` as the closing instruction.
9
+ *
10
+ * Screenshot bytes stay in the JSON as well as the image block, because Cursor
11
+ * CLI agents never see image blocks. A plan gets its own markdown block where a
12
+ * model renders the ask: in the JSON it is one escaped string, and a model that
13
+ * re-lays it out demotes headings and merges bullets. That block holds the plan
14
+ * and title only - an earlier version bundled instructions and option labels,
15
+ * which models pasted into the chat as a menu.
20
16
  */
21
17
  export declare function formatMcpToolContent(result: CapabilityResult<unknown>, progress?: Array<{
22
18
  type: string;
23
19
  message: string;
24
- }>): ContentBlock[];
25
- export {};
20
+ }>, profile?: ClientProfile): ContentBlock[];
@@ -1,16 +1,23 @@
1
+ import { fromMarkdown } from "mdast-util-from-markdown";
2
+ import { gfmAutolinkLiteralFromMarkdown } from "mdast-util-gfm-autolink-literal";
3
+ import { gfmAutolinkLiteral } from "micromark-extension-gfm-autolink-literal";
4
+ import { isRecord, readResult } from "./instructions/result.js";
1
5
  /**
2
- * Serializes a capability result for MCP. Screenshot bytes stay in the JSON
3
- * (Cursor CLI agents never see the image content block) and are also emitted
4
- * as an image block for hosts that render it. App URLs stay in the JSON for
5
- * the model and MCP Apps openLink buttons — they are not duplicated as a
6
- * markdown chat dump.
6
+ * Serializes a capability result into MCP content blocks.
7
7
  *
8
- * Decisions travel as data too. Prepending a rendered plan plus instructions
9
- * on how to offer the options made the model paste that scaffolding into the
10
- * chat; the server instructions say how to ask.
8
+ * Block order is important: callers read `content[0]` as the JSON body and
9
+ * `content.at(-1)` as the closing instruction.
10
+ *
11
+ * Screenshot bytes stay in the JSON as well as the image block, because Cursor
12
+ * CLI agents never see image blocks. A plan gets its own markdown block where a
13
+ * model renders the ask: in the JSON it is one escaped string, and a model that
14
+ * re-lays it out demotes headings and merges bullets. That block holds the plan
15
+ * and title only - an earlier version bundled instructions and option labels,
16
+ * which models pasted into the chat as a menu.
11
17
  */
12
- export function formatMcpToolContent(result, progress = []) {
13
- const { screenshotBase64, textResult } = extractScreenshot(result);
18
+ export function formatMcpToolContent(result, progress = [], profile) {
19
+ const displayed = withDisplayedMentions(result);
20
+ const { publishDetailsUrl, screenshotBase64, textResult } = extractRichContent(displayed);
14
21
  const content = [];
15
22
  // Every text block ends in a newline because hosts concatenate them: without
16
23
  // it the trail read "}[progress] Creating application[progress] Connecting
@@ -20,6 +27,21 @@ export function formatMcpToolContent(result, progress = []) {
20
27
  text: `${JSON.stringify(textResult, null, 2)}\n`,
21
28
  type: "text",
22
29
  });
30
+ if (profile?.hasNativeAskForm) {
31
+ const plan = planMarkdown(displayed);
32
+ if (plan) {
33
+ content.push({ text: `\n${plan}\n\n`, type: "text" });
34
+ }
35
+ }
36
+ if (publishDetailsUrl) {
37
+ content.push({
38
+ description: "View publish details",
39
+ name: "publish-details",
40
+ title: "View publish details",
41
+ type: "resource_link",
42
+ uri: publishDetailsUrl,
43
+ });
44
+ }
23
45
  content.push(...progress.map((event) => ({
24
46
  text: `[${event.type}] ${event.message}\n`,
25
47
  type: "text",
@@ -33,16 +55,153 @@ export function formatMcpToolContent(result, progress = []) {
33
55
  }
34
56
  return content;
35
57
  }
36
- function extractScreenshot(result) {
58
+ function planMarkdown(result) {
59
+ const flat = readResult(result);
60
+ if (flat.status !== "needs_decision" || flat.decisionKind !== "plan") {
61
+ return undefined;
62
+ }
63
+ const decision = flat.value.decision;
64
+ if (!isRecord(decision)) {
65
+ return undefined;
66
+ }
67
+ const plan = typeof decision.plan === "string" ? decision.plan.trim() : "";
68
+ if (!plan) {
69
+ return undefined;
70
+ }
71
+ const title = typeof decision.title === "string" ? decision.title.trim() : "";
72
+ return title ? `**${title}**\n\n${plan}` : plan;
73
+ }
74
+ /**
75
+ * An integration mention as Superblocks writes it: `@Orders[id=<uuid>]`. The
76
+ * editor turns that into a pill, so it matches the decision card's pattern.
77
+ */
78
+ const ENTITY_MENTION = /(\\*)@((?:(?!\[id=)[^@\r\n])+?(?<!\s))\[id=[^\]\r\n]+\]/gu;
79
+ /**
80
+ * Bolds integration names without changing the plan's authored Markdown.
81
+ *
82
+ * Only the MCP copy changes. The decision card reads `structuredContent`,
83
+ * which still carries the tags it renders as pills.
84
+ */
85
+ function withDisplayedMentions(result) {
86
+ if (result.kind !== "ok" || !isRecord(result.value)) {
87
+ return result;
88
+ }
89
+ const value = result.value;
90
+ const decision = value.decision;
91
+ if (value.status !== "needs_decision" ||
92
+ !isRecord(decision) ||
93
+ decision.kind !== "plan" ||
94
+ typeof decision.plan !== "string") {
95
+ return result;
96
+ }
97
+ const plan = displayPlanMentions(decision.plan);
98
+ if (plan === decision.plan) {
99
+ return result;
100
+ }
101
+ return {
102
+ ...result,
103
+ value: { ...value, decision: { ...decision, plan } },
104
+ };
105
+ }
106
+ function displayPlanMentions(source) {
107
+ let plan = source;
108
+ const masked = source.replace(ENTITY_MENTION, (mention, escapes) => escapes.length % 2 === 1
109
+ ? mention
110
+ : `${escapes}@${"x".repeat(mention.length - escapes.length - 2)};`);
111
+ function visit(node, bold = false, before, after) {
112
+ if (node.type === "link" &&
113
+ source[node.position?.start.offset ?? -1] !== "[") {
114
+ return;
115
+ }
116
+ if (node.type === "text") {
117
+ const start = node.position?.start.offset;
118
+ const end = node.position?.end.offset;
119
+ if (start === undefined || end === undefined) {
120
+ return;
121
+ }
122
+ const original = source.slice(start, end);
123
+ let replacementStart = start;
124
+ let replacementEnd = end;
125
+ let text = "";
126
+ let cursor = 0;
127
+ let previousMentionEnd = -1;
128
+ for (const match of original.matchAll(ENTITY_MENTION)) {
129
+ const [mention, escapes = "", label] = match;
130
+ if (label === undefined || escapes.length % 2 === 1) {
131
+ continue;
132
+ }
133
+ text += original.slice(cursor, match.index);
134
+ const literal = label.replace(/[\\`*_[\]<>&~|]/g, "\\$&");
135
+ if (bold) {
136
+ text += escapes + literal;
137
+ }
138
+ else {
139
+ const joinsMention = escapes.length === 0 && previousMentionEnd === match.index;
140
+ const joinsStrong = escapes.length === 0 &&
141
+ match.index === 0 &&
142
+ before?.type === "strong" &&
143
+ before.position?.end.offset === start &&
144
+ source.slice(start - 2, start) === "**";
145
+ if (joinsMention) {
146
+ text = text.slice(0, -2);
147
+ }
148
+ if (joinsStrong) {
149
+ replacementStart -= 2;
150
+ }
151
+ text +=
152
+ escapes +
153
+ (joinsMention || joinsStrong ? "" : "**") +
154
+ literal +
155
+ "**";
156
+ }
157
+ cursor = match.index + mention.length;
158
+ previousMentionEnd = cursor;
159
+ }
160
+ if (!bold &&
161
+ previousMentionEnd === original.length &&
162
+ after?.type === "strong" &&
163
+ after.position?.start.offset === end &&
164
+ source.slice(end, end + 2) === "**") {
165
+ text = text.slice(0, -2);
166
+ replacementEnd += 2;
167
+ }
168
+ text += original.slice(cursor);
169
+ plan =
170
+ plan.slice(0, replacementStart) + text + plan.slice(replacementEnd);
171
+ }
172
+ else if ("children" in node) {
173
+ for (let index = node.children.length - 1; index >= 0; index--) {
174
+ const child = node.children[index];
175
+ if (!child) {
176
+ continue;
177
+ }
178
+ visit(child, bold || node.type === "strong", node.children[index - 1], node.children[index + 1]);
179
+ }
180
+ }
181
+ }
182
+ visit(fromMarkdown(masked, {
183
+ extensions: [gfmAutolinkLiteral()],
184
+ mdastExtensions: [gfmAutolinkLiteralFromMarkdown()],
185
+ }));
186
+ return plan;
187
+ }
188
+ function extractRichContent(result) {
37
189
  if (result.kind !== "ok" ||
38
190
  !result.value ||
39
191
  typeof result.value !== "object") {
40
- return { screenshotBase64: undefined, textResult: result };
192
+ return {
193
+ publishDetailsUrl: undefined,
194
+ screenshotBase64: undefined,
195
+ textResult: result,
196
+ };
41
197
  }
42
198
  const value = result.value;
199
+ const publishDetailsUrl = typeof value.publishDetailsUrl === "string"
200
+ ? value.publishDetailsUrl
201
+ : undefined;
43
202
  const screenshotBase64 = typeof value.screenshotBase64 === "string"
44
203
  ? value.screenshotBase64
45
204
  : undefined;
46
- return { screenshotBase64, textResult: result };
205
+ return { publishDetailsUrl, screenshotBase64, textResult: result };
47
206
  }
48
207
  //# sourceMappingURL=format-tool-content.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-tool-content.js","sourceRoot":"","sources":["../../../src/transports/mcp/format-tool-content.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAiC,EACjC,WAAqD,EAAE;IAEvD,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,wBAAwB;IACxB,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;QAChD,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CACV,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI;QAC1C,IAAI,EAAE,MAAe;KACtB,CAAC,CAAC,CACJ,CAAC;IACF,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,YAAY;YACtB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiC;IAI1D,IACE,MAAM,CAAC,IAAI,KAAK,IAAI;QACpB,CAAC,MAAM,CAAC,KAAK;QACb,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAChC,CAAC;QACD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAC7D,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAgC,CAAC;IACtD,MAAM,gBAAgB,GACpB,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;QACxC,CAAC,CAAC,KAAK,CAAC,gBAAgB;QACxB,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"format-tool-content.js","sourceRoot":"","sources":["../../../src/transports/mcp/format-tool-content.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAI9E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAiC,EACjC,WAAqD,EAAE,EACvD,OAAuB;IAEvB,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,GACvD,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,wBAAwB;IACxB,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;QAChD,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IACH,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC;YACX,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,sBAAsB;YAC7B,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,iBAAiB;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,IAAI,CACV,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI;QAC1C,IAAI,EAAE,MAAe;KACtB,CAAC,CAAC,CACJ,CAAC;IACF,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,YAAY;YACtB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,MAAiC;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,cAAc,GAClB,2DAA2D,CAAC;AAE9D;;;;;GAKG;AACH,SAAS,qBAAqB,CAC5B,MAAiC;IAEjC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,IACE,KAAK,CAAC,MAAM,KAAK,gBAAgB;QACjC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACnB,QAAQ,CAAC,IAAI,KAAK,MAAM;QACxB,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EACjC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACjE,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QACtB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CACrE,CAAC;IACF,SAAS,KAAK,CACZ,IAAW,EACX,IAAI,GAAG,KAAK,EACZ,MAAc,EACd,KAAa;QAEb,IACE,IAAI,CAAC,IAAI,KAAK,MAAM;YACpB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EACjD,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC;YACtC,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC1C,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,IAAI,cAAc,GAAG,GAAG,CAAC;YACzB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,kBAAkB,GAAG,CAAC,CAAC,CAAC;YAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;gBAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpD,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;gBAC1D,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,IAAI,OAAO,GAAG,OAAO,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,YAAY,GAChB,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,KAAK,KAAK,CAAC,KAAK,CAAC;oBAC7D,MAAM,WAAW,GACf,OAAO,CAAC,MAAM,KAAK,CAAC;wBACpB,KAAK,CAAC,KAAK,KAAK,CAAC;wBACjB,MAAM,EAAE,IAAI,KAAK,QAAQ;wBACzB,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK;wBACrC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;oBAC1C,IAAI,YAAY,EAAE,CAAC;wBACjB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3B,CAAC;oBACD,IAAI,WAAW,EAAE,CAAC;wBAChB,gBAAgB,IAAI,CAAC,CAAC;oBACxB,CAAC;oBACD,IAAI;wBACF,OAAO;4BACP,CAAC,YAAY,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;4BACzC,OAAO;4BACP,IAAI,CAAC;gBACT,CAAC;gBACD,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;gBACtC,kBAAkB,GAAG,MAAM,CAAC;YAC9B,CAAC;YACD,IACE,CAAC,IAAI;gBACL,kBAAkB,KAAK,QAAQ,CAAC,MAAM;gBACtC,KAAK,EAAE,IAAI,KAAK,QAAQ;gBACxB,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,KAAK,GAAG;gBACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,EACnC,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzB,cAAc,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI;gBACF,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAC9B,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,SAAS;gBACX,CAAC;gBACD,KAAK,CACH,KAAK,EACL,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAC9B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CACzB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,CACH,YAAY,CAAC,MAAM,EAAE;QACnB,UAAU,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAClC,eAAe,EAAE,CAAC,8BAA8B,EAAE,CAAC;KACpD,CAAC,CACH,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAiC;IAK3D,IACE,MAAM,CAAC,IAAI,KAAK,IAAI;QACpB,CAAC,MAAM,CAAC,KAAK;QACb,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAChC,CAAC;QACD,OAAO;YACL,iBAAiB,EAAE,SAAS;YAC5B,gBAAgB,EAAE,SAAS;YAC3B,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAgC,CAAC;IACtD,MAAM,iBAAiB,GACrB,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ;QACzC,CAAC,CAAC,KAAK,CAAC,iBAAiB;QACzB,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,gBAAgB,GACpB,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;QACxC,CAAC,CAAC,KAAK,CAAC,gBAAgB;QACxB,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * What to tell the calling agent after a tool call.
3
+ *
4
+ * One file per tool under `tools/` holds that tool's rules; `readResult`
5
+ * flattens a capability result so those rules read as a plain list of
6
+ * conditions. Callers only need the three functions below.
7
+ */
8
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
9
+ import type { CapabilityResult } from "../../../capabilities/types.js";
10
+ import type { ClientProfile } from "../client-presentation.js";
11
+ import type { ToolName } from "../tool-names.js";
12
+ /** The agent's next step after `tool` returned `result`, if it needs one. */
13
+ export declare function instructionFor(tool: ToolName, result: CapabilityResult<unknown>, profile: ClientProfile): string | undefined;
14
+ /**
15
+ * Writes `agentInstructions` onto a capability result, leaving any the
16
+ * capability set itself in place (activity relay and similar).
17
+ */
18
+ export declare function attachAgentInstructions(tool: ToolName, result: CapabilityResult<unknown>, profile: ClientProfile): CapabilityResult<unknown>;
19
+ /**
20
+ * The same, for Admin tools: they return MCP `CallToolResult` JSON rather than
21
+ * a capability result, so the payload is parsed and rewritten.
22
+ */
23
+ export declare function attachAdminAgentInstructions(tool: ToolName, result: CallToolResult, profile: ClientProfile): CallToolResult;