@cursor/july 0.1.100 → 0.1.102

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 (484) hide show
  1. package/README.md +27 -0
  2. package/dist/bin/agent-serve.js +3 -2
  3. package/dist/channels/deployments/deployments-channel.d.ts +41 -5
  4. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  5. package/dist/channels/deployments/deployments-channel.js +88 -8
  6. package/dist/channels/deployments/types.d.ts +4 -3
  7. package/dist/channels/deployments/types.d.ts.map +1 -1
  8. package/dist/channels/origin/defaults.d.ts +43 -0
  9. package/dist/channels/origin/defaults.d.ts.map +1 -0
  10. package/dist/channels/origin/defaults.js +111 -0
  11. package/dist/channels/origin/index.d.ts +2 -0
  12. package/dist/channels/origin/index.d.ts.map +1 -1
  13. package/dist/channels/origin/index.js +2 -0
  14. package/dist/channels/origin/origin-channel.d.ts +2 -1
  15. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  16. package/dist/channels/origin/origin-channel.js +24 -3
  17. package/dist/channels/origin/state.d.ts +32 -0
  18. package/dist/channels/origin/state.d.ts.map +1 -0
  19. package/dist/channels/origin/state.js +23 -0
  20. package/dist/channels/origin/types.d.ts +23 -1
  21. package/dist/channels/origin/types.d.ts.map +1 -1
  22. package/dist/channels/slack/api.d.ts +1 -1
  23. package/dist/channels/slack/api.d.ts.map +1 -1
  24. package/dist/channels/slack/api.js +5 -2
  25. package/dist/channels/slack/assistant.d.ts +1 -1
  26. package/dist/channels/slack/assistant.d.ts.map +1 -1
  27. package/dist/channels/slack/code-fences.d.ts +17 -0
  28. package/dist/channels/slack/code-fences.d.ts.map +1 -0
  29. package/dist/channels/slack/code-fences.js +168 -0
  30. package/dist/channels/slack/dispatch.d.ts +3 -2
  31. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  32. package/dist/channels/slack/dispatch.js +28 -8
  33. package/dist/channels/slack/inbound.d.ts +8 -0
  34. package/dist/channels/slack/inbound.d.ts.map +1 -1
  35. package/dist/channels/slack/inbound.js +28 -0
  36. package/dist/channels/slack/index.d.ts +1 -0
  37. package/dist/channels/slack/index.d.ts.map +1 -1
  38. package/dist/channels/slack/index.js +1 -0
  39. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  40. package/dist/channels/slack/live-delivery.js +11 -4
  41. package/dist/channels/slack/manifest.d.ts.map +1 -1
  42. package/dist/channels/slack/manifest.js +2 -1
  43. package/dist/connections.d.ts +18 -2
  44. package/dist/connections.d.ts.map +1 -1
  45. package/dist/connections.js +18 -2
  46. package/dist/docs/404.html +2 -2
  47. package/dist/docs/ab.html +4 -4
  48. package/dist/docs/assets/{app.DZ1e0Ycq.js → app.CLA03RCz.js} +1 -1
  49. package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +1 -0
  50. package/dist/docs/assets/chunks/{VPLocalSearchBox.l8omwc6D.js → VPLocalSearchBox.ifxv-cJV.js} +1 -1
  51. package/dist/docs/assets/chunks/{theme.JVcD6gel.js → theme.DWCwM6p-.js} +2 -2
  52. package/dist/docs/assets/concepts.md.rPzW2HZN.js +1 -0
  53. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +9 -0
  54. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.lean.js +1 -0
  55. package/dist/docs/assets/{guides_cloud-runtime.md.CkYbjnAX.js → guides_cloud-runtime.md.BRirbRAN.js} +1 -1
  56. package/dist/docs/assets/index.md.Kiht7ell.js +5 -0
  57. package/dist/docs/assets/{index.md.Bb4k8kUm.lean.js → index.md.Kiht7ell.lean.js} +1 -1
  58. package/dist/docs/assets/{reference_connections.md.BiGoBAk2.js → reference_connections.md.Di6jJAXF.js} +12 -2
  59. package/dist/docs/assets/{reference_connections.md.BiGoBAk2.lean.js → reference_connections.md.Di6jJAXF.lean.js} +1 -1
  60. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.js +56 -0
  61. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +1 -0
  62. package/dist/docs/assets/{reference_http-api.md.BEJx9XVj.js → reference_http-api.md.oySXBO8o.js} +1 -1
  63. package/dist/docs/assets/{reference_project-layout.md.Bv4KOtlB.js → reference_project-layout.md.CA6QP6Lw.js} +2 -2
  64. package/dist/docs/assets/{reference_project-layout.md.Bv4KOtlB.lean.js → reference_project-layout.md.CA6QP6Lw.lean.js} +1 -1
  65. package/dist/docs/assets/{reference_skills.md.BFW9retM.js → reference_skills.md.l2ezAcaN.js} +1 -1
  66. package/dist/docs/assets/{reference_tools.md.CvAHsdSp.js → reference_tools.md.B1up2r9W.js} +1 -1
  67. package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +1 -0
  68. package/dist/docs/assets/{skills_framework-map.md.BTi817yv.lean.js → skills_framework-map.md.DDa4MeEW.lean.js} +1 -1
  69. package/dist/docs/building-with-agents.html +4 -4
  70. package/dist/docs/concepts.html +5 -5
  71. package/dist/docs/concepts.md +3 -3
  72. package/dist/docs/deployment.html +4 -4
  73. package/dist/docs/evals.html +4 -4
  74. package/dist/docs/guides/agent-to-agent.html +4 -4
  75. package/dist/docs/guides/cloud-agents.html +35 -0
  76. package/dist/docs/guides/cloud-agents.md +93 -0
  77. package/dist/docs/guides/cloud-runtime.html +6 -6
  78. package/dist/docs/guides/cloud-runtime.md +2 -0
  79. package/dist/docs/guides/convert-automation.html +4 -4
  80. package/dist/docs/guides/github.html +4 -4
  81. package/dist/docs/guides/human-in-the-loop.html +4 -4
  82. package/dist/docs/guides/mcp-oauth.html +4 -4
  83. package/dist/docs/guides/opentelemetry.html +5 -5
  84. package/dist/docs/guides/slack.html +4 -4
  85. package/dist/docs/guides/webhooks.html +4 -4
  86. package/dist/docs/hashmap.json +1 -1
  87. package/dist/docs/hillclimbing.html +4 -4
  88. package/dist/docs/index.html +6 -6
  89. package/dist/docs/index.md +5 -1
  90. package/dist/docs/llms-full.txt +353 -5
  91. package/dist/docs/llms.txt +2 -0
  92. package/dist/docs/quickstart.html +4 -4
  93. package/dist/docs/reference/agent-config.html +4 -4
  94. package/dist/docs/reference/artifacts.html +4 -4
  95. package/dist/docs/reference/channels.html +5 -5
  96. package/dist/docs/reference/cli.html +4 -4
  97. package/dist/docs/reference/connections.html +16 -6
  98. package/dist/docs/reference/connections.md +31 -0
  99. package/dist/docs/reference/extensions.html +82 -0
  100. package/dist/docs/reference/extensions.md +200 -0
  101. package/dist/docs/reference/hooks.html +4 -4
  102. package/dist/docs/reference/http-api.html +6 -6
  103. package/dist/docs/reference/http-api.md +1 -1
  104. package/dist/docs/reference/instructions.html +4 -4
  105. package/dist/docs/reference/playground.html +4 -4
  106. package/dist/docs/reference/project-layout.html +6 -6
  107. package/dist/docs/reference/project-layout.md +3 -0
  108. package/dist/docs/reference/prompt.html +4 -4
  109. package/dist/docs/reference/schedules.html +4 -4
  110. package/dist/docs/reference/sessions.html +4 -4
  111. package/dist/docs/reference/skills.html +6 -6
  112. package/dist/docs/reference/skills.md +2 -0
  113. package/dist/docs/reference/subagents.html +5 -5
  114. package/dist/docs/reference/tools.html +6 -6
  115. package/dist/docs/reference/tools.md +2 -0
  116. package/dist/docs/scaffolding-agents.html +4 -4
  117. package/dist/docs/skills/ab.html +4 -4
  118. package/dist/docs/skills/create-agent.html +4 -4
  119. package/dist/docs/skills/debug.html +4 -4
  120. package/dist/docs/skills/evals.html +4 -4
  121. package/dist/docs/skills/framework-map.html +5 -5
  122. package/dist/docs/skills/framework-map.md +1 -0
  123. package/dist/docs/skills/github.html +4 -4
  124. package/dist/docs/skills/hillclimb.html +4 -4
  125. package/dist/docs/skills/index.html +4 -4
  126. package/dist/docs/skills/mcp-auth.html +4 -4
  127. package/dist/docs/skills/otel.html +4 -4
  128. package/dist/docs/skills/setup-slack.html +4 -4
  129. package/dist/docs/storage.html +4 -4
  130. package/dist/docs/templates/agentic-owners.html +4 -4
  131. package/dist/docs/templates/agents-md.html +4 -4
  132. package/dist/docs/templates/code-wiki.html +4 -4
  133. package/dist/docs/templates/demo.html +4 -4
  134. package/dist/docs/templates/pr-autofixer.html +4 -4
  135. package/dist/docs/templates/security-help.html +4 -4
  136. package/dist/docs/templates/security-reviewer.html +4 -4
  137. package/dist/docs/templates/triage.html +4 -4
  138. package/dist/docs/troubleshooting.html +4 -4
  139. package/dist/extensions/cursor-cloud-agents/extension.d.ts +57 -0
  140. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -0
  141. package/dist/extensions/cursor-cloud-agents/extension.js +66 -0
  142. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +78 -0
  143. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -0
  144. package/dist/extensions/cursor-cloud-agents/lib/backend.js +286 -0
  145. package/dist/extensions/cursor-cloud-agents/lib/fleet.d.ts +25 -0
  146. package/dist/extensions/cursor-cloud-agents/lib/fleet.d.ts.map +1 -0
  147. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +85 -0
  148. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +5 -0
  149. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -0
  150. package/dist/extensions/cursor-cloud-agents/lib/inputs.js +4 -0
  151. package/dist/extensions/cursor-cloud-agents/lib/repos.d.ts +15 -0
  152. package/dist/extensions/cursor-cloud-agents/lib/repos.d.ts.map +1 -0
  153. package/dist/extensions/cursor-cloud-agents/lib/repos.js +55 -0
  154. package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts +8 -0
  155. package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts.map +1 -0
  156. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +15 -0
  157. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +41 -0
  158. package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts +4 -0
  159. package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -0
  160. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +26 -0
  161. package/dist/extensions/cursor-cloud-agents/tools/dump.d.ts +4 -0
  162. package/dist/extensions/cursor-cloud-agents/tools/dump.d.ts.map +1 -0
  163. package/dist/extensions/cursor-cloud-agents/tools/dump.js +54 -0
  164. package/dist/extensions/cursor-cloud-agents/tools/get.d.ts +4 -0
  165. package/dist/extensions/cursor-cloud-agents/tools/get.d.ts.map +1 -0
  166. package/dist/extensions/cursor-cloud-agents/tools/get.js +25 -0
  167. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts +4 -0
  168. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -0
  169. package/dist/extensions/cursor-cloud-agents/tools/launch.js +59 -0
  170. package/dist/extensions/cursor-cloud-agents/tools/list.d.ts +4 -0
  171. package/dist/extensions/cursor-cloud-agents/tools/list.d.ts.map +1 -0
  172. package/dist/extensions/cursor-cloud-agents/tools/list.js +36 -0
  173. package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts +4 -0
  174. package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts.map +1 -0
  175. package/dist/extensions/cursor-cloud-agents/tools/reply.js +35 -0
  176. package/dist/extensions.d.ts +73 -0
  177. package/dist/extensions.d.ts.map +1 -0
  178. package/dist/extensions.js +112 -0
  179. package/dist/files-backends/cursor-hosted.d.ts +0 -8
  180. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  181. package/dist/files-backends/cursor-hosted.js +1 -11
  182. package/dist/files.d.ts +5 -1
  183. package/dist/files.d.ts.map +1 -1
  184. package/dist/files.js +22 -18
  185. package/dist/index.d.ts +4 -3
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +3 -2
  188. package/dist/internal/advertise-tools.d.ts +4 -1
  189. package/dist/internal/advertise-tools.d.ts.map +1 -1
  190. package/dist/internal/advertise-tools.js +20 -1
  191. package/dist/internal/as-of.d.ts +18 -0
  192. package/dist/internal/as-of.d.ts.map +1 -1
  193. package/dist/internal/as-of.js +131 -0
  194. package/dist/internal/cli-deploy.d.ts.map +1 -1
  195. package/dist/internal/cli-deploy.js +64 -19
  196. package/dist/internal/continuation-identity.d.ts.map +1 -1
  197. package/dist/internal/continuation-identity.js +3 -1
  198. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  199. package/dist/internal/conversation-mirror.js +13 -15
  200. package/dist/internal/cursor/backend-client.d.ts +8 -1
  201. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  202. package/dist/internal/cursor/backend-client.js +25 -9
  203. package/dist/internal/cursor/hosted-deployment-secrets.d.ts +16 -0
  204. package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -0
  205. package/dist/internal/cursor/hosted-deployment-secrets.js +61 -0
  206. package/dist/internal/cursor/hosted-store-secrets.d.ts +11 -0
  207. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
  208. package/dist/internal/cursor/hosted-store-secrets.js +15 -0
  209. package/dist/internal/cursor-deployment-relay.d.ts +15 -1
  210. package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
  211. package/dist/internal/cursor-deployment-relay.js +46 -7
  212. package/dist/internal/deploy-client.d.ts +23 -0
  213. package/dist/internal/deploy-client.d.ts.map +1 -1
  214. package/dist/internal/deploy-client.js +54 -12
  215. package/dist/internal/discovery/ab.d.ts +9 -0
  216. package/dist/internal/discovery/ab.d.ts.map +1 -0
  217. package/dist/internal/discovery/ab.js +101 -0
  218. package/dist/internal/discovery/agent-config.d.ts +35 -0
  219. package/dist/internal/discovery/agent-config.d.ts.map +1 -0
  220. package/dist/internal/discovery/agent-config.js +173 -0
  221. package/dist/internal/discovery/agent.d.ts +11 -0
  222. package/dist/internal/discovery/agent.d.ts.map +1 -0
  223. package/dist/internal/discovery/agent.js +306 -0
  224. package/dist/internal/discovery/channels.d.ts +10 -0
  225. package/dist/internal/discovery/channels.d.ts.map +1 -0
  226. package/dist/internal/discovery/channels.js +97 -0
  227. package/dist/internal/discovery/connections.d.ts +17 -0
  228. package/dist/internal/discovery/connections.d.ts.map +1 -0
  229. package/dist/internal/discovery/connections.js +436 -0
  230. package/dist/internal/discovery/context.d.ts +20 -0
  231. package/dist/internal/discovery/context.d.ts.map +1 -0
  232. package/dist/internal/discovery/context.js +30 -0
  233. package/dist/internal/discovery/cursor-plugin.d.ts +25 -0
  234. package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -0
  235. package/dist/internal/discovery/cursor-plugin.js +570 -0
  236. package/dist/internal/discovery/extensions.d.ts +19 -0
  237. package/dist/internal/discovery/extensions.d.ts.map +1 -0
  238. package/dist/internal/discovery/extensions.js +238 -0
  239. package/dist/internal/discovery/fs.d.ts +15 -0
  240. package/dist/internal/discovery/fs.d.ts.map +1 -0
  241. package/dist/internal/discovery/fs.js +115 -0
  242. package/dist/internal/discovery/hooks.d.ts +7 -0
  243. package/dist/internal/discovery/hooks.d.ts.map +1 -0
  244. package/dist/internal/discovery/hooks.js +48 -0
  245. package/dist/internal/discovery/info.d.ts +6 -0
  246. package/dist/internal/discovery/info.d.ts.map +1 -0
  247. package/dist/internal/discovery/info.js +141 -0
  248. package/dist/internal/discovery/instructions.d.ts +7 -0
  249. package/dist/internal/discovery/instructions.d.ts.map +1 -0
  250. package/dist/internal/discovery/instructions.js +95 -0
  251. package/dist/internal/discovery/modules.d.ts +20 -0
  252. package/dist/internal/discovery/modules.d.ts.map +1 -0
  253. package/dist/internal/discovery/modules.js +101 -0
  254. package/dist/internal/discovery/names.d.ts +12 -0
  255. package/dist/internal/discovery/names.d.ts.map +1 -0
  256. package/dist/internal/discovery/names.js +36 -0
  257. package/dist/internal/discovery/project.d.ts +53 -0
  258. package/dist/internal/discovery/project.d.ts.map +1 -0
  259. package/dist/internal/discovery/project.js +239 -0
  260. package/dist/internal/discovery/runtime.d.ts +34 -0
  261. package/dist/internal/discovery/runtime.d.ts.map +1 -0
  262. package/dist/internal/discovery/runtime.js +98 -0
  263. package/dist/internal/discovery/schedules.d.ts +7 -0
  264. package/dist/internal/discovery/schedules.d.ts.map +1 -0
  265. package/dist/internal/discovery/schedules.js +97 -0
  266. package/dist/internal/discovery/seed-files.d.ts +7 -0
  267. package/dist/internal/discovery/seed-files.d.ts.map +1 -0
  268. package/dist/internal/discovery/seed-files.js +41 -0
  269. package/dist/internal/discovery/services.d.ts +17 -0
  270. package/dist/internal/discovery/services.d.ts.map +1 -0
  271. package/dist/internal/discovery/services.js +104 -0
  272. package/dist/internal/discovery/skills.d.ts +16 -0
  273. package/dist/internal/discovery/skills.d.ts.map +1 -0
  274. package/dist/internal/discovery/skills.js +151 -0
  275. package/dist/internal/discovery/subagent.d.ts +13 -0
  276. package/dist/internal/discovery/subagent.d.ts.map +1 -0
  277. package/dist/internal/discovery/subagent.js +19 -0
  278. package/dist/internal/discovery/tools.d.ts +18 -0
  279. package/dist/internal/discovery/tools.d.ts.map +1 -0
  280. package/dist/internal/discovery/tools.js +159 -0
  281. package/dist/internal/discovery.d.ts +8 -62
  282. package/dist/internal/discovery.d.ts.map +1 -1
  283. package/dist/internal/discovery.js +8 -2210
  284. package/dist/internal/distribution.d.ts.map +1 -1
  285. package/dist/internal/distribution.js +5 -0
  286. package/dist/internal/framework-file-storage.d.ts +3 -3
  287. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  288. package/dist/internal/framework-file-storage.js +38 -9
  289. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  290. package/dist/internal/framework-storage-selection.js +8 -7
  291. package/dist/internal/frontmatter.d.ts +11 -3
  292. package/dist/internal/frontmatter.d.ts.map +1 -1
  293. package/dist/internal/frontmatter.js +29 -3
  294. package/dist/internal/hosted-delivery.d.ts +3 -1
  295. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  296. package/dist/internal/hosted-delivery.js +19 -32
  297. package/dist/internal/hosted-execution-diag.d.ts +5 -0
  298. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  299. package/dist/internal/hosted-execution-diag.js +5 -0
  300. package/dist/internal/hosted-execution-flush.d.ts +46 -0
  301. package/dist/internal/hosted-execution-flush.d.ts.map +1 -0
  302. package/dist/internal/hosted-execution-flush.js +81 -0
  303. package/dist/internal/mcp-endpoint.js +1 -0
  304. package/dist/internal/mcp-host.d.ts +2 -1
  305. package/dist/internal/mcp-host.d.ts.map +1 -1
  306. package/dist/internal/mcp-host.js +66 -29
  307. package/dist/internal/otel/collector.d.ts +13 -0
  308. package/dist/internal/otel/collector.d.ts.map +1 -1
  309. package/dist/internal/otel/collector.js +84 -17
  310. package/dist/internal/otel/http.d.ts.map +1 -1
  311. package/dist/internal/otel/http.js +2 -10
  312. package/dist/internal/otel/mcp.d.ts +16 -0
  313. package/dist/internal/otel/mcp.d.ts.map +1 -0
  314. package/dist/internal/otel/mcp.js +68 -0
  315. package/dist/internal/otel/propagation.d.ts +6 -0
  316. package/dist/internal/otel/propagation.d.ts.map +1 -0
  317. package/dist/internal/otel/propagation.js +14 -0
  318. package/dist/internal/otel/runtime.d.ts.map +1 -1
  319. package/dist/internal/otel/runtime.js +2 -0
  320. package/dist/internal/review-comments.d.ts +1 -1
  321. package/dist/internal/review-comments.d.ts.map +1 -1
  322. package/dist/internal/review-comments.js +4 -4
  323. package/dist/internal/server.d.ts +3 -0
  324. package/dist/internal/server.d.ts.map +1 -1
  325. package/dist/internal/server.js +79 -104
  326. package/dist/internal/session-engine.d.ts +14 -7
  327. package/dist/internal/session-engine.d.ts.map +1 -1
  328. package/dist/internal/session-engine.js +113 -66
  329. package/dist/internal/session-run-log.d.ts +3 -1
  330. package/dist/internal/session-run-log.d.ts.map +1 -1
  331. package/dist/internal/session-run-log.js +14 -14
  332. package/dist/internal/start-log-store.d.ts +60 -0
  333. package/dist/internal/start-log-store.d.ts.map +1 -0
  334. package/dist/internal/start-log-store.js +149 -0
  335. package/dist/internal/storage-coordinator.d.ts +4 -1
  336. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  337. package/dist/internal/storage-coordinator.js +15 -13
  338. package/dist/internal/tool-catalog.d.ts.map +1 -1
  339. package/dist/internal/tool-catalog.js +9 -6
  340. package/dist/internal/tool-policy.d.ts +8 -0
  341. package/dist/internal/tool-policy.d.ts.map +1 -1
  342. package/dist/internal/tool-policy.js +19 -7
  343. package/dist/internal/turn-cost.d.ts +14 -0
  344. package/dist/internal/turn-cost.d.ts.map +1 -1
  345. package/dist/internal/turn-cost.js +41 -9
  346. package/dist/internal/v2-hosting.d.ts +22 -0
  347. package/dist/internal/v2-hosting.d.ts.map +1 -0
  348. package/dist/internal/v2-hosting.js +23 -0
  349. package/dist/otel.d.ts +16 -0
  350. package/dist/otel.d.ts.map +1 -1
  351. package/dist/otel.js +26 -0
  352. package/dist/playground/assets/index-B6C9S9nG.css +1 -0
  353. package/dist/playground/assets/{index-DVs98vPL.js → index-ZqNoT8Ie.js} +45 -45
  354. package/dist/playground/index.html +2 -2
  355. package/dist/storage-protocol.d.ts +47 -22
  356. package/dist/storage-protocol.d.ts.map +1 -1
  357. package/dist/storage-protocol.js +90 -54
  358. package/dist/storage.d.ts +2 -2
  359. package/dist/storage.d.ts.map +1 -1
  360. package/dist/storage.js +1 -1
  361. package/dist/tools.d.ts +9 -0
  362. package/dist/tools.d.ts.map +1 -1
  363. package/dist/tools.js +9 -0
  364. package/dist/types.d.ts +154 -6
  365. package/dist/types.d.ts.map +1 -1
  366. package/dist/types.js +29 -1
  367. package/docs/README.md +5 -1
  368. package/docs/concepts.md +3 -3
  369. package/docs/guides/cloud-agents.md +98 -0
  370. package/docs/guides/cloud-runtime.md +2 -0
  371. package/docs/reference/connections.md +31 -0
  372. package/docs/reference/extensions.md +205 -0
  373. package/docs/reference/http-api.md +1 -1
  374. package/docs/reference/project-layout.md +3 -0
  375. package/docs/reference/skills.md +2 -0
  376. package/docs/reference/tools.md +2 -0
  377. package/package.json +18 -4
  378. package/skills/framework-map/SKILL.md +1 -0
  379. package/src/bin/agent-serve.ts +11 -2
  380. package/src/channels/deployments/deployments-channel.ts +117 -8
  381. package/src/channels/deployments/types.ts +4 -3
  382. package/src/channels/origin/defaults.ts +143 -0
  383. package/src/channels/origin/index.ts +2 -0
  384. package/src/channels/origin/origin-channel.ts +37 -1
  385. package/src/channels/origin/state.ts +54 -0
  386. package/src/channels/origin/types.ts +24 -0
  387. package/src/channels/slack/api.ts +6 -3
  388. package/src/channels/slack/assistant.ts +1 -1
  389. package/src/channels/slack/code-fences.ts +183 -0
  390. package/src/channels/slack/dispatch.ts +27 -2
  391. package/src/channels/slack/inbound.ts +37 -0
  392. package/src/channels/slack/index.ts +1 -0
  393. package/src/channels/slack/live-delivery.ts +16 -13
  394. package/src/channels/slack/manifest.ts +2 -1
  395. package/src/connections.ts +18 -1
  396. package/src/extensions/cursor-cloud-agents/extension.ts +120 -0
  397. package/src/extensions/cursor-cloud-agents/lib/backend.ts +395 -0
  398. package/src/extensions/cursor-cloud-agents/lib/fleet.ts +109 -0
  399. package/src/extensions/cursor-cloud-agents/lib/inputs.ts +5 -0
  400. package/src/extensions/cursor-cloud-agents/lib/repos.ts +81 -0
  401. package/src/extensions/cursor-cloud-agents/lib/transcript.ts +23 -0
  402. package/src/extensions/cursor-cloud-agents/skills/handoff.md +41 -0
  403. package/src/extensions/cursor-cloud-agents/tools/cancel.ts +19 -0
  404. package/src/extensions/cursor-cloud-agents/tools/dump.ts +51 -0
  405. package/src/extensions/cursor-cloud-agents/tools/get.ts +18 -0
  406. package/src/extensions/cursor-cloud-agents/tools/launch.ts +64 -0
  407. package/src/extensions/cursor-cloud-agents/tools/list.ts +31 -0
  408. package/src/extensions/cursor-cloud-agents/tools/reply.ts +34 -0
  409. package/src/extensions.ts +141 -0
  410. package/src/files-backends/cursor-hosted.ts +1 -17
  411. package/src/files.ts +43 -34
  412. package/src/index.ts +11 -0
  413. package/src/internal/advertise-tools.ts +37 -12
  414. package/src/internal/as-of.ts +163 -0
  415. package/src/internal/cli-deploy.ts +86 -23
  416. package/src/internal/continuation-identity.ts +3 -1
  417. package/src/internal/conversation-mirror.ts +23 -18
  418. package/src/internal/cursor/backend-client.ts +32 -10
  419. package/src/internal/cursor/hosted-deployment-secrets.ts +72 -0
  420. package/src/internal/cursor/hosted-store-secrets.ts +27 -0
  421. package/src/internal/cursor-deployment-relay.ts +65 -8
  422. package/src/internal/deploy-client.ts +73 -18
  423. package/src/internal/discovery/ab.ts +111 -0
  424. package/src/internal/discovery/agent-config.ts +222 -0
  425. package/src/internal/discovery/agent.ts +360 -0
  426. package/src/internal/discovery/channels.ts +103 -0
  427. package/src/internal/discovery/connections.ts +540 -0
  428. package/src/internal/discovery/context.ts +46 -0
  429. package/src/internal/discovery/cursor-plugin.ts +708 -0
  430. package/src/internal/discovery/extensions.ts +348 -0
  431. package/src/internal/discovery/fs.ts +108 -0
  432. package/src/internal/discovery/hooks.ts +45 -0
  433. package/src/internal/discovery/info.ts +179 -0
  434. package/src/internal/discovery/instructions.ts +113 -0
  435. package/src/internal/discovery/modules.ts +107 -0
  436. package/src/internal/discovery/names.ts +44 -0
  437. package/src/internal/discovery/project.ts +270 -0
  438. package/src/internal/discovery/runtime.ts +159 -0
  439. package/src/internal/discovery/schedules.ts +94 -0
  440. package/src/internal/discovery/seed-files.ts +37 -0
  441. package/src/internal/discovery/services.ts +124 -0
  442. package/src/internal/discovery/skills.ts +176 -0
  443. package/src/internal/discovery/subagent.ts +29 -0
  444. package/src/internal/discovery/tools.ts +182 -0
  445. package/src/internal/discovery.ts +20 -2724
  446. package/src/internal/distribution.ts +5 -0
  447. package/src/internal/framework-file-storage.ts +43 -9
  448. package/src/internal/framework-storage-selection.ts +9 -9
  449. package/src/internal/frontmatter.ts +36 -3
  450. package/src/internal/hosted-delivery.ts +38 -63
  451. package/src/internal/hosted-execution-diag.ts +6 -0
  452. package/src/internal/hosted-execution-flush.ts +142 -0
  453. package/src/internal/mcp-endpoint.ts +1 -0
  454. package/src/internal/mcp-host.ts +116 -37
  455. package/src/internal/otel/collector.ts +125 -25
  456. package/src/internal/otel/http.ts +2 -12
  457. package/src/internal/otel/mcp.ts +69 -0
  458. package/src/internal/otel/propagation.ts +17 -0
  459. package/src/internal/otel/runtime.ts +2 -0
  460. package/src/internal/review-comments.ts +5 -2
  461. package/src/internal/server.ts +81 -100
  462. package/src/internal/session-engine.ts +152 -39
  463. package/src/internal/session-run-log.ts +18 -16
  464. package/src/internal/start-log-store.ts +174 -0
  465. package/src/internal/storage-coordinator.ts +19 -16
  466. package/src/internal/tool-catalog.ts +9 -6
  467. package/src/internal/tool-policy.ts +39 -9
  468. package/src/internal/turn-cost.ts +47 -4
  469. package/src/internal/v2-hosting.ts +38 -0
  470. package/src/otel.ts +38 -0
  471. package/src/storage-protocol.ts +126 -79
  472. package/src/storage.ts +5 -0
  473. package/src/tools.ts +18 -0
  474. package/src/types.ts +213 -14
  475. package/dist/docs/assets/chunks/@localSearchIndexroot.j70vvPL4.js +0 -1
  476. package/dist/docs/assets/concepts.md.lwAgBIMI.js +0 -1
  477. package/dist/docs/assets/index.md.Bb4k8kUm.js +0 -5
  478. package/dist/docs/assets/skills_framework-map.md.BTi817yv.js +0 -1
  479. package/dist/playground/assets/index-BszoQDc6.css +0 -1
  480. /package/dist/docs/assets/{concepts.md.lwAgBIMI.lean.js → concepts.md.rPzW2HZN.lean.js} +0 -0
  481. /package/dist/docs/assets/{guides_cloud-runtime.md.CkYbjnAX.lean.js → guides_cloud-runtime.md.BRirbRAN.lean.js} +0 -0
  482. /package/dist/docs/assets/{reference_http-api.md.BEJx9XVj.lean.js → reference_http-api.md.oySXBO8o.lean.js} +0 -0
  483. /package/dist/docs/assets/{reference_skills.md.BFW9retM.lean.js → reference_skills.md.l2ezAcaN.lean.js} +0 -0
  484. /package/dist/docs/assets/{reference_tools.md.CvAHsdSp.lean.js → reference_tools.md.B1up2r9W.lean.js} +0 -0
