@cursor/july 0.1.2 → 0.1.4

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/AGENTS.md +16 -5
  2. package/README.md +8 -9
  3. package/dist/bin/agent-serve.d.ts +3 -1
  4. package/dist/bin/agent-serve.d.ts.map +1 -1
  5. package/dist/bin/agent-serve.js +416 -155
  6. package/dist/channels/slack/log.d.ts +1 -1
  7. package/dist/channels/slack/log.d.ts.map +1 -1
  8. package/dist/channels/slack/log.js +4 -5
  9. package/dist/channels/slack/setup.js +1 -1
  10. package/dist/channels/slack/socket-mode.d.ts.map +1 -1
  11. package/dist/channels/slack/socket-mode.js +10 -9
  12. package/dist/docs/404.html +2 -2
  13. package/dist/docs/ab.html +3 -3
  14. package/dist/docs/assets/{app.Oje4vhlk.js → app.DF-Yx4OP.js} +1 -1
  15. package/dist/docs/assets/chunks/@localSearchIndexroot.0XrheBv2.js +1 -0
  16. package/dist/docs/assets/chunks/{VPLocalSearchBox.H5XZ2zCB.js → VPLocalSearchBox.DSeJSudL.js} +1 -1
  17. package/dist/docs/assets/chunks/{theme.CTR_TuaE.js → theme.DZVLTXOC.js} +2 -2
  18. package/dist/docs/assets/{index.md.m81y7TY7.js → index.md.Cylk70gg.js} +1 -1
  19. package/dist/docs/assets/{quickstart.md.CfU8_uTC.js → quickstart.md.BU6Iwi_9.js} +18 -6
  20. package/dist/docs/assets/{reference_cli.md.DA730zCu.js → reference_cli.md.Bv6pOxcF.js} +11 -6
  21. package/dist/docs/assets/{reference_cli.md.DA730zCu.lean.js → reference_cli.md.Bv6pOxcF.lean.js} +1 -1
  22. package/dist/docs/building-with-agents.html +3 -3
  23. package/dist/docs/concepts.html +3 -3
  24. package/dist/docs/deployment.html +3 -3
  25. package/dist/docs/evals.html +3 -3
  26. package/dist/docs/guides/agent-to-agent.html +3 -3
  27. package/dist/docs/guides/cloud-runtime.html +3 -3
  28. package/dist/docs/guides/github.html +3 -3
  29. package/dist/docs/guides/human-in-the-loop.html +3 -3
  30. package/dist/docs/guides/slack.html +3 -3
  31. package/dist/docs/guides/webhooks.html +3 -3
  32. package/dist/docs/hashmap.json +1 -1
  33. package/dist/docs/hillclimbing.html +3 -3
  34. package/dist/docs/index.html +5 -5
  35. package/dist/docs/quickstart.html +22 -10
  36. package/dist/docs/reference/agent-config.html +3 -3
  37. package/dist/docs/reference/channels.html +3 -3
  38. package/dist/docs/reference/cli.html +14 -9
  39. package/dist/docs/reference/connections.html +3 -3
  40. package/dist/docs/reference/hooks.html +3 -3
  41. package/dist/docs/reference/http-api.html +3 -3
  42. package/dist/docs/reference/instructions.html +3 -3
  43. package/dist/docs/reference/playground.html +3 -3
  44. package/dist/docs/reference/project-layout.html +3 -3
  45. package/dist/docs/reference/schedules.html +3 -3
  46. package/dist/docs/reference/sessions.html +3 -3
  47. package/dist/docs/reference/skills.html +3 -3
  48. package/dist/docs/reference/subagents.html +3 -3
  49. package/dist/docs/reference/tools.html +3 -3
  50. package/dist/docs/scaffolding-agents.html +3 -3
  51. package/dist/docs/storage.html +3 -3
  52. package/dist/docs/troubleshooting.html +3 -3
  53. package/dist/internal/ab-collector.js +3 -3
  54. package/dist/internal/ab-fold.js +1 -1
  55. package/dist/internal/chat-client.d.ts +29 -3
  56. package/dist/internal/chat-client.d.ts.map +1 -1
  57. package/dist/internal/chat-client.js +180 -27
  58. package/dist/internal/cli-ax.d.ts +83 -2
  59. package/dist/internal/cli-ax.d.ts.map +1 -1
  60. package/dist/internal/cli-ax.js +626 -52
  61. package/dist/internal/cli-cursor.d.ts.map +1 -1
  62. package/dist/internal/cli-cursor.js +8 -36
  63. package/dist/internal/cli-deploy.d.ts +59 -3
  64. package/dist/internal/cli-deploy.d.ts.map +1 -1
  65. package/dist/internal/cli-deploy.js +316 -38
  66. package/dist/internal/cli-github.js +13 -13
  67. package/dist/internal/cursor/account-mcp.js +3 -3
  68. package/dist/internal/cursor/backend-client.js +1 -1
  69. package/dist/internal/cursor/credentials.d.ts +14 -3
  70. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  71. package/dist/internal/cursor/credentials.js +21 -6
  72. package/dist/internal/cursor/github-credentials.js +3 -3
  73. package/dist/internal/cursor-event-relay.js +1 -1
  74. package/dist/internal/cursor-relay-core.d.ts +1 -1
  75. package/dist/internal/cursor-relay-core.d.ts.map +1 -1
  76. package/dist/internal/cursor-relay-core.js +2 -1
  77. package/dist/internal/cursor-slack-relay.js +1 -1
  78. package/dist/internal/deploy-client.d.ts +9 -1
  79. package/dist/internal/deploy-client.d.ts.map +1 -1
  80. package/dist/internal/deploy-client.js +23 -3
  81. package/dist/internal/deploy-source.d.ts +35 -0
  82. package/dist/internal/deploy-source.d.ts.map +1 -0
  83. package/dist/internal/deploy-source.js +118 -0
  84. package/dist/internal/discovery.d.ts +11 -0
  85. package/dist/internal/discovery.d.ts.map +1 -1
  86. package/dist/internal/discovery.js +43 -14
  87. package/dist/internal/distribution.d.ts +7 -0
  88. package/dist/internal/distribution.d.ts.map +1 -1
  89. package/dist/internal/distribution.js +7 -0
  90. package/dist/internal/docs-site.js +3 -3
  91. package/dist/internal/eval-run-store.d.ts.map +1 -1
  92. package/dist/internal/eval-run-store.js +10 -9
  93. package/dist/internal/eval-runner.d.ts +2 -0
  94. package/dist/internal/eval-runner.d.ts.map +1 -1
  95. package/dist/internal/eval-runner.js +2 -0
  96. package/dist/internal/event-mapper.d.ts +54 -1
  97. package/dist/internal/event-mapper.d.ts.map +1 -1
  98. package/dist/internal/event-mapper.js +151 -41
  99. package/dist/internal/github-fanout.js +2 -2
  100. package/dist/internal/host-platforms.js +5 -5
  101. package/dist/internal/init-project.d.ts +88 -1
  102. package/dist/internal/init-project.d.ts.map +1 -1
  103. package/dist/internal/init-project.js +221 -31
  104. package/dist/internal/install-cursor-skills.d.ts +64 -0
  105. package/dist/internal/install-cursor-skills.d.ts.map +1 -0
  106. package/dist/internal/install-cursor-skills.js +274 -0
  107. package/dist/internal/logs-client.d.ts +60 -0
  108. package/dist/internal/logs-client.d.ts.map +1 -0
  109. package/dist/internal/logs-client.js +311 -0
  110. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  111. package/dist/internal/mcp-endpoint.js +1 -1
  112. package/dist/internal/open-browser.d.ts +5 -0
  113. package/dist/internal/open-browser.d.ts.map +1 -0
  114. package/dist/internal/open-browser.js +34 -0
  115. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  116. package/dist/internal/playground/toolchain.js +19 -14
  117. package/dist/internal/playground-proxy.d.ts +69 -0
  118. package/dist/internal/playground-proxy.d.ts.map +1 -0
  119. package/dist/internal/playground-proxy.js +468 -0
  120. package/dist/internal/prompt-context.d.ts +35 -0
  121. package/dist/internal/prompt-context.d.ts.map +1 -0
  122. package/dist/internal/prompt-context.js +71 -0
  123. package/dist/internal/reminder-runner.d.ts.map +1 -1
  124. package/dist/internal/reminder-runner.js +11 -11
  125. package/dist/internal/request-headers.d.ts +11 -0
  126. package/dist/internal/request-headers.d.ts.map +1 -0
  127. package/dist/internal/request-headers.js +14 -0
  128. package/dist/internal/resolve-prod-target.d.ts +44 -0
  129. package/dist/internal/resolve-prod-target.d.ts.map +1 -0
  130. package/dist/internal/resolve-prod-target.js +134 -0
  131. package/dist/internal/resolved-connections.js +5 -5
  132. package/dist/internal/run-client.d.ts +2 -2
  133. package/dist/internal/run-client.d.ts.map +1 -1
  134. package/dist/internal/run-client.js +38 -23
  135. package/dist/internal/schedule-runner.js +1 -1
  136. package/dist/internal/server.d.ts.map +1 -1
  137. package/dist/internal/server.js +23 -17
  138. package/dist/internal/session-engine.d.ts +1 -1
  139. package/dist/internal/session-engine.d.ts.map +1 -1
  140. package/dist/internal/session-engine.js +34 -19
  141. package/dist/internal/sessions-client.d.ts +34 -0
  142. package/dist/internal/sessions-client.d.ts.map +1 -0
  143. package/dist/internal/sessions-client.js +193 -0
  144. package/dist/internal/storage-coordinator.js +6 -6
  145. package/dist/internal/stream-progress.d.ts.map +1 -1
  146. package/dist/internal/stream-progress.js +31 -3
  147. package/dist/internal/terminal-style.d.ts +22 -0
  148. package/dist/internal/terminal-style.d.ts.map +1 -0
  149. package/dist/internal/terminal-style.js +49 -0
  150. package/dist/internal/trajectory.d.ts +10 -5
  151. package/dist/internal/trajectory.d.ts.map +1 -1
  152. package/dist/internal/trajectory.js +82 -10
  153. package/dist/internal/update-check.d.ts +93 -0
  154. package/dist/internal/update-check.d.ts.map +1 -0
  155. package/dist/internal/update-check.js +431 -0
  156. package/dist/internal/workspace.d.ts +11 -0
  157. package/dist/internal/workspace.d.ts.map +1 -1
  158. package/dist/internal/workspace.js +38 -4
  159. package/dist/playground/assets/index-Ct_Usdm8.css +1 -0
  160. package/dist/playground/assets/index-Dsyb-Vaj.js +319 -0
  161. package/dist/playground/index.html +2 -2
  162. package/dist/types.d.ts +29 -2
  163. package/dist/types.d.ts.map +1 -1
  164. package/docs/README.md +0 -1
  165. package/docs/quickstart.md +22 -7
  166. package/docs/reference/cli.md +51 -3
  167. package/package.json +4 -1
  168. package/skills/ab/SKILL.md +8 -8
  169. package/skills/create-agent/SKILL.md +28 -22
  170. package/skills/debug/SKILL.md +11 -11
  171. package/skills/evals/SKILL.md +16 -16
  172. package/skills/framework-map/SKILL.md +6 -6
  173. package/skills/github/SKILL.md +13 -13
  174. package/skills/hillclimb/SKILL.md +10 -10
  175. package/skills/setup-slack/SKILL.md +14 -14
  176. package/src/bin/agent-serve.ts +451 -191
  177. package/src/channels/slack/log.ts +5 -5
  178. package/src/channels/slack/setup.ts +1 -1
  179. package/src/channels/slack/socket-mode.ts +11 -9
  180. package/src/internal/ab-collector.ts +3 -3
  181. package/src/internal/ab-fold.ts +1 -1
  182. package/src/internal/chat-client.ts +252 -37
  183. package/src/internal/cli-ax.ts +761 -72
  184. package/src/internal/cli-cursor.ts +14 -42
  185. package/src/internal/cli-deploy.ts +428 -49
  186. package/src/internal/cli-github.ts +13 -15
  187. package/src/internal/cursor/account-mcp.ts +3 -3
  188. package/src/internal/cursor/backend-client.ts +1 -1
  189. package/src/internal/cursor/credentials.ts +26 -7
  190. package/src/internal/cursor/github-credentials.ts +3 -3
  191. package/src/internal/cursor-event-relay.ts +1 -1
  192. package/src/internal/cursor-relay-core.ts +4 -2
  193. package/src/internal/cursor-slack-relay.ts +1 -1
  194. package/src/internal/deploy-client.ts +45 -4
  195. package/src/internal/deploy-source.ts +133 -0
  196. package/src/internal/discovery.ts +53 -16
  197. package/src/internal/distribution.ts +8 -0
  198. package/src/internal/docs-site.ts +3 -3
  199. package/src/internal/eval-run-store.ts +10 -11
  200. package/src/internal/eval-runner.ts +5 -0
  201. package/src/internal/event-mapper.ts +222 -42
  202. package/src/internal/github-fanout.ts +2 -2
  203. package/src/internal/host-platforms.ts +5 -5
  204. package/src/internal/init-project.ts +333 -51
  205. package/src/internal/install-cursor-skills.ts +327 -0
  206. package/src/internal/logs-client.ts +442 -0
  207. package/src/internal/mcp-endpoint.ts +1 -3
  208. package/src/internal/open-browser.ts +41 -0
  209. package/src/internal/playground/toolchain.ts +18 -16
  210. package/src/internal/playground-proxy.ts +576 -0
  211. package/src/internal/prompt-context.ts +95 -0
  212. package/src/internal/reminder-runner.ts +11 -17
  213. package/src/internal/request-headers.ts +23 -0
  214. package/src/internal/resolve-prod-target.ts +182 -0
  215. package/src/internal/resolved-connections.ts +5 -5
  216. package/src/internal/run-client.ts +39 -36
  217. package/src/internal/schedule-runner.ts +1 -1
  218. package/src/internal/server.ts +25 -16
  219. package/src/internal/session-engine.ts +35 -18
  220. package/src/internal/sessions-client.ts +216 -0
  221. package/src/internal/storage-coordinator.ts +6 -6
  222. package/src/internal/stream-progress.ts +36 -2
  223. package/src/internal/terminal-style.ts +74 -0
  224. package/src/internal/trajectory.ts +91 -13
  225. package/src/internal/update-check.ts +552 -0
  226. package/src/internal/workspace.ts +42 -4
  227. package/src/types.ts +45 -7
  228. package/dist/docs/assets/chunks/@localSearchIndexroot.zwQ9RCQ7.js +0 -1
  229. package/dist/playground/assets/index-B1Qc9h2u.css +0 -1
  230. package/dist/playground/assets/index-CpDYCj8W.js +0 -79
  231. /package/dist/docs/assets/{index.md.m81y7TY7.lean.js → index.md.Cylk70gg.lean.js} +0 -0
  232. /package/dist/docs/assets/{quickstart.md.CfU8_uTC.lean.js → quickstart.md.BU6Iwi_9.lean.js} +0 -0
