@cursor/july 0.1.111 → 0.1.113

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 (441) hide show
  1. package/README.md +4 -0
  2. package/dist/bin/agent-serve.js +20 -4
  3. package/dist/channels/checks.d.ts +10 -0
  4. package/dist/channels/checks.d.ts.map +1 -1
  5. package/dist/channels/github/github-channel.d.ts +29 -19
  6. package/dist/channels/github/github-channel.d.ts.map +1 -1
  7. package/dist/channels/github/github-channel.js +29 -19
  8. package/dist/channels/origin/checks.d.ts +1 -1
  9. package/dist/channels/origin/checks.d.ts.map +1 -1
  10. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  11. package/dist/channels/slack/agentic-delivery.js +2 -0
  12. package/dist/channels/slack/dispatch.d.ts +11 -1
  13. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  14. package/dist/channels/slack/dispatch.js +146 -39
  15. package/dist/channels/slack/placeholder.d.ts +26 -0
  16. package/dist/channels/slack/placeholder.d.ts.map +1 -1
  17. package/dist/channels/slack/placeholder.js +28 -0
  18. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  19. package/dist/channels/slack/slack-channel.js +9 -16
  20. package/dist/docs/404.html +2 -2
  21. package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
  22. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  23. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  24. package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
  25. package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
  26. package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
  27. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
  28. package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
  29. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
  30. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
  31. package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
  32. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
  33. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
  35. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
  36. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
  37. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
  38. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
  39. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
  40. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
  41. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
  42. package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
  43. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
  44. package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
  45. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
  46. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
  47. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
  48. package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
  49. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
  50. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
  51. package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
  52. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
  53. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
  54. package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
  55. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
  56. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
  57. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
  58. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
  59. package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
  60. package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
  61. package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
  62. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
  63. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
  64. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
  65. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
  66. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
  67. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
  68. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
  69. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
  70. package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
  71. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
  72. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
  73. package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
  74. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
  75. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
  76. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  77. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  78. package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
  79. package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
  80. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
  81. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
  82. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  83. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  84. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  85. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  86. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  87. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  88. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  89. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  90. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  91. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  92. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  93. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  94. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  95. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  96. package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
  97. package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
  98. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  99. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  100. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  101. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  102. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  103. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  104. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  105. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  106. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  107. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  108. package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
  109. package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
  110. package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
  111. package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
  112. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  113. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  114. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  115. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  116. package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
  117. package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  118. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
  119. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  120. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
  121. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
  122. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  123. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  124. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
  125. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
  126. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
  127. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  128. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
  129. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  130. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
  131. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  132. package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  133. package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  134. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
  135. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  136. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  137. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  138. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  139. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  140. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  141. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  142. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
  143. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  144. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
  145. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
  146. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
  147. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
  148. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  149. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  150. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  151. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  152. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  153. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  154. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  155. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  156. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  157. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  158. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
  159. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  160. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  161. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  162. package/dist/docs/building-with-agents.html +44 -48
  163. package/dist/docs/building-with-agents.md +94 -82
  164. package/dist/docs/deployment.html +59 -78
  165. package/dist/docs/deployment.md +117 -363
  166. package/dist/docs/evals.html +85 -224
  167. package/dist/docs/evals.md +149 -673
  168. package/dist/docs/guides/agent-to-agent.html +74 -47
  169. package/dist/docs/guides/agent-to-agent.md +128 -46
  170. package/dist/docs/guides/bitbucket.html +179 -44
  171. package/dist/docs/guides/bitbucket.md +249 -48
  172. package/dist/docs/guides/cloud-agents.html +46 -40
  173. package/dist/docs/guides/cloud-agents.md +119 -66
  174. package/dist/docs/guides/convert-automation.html +80 -49
  175. package/dist/docs/guides/convert-automation.md +156 -147
  176. package/dist/docs/guides/github.html +184 -92
  177. package/dist/docs/guides/github.md +260 -245
  178. package/dist/docs/guides/gitlab.html +184 -45
  179. package/dist/docs/guides/gitlab.md +249 -50
  180. package/dist/docs/guides/grokbot-agents.html +48 -41
  181. package/dist/docs/guides/grokbot-agents.md +99 -53
  182. package/dist/docs/guides/improve.html +48 -40
  183. package/dist/docs/guides/improve.md +111 -58
  184. package/dist/docs/guides/jev.html +248 -0
  185. package/dist/docs/guides/jev.md +348 -0
  186. package/dist/docs/guides/mcp-oauth.html +74 -52
  187. package/dist/docs/guides/mcp-oauth.md +111 -121
  188. package/dist/docs/guides/opentelemetry.html +63 -54
  189. package/dist/docs/guides/opentelemetry.md +96 -165
  190. package/dist/docs/guides/slack.html +83 -59
  191. package/dist/docs/guides/slack.md +157 -227
  192. package/dist/docs/guides/webhooks.html +97 -230
  193. package/dist/docs/guides/webhooks.md +154 -385
  194. package/dist/docs/hashmap.json +1 -1
  195. package/dist/docs/hillclimbing.html +44 -38
  196. package/dist/docs/hillclimbing.md +101 -55
  197. package/dist/docs/index.html +38 -38
  198. package/dist/docs/index.md +2 -0
  199. package/dist/docs/llms-full.txt +3490 -3146
  200. package/dist/docs/llms.txt +22 -18
  201. package/dist/docs/quickstart.html +37 -37
  202. package/dist/docs/reference/agent-config.html +37 -37
  203. package/dist/docs/reference/artifacts.html +38 -38
  204. package/dist/docs/reference/channels.html +37 -37
  205. package/dist/docs/reference/cli.html +39 -37
  206. package/dist/docs/reference/cli.md +2 -0
  207. package/dist/docs/reference/connections.html +38 -38
  208. package/dist/docs/reference/connections.md +1 -1
  209. package/dist/docs/reference/evals.html +116 -0
  210. package/dist/docs/reference/evals.md +293 -0
  211. package/dist/docs/reference/extensions.html +80 -84
  212. package/dist/docs/reference/extensions.md +131 -202
  213. package/dist/docs/reference/hooks.html +39 -39
  214. package/dist/docs/reference/hooks.md +34 -34
  215. package/dist/docs/reference/http-api.html +37 -37
  216. package/dist/docs/reference/instructions.html +37 -37
  217. package/dist/docs/reference/playground.html +37 -37
  218. package/dist/docs/reference/project-layout.html +37 -37
  219. package/dist/docs/reference/prompt.html +37 -37
  220. package/dist/docs/reference/schedules.html +37 -37
  221. package/dist/docs/reference/sessions.html +37 -37
  222. package/dist/docs/reference/skills.html +37 -37
  223. package/dist/docs/reference/subagents.html +38 -38
  224. package/dist/docs/reference/subagents.md +1 -1
  225. package/dist/docs/reference/tools.html +38 -38
  226. package/dist/docs/reference/tools.md +4 -0
  227. package/dist/docs/templates/agentic-owners.html +38 -38
  228. package/dist/docs/templates/pr-autofixer.html +37 -37
  229. package/dist/docs/templates/security-reviewer.html +38 -38
  230. package/dist/docs/templates/thermo-quality-review.html +62 -0
  231. package/dist/docs/templates/thermo-quality-review.md +75 -0
  232. package/dist/docs/templates/thermo-review.html +62 -0
  233. package/dist/docs/templates/thermo-review.md +74 -0
  234. package/dist/docs/templates/triage.html +37 -37
  235. package/dist/docs/troubleshooting.html +38 -38
  236. package/dist/docs/troubleshooting.md +97 -66
  237. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  238. package/dist/extensions/improve/extension.d.ts +3 -1
  239. package/dist/extensions/improve/extension.d.ts.map +1 -1
  240. package/dist/extensions/improve/extension.js +4 -2
  241. package/dist/extensions/improve/skills/yourself.js +1 -1
  242. package/dist/extensions/jev/extension.d.ts +43 -0
  243. package/dist/extensions/jev/extension.d.ts.map +1 -0
  244. package/dist/extensions/jev/extension.js +47 -0
  245. package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
  246. package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
  247. package/dist/extensions/jev/lib/evaluate.js +167 -0
  248. package/dist/extensions/jev/skills/gated-write.md +25 -0
  249. package/dist/extensions/jev/skills/questions.md +33 -0
  250. package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
  251. package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
  252. package/dist/extensions/jev/tools/evaluate.js +88 -0
  253. package/dist/extensions.d.ts +1 -1
  254. package/dist/extensions.d.ts.map +1 -1
  255. package/dist/extensions.js +2 -0
  256. package/dist/filesystem.d.ts +46 -2
  257. package/dist/filesystem.d.ts.map +1 -1
  258. package/dist/filesystem.js +149 -102
  259. package/dist/index.d.ts +2 -2
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +1 -1
  262. package/dist/internal/advertise-tools.d.ts.map +1 -1
  263. package/dist/internal/advertise-tools.js +6 -0
  264. package/dist/internal/cli-ax.d.ts +6 -0
  265. package/dist/internal/cli-ax.d.ts.map +1 -1
  266. package/dist/internal/cli-ax.js +72 -14
  267. package/dist/internal/continuation-identity.d.ts.map +1 -1
  268. package/dist/internal/continuation-identity.js +1 -0
  269. package/dist/internal/cursor-agent-template.d.ts +1 -1
  270. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  271. package/dist/internal/cursor-agent-template.js +2 -0
  272. package/dist/internal/discovery/connections.d.ts.map +1 -1
  273. package/dist/internal/discovery/connections.js +18 -0
  274. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  275. package/dist/internal/discovery/extensions.js +8 -4
  276. package/dist/internal/discovery/info.d.ts.map +1 -1
  277. package/dist/internal/discovery/info.js +1 -0
  278. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  279. package/dist/internal/filesystem/tools.js +2 -2
  280. package/dist/internal/filesystem/walk.d.ts +7 -4
  281. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  282. package/dist/internal/filesystem/walk.js +34 -11
  283. package/dist/internal/hosted-admission-adapter.d.ts +3 -0
  284. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  285. package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
  286. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  287. package/dist/internal/hosted-delivery-protocol.js +51 -1
  288. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  289. package/dist/internal/hosted-delivery.js +23 -25
  290. package/dist/internal/hosted-execution-diag.d.ts +12 -4
  291. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  292. package/dist/internal/hosted-execution-diag.js +26 -4
  293. package/dist/internal/hosted-execution-flush.d.ts +1 -0
  294. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  295. package/dist/internal/hosted-execution-flush.js +4 -2
  296. package/dist/internal/init-project.d.ts.map +1 -1
  297. package/dist/internal/init-project.js +4 -0
  298. package/dist/internal/server.d.ts.map +1 -1
  299. package/dist/internal/server.js +111 -48
  300. package/dist/internal/session-engine.d.ts +4 -1
  301. package/dist/internal/session-engine.d.ts.map +1 -1
  302. package/dist/internal/session-engine.js +39 -9
  303. package/dist/internal/skill-catalog.d.ts +28 -0
  304. package/dist/internal/skill-catalog.d.ts.map +1 -0
  305. package/dist/internal/skill-catalog.js +44 -0
  306. package/dist/playground/assets/index-DSMAewbx.css +1 -0
  307. package/dist/playground/assets/index-De_lpFxE.js +67 -0
  308. package/dist/playground/index.html +2 -2
  309. package/dist/types.d.ts +32 -3
  310. package/dist/types.d.ts.map +1 -1
  311. package/docs/README.md +2 -0
  312. package/docs/building-with-agents.md +96 -84
  313. package/docs/deployment.md +118 -364
  314. package/docs/evals.md +149 -673
  315. package/docs/guides/agent-to-agent.md +130 -48
  316. package/docs/guides/bitbucket.md +250 -49
  317. package/docs/guides/cloud-agents.md +119 -67
  318. package/docs/guides/convert-automation.md +157 -148
  319. package/docs/guides/github.md +261 -246
  320. package/docs/guides/gitlab.md +250 -51
  321. package/docs/guides/grokbot-agents.md +100 -55
  322. package/docs/guides/improve.md +112 -59
  323. package/docs/guides/jev.md +353 -0
  324. package/docs/guides/mcp-oauth.md +112 -122
  325. package/docs/guides/opentelemetry.md +97 -166
  326. package/docs/guides/slack.md +158 -228
  327. package/docs/guides/webhooks.md +155 -386
  328. package/docs/hillclimbing.md +102 -56
  329. package/docs/reference/cli.md +2 -0
  330. package/docs/reference/connections.md +1 -1
  331. package/docs/reference/evals.md +298 -0
  332. package/docs/reference/extensions.md +132 -203
  333. package/docs/reference/hooks.md +34 -34
  334. package/docs/reference/subagents.md +1 -1
  335. package/docs/reference/tools.md +4 -0
  336. package/docs/templates/thermo-quality-review.md +80 -0
  337. package/docs/templates/thermo-review.md +79 -0
  338. package/docs/troubleshooting.md +98 -67
  339. package/package.json +8 -1
  340. package/skills/github/SKILL.md +21 -13
  341. package/src/bin/agent-serve.ts +24 -3
  342. package/src/channels/checks.ts +8 -0
  343. package/src/channels/github/github-channel.ts +29 -19
  344. package/src/channels/origin/checks.ts +3 -1
  345. package/src/channels/slack/agentic-delivery.ts +2 -0
  346. package/src/channels/slack/dispatch.ts +131 -4
  347. package/src/channels/slack/placeholder.ts +51 -0
  348. package/src/channels/slack/slack-channel.ts +9 -2
  349. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  350. package/src/extensions/improve/extension.ts +4 -2
  351. package/src/extensions/improve/skills/yourself.ts +1 -1
  352. package/src/extensions/jev/extension.ts +95 -0
  353. package/src/extensions/jev/lib/evaluate.ts +289 -0
  354. package/src/extensions/jev/skills/gated-write.md +25 -0
  355. package/src/extensions/jev/skills/questions.md +33 -0
  356. package/src/extensions/jev/tools/evaluate.ts +90 -0
  357. package/src/extensions.ts +2 -0
  358. package/src/filesystem.ts +168 -65
  359. package/src/index.ts +3 -0
  360. package/src/internal/advertise-tools.ts +6 -0
  361. package/src/internal/cli-ax.ts +88 -15
  362. package/src/internal/continuation-identity.ts +1 -0
  363. package/src/internal/cursor-agent-template.ts +2 -0
  364. package/src/internal/discovery/connections.ts +21 -0
  365. package/src/internal/discovery/extensions.ts +12 -4
  366. package/src/internal/discovery/info.ts +1 -0
  367. package/src/internal/filesystem/tools.ts +2 -0
  368. package/src/internal/filesystem/walk.ts +60 -15
  369. package/src/internal/hosted-admission-adapter.ts +3 -0
  370. package/src/internal/hosted-delivery-protocol.ts +82 -1
  371. package/src/internal/hosted-delivery.ts +23 -0
  372. package/src/internal/hosted-execution-diag.ts +33 -4
  373. package/src/internal/hosted-execution-flush.ts +4 -0
  374. package/src/internal/init-project.ts +4 -0
  375. package/src/internal/server.ts +130 -53
  376. package/src/internal/session-engine.ts +46 -8
  377. package/src/internal/skill-catalog.ts +69 -0
  378. package/src/types.ts +33 -3
  379. package/templates/thermo-quality-review/README.md +35 -0
  380. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  381. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  382. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  383. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  384. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  385. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  386. package/templates/thermo-quality-review/package.json +18 -0
  387. package/templates/thermo-quality-review/tsconfig.json +12 -0
  388. package/templates/thermo-review/README.md +35 -0
  389. package/templates/thermo-review/agent/agent.ts +8 -0
  390. package/templates/thermo-review/agent/channels/github.ts +42 -0
  391. package/templates/thermo-review/agent/instructions.md +40 -0
  392. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  393. package/templates/thermo-review/evals/evals.config.ts +5 -0
  394. package/templates/thermo-review/evals/review.eval.ts +53 -0
  395. package/templates/thermo-review/package.json +18 -0
  396. package/templates/thermo-review/tsconfig.json +12 -0
  397. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
  398. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
  399. package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
  400. package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
  401. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
  402. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
  403. package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
  404. package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
  405. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
  406. package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
  407. package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
  408. package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
  409. package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
  410. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
  411. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
  412. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
  413. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
  414. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
  415. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
  416. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
  417. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
  418. package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
  419. package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
  420. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
  421. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
  422. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
  423. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
  424. package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
  425. package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
  426. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
  427. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
  428. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
  429. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
  430. package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
  431. package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
  432. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
  433. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
  434. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
  435. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
  436. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
  437. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
  438. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
  439. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
  440. package/dist/playground/assets/index-BLlKgZtI.css +0 -1
  441. package/dist/playground/assets/index-CDS5p9sR.js +0 -67