@@ -0,0 +1,238 @@
1
+ /**
2
+ * `agent/extensions/<ns>.ts` | `agent/extensions/<ns>/extension.ts`: agent-shaped trees and Cursor plugins mounted under a namespace.
3
+ */
4
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
+ return new (P || (P = Promise))(function (resolve, reject) {
7
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
11
+ });
12
+ };
13
+ import { join, resolve } from "node:path";
14
+ import { getDefinitionKind } from "../brand.js";
15
+ import { compileConnection } from "./connections.js";
16
+ import { displayPath } from "./context.js";
17
+ import { readCursorPlugin } from "./cursor-plugin.js";
18
+ import { findModuleFile, isDirectory, isFile, isModuleFile, moduleStem, sortedEntries, } from "./fs.js";
19
+ import { helperCall, importDefault, moduleEntries } from "./modules.js";
20
+ import { validateName } from "./names.js";
21
+ import { loadSkills } from "./skills.js";
22
+ import { subagent } from "./subagent.js";
23
+ import { compileTool, loadTools } from "./tools.js";
24
+ /**
25
+ * Mount every extension under `agent/extensions/` and append what it
26
+ * contributes to the authored lists as `<ns>__<name>`, stamped with
27
+ * `extension`. The namespace is the mount's filename stem or directory name.
28
+ */
29
+ export function appendExtensions(ctx, extensionsDir, into) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ if (!(yield isDirectory(extensionsDir))) {
32
+ return [];
33
+ }
34
+ const extensions = [];
35
+ for (const entry of yield sortedEntries(extensionsDir)) {
36
+ const path = join(extensionsDir, entry.name);
37
+ const site = yield resolveMountSite(ctx, path, entry);
38
+ if (site === undefined) {
39
+ continue;
40
+ }
41
+ if (extensions.some((extension) => extension.name === site.ns)) {
42
+ ctx.diagnostics.push({
43
+ severity: "error",
44
+ path: displayPath(ctx, path),
45
+ message: `Extension "${site.ns}" is mounted twice (as a file and as a directory).`,
46
+ });
47
+ continue;
48
+ }
49
+ const mount = yield importDefault(ctx, site.mountPath, "extension");
50
+ if (mount === undefined) {
51
+ continue;
52
+ }
53
+ extensions.push(yield mountExtension(ctx, site, mount, into));
54
+ }
55
+ return extensions;
56
+ });
57
+ }
58
+ function resolveMountSite(ctx, path, entry) {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ if (entry.isDirectory()) {
61
+ if (!validateName(ctx, "extension", entry.name, path)) {
62
+ return undefined;
63
+ }
64
+ const mountPath = yield findModuleFile(path, "extension");
65
+ if (mountPath === undefined) {
66
+ ctx.diagnostics.push({
67
+ severity: "error",
68
+ path: displayPath(ctx, path),
69
+ message: "A directory mount needs an extension.ts default-exporting the mount (`export default ci({ ... })`).",
70
+ });
71
+ return undefined;
72
+ }
73
+ return { ns: entry.name, mountPath, overlayDir: path };
74
+ }
75
+ if (!entry.isFile() || !isModuleFile(entry.name)) {
76
+ return undefined;
77
+ }
78
+ const ns = moduleStem(entry.name);
79
+ return validateName(ctx, "extension", ns, path)
80
+ ? { ns, mountPath: path }
81
+ : undefined;
82
+ });
83
+ }
84
+ /**
85
+ * Read the extension's tree, lay the mount's overlay on top (a same-named
86
+ * file replaces, `disableTool()` removes), then namespace what is left.
87
+ */
88
+ function mountExtension(ctx, site, mount, into) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ var _a;
91
+ const mounted = {
92
+ name: site.ns,
93
+ description: mount.extension.description,
94
+ tools: [],
95
+ skills: [],
96
+ connections: [],
97
+ subagents: [],
98
+ };
99
+ const root = resolve(ctx.rootDir, mount.extension.root);
100
+ if (!(yield isDirectory(root))) {
101
+ const hint = "layout" in mount.extension
102
+ ? "Point `path` at the plugin directory."
103
+ : "Pass `import.meta.dirname` from extension.ts.";
104
+ ctx.diagnostics.push({
105
+ severity: "error",
106
+ path: displayPath(ctx, site.mountPath),
107
+ message: `Extension "${site.ns}" declares root ${root}, which is not a directory. ${hint}`,
108
+ });
109
+ return mounted;
110
+ }
111
+ // The connection overlay is read first so the tree can leave overlaid
112
+ // servers uncompiled: a plugin server you replace or drop needs no values.
113
+ const connectionOverlay = site.overlayDir === undefined
114
+ ? []
115
+ : yield moduleEntries(ctx, join(site.overlayDir, "mcp-connections"), "connection");
116
+ const tree = yield readExtensionTree(ctx, site, mount, root, new Set(connectionOverlay.map((entry) => entry.name)));
117
+ if (tree === undefined) {
118
+ return mounted;
119
+ }
120
+ mounted.description = (_a = mount.extension.description) !== null && _a !== void 0 ? _a : tree.description;
121
+ const tools = byName(tree.tools);
122
+ const skills = byName(tree.skills);
123
+ const connections = byName(tree.connections);
124
+ if (site.overlayDir !== undefined) {
125
+ yield overlaySlot(ctx, site, tools, yield moduleEntries(ctx, join(site.overlayDir, "tools"), "tool"), {
126
+ kind: "tool",
127
+ declared: new Set(tools.keys()),
128
+ compile: (ctx, path, name, definition) => compileTool(ctx, path, name, definition),
129
+ });
130
+ yield overlaySlot(ctx, site, connections, connectionOverlay, {
131
+ kind: "connection",
132
+ declared: new Set([...connections.keys(), ...tree.overlaidServers]),
133
+ compile: (ctx, path, name, definition) => compileConnection(ctx, path, name, definition, "model"),
134
+ });
135
+ for (const skill of yield loadSkills(ctx, join(site.overlayDir, "skills"))) {
136
+ skills.set(skill.name, skill);
137
+ }
138
+ }
139
+ for (const [name, tool] of tools) {
140
+ const composed = `${site.ns}__${name}`;
141
+ into.tools.push(Object.assign(Object.assign({}, tool), { name: composed, extension: site.ns }));
142
+ mounted.tools.push(composed);
143
+ }
144
+ for (const [name, skill] of skills) {
145
+ const composed = `${site.ns}__${name}`;
146
+ into.skills.push(Object.assign(Object.assign({}, skill), { name: composed, extension: site.ns }));
147
+ mounted.skills.push(composed);
148
+ }
149
+ for (const [name, connection] of connections) {
150
+ const composed = `${site.ns}__${name}`;
151
+ into.connections.push(Object.assign(Object.assign({}, connection), { name: composed }));
152
+ mounted.connections.push(composed);
153
+ }
154
+ for (const agent of tree.agents) {
155
+ const composed = `${site.ns}__${agent.name}`;
156
+ into.subagents.push(subagent(composed, agent));
157
+ mounted.subagents.push(composed);
158
+ }
159
+ return mounted;
160
+ });
161
+ }
162
+ function readExtensionTree(ctx, site, mount, root, overlaidServers) {
163
+ return __awaiter(this, void 0, void 0, function* () {
164
+ if ("layout" in mount.extension) {
165
+ const plugin = yield readCursorPlugin(ctx, root, site.mountPath, mount.extension.variables, overlaidServers);
166
+ return plugin === undefined ? undefined : Object.assign(Object.assign({}, plugin), { tools: [] });
167
+ }
168
+ yield warnUnsupportedExtensionSlots(ctx, root);
169
+ return {
170
+ tools: yield loadTools(ctx, join(root, "tools")),
171
+ skills: yield loadSkills(ctx, join(root, "skills")),
172
+ connections: [],
173
+ overlaidServers: [],
174
+ agents: [],
175
+ };
176
+ });
177
+ }
178
+ function byName(items) {
179
+ return new Map(items.map((item) => [item.name, item]));
180
+ }
181
+ /**
182
+ * Lay a directory mount's slot over the extension's contributions: a
183
+ * same-named file replaces, a disable marker removes, a new name adds.
184
+ */
185
+ function overlaySlot(ctx, site, contributed, entries, slot) {
186
+ return __awaiter(this, void 0, void 0, function* () {
187
+ const disabledKind = `disabled-${slot.kind}`;
188
+ for (const { name, path } of entries) {
189
+ const definition = yield importDefault(ctx, path, [
190
+ slot.kind,
191
+ disabledKind,
192
+ ]);
193
+ if (definition === undefined) {
194
+ continue;
195
+ }
196
+ if (getDefinitionKind(definition) === disabledKind) {
197
+ contributed.delete(name);
198
+ if (!slot.declared.has(name)) {
199
+ ctx.diagnostics.push({
200
+ severity: "error",
201
+ path: displayPath(ctx, path),
202
+ message: `${helperCall(disabledKind)} targets "${name}", which extension "${site.ns}" does not contribute.`,
203
+ });
204
+ }
205
+ continue;
206
+ }
207
+ const item = yield slot.compile(ctx, path, name, definition);
208
+ if (item !== undefined) {
209
+ contributed.set(name, item);
210
+ }
211
+ }
212
+ });
213
+ }
214
+ /** Slots an agent has that an extension tree may not contribute (yet). */
215
+ function warnUnsupportedExtensionSlots(ctx, root) {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ const unsupported = [
218
+ ["instructions.md", "instructions"],
219
+ ["connections", "connections"],
220
+ ["mcp-connections", "MCP connections"],
221
+ ["hooks", "hooks"],
222
+ ["subagents", "subagents"],
223
+ ["channels", "channels"],
224
+ ["schedules", "schedules"],
225
+ ["extensions", "nested extensions"],
226
+ ];
227
+ for (const [slot, label] of unsupported) {
228
+ const path = join(root, slot);
229
+ if ((yield isDirectory(path)) || (yield isFile(path))) {
230
+ ctx.diagnostics.push({
231
+ severity: "warning",
232
+ path: displayPath(ctx, path),
233
+ message: `Extension ${label} are not supported yet; only tools/ and skills/ are mounted. Ignoring.`,
234
+ });
235
+ }
236
+ }
237
+ });
238
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Filesystem primitives discovery walks with: module-file detection, directory listing, and project-root markers.
3
+ */
4
+ import type { Dirent } from "node:fs";
5
+ export declare function findModuleFile(dir: string, stem: string): Promise<string | undefined>;
6
+ export declare function isModuleFile(fileName: string): boolean;
7
+ export declare function moduleStem(fileName: string): string;
8
+ export declare function sortedEntries(dir: string): Promise<Dirent[]>;
9
+ export declare function walkFiles(dir: string): Promise<string[]>;
10
+ export declare function isDirectory(path: string): Promise<boolean>;
11
+ export declare function isFile(path: string): Promise<boolean>;
12
+ export declare function toPosix(path: string): string;
13
+ export declare function hasFlatLayoutMarkers(rootDir: string): Promise<boolean>;
14
+ export declare function readPackageName(rootDir: string): Promise<string | undefined>;
15
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/fs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMtC,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAYtD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGlE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAc9D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMhE;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAM3D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK5E;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Filesystem primitives discovery walks with: module-file detection, directory listing, and project-root markers.
3
+ */
4
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
+ return new (P || (P = Promise))(function (resolve, reject) {
7
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
11
+ });
12
+ };
13
+ import { readdir, readFile, stat } from "node:fs/promises";
14
+ import { extname, join } from "node:path";
15
+ const MODULE_EXTENSIONS = new Set([".ts", ".mts", ".js", ".mjs"]);
16
+ export function findModuleFile(dir, stem) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ for (const extension of [".ts", ".mts", ".js", ".mjs"]) {
19
+ const candidate = join(dir, `${stem}${extension}`);
20
+ if (yield isFile(candidate)) {
21
+ return candidate;
22
+ }
23
+ }
24
+ return undefined;
25
+ });
26
+ }
27
+ export function isModuleFile(fileName) {
28
+ if (fileName.endsWith(".d.ts") || fileName.startsWith(".")) {
29
+ return false;
30
+ }
31
+ if (!MODULE_EXTENSIONS.has(extname(fileName))) {
32
+ return false;
33
+ }
34
+ // Colocated unit tests (Vitest/Jest convention) are not definitions.
35
+ // Without this, `channels/slack.test.ts` is scanned as a channel named
36
+ // "slack.test", fails NAME_PATTERN, and the whole agent refuses to serve.
37
+ const stem = moduleStem(fileName);
38
+ return !stem.endsWith(".test") && !stem.endsWith(".spec");
39
+ }
40
+ export function moduleStem(fileName) {
41
+ return fileName.slice(0, -extname(fileName).length);
42
+ }
43
+ export function sortedEntries(dir) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ const entries = yield readdir(dir, { withFileTypes: true });
46
+ return entries.sort((a, b) => a.name.localeCompare(b.name));
47
+ });
48
+ }
49
+ export function walkFiles(dir) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ const files = [];
52
+ for (const entry of yield sortedEntries(dir)) {
53
+ if (entry.name.startsWith(".")) {
54
+ continue;
55
+ }
56
+ const entryPath = join(dir, entry.name);
57
+ if (entry.isDirectory()) {
58
+ files.push(...(yield walkFiles(entryPath)));
59
+ }
60
+ else if (entry.isFile()) {
61
+ files.push(entryPath);
62
+ }
63
+ }
64
+ return files;
65
+ });
66
+ }
67
+ export function isDirectory(path) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ try {
70
+ return (yield stat(path)).isDirectory();
71
+ }
72
+ catch (_a) {
73
+ return false;
74
+ }
75
+ });
76
+ }
77
+ export function isFile(path) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ try {
80
+ return (yield stat(path)).isFile();
81
+ }
82
+ catch (_a) {
83
+ return false;
84
+ }
85
+ });
86
+ }
87
+ export function toPosix(path) {
88
+ return path.split("\\").join("/");
89
+ }
90
+ export function hasFlatLayoutMarkers(rootDir) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ if (yield isFile(join(rootDir, "instructions.md"))) {
93
+ return true;
94
+ }
95
+ return (yield findModuleFile(rootDir, "agent")) !== undefined;
96
+ });
97
+ }
98
+ export function readPackageName(rootDir) {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ const packageJsonPath = join(rootDir, "package.json");
101
+ if (!(yield isFile(packageJsonPath))) {
102
+ return undefined;
103
+ }
104
+ try {
105
+ const parsed = JSON.parse(yield readFile(packageJsonPath, "utf8"));
106
+ if (typeof parsed.name === "string" && parsed.name !== "") {
107
+ return parsed.name;
108
+ }
109
+ }
110
+ catch (_a) {
111
+ // Malformed package.json falls back to the directory name.
112
+ }
113
+ return undefined;
114
+ });
115
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `agent/hooks/*.ts`: observe-only event subscribers.
3
+ */
4
+ import type { DiscoveredHook } from "../../types.js";
5
+ import { type DiscoveryContext } from "./context.js";
6
+ export declare function loadHooks(ctx: DiscoveryContext, hooksDir: string): Promise<DiscoveredHook[]>;
7
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/hooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,cAAc,CAAC;AAIlE,wBAAsB,SAAS,CAC7B,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CA+B3B"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * `agent/hooks/*.ts`: observe-only event subscribers.
3
+ */
4
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
+ return new (P || (P = Promise))(function (resolve, reject) {
7
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
11
+ });
12
+ };
13
+ import { basename, extname, relative } from "node:path";
14
+ import { displayPath } from "./context.js";
15
+ import { isDirectory, isModuleFile, toPosix, walkFiles } from "./fs.js";
16
+ import { importDefault } from "./modules.js";
17
+ export function loadHooks(ctx, hooksDir) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ if (!(yield isDirectory(hooksDir))) {
20
+ return [];
21
+ }
22
+ const hooks = [];
23
+ for (const filePath of yield walkFiles(hooksDir)) {
24
+ if (!isModuleFile(basename(filePath))) {
25
+ continue;
26
+ }
27
+ const rel = toPosix(relative(hooksDir, filePath));
28
+ const name = rel.slice(0, -extname(rel).length);
29
+ const definition = yield importDefault(ctx, filePath, "hook");
30
+ if (definition === undefined) {
31
+ continue;
32
+ }
33
+ const hook = definition;
34
+ if (typeof hook.events !== "object" ||
35
+ hook.events === null ||
36
+ Object.keys(hook.events).length === 0) {
37
+ ctx.diagnostics.push({
38
+ severity: "warning",
39
+ path: displayPath(ctx, filePath),
40
+ message: "Hook declares no event handlers.",
41
+ });
42
+ continue;
43
+ }
44
+ hooks.push({ name, definition: hook });
45
+ }
46
+ return hooks;
47
+ });
48
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The `info` / `GET /v1/info` projection of an {@link AgentProject}.
3
+ */
4
+ import { type AgentProject, type AgentProjectInfo } from "../../types.js";
5
+ export declare function projectInfo(project: AgentProject): AgentProjectInfo;
6
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAKxB,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAmKnE"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * The `info` / `GET /v1/info` projection of an {@link AgentProject}.
3
+ */
4
+ import { resolveABMaxPlaygroundSessions } from "../../ab.js";
5
+ import { resolveArtifactsMax } from "../../artifacts.js";
6
+ import { toPublicCloudInfo, } from "../../types.js";
7
+ import { toolInputJsonSchema } from "../json-schema.js";
8
+ import { MCP_ENDPOINT_PATH, mcpEndpointToolNames } from "../mcp-endpoint.js";
9
+ import { connectionTransportLabel } from "./connections.js";
10
+ export function projectInfo(project) {
11
+ var _a, _b, _c, _d;
12
+ var _e, _f;
13
+ const agent = project.agent;
14
+ const httpRoutes = [
15
+ { method: "POST", path: "/v1/session", url: "/v1/session" },
16
+ {
17
+ method: "POST",
18
+ path: "/v1/session/:sessionId",
19
+ url: "/v1/session/:sessionId",
20
+ },
21
+ {
22
+ method: "POST",
23
+ path: "/v1/session/:sessionId/stop",
24
+ url: "/v1/session/:sessionId/stop",
25
+ },
26
+ {
27
+ method: "GET",
28
+ path: "/v1/session/:sessionId/stream",
29
+ url: "/v1/session/:sessionId/stream",
30
+ },
31
+ {
32
+ method: "GET",
33
+ path: "/v1/session/:sessionId/approvals",
34
+ url: "/v1/session/:sessionId/approvals",
35
+ },
36
+ {
37
+ method: "POST",
38
+ path: "/v1/session/:sessionId/approvals/:callId",
39
+ url: "/v1/session/:sessionId/approvals/:callId",
40
+ },
41
+ ];
42
+ return Object.assign(Object.assign({ name: project.name, description: agent.description, model: agent.model, runtime: agent.runtime, cloud: agent.cloud === undefined ? undefined : toPublicCloudInfo(agent.cloud), local: agent.local, hosting: agent.hosting, concurrency: agent.concurrency, mcp: { path: MCP_ENDPOINT_PATH, tools: mcpEndpointToolNames(project) }, instructions: agent.instructions === undefined
43
+ ? undefined
44
+ : {
45
+ chars: agent.instructions.length,
46
+ preview: agent.instructions.length > 280
47
+ ? `${agent.instructions.slice(0, 277)}...`
48
+ : agent.instructions,
49
+ }, tools: agent.tools.map((tool) => ({
50
+ name: tool.name,
51
+ description: tool.description,
52
+ execution: tool.execution,
53
+ needsApproval: tool.needsApproval,
54
+ effect: tool.effect,
55
+ inputSchema: tool.inputSchema,
56
+ })), skills: agent.skills.map((skill) => ({
57
+ name: skill.name,
58
+ description: skill.description,
59
+ })), extensions: (_e = agent.extensions) !== null && _e !== void 0 ? _e : [], connections: agent.connections.map((connection) => { var _a; return ({
60
+ name: connection.name,
61
+ transport: connectionTransportLabel(connection.transport),
62
+ advertiseTools: connection.advertiseTools,
63
+ effects: connection.effects,
64
+ tools: connection.tools,
65
+ disallowedTools: connection.disallowedTools,
66
+ cursorAccountServers: "cursorAccount" in connection.transport
67
+ ? ((_a = connection.transport.servers) !== null && _a !== void 0 ? _a : "*")
68
+ : undefined,
69
+ }); }), subagents: agent.subagents.map((subagent) => ({
70
+ name: subagent.name,
71
+ description: subagent.description,
72
+ model: subagent.model,
73
+ })), channels: [
74
+ { id: "http", routes: httpRoutes },
75
+ ...project.channels.map((channel) => {
76
+ var _a;
77
+ const info = {
78
+ id: channel.id,
79
+ routes: ((_a = channel.definition.routes) !== null && _a !== void 0 ? _a : []).map((r) => {
80
+ const routeInfo = {
81
+ method: r.method,
82
+ path: r.path,
83
+ url: `/v1/channels/${channel.id}${r.path}`,
84
+ };
85
+ if (r.description !== undefined) {
86
+ routeInfo.description = r.description;
87
+ }
88
+ if (r.bodySchema !== undefined) {
89
+ routeInfo.bodySchema = toolInputJsonSchema(r.bodySchema);
90
+ }
91
+ if (r.querySchema !== undefined) {
92
+ routeInfo.querySchema = toolInputJsonSchema(r.querySchema);
93
+ }
94
+ return routeInfo;
95
+ }),
96
+ };
97
+ const meta = channel.definition.meta;
98
+ if ((meta === null || meta === void 0 ? void 0 : meta.kind) !== undefined) {
99
+ info.kind = meta.kind;
100
+ }
101
+ if ((meta === null || meta === void 0 ? void 0 : meta.githubWebhookEvents) !== undefined) {
102
+ info.githubWebhookEvents = meta.githubWebhookEvents;
103
+ }
104
+ if ((meta === null || meta === void 0 ? void 0 : meta.originWebhookEvents) !== undefined) {
105
+ info.originWebhookEvents = meta.originWebhookEvents;
106
+ }
107
+ if ((meta === null || meta === void 0 ? void 0 : meta.deploymentEventTypes) !== undefined) {
108
+ info.deploymentEventTypes = meta.deploymentEventTypes;
109
+ }
110
+ if ((meta === null || meta === void 0 ? void 0 : meta.slackChannelPosts) !== undefined) {
111
+ info.slackChannelPosts = meta.slackChannelPosts;
112
+ }
113
+ return info;
114
+ }),
115
+ ], schedules: project.schedules.map((schedule) => ({
116
+ name: schedule.name,
117
+ cron: schedule.cron,
118
+ kind: schedule.kind,
119
+ })), hooks: project.hooks.map((hook) => hook.name), abs: project.abs.map((experiment) => experiment.name) }, (project.abConfig === undefined && project.abs.length === 0
120
+ ? {}
121
+ : {
122
+ abConfig: {
123
+ maxPlaygroundSessions: resolveABMaxPlaygroundSessions((_a = project.abConfig) === null || _a === void 0 ? void 0 : _a.maxPlaygroundSessions),
124
+ durableSamples: ((_b = project.storage) === null || _b === void 0 ? void 0 : _b.abs) !== undefined,
125
+ durableSnapshots: ((_d = (_c = project.storage) === null || _c === void 0 ? void 0 : _c.abs) === null || _d === void 0 ? void 0 : _d.putSnapshot) !== undefined,
126
+ },
127
+ })), { storage: project.storage === undefined
128
+ ? undefined
129
+ : { name: project.storage.name }, artifacts: project.artifacts === undefined
130
+ ? undefined
131
+ : {
132
+ kinds: Object.keys((_f = project.artifacts.kinds) !== null && _f !== void 0 ? _f : {}),
133
+ agentTool: project.artifacts.agentTool === true,
134
+ max: resolveArtifactsMax(project.artifacts),
135
+ }, otel: project.otel === undefined
136
+ ? undefined
137
+ : {
138
+ enabled: true,
139
+ serviceName: project.otel.serviceName,
140
+ }, diagnostics: project.diagnostics });
141
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `agent/instructions.md` (or `.ts`, or a directory): the always-on system prompt.
3
+ */
4
+ import type { AgentConfigDefinition } from "../../types.js";
5
+ import { type DiscoveryContext } from "./context.js";
6
+ export declare function loadInstructions(ctx: DiscoveryContext, agentDir: string, config: AgentConfigDefinition | undefined, isRoot: boolean): Promise<string | undefined>;
7
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/instructions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,cAAc,CAAC;AAStB,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmD7B"}