@cursor/july 0.1.37 → 0.1.38

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 (110) hide show
  1. package/README.md +3 -1
  2. package/dist/channels/slack/api.d.ts +5 -0
  3. package/dist/channels/slack/api.d.ts.map +1 -1
  4. package/dist/channels/slack/api.js +57 -18
  5. package/dist/channels/slack/constants.d.ts +2 -0
  6. package/dist/channels/slack/constants.d.ts.map +1 -1
  7. package/dist/channels/slack/constants.js +2 -0
  8. package/dist/connections.d.ts +14 -2
  9. package/dist/connections.d.ts.map +1 -1
  10. package/dist/connections.js +13 -1
  11. package/dist/docs/404.html +3 -3
  12. package/dist/docs/ab.html +6 -6
  13. package/dist/docs/assets/{app.Bu9SRvZ9.js → app.B4nJHNwO.js} +1 -1
  14. package/dist/docs/assets/chunks/@localSearchIndexroot.B6oHmJzD.js +1 -0
  15. package/dist/docs/assets/chunks/{VPLocalSearchBox.D9u9czHO.js → VPLocalSearchBox.DHrr3pLB.js} +2 -2
  16. package/dist/docs/assets/chunks/theme.DQNgSMha.js +2 -0
  17. package/dist/docs/assets/{example-agents_weather-agent.md.CrGZ0SqR.js → example-agents_weather-agent.md.DC3lINjo.js} +5 -6
  18. package/dist/docs/assets/{reference_connections.md.DGqAsFXb.js → reference_connections.md.CSQiNzre.js} +11 -2
  19. package/dist/docs/assets/{reference_connections.md.DGqAsFXb.lean.js → reference_connections.md.CSQiNzre.lean.js} +1 -1
  20. package/dist/docs/assets/{style.Bj-IXa5W.css → style.CK3hwt6q.css} +1 -1
  21. package/dist/docs/building-with-agents.html +6 -6
  22. package/dist/docs/concepts.html +6 -6
  23. package/dist/docs/deployment.html +6 -6
  24. package/dist/docs/evals.html +6 -6
  25. package/dist/docs/example-agents/approval-buddy.html +6 -6
  26. package/dist/docs/example-agents/benny.html +6 -6
  27. package/dist/docs/example-agents/bugbot.html +6 -6
  28. package/dist/docs/example-agents/codebase-wiki.html +6 -6
  29. package/dist/docs/example-agents/codeowners-review.html +6 -6
  30. package/dist/docs/example-agents/concierge.html +6 -6
  31. package/dist/docs/example-agents/fsd.html +6 -6
  32. package/dist/docs/example-agents/index.html +6 -6
  33. package/dist/docs/example-agents/knowledge-base.html +6 -6
  34. package/dist/docs/example-agents/oncall.html +6 -6
  35. package/dist/docs/example-agents/security-reviewer.html +6 -6
  36. package/dist/docs/example-agents/slack-agent.html +6 -6
  37. package/dist/docs/example-agents/weather-agent.html +10 -11
  38. package/dist/docs/guides/agent-to-agent.html +6 -6
  39. package/dist/docs/guides/cloud-runtime.html +6 -6
  40. package/dist/docs/guides/github.html +6 -6
  41. package/dist/docs/guides/human-in-the-loop.html +6 -6
  42. package/dist/docs/guides/mcp-oauth.html +6 -6
  43. package/dist/docs/guides/slack.html +6 -6
  44. package/dist/docs/guides/webhooks.html +6 -6
  45. package/dist/docs/hashmap.json +1 -1
  46. package/dist/docs/hillclimbing.html +6 -6
  47. package/dist/docs/index.html +6 -6
  48. package/dist/docs/quickstart.html +6 -6
  49. package/dist/docs/reference/agent-config.html +6 -6
  50. package/dist/docs/reference/artifacts.html +6 -6
  51. package/dist/docs/reference/channels.html +6 -6
  52. package/dist/docs/reference/cli.html +6 -6
  53. package/dist/docs/reference/connections.html +17 -8
  54. package/dist/docs/reference/hooks.html +6 -6
  55. package/dist/docs/reference/http-api.html +6 -6
  56. package/dist/docs/reference/instructions.html +6 -6
  57. package/dist/docs/reference/playground.html +5 -5
  58. package/dist/docs/reference/project-layout.html +6 -6
  59. package/dist/docs/reference/prompt.html +6 -6
  60. package/dist/docs/reference/schedules.html +6 -6
  61. package/dist/docs/reference/sessions.html +6 -6
  62. package/dist/docs/reference/skills.html +6 -6
  63. package/dist/docs/reference/subagents.html +6 -6
  64. package/dist/docs/reference/tools.html +6 -6
  65. package/dist/docs/scaffolding-agents.html +5 -5
  66. package/dist/docs/storage.html +6 -6
  67. package/dist/docs/troubleshooting.html +5 -5
  68. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  69. package/dist/files-backends/cursor-hosted.js +13 -2
  70. package/dist/internal/discovery.d.ts.map +1 -1
  71. package/dist/internal/discovery.js +95 -2
  72. package/dist/internal/framework-storage-selection.d.ts +37 -0
  73. package/dist/internal/framework-storage-selection.d.ts.map +1 -0
  74. package/dist/internal/framework-storage-selection.js +35 -0
  75. package/dist/internal/inline-stdio-define-stub.d.ts +3 -0
  76. package/dist/internal/inline-stdio-define-stub.d.ts.map +1 -0
  77. package/dist/internal/inline-stdio-define-stub.js +4 -0
  78. package/dist/internal/inline-stdio-mcp.d.ts +32 -0
  79. package/dist/internal/inline-stdio-mcp.d.ts.map +1 -0
  80. package/dist/internal/inline-stdio-mcp.js +180 -0
  81. package/dist/internal/package-inline-stdio.d.ts +12 -0
  82. package/dist/internal/package-inline-stdio.d.ts.map +1 -0
  83. package/dist/internal/package-inline-stdio.js +109 -0
  84. package/dist/internal/session-engine.d.ts.map +1 -1
  85. package/dist/internal/session-engine.js +9 -2
  86. package/dist/playground/assets/index-Bs6TgymR.css +1 -0
  87. package/dist/playground/assets/{index-DRtusTV1.js → index-DLtPsWuV.js} +43 -43
  88. package/dist/playground/index.html +2 -2
  89. package/dist/types.d.ts +20 -1
  90. package/dist/types.d.ts.map +1 -1
  91. package/dist/types.js +4 -0
  92. package/docs/example-agents/weather-agent.md +25 -22
  93. package/docs/reference/connections.md +17 -0
  94. package/package.json +3 -1
  95. package/skills/framework-map/SKILL.md +1 -1
  96. package/src/channels/slack/api.ts +72 -20
  97. package/src/channels/slack/constants.ts +2 -0
  98. package/src/connections.ts +18 -1
  99. package/src/files-backends/cursor-hosted.ts +13 -2
  100. package/src/internal/discovery.ts +111 -1
  101. package/src/internal/framework-storage-selection.ts +45 -0
  102. package/src/internal/inline-stdio-define-stub.ts +4 -0
  103. package/src/internal/inline-stdio-mcp.ts +229 -0
  104. package/src/internal/package-inline-stdio.ts +121 -0
  105. package/src/internal/session-engine.ts +9 -2
  106. package/src/types.ts +27 -0
  107. package/dist/docs/assets/chunks/@localSearchIndexroot.pVFW7oJd.js +0 -1
  108. package/dist/docs/assets/chunks/theme.Bc61GzOf.js +0 -2
  109. package/dist/playground/assets/index-DZp6n4bv.css +0 -1
  110. /package/dist/docs/assets/{example-agents_weather-agent.md.CrGZ0SqR.lean.js → example-agents_weather-agent.md.DC3lINjo.lean.js} +0 -0