@@ -38,6 +38,7 @@ import { parseFrontmatter } from "./frontmatter.js";
38
38
  import { isReservedSecretName, MAX_EGRESS_DOMAINS, validateEgressDomain, validateSecretName, } from "./hosting.js";
39
39
  import { toolInputJsonSchema } from "./json-schema.js";
40
40
  import { MCP_ENDPOINT_PATH, mcpEndpointToolNames } from "./mcp-endpoint.js";
41
+ import { withIdentityPreamble } from "./workspace.js";
41
42
  const MODULE_EXTENSIONS = new Set([".ts", ".mts", ".js", ".mjs"]);
42
43
  const NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
43
44
  const SKILL_DESCRIPTION_FALLBACK = (name) => `Instructions for the ${name} skill.`;
@@ -64,17 +65,15 @@ export function isAgentProjectDir(dir) {
64
65
  });
65
66
  }
66
67
  /**
67
- * Discover the agent projects directly under `rootDir` (one level deep):
68
- * each immediate child directory that is itself an agent project becomes a
69
- * mounted agent, keyed by a slug derived from its directory name. Used for
70
- * multi-agent serving, where one server hosts many agents under
71
- * `/<slug>/...`. Throws when no child projects are found.
68
+ * List agent projects directly under `rootDir` (one level deep) without
69
+ * loading them. Empty when the path is missing or has no child agents.
70
+ * Slug rules match {@link loadAgentProjects} / multi-agent serve.
72
71
  */
