@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
package/AGENTS.md CHANGED
@@ -139,10 +139,11 @@ export default defineEvalConfig({
139
139
  `init <dir>` scaffolds (skipping existing files), runs `npm install`,
140
140
  offers to install/update package skills into
141
141
  `~/.cursor/skills/agentkit/` (TTY only; always overwrites with the
142
- package copy), runs `login` and waits when unsigned, then prints `cd`
143
- (when needed) and bare `dev`. `--json` still installs but never blocks
142
+ package copy), links `agent-sdk` onto the npm global bin (so bare
143
+ `agent-sdk` works on PATH), runs `login` and waits when unsigned, then
144
+ prints `cd` (when needed) and `agent-sdk dev`. `--json` still installs but never blocks
144
145
  on login or skill install; it prints
145
- `{ ok, directory, created, skipped, installed, installError, next }`.
146
+ `{ ok, directory, created, skipped, installed, installError, cliOnPath, cliLinkError, next }`.
146
147
  - `chat --json --message "..."` talks to a running server and prints a trajectory.
147
148
 
148
149
  ## Agent-to-agent (MCP endpoint + peer MCP connections)
@@ -106,8 +106,8 @@ Usage:
106
106
  ${CLI} stop <slug> [--team <id>] [--json] [--no-wait]
107
107
  ${CLI} rotate-token <slug> [--team <id>]
108
108
  ${CLI} rotate-pod-credential <slug> [--team <id>]
109
- ${CLI} secrets set <slug> NAME[=VALUE]... | list <slug> | unset <slug> NAME
110
- [--team <id>] [--json]
109
+ ${CLI} secrets set <slug> NAME... | list <slug> | unset <slug> NAME
110
+ [--team <id>] [--json] [--from-argv]
111
111
  ${CLI} slack <subcommand> …
112
112
  ${CLI} github <subcommand> …
113
113
 
@@ -227,9 +227,9 @@ Commands:
227
227
  rotate-pod-credential
228
228
  Rotate a deployment's pod credential (prints the masked key);
229
229
  the running pod keeps the old one until the next deploy.
230
- secrets Manage deployment secrets: set (upsert by name; NAMEs without
231
- =VALUE are prompted for with hidden input, or read from piped
232
- stdin), list (names + createdAt; never values), unset.
230
+ secrets Manage deployment secrets: set (names only by default: hidden
231
+ prompt or piped stdin; NAME=VALUE requires --from-argv), list
232
+ (names + createdAt; never values), unset.
233
233
  slack Slack channel pack: create/destroy/icon (Cursor Add to Slack
234
234
  provisioning), init, manifests, doctor (see slack help).
235
235
  github GitHub webhook pack: forward live deliveries, events, doctor
@@ -246,7 +246,9 @@ Agent loop:
246
246
  Options:
247
247
  --version, -V Print the installed version and exit.
248
248
  --dir Project root (defaults to the current directory).
249
- --port Port to listen on (default 3000).
249
+ --port Port to listen on (default 3000). When the default is
250
+ taken, serve tries the next free port and prints a notice.
251
+ An explicit --port fails with a next-port hint instead.
250
252
  --host Host to bind (default 127.0.0.1).
251
253
  --mode serve: "multi" (default, slugged /<dir>/v1/*) or "single"
252
254
  (unslugged /v1/*). Multi also exposes host /v1/health for
@@ -372,6 +374,9 @@ Options:
372
374
  --allow-domain deploy: egress domain the engine pod may reach
373
375
  (repeatable; unioned with hosting.egressDomains from the
374
376
  agent manifest). Repo-backed deploys only.
377
+ --from-argv secrets set: allow NAME=VALUE on argv (leaks into shell
378
+ history and agent-captured terminals). Default is names
379
+ only with a hidden prompt or piped stdin.
375
380
  --org github forward: organization login (org-level hooks).
376
381
  --channel github: select one channel id when several are declared.
377
382
  --secret github forward: webhook signing secret (defaults to
@@ -501,6 +506,7 @@ function main(argv) {
501
506
  all: { type: "boolean", default: false },
502
507
  "cursor-events-repo": { type: "string", multiple: true },
503
508
  "allow-domain": { type: "string", multiple: true },
509
+ "from-argv": { type: "boolean", default: false },
504
510
  strict: { type: "boolean", default: false },
505
511
  junit: { type: "string" },
506
512
  artifacts: { type: "string" },
@@ -967,8 +973,11 @@ function main(argv) {
967
973
  return 1;
968
974
  }
969
975
  const serveDir = serveDirResult;
970
- const port = values.port === undefined ? 3000 : Number.parseInt(values.port, 10);
971
- if (Number.isNaN(port) || port < 0 || port > 65535) {
976
+ const port = values.port === undefined
977
+ ? undefined
978
+ : Number.parseInt(values.port, 10);
979
+ if (port !== undefined &&
980
+ (Number.isNaN(port) || port < 0 || port > 65535)) {
972
981
  process.stderr.write(`invalid --port: ${values.port}\n`);
973
982
  return 1;
974
983
  }
@@ -1096,7 +1105,13 @@ function main(argv) {
1096
1105
  });
1097
1106
  }
1098
1107
  function deployOptionsFromValues(values) {
1099
- return Object.assign(Object.assign(Object.assign({}, (values.team === undefined ? {} : { team: values.team })), { json: values.json === true, noWait: values["no-wait"] === true }), (values["api-key"] === undefined ? {} : { apiKey: values["api-key"] }));
1108
+ return {
1109
+ team: values.team,
1110
+ json: values.json === true,
1111
+ noWait: values["no-wait"] === true,
1112
+ apiKey: values["api-key"],
1113
+ fromArgv: values["from-argv"] === true ? true : undefined,
1114
+ };
1100
1115
  }
1101
1116
  function axFromOptions(partial) {
1102
1117
  return {
@@ -1247,6 +1262,10 @@ function printServeBanner(handle, opts) {
1247
1262
  if (playgroundUrl !== undefined) {
1248
1263
  process.stdout.write(` playground ${c.cyan(playgroundUrl)}\n`);
1249
1264
  }
1265
+ // `/` is only mounted when the playground host home is enabled.
1266
+ if (!opts.noPlayground) {
1267
+ process.stdout.write(` home ${c.cyan(handle.url + "/")}\n`);
1268
+ }
1250
1269
  // Dev is playground-first (Vite proxies the API). Keep API/route detail for
1251
1270
  // plain `serve`, where operators often curl the HTTP surface directly.
1252
1271
  if (!opts.dev) {
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Download and classify Slack file uploads for agent turns.
3
+ *
4
+ * Images become vision inputs (SDK `images`). Documents and videos land under
5
+ * `slack-attachments/` in the session workspace so the model can Read them.
6
+ */
7
+ import type { SlackLog } from "./log.js";
8
+ import type { SlackBotToken, SlackMessageFile } from "./types.js";
9
+ export declare const SLACK_ATTACHMENTS_DIR = "slack-attachments";
10
+ export declare const SLACK_ATTACHMENT_ONLY_PROMPT = "The user shared Slack attachment(s) with no message text. Review the attached files.";
11
+ /** Keep path-safe basename pieces (mirrors cloud-agent sanitizeFilename). */
12
+ export declare function sanitizeSlackFilename(name: string): string;
13
+ export declare function isSupportedImageFormat(mimeType: string): boolean;
14
+ export declare function isSupportedDocumentFormat(args: {
15
+ mimeType: string;
16
+ filename?: string;
17
+ }): boolean;
18
+ export declare function isSupportedVideoFormat(mimeType: string): boolean;
19
+ /** Raw Slack file object (message `files[]` or forwarded share). */
20
+ export interface RawSlackFile {
21
+ id?: unknown;
22
+ mimetype?: unknown;
23
+ filetype?: unknown;
24
+ mode?: unknown;
25
+ name?: unknown;
26
+ title?: unknown;
27
+ size?: unknown;
28
+ url_private_download?: unknown;
29
+ dataBase64?: unknown;
30
+ }
31
+ export type SlackFileClassification = {
32
+ kind: "image";
33
+ mimeType: string;
34
+ } | {
35
+ kind: "video";
36
+ mimeType: string;
37
+ } | {
38
+ kind: "document";
39
+ mimeType: string;
40
+ isTextLike: boolean;
41
+ };
42
+ /**
43
+ * Classify a Slack file as image / document / video. Tolerates empty
44
+ * `mimetype` on snippets (Slack fills it asynchronously).
45
+ */
46
+ export declare function classifySlackFile(file: RawSlackFile): SlackFileClassification | undefined;
47
+ /** Top-level uploads plus files nested in forwarded `is_share` attachments. */
48
+ export declare function collectSlackMessageFiles(message: unknown): RawSlackFile[];
49
+ export declare function parseSlackFileRefs(message: unknown): SlackMessageFile[] | undefined;
50
+ export interface SlackTurnImage {
51
+ data: string;
52
+ mimeType: string;
53
+ }
54
+ /** Relative path → utf8 or base64-blob workspace entry. */
55
+ export type SlackWorkspaceBlob = string | {
56
+ encoding: "base64";
57
+ data: string;
58
+ mimeType?: string;
59
+ };
60
+ export interface PreparedSlackAttachments {
61
+ images: SlackTurnImage[];
62
+ workspaceFiles: Record<string, SlackWorkspaceBlob>;
63
+ /** Prompt markers like `[Image 1: shot.png]`. */
64
+ annotations: string[];
65
+ }
66
+ export interface PrepareSlackAttachmentsOptions {
67
+ botToken?: SlackBotToken;
68
+ files: readonly SlackMessageFile[];
69
+ maxFiles?: number;
70
+ maxFileBytes?: number;
71
+ maxTotalBytes?: number;
72
+ downloadTimeoutMs?: number;
73
+ log?: SlackLog;
74
+ }
75
+ /**
76
+ * Download (or use pre-attached) Slack files and split them into vision
77
+ * images + workspace blobs for the turn.
78
+ */
79
+ export declare function prepareSlackAttachments(options: PrepareSlackAttachmentsOptions): Promise<PreparedSlackAttachments>;
80
+ /** Merge attachment annotations into the user prompt. */
81
+ export declare function appendSlackAttachmentAnnotations(prompt: string, annotations: readonly string[]): string;
82
+ //# sourceMappingURL=attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/attachments.ts"],"names":[],"mappings":"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"}