@cursor/july 0.1.103 → 0.1.105

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 (264) hide show
  1. package/dist/channels/change-monitors/change-monitors-channel.d.ts +5 -0
  2. package/dist/channels/change-monitors/change-monitors-channel.d.ts.map +1 -0
  3. package/dist/channels/change-monitors/change-monitors-channel.js +41 -0
  4. package/dist/channels/change-monitors/index.d.ts +4 -0
  5. package/dist/channels/change-monitors/index.d.ts.map +1 -0
  6. package/dist/channels/change-monitors/index.js +2 -0
  7. package/dist/channels/change-monitors/types.d.ts +39 -0
  8. package/dist/channels/change-monitors/types.d.ts.map +1 -0
  9. package/dist/channels/change-monitors/types.js +1 -0
  10. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  11. package/dist/channels/deployments/deployments-channel.js +1 -0
  12. package/dist/channels/deployments/types.d.ts +2 -0
  13. package/dist/channels/deployments/types.d.ts.map +1 -1
  14. package/dist/channels/github/defaults.d.ts.map +1 -1
  15. package/dist/channels/github/defaults.js +4 -0
  16. package/dist/channels/github/progress.d.ts +22 -0
  17. package/dist/channels/github/progress.d.ts.map +1 -1
  18. package/dist/channels/github/progress.js +32 -5
  19. package/dist/channels/issues/index.d.ts +4 -0
  20. package/dist/channels/issues/index.d.ts.map +1 -0
  21. package/dist/channels/issues/index.js +2 -0
  22. package/dist/channels/issues/issues-channel.d.ts +5 -0
  23. package/dist/channels/issues/issues-channel.d.ts.map +1 -0
  24. package/dist/channels/issues/issues-channel.js +37 -0
  25. package/dist/channels/issues/types.d.ts +33 -0
  26. package/dist/channels/issues/types.d.ts.map +1 -0
  27. package/dist/channels/issues/types.js +1 -0
  28. package/dist/docs/404.html +2 -2
  29. package/dist/docs/ab.html +4 -4
  30. package/dist/docs/assets/{app.DW9pXkpL.js → app.BVwaffdK.js} +1 -1
  31. package/dist/docs/assets/chunks/@localSearchIndexroot.CJxMklAy.js +1 -0
  32. package/dist/docs/assets/chunks/{VPLocalSearchBox.CdEIUwDg.js → VPLocalSearchBox.WuWTZ1x8.js} +1 -1
  33. package/dist/docs/assets/chunks/{theme.YZMHgPgg.js → theme.BYdI_6sF.js} +2 -2
  34. package/dist/docs/assets/{guides_github.md.DKYiT9do.js → guides_github.md.c0gdGJ-D.js} +1 -1
  35. package/dist/docs/assets/{guides_github.md.DKYiT9do.lean.js → guides_github.md.c0gdGJ-D.lean.js} +1 -1
  36. package/dist/docs/assets/guides_grokbot-agents.md.DVqdhBKb.js +9 -0
  37. package/dist/docs/assets/guides_grokbot-agents.md.DVqdhBKb.lean.js +1 -0
  38. package/dist/docs/assets/index.md.BW_6tOgR.js +5 -0
  39. package/dist/docs/assets/index.md.BW_6tOgR.lean.js +1 -0
  40. package/dist/docs/assets/{reference_channels.md.Dz8Cnudp.js → reference_channels.md.DBGcaB7m.js} +2 -2
  41. package/dist/docs/assets/{reference_channels.md.Dz8Cnudp.lean.js → reference_channels.md.DBGcaB7m.lean.js} +1 -1
  42. package/dist/docs/assets/{reference_cli.md.CJNc_xYK.js → reference_cli.md.C6Lo8SEd.js} +2 -1
  43. package/dist/docs/assets/{reference_extensions.md.DykHW3qL.js → reference_extensions.md.CGmMLblt.js} +1 -1
  44. package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.js +3 -0
  45. package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.lean.js +1 -0
  46. package/dist/docs/building-with-agents.html +4 -4
  47. package/dist/docs/concepts.html +4 -4
  48. package/dist/docs/deployment.html +4 -4
  49. package/dist/docs/design/filesystem.md +376 -0
  50. package/dist/docs/evals.html +4 -4
  51. package/dist/docs/guides/agent-to-agent.html +4 -4
  52. package/dist/docs/guides/cloud-agents.html +5 -5
  53. package/dist/docs/guides/convert-automation.html +4 -4
  54. package/dist/docs/guides/github.html +6 -6
  55. package/dist/docs/guides/github.md +5 -0
  56. package/dist/docs/guides/grokbot-agents.html +35 -0
  57. package/dist/docs/guides/grokbot-agents.md +88 -0
  58. package/dist/docs/guides/human-in-the-loop.html +4 -4
  59. package/dist/docs/guides/mcp-oauth.html +4 -4
  60. package/dist/docs/guides/opentelemetry.html +5 -5
  61. package/dist/docs/guides/slack.html +4 -4
  62. package/dist/docs/guides/webhooks.html +4 -4
  63. package/dist/docs/hashmap.json +1 -1
  64. package/dist/docs/hillclimbing.html +4 -4
  65. package/dist/docs/index.html +6 -6
  66. package/dist/docs/index.md +6 -1
  67. package/dist/docs/llms-full.txt +562 -2
  68. package/dist/docs/llms.txt +3 -0
  69. package/dist/docs/quickstart.html +4 -4
  70. package/dist/docs/reference/agent-config.html +4 -4
  71. package/dist/docs/reference/artifacts.html +4 -4
  72. package/dist/docs/reference/channels.html +6 -6
  73. package/dist/docs/reference/channels.md +20 -0
  74. package/dist/docs/reference/cli.html +7 -6
  75. package/dist/docs/reference/cli.md +2 -1
  76. package/dist/docs/reference/connections.html +4 -4
  77. package/dist/docs/reference/extensions.html +6 -6
  78. package/dist/docs/reference/extensions.md +2 -0
  79. package/dist/docs/reference/hooks.html +4 -4
  80. package/dist/docs/reference/http-api.html +4 -4
  81. package/dist/docs/reference/instructions.html +4 -4
  82. package/dist/docs/reference/playground.html +4 -4
  83. package/dist/docs/reference/project-layout.html +4 -4
  84. package/dist/docs/reference/prompt.html +4 -4
  85. package/dist/docs/reference/result.html +4 -4
  86. package/dist/docs/reference/schedules.html +4 -4
  87. package/dist/docs/reference/sessions.html +4 -4
  88. package/dist/docs/reference/skills.html +4 -4
  89. package/dist/docs/reference/subagents.html +4 -4
  90. package/dist/docs/reference/tools.html +4 -4
  91. package/dist/docs/scaffolding-agents.html +4 -4
  92. package/dist/docs/skills/ab.html +4 -4
  93. package/dist/docs/skills/create-agent.html +4 -4
  94. package/dist/docs/skills/debug.html +4 -4
  95. package/dist/docs/skills/evals.html +4 -4
  96. package/dist/docs/skills/framework-map.html +4 -4
  97. package/dist/docs/skills/github.html +4 -4
  98. package/dist/docs/skills/hillclimb.html +4 -4
  99. package/dist/docs/skills/index.html +4 -4
  100. package/dist/docs/skills/mcp-auth.html +4 -4
  101. package/dist/docs/skills/otel.html +4 -4
  102. package/dist/docs/skills/setup-slack.html +4 -4
  103. package/dist/docs/storage.html +4 -4
  104. package/dist/docs/templates/agentic-owners.html +4 -4
  105. package/dist/docs/templates/agents-md.html +4 -4
  106. package/dist/docs/templates/code-wiki.html +5 -5
  107. package/dist/docs/templates/demo.html +5 -5
  108. package/dist/docs/templates/grokbot-agents.html +29 -0
  109. package/dist/docs/templates/grokbot-agents.md +48 -0
  110. package/dist/docs/templates/pr-autofixer.html +4 -4
  111. package/dist/docs/templates/security-help.html +4 -4
  112. package/dist/docs/templates/security-reviewer.html +4 -4
  113. package/dist/docs/templates/triage.html +4 -4
  114. package/dist/docs/troubleshooting.html +4 -4
  115. package/dist/files.d.ts +7 -2
  116. package/dist/files.d.ts.map +1 -1
  117. package/dist/files.js +7 -2
  118. package/dist/filesystem.d.ts +440 -0
  119. package/dist/filesystem.d.ts.map +1 -0
  120. package/dist/filesystem.js +1694 -0
  121. package/dist/index.d.ts +2 -0
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +1 -0
  124. package/dist/internal/continuation-channel.d.ts +4 -2
  125. package/dist/internal/continuation-channel.d.ts.map +1 -1
  126. package/dist/internal/continuation-channel.js +21 -12
  127. package/dist/internal/continuation-identity.d.ts +13 -5
  128. package/dist/internal/continuation-identity.d.ts.map +1 -1
  129. package/dist/internal/continuation-identity.js +74 -35
  130. package/dist/internal/cursor-agent-template.d.ts +1 -1
  131. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  132. package/dist/internal/cursor-agent-template.js +1 -0
  133. package/dist/internal/discovery/agent.d.ts.map +1 -1
  134. package/dist/internal/discovery/agent.js +80 -8
  135. package/dist/internal/discovery/info.d.ts.map +1 -1
  136. package/dist/internal/discovery/info.js +3 -0
  137. package/dist/internal/factory-resource-channel.d.ts +33 -0
  138. package/dist/internal/factory-resource-channel.d.ts.map +1 -0
  139. package/dist/internal/factory-resource-channel.js +77 -0
  140. package/dist/internal/filesystem/errors.d.ts +64 -0
  141. package/dist/internal/filesystem/errors.d.ts.map +1 -0
  142. package/dist/internal/filesystem/errors.js +175 -0
  143. package/dist/internal/filesystem/format.d.ts +28 -0
  144. package/dist/internal/filesystem/format.d.ts.map +1 -0
  145. package/dist/internal/filesystem/format.js +213 -0
  146. package/dist/internal/filesystem/merge.d.ts +34 -0
  147. package/dist/internal/filesystem/merge.d.ts.map +1 -0
  148. package/dist/internal/filesystem/merge.js +196 -0
  149. package/dist/internal/filesystem/scratch.d.ts +59 -0
  150. package/dist/internal/filesystem/scratch.d.ts.map +1 -0
  151. package/dist/internal/filesystem/scratch.js +212 -0
  152. package/dist/internal/filesystem/sdk-schemas.d.ts +29 -0
  153. package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -0
  154. package/dist/internal/filesystem/sdk-schemas.js +153 -0
  155. package/dist/internal/filesystem/tools.d.ts +42 -0
  156. package/dist/internal/filesystem/tools.d.ts.map +1 -0
  157. package/dist/internal/filesystem/tools.js +618 -0
  158. package/dist/internal/filesystem/walk.d.ts +74 -0
  159. package/dist/internal/filesystem/walk.d.ts.map +1 -0
  160. package/dist/internal/filesystem/walk.js +339 -0
  161. package/dist/internal/framework-file-storage.d.ts +3 -1
  162. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  163. package/dist/internal/framework-file-storage.js +3 -1
  164. package/dist/internal/guest-network.d.ts +5 -2
  165. package/dist/internal/guest-network.d.ts.map +1 -1
  166. package/dist/internal/guest-network.js +7 -2
  167. package/dist/internal/hosted-delivery.d.ts +7 -0
  168. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  169. package/dist/internal/hosted-delivery.js +41 -3
  170. package/dist/internal/hosted-managed-automation.d.ts.map +1 -1
  171. package/dist/internal/hosted-managed-automation.js +27 -2
  172. package/dist/internal/init-project.d.ts.map +1 -1
  173. package/dist/internal/init-project.js +4 -1
  174. package/dist/internal/sdk-runner.d.ts +13 -1
  175. package/dist/internal/sdk-runner.d.ts.map +1 -1
  176. package/dist/internal/sdk-runner.js +21 -1
  177. package/dist/internal/server.d.ts.map +1 -1
  178. package/dist/internal/server.js +11 -3
  179. package/dist/internal/session-engine.d.ts +30 -0
  180. package/dist/internal/session-engine.d.ts.map +1 -1
  181. package/dist/internal/session-engine.js +484 -82
  182. package/dist/internal/store-mirror.d.ts +2 -2
  183. package/dist/internal/store-mirror.js +2 -2
  184. package/dist/internal/tenant-slack/relay.d.ts +2 -0
  185. package/dist/internal/tenant-slack/relay.d.ts.map +1 -1
  186. package/dist/internal/tenant-slack/relay.js +18 -8
  187. package/dist/internal/testing/factory-resource-fixtures.d.ts +48 -0
  188. package/dist/internal/testing/factory-resource-fixtures.d.ts.map +1 -0
  189. package/dist/internal/testing/factory-resource-fixtures.js +41 -0
  190. package/dist/internal/workspace-sync.d.ts +31 -6
  191. package/dist/internal/workspace-sync.d.ts.map +1 -1
  192. package/dist/internal/workspace-sync.js +67 -12
  193. package/dist/internal/workspace.d.ts +9 -0
  194. package/dist/internal/workspace.d.ts.map +1 -1
  195. package/dist/internal/workspace.js +16 -0
  196. package/dist/playground/assets/{index-59KvgREd.js → index-BaQzjaNK.js} +40 -40
  197. package/dist/playground/assets/index-CceqnLTX.css +1 -0
  198. package/dist/playground/index.html +2 -2
  199. package/dist/types.d.ts +60 -11
  200. package/dist/types.d.ts.map +1 -1
  201. package/docs/README.md +6 -1
  202. package/docs/design/filesystem.md +376 -0
  203. package/docs/guides/github.md +5 -0
  204. package/docs/guides/grokbot-agents.md +93 -0
  205. package/docs/reference/channels.md +20 -0
  206. package/docs/reference/cli.md +2 -1
  207. package/docs/reference/extensions.md +2 -0
  208. package/docs/templates/grokbot-agents.md +53 -0
  209. package/package.json +25 -2
  210. package/src/channels/change-monitors/change-monitors-channel.ts +62 -0
  211. package/src/channels/change-monitors/index.ts +8 -0
  212. package/src/channels/change-monitors/types.ts +44 -0
  213. package/src/channels/deployments/deployments-channel.ts +1 -0
  214. package/src/channels/deployments/types.ts +2 -0
  215. package/src/channels/github/defaults.ts +4 -0
  216. package/src/channels/github/progress.ts +76 -10
  217. package/src/channels/issues/index.ts +9 -0
  218. package/src/channels/issues/issues-channel.ts +51 -0
  219. package/src/channels/issues/types.ts +41 -0
  220. package/src/files.ts +9 -2
  221. package/src/filesystem.ts +2074 -0
  222. package/src/index.ts +28 -0
  223. package/src/internal/continuation-channel.ts +29 -12
  224. package/src/internal/continuation-identity.ts +122 -37
  225. package/src/internal/cursor-agent-template.ts +1 -0
  226. package/src/internal/discovery/agent.ts +87 -1
  227. package/src/internal/discovery/info.ts +3 -0
  228. package/src/internal/factory-resource-channel.ts +122 -0
  229. package/src/internal/filesystem/errors.ts +220 -0
  230. package/src/internal/filesystem/format.ts +276 -0
  231. package/src/internal/filesystem/merge.ts +195 -0
  232. package/src/internal/filesystem/scratch.ts +255 -0
  233. package/src/internal/filesystem/sdk-schemas.ts +204 -0
  234. package/src/internal/filesystem/tools.ts +821 -0
  235. package/src/internal/filesystem/walk.ts +369 -0
  236. package/src/internal/framework-file-storage.ts +3 -1
  237. package/src/internal/guest-network.ts +8 -2
  238. package/src/internal/hosted-delivery.ts +71 -2
  239. package/src/internal/hosted-managed-automation.ts +49 -5
  240. package/src/internal/init-project.ts +4 -1
  241. package/src/internal/sdk-runner.ts +23 -0
  242. package/src/internal/server.ts +16 -0
  243. package/src/internal/session-engine.ts +595 -73
  244. package/src/internal/store-mirror.ts +2 -2
  245. package/src/internal/tenant-slack/relay.ts +28 -4
  246. package/src/internal/testing/factory-resource-fixtures.ts +85 -0
  247. package/src/internal/workspace-sync.ts +84 -12
  248. package/src/internal/workspace.ts +20 -0
  249. package/src/types.ts +58 -11
  250. package/templates/grokbot-agents/README.md +26 -0
  251. package/templates/grokbot-agents/agent/agent.ts +6 -0
  252. package/templates/grokbot-agents/agent/extensions/grokbot.ts +5 -0
  253. package/templates/grokbot-agents/agent/instructions.md +7 -0
  254. package/templates/grokbot-agents/evals/evals.config.ts +5 -0
  255. package/templates/grokbot-agents/evals/grokbot-agents.eval.ts +18 -0
  256. package/templates/grokbot-agents/init.json +18 -0
  257. package/templates/grokbot-agents/package.json +17 -0
  258. package/templates/grokbot-agents/tsconfig.json +12 -0
  259. package/dist/docs/assets/chunks/@localSearchIndexroot.nrl1ifBq.js +0 -1
  260. package/dist/docs/assets/index.md.D75GWhPl.js +0 -5
  261. package/dist/docs/assets/index.md.D75GWhPl.lean.js +0 -1
  262. package/dist/playground/assets/index-MbMxXg-y.css +0 -1
  263. /package/dist/docs/assets/{reference_cli.md.CJNc_xYK.lean.js → reference_cli.md.C6Lo8SEd.lean.js} +0 -0
  264. /package/dist/docs/assets/{reference_extensions.md.DykHW3qL.lean.js → reference_extensions.md.CGmMLblt.lean.js} +0 -0
