@cursor/july 0.1.108 → 0.1.109

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 (343) hide show
  1. package/AGENTS.md +2 -6
  2. package/README.md +3 -6
  3. package/dist/channels/bitbucket/api.d.ts +41 -0
  4. package/dist/channels/bitbucket/api.d.ts.map +1 -1
  5. package/dist/channels/bitbucket/api.js +260 -0
  6. package/dist/channels/bitbucket/binding.d.ts +4 -0
  7. package/dist/channels/bitbucket/binding.d.ts.map +1 -1
  8. package/dist/channels/bitbucket/binding.js +16 -0
  9. package/dist/channels/bitbucket/index.d.ts +1 -1
  10. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  11. package/dist/channels/bitbucket/index.js +1 -1
  12. package/dist/channels/gitlab/api.d.ts +27 -0
  13. package/dist/channels/gitlab/api.d.ts.map +1 -1
  14. package/dist/channels/gitlab/api.js +88 -0
  15. package/dist/channels/gitlab/binding.d.ts +5 -0
  16. package/dist/channels/gitlab/binding.d.ts.map +1 -1
  17. package/dist/channels/gitlab/binding.js +10 -0
  18. package/dist/channels/gitlab/index.d.ts +1 -1
  19. package/dist/channels/gitlab/index.d.ts.map +1 -1
  20. package/dist/channels/gitlab/index.js +1 -1
  21. package/dist/channels/slack/dispatch.d.ts +10 -0
  22. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  23. package/dist/channels/slack/dispatch.js +20 -3
  24. package/dist/channels/slack/slack-channel.d.ts +12 -5
  25. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  26. package/dist/channels/slack/slack-channel.js +59 -8
  27. package/dist/docs/404.html +2 -2
  28. package/dist/docs/assets/{app.BASKM3M4.js → app.Cr-wVbnB.js} +1 -1
  29. package/dist/docs/assets/{building-with-agents.md.CUSWxlP_.js → building-with-agents.md.D0KbSkJn.js} +2 -2
  30. package/dist/docs/assets/{building-with-agents.md.CUSWxlP_.lean.js → building-with-agents.md.D0KbSkJn.lean.js} +1 -1
  31. package/dist/docs/assets/chunks/@localSearchIndexroot.CFVQ4S17.js +1 -0
  32. package/dist/docs/assets/chunks/{VPLocalSearchBox.BOKxlYGP.js → VPLocalSearchBox.CVQERt56.js} +1 -1
  33. package/dist/docs/assets/chunks/{theme.DbDZW-zb.js → theme.Dnsd3XOn.js} +2 -2
  34. package/dist/docs/assets/concepts.md.B4o63Gul.js +1 -0
  35. package/dist/docs/assets/evals.md.C7JLjoEP.js +211 -0
  36. package/dist/docs/assets/evals.md.C7JLjoEP.lean.js +1 -0
  37. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.js +10 -0
  38. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.lean.js +1 -0
  39. package/dist/docs/assets/{guides_github.md.BH33UEBJ.js → guides_github.md.TZaTZlfz.js} +13 -3
  40. package/dist/docs/assets/{guides_github.md.BH33UEBJ.lean.js → guides_github.md.TZaTZlfz.lean.js} +1 -1
  41. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.js +14 -0
  42. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.lean.js +1 -0
  43. package/dist/docs/assets/{guides_webhooks.md.DKdA43Qm.js → guides_webhooks.md.CJK484ex.js} +2 -2
  44. package/dist/docs/assets/{hillclimbing.md.CpTGTCle.js → hillclimbing.md.BOiVo1tf.js} +1 -1
  45. package/dist/docs/assets/index.md.DD9Q2XuJ.js +5 -0
  46. package/dist/docs/assets/{index.md.BjH1w2ZW.lean.js → index.md.DD9Q2XuJ.lean.js} +1 -1
  47. package/dist/docs/assets/{reference_channels.md.D-qTqwcq.js → reference_channels.md.CAo-iK4j.js} +2 -2
  48. package/dist/docs/assets/{reference_channels.md.D-qTqwcq.lean.js → reference_channels.md.CAo-iK4j.lean.js} +1 -1
  49. package/dist/docs/assets/{reference_cli.md.Ca26u0Es.js → reference_cli.md.Deg7849l.js} +1 -1
  50. package/dist/docs/assets/{reference_extensions.md.CPWt00ds.js → reference_extensions.md.ZAVUyuEX.js} +2 -2
  51. package/dist/docs/assets/{reference_hooks.md.Ddt5DdgJ.js → reference_hooks.md.BlM_bOg6.js} +3 -3
  52. package/dist/docs/assets/{reference_hooks.md.Ddt5DdgJ.lean.js → reference_hooks.md.BlM_bOg6.lean.js} +1 -1
  53. package/dist/docs/assets/{reference_http-api.md.oySXBO8o.js → reference_http-api.md.BwaCo-VO.js} +1 -1
  54. package/dist/docs/assets/{reference_playground.md.4myJPxrf.js → reference_playground.md.DLnoaczX.js} +1 -1
  55. package/dist/docs/assets/{reference_playground.md.4myJPxrf.lean.js → reference_playground.md.DLnoaczX.lean.js} +1 -1
  56. package/dist/docs/assets/{reference_project-layout.md.DuBu9a96.js → reference_project-layout.md.BEU8MtQV.js} +3 -3
  57. package/dist/docs/assets/{reference_project-layout.md.DuBu9a96.lean.js → reference_project-layout.md.BEU8MtQV.lean.js} +1 -1
  58. package/dist/docs/assets/reference_sessions.md.CyXV1MUw.js +1 -0
  59. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.js +35 -0
  60. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.lean.js +1 -0
  61. package/dist/docs/assets/{skills_evals.md.BhovOvrl.js → skills_evals.md.DFxYPErF.js} +3 -3
  62. package/dist/docs/assets/skills_evals.md.DFxYPErF.lean.js +1 -0
  63. package/dist/docs/assets/{skills_framework-map.md.D-tFZhFS.js → skills_framework-map.md.BxLSOhSY.js} +1 -1
  64. package/dist/docs/assets/skills_index.md.DL7EHaQ-.js +1 -0
  65. package/dist/docs/assets/skills_index.md.DL7EHaQ-.lean.js +1 -0
  66. package/dist/docs/assets/{storage.md.BOHeqk2M.js → storage.md.BUrhJ-Zz.js} +4 -4
  67. package/dist/docs/assets/{storage.md.BOHeqk2M.lean.js → storage.md.BUrhJ-Zz.lean.js} +1 -1
  68. package/dist/docs/building-with-agents.html +5 -5
  69. package/dist/docs/building-with-agents.md +3 -2
  70. package/dist/docs/concepts.html +5 -5
  71. package/dist/docs/concepts.md +2 -4
  72. package/dist/docs/deployment.html +4 -4
  73. package/dist/docs/evals.html +161 -35
  74. package/dist/docs/evals.md +612 -297
  75. package/dist/docs/guides/agent-to-agent.html +4 -4
  76. package/dist/docs/guides/bitbucket.html +36 -0
  77. package/dist/docs/guides/bitbucket.md +84 -0
  78. package/dist/docs/guides/cloud-agents.html +4 -4
  79. package/dist/docs/guides/convert-automation.html +4 -4
  80. package/dist/docs/guides/github.html +17 -7
  81. package/dist/docs/guides/github.md +31 -0
  82. package/dist/docs/guides/gitlab.html +40 -0
  83. package/dist/docs/guides/gitlab.md +92 -0
  84. package/dist/docs/guides/grokbot-agents.html +4 -4
  85. package/dist/docs/guides/human-in-the-loop.html +4 -4
  86. package/dist/docs/guides/improve.html +4 -4
  87. package/dist/docs/guides/mcp-oauth.html +4 -4
  88. package/dist/docs/guides/opentelemetry.html +4 -4
  89. package/dist/docs/guides/slack.html +5 -5
  90. package/dist/docs/guides/webhooks.html +6 -6
  91. package/dist/docs/guides/webhooks.md +4 -2
  92. package/dist/docs/hashmap.json +1 -1
  93. package/dist/docs/hillclimbing.html +6 -6
  94. package/dist/docs/hillclimbing.md +2 -2
  95. package/dist/docs/index.html +6 -6
  96. package/dist/docs/index.md +10 -6
  97. package/dist/docs/llms-full.txt +1113 -778
  98. package/dist/docs/llms.txt +6 -5
  99. package/dist/docs/quickstart.html +4 -4
  100. package/dist/docs/reference/agent-config.html +4 -4
  101. package/dist/docs/reference/artifacts.html +4 -4
  102. package/dist/docs/reference/channels.html +6 -6
  103. package/dist/docs/reference/channels.md +16 -3
  104. package/dist/docs/reference/cli.html +6 -6
  105. package/dist/docs/reference/cli.md +6 -4
  106. package/dist/docs/reference/connections.html +4 -4
  107. package/dist/docs/reference/extensions.html +7 -7
  108. package/dist/docs/reference/extensions.md +0 -3
  109. package/dist/docs/reference/hooks.html +7 -7
  110. package/dist/docs/reference/hooks.md +9 -12
  111. package/dist/docs/reference/http-api.html +6 -6
  112. package/dist/docs/reference/http-api.md +2 -3
  113. package/dist/docs/reference/instructions.html +4 -4
  114. package/dist/docs/reference/playground.html +5 -5
  115. package/dist/docs/reference/playground.md +0 -4
  116. package/dist/docs/reference/project-layout.html +7 -7
  117. package/dist/docs/reference/project-layout.md +1 -8
  118. package/dist/docs/reference/prompt.html +4 -4
  119. package/dist/docs/reference/result.html +4 -4
  120. package/dist/docs/reference/schedules.html +4 -4
  121. package/dist/docs/reference/sessions.html +5 -5
  122. package/dist/docs/reference/sessions.md +1 -2
  123. package/dist/docs/reference/skills.html +4 -4
  124. package/dist/docs/reference/subagents.html +4 -4
  125. package/dist/docs/reference/tools.html +4 -4
  126. package/dist/docs/scaffolding-agents.html +4 -4
  127. package/dist/docs/skills/create-agent.html +4 -4
  128. package/dist/docs/skills/debug.html +4 -4
  129. package/dist/docs/skills/deploy.html +61 -0
  130. package/dist/docs/skills/deploy.md +161 -0
  131. package/dist/docs/skills/evals.html +8 -8
  132. package/dist/docs/skills/evals.md +44 -6
  133. package/dist/docs/skills/framework-map.html +5 -5
  134. package/dist/docs/skills/framework-map.md +1 -2
  135. package/dist/docs/skills/github.html +4 -4
  136. package/dist/docs/skills/hillclimb.html +4 -4
  137. package/dist/docs/skills/index.html +6 -6
  138. package/dist/docs/skills/index.md +1 -1
  139. package/dist/docs/skills/mcp-auth.html +4 -4
  140. package/dist/docs/skills/otel.html +4 -4
  141. package/dist/docs/skills/setup-slack.html +4 -4
  142. package/dist/docs/storage.html +8 -8
  143. package/dist/docs/storage.md +15 -24
  144. package/dist/docs/templates/agentic-owners.html +4 -4
  145. package/dist/docs/templates/agents-md.html +4 -4
  146. package/dist/docs/templates/code-wiki.html +4 -4
  147. package/dist/docs/templates/demo.html +4 -4
  148. package/dist/docs/templates/grokbot-agents.html +4 -4
  149. package/dist/docs/templates/pr-autofixer.html +4 -4
  150. package/dist/docs/templates/security-help.html +4 -4
  151. package/dist/docs/templates/security-reviewer.html +4 -4
  152. package/dist/docs/templates/triage.html +4 -4
  153. package/dist/docs/troubleshooting.html +4 -4
  154. package/dist/extensions.d.ts +2 -3
  155. package/dist/extensions.d.ts.map +1 -1
  156. package/dist/extensions.js +2 -5
  157. package/dist/index.d.ts +2 -3
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +1 -2
  160. package/dist/internal/authored-alias-hooks.d.ts +5 -0
  161. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  162. package/dist/internal/authored-alias-hooks.js +17 -0
  163. package/dist/internal/authored-loaders.d.ts +4 -0
  164. package/dist/internal/authored-loaders.d.ts.map +1 -1
  165. package/dist/internal/authored-loaders.js +21 -2
  166. package/dist/internal/cli-ax.d.ts +1 -2
  167. package/dist/internal/cli-ax.d.ts.map +1 -1
  168. package/dist/internal/cli-ax.js +1 -2
  169. package/dist/internal/continuation-channel.d.ts.map +1 -1
  170. package/dist/internal/continuation-channel.js +2 -2
  171. package/dist/internal/continuation-identity.js +8 -3
  172. package/dist/internal/discovery/agent.d.ts +1 -1
  173. package/dist/internal/discovery/agent.d.ts.map +1 -1
  174. package/dist/internal/discovery/agent.js +0 -5
  175. package/dist/internal/discovery/extension-overlay.d.ts +1 -2
  176. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
  177. package/dist/internal/discovery/extension-overlay.js +0 -14
  178. package/dist/internal/discovery/extensions.d.ts +1 -2
  179. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  180. package/dist/internal/discovery/extensions.js +4 -22
  181. package/dist/internal/discovery/info.d.ts.map +1 -1
  182. package/dist/internal/discovery/info.js +42 -24
  183. package/dist/internal/discovery/modules.js +0 -1
  184. package/dist/internal/discovery/project.d.ts.map +1 -1
  185. package/dist/internal/discovery/project.js +0 -16
  186. package/dist/internal/eval-runner.js +0 -1
  187. package/dist/internal/framework-file-storage.d.ts +4 -5
  188. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  189. package/dist/internal/framework-file-storage.js +4 -5
  190. package/dist/internal/framework-storage-selection.d.ts +2 -2
  191. package/dist/internal/framework-storage-selection.js +2 -2
  192. package/dist/internal/init-scaffold.d.ts.map +1 -1
  193. package/dist/internal/init-scaffold.js +1 -2
  194. package/dist/internal/install-cursor-skills.d.ts +5 -2
  195. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  196. package/dist/internal/install-cursor-skills.js +25 -5
  197. package/dist/internal/run-client.d.ts +1 -1
  198. package/dist/internal/sdk-runner.js +1 -1
  199. package/dist/internal/server.js +0 -14
  200. package/dist/internal/session-engine.d.ts +5 -35
  201. package/dist/internal/session-engine.d.ts.map +1 -1
  202. package/dist/internal/session-engine.js +17 -162
  203. package/dist/internal/storage-coordinator.d.ts +5 -19
  204. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  205. package/dist/internal/storage-coordinator.js +3 -62
  206. package/dist/internal/storage-roles.d.ts +4 -9
  207. package/dist/internal/storage-roles.d.ts.map +1 -1
  208. package/dist/internal/storage-roles.js +2 -2
  209. package/dist/playground/assets/index-Bhxzrcf6.css +1 -0
  210. package/dist/playground/assets/index-CqLX5uF3.js +67 -0
  211. package/dist/playground/index.html +2 -2
  212. package/dist/storage-backends/cursor-hosted-v2.d.ts +4 -5
  213. package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
  214. package/dist/storage-backends/cursor-hosted-v2.js +4 -5
  215. package/dist/storage-backends/cursor-hosted.d.ts +1 -2
  216. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  217. package/dist/storage-backends/cursor-hosted.js +0 -30
  218. package/dist/storage-backends/file-kv.d.ts +9 -12
  219. package/dist/storage-backends/file-kv.d.ts.map +1 -1
  220. package/dist/storage-backends/file-kv.js +11 -47
  221. package/dist/storage-protocol.d.ts +3 -11
  222. package/dist/storage-protocol.d.ts.map +1 -1
  223. package/dist/storage-protocol.js +3 -11
  224. package/dist/storage.d.ts +8 -36
  225. package/dist/storage.d.ts.map +1 -1
  226. package/dist/storage.js +8 -44
  227. package/dist/types.d.ts +20 -57
  228. package/dist/types.d.ts.map +1 -1
  229. package/docs/README.md +10 -6
  230. package/docs/building-with-agents.md +3 -2
  231. package/docs/concepts.md +2 -4
  232. package/docs/evals.md +613 -298
  233. package/docs/guides/bitbucket.md +89 -0
  234. package/docs/guides/github.md +31 -0
  235. package/docs/guides/gitlab.md +97 -0
  236. package/docs/guides/webhooks.md +4 -2
  237. package/docs/hillclimbing.md +2 -2
  238. package/docs/reference/channels.md +16 -3
  239. package/docs/reference/cli.md +6 -4
  240. package/docs/reference/extensions.md +0 -3
  241. package/docs/reference/hooks.md +9 -12
  242. package/docs/reference/http-api.md +2 -3
  243. package/docs/reference/playground.md +0 -4
  244. package/docs/reference/project-layout.md +1 -8
  245. package/docs/reference/sessions.md +1 -2
  246. package/docs/skills/index.md +2 -2
  247. package/docs/storage.md +15 -24
  248. package/package.json +1 -7
  249. package/skills/deploy/SKILL.md +169 -0
  250. package/skills/evals/SKILL.md +45 -8
  251. package/skills/framework-map/SKILL.md +1 -2
  252. package/src/channels/bitbucket/api.ts +341 -0
  253. package/src/channels/bitbucket/binding.ts +25 -0
  254. package/src/channels/bitbucket/index.ts +2 -0
  255. package/src/channels/gitlab/api.ts +123 -0
  256. package/src/channels/gitlab/binding.ts +12 -0
  257. package/src/channels/gitlab/index.ts +1 -0
  258. package/src/channels/slack/dispatch.ts +30 -0
  259. package/src/channels/slack/slack-channel.ts +69 -7
  260. package/src/extensions.ts +2 -6
  261. package/src/index.ts +0 -3
  262. package/src/internal/authored-alias-hooks.ts +32 -0
  263. package/src/internal/authored-loaders.ts +26 -2
  264. package/src/internal/cli-ax.ts +1 -2
  265. package/src/internal/continuation-channel.ts +2 -1
  266. package/src/internal/continuation-identity.ts +10 -2
  267. package/src/internal/discovery/agent.ts +1 -7
  268. package/src/internal/discovery/extension-overlay.ts +0 -18
  269. package/src/internal/discovery/extensions.ts +2 -26
  270. package/src/internal/discovery/info.ts +3 -13
  271. package/src/internal/discovery/modules.ts +0 -1
  272. package/src/internal/discovery/project.ts +0 -16
  273. package/src/internal/eval-runner.ts +0 -1
  274. package/src/internal/framework-file-storage.ts +4 -5
  275. package/src/internal/framework-storage-selection.ts +2 -2
  276. package/src/internal/init-scaffold.ts +1 -2
  277. package/src/internal/install-cursor-skills.ts +38 -5
  278. package/src/internal/run-client.ts +1 -1
  279. package/src/internal/sdk-runner.ts +1 -1
  280. package/src/internal/server.ts +0 -16
  281. package/src/internal/session-engine.ts +14 -202
  282. package/src/internal/storage-coordinator.ts +5 -76
  283. package/src/internal/storage-roles.ts +4 -9
  284. package/src/storage-backends/cursor-hosted-v2.ts +4 -7
  285. package/src/storage-backends/cursor-hosted.ts +0 -37
  286. package/src/storage-backends/file-kv.ts +10 -51
  287. package/src/storage-protocol.ts +3 -17
  288. package/src/storage.ts +10 -101
  289. package/src/types.ts +19 -56
  290. package/templates/demo/README.md +10 -6
  291. package/templates/demo/agent/channels/github.ts +2 -0
  292. package/templates/demo/agent/channels/queue.ts +6 -2
  293. package/templates/demo/agent/lib/repos.ts +5 -0
  294. package/templates/demo/init.json +25 -0
  295. package/dist/ab.d.ts +0 -209
  296. package/dist/ab.d.ts.map +0 -1
  297. package/dist/ab.js +0 -246
  298. package/dist/docs/ab.html +0 -80
  299. package/dist/docs/ab.md +0 -332
  300. package/dist/docs/assets/ab.md.mlVgqvSk.js +0 -54
  301. package/dist/docs/assets/ab.md.mlVgqvSk.lean.js +0 -1
  302. package/dist/docs/assets/chunks/@localSearchIndexroot.BHZYsNVi.js +0 -1
  303. package/dist/docs/assets/concepts.md.DgEcZOfT.js +0 -1
  304. package/dist/docs/assets/evals.md.C1ekS3k2.js +0 -85
  305. package/dist/docs/assets/evals.md.C1ekS3k2.lean.js +0 -1
  306. package/dist/docs/assets/index.md.BjH1w2ZW.js +0 -5
  307. package/dist/docs/assets/reference_sessions.md.CueyOHSL.js +0 -1
  308. package/dist/docs/assets/skills_ab.md.CsFNatVx.js +0 -26
  309. package/dist/docs/assets/skills_ab.md.CsFNatVx.lean.js +0 -1
  310. package/dist/docs/assets/skills_evals.md.BhovOvrl.lean.js +0 -1
  311. package/dist/docs/assets/skills_index.md.DKwIxzGg.js +0 -1
  312. package/dist/docs/assets/skills_index.md.DKwIxzGg.lean.js +0 -1
  313. package/dist/docs/skills/ab.html +0 -52
  314. package/dist/docs/skills/ab.md +0 -50
  315. package/dist/internal/ab-collector.d.ts +0 -44
  316. package/dist/internal/ab-collector.d.ts.map +0 -1
  317. package/dist/internal/ab-collector.js +0 -142
  318. package/dist/internal/ab-fold.d.ts +0 -36
  319. package/dist/internal/ab-fold.d.ts.map +0 -1
  320. package/dist/internal/ab-fold.js +0 -175
  321. package/dist/internal/ab-snapshot.d.ts +0 -68
  322. package/dist/internal/ab-snapshot.d.ts.map +0 -1
  323. package/dist/internal/ab-snapshot.js +0 -208
  324. package/dist/internal/discovery/ab.d.ts +0 -9
  325. package/dist/internal/discovery/ab.d.ts.map +0 -1
  326. package/dist/internal/discovery/ab.js +0 -113
  327. package/dist/playground/assets/index-BMDqAeXu.js +0 -67
  328. package/dist/playground/assets/index-LUgJoWdL.css +0 -1
  329. package/docs/ab.md +0 -337
  330. package/skills/ab/SKILL.md +0 -58
  331. package/src/ab.ts +0 -430
  332. package/src/internal/ab-collector.ts +0 -200
  333. package/src/internal/ab-fold.ts +0 -232
  334. package/src/internal/ab-snapshot.ts +0 -331
  335. package/src/internal/discovery/ab.ts +0 -131
  336. /package/dist/docs/assets/{concepts.md.DgEcZOfT.lean.js → concepts.md.B4o63Gul.lean.js} +0 -0
  337. /package/dist/docs/assets/{guides_webhooks.md.DKdA43Qm.lean.js → guides_webhooks.md.CJK484ex.lean.js} +0 -0
  338. /package/dist/docs/assets/{hillclimbing.md.CpTGTCle.lean.js → hillclimbing.md.BOiVo1tf.lean.js} +0 -0
  339. /package/dist/docs/assets/{reference_cli.md.Ca26u0Es.lean.js → reference_cli.md.Deg7849l.lean.js} +0 -0
  340. /package/dist/docs/assets/{reference_extensions.md.CPWt00ds.lean.js → reference_extensions.md.ZAVUyuEX.lean.js} +0 -0
  341. /package/dist/docs/assets/{reference_http-api.md.oySXBO8o.lean.js → reference_http-api.md.BwaCo-VO.lean.js} +0 -0
  342. /package/dist/docs/assets/{reference_sessions.md.CueyOHSL.lean.js → reference_sessions.md.CyXV1MUw.lean.js} +0 -0
  343. /package/dist/docs/assets/{skills_framework-map.md.D-tFZhFS.lean.js → skills_framework-map.md.BxLSOhSY.lean.js} +0 -0