package/src/filesystem.ts CHANGED
@@ -40,6 +40,7 @@ export {
40
40
 
41
41
  import { mergeSorted } from "./internal/filesystem/merge.js";
42
42
  import {
43
+ isExcludedPath,
43
44
  listFilesFromPaths,
44
45
  mergeSortedByPath,
45
46
  statFromFilePaths,
@@ -115,6 +116,41 @@ export interface GrepResult {
115
116
  line: string;
116
117
  }
117
118
 
119
+ /**
120
+ * Optional filters for {@link FileSystem.list}.
121
+ *
122
+ * `excludes` are ignore globs in the same language as native LS
123
+ * `ignore`: a slash-free pattern matches at any depth, and a
124
+ * directory match drops that tree. Implementations that can push
125
+ * them to a backend should; others filter the yielded files.
126
+ * Native LS still applies `ignore` after `list` so a mount that
127
+ * ignores this argument still honors it.
128
+ */
129
+ export interface ListOptions {
130
+ excludes?: readonly string[];
131
+ /**
132
+ * Optional result cap, lexicographic. Omitted means no
133
+ * FileSystem-level cap. `0` yields nothing.
134
+ */
135
+ limit?: number;
136
+ }
137
+
138
+ /**
139
+ * Optional filters for {@link FileSystem.glob}.
140
+ *
141
+ * `limit` is the same lexicographic cap as {@link ListOptions.limit}.
142
+ */
143
+ export interface GlobOptions {
144
+ limit?: number;
145
+ }
146
+
147
+ /**
148
+ * Default scan cap for synthesized LS / Glob and for Origin
149
+ * `ListRepoPaths` from `/repo`. Smaller than Origin's 10k default
150
+ * so a recursive listing does not materialize a huge response.
151
+ */
152
+ export const FILE_SYSTEM_SCAN_LIMIT = 1_000;
153
+
118
154
  /**
119
155
  * Content-search query. No `output_mode` or `offset` (those
120
156
  * belong to the native Grep tool).
@@ -126,6 +162,11 @@ export interface GrepResult {
126
162
  * only. A slash-free `glob` (`*.ts`) matches the basename at any
127
163
  * depth under `path`.
128
164
  *
165
+ * `excludes` are optional ignore globs (same language as
166
+ * {@link ListOptions.excludes}). Implementations that can push
167
+ * them to a backend should; others skip matching files. Native
168
+ * Grep has no ignore field; this is FileSystem-only pushdown.
169
+ *
129
170
  * `maxResults` is optional predicate pushdown: stop after this
130
171
  * many hits so a remote or large tree does not materialize a
131
172
  * full scan. Native Grep still applies `head_limit` / `offset`
@@ -135,6 +176,7 @@ export interface GrepQuery {
135
176
  pattern: string;
136
177
  path?: string;
137
178
  glob?: string;
179
+ excludes?: readonly string[];
138
180
  caseInsensitive?: boolean;
139
181
  maxResults?: number;
140
182
  }
@@ -240,8 +282,11 @@ export interface FileSystem {
240
282
  *
241
283
  * Errors: none. A missing or file-path prefix yields an empty
242
284
  * iterator. Do not throw.
285
+ *
286
+ * `options.excludes` / `options.limit` are optional pushdown.
287
+ * See {@link ListOptions}.
243
288
  */
244
- list(prefix?: string): AsyncIterable<DirEntry>;
289
+ list(prefix?: string, options?: ListOptions): AsyncIterable<DirEntry>;
245
290
  /**
246
291
  * Existence probe: exact file, a prefix that has files, or
247
292
  * missing. Does not throw. Native LS lists first and calls
@@ -260,8 +305,15 @@ export interface FileSystem {
260
305
  * Errors: none. A missing `dir` or a pattern that matches
261
306
  * nothing yields an empty iterator. Do not throw for a bad
262
307
  * glob (it matches nothing).
308
+ *
309
+ * `options.limit` is optional result-cap pushdown. See
310
+ * {@link GlobOptions}.
263
311
  */
264
- glob(pattern: string, dir?: string): AsyncIterable<DirEntry>;
312
+ glob(
313
+ pattern: string,
314
+ dir?: string,
315
+ options?: GlobOptions
316
+ ): AsyncIterable<DirEntry>;
265
317
  /**
266
318
  * Read the whole file. Text files return a string. Image
267
319
  * bytes (`jpeg` / `png` / `gif` / `webp`) return a
@@ -1141,14 +1193,15 @@ export function tempFs(
1141
1193
  }
1142
1194
 
1143
1195
  const listed = {
1144
- list(prefix?: string) {
1196
+ list(prefix?: string, options?: ListOptions) {
1145
1197
  return listFilesFromPaths(
1146
1198
  [...store.entries()].map(([filePath, content]) => ({
1147
1199
  path: filePath,
1148
1200
  size:
1149
1201
  typeof content === "string" ? content.length : content.byteLength,
1150
1202
  })),
1151
- prefix
1203
+ prefix,
1204
+ options
1152
1205
  );
1153
1206
  },
1154
1207
  async stat(path: string) {
@@ -1157,8 +1210,8 @@ export function tempFs(
1157
1210
  };
1158
1211
 
1159
1212
  return {
1160
- list(prefix) {
1161
- return listed.list(prefix);
1213
+ list(prefix, options) {
1214
+ return listed.list(prefix, options);
1162
1215
  },
1163
1216
  async stat(path) {
1164
1217
  return listed.stat(path);
@@ -1195,6 +1248,9 @@ export function tempFs(
1195
1248
  ) {
1196
1249
  return;
1197
1250
  }
1251
+ if (isExcludedPath(scope, query.excludes)) {
1252
+ return;
1253
+ }
1198
1254
  yield* grepFileContent({
1199
1255
  path: scope,
1200
1256
  content: fileSystemText(exact),
@@ -1203,7 +1259,10 @@ export function tempFs(
1203
1259
  return;
1204
1260
  }
1205
1261
  for await (const entry of listed.list(
1206
- scope === "/" ? undefined : scope
1262
+ scope === "/" ? undefined : scope,
1263
+ query.excludes === undefined
1264
+ ? undefined
1265
+ : { excludes: query.excludes }
1207
1266
  )) {
1208
1267
  if (
1209
1268
  query.glob !== undefined &&
@@ -1225,12 +1284,13 @@ export function tempFs(
1225
1284
  }
1226
1285
  }
1227
1286
  },
1228
- async *glob(pattern, dir) {
1287
+ async *glob(pattern, dir, options) {
1229
1288
  const scope =
1230
1289
  dir === undefined || dir === "" ? "/" : normalizeFsPath(dir);
1231
1290
  yield* globFromList(listed.list(scope === "/" ? undefined : scope), {
1232
1291
  pattern,
1233
1292
  dir: scope,
1293
+ ...(options?.limit === undefined ? {} : { limit: options.limit }),
1234
1294
  });
1235
1295
  },
1236
1296
  async write(inputPath, contents) {
@@ -1319,12 +1379,19 @@ export function localFileSystem(options: { cwd: string }): FileSystem {
1319
1379
  path.isAbsolute(input) ? path.resolve(input) : path.resolve(cwd, input);
1320
1380
 
1321
1381
  return {
1322
- async *list(prefix) {
1323
- const dirPath =
1324
- prefix === undefined || prefix === "" || prefix === "."
1325
- ? cwd
1326
- : resolvePath(prefix);
1327
- yield* listLocalFiles(dirPath);
1382
+ async *list(prefix, options) {
1383
+ yield* limitResults(uncapped(), options?.limit);
1384
+ async function* uncapped() {
1385
+ const dirPath =
1386
+ prefix === undefined || prefix === "" || prefix === "."
1387
+ ? cwd
1388
+ : resolvePath(prefix);
1389
+ for await (const entry of listLocalFiles(dirPath)) {
1390
+ if (!isExcludedPath(entry.path, options?.excludes)) {
1391
+ yield entry;
1392
+ }
1393
+ }
1394
+ }
1328
1395
  },
1329
1396
  async stat(probePath) {
1330
1397
  const filePath = resolvePath(probePath);
@@ -1374,6 +1441,9 @@ export function localFileSystem(options: { cwd: string }): FileSystem {
1374
1441
  ) {
1375
1442
  continue;
1376
1443
  }
1444
+ if (isExcludedPath(filePath, query.excludes)) {
1445
+ continue;
1446
+ }
1377
1447
  let content: string;
1378
1448
  try {
1379
1449
  content = await readFile(filePath, "utf8");
@@ -1384,12 +1454,13 @@ export function localFileSystem(options: { cwd: string }): FileSystem {
1384
1454
  }
1385
1455
  }
1386
1456
  },
1387
- async *glob(pattern, dir) {
1457
+ async *glob(pattern, dir, options) {
1388
1458
  const dirPath =
1389
1459
  dir === undefined || dir === "" || dir === "." ? cwd : resolvePath(dir);
1390
1460
  yield* globFromList(listLocalFiles(dirPath), {
1391
1461
  pattern,
1392
1462
  dir: dirPath,
1463
+ ...(options?.limit === undefined ? {} : { limit: options.limit }),
1393
1464
  });
1394
1465
  },
1395
1466
  async write(inputPath, contents) {
@@ -1586,24 +1657,29 @@ export function unionFs(mounts: Record<string, FileSystem>): FileSystem {
1586
1657
  value === undefined || value === "" || value === "/";
1587
1658
 
1588
1659
  return {
1589
- async *list(prefix) {
1590
- if (isRootPath(prefix)) {
1591
- yield* mergeSortedByPath(
1592
- entries.map(mount => mapMountEntries(mount.fs.list(), mount.prefix)),
1593
- { unique: true }
1660
+ async *list(prefix, options) {
1661
+ yield* limitResults(uncapped(), options?.limit);
1662
+ async function* uncapped() {
1663
+ if (isRootPath(prefix)) {
1664
+ yield* mergeSortedByPath(
1665
+ entries.map(mount =>
1666
+ mapMountEntries(mount.fs.list(undefined, options), mount.prefix)
1667
+ ),
1668
+ { unique: true }
1669
+ );
1670
+ return;
1671
+ }
1672
+ const path = normalizeFsPath(prefix ?? "/");
1673
+ const mount = longestMount(path, entries);
1674
+ if (mount === undefined) {
1675
+ return;
1676
+ }
1677
+ const childPath = toChildPath(path, mount.prefix);
1678
+ yield* mapMountEntries(
1679
+ mount.fs.list(childPath === "/" ? undefined : childPath, options),
1680
+ mount.prefix
1594
1681
  );
1595
- return;
1596
1682
  }
1597
- const path = normalizeFsPath(prefix ?? "/");
1598
- const mount = longestMount(path, entries);
1599
- if (mount === undefined) {
1600
- return;
1601
- }
1602
- const childPath = toChildPath(path, mount.prefix);
1603
- yield* mapMountEntries(
1604
- mount.fs.list(childPath === "/" ? undefined : childPath),
1605
- mount.prefix
1606
- );
1607
1683
  },
1608
1684
  async stat(path) {
1609
1685
  const normalized = normalizeFsPath(path);
@@ -1682,27 +1758,37 @@ export function unionFs(mounts: Record<string, FileSystem>): FileSystem {
1682
1758
  yield* mergeSorted(sources, { compare: compareSearchResult });
1683
1759
  }
1684
1760
  },
1685
- async *glob(pattern, dir) {
1686
- const scope =
1687
- dir === undefined || dir === "" ? "/" : normalizeFsPath(dir);
1688
- if (scope === "/") {
1689
- yield* mergeSortedByPath(
1690
- entries.map(mount =>
1691
- mapMountEntries(mount.fs.glob(pattern), mount.prefix)
1761
+ async *glob(pattern, dir, options) {
1762
+ yield* limitResults(uncapped(), options?.limit);
1763
+ async function* uncapped() {
1764
+ const scope =
1765
+ dir === undefined || dir === "" ? "/" : normalizeFsPath(dir);
1766
+ if (scope === "/") {
1767
+ yield* mergeSortedByPath(
1768
+ entries.map(mount =>
1769
+ mapMountEntries(
1770
+ mount.fs.glob(pattern, undefined, options),
1771
+ mount.prefix
1772
+ )
1773
+ ),
1774
+ { unique: true }
1775
+ );
1776
+ return;
1777
+ }
1778
+ const mount = longestMount(scope, entries);
1779
+ if (mount === undefined) {
1780
+ return;
1781
+ }
1782
+ const childPath = toChildPath(scope, mount.prefix);
1783
+ yield* mapMountEntries(
1784
+ mount.fs.glob(
1785
+ pattern,
1786
+ childPath === "/" ? undefined : childPath,
1787
+ options
1692
1788
  ),
1693
- { unique: true }
1789
+ mount.prefix
1694
1790
  );
1695
- return;
1696
- }
1697
- const mount = longestMount(scope, entries);
1698
- if (mount === undefined) {
1699
- return;
1700
1791
  }
1701
- const childPath = toChildPath(scope, mount.prefix);
1702
- yield* mapMountEntries(
1703
- mount.fs.glob(pattern, childPath === "/" ? undefined : childPath),
1704
- mount.prefix
1705
- );
1706
1792
  },
1707
1793
  };
1708
1794
  }
@@ -1789,14 +1875,17 @@ export function overlayFs(layers: readonly FileSystem[]): FileSystem {
1789
1875
  };
1790
1876
 
1791
1877
  return {
1792
- async *list(prefix) {
1878
+ async *list(prefix, options) {
1793
1879
  const { streams, failure, served } = await walkLayers(layer =>
1794
- layer.list(prefix)
1880
+ layer.list(prefix, options)
1795
1881
  );
1796
1882
  if (!served && failure !== undefined) {
1797
1883
  throw failure;
1798
1884
  }
1799
- yield* mergeSortedByPath(streams, { unique: true });
1885
+ yield* limitResults(
1886
+ mergeSortedByPath(streams, { unique: true }),
1887
+ options?.limit
1888
+ );
1800
1889
  },
1801
1890
  async stat(path) {
1802
1891
  let failure: unknown;
@@ -1817,14 +1906,17 @@ export function overlayFs(layers: readonly FileSystem[]): FileSystem {
1817
1906
  }
1818
1907
  return { kind: "missing" } as const;
1819
1908
  },
1820
- async *glob(pattern, dir) {
1909
+ async *glob(pattern, dir, options) {
1821
1910
  const { streams, failure, served } = await walkLayers(layer =>
1822
- layer.glob(pattern, dir)
1911
+ layer.glob(pattern, dir, options)
1823
1912
  );
1824
1913
  if (!served && failure !== undefined) {
1825
1914
  throw failure;
1826
1915
  }
1827
- yield* mergeSortedByPath(streams, { unique: true });
1916
+ yield* limitResults(
1917
+ mergeSortedByPath(streams, { unique: true }),
1918
+ options?.limit
1919
+ );
1828
1920
  },
1829
1921
  async read(path) {
1830
1922
  let failure: unknown;
@@ -1902,14 +1994,15 @@ export function hostFs(files: HostFilesApi, scope: HostFilesScope): FileSystem {
1902
1994
  const readEtags = new Map<string, string>();
1903
1995
 
1904
1996
  const listed = {
1905
- async *list(prefix?: string) {
1997
+ async *list(prefix?: string, options?: ListOptions) {
1906
1998
  const entries = await files.list(undefined, callOptions);
1907
1999
  yield* listFilesFromPaths(
1908
2000
  entries.map(entry => ({
1909
2001
  path: normalizeFsPath(entry.path),
1910
2002
  size: entry.size,
1911
2003
  })),
1912
- prefix
2004
+ prefix,
2005
+ options
1913
2006
  );
1914
2007
  },
1915
2008
  async stat(path: string) {
@@ -1979,8 +2072,8 @@ export function hostFs(files: HostFilesApi, scope: HostFilesScope): FileSystem {
1979
2072
  };
1980
2073
 
1981
2074
  return {
1982
- list(prefix) {
1983
- return listed.list(prefix);
2075
+ list(prefix, options) {
2076
+ return listed.list(prefix, options);
1984
2077
  },
1985
2078
  async stat(path) {
1986
2079
  return listed.stat(path);
@@ -2010,6 +2103,9 @@ export function hostFs(files: HostFilesApi, scope: HostFilesScope): FileSystem {
2010
2103
  ) {
2011
2104
  return;
2012
2105
  }
2106
+ if (isExcludedPath(scopePath, query.excludes)) {
2107
+ return;
2108
+ }
2013
2109
  yield* grepFileContent({
2014
2110
  path: scopePath,
2015
2111
  content: await readText(scopePath),
@@ -2018,7 +2114,10 @@ export function hostFs(files: HostFilesApi, scope: HostFilesScope): FileSystem {
2018
2114
  return;
2019
2115
  }
2020
2116
  for await (const entry of listed.list(
2021
- scopePath === "/" ? undefined : scopePath
2117
+ scopePath === "/" ? undefined : scopePath,
2118
+ query.excludes === undefined
2119
+ ? undefined
2120
+ : { excludes: query.excludes }
2022
2121
  )) {
2023
2122
  if (
2024
2123
  query.glob !== undefined &&
@@ -2036,12 +2135,13 @@ export function hostFs(files: HostFilesApi, scope: HostFilesScope): FileSystem {
2036
2135
  }
2037
2136
  }
2038
2137
  },
2039
- async *glob(pattern, dir) {
2138
+ async *glob(pattern, dir, options) {
2040
2139
  const dirPath =
2041
2140
  dir === undefined || dir === "" ? "/" : normalizeFsPath(dir);
2042
2141
  yield* globFromList(listed.list(dirPath === "/" ? undefined : dirPath), {
2043
2142
  pattern,
2044
2143
  dir: dirPath,
2144
+ ...(options?.limit === undefined ? {} : { limit: options.limit }),
2045
2145
  });
2046
2146
  },
2047
2147
  async write(inputPath, contents) {
@@ -2062,11 +2162,14 @@ export function hostFs(files: HostFilesApi, scope: HostFilesScope): FileSystem {
2062
2162
 
2063
2163
  async function* globFromList(
2064
2164
  source: AsyncIterable<DirEntry>,
2065
- options: { pattern: string; dir: string }
2165
+ options: { pattern: string; dir: string; limit?: number }
2066
2166
  ): AsyncGenerator<DirEntry> {
2067
- for await (const entry of source) {
2068
- if (pathMatchesGlob(entry.path, options.dir, options.pattern)) {
2069
- yield entry;
2167
+ yield* limitResults(uncapped(), options.limit);
2168
+ async function* uncapped() {
2169
+ for await (const entry of source) {
2170
+ if (pathMatchesGlob(entry.path, options.dir, options.pattern)) {
2171
+ yield entry;
2172
+ }
2070
2173
  }
2071
2174
  }
2072
2175
  }
package/src/index.ts CHANGED
@@ -69,8 +69,10 @@ export type {
69
69
  EditResult,
70
70
  FileInfo,
71
71
  FileSystem,
72
+ GlobOptions,
72
73
  GrepQuery,
73
74
  GrepResult,
75
+ ListOptions,
74
76
  SearchQuery,
75
77
  SearchResult,
76
78
  } from "./filesystem.js";
@@ -78,6 +80,7 @@ export {
78
80
  DeleteNotSupportedError,
79
81
  EditError,
80
82
  emptyFs,
83
+ FILE_SYSTEM_SCAN_LIMIT,
81
84
  FileNotFoundError,
82
85
  hostFs,
83
86
  InvalidGrepPatternError,
@@ -163,6 +163,9 @@ export async function resolveAdvertisedTools(args: {
163
163
  args.onConnectionError(connection.name, listing.error);
164
164
  continue;
165
165
  }
166
+ if (connection.optional === true) {
167
+ continue;
168
+ }
166
169
  throw new Error(
167
170
  `Failed to list tools on advertised connection "${connection.name}": ${describeError(listing.error)}`,
168
171
  { cause: listing.error }
@@ -181,6 +184,9 @@ export async function resolveAdvertisedTools(args: {
181
184
  args.onConnectionError(connection.name, error);
182
185
  continue;
183
186
  }
187
+ if (connection.optional === true) {
188
+ continue;
189
+ }
184
190
  throw error;
185
191
  }
186
192
  const intended = listed.filter(
@@ -790,6 +790,41 @@ async function cmdHostedSession(
790
790
  }
791
791
  }
792
792
 
793
+ /**
794
+ * Shared deterministic-route fetch (`call`, `skill`): engine headers,
795
+ * bearer auth, and JSON. The payload is `undefined` when the body does
796
+ * not decode; callers print `invalid_response` and fail.
797
+ */
798
+ async function fetchAgentJson(
799
+ target: ResolvedAgentTarget,
800
+ path: string,
801
+ args: { method?: string; body?: string; bearerToken?: string } = {}
802
+ ): Promise<{ response: Response; payload: unknown }> {
803
+ const headers: Record<string, string> = {};
804
+ if (target.headers !== undefined) {
805
+ Object.assign(headers, target.headers);
806
+ }
807
+ if (args.body !== undefined) {
808
+ headers["content-type"] = "application/json";
809
+ }
810
+ if (args.bearerToken !== undefined) {
811
+ headers.authorization = `Bearer ${args.bearerToken}`;
812
+ }
813
+ const response = await fetch(`${target.agentUrl}${path}`, {
814
+ method: args.method,
815
+ headers,
816
+ body: args.body,
817
+ });
818
+ const payload: unknown = await response.json().catch(() => undefined);
819
+ return { response, payload };
820
+ }
821
+
822
+ function printInvalidResponse(): void {
823
+ console.log(
824
+ JSON.stringify({ ok: false, error: "invalid_response" }, null, 2)
825
+ );
826
+ }
827
+
793
828
  /**
794
829
  * `agent-sdk call <tool>` — deterministic tool invocation over
795
830
  * `POST /v1/tools/:toolName` (ephemeral local server unless --url).
@@ -816,30 +851,23 @@ export async function cmdCall(options: AxCliOptions): Promise<number> {
816
851
 
817
852
  const target = await resolveTarget(options);
818
853
  try {
819
- const headers: Record<string, string> = {
820
- "content-type": "application/json",
821
- };
822
- if (target.headers !== undefined) {
823
- Object.assign(headers, target.headers);
824
- }
825
- if (options.bearerToken !== undefined) {
826
- headers.authorization = `Bearer ${options.bearerToken}`;
827
- }
828
854
  const body: { input: unknown; sessionId?: string } = { input };
829
855
  if (options.sessionId !== undefined) {
830
856
  body.sessionId = options.sessionId;
831
857
  }
832
- const response = await fetch(
833
- `${target.agentUrl}/v1/tools/${encodeURIComponent(toolName)}`,
858
+ const { response, payload } = await fetchAgentJson(
859
+ target,
860
+ `/v1/tools/${encodeURIComponent(toolName)}`,
834
861
  {
835
862
  method: "POST",
836
- headers,
837
863
  body: JSON.stringify(body),
864
+ bearerToken: options.bearerToken,
838
865
  }
839
866
  );
840
- const payload: unknown = await response
841
- .json()
842
- .catch(() => ({ ok: false, error: "invalid_response" }));
867
+ if (payload === undefined) {
868
+ printInvalidResponse();
869
+ return 1;
870
+ }
843
871
  console.log(JSON.stringify(payload, null, 2));
844
872
  const ok =
845
873
  response.ok &&
@@ -854,6 +882,51 @@ export async function cmdCall(options: AxCliOptions): Promise<number> {
854
882
  }
855
883
  }
856
884
 
885
+ /**
886
+ * `agent-sdk skill <name>` — deterministic skill read over
887
+ * `GET /v1/skills/:skillName` (ephemeral local server unless --url).
888
+ * `--text` prints the rendered SKILL.md instead of JSON.
889
+ */
890
+ export async function cmdSkill(
891
+ skillName: string | undefined,
892
+ options: AxCliOptions
893
+ ): Promise<number> {
894
+ if (skillName === undefined || skillName === "") {
895
+ process.stderr.write(
896
+ `Usage: ${CLI_COMMAND_NAME} skill <name> [--dir <path> | --url <baseUrl> | --prod]\n`
897
+ );
898
+ return 2;
899
+ }
900
+
901
+ const target = await resolveTarget(options);
902
+ try {
903
+ const { response, payload } = await fetchAgentJson(
904
+ target,
905
+ `/v1/skills/${encodeURIComponent(skillName)}`,
906
+ { bearerToken: options.bearerToken }
907
+ );
908
+ if (payload === undefined) {
909
+ printInvalidResponse();
910
+ return 1;
911
+ }
912
+ if (options.text === true && response.ok) {
913
+ const skillMd = (payload as { skillMd?: unknown }).skillMd;
914
+ if (typeof skillMd !== "string") {
915
+ printInvalidResponse();
916
+ return 1;
917
+ }
918
+ process.stdout.write(skillMd.endsWith("\n") ? skillMd : `${skillMd}\n`);
919
+ return 0;
920
+ }
921
+ console.log(JSON.stringify(payload, null, 2));
922
+ return response.ok ? 0 : 1;
923
+ } finally {
924
+ if (target.close !== undefined) {
925
+ await target.close();
926
+ }
927
+ }
928
+ }
929
+
857
930
  export async function cmdTrajectory(options: AxCliOptions): Promise<number> {
858
931
  if (typeof options.events !== "string") {
859
932
  die(
@@ -139,6 +139,7 @@ export const BUILTINS: readonly ContinuationBuiltin[] = [
139
139
  "pull_request.head_ref.pushed",
140
140
  "pull_request.base_ref.updated",
141
141
  "pull_request.closed",
142
+ "pull_request.reopened",
142
143
  "pull_request.merged",
143
144
  "pull_request.comment.created",
144
145
  "pull_request.review.submitted",
@@ -11,6 +11,8 @@ const TEMPLATE_NAMES = [
11
11
  "pr-autofixer",
12
12
  "security-help",
13
13
  "security-reviewer",
14
+ "thermo-quality-review",
15
+ "thermo-review",
14
16
  "triage-linear",
15
17
  "triage-jira",
16
18
  ] as const;
@@ -311,6 +311,26 @@ export async function compileConnection(
311
311
  });
312
312
  return undefined;
313
313
  }
314
+ if (
315
+ connection.optional !== undefined &&
316
+ typeof connection.optional !== "boolean"
317
+ ) {
318
+ ctx.diagnostics.push({
319
+ severity: "error",
320
+ path: displayPath(ctx, entryPath),
321
+ message: "MCP connection `optional` must be a boolean.",
322
+ });
323
+ return undefined;
324
+ }
325
+ if (connection.optional === true && connection.advertiseTools !== true) {
326
+ ctx.diagnostics.push({
327
+ severity: "error",
328
+ path: displayPath(ctx, entryPath),
329
+ message:
330
+ "MCP connection `optional` skips advertised listing failures; set `advertiseTools: true` or drop `optional`.",
331
+ });
332
+ return undefined;
333
+ }
314
334
  const parsedEffects = parseConnectionEffects(connection.effects);
315
335
  if (!parsedEffects.ok) {
316
336
  ctx.diagnostics.push({
@@ -471,6 +491,7 @@ export async function compileConnection(
471
491
  description: connection.description,
472
492
  auth: connection.auth,
473
493
  advertiseTools: connection.advertiseTools,
494
+ optional: connection.optional,
474
495
  effects: parsedEffects.value,
475
496
  tools: parsedTools.value,
476
497
  disallowedTools: parsedDisallowed.value,