@cursor/july 0.1.40 → 0.1.41

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 (239) hide show
  1. package/AGENTS.md +4 -3
  2. package/dist/bin/agent-serve.js +28 -9
  3. package/dist/channels/slack/attachments.d.ts +82 -0
  4. package/dist/channels/slack/attachments.d.ts.map +1 -0
  5. package/dist/channels/slack/attachments.js +520 -0
  6. package/dist/channels/slack/cursor-account.d.ts +7 -1
  7. package/dist/channels/slack/cursor-account.d.ts.map +1 -1
  8. package/dist/channels/slack/cursor-account.js +2 -2
  9. package/dist/channels/slack/dispatch.d.ts +4 -3
  10. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  11. package/dist/channels/slack/dispatch.js +84 -21
  12. package/dist/channels/slack/inbound.d.ts +6 -0
  13. package/dist/channels/slack/inbound.d.ts.map +1 -1
  14. package/dist/channels/slack/inbound.js +48 -2
  15. package/dist/channels/slack/index.d.ts +1 -0
  16. package/dist/channels/slack/index.d.ts.map +1 -1
  17. package/dist/channels/slack/index.js +1 -0
  18. package/dist/channels/slack/manifest.d.ts.map +1 -1
  19. package/dist/channels/slack/manifest.js +1 -0
  20. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  21. package/dist/channels/slack/slack-channel.js +7 -4
  22. package/dist/channels/slack/types.d.ts +49 -1
  23. package/dist/channels/slack/types.d.ts.map +1 -1
  24. package/dist/docs/404.html +2 -2
  25. package/dist/docs/ab.html +6 -6
  26. package/dist/docs/assets/{ab.md.6cLOW7--.js → ab.md.hdxsvX5M.js} +2 -2
  27. package/dist/docs/assets/{app.DpGLSiym.js → app.mIw24pb1.js} +1 -1
  28. package/dist/docs/assets/{building-with-agents.md.txrcGU2B.js → building-with-agents.md.PeZaZA1P.js} +1 -1
  29. package/dist/docs/assets/chunks/@localSearchIndexroot.BA7V8dEJ.js +1 -0
  30. package/dist/docs/assets/chunks/{VPLocalSearchBox.B11XEMST.js → VPLocalSearchBox.hOzpPwrG.js} +1 -1
  31. package/dist/docs/assets/chunks/{theme.iTidHsAx.js → theme.BtFhUYmh.js} +2 -2
  32. package/dist/docs/assets/{deployment.md.CuK5SNjN.js → deployment.md.BHVjVqRa.js} +4 -4
  33. package/dist/docs/assets/{deployment.md.CuK5SNjN.lean.js → deployment.md.BHVjVqRa.lean.js} +1 -1
  34. package/dist/docs/assets/{evals.md.BQXI3rXy.js → evals.md.qeoGgPw0.js} +3 -3
  35. package/dist/docs/assets/example-agents_index.md.xmJ87d_3.js +2 -0
  36. package/dist/docs/assets/{guides_webhooks.md.BERuBSJW.js → guides_webhooks.md.DB-r_er9.js} +47 -4
  37. package/dist/docs/assets/{guides_webhooks.md.BERuBSJW.lean.js → guides_webhooks.md.DB-r_er9.lean.js} +1 -1
  38. package/dist/docs/assets/index.md.BKpbkCa6.js +24 -0
  39. package/dist/docs/assets/{index.md.CmhptOmN.lean.js → index.md.BKpbkCa6.lean.js} +1 -1
  40. package/dist/docs/assets/{quickstart.md.C_b6ESpD.js → quickstart.md.rIbfahJM.js} +4 -4
  41. package/dist/docs/assets/{reference_cli.md.Byvrg8eu.js → reference_cli.md.DqEqQpGn.js} +5 -5
  42. package/dist/docs/assets/{reference_cli.md.Byvrg8eu.lean.js → reference_cli.md.DqEqQpGn.lean.js} +1 -1
  43. package/dist/docs/assets/{reference_hooks.md.BGDw4VLm.js → reference_hooks.md.BHeG-vjK.js} +2 -2
  44. package/dist/docs/assets/{reference_hooks.md.BGDw4VLm.lean.js → reference_hooks.md.BHeG-vjK.lean.js} +1 -1
  45. package/dist/docs/assets/{storage.md.mQDtIULc.js → storage.md.DcGSnIxX.js} +10 -4
  46. package/dist/docs/assets/{storage.md.mQDtIULc.lean.js → storage.md.DcGSnIxX.lean.js} +1 -1
  47. package/dist/docs/assets/troubleshooting.md.CkgwmVI0.js +1 -0
  48. package/dist/docs/assets/{troubleshooting.md.B5RVX_tL.lean.js → troubleshooting.md.CkgwmVI0.lean.js} +1 -1
  49. package/dist/docs/building-with-agents.html +5 -5
  50. package/dist/docs/concepts.html +3 -3
  51. package/dist/docs/deployment.html +6 -6
  52. package/dist/docs/evals.html +7 -7
  53. package/dist/docs/example-agents/approval-buddy.html +3 -3
  54. package/dist/docs/example-agents/benny.html +3 -3
  55. package/dist/docs/example-agents/bugbot.html +3 -3
  56. package/dist/docs/example-agents/codebase-wiki.html +3 -3
  57. package/dist/docs/example-agents/codeowners-review.html +3 -3
  58. package/dist/docs/example-agents/concierge.html +3 -3
  59. package/dist/docs/example-agents/fsd.html +3 -3
  60. package/dist/docs/example-agents/index.html +5 -5
  61. package/dist/docs/example-agents/knowledge-base.html +3 -3
  62. package/dist/docs/example-agents/oncall.html +3 -3
  63. package/dist/docs/example-agents/security-reviewer.html +3 -3
  64. package/dist/docs/example-agents/slack-agent.html +3 -3
  65. package/dist/docs/example-agents/weather-agent.html +3 -3
  66. package/dist/docs/guides/agent-to-agent.html +3 -3
  67. package/dist/docs/guides/cloud-runtime.html +3 -3
  68. package/dist/docs/guides/github.html +3 -3
  69. package/dist/docs/guides/human-in-the-loop.html +3 -3
  70. package/dist/docs/guides/mcp-oauth.html +3 -3
  71. package/dist/docs/guides/slack.html +3 -3
  72. package/dist/docs/guides/webhooks.html +49 -6
  73. package/dist/docs/hashmap.json +1 -1
  74. package/dist/docs/hillclimbing.html +3 -3
  75. package/dist/docs/index.html +7 -7
  76. package/dist/docs/quickstart.html +8 -8
  77. package/dist/docs/reference/agent-config.html +3 -3
  78. package/dist/docs/reference/artifacts.html +3 -3
  79. package/dist/docs/reference/channels.html +3 -3
  80. package/dist/docs/reference/cli.html +8 -8
  81. package/dist/docs/reference/connections.html +3 -3
  82. package/dist/docs/reference/hooks.html +5 -5
  83. package/dist/docs/reference/http-api.html +3 -3
  84. package/dist/docs/reference/instructions.html +3 -3
  85. package/dist/docs/reference/playground.html +3 -3
  86. package/dist/docs/reference/project-layout.html +3 -3
  87. package/dist/docs/reference/prompt.html +3 -3
  88. package/dist/docs/reference/schedules.html +3 -3
  89. package/dist/docs/reference/sessions.html +3 -3
  90. package/dist/docs/reference/skills.html +3 -3
  91. package/dist/docs/reference/subagents.html +3 -3
  92. package/dist/docs/reference/tools.html +3 -3
  93. package/dist/docs/scaffolding-agents.html +3 -3
  94. package/dist/docs/storage.html +14 -8
  95. package/dist/docs/troubleshooting.html +5 -5
  96. package/dist/index.d.ts +4 -2
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +3 -1
  99. package/dist/internal/cli-ax.d.ts.map +1 -1
  100. package/dist/internal/cli-ax.js +22 -2
  101. package/dist/internal/cli-deploy.d.ts +6 -0
  102. package/dist/internal/cli-deploy.d.ts.map +1 -1
  103. package/dist/internal/cli-deploy.js +14 -4
  104. package/dist/internal/cli-mcp.js +4 -4
  105. package/dist/internal/deploy-client.js +1 -1
  106. package/dist/internal/discovery.d.ts.map +1 -1
  107. package/dist/internal/discovery.js +35 -7
  108. package/dist/internal/distribution.d.ts.map +1 -1
  109. package/dist/internal/distribution.js +3 -1
  110. package/dist/internal/durable-session-store.d.ts +48 -0
  111. package/dist/internal/durable-session-store.d.ts.map +1 -0
  112. package/dist/internal/durable-session-store.js +86 -0
  113. package/dist/internal/hosting.d.ts +1 -1
  114. package/dist/internal/hosting.js +2 -2
  115. package/dist/internal/init-project.d.ts +34 -0
  116. package/dist/internal/init-project.d.ts.map +1 -1
  117. package/dist/internal/init-project.js +121 -2
  118. package/dist/internal/ledger-serving.d.ts +101 -0
  119. package/dist/internal/ledger-serving.d.ts.map +1 -0
  120. package/dist/internal/ledger-serving.js +174 -0
  121. package/dist/internal/listen-port.d.ts +22 -0
  122. package/dist/internal/listen-port.d.ts.map +1 -0
  123. package/dist/internal/listen-port.js +77 -0
  124. package/dist/internal/playground/static.d.ts +21 -4
  125. package/dist/internal/playground/static.d.ts.map +1 -1
  126. package/dist/internal/playground/static.js +82 -18
  127. package/dist/internal/sdk-runner.d.ts.map +1 -1
  128. package/dist/internal/sdk-runner.js +10 -1
  129. package/dist/internal/server.d.ts.map +1 -1
  130. package/dist/internal/server.js +61 -47
  131. package/dist/internal/session-engine.d.ts +57 -1
  132. package/dist/internal/session-engine.d.ts.map +1 -1
  133. package/dist/internal/session-engine.js +117 -28
  134. package/dist/internal/slack-provision-client.js +1 -1
  135. package/dist/internal/workspace.d.ts +6 -2
  136. package/dist/internal/workspace.d.ts.map +1 -1
  137. package/dist/internal/workspace.js +10 -2
  138. package/dist/kv/memory-kv.d.ts +23 -0
  139. package/dist/kv/memory-kv.d.ts.map +1 -0
  140. package/dist/kv/memory-kv.js +103 -0
  141. package/dist/kv.d.ts +22 -0
  142. package/dist/kv.d.ts.map +1 -0
  143. package/dist/kv.js +20 -0
  144. package/dist/ledger/session-ledger.d.ts +204 -0
  145. package/dist/ledger/session-ledger.d.ts.map +1 -0
  146. package/dist/ledger/session-ledger.js +382 -0
  147. package/dist/ledger.d.ts +11 -0
  148. package/dist/ledger.d.ts.map +1 -0
  149. package/dist/ledger.js +9 -0
  150. package/dist/playground/assets/index-B3HBneZZ.js +85 -0
  151. package/dist/playground/assets/index-Bqk9nplh.css +1 -0
  152. package/dist/playground/index.html +2 -2
  153. package/dist/storage-backends/cursor-hosted.d.ts +25 -3
  154. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  155. package/dist/storage-backends/cursor-hosted.js +50 -2
  156. package/dist/storage-backends/file-kv.d.ts +5 -2
  157. package/dist/storage-backends/file-kv.d.ts.map +1 -1
  158. package/dist/storage-backends/file-kv.js +107 -7
  159. package/dist/storage.d.ts +60 -5
  160. package/dist/storage.d.ts.map +1 -1
  161. package/dist/storage.js +28 -4
  162. package/dist/types.d.ts +123 -3
  163. package/dist/types.d.ts.map +1 -1
  164. package/dist/types.js +14 -0
  165. package/docs/README.md +10 -7
  166. package/docs/ab.md +2 -2
  167. package/docs/building-with-agents.md +1 -1
  168. package/docs/deployment.md +34 -11
  169. package/docs/evals.md +3 -3
  170. package/docs/example-agents/index.md +1 -1
  171. package/docs/guides/webhooks.md +87 -0
  172. package/docs/quickstart.md +7 -8
  173. package/docs/reference/cli.md +15 -6
  174. package/docs/reference/hooks.md +8 -2
  175. package/docs/storage.md +67 -7
  176. package/docs/troubleshooting.md +10 -2
  177. package/package.json +20 -7
  178. package/skills/create-agent/SKILL.md +1 -1
  179. package/src/bin/agent-serve.ts +27 -11
  180. package/src/channels/slack/attachments.ts +635 -0
  181. package/src/channels/slack/cursor-account.ts +8 -0
  182. package/src/channels/slack/dispatch.ts +121 -6
  183. package/src/channels/slack/inbound.ts +60 -0
  184. package/src/channels/slack/index.ts +1 -0
  185. package/src/channels/slack/manifest.ts +1 -0
  186. package/src/channels/slack/slack-channel.ts +7 -0
  187. package/src/channels/slack/types.ts +47 -1
  188. package/src/index.ts +9 -0
  189. package/src/internal/cli-ax.ts +25 -1
  190. package/src/internal/cli-deploy.ts +22 -4
  191. package/src/internal/cli-mcp.ts +4 -4
  192. package/src/internal/deploy-client.ts +1 -1
  193. package/src/internal/discovery.ts +42 -5
  194. package/src/internal/distribution.ts +3 -1
  195. package/src/internal/durable-session-store.ts +95 -0
  196. package/src/internal/hosting.ts +2 -2
  197. package/src/internal/init-project.ts +151 -2
  198. package/src/internal/ledger-serving.ts +240 -0
  199. package/src/internal/listen-port.ts +85 -0
  200. package/src/internal/playground/static.ts +111 -20
  201. package/src/internal/sdk-runner.ts +11 -1
  202. package/src/internal/server.ts +68 -61
  203. package/src/internal/session-engine.ts +192 -16
  204. package/src/internal/slack-provision-client.ts +1 -1
  205. package/src/internal/workspace.ts +14 -3
  206. package/src/kv/memory-kv.ts +99 -0
  207. package/src/kv.ts +27 -0
  208. package/src/ledger/session-ledger.ts +535 -0
  209. package/src/ledger.ts +29 -0
  210. package/src/storage-backends/cursor-hosted.ts +108 -3
  211. package/src/storage-backends/file-kv.ts +128 -12
  212. package/src/storage.ts +90 -6
  213. package/src/types.ts +130 -4
  214. package/dist/channels/slack/post-update-delivery.d.ts +0 -85
  215. package/dist/channels/slack/post-update-delivery.d.ts.map +0 -1
  216. package/dist/docs/assets/chunks/@localSearchIndexroot.D82_RVtF.js +0 -1
  217. package/dist/docs/assets/example-agents_index.md.DgGBwckv.js +0 -2
  218. package/dist/docs/assets/index.md.CmhptOmN.js +0 -24
  219. package/dist/docs/assets/troubleshooting.md.B5RVX_tL.js +0 -1
  220. package/dist/internal/json-dir-store.d.ts +0 -32
  221. package/dist/internal/json-dir-store.d.ts.map +0 -1
  222. package/dist/internal/persistence-coordinator.d.ts +0 -127
  223. package/dist/internal/persistence-coordinator.d.ts.map +0 -1
  224. package/dist/multi-tenant.d.ts +0 -80
  225. package/dist/multi-tenant.d.ts.map +0 -1
  226. package/dist/multi-tenant.js +0 -69
  227. package/dist/persistence.d.ts +0 -184
  228. package/dist/persistence.d.ts.map +0 -1
  229. package/dist/playground/assets/index-BRhBbnd4.css +0 -1
  230. package/dist/playground/assets/index-Bc1oFgFG.js +0 -85
  231. package/dist/storage-backends/postgres-kv.d.ts +0 -82
  232. package/dist/storage-backends/postgres-kv.d.ts.map +0 -1
  233. package/dist/storage-backends/postgres-kv.js +0 -185
  234. package/src/storage-backends/postgres-kv.ts +0 -253
  235. /package/dist/docs/assets/{ab.md.6cLOW7--.lean.js → ab.md.hdxsvX5M.lean.js} +0 -0
  236. /package/dist/docs/assets/{building-with-agents.md.txrcGU2B.lean.js → building-with-agents.md.PeZaZA1P.lean.js} +0 -0
  237. /package/dist/docs/assets/{evals.md.BQXI3rXy.lean.js → evals.md.qeoGgPw0.lean.js} +0 -0
  238. /package/dist/docs/assets/{example-agents_index.md.DgGBwckv.lean.js → example-agents_index.md.xmJ87d_3.lean.js} +0 -0
  239. /package/dist/docs/assets/{quickstart.md.C_b6ESpD.lean.js → quickstart.md.rIbfahJM.lean.js} +0 -0