@@ -1,175 +0,0 @@
1
- /**
2
- * Pure fold of a session event stream into A/B arms + cumulative metrics.
3
- * Shared by {@link ABCollector} (live) and {@link buildABSnapshot} (read API).
4
- */
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- import { cloneABMetrics, emptyABMetrics, } from "../ab.js";
15
- import { describeError } from "./describe-error.js";
16
- export function emptyFoldedABSession() {
17
- return { arms: new Map(), metrics: new Map() };
18
- }
19
- /** Ensure a metrics bucket exists for an enrolled arm. */
20
- export function ensureArmAccum(state, experiment, variant) {
21
- let accum = state.metrics.get(experiment);
22
- if (accum === undefined) {
23
- accum = {
24
- variant,
25
- metrics: emptyABMetrics(),
26
- turnStartedAt: null,
27
- };
28
- state.metrics.set(experiment, accum);
29
- }
30
- return accum;
31
- }
32
- /** Fold one event's built-in metrics + assignment. Does not run `derive`. */
33
- export function foldABEvent(state, event) {
34
- if (event.type === "ab.assigned") {
35
- const { experiment, variant } = event.data;
36
- state.arms.set(experiment, variant);
37
- if (variant === null) {
38
- state.metrics.delete(experiment);
39
- }
40
- else {
41
- state.metrics.set(experiment, {
42
- variant,
43
- metrics: emptyABMetrics(),
44
- turnStartedAt: null,
45
- });
46
- }
47
- return;
48
- }
49
- if (state.arms.size === 0) {
50
- return;
51
- }
52
- for (const [experiment, variant] of state.arms) {
53
- if (variant === null) {
54
- continue;
55
- }
56
- applyBuiltinMetrics(ensureArmAccum(state, experiment, variant), event);
57
- }
58
- }
59
- export function foldABStream(events) {
60
- const state = emptyFoldedABSession();
61
- for (const event of events) {
62
- foldABEvent(state, event);
63
- }
64
- return state;
65
- }
66
- /**
67
- * Apply `derive` extractors for one event into `custom` counters.
68
- * Errors are reported via `onError` and skipped.
69
- */
70
- export function applyDeriveForEvent(custom, derive, event, collectCtx, onError) {
71
- return __awaiter(this, void 0, void 0, function* () {
72
- var _a;
73
- for (const [key, extract] of Object.entries(derive)) {
74
- try {
75
- const delta = yield extract(event, collectCtx);
76
- if (typeof delta === "number" && Number.isFinite(delta)) {
77
- custom[key] = ((_a = custom[key]) !== null && _a !== void 0 ? _a : 0) + delta;
78
- }
79
- }
80
- catch (error) {
81
- onError(key, error);
82
- }
83
- }
84
- });
85
- }
86
- function collectContext(experiment, variant, sessionInfo, agentName) {
87
- return {
88
- agent: { name: agentName },
89
- channel: { id: sessionInfo.channelId },
90
- session: sessionInfo,
91
- experiment,
92
- variant,
93
- };
94
- }
95
- /**
96
- * Re-run `derive` extractors over the stream for enrolled arms.
97
- * Mutates `state.metrics` in place. Errors are logged and skipped.
98
- */
99
- export function applyABDerive(state, events, experiments, sessionInfo, agentName, logger) {
100
- return __awaiter(this, void 0, void 0, function* () {
101
- for (const experiment of experiments) {
102
- const variant = state.arms.get(experiment.name);
103
- if (variant === undefined || variant === null) {
104
- continue;
105
- }
106
- const def = experiment.definition;
107
- if (def.derive === undefined) {
108
- continue;
109
- }
110
- const accum = ensureArmAccum(state, experiment.name, variant);
111
- // Reset custom so a re-fold is idempotent.
112
- accum.metrics.custom = {};
113
- const ctx = collectContext(experiment.name, variant, sessionInfo, agentName);
114
- for (const event of events) {
115
- yield applyDeriveForEvent(accum.metrics.custom, def.derive, event, ctx, (key, error) => {
116
- logger(`[agent-sdk] ab "${experiment.name}" derive.${key} threw: ${describeError(error)}`);
117
- });
118
- }
119
- }
120
- });
121
- }
122
- export function applyBuiltinMetrics(accum, event) {
123
- const m = accum.metrics;
124
- switch (event.type) {
125
- case "turn.started":
126
- accum.turnStartedAt = event.at;
127
- break;
128
- case "turn.completed": {
129
- m.turns += 1;
130
- const usage = event.data.usage;
131
- if (usage !== undefined) {
132
- m.inputTokens += usage.inputTokens;
133
- m.outputTokens += usage.outputTokens;
134
- m.cacheReadTokens += usage.cacheReadTokens;
135
- m.cacheWriteTokens += usage.cacheWriteTokens;
136
- }
137
- const cost = event.data.cost;
138
- if (cost !== undefined) {
139
- m.costUsd += cost.totalUsd;
140
- }
141
- addWallTime(accum, event.at);
142
- break;
143
- }
144
- case "turn.failed":
145
- m.turns += 1;
146
- m.turnFailures += 1;
147
- addWallTime(accum, event.at);
148
- break;
149
- case "action.result":
150
- m.toolCalls += 1;
151
- if (event.data.isError) {
152
- m.toolErrors += 1;
153
- }
154
- break;
155
- default:
156
- break;
157
- }
158
- }
159
- function addWallTime(accum, endedAt) {
160
- if (accum.turnStartedAt === null) {
161
- return;
162
- }
163
- const start = Date.parse(accum.turnStartedAt);
164
- const end = Date.parse(endedAt);
165
- accum.turnStartedAt = null;
166
- if (Number.isFinite(start) && Number.isFinite(end) && end >= start) {
167
- accum.metrics.wallTimeMs += end - start;
168
- }
169
- }
170
- export function cloneFoldedMetrics(accum) {
171
- if (accum === undefined) {
172
- return undefined;
173
- }
174
- return cloneABMetrics(accum.metrics);
175
- }
@@ -1,68 +0,0 @@
1
- /**
2
- * Read-only A/B metrics snapshot: fold durable session event streams into
3
- * per-session assignments and aggregate arm totals. Used by `GET /v1/abs`.
4
- */
5
- import { type ABMetrics, type ABVariantMeta } from "../ab.js";
6
- import type { DiscoveredAB, SessionEvent, SessionInfo, SessionRecord, SessionSummary } from "../types.js";
7
- export interface ABSnapshotAssignment {
8
- experiment: string;
9
- variant: string | null;
10
- variantLabel?: string;
11
- /** Present when enrolled (`variant` non-null). */
12
- metrics?: ABMetrics;
13
- }
14
- export interface ABSnapshotSession {
15
- sessionId: string;
16
- channelId: string;
17
- mode: string;
18
- title?: string;
19
- turnCount: number;
20
- updatedAt?: string;
21
- assignments: ABSnapshotAssignment[];
22
- }
23
- export interface ABSnapshotArm {
24
- variant: string;
25
- variantLabel?: string;
26
- description?: string;
27
- /** Sessions enrolled in this arm. */
28
- sessions: number;
29
- metrics: ABMetrics;
30
- }
31
- export interface ABSnapshotExperiment {
32
- name: string;
33
- variants: Record<string, ABVariantMeta>;
34
- /** Sessions with sticky skip (`variant: null`). */
35
- skipped: number;
36
- arms: ABSnapshotArm[];
37
- }
38
- export interface ABSnapshotConfig {
39
- /** Newest-first session fold window for this snapshot (`GET /v1/abs`). */
40
- maxPlaygroundSessions?: number;
41
- /** True when the `defineStorage` `abs` table is configured. */
42
- durableSamples?: boolean;
43
- /** True when the `abs` table also stores the aggregate snapshot. */
44
- durableSnapshots?: boolean;
45
- }
46
- export interface ABSnapshot {
47
- experiments: ABSnapshotExperiment[];
48
- sessions: ABSnapshotSession[];
49
- config?: ABSnapshotConfig;
50
- }
51
- export interface BuildABSnapshotInput {
52
- experiments: readonly DiscoveredAB[];
53
- agentName: string;
54
- /** Newest-first session list (same order as `GET /v1/sessions`). */
55
- sessions: readonly SessionSummary[];
56
- loadRecord: (sessionId: string) => Promise<SessionRecord | undefined>;
57
- loadEvents: (sessionId: string) => Promise<SessionEvent[]>;
58
- sessionInfo: (record: SessionRecord) => SessionInfo;
59
- logger: (line: string) => void;
60
- /** Max concurrent event-log reads (default 8). */
61
- concurrency?: number;
62
- /** Attached to the returned snapshot (playground / persistence meta). */
63
- config?: ABSnapshotConfig;
64
- }
65
- export declare function buildABSnapshot(input: BuildABSnapshotInput): Promise<ABSnapshot>;
66
- /** Narrow helper so callers don't need the unused DiscoveredAB import above. */
67
- export type { DiscoveredAB };
68
- //# sourceMappingURL=ab-snapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ab-snapshot.d.ts","sourceRoot":"","sources":["../../src/internal/ab-snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAGnB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACtE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3D,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,WAAW,CAAC;IACpD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,UAAU,CAAC,CA8NrB;AAkBD,gFAAgF;AAChF,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -1,208 +0,0 @@
1
- /**
2
- * Read-only A/B metrics snapshot: fold durable session event streams into
3
- * per-session assignments and aggregate arm totals. Used by `GET /v1/abs`.
4
- */
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- import { cloneABMetrics, emptyABMetrics, } from "../ab.js";
15
- import { applyABDerive, cloneFoldedMetrics, foldABStream } from "./ab-fold.js";
16
- import { mapPool } from "./map-pool.js";
17
- export function buildABSnapshot(input) {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- var _a, _b;
20
- const experiments = input.experiments;
21
- const armTotals = new Map();
22
- const skipped = new Map();
23
- for (const experiment of experiments) {
24
- armTotals.set(experiment.name, new Map());
25
- skipped.set(experiment.name, 0);
26
- for (const variant of Object.keys(experiment.definition.variants)) {
27
- armTotals.get(experiment.name).set(variant, {
28
- sessions: 0,
29
- metrics: emptyABMetrics(),
30
- });
31
- }
32
- }
33
- const concurrency = Math.max(1, (_a = input.concurrency) !== null && _a !== void 0 ? _a : 8);
34
- const sessionRows = [];
35
- function processOne(summary) {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- var _a, _b;
38
- var _c, _d;
39
- const record = yield input.loadRecord(summary.sessionId);
40
- if (record === undefined) {
41
- return;
42
- }
43
- // Eval harness sessions never enroll; keep them out of aggregates too.
44
- if (record.purpose === "eval") {
45
- return;
46
- }
47
- const events = yield input.loadEvents(summary.sessionId);
48
- const folded = foldABStream(events);
49
- if (experiments.length > 0) {
50
- yield applyABDerive(folded, events, experiments, input.sessionInfo(record), input.agentName, input.logger);
51
- }
52
- const assignments = [];
53
- // Prefer declared experiment order; include unknown arms from the log after.
54
- const seen = new Set();
55
- for (const experiment of experiments) {
56
- seen.add(experiment.name);
57
- const variant = folded.arms.get(experiment.name);
58
- if (variant === undefined) {
59
- continue;
60
- }
61
- const def = experiment.definition;
62
- const label = variant === null ? undefined : (_a = def.variants[variant]) === null || _a === void 0 ? void 0 : _a.label;
63
- const metrics = variant === null
64
- ? undefined
65
- : cloneFoldedMetrics(folded.metrics.get(experiment.name));
66
- assignments.push(Object.assign(Object.assign({ experiment: experiment.name, variant }, (label !== undefined ? { variantLabel: label } : {})), (metrics !== undefined ? { metrics } : {})));
67
- if (variant === null) {
68
- skipped.set(experiment.name, ((_c = skipped.get(experiment.name)) !== null && _c !== void 0 ? _c : 0) + 1);
69
- }
70
- else {
71
- const bucket = (_b = armTotals.get(experiment.name)) === null || _b === void 0 ? void 0 : _b.get(variant);
72
- if (bucket !== undefined && metrics !== undefined) {
73
- bucket.sessions += 1;
74
- addMetrics(bucket.metrics, metrics);
75
- }
76
- else if (bucket === undefined) {
77
- // Assigned to an arm no longer in the definition — still surface it.
78
- const arms = (_d = armTotals.get(experiment.name)) !== null && _d !== void 0 ? _d : new Map();
79
- const created = {
80
- sessions: 1,
81
- metrics: metrics !== undefined
82
- ? cloneABMetrics(metrics)
83
- : emptyABMetrics(),
84
- };
85
- arms.set(variant, created);
86
- armTotals.set(experiment.name, arms);
87
- }
88
- }
89
- }
90
- for (const [experiment, variant] of folded.arms) {
91
- if (seen.has(experiment)) {
92
- continue;
93
- }
94
- const metrics = variant === null
95
- ? undefined
96
- : cloneFoldedMetrics(folded.metrics.get(experiment));
97
- assignments.push(Object.assign({ experiment,
98
- variant }, (metrics !== undefined ? { metrics } : {})));
99
- }
100
- if (assignments.length === 0) {
101
- return;
102
- }
103
- sessionRows.push(Object.assign(Object.assign(Object.assign(Object.assign({ sessionId: summary.sessionId, channelId: summary.channelId, mode: summary.mode }, (summary.title === undefined ? {} : { title: summary.title })), { turnCount: summary.turnCount }), (summary.updatedAt === undefined
104
- ? {}
105
- : { updatedAt: summary.updatedAt })), { assignments }));
106
- });
107
- }
108
- yield mapPool(input.sessions, concurrency, (summary) => __awaiter(this, void 0, void 0, function* () {
109
- yield processOne(summary);
110
- }));
111
- // Preserve newest-first order from the sessions list.
112
- const order = new Map(input.sessions.map((summary, index) => [summary.sessionId, index]));
113
- sessionRows.sort((a, b) => { var _a, _b; return ((_a = order.get(a.sessionId)) !== null && _a !== void 0 ? _a : 0) - ((_b = order.get(b.sessionId)) !== null && _b !== void 0 ? _b : 0); });
114
- const experimentRows = experiments.map((experiment) => {
115
- var _a;
116
- var _b, _c, _d;
117
- const def = experiment.definition;
118
- const arms = [];
119
- for (const [variant, meta] of Object.entries(def.variants)) {
120
- const bucket = (_b = (_a = armTotals.get(experiment.name)) === null || _a === void 0 ? void 0 : _a.get(variant)) !== null && _b !== void 0 ? _b : {
121
- sessions: 0,
122
- metrics: emptyABMetrics(),
123
- };
124
- arms.push(Object.assign(Object.assign(Object.assign({ variant }, (meta.label !== undefined ? { variantLabel: meta.label } : {})), (meta.description !== undefined
125
- ? { description: meta.description }
126
- : {})), { sessions: bucket.sessions, metrics: cloneABMetrics(bucket.metrics) }));
127
- }
128
- // Orphan arms from the log (no longer in definition).
129
- for (const [variant, bucket] of (_c = armTotals.get(experiment.name)) !== null && _c !== void 0 ? _c : []) {
130
- if (variant in def.variants) {
131
- continue;
132
- }
133
- arms.push({
134
- variant,
135
- sessions: bucket.sessions,
136
- metrics: cloneABMetrics(bucket.metrics),
137
- });
138
- }
139
- return {
140
- name: experiment.name,
141
- variants: def.variants,
142
- skipped: (_d = skipped.get(experiment.name)) !== null && _d !== void 0 ? _d : 0,
143
- arms,
144
- };
145
- });
146
- // Experiments that appear only in logs (definition removed).
147
- const known = new Set(experiments.map((experiment) => experiment.name));
148
- const orphanNames = new Set();
149
- for (const row of sessionRows) {
150
- for (const assignment of row.assignments) {
151
- if (!known.has(assignment.experiment)) {
152
- orphanNames.add(assignment.experiment);
153
- }
154
- }
155
- }
156
- for (const name of orphanNames) {
157
- const armsMap = new Map();
158
- let skipCount = 0;
159
- for (const row of sessionRows) {
160
- for (const assignment of row.assignments) {
161
- if (assignment.experiment !== name) {
162
- continue;
163
- }
164
- if (assignment.variant === null) {
165
- skipCount += 1;
166
- continue;
167
- }
168
- const bucket = (_b = armsMap.get(assignment.variant)) !== null && _b !== void 0 ? _b : {
169
- sessions: 0,
170
- metrics: emptyABMetrics(),
171
- };
172
- bucket.sessions += 1;
173
- if (assignment.metrics !== undefined) {
174
- addMetrics(bucket.metrics, assignment.metrics);
175
- }
176
- armsMap.set(assignment.variant, bucket);
177
- }
178
- }
179
- experimentRows.push({
180
- name,
181
- variants: {},
182
- skipped: skipCount,
183
- arms: [...armsMap.entries()].map(([variant, bucket]) => ({
184
- variant,
185
- sessions: bucket.sessions,
186
- metrics: cloneABMetrics(bucket.metrics),
187
- })),
188
- });
189
- }
190
- return Object.assign({ experiments: experimentRows, sessions: sessionRows }, (input.config === undefined ? {} : { config: input.config }));
191
- });
192
- }
193
- function addMetrics(target, delta) {
194
- var _a;
195
- target.turns += delta.turns;
196
- target.turnFailures += delta.turnFailures;
197
- target.toolCalls += delta.toolCalls;
198
- target.toolErrors += delta.toolErrors;
199
- target.inputTokens += delta.inputTokens;
200
- target.outputTokens += delta.outputTokens;
201
- target.cacheReadTokens += delta.cacheReadTokens;
202
- target.cacheWriteTokens += delta.cacheWriteTokens;
203
- target.costUsd += delta.costUsd;
204
- target.wallTimeMs += delta.wallTimeMs;
205
- for (const [key, value] of Object.entries(delta.custom)) {
206
- target.custom[key] = ((_a = target.custom[key]) !== null && _a !== void 0 ? _a : 0) + value;
207
- }
208
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * `agent/ab.ts` or `agent/ab/*.ts` plus `agent/ab.config.ts`: live A/B experiments.
3
- */
4
- import type { ABConfigFile } from "../../ab.js";
5
- import type { DiscoveredAB } from "../../types.js";
6
- import { type DiscoveryContext } from "./context.js";
7
- export declare function loadABs(ctx: DiscoveryContext, agentDir: string, onDisable?: (source: string, path: string) => void): Promise<DiscoveredAB[]>;
8
- export declare function loadABConfig(ctx: DiscoveryContext, agentDir: string): Promise<ABConfigFile | undefined>;
9
- //# sourceMappingURL=ab.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ab.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/ab.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,cAAc,CAAC;AAUlE,wBAAsB,OAAO,CAC3B,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GACjD,OAAO,CAAC,YAAY,EAAE,CAAC,CAiEzB;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAyBnC"}
@@ -1,113 +0,0 @@
1
- /**
2
- * `agent/ab.ts` or `agent/ab/*.ts` plus `agent/ab.config.ts`: live A/B experiments.
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, join, relative } from "node:path";
14
- import { getDefinitionKind } from "../brand.js";
15
- import { displayPath } from "./context.js";
16
- import { findModuleFile, isDirectory, isModuleFile, toPosix, walkFiles, } from "./fs.js";
17
- import { importDefault } from "./modules.js";
18
- export function loadABs(ctx, agentDir, onDisable) {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- const abs = [];
21
- const seen = new Set();
22
- const single = yield findModuleFile(agentDir, "ab");
23
- if (single !== undefined) {
24
- const definition = yield importDefault(ctx, single, onDisable === undefined ? "ab" : ["ab", "disabled"]);
25
- if (definition !== undefined) {
26
- if (getDefinitionKind(definition) === "disabled") {
27
- onDisable === null || onDisable === void 0 ? void 0 : onDisable("ab", single);
28
- }
29
- else {
30
- const name = resolveABName(definition, "ab");
31
- seen.add(name);
32
- abs.push({
33
- name,
34
- source: "ab",
35
- definition: definition,
36
- });
37
- }
38
- }
39
- }
40
- const absDir = join(agentDir, "ab");
41
- if (yield isDirectory(absDir)) {
42
- for (const filePath of yield walkFiles(absDir)) {
43
- if (!isModuleFile(basename(filePath))) {
44
- continue;
45
- }
46
- const rel = toPosix(relative(absDir, filePath));
47
- const stem = rel.slice(0, -extname(rel).length);
48
- const definition = yield importDefault(ctx, filePath, onDisable === undefined ? "ab" : ["ab", "disabled"]);
49
- if (definition === undefined) {
50
- continue;
51
- }
52
- if (getDefinitionKind(definition) === "disabled") {
53
- onDisable === null || onDisable === void 0 ? void 0 : onDisable(stem, filePath);
54
- continue;
55
- }
56
- const name = resolveABName(definition, stem);
57
- if (seen.has(name)) {
58
- ctx.diagnostics.push({
59
- severity: "error",
60
- path: displayPath(ctx, filePath),
61
- message: `Duplicate A/B experiment name ${JSON.stringify(name)}.`,
62
- });
63
- continue;
64
- }
65
- seen.add(name);
66
- abs.push({
67
- name,
68
- source: stem,
69
- definition: definition,
70
- });
71
- }
72
- }
73
- return abs;
74
- });
75
- }
76
- export function loadABConfig(ctx, agentDir) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- const path = yield findModuleFile(agentDir, "ab.config");
79
- if (path === undefined) {
80
- return undefined;
81
- }
82
- try {
83
- const mod = yield ctx.importModule(path);
84
- if (mod.default === null || typeof mod.default !== "object") {
85
- ctx.diagnostics.push({
86
- severity: "error",
87
- path: displayPath(ctx, path),
88
- message: "ab.config.ts must default-export defineABConfig({ ... }) from @cursor/july/ab.",
89
- });
90
- return undefined;
91
- }
92
- return mod.default;
93
- }
94
- catch (error) {
95
- ctx.diagnostics.push({
96
- severity: "error",
97
- path: displayPath(ctx, path),
98
- message: `Failed to load ab.config: ${error instanceof Error ? error.message : String(error)}`,
99
- });
100
- return undefined;
101
- }
102
- });
103
- }
104
- function resolveABName(definition, fallback) {
105
- if (typeof definition === "object" &&
106
- definition !== null &&
107
- "name" in definition &&
108
- typeof definition.name === "string" &&
109
- definition.name.length > 0) {
110
- return definition.name;
111
- }
112
- return fallback;
113
- }