@@ -0,0 +1,376 @@
1
+ # One FileSystem for every Agent SDK agent
2
+
3
+ > **Status:** first implementation, this PR. `@cursor/july` only.
4
+ > No Cursor SDK change.
5
+ > **Audience:** Agent SDK maintainers.
6
+
7
+ Every local turn binds a **FileSystem** and synthesizes native file
8
+ tools from it. There is no "is there an override?" branch on the
9
+ tool path. Authors pick the tree with `root`. Omit `root` and the
10
+ tree is the host disk, through internal `localFileSystem`.
11
+
12
+ ```ts
13
+ // Host disk. Relative paths resolve against the harness cwd.
14
+ export default defineAgent({
15
+ name: "reviewer",
16
+ });
17
+
18
+ // Override. The model sees only this tree. Paths are posix `/`.
19
+ export default defineAgent({
20
+ name: "notes",
21
+ root: tempFs({ "/notes.md": "hello" }),
22
+ });
23
+ ```
24
+
25
+ ---
26
+
27
+ ## Names
28
+
29
+ | Name | Kind | Meaning |
30
+ | --- | --- | --- |
31
+ | `FileSystem` | Type on `@cursor/july` | Path verbs. Authors provide this. |
32
+ | `root` | Field on `defineAgent` | The FileSystem the agent runs on. Omit it and the root is the host disk. |
33
+
34
+ No `root()` method and no public `Workspace` type.
35
+ `local.workspaceDir` stays the harness cwd. `workspaceFiles` stays
36
+ per-send seed files. Those names are not the path namespace.
37
+
38
+ Do not pass `local.root` into `Agent.create`. The published SDK
39
+ does not have that field.
40
+
41
+ ---
42
+
43
+ ## FileSystem
44
+
45
+ ```ts
46
+ interface FileSystem {
47
+ list(prefix?: string): AsyncIterable<DirEntry>;
48
+ stat(path: string): Promise<FileInfo>;
49
+ glob(pattern: string, dir?: string): AsyncIterable<DirEntry>;
50
+ read(path: string): Promise<string | Uint8Array>;
51
+ grep(query: GrepQuery): AsyncIterable<GrepResult>;
52
+ write(path: string, contents: string): Promise<void>;
53
+ delete(path: string): Promise<void>;
54
+ search(query: SearchQuery): AsyncIterable<SearchResult>;
55
+ }
56
+ ```
57
+
58
+ Every method is required. A tree without an index yields nothing
59
+ from `search`. Methods do not fall back to the host tree.
60
+ Diagnostics are not a FileSystem verb.
61
+
62
+ Path verbs take a path (and contents for `write`). Bags with two
63
+ or more independent options (`grep`, `search`) take a
64
+ named query object.
65
+
66
+ `read` returns text as a string, or image bytes as a
67
+ `Uint8Array` (`jpeg` / `png` / `gif` / `webp`). Native Read
68
+ applies `offset` / `limit` and numbers lines on text. Images
69
+ become a base64 image content part, the same shape the Cursor
70
+ harness sends the model.
71
+
72
+ FileSystem methods throw; they do not return a status envelope.
73
+ `@cursor/july` does not export `FileSystemResult`.
74
+
75
+ ### Paths
76
+
77
+ Authored `root` (`tempFs`, `unionFs`, `overlayFs`, `hostFs`, a custom tree) is one posix
78
+ namespace rooted at `/`. Query paths and yielded paths are
79
+ absolute (`/src/a.ts`). No trailing slash except `/`. `""`, `"/"`,
80
+ and an omitted optional scope mean the root. Prefix tests are
81
+ path-segment: `/agent` matches `/agent/skills`, not
82
+ `/agent-tools`. `normalizeFsPath` resolves `..`. `/tmp` is
83
+ reserved for turn-local scratch. See `/tmp` scratch.
84
+
85
+ Host-default `localFileSystem` follows Cursor SDK natives:
86
+ relative paths resolve against the harness cwd; absolute paths
87
+ are used as-is. Yielded paths are host paths, not rewritten to
88
+ `/`. `search` is empty (no host index).
89
+
90
+ ### Iterators
91
+
92
+ Async iterators are already sorted. `unionFs` k-way merges them
93
+ and does not re-sort a source.
94
+
95
+ - `list` / `glob`: lexicographic by `path`. Paths are unique.
96
+ - `grep`: by `path`, then `lineNumber` ascending. Keep every hit.
97
+ - `search`: by `score` descending, then `path` ascending.
98
+
99
+ A file is not under itself, so listing a file path is empty.
100
+ Empty `list` is not "missing"; `stat` answers that.
101
+
102
+ `glob(pattern, dir?)` matches relative to `dir`, not
103
+ basename-anywhere (`*.ts` under `/src` is `/src/a.ts`, not
104
+ `/src/nested/c.ts`).
105
+
106
+ `grep` has no `output_mode` or `offset`. A slash-free `glob`
107
+ (`*.ts`) matches the basename at any depth under `path`.
108
+ `grep` / `search` take optional `maxResults` as predicate
109
+ pushdown; implementations should stop after that many hits.
110
+ Composers push the same cap to children and apply it again
111
+ after the merge.
112
+
113
+ Native-tool pagination (`head_limit`, `offset`, `output_mode`,
114
+ `numResults`) stays on synthesized tools. Native `LS` is built
115
+ from `list` + `stat`; there is no `ls` method.
116
+
117
+ ### Errors
118
+
119
+ FileSystem methods throw `PathError`. `path` is the absolute
120
+ posix path the error is about. Messages stay these contract
121
+ strings so synthesized tools can show them as-is.
122
+
123
+ - `list` / `stat` / `glob` must not throw for a missing path.
124
+ Missing is an empty iterator or `{ kind: "missing" }`.
125
+ - `read` / `delete` missing file: `FileNotFoundError`
126
+ (`not found: ${path}`).
127
+ - `write` has no `not found`. I/O uses the OS message or
128
+ `WriteFailedError` (`write failed: ${path}`). A read-only
129
+ mount uses `ReadOnlyMountError` (`read-only mount: ${path}`).
130
+ - Synthesized StrReplace is `read` + exact replace + `write`.
131
+ Uniqueness failures throw `EditError` (`oldText is empty`,
132
+ `oldText and newText are exactly the same`, `The string to
133
+ replace was not found in the file`, and `The string to replace
134
+ was found multiple times in the file. Use replace_all to replace
135
+ all occurrences, or include more context to only edit one
136
+ occurrence.`). Write-back failures are `WriteFailedError`.
137
+ - `grep` throws `InvalidGrepPatternError`
138
+ (`invalid grep pattern: ${pattern}`). A missing host search
139
+ root throws. A missing virtual path yields nothing.
140
+ - `search` without an index is empty success.
141
+ - `unionFs` with no mount throws `NoMountError`
142
+ (`no mount for path: ${path}`) on `read` / `write` /
143
+ `delete`. Walk verbs stay empty or missing.
144
+ - `unionFs` catches `PathError` from a child and rethrows
145
+ `error.withPath(mountPrefix + childPath)`. Untyped `Error` still
146
+ gets a best-effort message rewrite.
147
+
148
+ Invoke wraps FileSystem throws into the executor success / error
149
+ envelope.
150
+
151
+ ### Write and StrReplace
152
+
153
+ `write(path, contents)` creates or overwrites a file. Success is
154
+ empty. Native Write maps `fileText` onto `contents` and prints
155
+ `Wrote contents to ${path}`.
156
+
157
+ StrReplace is not a FileSystem verb. The synthesized tool reads
158
+ the file, applies an exact non-overlapping replace, and writes
159
+ the result. It fails when `oldText` is empty, equals `newText`,
160
+ is missing, or occurs more than once without `replaceAll`.
161
+ Success is `{ occurrencesModified }`. Splice is literal; do not
162
+ use `String.prototype.replace`. Native aliases (`old_string`,
163
+ `new_string`, `replace_all`) map onto those fields at invoke
164
+ time.
165
+
166
+ ---
167
+
168
+ ## Helpers
169
+
170
+ | Helper | Role |
171
+ | --- | --- |
172
+ | `emptyFs()` | No files. Overlay leaf or missing catalog. Reads miss; writes are read-only. |
173
+ | `tempFs(files)` | In-memory snapshot. Tests and fixtures. |
174
+ | `unionFs({ "/repo": a, "/plans": b })` | Longest-prefix compose, path-segment match. Children are FileSystems rooted at `/`; `unionFs` strips the mount prefix on the way in and re-prefixes yields. List and glob use `unique` so an earlier mount shadows a later one. Grep and search keep every hit. Grep and search at `/` fan out to every child. |
175
+ | `overlayFs([upper, lower])` | Same-root overlay. Earlier layers win. Read-only. A downed layer costs its own files, not the overlay — `stat` / `grep` / `search` only fail when no layer served. |
176
+ | `hostFs(files, scope)` | `HostFilesApi` as a FileSystem rooted at `/`. Mount with `unionFs({ "/host": hostFs(files, scope) })`. `search` is empty (no index). Write without a cached etag is unconditional; after a successful read or write, write is CAS on that etag. |
177
+
178
+ `localFileSystem({ cwd })` is the host-default handle. It is not
179
+ exported from `@cursor/july`. Name helpers and `mergeSorted`
180
+ stay private. `emptyFs`, `tempFs`, `unionFs`, `overlayFs`, `hostFs`, and
181
+ the `PathError` classes (`FileNotFoundError`,
182
+ `ReadOnlyMountError`, `NoMountError`, `InvalidGrepPatternError`,
183
+ `WriteFailedError`, `EditError`,
184
+ `DeleteNotSupportedError`) are the public helpers.
185
+
186
+ ---
187
+
188
+ ## Tool synthesis
189
+
190
+ Local turns synthesize these natives from the bound FileSystem:
191
+ `Read`, `LS`, `Grep`, `Glob`, `Write`, `StrReplace`, `Delete`,
192
+ `SemanticSearch`. `list` + `stat` synthesize `LS`. `search`
193
+ synthesizes `SemanticSearch`. `StrReplace` is `read` + exact
194
+ replace + `write`. Other execute bodies call the matching
195
+ FileSystem method.
196
+
197
+ Authored `tools` can filter that set. `tools: ["read", "shell"]`
198
+ on a host-default agent synthesizes `Read` only.
199
+ `tools: ["edit"]` synthesizes `Write` and `StrReplace`.
200
+ `tools: ["semSearch"]` synthesizes `SemanticSearch`.
201
+ `tools: []` synthesizes nothing.
202
+
203
+ Host-default does not synthesize `SemanticSearch`. Native
204
+ `semSearch` stays on so the host index can run;
205
+ `localFileSystem.search` is empty. Authored `root` synthesizes
206
+ `SemanticSearch` from `FileSystem.search` and does not advertise
207
+ native `semSearch`. `search` is not an allowlist alias, so an
208
+ authored `search` tool is not treated as SemanticSearch.
209
+ `ReadLints` is not a FileSystem verb. Authored
210
+ `tools: ["readLints"]` fails closed so the host language service
211
+ cannot run.
212
+
213
+ Do not also ship `agent/tools/Read.ts` (and the other synthesized
214
+ names). Discovery fails closed on that clash for host-default and
215
+ authored `root`.
216
+
217
+ A factory root re-resolves the handle before a turn. The session
218
+ cache is the handle, not a tree snapshot. Unscoped `callTool`
219
+ uses the invocation id and does not cache, so factories cannot
220
+ share one tree across callers. A static `root` is the authored
221
+ object on every session — Write / StrReplace / Delete /
222
+ `workspaceFiles` are shared. Return a new handle from
223
+ `(ctx) => …` when a session should have its own tree. A factory
224
+ that returns the same object still shares.
225
+
226
+ Per-send `workspaceFiles` write through the FileSystem.
227
+ `memory/` is reserved (same as the host-default workspace
228
+ symlink into durable agent memory) and is refused after
229
+ normalize, including `./memory/x` and `foo/../memory/x`.
230
+ Host-default `list` / `glob` / `grep` do not follow directory
231
+ symlinks, including `memory/` — same as native LS/Glob/Grep.
232
+ Exact-path `read` / `stat` still follow.
233
+
234
+ Authored `root` skips session-directory materialize, git init,
235
+ and host-cwd checks. First turns prepend `buildAgentsMdContent`
236
+ and print `Workspace Path: /`. Host-default agents keep today's
237
+ materialize path.
238
+
239
+ ---
240
+
241
+ ## Allowlist
242
+
243
+ | `root` | `tools` | Model-facing harness |
244
+ | --- | --- | --- |
245
+ | omitted | omitted | The seven host-disk file tools (no synthesized `SemanticSearch`). Host shell / webSearch / sandbox / native `semSearch` stay. Host file natives are hidden with `disallowedTools: ["read","ls","grep","glob","edit","delete"]`. |
246
+ | omitted | `["read", "shell"]` | Synthesized `Read` + SDK `shell` + `mcp`. |
247
+ | omitted | `[]` | No synthesized file tools. |
248
+ | set | omitted | All eight synthesized file tools (including `SemanticSearch`) + webSearch + webFetch + updateTodos + readTodos + `mcp`. Bind `/tmp` scratch. Not the host-default full catalog (no shell / sandbox / task / native semSearch). |
249
+ | set | `["updateTodos"]` | All eight synthesized file tools + `updateTodos` + `mcp`. |
250
+ | set | `["semSearch"]` | Synthesized `SemanticSearch` + `mcp`. Native host index stays off. |
251
+ | set | `[]` | No synthesized file tools. Legal and empty. |
252
+ | set | `["shell"]` / `["task"]` / `["readLints"]` | Fail closed. |
253
+ | set | `["webSearch"]` / `["webFetch"]` | All eight synthesized file tools + the listed web tool + `mcp`. Bind `/tmp` scratch. |
254
+
255
+ `mcp` is granted when any tools ride that path. File-family
256
+ allowlist names are omitted from the SDK allowlist; the
257
+ synthesized tools replace them.
258
+
259
+ `local.sandbox` is Cursor's process sandbox around child
260
+ processes on the host-default path. It is not a FileSystem.
261
+
262
+ ---
263
+
264
+ ## Fail closed
265
+
266
+ | Combination | Result |
267
+ | --- | --- |
268
+ | `root` + `local.cwd` / `workspaceDir` / `sandbox` | Fail closed |
269
+ | `root` + `runtime: "cloud"` or `"grokbot"` | Fail closed |
270
+ | `root` + `tools` containing `"shell"` | Fail closed |
271
+ | `root` + `tools` containing `"task"` | Fail closed. A child keeps the host toolset. Sharing `root` needs a Cursor SDK inherit, not an overridden Task. |
272
+ | `root` + `tools` containing `"readLints"` | Fail closed. Diagnostics are not a FileSystem verb. |
273
+ | `agent/tools/Read.ts` (etc.) | Fail closed on host-default and authored `root`. |
274
+
275
+ ---
276
+
277
+ ## `/tmp` scratch for webSearch and webFetch
278
+
279
+ Native `WebSearch` and `WebFetch` stay native. They still scratch
280
+ large output to `{harnessCwd}/agent-tools/{uuid}.txt` on the host
281
+ disk. Under `root`, the turn composes
282
+ `unionFs({ "/": authored, "/tmp": tempFs() })`, copies only the file
283
+ the native tool wrote this turn, and drops that composed root at
284
+ end of turn.
285
+
286
+ ### Why `/tmp`
287
+
288
+ The FileSystem is the model's disk. Host `{cwd}/agent-tools/` is a
289
+ harness path. Under `root`, the model never sees it.
290
+
291
+ `/tmp` is the reserved scratch prefix. An authored `/tmp` is
292
+ shadowed. Do not put durable files there. `{cwd}/agent-tools/` and
293
+ `/tmp` are different namespaces.
294
+
295
+ `/agent-tools` is not reserved. Prefix `/agent` does not cover
296
+ `/agent-tools`. Those notes are path-prefix tests, not a mount.
297
+
298
+ Process or VM death also loses `/tmp`. Same as POSIX `/tmp`. That
299
+ is acceptable. Do not persist scratch across turns or process
300
+ restarts.
301
+
302
+ ### Overlay
303
+
304
+ | Piece | Rule |
305
+ | --- | --- |
306
+ | Native tool | Still searches and fetches. |
307
+ | Bind | Per turn: `unionFs({ "/": authored, "/tmp": tempFs() })`. `/tmp` is a mount, not a FileSystem type. |
308
+ | Session cache | Authored handle may stay cached. The composed root does not. |
309
+ | Drop | End of turn. Next turn gets a new empty `/tmp`. |
310
+ | Small results | Stay inline. No disk, no rewrite. |
311
+ | Copy | Only a file the native tool wrote this turn under `{cwd}/agent-tools/`. |
312
+ | Dest | `/tmp/{uuid}.txt`. Same uuid as the host file. |
313
+ | Host file | Delete after copy. |
314
+ | Other paths | Ignore. Do not copy from the result text at large. |
315
+
316
+ Do not put that composed root on the session handle. A later turn
317
+ must not read another turn's `/tmp`.
318
+
319
+ ### Result rewrite
320
+
321
+ Keep the native tool descriptions. They do not mention spill.
322
+
323
+ This package does not change the Cursor SDK. Native WebSearch /
324
+ WebFetch results land in the AgentService conversation inside
325
+ the local executor. That transcript is not rewritten here.
326
+
327
+ What this package rewrites:
328
+
329
+ | Surface | Overlay (`root` set) |
330
+ | --- | --- |
331
+ | `webSearch` / `webFetch` result | Host path and follow-up, in strings or structured fields (`output_location`). Other tools are untouched. |
332
+ | Synthesized Read / Grep input | `{cwd}/agent-tools/{uuid}.txt` → `/tmp/{uuid}.txt` |
333
+
334
+ | Field | Host path (`root` unset) | Overlay (`root` set) |
335
+ | --- | --- | --- |
336
+ | Path | `{cwd}/agent-tools/{uuid}.txt` | `/tmp/{uuid}.txt` |
337
+ | Follow-up | Native text (today: shell / grep / `read_file`) | Read / Grep |
338
+
339
+ Two modes, two paths. Do not invent a third.
340
+
341
+ WebFetch proto has `output_location`. WebSearch only embeds the
342
+ path in the chunk string. Rewrite whichever form the native tool
343
+ used.
344
+
345
+ The model follow path is Read / Grep on `/tmp/{uuid}.txt`,
346
+ including when the model still holds the host path.
347
+
348
+ ### Out of scope here
349
+
350
+ MCP `spillLargeMcpTextOutput` uses the same host `agent-tools`
351
+ directory. The same overlay can cover it later. This section is
352
+ webSearch and webFetch only.
353
+
354
+ ---
355
+
356
+ ## Live `root`
357
+
358
+ When the tree depends on the conversation, pass a factory. The
359
+ factory returns a handle. Agent SDK may reuse the object for the
360
+ session. Reuse is not a snapshot of mount contents.
361
+
362
+ ```ts
363
+ export default defineAgent({
364
+ name: "notes",
365
+ root: (ctx) => notesForSession(ctx.sessionId),
366
+ });
367
+ ```
368
+
369
+ ```ts
370
+ interface RootContext {
371
+ sessionId: string;
372
+ agentName?: string;
373
+ continuationKey?: string;
374
+ host?: { files: HostFilesApi; reminders?: ReminderHostApi };
375
+ }
376
+ ```
@@ -260,6 +260,11 @@ behavior. Reactions still default on; set `reactions: false` when the
260
260
  eyes emoji is noise. Descriptions are optional; defaults derive from