package/README.md CHANGED
@@ -685,7 +685,9 @@ export default defineConnection({
685
685
  ```
686
686
 
687
687
  The filename becomes the MCP server name. `{ command, args, env, cwd }`
688
- declares a local stdio server instead, and `{ agent: "<slug>" }` declares a
688
+ declares a local stdio server instead. `{ tools }` authors TypeScript
689
+ handlers that the Agent SDK packages as stdio MCP for the agent
690
+ environment, including a repo-less cloud VM. `{ agent: "<slug>" }` declares a
689
691
  **peer MCP connection** to another agent mounted on the same serve host (see
690
692
  "Agent-to-agent: every agent is an MCP server").
691
693
 
@@ -34,6 +34,11 @@ export declare function callSlackApiSoft(args: {
34
34
  body: Record<string, unknown>;
35
35
  }): Promise<SoftSlackResult>;
36
36
  export declare function truncateTypingStatus(status: string, max?: number): string;
37
+ /**
38
+ * Slack caps `loading_messages` at 5. When the cleaned list is longer,
39
+ * send a wrapping time-based window of 5 so later strings still appear.
40
+ */
41
+ export declare function truncateLoadingMessages(messages: string[], nowMs?: number): string[];
37
42
  export declare function truncateTitle(title: string, max?: number): string;
38
43
  export declare function setThreadStatus(args: {
39
44
  botToken: SlackBotToken | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/api.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  });
12
12
  };
13
13
  import { ErrorCode, WebClient } from "@slack/web-api";
14
- import { SLACK_DEFAULT_LOADING_MESSAGES, SLACK_LOADING_MESSAGE_MAX_LEN, SLACK_STATUS_MAX_LEN, SLACK_TITLE_MAX_LEN, SLACK_UNSUPPORTED_ERRORS, } from "./constants.js";
14
+ import { slackifyMarkdown } from "slackify-markdown";
15
+ import { SLACK_DEFAULT_LOADING_MESSAGES, SLACK_LOADING_MESSAGE_MAX_LEN, SLACK_LOADING_MESSAGES_MAX, SLACK_STATUS_MAX_LEN, SLACK_TITLE_MAX_LEN, SLACK_TYPING_MIN_INTERVAL_MS, SLACK_UNSUPPORTED_ERRORS, } from "./constants.js";
15
16
  import { tryResolveAppToken, tryResolveBotToken } from "./credentials.js";
16
17
  import { defaultSlackLog } from "./log.js";
17
18
  /** Whether a bot token slot holds an API transport instead of a token. */
@@ -110,11 +111,27 @@ export function truncateTypingStatus(status, max) {
110
111
  }
111
112
  return `${trimmed.slice(0, limit - 1)}…`;
112
113
  }
113
- function truncateLoadingMessages(messages) {
114
- return messages
114
+ /**
115
+ * Slack caps `loading_messages` at 5. When the cleaned list is longer,
116
+ * send a wrapping time-based window of 5 so later strings still appear.
117
+ */
118
+ export function truncateLoadingMessages(messages, nowMs = Date.now()) {
119
+ const cleaned = messages
115
120
  .map((message) => truncateTypingStatus(message, SLACK_LOADING_MESSAGE_MAX_LEN))
116
- .filter((message) => message.length > 0)
117
- .slice(0, 5);
121
+ .filter((message) => message.length > 0);
122
+ if (cleaned.length <= SLACK_LOADING_MESSAGES_MAX) {
123
+ return cleaned;
124
+ }
125
+ const start = Math.floor(nowMs / SLACK_TYPING_MIN_INTERVAL_MS) % cleaned.length;
126
+ const window = [];
127
+ for (let i = 0; i < SLACK_LOADING_MESSAGES_MAX; i++) {
128
+ const message = cleaned[(start + i) % cleaned.length];
129
+ if (message === undefined) {
130
+ break;
131
+ }
132
+ window.push(message);
133
+ }
134
+ return window;
118
135
  }
119
136
  export function truncateTitle(title, max) {
120
137
  const limit = max !== null && max !== void 0 ? max : SLACK_TITLE_MAX_LEN;
@@ -247,6 +264,31 @@ export function stopChatStream(args) {
247
264
  });
248
265
  });
249
266
  }
267
+ const SLACK_MRKDWN_LITERAL_PATTERN = /<(?:[@#!][^>\r\n]+|(?:https?|ftp|mailto|tel):[^>\r\n]+)>/gi;
268
+ const SLACK_MRKDWN_LINK_PATTERN = /<https?:\/\/[^|>]+\|/;
269
+ /**
270
+ * Convert CommonMark accepted by `markdown_text` to Slack's legacy mrkdwn
271
+ * without letting the CommonMark parser reinterpret Slack-native syntax.
272
+ */
273
+ function markdownToSlackMrkdwn(markdown) {
274
+ const literals = [];
275
+ const placeholder = (index) => `\ue000SLACK_LITERAL_${index}\ue001`;
276
+ const protectedMarkdown = markdown.replace(SLACK_MRKDWN_LITERAL_PATTERN, (literal) => {
277
+ const index = literals.push(literal) - 1;
278
+ return placeholder(index);
279
+ });
280
+ let converted = slackifyMarkdown(protectedMarkdown);
281
+ if (!markdown.endsWith("\n") && converted.endsWith("\n")) {
282
+ converted = converted.slice(0, -1);
283
+ }
284
+ for (const [index, literal] of literals.entries()) {
285
+ converted = converted.replaceAll(placeholder(index), literal);
286
+ }
287
+ return converted;
288
+ }
289
+ function requiresMrkdwnText(text) {
290
+ return text.includes("<!subteam^") || SLACK_MRKDWN_LINK_PATTERN.test(text);
291
+ }
250
292
  export function postMessage(args) {
251
293
  return __awaiter(this, void 0, void 0, function* () {
252
294
  var _a, _b;
@@ -265,19 +307,17 @@ export function postMessage(args) {
265
307
  base.metadata = args.metadata;
266
308
  }
267
309
  const hasBlocks = args.blocks !== undefined && args.blocks.length > 0;
310
+ const convertToMrkdwn = args.plainText !== true && !hasBlocks && requiresMrkdwnText(args.text);
268
311
  // User-group mentions (`<!subteam^…>`) and Slack mrkdwn links
269
312
  // (`<https://…|label>`) only render correctly via mrkdwn `text`,
270
313
  // not `markdown_text`.
271
- const usePlainText = args.plainText === true ||
272
- hasBlocks ||
273
- args.text.includes("<!subteam^") ||
274
- /<https?:\/\/[^|>]+\|/.test(args.text);
314
+ const useText = args.plainText === true || hasBlocks || convertToMrkdwn;
275
315
  let response;
276
- if (usePlainText) {
316
+ if (useText) {
277
317
  response = yield callSlackApi({
278
318
  botToken: args.botToken,
279
319
  operation: "chat.postMessage",
280
- body: Object.assign(Object.assign(Object.assign({}, base), { text: args.text }), (hasBlocks ? { blocks: args.blocks } : {})),
320
+ body: Object.assign(Object.assign(Object.assign({}, base), { text: convertToMrkdwn ? markdownToSlackMrkdwn(args.text) : args.text }), (hasBlocks ? { blocks: args.blocks } : {})),
281
321
  });
282
322
  }
283
323
  else {
@@ -298,7 +338,7 @@ export function postMessage(args) {
298
338
  response = yield callSlackApi({
299
339
  botToken: args.botToken,
300
340
  operation: "chat.postMessage",
301
- body: Object.assign(Object.assign({}, base), { text: args.text }),
341
+ body: Object.assign(Object.assign({}, base), { text: markdownToSlackMrkdwn(args.text) }),
302
342
  });
303
343
  }
304
344
  }
@@ -344,16 +384,15 @@ export function updateMessage(args) {
344
384
  channel: args.channel,
345
385
  ts: args.ts,
346
386
  };
347
- if (args.blocks !== undefined ||
348
- args.plainText === true ||
349
- args.text.includes("<!subteam^") ||
350
- /<https?:\/\/[^|>]+\|/.test(args.text)) {
387
+ const useRawText = args.blocks !== undefined || args.plainText === true;
388
+ const convertToMrkdwn = !useRawText && requiresMrkdwnText(args.text);
389
+ if (useRawText || convertToMrkdwn) {
351
390
  // Blocks / plainText / user-group mentions / mrkdwn links force the
352
391
  // legacy text path (same as postMessage).
353
392
  return callSlackApiSoft({
354
393
  botToken: args.botToken,
355
394
  operation: "chat.update",
356
- body: Object.assign(Object.assign(Object.assign({}, base), { text: args.text }), (args.blocks !== undefined ? { blocks: args.blocks } : {})),
395
+ body: Object.assign(Object.assign(Object.assign({}, base), { text: convertToMrkdwn ? markdownToSlackMrkdwn(args.text) : args.text }), (args.blocks !== undefined ? { blocks: args.blocks } : {})),
357
396
  });
358
397
  }
359
398
  let result = yield callSlackApiSoft({
@@ -372,7 +411,7 @@ export function updateMessage(args) {
372
411
  result = yield callSlackApiSoft({
373
412
  botToken: args.botToken,
374
413
  operation: "chat.update",
375
- body: Object.assign(Object.assign({}, base), { text: args.text }),
414
+ body: Object.assign(Object.assign({}, base), { text: markdownToSlackMrkdwn(args.text) }),
376
415
  });
377
416
  }
378
417
  return result;
@@ -9,6 +9,8 @@ export declare const SLACK_TYPING_MIN_INTERVAL_MS = 5000;
9
9
  */
10
10
  export declare const SLACK_STATUS_MAX_LEN = 50;
11
11
  export declare const SLACK_LOADING_MESSAGE_MAX_LEN = 50;
12
+ /** Slack `assistant.threads.setStatus` accepts at most 5 `loading_messages`. */
13
+ export declare const SLACK_LOADING_MESSAGES_MAX = 5;
12
14
  export declare const SLACK_TITLE_MAX_LEN = 80;
13
15
  /** Rotating assistant status lines (Slack `loading_messages`). */
14
16
  export declare const SLACK_DEFAULT_LOADING_MESSAGES: readonly ["Thinking…", "Working on it…", "Almost there…"];
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/constants.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,eAAO,MAAM,gBAAgB,UAAU,CAAC;AACxC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAClD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,kEAAkE;AAClE,eAAO,MAAM,8BAA8B,YACzC,WAAW,EACX,gBAAgB,EAChB,eAAe,CACP,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAO/C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/constants.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,eAAO,MAAM,gBAAgB,UAAU,CAAC;AACxC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAClD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,kEAAkE;AAClE,eAAO,MAAM,8BAA8B,YACzC,WAAW,EACX,gBAAgB,EAChB,eAAe,CACP,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAO/C,CAAC"}
@@ -9,6 +9,8 @@ export const SLACK_TYPING_MIN_INTERVAL_MS = 5000;
9
9
  */
10
10
  export const SLACK_STATUS_MAX_LEN = 50;
11
11
  export const SLACK_LOADING_MESSAGE_MAX_LEN = 50;
12
+ /** Slack `assistant.threads.setStatus` accepts at most 5 `loading_messages`. */
13
+ export const SLACK_LOADING_MESSAGES_MAX = 5;
12
14
  export const SLACK_TITLE_MAX_LEN = 80;
13
15
  /** Rotating assistant status lines (Slack `loading_messages`). */
14
16
  export const SLACK_DEFAULT_LOADING_MESSAGES = [
@@ -14,6 +14,18 @@
14
14
  * headers: { authorization: `Bearer ${process.env.LINEAR_TOKEN}` },
15
15
  * });
16
16
  *
17
+ * // TypeScript tools, packaged as stdio MCP for the agent environment:
18
+ * export default defineConnection({
19
+ * tools: {
20
+ * probe_cloud_tool: {
21
+ * description: "Prove the tool ran in the agent environment.",
22
+ * async execute({ label }) {
23
+ * return { ok: true, label };
24
+ * },
25
+ * },
26
+ * },
27
+ * });
28
+ *
17
29
  * // privileged connector, model cannot call directly:
18
30
  * export default defineConnection({
19
31
  * cursorAccount: true,
@@ -77,7 +89,7 @@
77
89
  * ```
78
90
  */
79
91
  import type { ConnectionConfig, ConnectionDefinition } from "./types.js";
80
- export type { ConnectionConfig, ConnectionDefinition, ConnectionTransport, HostMcpCallResult, HostMcpRegistry, HostMcpToolInfo, } from "./types.js";
81
- export { normalizeCursorAccountServers } from "./types.js";
92
+ export type { ConnectionConfig, ConnectionDefinition, ConnectionTransport, HostMcpCallResult, HostMcpRegistry, HostMcpToolInfo, InlineStdioConnectionConfig, InlineStdioToolConfig, } from "./types.js";
93
+ export { isInlineStdioConnection, normalizeCursorAccountServers, } from "./types.js";
82
94
  export declare function defineConnection(config: ConnectionConfig): ConnectionDefinition;
83
95
  //# sourceMappingURL=connections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzE,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,gBAAgB,GACvB,oBAAoB,CAEtB"}
1
+ {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzE,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAEpB,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,gBAAgB,GACvB,oBAAoB,CAEtB"}
@@ -14,6 +14,18 @@
14
14
  * headers: { authorization: `Bearer ${process.env.LINEAR_TOKEN}` },
15
15
  * });
16
16
  *
17
+ * // TypeScript tools, packaged as stdio MCP for the agent environment:
18
+ * export default defineConnection({
19
+ * tools: {
20
+ * probe_cloud_tool: {
21
+ * description: "Prove the tool ran in the agent environment.",
22
+ * async execute({ label }) {
23
+ * return { ok: true, label };
24
+ * },
25
+ * },
26
+ * },
27
+ * });
28
+ *
17
29
  * // privileged connector, model cannot call directly:
18
30
  * export default defineConnection({
19
31
  * cursorAccount: true,
@@ -77,7 +89,7 @@
77
89
  * ```
78
90
  */
79
91
  import { brandDefinition } from "./internal/brand.js";
80
- export { normalizeCursorAccountServers } from "./types.js";
92
+ export { isInlineStdioConnection, normalizeCursorAccountServers, } from "./types.js";
81
93
  export function defineConnection(config) {
82
94
  return brandDefinition("connection", config);
83
95
  }
@@ -6,17 +6,17 @@
6
6
  <title>404 | Agent SDK</title>
7
7
  <meta name="description" content="Not Found">
8
8
  <meta name="generator" content="VitePress v1.6.4">
9
- <link rel="preload stylesheet" href="/docs/assets/style.Bj-IXa5W.css" as="style">
9
+ <link rel="preload stylesheet" href="/docs/assets/style.CK3hwt6q.css" as="style">
10
10
  <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/docs/assets/app.Bu9SRvZ9.js"></script>
12
+ <script type="module" src="/docs/assets/app.B4nJHNwO.js"></script>
13
13
  <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
14
  <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
15
15
  <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
16
16
  </head>
17
17
  <body>
18
18
  <div id="app"></div>
19
- <script>window.__VP_HASH_MAP__=JSON.parse("{\"ab.md\":\"6cLOW7--\",\"building-with-agents.md\":\"txrcGU2B\",\"concepts.md\":\"CqOsxbMU\",\"deployment.md\":\"CuK5SNjN\",\"evals.md\":\"BQXI3rXy\",\"example-agents_approval-buddy.md\":\"CIiZ9coo\",\"example-agents_benny.md\":\"l7JTmm8X\",\"example-agents_bugbot.md\":\"Dp5JqHSQ\",\"example-agents_codebase-wiki.md\":\"D-lteFf0\",\"example-agents_codeowners-review.md\":\"BU2ZXLf-\",\"example-agents_concierge.md\":\"DA2al_NK\",\"example-agents_fsd.md\":\"DPz9ezO4\",\"example-agents_index.md\":\"DgGBwckv\",\"example-agents_knowledge-base.md\":\"IneynQSR\",\"example-agents_oncall.md\":\"ZE0n6ZFN\",\"example-agents_security-reviewer.md\":\"Dkf1gyo6\",\"example-agents_slack-agent.md\":\"06jQXTAI\",\"example-agents_weather-agent.md\":\"CrGZ0SqR\",\"guides_agent-to-agent.md\":\"Bmbxy-FA\",\"guides_cloud-runtime.md\":\"V5igN4Sq\",\"guides_github.md\":\"R2QlpR75\",\"guides_human-in-the-loop.md\":\"BWvT7UqY\",\"guides_mcp-oauth.md\":\"C7G7IykG\",\"guides_slack.md\":\"zriQpU_9\",\"guides_webhooks.md\":\"BERuBSJW\",\"hillclimbing.md\":\"yXqdlv2R\",\"index.md\":\"CmhptOmN\",\"quickstart.md\":\"C_b6ESpD\",\"reference_agent-config.md\":\"CRmkoxd6\",\"reference_artifacts.md\":\"BGG4bZo-\",\"reference_channels.md\":\"BIabFUAI\",\"reference_cli.md\":\"Byvrg8eu\",\"reference_connections.md\":\"DGqAsFXb\",\"reference_hooks.md\":\"BGDw4VLm\",\"reference_http-api.md\":\"DGrw_wOu\",\"reference_instructions.md\":\"CgoV-YEb\",\"reference_playground.md\":\"CPZhfYaO\",\"reference_project-layout.md\":\"_XdeMahr\",\"reference_prompt.md\":\"BaiweQxE\",\"reference_schedules.md\":\"gmfYzf_I\",\"reference_sessions.md\":\"DBVFi2Sx\",\"reference_skills.md\":\"B_jHN7JL\",\"reference_subagents.md\":\"DSrGLIuB\",\"reference_tools.md\":\"lSrsTxYJ\",\"scaffolding-agents.md\":\"mkc3B_ZW\",\"storage.md\":\"mQDtIULc\",\"troubleshooting.md\":\"B5RVX_tL\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Agent SDK\",\"description\":\"Filesystem-first framework for building and serving Cursor agents.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Quickstart\",\"link\":\"/quickstart\"},{\"text\":\"Guides\",\"link\":\"/guides/webhooks\"},{\"text\":\"Examples\",\"link\":\"/example-agents/\"},{\"text\":\"Reference\",\"link\":\"/reference/project-layout\"}],\"search\":{\"provider\":\"local\"},\"outline\":{\"level\":[2,3]},\"sidebar\":[{\"text\":\"Getting started\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Quickstart\",\"link\":\"/quickstart\"},{\"text\":\"Scaffold an agent with Cursor\",\"link\":\"/scaffolding-agents\"},{\"text\":\"Concepts\",\"link\":\"/concepts\"}]},{\"text\":\"Improving agents\",\"items\":[{\"text\":\"Building agents with agents\",\"link\":\"/building-with-agents\"},{\"text\":\"Evals\",\"link\":\"/evals\"},{\"text\":\"Live A/B metrics\",\"link\":\"/ab\"},{\"text\":\"Storage\",\"link\":\"/storage\"},{\"text\":\"Hillclimbing\",\"link\":\"/hillclimbing\"}]},{\"text\":\"Guides\",\"items\":[{\"text\":\"Webhooks & custom channels\",\"link\":\"/guides/webhooks\"},{\"text\":\"GitHub\",\"link\":\"/guides/github\"},{\"text\":\"Slack\",\"link\":\"/guides/slack\"},{\"text\":\"Human-in-the-loop approvals\",\"link\":\"/guides/human-in-the-loop\"},{\"text\":\"Agent-to-agent\",\"link\":\"/guides/agent-to-agent\"},{\"text\":\"Host MCP OAuth\",\"link\":\"/guides/mcp-oauth\"},{\"text\":\"Cloud runtime\",\"link\":\"/guides/cloud-runtime\"}]},{\"text\":\"Example agents\",\"items\":[{\"text\":\"Choose an example\",\"link\":\"/example-agents/\"},{\"text\":\"Weather agent\",\"link\":\"/example-agents/weather-agent\"},{\"text\":\"Slack agent\",\"link\":\"/example-agents/slack-agent\"},{\"text\":\"Concierge\",\"link\":\"/example-agents/concierge\"},{\"text\":\"Playbook router\",\"link\":\"/example-agents/benny\"},{\"text\":\"Alert investigator\",\"link\":\"/example-agents/oncall\"},{\"text\":\"PR evidence reviewer\",\"link\":\"/example-agents/bugbot\"},{\"text\":\"Approval Buddy\",\"link\":\"/example-agents/approval-buddy\"},{\"text\":\"Security Reviewer\",\"link\":\"/example-agents/security-reviewer\"},{\"text\":\"Remote PR coordinator\",\"link\":\"/example-agents/fsd\"},{\"text\":\"Knowledge base\",\"link\":\"/example-agents/knowledge-base\"},{\"text\":\"Codebase wiki\",\"link\":\"/example-agents/codebase-wiki\"},{\"text\":\"Codeowners review\",\"link\":\"/example-agents/codeowners-review\"}]},{\"text\":\"Operating\",\"items\":[{\"text\":\"Deployment\",\"link\":\"/deployment\"},{\"text\":\"Fix common problems\",\"link\":\"/troubleshooting\"}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Project layout\",\"link\":\"/reference/project-layout\"},{\"text\":\"Agent config\",\"link\":\"/reference/agent-config\"},{\"text\":\"Instructions\",\"link\":\"/reference/instructions\"},{\"text\":\"Tools\",\"link\":\"/reference/tools\"},{\"text\":\"prompt\",\"link\":\"/reference/prompt\"},{\"text\":\"Skills\",\"link\":\"/reference/skills\"},{\"text\":\"MCP Connections\",\"link\":\"/reference/connections\"},{\"text\":\"Subagents\",\"link\":\"/reference/subagents\"},{\"text\":\"Channels\",\"link\":\"/reference/channels\"},{\"text\":\"Schedules & reminders\",\"link\":\"/reference/schedules\"},{\"text\":\"Hooks\",\"link\":\"/reference/hooks\"},{\"text\":\"Artifacts\",\"link\":\"/reference/artifacts\"},{\"text\":\"Sessions & streaming\",\"link\":\"/reference/sessions\"},{\"text\":\"Playground\",\"link\":\"/reference/playground\"},{\"text\":\"CLI\",\"link\":\"/reference/cli\"},{\"text\":\"HTTP API\",\"link\":\"/reference/http-api\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
19
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"ab.md\":\"6cLOW7--\",\"building-with-agents.md\":\"txrcGU2B\",\"concepts.md\":\"CqOsxbMU\",\"deployment.md\":\"CuK5SNjN\",\"evals.md\":\"BQXI3rXy\",\"example-agents_approval-buddy.md\":\"CIiZ9coo\",\"example-agents_benny.md\":\"l7JTmm8X\",\"example-agents_bugbot.md\":\"Dp5JqHSQ\",\"example-agents_codebase-wiki.md\":\"D-lteFf0\",\"example-agents_codeowners-review.md\":\"BU2ZXLf-\",\"example-agents_concierge.md\":\"DA2al_NK\",\"example-agents_fsd.md\":\"DPz9ezO4\",\"example-agents_index.md\":\"DgGBwckv\",\"example-agents_knowledge-base.md\":\"IneynQSR\",\"example-agents_oncall.md\":\"ZE0n6ZFN\",\"example-agents_security-reviewer.md\":\"Dkf1gyo6\",\"example-agents_slack-agent.md\":\"06jQXTAI\",\"example-agents_weather-agent.md\":\"DC3lINjo\",\"guides_agent-to-agent.md\":\"Bmbxy-FA\",\"guides_cloud-runtime.md\":\"V5igN4Sq\",\"guides_github.md\":\"R2QlpR75\",\"guides_human-in-the-loop.md\":\"BWvT7UqY\",\"guides_mcp-oauth.md\":\"C7G7IykG\",\"guides_slack.md\":\"zriQpU_9\",\"guides_webhooks.md\":\"BERuBSJW\",\"hillclimbing.md\":\"yXqdlv2R\",\"index.md\":\"CmhptOmN\",\"quickstart.md\":\"C_b6ESpD\",\"reference_agent-config.md\":\"CRmkoxd6\",\"reference_artifacts.md\":\"BGG4bZo-\",\"reference_channels.md\":\"BIabFUAI\",\"reference_cli.md\":\"Byvrg8eu\",\"reference_connections.md\":\"CSQiNzre\",\"reference_hooks.md\":\"BGDw4VLm\",\"reference_http-api.md\":\"DGrw_wOu\",\"reference_instructions.md\":\"CgoV-YEb\",\"reference_playground.md\":\"CPZhfYaO\",\"reference_project-layout.md\":\"_XdeMahr\",\"reference_prompt.md\":\"BaiweQxE\",\"reference_schedules.md\":\"gmfYzf_I\",\"reference_sessions.md\":\"DBVFi2Sx\",\"reference_skills.md\":\"B_jHN7JL\",\"reference_subagents.md\":\"DSrGLIuB\",\"reference_tools.md\":\"lSrsTxYJ\",\"scaffolding-agents.md\":\"mkc3B_ZW\",\"storage.md\":\"mQDtIULc\",\"troubleshooting.md\":\"B5RVX_tL\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Agent SDK\",\"description\":\"Filesystem-first framework for building and serving Cursor agents.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Quickstart\",\"link\":\"/quickstart\"},{\"text\":\"Guides\",\"link\":\"/guides/webhooks\"},{\"text\":\"Examples\",\"link\":\"/example-agents/\"},{\"text\":\"Reference\",\"link\":\"/reference/project-layout\"}],\"search\":{\"provider\":\"local\"},\"outline\":{\"level\":[2,3]},\"sidebar\":[{\"text\":\"Getting started\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Quickstart\",\"link\":\"/quickstart\"},{\"text\":\"Scaffold an agent with Cursor\",\"link\":\"/scaffolding-agents\"},{\"text\":\"Concepts\",\"link\":\"/concepts\"}]},{\"text\":\"Improving agents\",\"items\":[{\"text\":\"Building agents with agents\",\"link\":\"/building-with-agents\"},{\"text\":\"Evals\",\"link\":\"/evals\"},{\"text\":\"Live A/B metrics\",\"link\":\"/ab\"},{\"text\":\"Storage\",\"link\":\"/storage\"},{\"text\":\"Hillclimbing\",\"link\":\"/hillclimbing\"}]},{\"text\":\"Guides\",\"items\":[{\"text\":\"Webhooks & custom channels\",\"link\":\"/guides/webhooks\"},{\"text\":\"GitHub\",\"link\":\"/guides/github\"},{\"text\":\"Slack\",\"link\":\"/guides/slack\"},{\"text\":\"Human-in-the-loop approvals\",\"link\":\"/guides/human-in-the-loop\"},{\"text\":\"Agent-to-agent\",\"link\":\"/guides/agent-to-agent\"},{\"text\":\"Host MCP OAuth\",\"link\":\"/guides/mcp-oauth\"},{\"text\":\"Cloud runtime\",\"link\":\"/guides/cloud-runtime\"}]},{\"text\":\"Example agents\",\"items\":[{\"text\":\"Choose an example\",\"link\":\"/example-agents/\"},{\"text\":\"Weather agent\",\"link\":\"/example-agents/weather-agent\"},{\"text\":\"Slack agent\",\"link\":\"/example-agents/slack-agent\"},{\"text\":\"Concierge\",\"link\":\"/example-agents/concierge\"},{\"text\":\"Playbook router\",\"link\":\"/example-agents/benny\"},{\"text\":\"Alert investigator\",\"link\":\"/example-agents/oncall\"},{\"text\":\"PR evidence reviewer\",\"link\":\"/example-agents/bugbot\"},{\"text\":\"Approval Buddy\",\"link\":\"/example-agents/approval-buddy\"},{\"text\":\"Security Reviewer\",\"link\":\"/example-agents/security-reviewer\"},{\"text\":\"Remote PR coordinator\",\"link\":\"/example-agents/fsd\"},{\"text\":\"Knowledge base\",\"link\":\"/example-agents/knowledge-base\"},{\"text\":\"Codebase wiki\",\"link\":\"/example-agents/codebase-wiki\"},{\"text\":\"Codeowners review\",\"link\":\"/example-agents/codeowners-review\"}]},{\"text\":\"Operating\",\"items\":[{\"text\":\"Deployment\",\"link\":\"/deployment\"},{\"text\":\"Fix common problems\",\"link\":\"/troubleshooting\"}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Project layout\",\"link\":\"/reference/project-layout\"},{\"text\":\"Agent config\",\"link\":\"/reference/agent-config\"},{\"text\":\"Instructions\",\"link\":\"/reference/instructions\"},{\"text\":\"Tools\",\"link\":\"/reference/tools\"},{\"text\":\"prompt\",\"link\":\"/reference/prompt\"},{\"text\":\"Skills\",\"link\":\"/reference/skills\"},{\"text\":\"MCP Connections\",\"link\":\"/reference/connections\"},{\"text\":\"Subagents\",\"link\":\"/reference/subagents\"},{\"text\":\"Channels\",\"link\":\"/reference/channels\"},{\"text\":\"Schedules & reminders\",\"link\":\"/reference/schedules\"},{\"text\":\"Hooks\",\"link\":\"/reference/hooks\"},{\"text\":\"Artifacts\",\"link\":\"/reference/artifacts\"},{\"text\":\"Sessions & streaming\",\"link\":\"/reference/sessions\"},{\"text\":\"Playground\",\"link\":\"/reference/playground\"},{\"text\":\"CLI\",\"link\":\"/reference/cli\"},{\"text\":\"HTTP API\",\"link\":\"/reference/http-api\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
20
20
 
21
21
  </body>
22
22
  </html>