@@ -54,6 +54,7 @@ import { collectGitHubTriggerTargets, handleAgentServeTrigger, } from "./handleA
54
54
  import { createHostPlatforms, warmupHostGitHubAuth } from "./host-platforms.js";
55
55
  import { buildHttpChannelRoutes, errorResponse, jsonResponse, readJsonObject, requireSessionOwner, } from "./http-channel.js";
56
56
  import { validateToolInput } from "./json-schema.js";
57
+ import { DEFAULT_SERVE_PORT, listenHttpServer } from "./listen-port.js";
57
58
  import { createLocalControlPlane, } from "./local-control-plane.js";
58
59
  import { createLogRing } from "./log-ring.js";
59
60
  import { createAgentMcpEndpoint, createToolMcpEndpoint, MCP_ENDPOINT_PATH, TOOL_MCP_ENDPOINT_PATH, } from "./mcp-endpoint.js";
@@ -397,38 +398,24 @@ export function startServer(mounts_1) {
397
398
  })),
398
399
  }),
399
400
  });
400
- if (playground) {
401
- const cursorSlackBySlug = new Map(collectCursorSlackTargets(runtimes).map((target) => [
402
- target.runtime.slug,
403
- target.agentName,
404
- ]));
405
- const entries = runtimes.map(({ slug, project }) => {
406
- var _a;
407
- var _b;
408
- const cursorName = cursorSlackBySlug.get(slug);
409
- const hasSocketSlack = project.channels.some((channel) => { var _a, _b; return ((_a = channel.definition.meta) === null || _a === void 0 ? void 0 : _a.kind) === "slack" &&
410
- ((_b = channel.definition.meta) === null || _b === void 0 ? void 0 : _b.slackCursorAccount) !== true; });
411
- const slack = cursorName !== undefined
412
- ? {
413
- kind: "cursor-account",
414
- handle: `@Cursor ${cursorName}`,
415
- }
416
- : hasSocketSlack
417
- ? { kind: "socket" }
418
- : undefined;
419
- return Object.assign({ slug, name: project.name, model: typeof project.agent.model === "string"
420
- ? project.agent.model
421
- : ((_b = (_a = project.agent.model) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ""), tools: project.agent.tools.length, channels: project.channels.length + 1 }, (slack !== undefined ? { slack } : {}));
422
- });
423
- const indexHtml = renderAgentsIndexHtml(entries);
424
- router.add({
425
- method: "GET",
426
- pattern: "/",
427
- auth: "none",
428
- handler: () => new Response(indexHtml, {
429
- headers: { "content-type": "text/html; charset=utf-8" },
430
- }),
431
- });
401
+ }
402
+ // Orienting `/` for every layout (single empty-slug and multi).
403
+ // Lists playground links plus live routes (playground, health, docs).
404
+ if (playground) {
405
+ const entries = buildAgentIndexEntries(runtimes);
406
+ const indexHtml = renderAgentsIndexHtml(entries, {
407
+ docs: docsSite,
408
+ multi,
409
+ });
410
+ router.add({
411
+ method: "GET",
412
+ pattern: "/",
413
+ auth: "none",
414
+ handler: () => new Response(indexHtml, {
415
+ headers: { "content-type": "text/html; charset=utf-8" },
416
+ }),
417
+ });
418
+ if (multi) {
432
419
  router.add({
433
420
  method: "GET",
434
421
  pattern: "/v1/agents",
@@ -505,10 +492,17 @@ export function startServer(mounts_1) {
505
492
  void handleRequest(router, req, res, logger);
506
493
  });
507
494
  const host = (_p = options.host) !== null && _p !== void 0 ? _p : "127.0.0.1";
508
- const port = (_q = options.port) !== null && _q !== void 0 ? _q : 3000;
495
+ const portWasExplicit = options.port !== undefined;
496
+ const requestedPort = (_q = options.port) !== null && _q !== void 0 ? _q : DEFAULT_SERVE_PORT;
497
+ let boundPort;
509
498
  try {
510
- server.listen(port, host);
511
- yield once(server, "listening");
499
+ boundPort = yield listenHttpServer({
500
+ server,
501
+ host,
502
+ port: requestedPort,
503
+ portWasExplicit,
504
+ logger,
505
+ });
512
506
  }
513
507
  catch (error) {
514
508
  yield cursorEventRelay === null || cursorEventRelay === void 0 ? void 0 : cursorEventRelay.stop();
@@ -518,7 +512,7 @@ export function startServer(mounts_1) {
518
512
  }
519
513
  const address = server.address();
520
514
  const displayHost = host === "0.0.0.0" || host === "::" ? "127.0.0.1" : host;
521
- const url = `http://${displayHost}:${address.port}`;
515
+ const url = `http://${displayHost}:${boundPort}`;
522
516
  // Resolve peer + Cursor account MCP connections now that the listen port is
523
517
  // known (see resolved-connections.ts for the URL/runtime rules).
524
518
  for (const runtime of runtimes) {
@@ -1001,17 +995,6 @@ function mountAgentRoutes(router, runtime, args) {
1001
995
  auth: "none",
1002
996
  handler: (_request, ctx) => { var _a; return renderPlaygroundAsset((_a = ctx.params.file) !== null && _a !== void 0 ? _a : ""); },
1003
997
  });
1004
- if (!multi) {
1005
- router.add({
1006
- method: "GET",
1007
- pattern: "/",
1008
- auth: "none",
1009
- handler: () => new Response(null, {
1010
- status: 302,
1011
- headers: { location: "/playground" },
1012
- }),
1013
- });
1014
- }
1015
998
  }
1016
999
  for (const route of buildHttpChannelRoutes({
1017
1000
  engine,
@@ -1466,6 +1449,37 @@ function slackAgentNameFromSlug(slug) {
1466
1449
  * resolved. Duplicate names are a startup error — the backend routes
1467
1450
  * `@Cursor <name> …` by name, so two mounts cannot share one.
1468
1451
  */
1452
+ function buildAgentIndexEntries(runtimes) {
1453
+ const cursorSlackBySlug = new Map(collectCursorSlackTargets(runtimes).map((target) => [
1454
+ target.runtime.slug,
1455
+ target.agentName,
1456
+ ]));
1457
+ return runtimes.map(({ slug, project }) => {
1458
+ var _a;
1459
+ var _b;
1460
+ const cursorName = cursorSlackBySlug.get(slug);
1461
+ const hasSocketSlack = project.channels.some((channel) => { var _a, _b; return ((_a = channel.definition.meta) === null || _a === void 0 ? void 0 : _a.kind) === "slack" &&
1462
+ ((_b = channel.definition.meta) === null || _b === void 0 ? void 0 : _b.slackCursorAccount) !== true; });
1463
+ const slack = cursorName !== undefined
1464
+ ? {
1465
+ kind: "cursor-account",
1466
+ handle: `@Cursor ${cursorName}`,
1467
+ }
1468
+ : hasSocketSlack
1469
+ ? { kind: "socket" }
1470
+ : undefined;
1471
+ return {
1472
+ slug,
1473
+ name: project.name,
1474
+ model: typeof project.agent.model === "string"
1475
+ ? project.agent.model
1476
+ : ((_b = (_a = project.agent.model) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ""),
1477
+ tools: project.agent.tools.length,
1478
+ channels: project.channels.length + 1,
1479
+ slack,
1480
+ };
1481
+ });
1482
+ }
1469
1483
  function collectCursorSlackTargets(runtimes) {
1470
1484
  var _a;
1471
1485
  const targets = [];
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import type { SDKCustomToolResult } from "@cursor/sdk";
10
10
  import { SlackAskDedupeStore, SlackNudgeStore } from "../channels/slack/nudge-store.js";
11
- import { type AgentProject, type ApprovalDecision, type ArtifactListFilter, type ArtifactRecord, type ArtifactsApi, type AuthContext, type CallToolOptions, type ChannelDefinition, type ChannelSession, type ConnectionTransport, type HostContext, type HttpChannelDefinition, type PendingApproval, type ReceiveInput, type SendMessageOptions, type SessionEvent, type SessionInfo, type SessionListSource, type SessionRecord, type SessionSummary, type ToolCallOutcome, type TurnOutcome } from "../types.js";
11
+ import { type AgentProject, type ApprovalDecision, type ArtifactListFilter, type ArtifactRecord, type ArtifactsApi, type AuthContext, type CallToolOptions, type ChannelDefinition, type ChannelSession, type ConnectionTransport, type HostContext, type HostKvApi, type HttpChannelDefinition, type PendingApproval, type ReceiveInput, type SendMessageOptions, type SessionEvent, type SessionInfo, type SessionListSource, type SessionRecord, type SessionSummary, type ToolCallOutcome, type TurnOutcome } from "../types.js";
12
12
  import { type ABSnapshot } from "./ab-snapshot.js";
13
13
  import { type CloudAgentUsage } from "./cloud-turn-cost.js";
14
14
  import { type HostPlatforms } from "./host-platforms.js";
@@ -66,6 +66,21 @@ export interface SessionEngineOptions {
66
66
  * stub; production uses billed usage events when an agent id is known.
67
67
  */
68
68
  estimateTurnCost?: EstimateTurnCostFn;
69
+ /**
70
+ * Explicit durable-session store for `serving: "ledger"` agents — a KV
71
+ * dedicated to the ledger (session identity, leases, commit heads),
72
+ * separate from agent state. Must implement the ledger's CAS methods
73
+ * (`getWithVersion` / `putIfAbsent` / `putIfVersion`); construction
74
+ * fails fast otherwise. Supply the **raw** store: the engine owns key
75
+ * scoping and namespaces every ledger key under
76
+ * `agentkit/v1/<agent>/durable-session/` itself — a self-hoster never
77
+ * writes prefixes. Default when omitted: the authored storage backend
78
+ * (`agent/storage.ts`) when it implements the `cas` group, else — with
79
+ * no authored storage — a file store under `<stateRoot>/ledger-kv`
80
+ * (single-process correctness only). An authored storage backend
81
+ * *without* `cas` fails fast. Ignored for resident-mode agents.
82
+ */
83
+ durableSessionStore?: HostKvApi;
69
84
  }
70
85
  /**
71
86
  * A connection the serve host resolved once it was listening — a **peer**
@@ -93,6 +108,13 @@ export interface EngineResolvedConnection {
93
108
  }
94
109
  export interface EngineSendOptions extends SendMessageOptions {
95
110
  mode?: "chat" | "task";
111
+ /**
112
+ * Internal (ledger serving): this send *is* a lease-holding turn
113
+ * delivery, so it must run the resident path. Without the flag, every
114
+ * send on a `serving: "ledger"` agent routes through the ledger
115
+ * (claim → turn → commit) and the pump would recurse into itself.
116
+ */
117
+ ledgerDelivery?: boolean;
96
118
  }
97
119
  export declare class SessionEngine {
98
120
  readonly project: AgentProject;
@@ -162,7 +184,41 @@ export declare class SessionEngine {
162
184
  private readonly cloudCostBackfillDone;
163
185
  /** Deduped in-flight cloud cost backfills, keyed by session id. */
164
186
  private readonly cloudCostBackfill;
187
+ /**
188
+ * Ledger-mode delivery seam; set only when the agent declares
189
+ * `serving: "ledger"`. When present, {@link send} routes every
190
+ * non-delivery call through the ledger's claim → turn → commit.
191
+ */
192
+ private readonly ledgerServing;
165
193
  constructor(options: SessionEngineOptions);
194
+ /**
195
+ * Ledger-mode wiring (`serving: "ledger"`): resolve a CAS-capable
196
+ * durable-session store and build the delivery seam. Resident agents
197
+ * (the default) return undefined and never touch ledger keys.
198
+ */
199
+ private buildLedgerServing;
200
+ /**
201
+ * Pick the KV the ledger coordinates on, in precedence order:
202
+ *
203
+ * 1. `options.durableSessionStore` — an explicit store separate from
204
+ * agent state (advanced deployments, tests).
205
+ * 2. The authored storage backend (`agent/storage.ts`) when it
206
+ * implements the `cas` group — one backend serves both the storage
207
+ * API and the durable session API.
208
+ * 3. No authored storage: a file store under `<stateRoot>/ledger-kv`
209
+ * (same place resident state lives; single-process only).
210
+ *
211
+ * An authored backend without `cas` fails fast: silently falling back
212
+ * to local files would fork coordination away from the deployment's
213
+ * durable store. The check demands exactly the methods the
214
+ * coordination-only ledger uses — `listKeys` is not one of them.
215
+ *
216
+ * Whatever store wins, the returned handle is scoped here — once —
217
+ * under `agentkit/v1/<agent>/durable-session/`. The ledger speaks bare
218
+ * `session/…` / `ledger/…` keys; namespacing is this boundary's job,
219
+ * exactly like `host.kv`'s agent scoping.
220
+ */
221
+ private resolveDurableSessionStore;
166
222
  /**
167
223
  * Attach serve-time resolved connections (peers, Cursor account bridge).
168
224
  * They join the per-turn SDK `mcpServers` map (loopback URL for local
@@ -1 +1 @@
1
- {"version":3,"file":"session-engine.d.ts","sourceRoot":"","sources":["../../src/internal/session-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-engine.d.ts","sourceRoot":"","sources":["../../src/internal/session-engine.ts"],"names":[],"mappings":"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"}
@@ -15,17 +15,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
15
15
  step((generator = generator.apply(thisArg, _arguments || [])).next());
16
16
  });
17
17
  };
18
- var __rest = (this && this.__rest) || function (s, e) {
19
- var t = {};
20
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
21
- t[p] = s[p];
22
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
23
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
24
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
25
- t[p[i]] = s[p[i]];
26
- }
27
- return t;
28
- };
29
18
  import { mkdir, rm, writeFile } from "node:fs/promises";
30
19
  import { dirname, join } from "node:path";
31
20
  import { mergeABInstructions, resolveABMaxPlaygroundSessions, resolveABSplit, } from "../ab.js";
@@ -33,6 +22,8 @@ import { slackThreadPermalink } from "../channels/slack/links.js";
33
22
  import { SlackAskDedupeStore, SlackNudgeStore, } from "../channels/slack/nudge-store.js";
34
23
  import { resolveDedicatedSlackHostBinding } from "../channels/slack/slack-channel.js";
35
24
  import { isCursorHostedFilesAvailable } from "../files-backends/cursor-hosted.js";
25
+ import { SessionLedger, supportsSessionLedgerKv, } from "../ledger/session-ledger.js";
26
+ import { fileKv } from "../storage-backends/file-kv.js";
36
27
  import { DEFAULT_MODEL, DIRECT_TOOL_CALL_CHANNEL_ID, isHostOauthConnectionTransport, isSymbolicConnectionTransport, } from "../types.js";
37
28
  import { ABCollector } from "./ab-collector.js";
38
29
  import { foldABStream } from "./ab-fold.js";
@@ -43,6 +34,7 @@ import { samePrincipal } from "./auth.js";
43
34
  import { mergeCloudOptions, resolveSessionRuntime } from "./cloud-merge.js";
44
35
  import { applyCloudUsageToEvents, cloudSdkAgentIdFromEvents, isUnpricedCompletedTurn, mapSdkTokenUsage, } from "./cloud-turn-cost.js";
45
36
  import { isDevMode } from "./dev-mode.js";
37
+ import { ledgerKeyPrefix, namespacedKv, storageCasKv, } from "./durable-session-store.js";
46
38
  import { EventLogStore } from "./event-log.js";
47
39
  import { TurnEventMapper } from "./event-mapper.js";
48
40
  import { selectFrameworkStorageDefinition } from "./framework-storage-selection.js";
@@ -51,6 +43,7 @@ import { createHostKvApi } from "./host-kv.js";
51
43
  import { createHostPlatforms, createHostSlackClient, } from "./host-platforms.js";
52
44
  import { formatContinuationToken, newContinuationKey, newSessionId, newToolCallId, } from "./ids.js";
53
45
  import { validateToolInput } from "./json-schema.js";
46
+ import { LedgerServing, newLedgerPodId } from "./ledger-serving.js";
54
47
  import { McpHost } from "./mcp-host.js";
55
48
  import { buildSessionContextBlock, SCHEDULE_CHANNEL_PREFIX, } from "./prompt-context.js";
56
49
  import { assertCloudCanHonorAccountServersFilters } from "./resolved-connections.js";
@@ -211,6 +204,67 @@ export class SessionEngine {
211
204
  for (const channel of options.project.channels) {
212
205
  this.channelsById.set(channel.id, channel.definition);
213
206
  }
207
+ this.ledgerServing = this.buildLedgerServing(options);
208
+ }
209
+ /**
210
+ * Ledger-mode wiring (`serving: "ledger"`): resolve a CAS-capable
211
+ * durable-session store and build the delivery seam. Resident agents
212
+ * (the default) return undefined and never touch ledger keys.
213
+ */
214
+ buildLedgerServing(options) {
215
+ if (options.project.agent.serving !== "ledger") {
216
+ return undefined;
217
+ }
218
+ const ledgerKv = this.resolveDurableSessionStore(options);
219
+ return new LedgerServing({
220
+ ledger: new SessionLedger({ kv: ledgerKv, podId: newLedgerPodId() }),
221
+ deliverTurn: (request) => this.send(request.channelId, request.message, Object.assign(Object.assign({}, request.options), { continuationToken: request.continuationToken, ledgerDelivery: true })),
222
+ logger: this.logger,
223
+ });
224
+ }
225
+ /**
226
+ * Pick the KV the ledger coordinates on, in precedence order:
227
+ *
228
+ * 1. `options.durableSessionStore` — an explicit store separate from
229
+ * agent state (advanced deployments, tests).
230
+ * 2. The authored storage backend (`agent/storage.ts`) when it
231
+ * implements the `cas` group — one backend serves both the storage
232
+ * API and the durable session API.
233
+ * 3. No authored storage: a file store under `<stateRoot>/ledger-kv`
234
+ * (same place resident state lives; single-process only).
235
+ *
236
+ * An authored backend without `cas` fails fast: silently falling back
237
+ * to local files would fork coordination away from the deployment's
238
+ * durable store. The check demands exactly the methods the
239
+ * coordination-only ledger uses — `listKeys` is not one of them.
240
+ *
241
+ * Whatever store wins, the returned handle is scoped here — once —
242
+ * under `agentkit/v1/<agent>/durable-session/`. The ledger speaks bare
243
+ * `session/…` / `ledger/…` keys; namespacing is this boundary's job,
244
+ * exactly like `host.kv`'s agent scoping.
245
+ */
246
+ resolveDurableSessionStore(options) {
247
+ const namespace = ledgerKeyPrefix(options.project.name);
248
+ const explicit = options.durableSessionStore;
249
+ if (explicit !== undefined) {
250
+ if (!supportsSessionLedgerKv(explicit)) {
251
+ throw new Error(`Agent "${options.project.name}" declares serving: "ledger", but the configured durableSessionStore is not CAS-capable (getWithVersion / putIfAbsent / putIfVersion). Provide a store implementing those methods (see @cursor/july/kv).`);
252
+ }
253
+ return namespacedKv(explicit, namespace);
254
+ }
255
+ const casArgs = {
256
+ agentName: options.project.name,
257
+ projectRoot: options.project.rootDir,
258
+ };
259
+ const authored = options.project.storage;
260
+ if (authored !== undefined) {
261
+ if (authored.cas === undefined) {
262
+ throw new Error(`Agent "${options.project.name}" declares serving: "ledger", which needs conditional writes, but the storage backend in agent/storage.ts does not implement the cas group. Add cas: {...} to defineStorage (fileKv and cursorHostedStorage already include it), or pass an explicit durableSessionStore.`);
263
+ }
264
+ return namespacedKv(storageCasKv(authored, casArgs), namespace);
265
+ }
266
+ const fallback = fileKv({ dir: join(options.stateRoot, "ledger-kv") });
267
+ return namespacedKv(storageCasKv(fallback, casArgs), namespace);
214
268
  }
215
269
  /**
216
270
  * Attach serve-time resolved connections (peers, Cursor account bridge).
@@ -349,6 +403,12 @@ export class SessionEngine {
349
403
  return __awaiter(this, arguments, void 0, function* (channelId, message, options = {}) {
350
404
  var _a;
351
405
  var _b, _c, _d, _e, _f;
406
+ // Ledger-mode agents acquire the session lease before any turn runs;
407
+ // only the seam's own lease-holding deliveries fall through to the
408
+ // resident path.
409
+ if (this.ledgerServing !== undefined && options.ledgerDelivery !== true) {
410
+ return this.ledgerServing.deliver(channelId, message, options);
411
+ }
352
412
  const auth = (_b = options.auth) !== null && _b !== void 0 ? _b : null;
353
413
  let existing = options.continuationToken === undefined
354
414
  ? undefined
@@ -365,12 +425,14 @@ export class SessionEngine {
365
425
  // Refresh harness cwd when the caller supplies a newer worktree (e.g. PR
366
426
  // synchronize). Leave the durable continuation key unchanged.
367
427
  let record = existing;
368
- if (options.workspaceDir !== undefined &&
369
- options.workspaceDir !== existing.workspaceOverride) {
370
- record = yield this.updateRecord(existing.sessionId, (current) => { var _a; return (Object.assign(Object.assign({}, current), { workspaceOverride: options.workspaceDir, pendingWorkspaceFiles: (_a = options.workspaceFiles) !== null && _a !== void 0 ? _a : current.pendingWorkspaceFiles })); });
371
- }
372
- else if (options.workspaceFiles !== undefined) {
373
- record = yield this.updateRecord(existing.sessionId, (current) => (Object.assign(Object.assign({}, current), { pendingWorkspaceFiles: options.workspaceFiles })));
428
+ const refreshWorkspace = options.workspaceDir !== undefined &&
429
+ options.workspaceDir !== existing.workspaceOverride;
430
+ if (refreshWorkspace ||
431
+ options.workspaceFiles !== undefined ||
432
+ options.images !== undefined) {
433
+ record = yield this.updateRecord(existing.sessionId, (current) => (Object.assign(Object.assign({}, current), { workspaceOverride: refreshWorkspace
434
+ ? options.workspaceDir
435
+ : current.workspaceOverride, pendingWorkspaceFiles: mergePendingWorkspaceFiles(current.pendingWorkspaceFiles, options.workspaceFiles), pendingImages: mergePendingImages(current.pendingImages, options.images) })));
374
436
  }
375
437
  // Refresh the cloud attach the same way: a follow-up send carries the
376
438
  // caller's CURRENT cloud options (e.g. a PR attach re-derived per wake),
@@ -399,6 +461,7 @@ export class SessionEngine {
399
461
  channelState,
400
462
  workspaceOverride: options.workspaceDir,
401
463
  pendingWorkspaceFiles: options.workspaceFiles,
464
+ pendingImages: options.images,
402
465
  cloudOverride: options.cloud,
403
466
  sdkAgentId: options.sdkAgentId,
404
467
  turnCount: 0,
@@ -918,13 +981,19 @@ export class SessionEngine {
918
981
  stateRoot: this.stateRoot,
919
982
  });
920
983
  const pendingFiles = record.pendingWorkspaceFiles;
984
+ const pendingImages = record.pendingImages;
921
985
  if (pendingFiles !== undefined &&
922
986
  Object.keys(pendingFiles).length > 0) {
923
987
  yield writeWorkspaceFiles(harnessCwd, pendingFiles);
924
- yield this.updateRecord(sessionId, (current) => {
925
- const { pendingWorkspaceFiles: _cleared } = current, rest = __rest(current, ["pendingWorkspaceFiles"]);
926
- return rest;
927
- });
988
+ }
989
+ if ((pendingFiles !== undefined &&
990
+ Object.keys(pendingFiles).length > 0) ||
991
+ (pendingImages !== undefined && pendingImages.length > 0)) {
992
+ yield this.updateRecord(sessionId, (current) => (Object.assign(Object.assign({}, current), { pendingWorkspaceFiles: current.pendingWorkspaceFiles === pendingFiles
993
+ ? undefined
994
+ : current.pendingWorkspaceFiles, pendingImages: current.pendingImages === pendingImages
995
+ ? undefined
996
+ : current.pendingImages })));
928
997
  }
929
998
  // The harness only loads the scaffolded AGENTS.md when the session
930
999
  // workspace is its own project root. When the harness cwd is borrowed
@@ -945,7 +1014,7 @@ export class SessionEngine {
945
1014
  update.type === "tool-call-delta") {
946
1015
  yield yieldEventLoop();
947
1016
  }
948
- }), signal);
1017
+ }), signal, pendingImages);
949
1018
  this.activeToolContexts.set(sessionId, { record, turnId, emit });
950
1019
  try {
951
1020
  outcome = yield this.runner.runTurn(request);
@@ -1024,7 +1093,7 @@ export class SessionEngine {
1024
1093
  return Object.assign(Object.assign(Object.assign({}, outcome), (finalResult === undefined ? {} : { result: finalResult })), (finalUsage === undefined ? {} : { usage: finalUsage }));
1025
1094
  });
1026
1095
  }
1027
- buildTurnRequest(record, agent, turnId, prompt, isFirstTurn, instructionsInvisibleToHarness, emit, onUpdate, signal) {
1096
+ buildTurnRequest(record, agent, turnId, prompt, isFirstTurn, instructionsInvisibleToHarness, emit, onUpdate, signal, images) {
1028
1097
  var _a, _b, _c;
1029
1098
  // Per-session cloud attach (channel/tool handoff) forces cloud runtime
1030
1099
  // even when the agent defaults to local for chat server tools.
@@ -1078,9 +1147,9 @@ export class SessionEngine {
1078
1147
  turnPrompt = `${preamble}\n\n${turnPrompt}`;
1079
1148
  }
1080
1149
  }
1081
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ sessionId: record.sessionId }, (record.sdkAgentId === undefined
1150
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ sessionId: record.sessionId }, (record.sdkAgentId === undefined
1082
1151
  ? {}
1083
- : { sdkAgentId: record.sdkAgentId })), { workspaceDir: this.harnessCwd(record), sandbox: ((_c = this.project.agent.local) === null || _c === void 0 ? void 0 : _c.sandbox) === true, runnerStateDir: join(this.stateRoot, "runner"), prompt: turnPrompt, isFirstTurn }), (agent.model === undefined ? {} : { model: agent.model })), { runtime }), (mergedCloud === undefined ? {} : { cloud: mergedCloud })), { customTools: runtime === "local" ? this.buildCustomTools(record, turnId, emit) : {}, mcpServers: this.buildMcpServers(runtime, record.sessionId), subagents: buildRunnerSubagents(agent), onUpdate,
1152
+ : { sdkAgentId: record.sdkAgentId })), { workspaceDir: this.harnessCwd(record), sandbox: ((_c = this.project.agent.local) === null || _c === void 0 ? void 0 : _c.sandbox) === true, runnerStateDir: join(this.stateRoot, "runner"), prompt: turnPrompt, isFirstTurn }), (images !== undefined && images.length > 0 ? { images } : {})), (agent.model === undefined ? {} : { model: agent.model })), { runtime }), (mergedCloud === undefined ? {} : { cloud: mergedCloud })), { customTools: runtime === "local" ? this.buildCustomTools(record, turnId, emit) : {}, mcpServers: this.buildMcpServers(runtime, record.sessionId), subagents: buildRunnerSubagents(agent), onUpdate,
1084
1153
  signal,
1085
1154
  // Local follow-ups expire any lingering active run so a preempted turn
1086
1155
  // (or one orphaned by a crashed process) never blocks this send.
@@ -2412,22 +2481,42 @@ export class SessionEngine {
2412
2481
  /** Drain running turns, dispatches, and pending writes, then dispose. */
2413
2482
  close() {
2414
2483
  return __awaiter(this, void 0, void 0, function* () {
2415
- var _a, _b, _c;
2484
+ var _a, _b, _c, _d;
2416
2485
  this.approvals.cancelAll("deny");
2486
+ // Ledger deliveries spawn turns, so settle them before activeTurns.
2487
+ yield (_a = this.ledgerServing) === null || _a === void 0 ? void 0 : _a.close();
2417
2488
  yield Promise.allSettled([...this.activeTurns.values()]);
2418
2489
  yield Promise.allSettled([...this.backgroundWork]);
2419
2490
  yield Promise.allSettled([...this.dispatchChains.values()]);
2420
2491
  yield Promise.allSettled([...this.updateChains.values()]);
2421
2492
  yield this.logs.flushAll();
2422
- yield (_a = this.storage) === null || _a === void 0 ? void 0 : _a.close();
2493
+ yield (_b = this.storage) === null || _b === void 0 ? void 0 : _b.close();
2423
2494
  yield this.mcpHost.close();
2424
- yield (_c = (_b = this.runner).dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
2495
+ yield (_d = (_c = this.runner).dispose) === null || _d === void 0 ? void 0 : _d.call(_c);
2425
2496
  });
2426
2497
  }
2427
2498
  }
2428
2499
  /** Parallel event-stream loads during the startup bulk restore. */
2429
2500
  const RESTORE_FETCH_CONCURRENCY = 8;
2430
2501
  /** NDJSON payload for a restored event stream; undefined when empty. */
2502
+ function mergePendingImages(current, incoming) {
2503
+ if (incoming === undefined) {
2504
+ return current;
2505
+ }
2506
+ if (current === undefined || current.length === 0) {
2507
+ return incoming;
2508
+ }
2509
+ return [...current, ...incoming];
2510
+ }
2511
+ function mergePendingWorkspaceFiles(current, incoming) {
2512
+ if (incoming === undefined) {
2513
+ return current;
2514
+ }
2515
+ if (current === undefined) {
2516
+ return incoming;
2517
+ }
2518
+ return Object.assign(Object.assign({}, current), incoming);
2519
+ }
2431
2520
  function eventsNdjson(events) {
2432
2521
  if (events.length === 0) {
2433
2522
  return undefined;
@@ -250,7 +250,7 @@ function mapErrorResponse(response, bodyText, context) {
250
250
  case 401:
251
251
  return new SlackProvisionApiError("The Cursor API key was rejected. Run `agent-sdk login` again or update CURSOR_API_KEY.", { status: 401 });
252
252
  case 403:
253
- return new SlackProvisionApiError(`${serverError !== null && serverError !== void 0 ? serverError : "Not authorized"} — Slack provisioning needs team-admin permission and the cloud-agent entitlement on that team.`, { status: 403 });
253
+ return new SlackProvisionApiError(`${serverError !== null && serverError !== void 0 ? serverError : "Not authorized"} — Slack provisioning needs team membership and the cloud-agent entitlement on that team.`, { status: 403 });
254
254
  case 404: {
255
255
  // Fastify's route-not-found envelope means we hit the wrong host
256
256
  // (api2 vs api.cursor.com), not a closed gate.
@@ -108,7 +108,11 @@ export declare function materializeWorkspace(options: MaterializeWorkspaceOption
108
108
  export declare function buildSkillMd(skill: DiscoveredSkill): string;
109
109
  /**
110
110
  * Write relative path → contents under `workspaceDir`, refusing paths that
111
- * escape the directory.
111
+ * escape the directory. Values may be utf8 strings or base64 blob envelopes.
112
112
  */
113
- export declare function writeWorkspaceFiles(workspaceDir: string, files: Record<string, string>): Promise<void>;
113
+ export declare function writeWorkspaceFiles(workspaceDir: string, files: Record<string, string | {
114
+ encoding: "base64";
115
+ data: string;
116
+ mimeType?: string;
117
+ }>): Promise<void>;
114
118
  //# sourceMappingURL=workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/internal/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAapB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA8B,GAC/D,MAAM,CA8CR;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,MAAM,CA6BR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,MAAM,CAeR;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcrE;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAkCf;AAqGD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAO3D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAMf"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/internal/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAapB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA8B,GAC/D,MAAM,CA8CR;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,MAAM,CA6BR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,MAAM,CAeR;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcrE;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAkCf;AAqGD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAO3D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,CACX,MAAM,EACN,MAAM,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CACjE,GACA,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -352,14 +352,22 @@ export function buildSkillMd(skill) {
352
352
  }
353
353
  /**
354
354
  * Write relative path → contents under `workspaceDir`, refusing paths that
355
- * escape the directory.
355
+ * escape the directory. Values may be utf8 strings or base64 blob envelopes.
356
356
  */
357
357
  export function writeWorkspaceFiles(workspaceDir, files) {
358
358
  return __awaiter(this, void 0, void 0, function* () {
359
359
  for (const [relativePath, contents] of Object.entries(files)) {
360
360
  const target = resolveWorkspaceWritePath(workspaceDir, relativePath);
361
361
  yield mkdir(dirname(target), { recursive: true });
362
- yield writeFile(target, contents, "utf8");
362
+ if (typeof contents === "string") {
363
+ yield writeFile(target, contents, "utf8");
364
+ }
365
+ else if (contents.encoding === "base64") {
366
+ yield writeFile(target, Buffer.from(contents.data, "base64"));
367
+ }
368
+ else {
369
+ throw new Error(`Unsupported workspace file encoding for ${relativePath}`);
370
+ }
363
371
  }
364
372
  });
365
373
  }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * In-memory {@link HostKvCasApi} — the test/dev implementation of the
3
+ * interface module (`@cursor/july/kv`), exported at
4
+ * `@cursor/july/kv/memory`.
5
+ *
6
+ * The memory KV *is* the dev shim: tests and local runs exercise the
7
+ * same CAS coordination paths that hosted serving uses, not a mock of an
8
+ * RPC. Values are deep-copied on both write and
9
+ * read so callers can never observe (or cause) shared-reference mutation.
10
+ */
11
+ import type { StorageCasTable } from "../storage.js";
12
+ import type { HostKvCasApi } from "../types.js";
13
+ /** Create an empty in-memory CAS-capable KV. */
14
+ export declare function createMemoryKv(): HostKvCasApi;
15
+ /**
16
+ * In-memory `cas` group for `defineStorage` — a complete conditional-write
17
+ * group for sinks whose plain methods are inert or live elsewhere (test
18
+ * fixtures, an off-hosting no-op sink). Non-durable and process-local by
19
+ * construction; a real deployment backend should implement CAS against
20
+ * its own store instead.
21
+ */
22
+ export declare function memoryCasTable(): StorageCasTable;
23
+ //# sourceMappingURL=memory-kv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-kv.d.ts","sourceRoot":"","sources":["../../src/kv/memory-kv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,aAAa,CAAC;AAErB,gDAAgD;AAChD,wBAAgB,cAAc,IAAI,YAAY,CA4D7C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,eAAe,CAShD"}