73
- export function loadAgentProjects(rootDir_1) {
74
- return __awaiter(this, arguments, void 0, function* (rootDir, options = {}) {
72
+ export function listChildAgentDirs(rootDir) {
73
+ return __awaiter(this, void 0, void 0, function* () {
75
74
  const resolved = resolve(rootDir);
76
75
  if (!(yield isDirectory(resolved))) {
77
- throw new Error(`Agent projects directory does not exist: ${resolved}`);
76
+ return [];
78
77
  }
79
78
  const results = [];
80
79
  const seenSlugs = new Set();
@@ -94,11 +93,35 @@ export function loadAgentProjects(rootDir_1) {
94
93
  throw new Error(`Duplicate agent slug "${slug}" under ${resolved}.`);
95
94
  }
96
95
  seenSlugs.add(slug);
97
- results.push({ slug, project: yield loadAgentProject(childDir, options) });
96
+ results.push({ slug, dir: childDir });
98
97
  }
99
- if (results.length === 0) {
98
+ return results;
99
+ });
100
+ }
101
+ /**
102
+ * Discover the agent projects directly under `rootDir` (one level deep):
103
+ * each immediate child directory that is itself an agent project becomes a
104
+ * mounted agent, keyed by a slug derived from its directory name. Used for
105
+ * multi-agent serving, where one server hosts many agents under
106
+ * `/<slug>/...`. Throws when no child projects are found.
107
+ */
108
+ export function loadAgentProjects(rootDir_1) {
109
+ return __awaiter(this, arguments, void 0, function* (rootDir, options = {}) {
110
+ const resolved = resolve(rootDir);
111
+ if (!(yield isDirectory(resolved))) {
112
+ throw new Error(`Agent projects directory does not exist: ${resolved}`);
113
+ }
114
+ const children = yield listChildAgentDirs(resolved);
115
+ if (children.length === 0) {
100
116
  throw new Error(`No agent projects found directly under ${resolved}. Each agent should be a subdirectory with its own agent/ directory (or flat-layout markers).`);
101
117
  }
118
+ const results = [];
119
+ for (const child of children) {
120
+ results.push({
121
+ slug: child.slug,
122
+ project: yield loadAgentProject(child.dir, options),
123
+ });
124
+ }
102
125
  return results;
103
126
  });
104
127
  }
@@ -215,15 +238,21 @@ export function formatDiagnostics(diagnostics) {
215
238
  function loadAgent(ctx, agentDir, options) {
216
239
  return __awaiter(this, void 0, void 0, function* () {
217
240
  var _a;
218
- var _b, _c;
241
+ var _b;
219
242
  const config = yield loadAgentConfig(ctx, agentDir, options.isRoot);
220
- const instructions = yield loadInstructions(ctx, agentDir, config, options.isRoot);
243
+ const name = (_b = config === null || config === void 0 ? void 0 : config.name) !== null && _b !== void 0 ? _b : options.name;
244
+ const authoredInstructions = yield loadInstructions(ctx, agentDir, config, options.isRoot);
245
+ // Root agents without authored instructions stay undefined (diagnostic
246
+ // already recorded). Subagents still get the identity line alone.
247
+ const instructions = authoredInstructions === undefined && options.isRoot
248
+ ? undefined
249
+ : withIdentityPreamble(name, authoredInstructions);
221
250
  // Subagents run as Cursor SDK custom subagents (prompt + description +
222
251
  // model); their other slots are inert today, so don't load them — just
223
252
  // warn that they exist.
224
253
  if (!options.isRoot) {
225
254
  yield warnUnsupportedSubagentSlots(ctx, agentDir);
226
- return Object.assign(Object.assign(Object.assign(Object.assign({ name: (_b = config === null || config === void 0 ? void 0 : config.name) !== null && _b !== void 0 ? _b : options.name }, ((config === null || config === void 0 ? void 0 : config.description) === undefined
255
+ return Object.assign(Object.assign(Object.assign(Object.assign({ name }, ((config === null || config === void 0 ? void 0 : config.description) === undefined
227
256
  ? {}
228
257
  : { description: config.description })), ((config === null || config === void 0 ? void 0 : config.model) === undefined ? {} : { model: config.model })), (instructions === undefined ? {} : { instructions })), { runtime: "local", tools: [], skills: [], connections: [], subagents: [], seedFiles: [] });
229
258
  }
@@ -253,7 +282,7 @@ function loadAgent(ctx, agentDir, options) {
253
282
  });
254
283
  }
255
284
  return {
256
- name: (_c = config === null || config === void 0 ? void 0 : config.name) !== null && _c !== void 0 ? _c : options.name,
285
+ name,
257
286
  description: config === null || config === void 0 ? void 0 : config.description,
258
287
  // Root agents always get a concrete model: authored value or DEFAULT_MODEL.
259
288
  model: isValidModelSetting(config === null || config === void 0 ? void 0 : config.model) ? config.model : DEFAULT_MODEL,
@@ -17,6 +17,13 @@ export declare const LEGACY_PACKAGE_NAME = "@anysphere/agent-serve";
17
17
  * as PACKAGE_NAME so the eventual rename keeps authored imports working.
18
18
  */
19
19
  export declare const AGENTKIT_PACKAGE_NAME = "@cursor/agentkit";
20
+ /**
21
+ * Bracketed product tag for stderr / ServeOptions.logger lines
22
+ * (`[agentkit] …`, `[agentkit/slack] …`).
23
+ */
24
+ export declare const LOG_PRODUCT = "agentkit";
25
+ export declare const LOG_PREFIX: string;
26
+ export declare const SLACK_LOG_PREFIX: string;
20
27
  /**
21
28
  * Command name this CLI was invoked as. Both bins point at the same entry;
22
29
  * keep help text and hints copy-pasteable for whichever the user typed.
@@ -1 +1 @@
1
- {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../src/internal/distribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,qEAAqE;AACrE,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAA+B,CAAC;AAc/D;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAC/C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAezC,CAAC"}
1
+ {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../src/internal/distribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,qEAAqE;AACrE,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,UAAU,EAAE,MAA2B,CAAC;AACrD,eAAO,MAAM,gBAAgB,EAAE,MAAiC,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAA+B,CAAC;AAc/D;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAC/C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAezC,CAAC"}
@@ -20,6 +20,13 @@ export const LEGACY_PACKAGE_NAME = "@anysphere/agent-serve";
20
20
  * as PACKAGE_NAME so the eventual rename keeps authored imports working.
21
21
  */
22
22
  export const AGENTKIT_PACKAGE_NAME = "@cursor/agentkit";
23
+ /**
24
+ * Bracketed product tag for stderr / ServeOptions.logger lines
25
+ * (`[agentkit] …`, `[agentkit/slack] …`).
26
+ */
27
+ export const LOG_PRODUCT = "agentkit";
28
+ export const LOG_PREFIX = `[${LOG_PRODUCT}]`;
29
+ export const SLACK_LOG_PREFIX = `[${LOG_PRODUCT}/slack]`;
23
30
  /**
24
31
  * Command name this CLI was invoked as. Both bins point at the same entry;
25
32
  * keep help text and hints copy-pasteable for whichever the user typed.
@@ -100,10 +100,10 @@ export function ensureDocsSiteBundle() {
100
100
  }
101
101
  const toolchain = resolveDocsToolchain();
102
102
  if (toolchain === undefined) {
103
- logger("[agent-serve] docs site missing and vitepress toolchain unavailable; /docs will show a build hint");
103
+ logger("[agentkit] docs site missing and vitepress toolchain unavailable; /docs will show a build hint");
104
104
  return;
105
105
  }
106
- logger("[agent-serve] building docs site (vitepress)...");
106
+ logger("[agentkit] building docs site (vitepress)...");
107
107
  const code = yield new Promise((resolve, reject) => {
108
108
  const child = spawn(process.execPath, [toolchain.vitepressCli, "build", "docs"], { cwd: toolchain.packageRoot, env: process.env, stdio: "inherit" });
109
109
  child.on("error", reject);
@@ -115,7 +115,7 @@ export function ensureDocsSiteBundle() {
115
115
  if (!docsSiteExists()) {
116
116
  throw new Error("docs vitepress build finished but dist/docs/index.html is missing");
117
117
  }
118
- logger("[agent-serve] docs site build complete");
118
+ logger("[agentkit] docs site build complete");
119
119
  });
120
120
  }
121
121
  /** True when docs sources + a resolvable `vitepress` CLI are present. */
@@ -1 +1 @@
1
- {"version":3,"file":"eval-run-store.d.ts","sourceRoot":"","sources":["../../src/internal/eval-run-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,aAAa,CAAC;AASrB,YAAY,EACV,eAAe,EACf,iBAAiB,IAAI,cAAc,EACnC,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAOF,qBAAa,YAAY;IAWrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAhBvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,wEAAwE;IACxE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,YACmB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAC/C;;;OAGG;IACc,mBAAmB,CAAC,EAAE,kBAAkB,YAAA,EACvD;IAEJ,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAMhB,IAAI,IAAI,OAAO,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC,CAiBD;IAEK,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAG7D;IAED,+EAA+E;IACzE,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAG3C;IAED;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC;QAClC,IAAI,EAAE,eAAe,EAAE,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAOD;IAED,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEK,KAAK,CAAC,KAAK,GAAE,iBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+DnE;IAED,OAAO,CAAC,UAAU;IAMlB;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ7B;YAEa,sBAAsB;YAkDtB,YAAY;IAe1B;;;;OAIG;IACH,OAAO,CAAC,cAAc;YAgBR,WAAW;YAcX,aAAa;YAiBb,OAAO;IAmGrB,OAAO,CAAC,eAAe;CAqCxB;AAwDD,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAxC,YAAqB,WAAW,EAAE,MAAM,EAGvC;CACF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,cAGC;CACF"}
1
+ {"version":3,"file":"eval-run-store.d.ts","sourceRoot":"","sources":["../../src/internal/eval-run-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,aAAa,CAAC;AASrB,YAAY,EACV,eAAe,EACf,iBAAiB,IAAI,cAAc,EACnC,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAOF,qBAAa,YAAY;IAWrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAhBvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,wEAAwE;IACxE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,YACmB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAC/C;;;OAGG;IACc,mBAAmB,CAAC,EAAE,kBAAkB,YAAA,EACvD;IAEJ,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAMhB,IAAI,IAAI,OAAO,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC,CAiBD;IAEK,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAG7D;IAED,+EAA+E;IACzE,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAG3C;IAED;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC;QAClC,IAAI,EAAE,eAAe,EAAE,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAOD;IAED,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEK,KAAK,CAAC,KAAK,GAAE,iBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+DnE;IAED,OAAO,CAAC,UAAU;IAMlB;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ7B;YAEa,sBAAsB;YAkDtB,YAAY;IAe1B;;;;OAIG;IACH,OAAO,CAAC,cAAc;YAgBR,WAAW;YAcX,aAAa;YAeb,OAAO;IAoGrB,OAAO,CAAC,eAAe;CAqCxB;AAwDD,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAxC,YAAqB,WAAW,EAAE,MAAM,EAGvC;CACF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,cAGC;CACF"}
@@ -120,7 +120,7 @@ export class EvalRunStore {
120
120
  this.activeRunId = runId;
121
121
  yield this.pruneOldRuns(config);
122
122
  yield this.enqueuePersist(snapshot, this.resolvePersist(config));
123
- this.logger(`[agent-serve] eval run ${runId}: starting ${cases.length} case(s)`);
123
+ this.logger(`[agentkit] eval run ${runId}: starting ${cases.length} case(s)`);
124
124
  void this.execute(runId, Object.assign(Object.assign({ baseUrl: loopbackUrl, evals: selected, config }, (input.bearerToken === undefined
125
125
  ? {}
126
126
  : { bearerToken: input.bearerToken })), (input.verbose === undefined ? {} : { verbose: input.verbose })));
@@ -159,7 +159,7 @@ export class EvalRunStore {
159
159
  }
160
160
  const loaded = yield persist.load({ projectRoot: this.projectRoot });
161
161
  if (!Array.isArray(loaded)) {
162
- this.logger("[agent-serve] eval persistRuns.load() did not return an array; ignoring");
162
+ this.logger("[agentkit] eval persistRuns.load() did not return an array; ignoring");
163
163
  this.hydrated = true;
164
164
  return;
165
165
  }
@@ -182,11 +182,11 @@ export class EvalRunStore {
182
182
  yield this.enqueuePersist(run, persist);
183
183
  }
184
184
  yield this.pruneOldRuns(config);
185
- this.logger(`[agent-serve] hydrated ${this.runs.size} playground eval run(s) from persistRuns`);
185
+ this.logger(`[agentkit] hydrated ${this.runs.size} playground eval run(s) from persistRuns`);
186
186
  }
187
187
  catch (error) {
188
188
  const message = error instanceof Error ? error.message : String(error);
189
- this.logger(`[agent-serve] failed to hydrate playground eval runs: ${message}`);
189
+ this.logger(`[agentkit] failed to hydrate playground eval runs: ${message}`);
190
190
  }
191
191
  finally {
192
192
  this.hydrated = true;
@@ -234,7 +234,7 @@ export class EvalRunStore {
234
234
  }
235
235
  catch (error) {
236
236
  const message = error instanceof Error ? error.message : String(error);
237
- this.logger(`[agent-serve] persistRuns.save(${run.runId}) failed: ${message}`);
237
+ this.logger(`[agentkit] persistRuns.save(${run.runId}) failed: ${message}`);
238
238
  }
239
239
  });
240
240
  }
@@ -248,7 +248,7 @@ export class EvalRunStore {
248
248
  }
249
249
  catch (error) {
250
250
  const message = error instanceof Error ? error.message : String(error);
251
- this.logger(`[agent-serve] persistRuns.delete(${runId}) failed: ${message}`);
251
+ this.logger(`[agentkit] persistRuns.delete(${runId}) failed: ${message}`);
252
252
  }
253
253
  });
254
254
  }
@@ -294,7 +294,8 @@ export class EvalRunStore {
294
294
  c.inputs = [...((_c = c.inputs) !== null && _c !== void 0 ? _c : []), event.data.text];
295
295
  }
296
296
  if (event.type === "message.completed" &&
297
- typeof ((_b = event.data) === null || _b === void 0 ? void 0 : _b.text) === "string") {
297
+ typeof ((_b = event.data) === null || _b === void 0 ? void 0 : _b.text) === "string" &&
298
+ event.data.parentCallId === undefined) {
298
299
  c.finalText = event.data.text;
299
300
  }
300
301
  }, onCaseDone: (result) => {
@@ -311,7 +312,7 @@ export class EvalRunStore {
311
312
  run.status = "completed";
312
313
  run.finishedAt = new Date().toISOString();
313
314
  yield this.enqueuePersist(run, this.resolvePersist(opts.config));
314
- this.logger(`[agent-serve] eval run ${runId}: done — ${run.summary.passed} passed, ${run.summary.failed} failed`);
315
+ this.logger(`[agentkit] eval run ${runId}: done — ${run.summary.passed} passed, ${run.summary.failed} failed`);
315
316
  }
316
317
  catch (error) {
317
318
  const run = this.runs.get(runId);
@@ -322,7 +323,7 @@ export class EvalRunStore {
322
323
  run.finishedAt = new Date().toISOString();
323
324
  run.error = error instanceof Error ? error.message : String(error);
324
325
  yield this.enqueuePersist(run, this.resolvePersist(opts.config));
325
- this.logger(`[agent-serve] eval run ${runId}: failed — ${run.error}`);
326
+ this.logger(`[agentkit] eval run ${runId}: failed — ${run.error}`);
326
327
  }
327
328
  finally {
328
329
  if (this.activeRunId === runId) {
@@ -48,6 +48,8 @@ export interface RunEvalsOptions extends EvalSelectionOptions {
48
48
  baseUrl: string;
49
49
  timeoutMs?: number;
50
50
  bearerToken?: string;
51
+ /** Extra request headers (e.g. hosted engineAccess). */
52
+ headers?: Record<string, string>;
51
53
  verbose?: boolean;
52
54
  onEvent?: (event: SessionEvent) => void;
53
55
  /** Fired when a case begins executing (after concurrency slot acquired). */
@@ -1 +1 @@
1
- {"version":3,"file":"eval-runner.d.ts","sourceRoot":"","sources":["../../src/internal/eval-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-runner.d.ts","sourceRoot":"","sources":["../../src/internal/eval-runner.ts"],"names":[],"mappings":"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"}
@@ -149,6 +149,7 @@ export function runDiscoveredEvals(options) {
149
149
  baseUrl: options.baseUrl,
150
150
  defaultTimeoutMs,
151
151
  bearerToken: options.bearerToken,
152
+ headers: options.headers,
152
153
  verbose: Boolean(options.verbose),
153
154
  onEvent: (event) => {
154
155
  var _a, _b;
@@ -209,6 +210,7 @@ function runOneEval(discovered, opts) {
209
210
  // Keep defineEval traffic out of live defineAB enrollment/metrics.
210
211
  purpose: "eval",
211
212
  bearerToken: opts.bearerToken,
213
+ headers: opts.headers,
212
214
  workspaceDir: options.workspaceDir,
213
215
  workspaceFiles: options.workspaceFiles,
214
216
  timeoutMs,
@@ -3,8 +3,53 @@
3
3
  * (`InteractionUpdate`) onto the framework's channel event vocabulary
4
4
  * (`SessionEvent` payloads). One mapper instance covers one turn.
5
5
  */
6
- import type { InteractionUpdate, ToolCall } from "@cursor/sdk";
6
+ import type { InteractionUpdate as SdkInteractionUpdate, ToolCall } from "@cursor/sdk";
7
7
  import type { SessionEventPayload, TurnUsage } from "../types.js";
8
+ /**
9
+ * Nested interaction updates from a task/subagent tool-call-delta.
10
+ * Mirrored locally so agent-serve typechecks against published `@cursor/sdk`
11
+ * versions that do not yet export `NestedTaskUpdate` / `tool-call-delta`.
12
+ */
13
+ type NestedTaskUpdate = {
14
+ type: "text-delta";
15
+ text: string;
16
+ } | {
17
+ type: "thinking-delta";
18
+ text: string;
19
+ } | {
20
+ type: "thinking-completed";
21
+ thinkingDurationMs: number;
22
+ } | {
23
+ type: "tool-call-started";
24
+ callId: string;
25
+ toolCall: ToolCall;
26
+ modelCallId: string;
27
+ } | {
28
+ type: "tool-call-completed";
29
+ callId: string;
30
+ toolCall: ToolCall;
31
+ modelCallId: string;
32
+ } | {
33
+ type: "partial-tool-call";
34
+ callId: string;
35
+ toolCall: ToolCall;
36
+ modelCallId: string;
37
+ } | {
38
+ type: "step-started";
39
+ stepId: number;
40
+ } | {
41
+ type: "step-completed";
42
+ stepId: number;
43
+ stepDurationMs: number;
44
+ };
45
+ type ToolCallDeltaUpdate = {
46
+ type: "tool-call-delta";
47
+ callId: string;
48
+ modelCallId: string;
49
+ taskUpdate: NestedTaskUpdate;
50
+ };
51
+ /** SDK updates plus nested task deltas once the SDK exposes them. */
52
+ type InteractionUpdate = SdkInteractionUpdate | ToolCallDeltaUpdate;
8
53
  export interface ToolCallDescription {
9
54
  toolName: string;
10
55
  args?: unknown;
@@ -24,6 +69,8 @@ export declare class TurnEventMapper {
24
69
  private usageTotal;
25
70
  private lastAssistantText;
26
71
  private summaryTitle;
72
+ /** Per-parent-call accumulators for nested subagent streams. */
73
+ private readonly nested;
27
74
  constructor(emit: (payload: SessionEventPayload) => void);
28
75
  /** Per-turn token usage summed across model steps. */
29
76
  get usage(): TurnUsage | undefined;
@@ -34,7 +81,12 @@ export declare class TurnEventMapper {
34
81
  handleUpdate(update: InteractionUpdate): void;
35
82
  /** Close out the turn: finalize any open assistant text block. */
36
83
  finish(): void;
84
+ private handleNestedTaskUpdate;
85
+ private emitToolStarted;
86
+ private emitToolCompleted;
87
+ private ensureNested;
37
88
  private flushAssistantText;
89
+ private flushNestedAssistantText;
38
90
  }
39
91
  /**
40
92
  * Human-meaningful tool identity for stream events. In-process tools calls
@@ -43,4 +95,5 @@ export declare class TurnEventMapper {
43
95
  */
44
96
  export declare function describeToolCall(toolCall: ToolCall): ToolCallDescription;
45
97
  export declare function describeToolResult(toolCall: ToolCall): ToolResultDescription;
98
+ export {};
46
99
  //# sourceMappingURL=event-mapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-mapper.d.ts","sourceRoot":"","sources":["../../src/internal/event-mapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIlE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,eAAe;IAOd,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,oBAAoB,CAAM;IAClC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAA6B,IAAI,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,EAAI;IAE7E,sDAAsD;IACtD,IAAI,KAAK,IAAI,SAAS,GAAG,SAAS,CAEjC;IAED,yEAAyE;IACzE,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,4EAA4E;IAC5E,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CA4G5C;IAED,kEAAkE;IAClE,MAAM,IAAI,IAAI,CAEb;IAED,OAAO,CAAC,kBAAkB;CAY3B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,mBAAmB,CA0CxE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,qBAAqB,CA4B5E"}
1
+ {"version":3,"file":"event-mapper.d.ts","sourceRoot":"","sources":["../../src/internal/event-mapper.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,19 @@
4
4
  * (`SessionEvent` payloads). One mapper instance covers one turn.
5
5
  */
6
6
  const CUSTOM_TOOLS_PROVIDER = "custom-user-tools";
7
+ function asToolCallDelta(update) {
8
+ if (update.type !== "tool-call-delta") {
9
+ return undefined;
10
+ }
11
+ return update;
12
+ }
7
13
  export class TurnEventMapper {
8
14
  constructor(emit) {
9
15
  this.emit = emit;
10
16
  this.textAccumulator = "";
11
17
  this.reasoningAccumulator = "";
18
+ /** Per-parent-call accumulators for nested subagent streams. */
19
+ this.nested = new Map();
12
20
  }
13
21
  /** Per-turn token usage summed across model steps. */
14
22
  get usage() {
@@ -52,49 +60,11 @@ export class TurnEventMapper {
52
60
  }
53
61
  case "tool-call-started": {
54
62
  this.flushAssistantText("tool_call");
55
- const description = describeToolCall(update.toolCall);
56
- this.emit({
57
- type: "actions.requested",
58
- data: {
59
- calls: [
60
- {
61
- callId: update.callId,
62
- toolName: description.toolName,
63
- args: description.args,
64
- },
65
- ],
66
- },
67
- });
68
- if (description.subagent !== undefined) {
69
- this.emit({
70
- type: "subagent.called",
71
- data: {
72
- callId: update.callId,
73
- name: description.subagent.name,
74
- description: description.subagent.description,
75
- },
76
- });
77
- }
63
+ this.emitToolStarted(update.callId, update.toolCall);
78
64
  return;
79
65
  }
80
66
  case "tool-call-completed": {
81
- const description = describeToolCall(update.toolCall);
82
- const result = describeToolResult(update.toolCall);
83
- this.emit({
84
- type: "action.result",
85
- data: {
86
- callId: update.callId,
87
- toolName: description.toolName,
88
- output: result.output,
89
- isError: result.isError,
90
- },
91
- });
92
- if (description.subagent !== undefined) {
93
- this.emit({
94
- type: "subagent.completed",
95
- data: { callId: update.callId, name: description.subagent.name },
96
- });
97
- }
67
+ this.emitToolCompleted(update.callId, update.toolCall);
98
68
  return;
99
69
  }
100
70
  case "step-started": {
@@ -126,7 +96,13 @@ export class TurnEventMapper {
126
96
  case "shell-output-delta":
127
97
  return;
128
98
  default: {
129
- // Future harness update types are ignored rather than fatal.
99
+ // Nested task/subagent progress (tool-call-delta) accepted via
100
+ // structural check so we typecheck against older published SDKs.
101
+ const delta = asToolCallDelta(update);
102
+ if (delta !== undefined) {
103
+ this.handleNestedTaskUpdate(delta.callId, delta.taskUpdate);
104
+ return;
105
+ }
130
106
  return;
131
107
  }
132
108
  }
@@ -134,6 +110,128 @@ export class TurnEventMapper {
134
110
  /** Close out the turn: finalize any open assistant text block. */
135
111
  finish() {
136
112
  this.flushAssistantText("stop");
113
+ for (const parentCallId of this.nested.keys()) {
114
+ this.flushNestedAssistantText(parentCallId, "stop");
115
+ }
116
+ }
117
+ handleNestedTaskUpdate(parentCallId, update) {
118
+ switch (update.type) {
119
+ case "text-delta": {
120
+ const acc = this.ensureNested(parentCallId);
121
+ acc.text += update.text;
122
+ this.emit({
123
+ type: "message.appended",
124
+ data: {
125
+ delta: update.text,
126
+ text: acc.text,
127
+ parentCallId,
128
+ },
129
+ });
130
+ return;
131
+ }
132
+ case "thinking-delta": {
133
+ const acc = this.ensureNested(parentCallId);
134
+ acc.reasoning += update.text;
135
+ this.emit({
136
+ type: "reasoning.appended",
137
+ data: {
138
+ delta: update.text,
139
+ text: acc.reasoning,
140
+ parentCallId,
141
+ },
142
+ });
143
+ return;
144
+ }
145
+ case "thinking-completed": {
146
+ const acc = this.nested.get(parentCallId);
147
+ if (acc !== undefined && acc.reasoning !== "") {
148
+ acc.reasoning = "";
149
+ }
150
+ this.emit({
151
+ type: "reasoning.completed",
152
+ data: {
153
+ durationMs: update.thinkingDurationMs,
154
+ parentCallId,
155
+ },
156
+ });
157
+ return;
158
+ }
159
+ case "tool-call-started": {
160
+ this.flushNestedAssistantText(parentCallId, "tool_call");
161
+ this.emitToolStarted(update.callId, update.toolCall, parentCallId);
162
+ return;
163
+ }
164
+ case "tool-call-completed": {
165
+ this.emitToolCompleted(update.callId, update.toolCall, parentCallId);
166
+ return;
167
+ }
168
+ case "partial-tool-call":
169
+ case "step-started":
170
+ case "step-completed":
171
+ return;
172
+ default: {
173
+ return;
174
+ }
175
+ }
176
+ }
177
+ emitToolStarted(callId, toolCall, parentCallId) {
178
+ const description = describeToolCall(toolCall);
179
+ this.emit({
180
+ type: "actions.requested",
181
+ data: {
182
+ calls: [
183
+ {
184
+ callId,
185
+ toolName: description.toolName,
186
+ args: description.args,
187
+ parentCallId,
188
+ },
189
+ ],
190
+ parentCallId,
191
+ },
192
+ });
193
+ // Subagent bookends only fire for the top-level task tool, not nested
194
+ // tools inside a subagent (nested subagents aren't supported).
195
+ if (description.subagent !== undefined && parentCallId === undefined) {
196
+ this.emit({
197
+ type: "subagent.called",
198
+ data: {
199
+ callId,
200
+ name: description.subagent.name,
201
+ description: description.subagent.description,
202
+ },
203
+ });
204
+ }
205
+ }
206
+ emitToolCompleted(callId, toolCall, parentCallId) {
207
+ const description = describeToolCall(toolCall);
208
+ const result = describeToolResult(toolCall);
209
+ this.emit({
210
+ type: "action.result",
211
+ data: {
212
+ callId,
213
+ toolName: description.toolName,
214
+ output: result.output,
215
+ isError: result.isError,
216
+ parentCallId,
217
+ },
218
+ });
219
+ if (description.subagent !== undefined && parentCallId === undefined) {
220
+ this.flushNestedAssistantText(callId, "stop");
221
+ this.nested.delete(callId);
222
+ this.emit({
223
+ type: "subagent.completed",
224
+ data: { callId, name: description.subagent.name },
225
+ });
226
+ }
227
+ }
228
+ ensureNested(parentCallId) {
229
+ let acc = this.nested.get(parentCallId);
230
+ if (acc === undefined) {
231
+ acc = { text: "", reasoning: "" };
232
+ this.nested.set(parentCallId, acc);
233
+ }
234
+ return acc;
137
235
  }
138
236
  flushAssistantText(finishReason) {
139
237
  if (this.textAccumulator === "") {
@@ -147,6 +245,18 @@ export class TurnEventMapper {
147
245
  data: { text, finishReason },
148
246
  });
149
247
  }
248
+ flushNestedAssistantText(parentCallId, finishReason) {
249
+ const acc = this.nested.get(parentCallId);
250
+ if (acc === undefined || acc.text === "") {
251
+ return;
252
+ }
253
+ const text = acc.text;
254
+ acc.text = "";
255
+ this.emit({
256
+ type: "message.completed",
257
+ data: { text, finishReason, parentCallId },
258
+ });
259
+ }
150
260
  }
151
261
  /**
152
262
  * Human-meaningful tool identity for stream events. In-process tools calls
@@ -105,13 +105,13 @@ export function fanoutDelivery(body_1, headers_1, targets_1) {
105
105
  body: payload,
106
106
  });
107
107
  if (!response.ok) {
108
- log(`[agent-serve] delivery to ${label} failed: HTTP ${response.status}\n`);
108
+ log(`[agentkit] delivery to ${label} failed: HTTP ${response.status}\n`);
109
109
  return;
110
110
  }
111
111
  delivered.push(label);
112
112
  }
113
113
  catch (error) {
114
- log(`[agent-serve] delivery to ${label} failed: ${error instanceof Error ? error.message : String(error)}\n`);
114
+ log(`[agentkit] delivery to ${label} failed: ${error instanceof Error ? error.message : String(error)}\n`);
115
115
  }
116
116
  })));
117
117
  if (recipients.length > 0 && delivered.length === 0) {