@cursor/july 0.1.21 → 0.1.23

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 (119) hide show
  1. package/README.md +5 -5
  2. package/dist/bin/agent-serve.d.ts +1 -0
  3. package/dist/bin/agent-serve.d.ts.map +1 -1
  4. package/dist/bin/agent-serve.js +21 -3
  5. package/dist/channels/slack/bot-mentions.d.ts +2 -0
  6. package/dist/channels/slack/bot-mentions.d.ts.map +1 -1
  7. package/dist/channels/slack/bot-mentions.js +29 -8
  8. package/dist/channels/slack/types.d.ts +13 -2
  9. package/dist/channels/slack/types.d.ts.map +1 -1
  10. package/dist/docs/404.html +2 -2
  11. package/dist/docs/ab.html +3 -3
  12. package/dist/docs/assets/{app.jDxLzWv4.js → app.DYcC9FY-.js} +1 -1
  13. package/dist/docs/assets/chunks/@localSearchIndexroot.BQTzJjR_.js +1 -0
  14. package/dist/docs/assets/chunks/{VPLocalSearchBox.Y6bDR1-a.js → VPLocalSearchBox.o4N_knTV.js} +1 -1
  15. package/dist/docs/assets/chunks/{theme.CLazCWlJ.js → theme.DQ-njyo0.js} +2 -2
  16. package/dist/docs/assets/index.md.Dfv5ic9t.js +20 -0
  17. package/dist/docs/assets/{index.md.t0TM2Qzz.lean.js → index.md.Dfv5ic9t.lean.js} +1 -1
  18. package/dist/docs/assets/{reference_cli.md.DnYfr5V2.js → reference_cli.md.ccoKOoXt.js} +4 -3
  19. package/dist/docs/assets/{reference_cli.md.DnYfr5V2.lean.js → reference_cli.md.ccoKOoXt.lean.js} +1 -1
  20. package/dist/docs/building-with-agents.html +3 -3
  21. package/dist/docs/concepts.html +3 -3
  22. package/dist/docs/deployment.html +3 -3
  23. package/dist/docs/evals.html +3 -3
  24. package/dist/docs/example-agents/approval-buddy.html +3 -3
  25. package/dist/docs/example-agents/benny.html +3 -3
  26. package/dist/docs/example-agents/bugbot.html +3 -3
  27. package/dist/docs/example-agents/codebase-wiki.html +3 -3
  28. package/dist/docs/example-agents/codeowners-review.html +3 -3
  29. package/dist/docs/example-agents/concierge.html +3 -3
  30. package/dist/docs/example-agents/fsd.html +3 -3
  31. package/dist/docs/example-agents/index.html +3 -3
  32. package/dist/docs/example-agents/knowledge-base.html +3 -3
  33. package/dist/docs/example-agents/oncall.html +3 -3
  34. package/dist/docs/example-agents/security-reviewer.html +3 -3
  35. package/dist/docs/example-agents/slack-agent.html +3 -3
  36. package/dist/docs/example-agents/weather-agent.html +3 -3
  37. package/dist/docs/guides/agent-to-agent.html +3 -3
  38. package/dist/docs/guides/cloud-runtime.html +3 -3
  39. package/dist/docs/guides/github.html +3 -3
  40. package/dist/docs/guides/human-in-the-loop.html +3 -3
  41. package/dist/docs/guides/mcp-oauth.html +3 -3
  42. package/dist/docs/guides/slack.html +3 -3
  43. package/dist/docs/guides/webhooks.html +3 -3
  44. package/dist/docs/hashmap.json +1 -1
  45. package/dist/docs/hillclimbing.html +3 -3
  46. package/dist/docs/index.html +6 -6
  47. package/dist/docs/quickstart.html +3 -3
  48. package/dist/docs/reference/agent-config.html +3 -3
  49. package/dist/docs/reference/channels.html +3 -3
  50. package/dist/docs/reference/cli.html +7 -6
  51. package/dist/docs/reference/connections.html +3 -3
  52. package/dist/docs/reference/hooks.html +3 -3
  53. package/dist/docs/reference/http-api.html +3 -3
  54. package/dist/docs/reference/instructions.html +3 -3
  55. package/dist/docs/reference/playground.html +3 -3
  56. package/dist/docs/reference/project-layout.html +3 -3
  57. package/dist/docs/reference/prompt.html +3 -3
  58. package/dist/docs/reference/schedules.html +3 -3
  59. package/dist/docs/reference/sessions.html +3 -3
  60. package/dist/docs/reference/skills.html +3 -3
  61. package/dist/docs/reference/subagents.html +3 -3
  62. package/dist/docs/reference/tools.html +3 -3
  63. package/dist/docs/scaffolding-agents.html +3 -3
  64. package/dist/docs/storage.html +3 -3
  65. package/dist/docs/troubleshooting.html +3 -3
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +1 -0
  69. package/dist/internal/cli-docs.d.ts +34 -0
  70. package/dist/internal/cli-docs.d.ts.map +1 -0
  71. package/dist/internal/cli-docs.js +162 -0
  72. package/dist/internal/distribution.d.ts +2 -1
  73. package/dist/internal/distribution.d.ts.map +1 -1
  74. package/dist/internal/distribution.js +3 -1
  75. package/dist/internal/docs-site.d.ts +4 -2
  76. package/dist/internal/docs-site.d.ts.map +1 -1
  77. package/dist/internal/docs-site.js +15 -11
  78. package/dist/internal/init-project.d.ts.map +1 -1
  79. package/dist/internal/init-project.js +19 -0
  80. package/dist/internal/local-env.d.ts +6 -4
  81. package/dist/internal/local-env.d.ts.map +1 -1
  82. package/dist/internal/local-env.js +14 -6
  83. package/dist/internal/session-engine.d.ts.map +1 -1
  84. package/dist/internal/session-engine.js +5 -0
  85. package/dist/internal/workspace.d.ts +9 -0
  86. package/dist/internal/workspace.d.ts.map +1 -1
  87. package/dist/internal/workspace.js +52 -5
  88. package/dist/memory.d.ts +79 -0
  89. package/dist/memory.d.ts.map +1 -0
  90. package/dist/memory.js +164 -0
  91. package/dist/playground/assets/index-DqXdAFGa.js +85 -0
  92. package/dist/playground/index.html +1 -1
  93. package/dist/types.d.ts +11 -0
  94. package/dist/types.d.ts.map +1 -1
  95. package/docs/README.md +8 -1
  96. package/docs/reference/cli.md +20 -4
  97. package/package.json +9 -1
  98. package/src/bin/agent-serve.ts +23 -3
  99. package/src/bin/agent-serve.version.test.ts +2 -0
  100. package/src/channels/slack/bot-mentions.test.ts +50 -0
  101. package/src/channels/slack/bot-mentions.ts +26 -2
  102. package/src/channels/slack/types.ts +13 -2
  103. package/src/index.ts +2 -0
  104. package/src/internal/cli-docs.test.ts +161 -0
  105. package/src/internal/cli-docs.ts +191 -0
  106. package/src/internal/distribution.ts +3 -1
  107. package/src/internal/docs-site.ts +19 -11
  108. package/src/internal/init-project.test.ts +1 -0
  109. package/src/internal/init-project.ts +22 -0
  110. package/src/internal/local-env.test.ts +20 -0
  111. package/src/internal/local-env.ts +14 -6
  112. package/src/internal/session-engine.ts +5 -0
  113. package/src/internal/workspace.test.ts +127 -1
  114. package/src/internal/workspace.ts +81 -5
  115. package/src/memory.ts +215 -0
  116. package/src/types.ts +11 -0
  117. package/dist/docs/assets/chunks/@localSearchIndexroot.DoJHJjqF.js +0 -1
  118. package/dist/docs/assets/index.md.t0TM2Qzz.js +0 -20
  119. package/dist/playground/assets/index-dshZQJCp.js +0 -85
