@cursor/july 0.1.111 → 0.1.112

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 (383) hide show
  1. package/dist/bin/agent-serve.js +18 -1
  2. package/dist/channels/github/github-channel.d.ts +29 -19
  3. package/dist/channels/github/github-channel.d.ts.map +1 -1
  4. package/dist/channels/github/github-channel.js +29 -19
  5. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  6. package/dist/channels/slack/agentic-delivery.js +2 -0
  7. package/dist/channels/slack/dispatch.d.ts +11 -1
  8. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  9. package/dist/channels/slack/dispatch.js +142 -39
  10. package/dist/channels/slack/placeholder.d.ts +26 -0
  11. package/dist/channels/slack/placeholder.d.ts.map +1 -1
  12. package/dist/channels/slack/placeholder.js +28 -0
  13. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  14. package/dist/channels/slack/slack-channel.js +9 -16
  15. package/dist/docs/404.html +2 -2
  16. package/dist/docs/assets/{app.Drol6mi6.js → app.DxTdhphC.js} +4 -4
  17. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  18. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  19. package/dist/docs/assets/chunks/@localSearchIndexroot.QmjDU6Jh.js +1 -0
  20. package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.CR3KTF0X.js} +1 -1
  21. package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CVVqBOdS.js} +1 -1
  22. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CJHGP4ki.js} +1 -1
  23. package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.r7UVVRBP.js} +1 -1
  24. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.DKmMaTre.js} +1 -1
  25. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.DDJsntUO.js} +1 -1
  26. package/dist/docs/assets/chunks/channel.BjpoSbz_.js +1 -0
  27. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.BK2rKt6W.js} +1 -1
  28. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.DRLV8RnF.js} +1 -1
  29. package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.DaKjxtb7.js} +1 -1
  30. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.C5sPCIT1.js} +1 -1
  31. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.CSGWyNTB.js} +1 -1
  32. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.D5tK9XEr.js} +1 -1
  33. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.BeZGd1UZ.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.U_tfWwQR.js} +1 -1
  35. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BgxOlMHw.js +1 -0
  36. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BgxOlMHw.js +1 -0
  37. package/dist/docs/assets/chunks/clone.DRuGBKZC.js +1 -0
  38. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVeRXIb6.js} +1 -1
  39. package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.BpKJAeRZ.js} +1 -1
  40. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.BQOtrd1Z.js} +1 -1
  41. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.CSDAhjPI.js} +1 -1
  42. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.Dpztst2S.js} +1 -1
  43. package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.qJHRizHR.js} +1 -1
  44. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.vbDotH3l.js} +1 -1
  45. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.CqS_ZQr4.js} +1 -1
  46. package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
  47. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.DTLdR4pN.js} +1 -1
  48. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.D04lnbnr.js} +1 -1
  49. package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.BlfqLJsM.js} +1 -1
  50. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.tAooImWA.js} +1 -1
  51. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.ClUsVqnJ.js} +1 -1
  52. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.C3tUgyCg.js} +1 -1
  53. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.CtD9-QCe.js} +1 -1
  54. package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.D38U-LnT.js} +1 -1
  55. package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.BJmssyhN.js} +1 -1
  56. package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.DNgXoouU.js} +1 -1
  57. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.Dcp6cxeu.js} +1 -1
  58. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.CLDw6zIs.js} +1 -1
  59. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.CYaeeY4c.js} +1 -1
  60. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.gMYuRpq2.js} +1 -1
  61. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CZqyHFbc.js} +1 -1
  62. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BTsCjUDN.js} +1 -1
  63. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.CftT9mLJ.js} +1 -1
  64. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.-43J68xB.js +1 -0
  65. package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.B_7J9ZsV.js} +2 -2
  66. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.DbU3WUNw.js} +1 -1
  67. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.ixsq-q2u.js} +1 -1
  68. package/dist/docs/assets/chunks/wardley-RL74JXVD.WRXz-Dux.js +162 -0
  69. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.C0ewvgbp.js} +1 -1
  70. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.nAEhF4bO.js} +1 -1
  71. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  72. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  73. package/dist/docs/assets/evals.md.BYvfZ-PO.js +72 -0
  74. package/dist/docs/assets/evals.md.BYvfZ-PO.lean.js +1 -0
  75. package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.js +30 -0
  76. package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.lean.js +1 -0
  77. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  78. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  79. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  80. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  81. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  82. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  83. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  84. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  85. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  86. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  87. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  88. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  89. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  90. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  91. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  92. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  93. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  94. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  95. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  96. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  97. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  98. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  99. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  100. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  101. package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
  102. package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
  103. package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
  104. package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
  105. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  106. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  107. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  108. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  109. package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
  110. package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  111. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
  112. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  113. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.CmyrlXfY.js} +1 -1
  114. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.CmyrlXfY.lean.js} +1 -1
  115. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  116. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  117. package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.js +58 -0
  118. package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.lean.js +1 -0
  119. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
  120. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  121. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
  122. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  123. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
  124. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  125. package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  126. package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  127. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
  128. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  129. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  130. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  131. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  132. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  133. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  134. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  135. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
  136. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  137. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.BHsSMMyO.js} +1 -1
  138. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.BHsSMMyO.lean.js} +1 -1
  139. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.BYzUTeVA.js} +1 -1
  140. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.BYzUTeVA.lean.js} +1 -1
  141. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  142. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  143. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  144. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  145. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  146. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  147. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  148. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  149. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  150. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  151. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
  152. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  153. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  154. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  155. package/dist/docs/building-with-agents.html +44 -48
  156. package/dist/docs/building-with-agents.md +94 -82
  157. package/dist/docs/deployment.html +59 -78
  158. package/dist/docs/deployment.md +117 -363
  159. package/dist/docs/evals.html +85 -224
  160. package/dist/docs/evals.md +146 -673
  161. package/dist/docs/guides/agent-to-agent.html +58 -42
  162. package/dist/docs/guides/agent-to-agent.md +112 -35
  163. package/dist/docs/guides/bitbucket.html +179 -44
  164. package/dist/docs/guides/bitbucket.md +249 -48
  165. package/dist/docs/guides/cloud-agents.html +46 -40
  166. package/dist/docs/guides/cloud-agents.md +119 -66
  167. package/dist/docs/guides/convert-automation.html +80 -49
  168. package/dist/docs/guides/convert-automation.md +156 -147
  169. package/dist/docs/guides/github.html +184 -92
  170. package/dist/docs/guides/github.md +260 -245
  171. package/dist/docs/guides/gitlab.html +184 -45
  172. package/dist/docs/guides/gitlab.md +249 -50
  173. package/dist/docs/guides/grokbot-agents.html +48 -41
  174. package/dist/docs/guides/grokbot-agents.md +99 -53
  175. package/dist/docs/guides/improve.html +48 -40
  176. package/dist/docs/guides/improve.md +111 -58
  177. package/dist/docs/guides/mcp-oauth.html +74 -52
  178. package/dist/docs/guides/mcp-oauth.md +111 -121
  179. package/dist/docs/guides/opentelemetry.html +63 -54
  180. package/dist/docs/guides/opentelemetry.md +96 -165
  181. package/dist/docs/guides/slack.html +83 -59
  182. package/dist/docs/guides/slack.md +157 -227
  183. package/dist/docs/guides/webhooks.html +97 -230
  184. package/dist/docs/guides/webhooks.md +154 -385
  185. package/dist/docs/hashmap.json +1 -1
  186. package/dist/docs/hillclimbing.html +44 -38
  187. package/dist/docs/hillclimbing.md +101 -55
  188. package/dist/docs/index.html +38 -38
  189. package/dist/docs/index.md +2 -0
  190. package/dist/docs/llms-full.txt +3082 -3104
  191. package/dist/docs/llms.txt +21 -18
  192. package/dist/docs/quickstart.html +37 -37
  193. package/dist/docs/reference/agent-config.html +37 -37
  194. package/dist/docs/reference/artifacts.html +38 -38
  195. package/dist/docs/reference/channels.html +37 -37
  196. package/dist/docs/reference/cli.html +39 -37
  197. package/dist/docs/reference/cli.md +2 -0
  198. package/dist/docs/reference/connections.html +37 -37
  199. package/dist/docs/reference/evals.html +116 -0
  200. package/dist/docs/reference/evals.md +293 -0
  201. package/dist/docs/reference/extensions.html +80 -84
  202. package/dist/docs/reference/extensions.md +127 -199
  203. package/dist/docs/reference/hooks.html +39 -39
  204. package/dist/docs/reference/hooks.md +34 -34
  205. package/dist/docs/reference/http-api.html +37 -37
  206. package/dist/docs/reference/instructions.html +37 -37
  207. package/dist/docs/reference/playground.html +37 -37
  208. package/dist/docs/reference/project-layout.html +37 -37
  209. package/dist/docs/reference/prompt.html +37 -37
  210. package/dist/docs/reference/schedules.html +37 -37
  211. package/dist/docs/reference/sessions.html +37 -37
  212. package/dist/docs/reference/skills.html +37 -37
  213. package/dist/docs/reference/subagents.html +37 -37
  214. package/dist/docs/reference/tools.html +37 -37
  215. package/dist/docs/templates/agentic-owners.html +38 -38
  216. package/dist/docs/templates/pr-autofixer.html +37 -37
  217. package/dist/docs/templates/security-reviewer.html +38 -38
  218. package/dist/docs/templates/thermo-quality-review.html +62 -0
  219. package/dist/docs/templates/thermo-quality-review.md +75 -0
  220. package/dist/docs/templates/thermo-review.html +62 -0
  221. package/dist/docs/templates/thermo-review.md +74 -0
  222. package/dist/docs/templates/triage.html +37 -37
  223. package/dist/docs/troubleshooting.html +38 -38
  224. package/dist/docs/troubleshooting.md +97 -66
  225. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  226. package/dist/extensions/improve/extension.d.ts +3 -1
  227. package/dist/extensions/improve/extension.d.ts.map +1 -1
  228. package/dist/extensions/improve/extension.js +4 -2
  229. package/dist/extensions/improve/skills/yourself.js +1 -1
  230. package/dist/filesystem.d.ts +46 -2
  231. package/dist/filesystem.d.ts.map +1 -1
  232. package/dist/filesystem.js +149 -102
  233. package/dist/index.d.ts +2 -2
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +1 -1
  236. package/dist/internal/cli-ax.d.ts +6 -0
  237. package/dist/internal/cli-ax.d.ts.map +1 -1
  238. package/dist/internal/cli-ax.js +72 -14
  239. package/dist/internal/continuation-identity.d.ts.map +1 -1
  240. package/dist/internal/continuation-identity.js +1 -0
  241. package/dist/internal/cursor-agent-template.d.ts +1 -1
  242. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  243. package/dist/internal/cursor-agent-template.js +2 -0
  244. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  245. package/dist/internal/filesystem/tools.js +2 -2
  246. package/dist/internal/filesystem/walk.d.ts +7 -4
  247. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  248. package/dist/internal/filesystem/walk.js +34 -11
  249. package/dist/internal/hosted-admission-adapter.d.ts +3 -0
  250. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  251. package/dist/internal/hosted-delivery-protocol.d.ts +17 -0
  252. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  253. package/dist/internal/hosted-delivery-protocol.js +50 -1
  254. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  255. package/dist/internal/hosted-delivery.js +8 -0
  256. package/dist/internal/init-project.d.ts.map +1 -1
  257. package/dist/internal/init-project.js +4 -0
  258. package/dist/internal/server.d.ts.map +1 -1
  259. package/dist/internal/server.js +94 -39
  260. package/dist/internal/session-engine.d.ts.map +1 -1
  261. package/dist/internal/session-engine.js +11 -5
  262. package/dist/internal/skill-catalog.d.ts +28 -0
  263. package/dist/internal/skill-catalog.d.ts.map +1 -0
  264. package/dist/internal/skill-catalog.js +44 -0
  265. package/dist/playground/assets/index-B1c1LeIf.js +67 -0
  266. package/dist/playground/assets/index-CK2LX3iD.css +1 -0
  267. package/dist/playground/index.html +2 -2
  268. package/dist/types.d.ts +9 -0
  269. package/dist/types.d.ts.map +1 -1
  270. package/docs/README.md +2 -0
  271. package/docs/building-with-agents.md +96 -84
  272. package/docs/deployment.md +118 -364
  273. package/docs/evals.md +147 -674
  274. package/docs/guides/agent-to-agent.md +113 -36
  275. package/docs/guides/bitbucket.md +250 -49
  276. package/docs/guides/cloud-agents.md +119 -67
  277. package/docs/guides/convert-automation.md +157 -148
  278. package/docs/guides/github.md +261 -246
  279. package/docs/guides/gitlab.md +250 -51
  280. package/docs/guides/grokbot-agents.md +100 -55
  281. package/docs/guides/improve.md +112 -59
  282. package/docs/guides/mcp-oauth.md +112 -122
  283. package/docs/guides/opentelemetry.md +97 -166
  284. package/docs/guides/slack.md +158 -228
  285. package/docs/guides/webhooks.md +155 -386
  286. package/docs/hillclimbing.md +102 -56
  287. package/docs/reference/cli.md +2 -0
  288. package/docs/reference/evals.md +298 -0
  289. package/docs/reference/extensions.md +128 -200
  290. package/docs/reference/hooks.md +34 -34
  291. package/docs/templates/thermo-quality-review.md +80 -0
  292. package/docs/templates/thermo-review.md +79 -0
  293. package/docs/troubleshooting.md +98 -67
  294. package/package.json +1 -1
  295. package/skills/github/SKILL.md +21 -13
  296. package/src/bin/agent-serve.ts +22 -0
  297. package/src/channels/github/github-channel.ts +29 -19
  298. package/src/channels/slack/agentic-delivery.ts +2 -0
  299. package/src/channels/slack/dispatch.ts +126 -4
  300. package/src/channels/slack/placeholder.ts +51 -0
  301. package/src/channels/slack/slack-channel.ts +9 -2
  302. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  303. package/src/extensions/improve/extension.ts +4 -2
  304. package/src/extensions/improve/skills/yourself.ts +1 -1
  305. package/src/filesystem.ts +168 -65
  306. package/src/index.ts +3 -0
  307. package/src/internal/cli-ax.ts +88 -15
  308. package/src/internal/continuation-identity.ts +1 -0
  309. package/src/internal/cursor-agent-template.ts +2 -0
  310. package/src/internal/filesystem/tools.ts +2 -0
  311. package/src/internal/filesystem/walk.ts +60 -15
  312. package/src/internal/hosted-admission-adapter.ts +3 -0
  313. package/src/internal/hosted-delivery-protocol.ts +78 -1
  314. package/src/internal/hosted-delivery.ts +8 -0
  315. package/src/internal/init-project.ts +4 -0
  316. package/src/internal/server.ts +104 -41
  317. package/src/internal/session-engine.ts +16 -4
  318. package/src/internal/skill-catalog.ts +69 -0
  319. package/src/types.ts +9 -0
  320. package/templates/thermo-quality-review/README.md +35 -0
  321. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  322. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  323. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  324. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  325. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  326. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  327. package/templates/thermo-quality-review/package.json +18 -0
  328. package/templates/thermo-quality-review/tsconfig.json +12 -0
  329. package/templates/thermo-review/README.md +35 -0
  330. package/templates/thermo-review/agent/agent.ts +8 -0
  331. package/templates/thermo-review/agent/channels/github.ts +42 -0
  332. package/templates/thermo-review/agent/instructions.md +40 -0
  333. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  334. package/templates/thermo-review/evals/evals.config.ts +5 -0
  335. package/templates/thermo-review/evals/review.eval.ts +53 -0
  336. package/templates/thermo-review/package.json +18 -0
  337. package/templates/thermo-review/tsconfig.json +12 -0
  338. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
  339. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
  340. package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
  341. package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
  342. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
  343. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
  344. package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
  345. package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
  346. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
  347. package/dist/docs/assets/chunks/wardley-RL74JXVD.g5efOWmT.js +0 -162
  348. package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
  349. package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
  350. package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
  351. package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
  352. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
  353. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
  354. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
  355. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
  356. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
  357. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
  358. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
  359. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
  360. package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
  361. package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
  362. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
  363. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
  364. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
  365. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
  366. package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
  367. package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
  368. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
  369. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
  370. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
  371. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
  372. package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
  373. package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
  374. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
  375. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
  376. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
  377. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
  378. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
  379. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
  380. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
  381. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
  382. package/dist/playground/assets/index-BLlKgZtI.css +0 -1
  383. 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,
@@ -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;
@@ -12,6 +12,7 @@ import { z } from "zod";
12
12
  import {
13
13
  canonicalizeFileSystemToolName,
14
14
  collectGrepMatches,
15
+ FILE_SYSTEM_SCAN_LIMIT,
15
16
  type FileSystem,
16
17
  type FileSystemToolName,
17
18
  fileSystemImage,
@@ -534,6 +535,7 @@ Tool to search for files matching a glob pattern
534
535
  await collectGlob(root, {
535
536
  pattern: globPattern,
536
537
  ...(targetDirectory === undefined ? {} : { dir: targetDirectory }),
538
+ limit: FILE_SYSTEM_SCAN_LIMIT,
537
539
  })
538
540
  ).map(entry => entry.path);
539
541
  return formatGlobOutput(dir, files);