@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.
- package/README.md +4 -0
- package/dist/bin/agent-serve.js +20 -4
- package/dist/channels/checks.d.ts +10 -0
- package/dist/channels/checks.d.ts.map +1 -1
- package/dist/channels/github/github-channel.d.ts +29 -19
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +29 -19
- package/dist/channels/origin/checks.d.ts +1 -1
- package/dist/channels/origin/checks.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.js +2 -0
- package/dist/channels/slack/dispatch.d.ts +11 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +146 -39
- package/dist/channels/slack/placeholder.d.ts +26 -0
- package/dist/channels/slack/placeholder.d.ts.map +1 -1
- package/dist/channels/slack/placeholder.js +28 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +9 -16
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
- package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
- package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
- package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
- package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
- package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
- package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
- package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
- package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
- package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
- package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
- package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
- package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
- package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
- package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
- package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
- package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
- package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
- package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
- package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
- package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
- package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
- package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
- package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
- package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
- package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
- package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
- package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
- package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
- package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
- package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
- package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
- package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
- package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
- package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
- package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
- package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
- package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
- package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
- package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
- package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
- package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
- package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
- package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
- package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
- package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
- package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
- package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
- package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
- package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
- package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
- package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
- package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
- package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
- package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
- package/dist/docs/building-with-agents.html +44 -48
- package/dist/docs/building-with-agents.md +94 -82
- package/dist/docs/deployment.html +59 -78
- package/dist/docs/deployment.md +117 -363
- package/dist/docs/evals.html +85 -224
- package/dist/docs/evals.md +149 -673
- package/dist/docs/guides/agent-to-agent.html +74 -47
- package/dist/docs/guides/agent-to-agent.md +128 -46
- package/dist/docs/guides/bitbucket.html +179 -44
- package/dist/docs/guides/bitbucket.md +249 -48
- package/dist/docs/guides/cloud-agents.html +46 -40
- package/dist/docs/guides/cloud-agents.md +119 -66
- package/dist/docs/guides/convert-automation.html +80 -49
- package/dist/docs/guides/convert-automation.md +156 -147
- package/dist/docs/guides/github.html +184 -92
- package/dist/docs/guides/github.md +260 -245
- package/dist/docs/guides/gitlab.html +184 -45
- package/dist/docs/guides/gitlab.md +249 -50
- package/dist/docs/guides/grokbot-agents.html +48 -41
- package/dist/docs/guides/grokbot-agents.md +99 -53
- package/dist/docs/guides/improve.html +48 -40
- package/dist/docs/guides/improve.md +111 -58
- package/dist/docs/guides/jev.html +248 -0
- package/dist/docs/guides/jev.md +348 -0
- package/dist/docs/guides/mcp-oauth.html +74 -52
- package/dist/docs/guides/mcp-oauth.md +111 -121
- package/dist/docs/guides/opentelemetry.html +63 -54
- package/dist/docs/guides/opentelemetry.md +96 -165
- package/dist/docs/guides/slack.html +83 -59
- package/dist/docs/guides/slack.md +157 -227
- package/dist/docs/guides/webhooks.html +97 -230
- package/dist/docs/guides/webhooks.md +154 -385
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +44 -38
- package/dist/docs/hillclimbing.md +101 -55
- package/dist/docs/index.html +38 -38
- package/dist/docs/index.md +2 -0
- package/dist/docs/llms-full.txt +3490 -3146
- package/dist/docs/llms.txt +22 -18
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/artifacts.html +38 -38
- package/dist/docs/reference/channels.html +37 -37
- package/dist/docs/reference/cli.html +39 -37
- package/dist/docs/reference/cli.md +2 -0
- package/dist/docs/reference/connections.html +38 -38
- package/dist/docs/reference/connections.md +1 -1
- package/dist/docs/reference/evals.html +116 -0
- package/dist/docs/reference/evals.md +293 -0
- package/dist/docs/reference/extensions.html +80 -84
- package/dist/docs/reference/extensions.md +131 -202
- package/dist/docs/reference/hooks.html +39 -39
- package/dist/docs/reference/hooks.md +34 -34
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +37 -37
- package/dist/docs/reference/playground.html +37 -37
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +37 -37
- package/dist/docs/reference/sessions.html +37 -37
- package/dist/docs/reference/skills.html +37 -37
- package/dist/docs/reference/subagents.html +38 -38
- package/dist/docs/reference/subagents.md +1 -1
- package/dist/docs/reference/tools.html +38 -38
- package/dist/docs/reference/tools.md +4 -0
- package/dist/docs/templates/agentic-owners.html +38 -38
- package/dist/docs/templates/pr-autofixer.html +37 -37
- package/dist/docs/templates/security-reviewer.html +38 -38
- package/dist/docs/templates/thermo-quality-review.html +62 -0
- package/dist/docs/templates/thermo-quality-review.md +75 -0
- package/dist/docs/templates/thermo-review.html +62 -0
- package/dist/docs/templates/thermo-review.md +74 -0
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +38 -38
- package/dist/docs/troubleshooting.md +97 -66
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/dist/extensions/improve/extension.d.ts +3 -1
- package/dist/extensions/improve/extension.d.ts.map +1 -1
- package/dist/extensions/improve/extension.js +4 -2
- package/dist/extensions/improve/skills/yourself.js +1 -1
- package/dist/extensions/jev/extension.d.ts +43 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -0
- package/dist/extensions/jev/extension.js +47 -0
- package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/lib/evaluate.js +167 -0
- package/dist/extensions/jev/skills/gated-write.md +25 -0
- package/dist/extensions/jev/skills/questions.md +33 -0
- package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
- package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/tools/evaluate.js +88 -0
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +2 -0
- package/dist/filesystem.d.ts +46 -2
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +149 -102
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +6 -0
- package/dist/internal/cli-ax.d.ts +6 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +72 -14
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +1 -0
- package/dist/internal/cursor-agent-template.d.ts +1 -1
- package/dist/internal/cursor-agent-template.d.ts.map +1 -1
- package/dist/internal/cursor-agent-template.js +2 -0
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +18 -0
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +8 -4
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +1 -0
- package/dist/internal/filesystem/tools.d.ts.map +1 -1
- package/dist/internal/filesystem/tools.js +2 -2
- package/dist/internal/filesystem/walk.d.ts +7 -4
- package/dist/internal/filesystem/walk.d.ts.map +1 -1
- package/dist/internal/filesystem/walk.js +34 -11
- package/dist/internal/hosted-admission-adapter.d.ts +3 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +51 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +23 -25
- package/dist/internal/hosted-execution-diag.d.ts +12 -4
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +26 -4
- package/dist/internal/hosted-execution-flush.d.ts +1 -0
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
- package/dist/internal/hosted-execution-flush.js +4 -2
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +4 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +111 -48
- package/dist/internal/session-engine.d.ts +4 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +39 -9
- package/dist/internal/skill-catalog.d.ts +28 -0
- package/dist/internal/skill-catalog.d.ts.map +1 -0
- package/dist/internal/skill-catalog.js +44 -0
- package/dist/playground/assets/index-DSMAewbx.css +1 -0
- package/dist/playground/assets/index-De_lpFxE.js +67 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +32 -3
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +2 -0
- package/docs/building-with-agents.md +96 -84
- package/docs/deployment.md +118 -364
- package/docs/evals.md +149 -673
- package/docs/guides/agent-to-agent.md +130 -48
- package/docs/guides/bitbucket.md +250 -49
- package/docs/guides/cloud-agents.md +119 -67
- package/docs/guides/convert-automation.md +157 -148
- package/docs/guides/github.md +261 -246
- package/docs/guides/gitlab.md +250 -51
- package/docs/guides/grokbot-agents.md +100 -55
- package/docs/guides/improve.md +112 -59
- package/docs/guides/jev.md +353 -0
- package/docs/guides/mcp-oauth.md +112 -122
- package/docs/guides/opentelemetry.md +97 -166
- package/docs/guides/slack.md +158 -228
- package/docs/guides/webhooks.md +155 -386
- package/docs/hillclimbing.md +102 -56
- package/docs/reference/cli.md +2 -0
- package/docs/reference/connections.md +1 -1
- package/docs/reference/evals.md +298 -0
- package/docs/reference/extensions.md +132 -203
- package/docs/reference/hooks.md +34 -34
- package/docs/reference/subagents.md +1 -1
- package/docs/reference/tools.md +4 -0
- package/docs/templates/thermo-quality-review.md +80 -0
- package/docs/templates/thermo-review.md +79 -0
- package/docs/troubleshooting.md +98 -67
- package/package.json +8 -1
- package/skills/github/SKILL.md +21 -13
- package/src/bin/agent-serve.ts +24 -3
- package/src/channels/checks.ts +8 -0
- package/src/channels/github/github-channel.ts +29 -19
- package/src/channels/origin/checks.ts +3 -1
- package/src/channels/slack/agentic-delivery.ts +2 -0
- package/src/channels/slack/dispatch.ts +131 -4
- package/src/channels/slack/placeholder.ts +51 -0
- package/src/channels/slack/slack-channel.ts +9 -2
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/src/extensions/improve/extension.ts +4 -2
- package/src/extensions/improve/skills/yourself.ts +1 -1
- package/src/extensions/jev/extension.ts +95 -0
- package/src/extensions/jev/lib/evaluate.ts +289 -0
- package/src/extensions/jev/skills/gated-write.md +25 -0
- package/src/extensions/jev/skills/questions.md +33 -0
- package/src/extensions/jev/tools/evaluate.ts +90 -0
- package/src/extensions.ts +2 -0
- package/src/filesystem.ts +168 -65
- package/src/index.ts +3 -0
- package/src/internal/advertise-tools.ts +6 -0
- package/src/internal/cli-ax.ts +88 -15
- package/src/internal/continuation-identity.ts +1 -0
- package/src/internal/cursor-agent-template.ts +2 -0
- package/src/internal/discovery/connections.ts +21 -0
- package/src/internal/discovery/extensions.ts +12 -4
- package/src/internal/discovery/info.ts +1 -0
- package/src/internal/filesystem/tools.ts +2 -0
- package/src/internal/filesystem/walk.ts +60 -15
- package/src/internal/hosted-admission-adapter.ts +3 -0
- package/src/internal/hosted-delivery-protocol.ts +82 -1
- package/src/internal/hosted-delivery.ts +23 -0
- package/src/internal/hosted-execution-diag.ts +33 -4
- package/src/internal/hosted-execution-flush.ts +4 -0
- package/src/internal/init-project.ts +4 -0
- package/src/internal/server.ts +130 -53
- package/src/internal/session-engine.ts +46 -8
- package/src/internal/skill-catalog.ts +69 -0
- package/src/types.ts +33 -3
- package/templates/thermo-quality-review/README.md +35 -0
- package/templates/thermo-quality-review/agent/agent.ts +8 -0
- package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
- package/templates/thermo-quality-review/agent/instructions.md +43 -0
- package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
- package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
- package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
- package/templates/thermo-quality-review/package.json +18 -0
- package/templates/thermo-quality-review/tsconfig.json +12 -0
- package/templates/thermo-review/README.md +35 -0
- package/templates/thermo-review/agent/agent.ts +8 -0
- package/templates/thermo-review/agent/channels/github.ts +42 -0
- package/templates/thermo-review/agent/instructions.md +40 -0
- package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
- package/templates/thermo-review/evals/evals.config.ts +5 -0
- package/templates/thermo-review/evals/review.eval.ts +53 -0
- package/templates/thermo-review/package.json +18 -0
- package/templates/thermo-review/tsconfig.json +12 -0
- package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
- package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
- package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
- package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
- package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
- package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
- package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
- package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
- package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
- package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
- package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
- package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
- package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
- package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
- package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
- package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
- package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
- package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
- package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
- package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
- package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
- package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
- package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
- package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
- package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
- package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
- package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
- package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
- package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
- package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
- package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
- package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
- package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
- package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
- package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
- package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
- package/dist/playground/assets/index-BLlKgZtI.css +0 -1
- 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(
|
|
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
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
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
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
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
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
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
|
-
|
|
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*
|
|
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*
|
|
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
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
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(
|
package/src/internal/cli-ax.ts
CHANGED
|
@@ -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
|
|
833
|
-
|
|
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
|
-
|
|
841
|
-
|
|
842
|
-
|
|
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",
|
|
@@ -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,
|