261
261
  `botName` or the check `context`.
262
262
 
263
+ To match dashboard automations, set `detailsUrl(sessionId)`,
264
+ `summaryLinkText: "View agent"`, and `outputTitle: "context"` so the
265
+ check title is the check name, the summary includes `[View agent](…)`,
266
+ and Details opens the session.
267
+
263
268
  A comment-only first wake has no head SHA, so the check waits for a
264
269
  PR or CI event. The banner still posts. A later turn on the same SHA
265
270
  creates a new check run; GitHub cannot reopen a completed run.
@@ -0,0 +1,93 @@
1
+ ---
2
+ title: "Cursor Grok Bot agents"
3
+ description: "Let an agent-sdk agent talk to your Grok Bot agents: mount the extension, name the bots it may reach, and decide what needs approval."
4
+ ---
5
+
6
+ # Cursor Grok Bot agents
7
+
8
+ The `cursor-grokbot-agents` extension lets an agent send a message to
9
+ one of your Grok Bot agents and read the reply. The Grok Bot keeps its
10
+ own conversation, memory, and tools. Your agent stays where it is and
11
+ consults that bot the way you would in the Grok Bot app.
12
+
13
+ This is different from moving this agent's turns onto a hosted Grok Bot.
14
+ The extension keeps the agent where it is and lets it talk to *other*
15
+ Grok Bot agents.
16
+
17
+ ## Mount it
18
+
19
+ The extension ships with `@cursor/july`. Mount it with one file.
20
+
21
+ ```ts
22
+ // agent/extensions/grokbot.ts
23
+ import cursorGrokBotAgents from "@cursor/july/extensions/cursor-grokbot-agents";
24
+
25
+ export default cursorGrokBotAgents({
26
+ agents: [
27
+ { name: "Plan Keeper", description: "Keeps or moves outdoor plans." },
28
+ { name: "Chief of Staff", description: "Routes work and tracks priorities." },
29
+ ],
30
+ });
31
+ ```
32
+
33
+ `agents` is the allowlist. List every Grok Bot the model may talk to;
34
+ a name outside the list is refused. Calls run under the host's
35
+ signed-in account (`agent-sdk login` or `CURSOR_API_KEY`). Keep
36
+ approval on when you can't.
37
+
38
+ Start from the [Grok Bot agents template](../templates/grokbot-agents.md)
39
+ when you want a project that already mounts this.
40
+
41
+ ## What the agent can do
42
+
43
+ With the extension mounted, the agent can consult a Grok Bot and stay
44
+ in its own conversation:
45
+
46
+ - **Ask.** Send a self-contained message to a Grok Bot by the name
47
+ shown in the Grok Bot app. The message lands in your conversation
48
+ with that bot. The tool waits for the bot's reply.
49
+ - **Keep waiting.** A long turn returns `status: "running"`. Call check
50
+ with the same name to read what arrived since the last look.
51
+ - **Stop a turn.** Interrupt the bot's current work. The conversation
52
+ stays; a later ask continues it.
53
+ - **See who you can talk to.** List the configured bots and the ones
54
+ this caller has already asked. Add a name to `agents` when you want
55
+ the model to reach another bot.
56
+
57
+ A skill teaches the model when to bring a Grok Bot in, how to write a
58
+ message the bot can act on alone, and how to wait or interrupt. The
59
+ reply is what the Grok Bot sent to the person. If a turn finishes with
60
+ no reply, the bot sent nothing; ask again with a clearer request, or
61
+ open the bot in the Grok Bot app.
62
+
63
+ The tools reach Grok Bot agents on the signed-in account. A bot another
64
+ user owns is out of reach. That separation is only as fine as your
65
+ host's auth; a shared bearer token or `--allow-anonymous` makes every
66
+ caller one principal, so use
67
+ [authored auth](../reference/channels.md#auth-policies) when callers
68
+ need their own.
69
+
70
+ ## Configure it
71
+
72
+ | Option | What it controls |
73
+ | --- | --- |
74
+ | `agents` | The Grok Bot agents the model may talk to, by the name shown in the app. A lone entry is the default when a call names none. Omit `agents` to allow any name; an unknown name creates an empty Grok Bot on the account. |
75
+ | `needsApproval` | Park asks for a [human decision](./human-in-the-loop.md). Defaults to `true` when no `agents` are configured, `false` otherwise. |
76
+ | `apiKey` | A Cursor API key to call with instead of the host's own. |
77
+
78
+ ## Adjust it
79
+
80
+ To take a capability away, such as interrupting a turn, mount as a
81
+ directory and disable that tool; see
82
+ [overlays](../reference/extensions.md#adjust-a-mounted-extension).
83
+
84
+ ## What's next
85
+
86
+ Continue with these pages:
87
+
88
+ - [Grok Bot agents template](../templates/grokbot-agents.md): scaffold
89
+ an agent that already mounts this
90
+ - [Extensions](../reference/extensions.md): how mounts, namespaces, and
91
+ overrides work
92
+ - [Human-in-the-loop approvals](./human-in-the-loop.md): where parked
93
+ asks get approved
@@ -237,6 +237,26 @@ rather than dropping events. An empty `deploySourceUris` list mounts
237
237
  the channel but starts no pull, so an env-configured agent stays inert
238
238
  until its deploy sources are set.
239
239
 
240
+ **Change Monitors** (`@cursor/july/channels/change-monitors`): Change
241
+ Monitor Checkpoint events. The channel publishes Factory
242
+ `checkpoint.created` for every Checkpoint create. The agent filters the
243
+ result (for example to the `issues` arm). The payload contains the
244
+ full Checkpoint resource. This channel is scoped to Change Monitors,
245
+ not generic Factory Checkpoints. There is no repository filter or
246
+ resource filter. Author `agent/channels/change-monitors.ts` with
247
+ `changeMonitorsChannel()`. It uses the host credential. The v1 omitted
248
+ continuation is `none/v1`. A v2 agent defaults to
249
+ `change_monitors.checkpoint/v2`, which keys the session as
250
+ `cont:change_monitors:{checkpointName}`.
251
+
252
+ **Issues** (`@cursor/july/channels/issues`): Factory issue events.
253
+ The channel publishes `issue.created` for every Issue create. The
254
+ agent filters if it needs a subset. The payload contains the full
255
+ Issue resource. There is no repository filter or resource filter.
256
+ Author `agent/channels/issues.ts` with `issuesChannel()`. It uses the
257
+ host credential. The v1 omitted continuation is `none/v1`. A v2 agent
258
+ defaults to `issues.issue/v2`, which keys the session by issue name.
259
+
240
260
  For other platforms like Discord or Teams, use the authored
241
261
  `defineChannel` webhook form.
242
262
 
@@ -414,6 +414,7 @@ non-zero when the reconstructed trajectory failed.
414
414
  ```bash
415
415
  agent-sdk init ./my-agent # scaffold package.json, tsconfig.json, agent/ + a demo tool
416
416
  agent-sdk init ./my-demo --template demo # record a PR walkthrough
417
+ agent-sdk init ./grokbot --template grokbot-agents # talk to Grok Bot agents
417
418
  agent-sdk init ./code-wiki --template code-wiki # keep wiki pages current after merge
418
419
  agent-sdk init ./agents-md --template agents-md # keep AGENTS.md current from last week's PRs and Slack
419
420
  agent-sdk init ./my-reviewer --template security-reviewer # review PRs for security bugs
@@ -435,7 +436,7 @@ agent-sdk init # no directory: print the setup guide
435
436
  Templates may ship `init.json`. On a TTY, `init` asks those questions
436
437
  before writing files. `code-wiki`, `pr-autofixer`, `security-help`, and
437
438
  `agents-md` ask for GitHub repos. `agents-md` also asks for Slack
438
- channels. Repeat
439
+ channels. `grokbot-agents` asks for Grok Bot names. Repeat
439
440
  `--var id=value` to answer without a prompt.
440
441
  `--json` and non-TTY hosts skip the interview unless `--var` is set.
441
442
 
@@ -263,6 +263,8 @@ Continue with these pages:
263
263
 
264
264
  - [Cursor cloud agents](../guides/cloud-agents.md): the extension that
265
265
  lets an agent launch and steer cloud agents
266
+ - [Cursor Grok Bot agents](../guides/grokbot-agents.md): the extension
267
+ that lets an agent talk to Grok Bot agents
266
268
  - [Tools](./tools.md): the tool contract extensions contribute to
267
269
  - [Skills](./skills.md): the skill forms an extension can carry
268
270
  - [Project layout](./project-layout.md): where `agent/extensions/` sits
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: "Talk to your Grok Bot agents"
3
+ description: "Scaffold the agent, name the Grok Bot agents it may reach, and consult them from its own conversation."
4
+ ---
5
+
6
+ # Talk to your Grok Bot agents
7
+
8
+ This agent sends a message to a Grok Bot you already use and reads the
9
+ reply. The Grok Bot keeps its conversation. This agent stays where it
10
+ is.
11
+
12
+ ## Scaffold
13
+
14
+ ```bash
15
+ npx @cursor/july init ./grokbot --template grokbot-agents
16
+ ```
17
+
18
+ `init` asks for the names shown in the Grok Bot app. Every name is an
19
+ allowlist entry. Pass `--var agents="Plan Keeper, Chief of Staff"` to
20
+ skip the prompt.
21
+
22
+ The names land in `agent/extensions/grokbot.ts`. A name outside that
23
+ list is refused.
24
+
25
+ ## Log in
26
+
27
+ Asks run under the signed-in account.
28
+
29
+ ```bash
30
+ cd grokbot
31
+ agent-sdk login
32
+ agent-sdk dev
33
+ ```
34
+
35
+ In the playground, ask it to talk to one of the names you entered.
36
+
37
+ ## What to edit
38
+
39
+ - `agent/extensions/grokbot.ts`: who it may talk to. Add `needsApproval: true` to park each ask.
40
+ - `agent/instructions.md`: when to consult them
41
+
42
+ See [Cursor Grok Bot agents](../guides/grokbot-agents.md) for the
43
+ extension, and [Human-in-the-loop approvals](../guides/human-in-the-loop.md)
44
+ for where a parked ask gets approved.
45
+
46
+ ## Evals
47
+
48
+ ```bash
49
+ agent-sdk eval
50
+ ```
51
+
52
+ The smoke case asks who it can talk to. It must list the configured
53
+ bots and not send a message.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cursor/july",
3
- "version": "0.1.103",
3
+ "version": "0.1.105",
4
4
  "description": "(early alpha) Filesystem-first framework for defining Cursor agents as markdown and TypeScript and serving them over channels with the Cursor SDK.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "repository": {
@@ -23,6 +23,7 @@
23
23
  "!dist/playground-central/**",
24
24
  "!dist/internal/tenant-mcp/**",
25
25
  "!dist/internal/grokbot/**",
26
+ "!dist/extensions/cursor-grokbot-agents/**",
26
27
  "!dist/internal/review-comments.*",
27
28
  "!dist/internal/shallow-clone.*",
28
29
  "!dist/internal/managed-delivery.*",
@@ -30,6 +31,7 @@
30
31
  "!src/**/*.test.ts",
31
32
  "!src/internal/tenant-mcp/**",
32
33
  "!src/internal/grokbot/**",
34
+ "!src/extensions/cursor-grokbot-agents/**",
33
35
  "!src/internal/review-comments.ts",
34
36
  "!src/internal/shallow-clone.ts",
35
37
  "!src/internal/managed-delivery.ts",
@@ -105,6 +107,18 @@
105
107
  "import": "./dist/channels/deployments/index.js",
106
108
  "default": "./dist/channels/deployments/index.js"
107
109
  },
110
+ "./channels/change-monitors": {
111
+ "anysphere-source": "./src/channels/change-monitors/index.ts",
112
+ "types": "./dist/channels/change-monitors/index.d.ts",
113
+ "import": "./dist/channels/change-monitors/index.js",
114
+ "default": "./dist/channels/change-monitors/index.js"
115
+ },
116
+ "./channels/issues": {
117
+ "anysphere-source": "./src/channels/issues/index.ts",
118
+ "types": "./dist/channels/issues/index.d.ts",
119
+ "import": "./dist/channels/issues/index.js",
120
+ "default": "./dist/channels/issues/index.js"
121
+ },
108
122
  "./skills": {
109
123
  "anysphere-source": "./src/skills.ts",
110
124
  "types": "./dist/skills.d.ts",
@@ -125,6 +139,13 @@
125
139
  "import": "./dist/extensions/cursor-cloud-agents/extension.js",
126
140
  "default": "./dist/extensions/cursor-cloud-agents/extension.js"
127
141
  },
142
+ "./extensions/cursor-grokbot-agents": {
143
+ "anysphere-source": "./src/extensions/cursor-grokbot-agents/extension.ts",
144
+ "bun": "./dist/extensions/cursor-grokbot-agents/extension.js",
145
+ "types": "./dist/extensions/cursor-grokbot-agents/extension.d.ts",
146
+ "import": "./dist/extensions/cursor-grokbot-agents/extension.js",
147
+ "default": "./dist/extensions/cursor-grokbot-agents/extension.js"
148
+ },
128
149
  "./schedules": {
129
150
  "anysphere-source": "./src/schedules.ts",
130
151
  "types": "./dist/schedules.d.ts",
@@ -302,6 +323,7 @@
302
323
  "esbuild": "^0.25.0",
303
324
  "javascript-time-ago": "^2.6.4",
304
325
  "js-yaml": "4.1.0",
326
+ "minimatch": "^10.2.5",
305
327
  "ms": "^2.1.3",
306
328
  "proper-lockfile": "^4.1.2",
307
329
  "slackify-markdown": "^5.0.0",
@@ -317,12 +339,13 @@
317
339
  "@types/js-yaml": "4.0.9",
318
340
  "@types/ms": "^2.1.0",
319
341
  "@types/node": "catalog:",
342
+ "@types/pg": "^8.16.0",
320
343
  "@types/proper-lockfile": "^4.1.4",
321
344
  "@types/react": "^19.0.0",
322
345
  "@types/react-dom": "^19.0.0",
323
346
  "@typescript/native-preview": "7.0.0-dev.20260701.1",
324
347
  "@vitejs/plugin-react": "^5.1.2",
325
- "minimatch": "^10.2.5",
348
+ "pg": "^8.18.0",
326
349
  "pretty-ms": "^9.2.0",
327
350
  "react": "^19.2.1",
328
351
  "react-dom": "^19.2.1",