@@ -1,8 +1,10 @@
1
1
  /**
2
- * Loads an agent directory's `.env.local` (and each immediate child's,
3
- * for multi-agent hosts) into process.env. Real env always wins
4
- * `process.loadEnvFile` never overrides. Values a previous call loaded are
5
- * refreshed, so a reload picks up edits made since.
2
+ * Loads an agent directory's env files (and each immediate child's, for
3
+ * multi-agent hosts) into process.env. Load order per directory is
4
+ * `.env.local` then `.env` — `process.loadEnvFile` never overrides, so
5
+ * real env wins over both, and `.env.local` wins over checked-in `.env`
6
+ * defaults. Values a previous call loaded are refreshed, so a reload
7
+ * picks up edits made since.
6
8
  */
7
9
  import { existsSync, readdirSync } from "node:fs";
8
10
  import { join } from "node:path";
@@ -25,7 +27,13 @@ export function loadAgentLocalEnv(dir) {
25
27
  const trackLoadedKeys = () => {
26
28
  fileLoadedKeys = new Set(Object.keys(process.env).filter((key) => !realKeys.has(key)));
27
29
  };
28
- tryLoad(join(dir, ".env.local"));
30
+ const tryLoadDir = (agentDir) => {
31
+ // `.env.local` first so its values win over checked-in `.env` defaults
32
+ // under loadEnvFile's no-override semantics.
33
+ tryLoad(join(agentDir, ".env.local"));
34
+ tryLoad(join(agentDir, ".env"));
35
+ };
36
+ tryLoadDir(dir);
29
37
  let children;
30
38
  try {
31
39
  children = readdirSync(dir, { withFileTypes: true })
@@ -40,7 +48,7 @@ export function loadAgentLocalEnv(dir) {
40
48
  if (child === "node_modules") {
41
49
  continue;
42
50
  }
43
- tryLoad(join(dir, child, ".env.local"));
51
+ tryLoadDir(join(dir, child));
44
52
  }
45
53
  trackLoadedKeys();
46
54
  return loaded;
@@ -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":"AAAA;;;;;;;GAOG;AAYH,OAAO,EACL,mBAAmB,EACnB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEtB,KAAK,cAAc,EAInB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAI1B,KAAK,eAAe,EACpB,KAAK,YAAY,EAKjB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EAEjB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,EAEnB,KAAK,eAAe,EAGpB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAQpE,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAc9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAU9D,eAAO,MAAM,eAAe,SAAS,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,SAAS,EAAE,MAAM,EAK5B;CACF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,SAAS,EAAE,MAAM,EAK5B;CACF;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,SAAS,EAAE,MAAM,EAG5B;CACF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAGvC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE;IAFvC,YACE,QAAQ,EAAE,MAAM,EACP,kBAAkB,EAAE,MAAM,EAAE,EAItC;CACF;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,YAAY,QAAQ,EAAE,MAAM,EAK3B;CACF;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAGrD;CACF;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,SAAS,EAAE,MAAM,EAG5B;CACF;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAG5C;CACF;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,YAAY,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAK5C;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAiBD,qBAAa,aAAa;IACxB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACjD,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG5B;IACJ,6EAA6E;IAC7E,OAAO,CAAC,kBAAkB,CAA8C;IAExE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IACrE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2C;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuC;IACvE,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAC3E;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,4EAA4E;IAC5E,OAAO,CAAC,mBAAmB,CAAkC;IAE7D,YAAY,OAAO,EAAE,oBAAoB,EAqDxC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,WAAW,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAapE;IAED,2FAA2F;IAC3F,IAAI,IAAI,IAAI,WAAW,CAUtB;IAED,OAAO,CAAC,iBAAiB;IAiBzB,oEAAoE;IACpE,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI,CAEhD;IAED,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,CAExC;IAMD;;;;OAIG;IACG,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,cAAc,CAAC,CAoFzB;IAED,8EAA8E;IACxE,sBAAsB,CAC1B,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,OAAO,CAAC,CAYlB;IAED;;;;;;OAMG;YACW,SAAS;IAyCvB;;;OAGG;YACW,SAAS;IAmBvB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAgBvB,oDAAoD;IAC9C,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAMhC;IAED,qEAAqE;IAC/D,OAAO,CACX,OAAO,EAAE,iBAAiB,GAAG,qBAAqB,GAAG,MAAM,EAC3D,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,cAAc,CAAC,CAwBzB;IAED,+DAA+D;IACzD,OAAO,CAAC,IAAI,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC,CAO7D;IAMD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,wBAAwB;YAoBlB,uBAAuB;YAgBvB,SAAS;IA0GvB;;;;OAIG;YACW,mBAAmB;IAYjC;;;;OAIG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnD;IAEK,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,OAAO,CAAC,CAelB;IAED;;;OAGG;IACG,+BAA+B,CACnC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB7B;IAEK,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,OAAO,CAAC,CAelB;IAED;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAaxC;IAED;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;;;;OAOG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC5C;IAED,gEAAgE;IAChE,OAAO,CAAC,WAAW;YAOL,WAAW;IAiLzB,OAAO,CAAC,gBAAgB;IA+FxB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,gBAAgB;IAwGxB;;;;OAIG;YACW,eAAe;YA8Df,qBAAqB;IAenC,uEAAuE;IACjE,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAUxE;IAED;;;;;;;OAOG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GACrC,OAAO,CAAC,eAAe,CAAC,CAqB1B;YAEa,qBAAqB;IAgBnC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,OAAY,EACnB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CA4I1B;YAMa,WAAW;IAUzB,OAAO,CAAC,aAAa;YAqBP,aAAa;IA6E3B,OAAO,CAAC,uBAAuB;IAazB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiB/D;IAED;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,OAAO,CAAC,cAAc,EAAE,CAAC,CAE3B;IAED;;;;OAIG;IACG,sBAAsB,CAC1B,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,OAAO,CAAC;QAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE,CAAC,CAyBpE;IAED;;;;OAIG;YACW,2BAA2B;IAyBzC,OAAO,CAAC,uBAAuB;IAmC/B;;;;OAIG;IACG,UAAU,CACd,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,OAAO,CAAC,UAAU,CAAC,CA6CrB;IAEK,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,UAAU,SAAI,GACb,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGrC;IAED;;;;OAIG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCzE;IAED,kEAAkE;IAC5D,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAG3E;IAEK,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAAC,IAAI,CAAC,CAmBf;IAED,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CASxC;IAED,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAc9C;IAED,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,mBAAmB;IAc3B,sEAAsE;IACtE,OAAO,CAAC,YAAY;IA6BpB;;;;;;;;;;;OAWG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc3C;YAEa,cAAc;IA4F5B;;;;;;;;OAQG;IACG,mBAAmB,CACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAMpC;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,4BAA4B;IAqBpC,OAAO,CAAC,kBAAkB;YAkBZ,gCAAgC;YAgBhC,sBAAsB;YAWtB,yBAAyB;IAmBvC;;;;;OAKG;YACW,kBAAkB;IAYhC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAO/C;IAED,yEAAyE;IACnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3B;CACF"}
@@ -786,6 +786,7 @@ export class SessionEngine {
786
786
  agent,
787
787
  workspaceDir,
788
788
  seed: isFirstTurn,
789
+ stateRoot: this.stateRoot,
789
790
  });
790
791
  const pendingFiles = record.pendingWorkspaceFiles;
791
792
  if (pendingFiles !== undefined &&
@@ -1016,6 +1017,7 @@ export class SessionEngine {
1016
1017
  toolCallId,
1017
1018
  session: this.sessionInfo(record),
1018
1019
  workspaceDir: this.harnessCwd(record),
1020
+ stateRoot: this.stateRoot,
1019
1021
  host: this.host,
1020
1022
  send: (channelId, message, sendOptions = {}) => this.send(channelId, message, Object.assign(Object.assign({}, sendOptions), { auth: sendOptions.auth !== undefined
1021
1023
  ? sendOptions.auth
@@ -1249,6 +1251,7 @@ export class SessionEngine {
1249
1251
  agent: this.project.agent,
1250
1252
  workspaceDir: record === undefined ? workspaceDir : this.scaffoldDir(record),
1251
1253
  seed: record === undefined || record.turnCount === 0,
1254
+ stateRoot: this.stateRoot,
1252
1255
  });
1253
1256
  // A per-call turnId keeps these events visible in trajectories (which
1254
1257
  // drop turn-less action events) without attributing them to a model turn.
@@ -1268,6 +1271,7 @@ export class SessionEngine {
1268
1271
  toolCallId: callId,
1269
1272
  session,
1270
1273
  workspaceDir,
1274
+ stateRoot: this.stateRoot,
1271
1275
  host: this.host,
1272
1276
  send: (channelId, message, sendOptions = {}) => this.send(channelId, message, Object.assign(Object.assign({}, sendOptions), { auth: sendOptions.auth !== undefined
1273
1277
  ? sendOptions.auth
@@ -1397,6 +1401,7 @@ export class SessionEngine {
1397
1401
  continuationToken: record.continuationKey,
1398
1402
  },
1399
1403
  session: this.sessionInfo(record),
1404
+ stateRoot: this.stateRoot,
1400
1405
  });
1401
1406
  }
1402
1407
  catch (error) {
@@ -15,6 +15,15 @@ export interface MaterializeWorkspaceOptions {
15
15
  * skills are always rewritten so authored edits show up on the next turn.
16
16
  */
17
17
  seed: boolean;
18
+ /**
19
+ * Agent state root. `<stateRoot>/memory/` (the durable cross-session
20
+ * directory the memory hook journals into) is created and symlinked into
21
+ * the workspace as `memory` so the agent reads it with plain file tools.
22
+ *
23
+ * TODO(agent-store): replace with the mounted AgentStore path so cloud
24
+ * VMs see the same directory.
25
+ */
26
+ stateRoot: string;
18
27
  }
19
28
  /** Relative path of an agent-side tool script inside the session workspace. */
20
29
  export declare function agentToolScriptPath(toolName: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/internal/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,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;CACf;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;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,CA6CR;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,GACnC,MAAM,CAUR;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,CA4Bf;AAmDD;;;;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;AAeH,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,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;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,CA6CR;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,GACnC,MAAM,CAUR;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"}
@@ -15,8 +15,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
15
15
  step((generator = generator.apply(thisArg, _arguments || [])).next());
16
16
  });
17
17
  };
18
- import { chmod, copyFile, mkdir, stat, writeFile } from "node:fs/promises";
19
- import { dirname, join, parse, relative, resolve } from "node:path";
18
+ import { chmod, copyFile, lstat, mkdir, readlink, rm, stat, symlink, writeFile, } from "node:fs/promises";
19
+ import { dirname, join, parse, relative, resolve, sep } from "node:path";
20
+ import { MEMORY_DIR_NAME } from "../memory.js";
20
21
  import { parseFrontmatter, serializeFrontmatter } from "./frontmatter.js";
21
22
  import { buildIdentitySection } from "./prompt-context.js";
22
23
  /** Relative path of an agent-side tool script inside the session workspace. */
@@ -150,8 +151,11 @@ export function isNestedInGitRepo(dir) {
150
151
  }
151
152
  export function materializeWorkspace(options) {
152
153
  return __awaiter(this, void 0, void 0, function* () {
153
- const { agent, workspaceDir, seed } = options;
154
+ const { agent, workspaceDir, seed, stateRoot } = options;
154
155
  yield mkdir(workspaceDir, { recursive: true });
156
+ if (seed) {
157
+ yield linkSharedMemoryDir(workspaceDir, stateRoot);
158
+ }
155
159
  const agentsMd = buildAgentsMdContent(agent, { includeScripts: false });
156
160
  yield writeFile(join(workspaceDir, "AGENTS.md"), agentsMd, "utf8");
157
161
  for (const tool of agent.tools) {
@@ -165,7 +169,7 @@ export function materializeWorkspace(options) {
165
169
  }
166
170
  if (seed) {
167
171
  for (const seedFile of agent.seedFiles) {
168
- const target = resolveInside(workspaceDir, seedFile.relativePath);
172
+ const target = resolveWorkspaceWritePath(workspaceDir, seedFile.relativePath);
169
173
  if (yield exists(target)) {
170
174
  continue;
171
175
  }
@@ -175,6 +179,49 @@ export function materializeWorkspace(options) {
175
179
  }
176
180
  });
177
181
  }
182
+ /**
183
+ * Resolve a workspace-rooted write target, refusing escapes and the
184
+ * reserved `memory` name. `memory` is a symlink into the agent's durable
185
+ * cross-session state, so a caller-supplied `workspaceFiles` entry (or a
186
+ * seed file) under it would write through the link and poison the journal
187
+ * every other session trusts. The check runs on the *resolved* path so
188
+ * `./memory/x` and `foo/../memory/x` cannot slip past.
189
+ */
190
+ function resolveWorkspaceWritePath(workspaceDir, relativePath) {
191
+ const target = resolveInside(workspaceDir, relativePath);
192
+ const first = relative(workspaceDir, target).split(sep, 1)[0];
193
+ if (first === MEMORY_DIR_NAME) {
194
+ throw new Error(`"${MEMORY_DIR_NAME}" is reserved for shared session memory; refusing to write ${relativePath}`);
195
+ }
196
+ return target;
197
+ }
198
+ /**
199
+ * Symlink `<stateRoot>/memory` into the workspace as `memory`. Stale links
200
+ * (a moved state root) are re-pointed; seeded files and symlink-refusing
201
+ * platforms (unprivileged Windows) are left alone — memory then stays
202
+ * reachable only via the state path.
203
+ */
204
+ function linkSharedMemoryDir(workspaceDir, stateRoot) {
205
+ return __awaiter(this, void 0, void 0, function* () {
206
+ const target = join(stateRoot, MEMORY_DIR_NAME);
207
+ const linkPath = join(workspaceDir, MEMORY_DIR_NAME);
208
+ yield mkdir(target, { recursive: true });
209
+ try {
210
+ yield symlink(target, linkPath, "dir");
211
+ }
212
+ catch (error) {
213
+ if (error.code !== "EEXIST") {
214
+ return;
215
+ }
216
+ const existing = yield lstat(linkPath);
217
+ if (!existing.isSymbolicLink() || (yield readlink(linkPath)) === target) {
218
+ return;
219
+ }
220
+ yield rm(linkPath);
221
+ yield symlink(target, linkPath, "dir");
222
+ }
223
+ });
224
+ }
178
225
  function materializeAgentTool(workspaceDir, tool) {
179
226
  return __awaiter(this, void 0, void 0, function* () {
180
227
  if (tool.script === undefined) {
@@ -240,7 +287,7 @@ export function buildSkillMd(skill) {
240
287
  export function writeWorkspaceFiles(workspaceDir, files) {
241
288
  return __awaiter(this, void 0, void 0, function* () {
242
289
  for (const [relativePath, contents] of Object.entries(files)) {
243
- const target = resolveInside(workspaceDir, relativePath);
290
+ const target = resolveWorkspaceWritePath(workspaceDir, relativePath);
244
291
  yield mkdir(dirname(target), { recursive: true });
245
292
  yield writeFile(target, contents, "utf8");
246
293
  }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Session memory — a journal of what every session of this agent did, so
3
+ * later sessions can recall and build on past work.
4
+ *
5
+ * The write side is {@link memoryHook}, authored as a thin re-export at
6
+ * `agent/hooks/memory.ts` (scaffolded by `agentkit init`): after each turn
7
+ * it appends one record (timestamp, session, user message, final result,
8
+ * usage) to `<stateRoot>/memory/journal.jsonl`.
9
+ *
10
+ * There is no read-side API. The framework symlinks `<stateRoot>/memory`
11
+ * into every session workspace as `memory/`, so agents read the journal
12
+ * with their normal file tools (`instructions.md` points them at it). That
13
+ * filesystem visibility is why memory does not route through
14
+ * `defineStorage` sinks, which are opaque to the model. A custom
15
+ * {@link MemoryBackend} (database, vector store, …) supplies its own read
16
+ * path — typically a server tool under `agent/tools/`, which can resolve
17
+ * state via `ctx.stateRoot`.
18
+ *
19
+ * TODO(agent-store): once agent-serve can mount the agent's AgentStore
20
+ * (durable S3-backed filesystem shared across serve hosts and cloud VMs),
21
+ * ship an AgentStore-backed backend and make it the default. The journal
22
+ * format is designed to survive that move unchanged.
23
+ */
24
+ import type { HookDefinition, TurnUsage } from "./types.js";
25
+ /** Name of the shared memory directory under the agent state root. */
26
+ export declare const MEMORY_DIR_NAME = "memory";
27
+ /** One journal line: what a single turn did. */
28
+ export type TurnMemoryRecord = {
29
+ /** ISO timestamp of when the turn finished. */
30
+ at: string;
31
+ sessionId: string;
32
+ channelId: string;
33
+ status: "completed" | "failed";
34
+ /** Session title, when the channel set one. */
35
+ title?: string;
36
+ /** Cursor SDK agent id (cloud: `bc-…`; local: the session id). */
37
+ sdkAgentId?: string;
38
+ /** The user message that started the turn (truncated). */
39
+ userMessage?: string;
40
+ /** Final assistant text of the turn, or the failure message (truncated). */
41
+ result?: string;
42
+ usage?: TurnUsage;
43
+ };
44
+ /** Where turn records go. Receives the agent's state root per append. */
45
+ export interface MemoryBackend {
46
+ appendTurn(record: TurnMemoryRecord, ctx: {
47
+ stateRoot: string;
48
+ }): Promise<void>;
49
+ }
50
+ export interface FileMemoryBackendOptions {
51
+ /**
52
+ * Rotate `journal.jsonl` to a timestamped sibling once it exceeds this
53
+ * size, keeping the file agents grep small. Default 5 MiB.
54
+ */
55
+ maxJournalBytes?: number;
56
+ }
57
+ /**
58
+ * Default backend: append-only JSONL at `<stateRoot>/memory/journal.jsonl`
59
+ * — the directory the framework symlinks into session workspaces. Rotated
60
+ * segments stay alongside as `journal-<epoch-ms>.jsonl`.
61
+ */
62
+ export declare function fileMemoryBackend(options?: FileMemoryBackendOptions): MemoryBackend;
63
+ export interface MemoryHookOptions {
64
+ /** Where records go. Defaults to {@link fileMemoryBackend}. */
65
+ backend?: MemoryBackend;
66
+ /** Truncation cap for stored userMessage / result text. Default 2000. */
67
+ maxTextLength?: number;
68
+ }
69
+ /**
70
+ * Observe-only hook that journals every turn. Author it as
71
+ * `agent/hooks/memory.ts`:
72
+ *
73
+ * ```ts
74
+ * import { memoryHook } from "@cursor/july/memory";
75
+ * export default memoryHook();
76
+ * ```
77
+ */
78
+ export declare function memoryHook(options?: MemoryHookOptions): HookDefinition;
79
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EAAe,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzE,sEAAsE;AACtE,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC,gDAAgD;AAChD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,UAAU,CACR,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,wBAA6B,GACrC,aAAa,CAgCf;AAED,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CAuF1E"}
package/dist/memory.js ADDED
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Session memory — a journal of what every session of this agent did, so
3
+ * later sessions can recall and build on past work.
4
+ *
5
+ * The write side is {@link memoryHook}, authored as a thin re-export at
6
+ * `agent/hooks/memory.ts` (scaffolded by `agentkit init`): after each turn
7
+ * it appends one record (timestamp, session, user message, final result,
8
+ * usage) to `<stateRoot>/memory/journal.jsonl`.
9
+ *
10
+ * There is no read-side API. The framework symlinks `<stateRoot>/memory`
11
+ * into every session workspace as `memory/`, so agents read the journal
12
+ * with their normal file tools (`instructions.md` points them at it). That
13
+ * filesystem visibility is why memory does not route through
14
+ * `defineStorage` sinks, which are opaque to the model. A custom
15
+ * {@link MemoryBackend} (database, vector store, …) supplies its own read
16
+ * path — typically a server tool under `agent/tools/`, which can resolve
17
+ * state via `ctx.stateRoot`.
18
+ *
19
+ * TODO(agent-store): once agent-serve can mount the agent's AgentStore
20
+ * (durable S3-backed filesystem shared across serve hosts and cloud VMs),
21
+ * ship an AgentStore-backed backend and make it the default. The journal
22
+ * format is designed to survive that move unchanged.
23
+ */
24
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
25
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
26
+ return new (P || (P = Promise))(function (resolve, reject) {
27
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
28
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
29
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
30
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
31
+ });
32
+ };
33
+ import { appendFile, mkdir, rename, stat } from "node:fs/promises";
34
+ import { join } from "node:path";
35
+ import { defineHook } from "./hooks.js";
36
+ /** Name of the shared memory directory under the agent state root. */
37
+ export const MEMORY_DIR_NAME = "memory";
38
+ /**
39
+ * Default backend: append-only JSONL at `<stateRoot>/memory/journal.jsonl`
40
+ * — the directory the framework symlinks into session workspaces. Rotated
41
+ * segments stay alongside as `journal-<epoch-ms>.jsonl`.
42
+ */
43
+ export function fileMemoryBackend(options = {}) {
44
+ var _a;
45
+ const maxJournalBytes = (_a = options.maxJournalBytes) !== null && _a !== void 0 ? _a : 5 * 1024 * 1024;
46
+ // Event dispatch is serialized per session but concurrent across
47
+ // sessions, so appends to the shared journal are chained per path. A
48
+ // failed append must not poison the chain for later turns.
49
+ const appendChains = new Map();
50
+ // Same-millisecond rotations must not reuse a segment name — POSIX
51
+ // rename would silently replace the earlier archive.
52
+ let rotationSeq = 0;
53
+ return {
54
+ appendTurn(record, ctx) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ var _a;
57
+ const dir = join(ctx.stateRoot, MEMORY_DIR_NAME);
58
+ const path = join(dir, "journal.jsonl");
59
+ const prior = (_a = appendChains.get(path)) !== null && _a !== void 0 ? _a : Promise.resolve();
60
+ const next = prior
61
+ .catch(() => { })
62
+ .then(() => __awaiter(this, void 0, void 0, function* () {
63
+ var _a;
64
+ var _b;
65
+ yield mkdir(dir, { recursive: true });
66
+ const size = (_b = (_a = (yield stat(path).catch(() => undefined))) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;
67
+ if (size >= maxJournalBytes) {
68
+ rotationSeq += 1;
69
+ yield rename(path, join(dir, `journal-${Date.now()}-${rotationSeq}.jsonl`));
70
+ }
71
+ yield appendFile(path, `${JSON.stringify(record)}\n`, "utf8");
72
+ }));
73
+ appendChains.set(path, next);
74
+ yield next;
75
+ });
76
+ },
77
+ };
78
+ }
79
+ function truncate(text, max) {
80
+ return text.length <= max ? text : `${text.slice(0, max)}…`;
81
+ }
82
+ /**
83
+ * Observe-only hook that journals every turn. Author it as
84
+ * `agent/hooks/memory.ts`:
85
+ *
86
+ * ```ts
87
+ * import { memoryHook } from "@cursor/july/memory";
88
+ * export default memoryHook();
89
+ * ```
90
+ */
91
+ export function memoryHook(options = {}) {
92
+ var _a, _b;
93
+ const backend = (_a = options.backend) !== null && _a !== void 0 ? _a : fileMemoryBackend();
94
+ const maxTextLength = (_b = options.maxTextLength) !== null && _b !== void 0 ? _b : 2000;
95
+ // Inbound message per turn (truncated at receipt so large pastes are not
96
+ // retained), keyed `<sessionId>/<turnId>` — `message.received` and the
97
+ // turn-end events share a turnId. Entries drop at turn end and any
98
+ // stragglers (turns that never reached a terminal event) at session end.
99
+ const pendingMessages = new Map();
100
+ const pendingKey = (ctx, turnId) => `${ctx.session.id}/${turnId !== null && turnId !== void 0 ? turnId : "?"}`;
101
+ const record = (ctx, turnId, status, result, usage) => __awaiter(this, void 0, void 0, function* () {
102
+ const key = pendingKey(ctx, turnId);
103
+ const userMessage = pendingMessages.get(key);
104
+ pendingMessages.delete(key);
105
+ const entry = {
106
+ at: new Date().toISOString(),
107
+ sessionId: ctx.session.id,
108
+ channelId: ctx.channel.id,
109
+ status,
110
+ };
111
+ if (ctx.session.title !== undefined) {
112
+ entry.title = ctx.session.title;
113
+ }
114
+ if (ctx.session.sdkAgentId !== undefined) {
115
+ entry.sdkAgentId = ctx.session.sdkAgentId;
116
+ }
117
+ if (userMessage !== undefined) {
118
+ entry.userMessage = userMessage;
119
+ }
120
+ if (result !== undefined) {
121
+ entry.result = truncate(result, maxTextLength);
122
+ }
123
+ if (usage !== undefined) {
124
+ entry.usage = usage;
125
+ }
126
+ yield backend.appendTurn(entry, { stateRoot: ctx.stateRoot });
127
+ });
128
+ const sweepSession = (ctx) => {
129
+ for (const key of pendingMessages.keys()) {
130
+ if (key.startsWith(`${ctx.session.id}/`)) {
131
+ pendingMessages.delete(key);
132
+ }
133
+ }
134
+ };
135
+ return defineHook({
136
+ events: {
137
+ "message.received"(event, ctx) {
138
+ return __awaiter(this, void 0, void 0, function* () {
139
+ pendingMessages.set(pendingKey(ctx, event.turnId), truncate(event.data.text, maxTextLength));
140
+ });
141
+ },
142
+ "turn.completed"(event, ctx) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ yield record(ctx, event.turnId, "completed", event.data.result, event.data.usage);
145
+ });
146
+ },
147
+ "turn.failed"(event, ctx) {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ yield record(ctx, event.turnId, "failed", event.data.message, undefined);
150
+ });
151
+ },
152
+ "session.completed"(_event, ctx) {
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ sweepSession(ctx);
155
+ });
156
+ },
157
+ "session.failed"(_event, ctx) {
158
+ return __awaiter(this, void 0, void 0, function* () {
159
+ sweepSession(ctx);
160
+ });
161
+ },
162
+ },
163
+ });
164
+ }