@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
|
@@ -86,6 +86,7 @@ export function hostedGuestErrorResponse(input) {
|
|
|
86
86
|
classification: hostedFailureClassification(input.error),
|
|
87
87
|
message: input.message,
|
|
88
88
|
turnStatus: input.turnStatus,
|
|
89
|
+
errorCode: input.errorCode,
|
|
89
90
|
};
|
|
90
91
|
return Response.json(body, { status: input.status });
|
|
91
92
|
}
|
|
@@ -123,12 +124,18 @@ const DELIVERY_KEYS = new Set([
|
|
|
123
124
|
"mailboxContinuationKey",
|
|
124
125
|
"payload",
|
|
125
126
|
"managedAutomation",
|
|
127
|
+
"platformHandoff",
|
|
126
128
|
]);
|
|
127
129
|
const MANAGED_AUTOMATION_KEYS = new Set([
|
|
128
130
|
"automationUuid",
|
|
129
131
|
"mcpServerNames",
|
|
130
132
|
"slackChannels",
|
|
131
133
|
]);
|
|
134
|
+
export const HOSTED_PLATFORM_HANDOFF_KEYS = new Set([
|
|
135
|
+
"v",
|
|
136
|
+
"slackPlaceholder",
|
|
137
|
+
]);
|
|
138
|
+
export const HOSTED_SLACK_PLACEHOLDER_HANDOFF_KEYS = new Set(["messageTs", "channelId", "threadTs", "streamed"]);
|
|
132
139
|
/** More names than any real automation configures is a malformed envelope. */
|
|
133
140
|
const MANAGED_AUTOMATION_MAX_SERVERS = 64;
|
|
134
141
|
/** More channels than the dashboard picker allows is a malformed envelope. */
|
|
@@ -176,6 +183,48 @@ function parseManagedAutomation(value) {
|
|
|
176
183
|
: { slackChannels: body.slackChannels })),
|
|
177
184
|
};
|
|
178
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Parse optional control-plane Slack placeholder handoff. Absent → valid;
|
|
188
|
+
* present-but-malformed → invalid (fail closed like managedAutomation).
|
|
189
|
+
*/
|
|
190
|
+
function parsePlatformHandoff(value) {
|
|
191
|
+
if (value === undefined) {
|
|
192
|
+
return {};
|
|
193
|
+
}
|
|
194
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
const body = value;
|
|
198
|
+
if (Object.keys(body).some(key => !HOSTED_PLATFORM_HANDOFF_KEYS.has(key)) ||
|
|
199
|
+
body.v !== 1) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
const placeholder = body.slackPlaceholder;
|
|
203
|
+
if (typeof placeholder !== "object" ||
|
|
204
|
+
placeholder === null ||
|
|
205
|
+
Array.isArray(placeholder)) {
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
const slot = placeholder;
|
|
209
|
+
if (Object.keys(slot).some(key => !HOSTED_SLACK_PLACEHOLDER_HANDOFF_KEYS.has(key)) ||
|
|
210
|
+
!boundedString(slot.messageTs, 64) ||
|
|
211
|
+
!boundedString(slot.channelId, 64) ||
|
|
212
|
+
!boundedString(slot.threadTs, 64) ||
|
|
213
|
+
slot.streamed !== false) {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
platformHandoff: {
|
|
218
|
+
v: 1,
|
|
219
|
+
slackPlaceholder: {
|
|
220
|
+
messageTs: slot.messageTs,
|
|
221
|
+
channelId: slot.channelId,
|
|
222
|
+
threadTs: slot.threadTs,
|
|
223
|
+
streamed: slot.streamed,
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
}
|
|
179
228
|
export function parseHostedAdmission(value) {
|
|
180
229
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
181
230
|
return undefined;
|
|
@@ -190,7 +239,8 @@ export function parseHostedAdmission(value) {
|
|
|
190
239
|
!boundedString(body.deliveryId, 256) ||
|
|
191
240
|
(body.sessionMode !== "event" && body.sessionMode !== "continuation") ||
|
|
192
241
|
!boundedString(body.mailboxContinuationKey, 512) ||
|
|
193
|
-
parseManagedAutomation(body.managedAutomation) === undefined
|
|
242
|
+
parseManagedAutomation(body.managedAutomation) === undefined ||
|
|
243
|
+
parsePlatformHandoff(body.platformHandoff) === undefined) {
|
|
194
244
|
return undefined;
|
|
195
245
|
}
|
|
196
246
|
const prefix = body.sessionMode === "event" ? "evt:" : "cont:";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { randomBytes } from "node:crypto";
|
|
|
11
11
|
import { dispatchOutcome } from "./channel-dispatch.js";
|
|
12
12
|
import { consumeHostedBoundSecrets, } from "./cursor/hosted-bound-secrets.js";
|
|
13
13
|
import { createDeferredChannelSession, DeferredChannelSessionError, } from "./deferred-channel-session.js";
|
|
14
|
+
import { describeErrorCode } from "./describe-error.js";
|
|
14
15
|
import { formatGuestNetworkServerTiming, GUEST_CONNECT_STALLED, GUEST_NETWORK_UNAVAILABLE, GuestNetworkUnavailableError, waitForGuestNetworkReady, } from "./guest-network.js";
|
|
15
16
|
import { getHostedAdmissionAdapter, } from "./hosted-admission-adapter.js";
|
|
16
17
|
import { HostedAdmissionLocalSendError, runDuringHostedAdmission, } from "./hosted-admission-context.js";
|
|
@@ -215,6 +216,7 @@ function runAdmission(input, adapter) {
|
|
|
215
216
|
deliveryId: input.delivery.deliveryId,
|
|
216
217
|
args,
|
|
217
218
|
mailboxContinuationKey: input.delivery.mailboxContinuationKey,
|
|
219
|
+
platformHandoff: input.delivery.platformHandoff,
|
|
218
220
|
});
|
|
219
221
|
}
|
|
220
222
|
catch (error) {
|
|
@@ -515,11 +517,13 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
515
517
|
const classification = fields.failureCode === undefined
|
|
516
518
|
? undefined
|
|
517
519
|
: hostedFailureClassification(fields.failureCode);
|
|
518
|
-
yield flushHostedExecutionRecord(sinks, Object.assign(Object.assign(Object.assign(Object.assign({ executionId, sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: Math.max(0, Math.round(performance.now() - startedAt)) }, (fields.message === undefined
|
|
520
|
+
yield flushHostedExecutionRecord(sinks, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ executionId, sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: Math.max(0, Math.round(performance.now() - startedAt)) }, (fields.message === undefined
|
|
519
521
|
? {}
|
|
520
522
|
: { message: fields.message })), (fields.abortReason === undefined
|
|
521
523
|
? {}
|
|
522
|
-
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode
|
|
524
|
+
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode }), (fields.errorCode === undefined
|
|
525
|
+
? {}
|
|
526
|
+
: { errorCode: fields.errorCode })), { classification }), (fields.error === undefined ? {} : { error: fields.error })));
|
|
523
527
|
});
|
|
524
528
|
// Claim the file before the turn runs. The host reads it after its
|
|
525
529
|
// own POST returns, which for a 9-minute timeout is while this turn
|
|
@@ -548,6 +552,13 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
548
552
|
key: admitted.send.mailboxContinuationKey,
|
|
549
553
|
} }));
|
|
550
554
|
sessionId = session.id;
|
|
555
|
+
// The pre-turn claim used an empty sessionId. Stamp the
|
|
556
|
+
// engine id now so a dashboard / session-view poll that
|
|
557
|
+
// only has the factory `ses_…` can follow `session-events/`.
|
|
558
|
+
yield writeDiag({
|
|
559
|
+
sessionId,
|
|
560
|
+
turnStatus: HOSTED_EXECUTION_DIAG_RUNNING_STATUS,
|
|
561
|
+
});
|
|
551
562
|
const outcome = yield session.waitForCompletion();
|
|
552
563
|
completionAt = hostedExecutionNow();
|
|
553
564
|
// Status is the owner turn. waitForCompletion still waited
|
|
@@ -578,24 +589,15 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
578
589
|
const hostedFailure = outcome.status === "finished"
|
|
579
590
|
? undefined
|
|
580
591
|
: hostedFailureForUnfinishedTurn(outcome);
|
|
581
|
-
yield writeDiag({
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
message: outcome.errorMessage,
|
|
585
|
-
abortReason: abortReasonFromTurnStatus(outcome.status, outcome.cancellationReason),
|
|
586
|
-
failureCode: hostedFailure === null || hostedFailure === void 0 ? void 0 : hostedFailure.error,
|
|
587
|
-
});
|
|
592
|
+
yield writeDiag(Object.assign({ sessionId: session.id, turnStatus: outcome.status, message: outcome.errorMessage, abortReason: abortReasonFromTurnStatus(outcome.status, outcome.cancellationReason), failureCode: hostedFailure === null || hostedFailure === void 0 ? void 0 : hostedFailure.error }, (outcome.errorCode === undefined
|
|
593
|
+
? {}
|
|
594
|
+
: { errorCode: outcome.errorCode })));
|
|
588
595
|
const reply = hostedFailure !== undefined
|
|
589
596
|
? {
|
|
590
597
|
status: 503,
|
|
591
|
-
body: {
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
retry: hostedFailure.retry,
|
|
595
|
-
classification: hostedFailureClassification(hostedFailure.error),
|
|
596
|
-
turnStatus: outcome.status,
|
|
597
|
-
message: outcome.errorMessage,
|
|
598
|
-
},
|
|
598
|
+
body: Object.assign({ ok: false, error: hostedFailure.error, retry: hostedFailure.retry, classification: hostedFailureClassification(hostedFailure.error), turnStatus: outcome.status, message: outcome.errorMessage }, (outcome.errorCode === undefined
|
|
599
|
+
? {}
|
|
600
|
+
: { errorCode: outcome.errorCode })),
|
|
599
601
|
}
|
|
600
602
|
: {
|
|
601
603
|
status: 200,
|
|
@@ -621,14 +623,10 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
621
623
|
yield Promise.allSettled([...owner.inflightInjects]);
|
|
622
624
|
}
|
|
623
625
|
evictHostedSdkSessions(input.evictSdkSession, sessionId, execution.sessionPublicId);
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
abortReason: "execute_throw",
|
|
629
|
-
failureCode: "internal_error",
|
|
630
|
-
error,
|
|
631
|
-
});
|
|
626
|
+
const thrownErrorCode = describeErrorCode(error);
|
|
627
|
+
yield writeDiag(Object.assign({ sessionId: "", turnStatus: "error", message: error instanceof Error ? error.message : String(error), abortReason: "execute_throw", failureCode: "internal_error", error }, (thrownErrorCode === undefined
|
|
628
|
+
? {}
|
|
629
|
+
: { errorCode: thrownErrorCode })));
|
|
632
630
|
const endedAt = hostedExecutionNow();
|
|
633
631
|
// Preserve completion/drain marks when the failure happened
|
|
634
632
|
// during post-drain work; otherwise collapse to endedAt.
|
|
@@ -24,7 +24,8 @@ export type HostedExecutionDiagAbortReason = "signal_abort" | "runner_cancelled"
|
|
|
24
24
|
/**
|
|
25
25
|
* Bounded guest-side record of one hosted-execution attempt. No prompt,
|
|
26
26
|
* tool content, or API key — the host copies known keys onto the Temporal
|
|
27
|
-
* activity span for Datadog.
|
|
27
|
+
* activity span for Datadog. `errorCode` and `message` are logged ungated;
|
|
28
|
+
* `stack` stays behind the internal-diag gate.
|
|
28
29
|
*/
|
|
29
30
|
export type HostedExecutionDiag = {
|
|
30
31
|
v: typeof HOSTED_EXECUTION_DIAG_VERSION;
|
|
@@ -43,6 +44,8 @@ export type HostedExecutionDiag = {
|
|
|
43
44
|
requestId?: string;
|
|
44
45
|
abortReason?: HostedExecutionDiagAbortReason;
|
|
45
46
|
failureCode?: string;
|
|
47
|
+
/** Runner/SDK code for the unfinished turn. Distinct from {@link failureCode}. */
|
|
48
|
+
errorCode?: string;
|
|
46
49
|
classification?: HostedFailureClassification;
|
|
47
50
|
};
|
|
48
51
|
/** Written before the turn starts so a stalled execution still has a record. */
|
|
@@ -51,11 +54,16 @@ export declare const HOSTED_EXECUTION_DIAG_RUNNING_STATUS = "running";
|
|
|
51
54
|
export declare const HOSTED_ERROR_STACK_LINE_COUNT = 5;
|
|
52
55
|
export declare const HOSTED_ERROR_SNIPPET_MAX_CHARS = 700;
|
|
53
56
|
/**
|
|
54
|
-
* Bounded throw text for
|
|
55
|
-
* Prefers `Error.stack` (message line + `at` frames)
|
|
56
|
-
*
|
|
57
|
+
* Bounded throw text for on-disk diag `stack` (and non-hosted 500 bodies).
|
|
58
|
+
* Prefers `Error.stack` (message line + `at` frames). Hosted HTTP `message`
|
|
59
|
+
* uses {@link hostedErrorMessageOnly} so customer Datadog stays frame-free.
|
|
57
60
|
*/
|
|
58
61
|
export declare function hostedErrorStackSnippet(error: unknown): string;
|
|
62
|
+
/**
|
|
63
|
+
* Guest throw text without `at` frames. Hosted 500 `message` is ungated on
|
|
64
|
+
* TAS (`hostedGuestMessage` / `last_error`); stack frames stay on `stack`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function hostedErrorMessageOnly(error: unknown): string;
|
|
59
67
|
export declare function hostedExecutionDiagPath(stateRoot: string): string;
|
|
60
68
|
export declare function abortReasonFromTurnStatus(status: string, cancellationReason: "signal" | "runner" | undefined): HostedExecutionDiagAbortReason | undefined;
|
|
61
69
|
export declare function parseHostedExecutionDiag(raw: string): HostedExecutionDiag | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-execution-diag.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-diag.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2EAA2E;AAC3E,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,eAAe,CAAC;AAEpB
|
|
1
|
+
{"version":3,"file":"hosted-execution-diag.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-diag.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2EAA2E;AAC3E,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,eAAe,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACxC,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,8BAA8B,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAC9C,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,oCAAoC,YAAY,CAAC;AAsC9D,iFAAiF;AACjF,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAyB9D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiB7D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAClD,8BAA8B,GAAG,SAAS,CAU5C;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,GACV,mBAAmB,GAAG,SAAS,CAuFjC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -50,6 +50,7 @@ const DIAG_KEYS = new Set([
|
|
|
50
50
|
"requestId",
|
|
51
51
|
"abortReason",
|
|
52
52
|
"failureCode",
|
|
53
|
+
"errorCode",
|
|
53
54
|
"classification",
|
|
54
55
|
]);
|
|
55
56
|
const ABORT_REASONS = new Set([
|
|
@@ -69,9 +70,9 @@ function boundedOptionalString(value, max) {
|
|
|
69
70
|
export const HOSTED_ERROR_STACK_LINE_COUNT = 5;
|
|
70
71
|
export const HOSTED_ERROR_SNIPPET_MAX_CHARS = 700;
|
|
71
72
|
/**
|
|
72
|
-
* Bounded throw text for
|
|
73
|
-
* Prefers `Error.stack` (message line + `at` frames)
|
|
74
|
-
*
|
|
73
|
+
* Bounded throw text for on-disk diag `stack` (and non-hosted 500 bodies).
|
|
74
|
+
* Prefers `Error.stack` (message line + `at` frames). Hosted HTTP `message`
|
|
75
|
+
* uses {@link hostedErrorMessageOnly} so customer Datadog stays frame-free.
|
|
75
76
|
*/
|
|
76
77
|
export function hostedErrorStackSnippet(error) {
|
|
77
78
|
var _a;
|
|
@@ -100,6 +101,26 @@ export function hostedErrorStackSnippet(error) {
|
|
|
100
101
|
? `${text.slice(0, HOSTED_ERROR_SNIPPET_MAX_CHARS)}…`
|
|
101
102
|
: text;
|
|
102
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Guest throw text without `at` frames. Hosted 500 `message` is ungated on
|
|
106
|
+
* TAS (`hostedGuestMessage` / `last_error`); stack frames stay on `stack`.
|
|
107
|
+
*/
|
|
108
|
+
export function hostedErrorMessageOnly(error) {
|
|
109
|
+
const text = error instanceof Error && error.message.trim().length > 0
|
|
110
|
+
? error.message.trim()
|
|
111
|
+
: String(error).trim();
|
|
112
|
+
if (text.length === 0) {
|
|
113
|
+
return "Internal server error.";
|
|
114
|
+
}
|
|
115
|
+
const firstFrame = text.search(/\n\s+at\s/);
|
|
116
|
+
const message = firstFrame === -1 ? text : text.slice(0, firstFrame).trimEnd();
|
|
117
|
+
if (message.length === 0) {
|
|
118
|
+
return "Internal server error.";
|
|
119
|
+
}
|
|
120
|
+
return message.length > HOSTED_ERROR_SNIPPET_MAX_CHARS
|
|
121
|
+
? `${message.slice(0, HOSTED_ERROR_SNIPPET_MAX_CHARS)}…`
|
|
122
|
+
: message;
|
|
123
|
+
}
|
|
103
124
|
export function hostedExecutionDiagPath(stateRoot) {
|
|
104
125
|
return join(stateRoot, HOSTED_EXECUTION_DIAG_FILENAME);
|
|
105
126
|
}
|
|
@@ -156,6 +177,7 @@ export function parseHostedExecutionDiag(raw) {
|
|
|
156
177
|
const stack = boundedOptionalString(body.stack, HOSTED_ERROR_SNIPPET_MAX_CHARS);
|
|
157
178
|
const requestId = boundedOptionalString(body.requestId, 128);
|
|
158
179
|
const failureCode = boundedOptionalString(body.failureCode, 64);
|
|
180
|
+
const errorCode = boundedOptionalString(body.errorCode, 64);
|
|
159
181
|
const classification = body.classification === undefined
|
|
160
182
|
? undefined
|
|
161
183
|
: parseHostedFailureClassification(body.classification);
|
|
@@ -175,7 +197,7 @@ export function parseHostedExecutionDiag(raw) {
|
|
|
175
197
|
typeof body.signalAborted !== "boolean") {
|
|
176
198
|
return undefined;
|
|
177
199
|
}
|
|
178
|
-
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: HOSTED_EXECUTION_DIAG_VERSION, executionId: body.executionId, writtenAt: body.writtenAt, sessionPublicId: body.sessionPublicId, sessionId: body.sessionId, turnStatus: body.turnStatus, durationMs: body.durationMs }, (message === undefined ? {} : { message })), (stack === undefined ? {} : { stack })), (body.signalAborted === true ? { signalAborted: true } : {})), (requestId === undefined ? {} : { requestId })), (abortReason === undefined ? {} : { abortReason })), (failureCode === undefined ? {} : { failureCode })), (classification === undefined ? {} : { classification }));
|
|
200
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: HOSTED_EXECUTION_DIAG_VERSION, executionId: body.executionId, writtenAt: body.writtenAt, sessionPublicId: body.sessionPublicId, sessionId: body.sessionId, turnStatus: body.turnStatus, durationMs: body.durationMs }, (message === undefined ? {} : { message })), (stack === undefined ? {} : { stack })), (body.signalAborted === true ? { signalAborted: true } : {})), (requestId === undefined ? {} : { requestId })), (abortReason === undefined ? {} : { abortReason })), (failureCode === undefined ? {} : { failureCode })), (errorCode === undefined ? {} : { errorCode })), (classification === undefined ? {} : { classification }));
|
|
179
201
|
}
|
|
180
202
|
/**
|
|
181
203
|
* Overwrite the per-execution diag file. Soft-fail: a write error must not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-execution-flush.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-flush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EACL,KAAK,8BAA8B,EAGpC,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAG9B,MAAM,sBAAsB,CAAC;AAU9B,MAAM,MAAM,yBAAyB,GAAG;IACtC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,8BAA8B,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,yBAAyB,EAChC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"hosted-execution-flush.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-flush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EACL,KAAK,8BAA8B,EAGpC,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAG9B,MAAM,sBAAsB,CAAC;AAU9B,MAAM,MAAM,yBAAyB,GAAG;IACtC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,8BAA8B,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,yBAAyB,EAChC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED;;GAEG;AACH,wBAAsB,gCAAgC,CAAC,IAAI,EAAE;IAC3D,iBAAiB,EAAE,CACjB,MAAM,EAAE,OAAO,CACb,qBAAqB,EACrB,cAAc,GAAG,oBAAoB,GAAG,qBAAqB,CAC9D,EACD,KAAK,CAAC,EAAE,OAAO,KACZ,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CACb,qBAAqB,EACrB,cAAc,GAAG,oBAAoB,GAAG,qBAAqB,CAC9D,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB"}
|
|
@@ -39,9 +39,11 @@ export function flushHostedExecutionRecord(sinks, fields) {
|
|
|
39
39
|
? undefined
|
|
40
40
|
: hostedErrorStackSnippet(fields.error);
|
|
41
41
|
if (sinks.stateRoot !== undefined) {
|
|
42
|
-
yield writeHostedExecutionDiag(sinks.stateRoot, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: 1, executionId: fields.executionId, writtenAt, sessionPublicId: fields.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: fields.durationMs }, (message === undefined ? {} : { message })), (stack === undefined || stack.length === 0 ? {} : { stack })), { signalAborted: fields.abortReason === "signal_abort" ? true : undefined }), (fields.abortReason === undefined
|
|
42
|
+
yield writeHostedExecutionDiag(sinks.stateRoot, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: 1, executionId: fields.executionId, writtenAt, sessionPublicId: fields.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: fields.durationMs }, (message === undefined ? {} : { message })), (stack === undefined || stack.length === 0 ? {} : { stack })), { signalAborted: fields.abortReason === "signal_abort" ? true : undefined }), (fields.abortReason === undefined
|
|
43
43
|
? {}
|
|
44
|
-
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode,
|
|
44
|
+
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode }), (fields.errorCode === undefined
|
|
45
|
+
? {}
|
|
46
|
+
: { errorCode: fields.errorCode })), { classification: fields.classification }));
|
|
45
47
|
}
|
|
46
48
|
if (sinks.persistSessionRun !== undefined) {
|
|
47
49
|
const error = fields.error === undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../src/internal/init-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,OAAO,EAKL,KAAK,gBAAgB,EAEtB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../src/internal/init-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,8 @@ const TEMPLATES = {
|
|
|
29
29
|
"pr-autofixer": { dir: "pr-autofixer" },
|
|
30
30
|
"security-help": { dir: "security-help" },
|
|
31
31
|
"security-reviewer": { dir: "security-reviewer" },
|
|
32
|
+
"thermo-quality-review": { dir: "thermo-quality-review" },
|
|
33
|
+
"thermo-review": { dir: "thermo-review" },
|
|
32
34
|
"triage-linear": { dir: "triage", overlay: "linear" },
|
|
33
35
|
"triage-jira": { dir: "triage", overlay: "jira" },
|
|
34
36
|
};
|
|
@@ -504,6 +506,8 @@ Scaffold a project, then open the playground:
|
|
|
504
506
|
npx ${PACKAGE_NAME} init ./code-wiki --template code-wiki # keep wiki pages current after merge
|
|
505
507
|
npx ${PACKAGE_NAME} init ./agents-md --template agents-md # keep AGENTS.md current from last week's PRs and Slack
|
|
506
508
|
npx ${PACKAGE_NAME} init ./my-reviewer --template security-reviewer # review PRs for security bugs
|
|
509
|
+
npx ${PACKAGE_NAME} init ./thermo-review --template thermo-review # review PRs for bugs and breakage
|
|
510
|
+
npx ${PACKAGE_NAME} init ./thermo-quality --template thermo-quality-review # review PRs for code quality
|
|
507
511
|
npx ${PACKAGE_NAME} init ./security-help --template security-help # answer security questions in Slack
|
|
508
512
|
npx ${PACKAGE_NAME} init ./my-triage --template triage-linear # comment on Linear issues
|
|
509
513
|
npx ${PACKAGE_NAME} init ./my-triage --template triage-jira # comment on Jira issues
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqDH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqDH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;AAwGrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAuDpE,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAUpE,OAAO,EAEL,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAsB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAgB/E,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAwCD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,yEAAyE;IACzE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAC5D,wEAAwE;IACxE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CA6oC3B"}
|
package/dist/internal/server.js
CHANGED
|
@@ -65,7 +65,7 @@ import { collectGitHubTriggerTargets, collectOriginTriggerTargets, handleAgentSe
|
|
|
65
65
|
import { createHostPlatforms, warmupHostGitHubAuth } from "./host-platforms.js";
|
|
66
66
|
import { registerHostedDeliveryRoute } from "./hosted-delivery.js";
|
|
67
67
|
import { HOSTED_DELIVERY_HEADER, HOSTED_GUEST_RETRY_TERMINAL, hostedGuestErrorResponse, } from "./hosted-delivery-protocol.js";
|
|
68
|
-
import { hostedErrorStackSnippet } from "./hosted-execution-diag.js";
|
|
68
|
+
import { hostedErrorMessageOnly, hostedErrorStackSnippet, } from "./hosted-execution-diag.js";
|
|
69
69
|
import { flushHostedExecutionProcessDeath } from "./hosted-execution-flush.js";
|
|
70
70
|
import { buildHttpChannelRoutes, errorResponse, jsonResponse, readJsonObject, requireSessionOwner, } from "./http-channel.js";
|
|
71
71
|
import { incomingHeadersToFetch, incomingRequestHost, } from "./incoming-headers-to-fetch.js";
|
|
@@ -96,6 +96,7 @@ import { CursorSdkRunner } from "./sdk-runner.js";
|
|
|
96
96
|
import { HTTP_CHANNEL_ID, InvalidContinuationTokenError, SessionEngine, ToolInputError, ToolNotDirectlyCallableError, UnknownToolError, WorkspaceUnavailableError, } from "./session-engine.js";
|
|
97
97
|
import { registerSessionRunFatalFlush, selectSessionRunLogStore, unregisterSessionRunFatalFlush, } from "./session-run-log.js";
|
|
98
98
|
import { sessionUrlsForRequest } from "./session-urls.js";
|
|
99
|
+
import { readSkillDetail, skillListEntry, UnknownSkillError, } from "./skill-catalog.js";
|
|
99
100
|
import { flushLocalStartLog, selectStartLogStore } from "./start-log-store.js";
|
|
100
101
|
import { catalogDetailEntry, catalogListEntry } from "./tool-catalog.js";
|
|
101
102
|
function memoryHealthFields(engines) {
|
|
@@ -900,10 +901,16 @@ export function startServer(mounts_1) {
|
|
|
900
901
|
}
|
|
901
902
|
}
|
|
902
903
|
else {
|
|
904
|
+
const resolveCloudToolsHeaders = options.cloudToolsUrl === undefined
|
|
905
|
+
? undefined
|
|
906
|
+
: () => {
|
|
907
|
+
const apiKey = liveCursorApiKey();
|
|
908
|
+
return apiKey === undefined
|
|
909
|
+
? undefined
|
|
910
|
+
: { authorization: `Bearer ${apiKey}` };
|
|
911
|
+
};
|
|
903
912
|
const headers = options.cloudToolsUrl !== undefined
|
|
904
|
-
?
|
|
905
|
-
? undefined
|
|
906
|
-
: { authorization: `Bearer ${accountKey.apiKey}` }
|
|
913
|
+
? resolveCloudToolsHeaders === null || resolveCloudToolsHeaders === void 0 ? void 0 : resolveCloudToolsHeaders()
|
|
907
914
|
: options.authToken === undefined
|
|
908
915
|
? undefined
|
|
909
916
|
: { authorization: `Bearer ${options.authToken}` };
|
|
@@ -911,9 +918,9 @@ export function startServer(mounts_1) {
|
|
|
911
918
|
if (options.allowAnonymous !== true) {
|
|
912
919
|
throw new Error(`Agent "${runtime.project.name}" needs a Cursor API key to authenticate --cloud-tools-url. ${SIGN_IN_HINT}`);
|
|
913
920
|
}
|
|
914
|
-
logger(`[agent-sdk] --cloud-tools-url: listening unsigned; Bearer
|
|
921
|
+
logger(`[agent-sdk] --cloud-tools-url: listening unsigned; Bearer resolves after task-time credential binding`);
|
|
915
922
|
}
|
|
916
|
-
runtime.engine.setCloudServerToolsConnection(Object.assign({ type: "http", url: publicToolsUrl }, (headers === undefined ? {} : { headers })));
|
|
923
|
+
runtime.engine.setCloudServerToolsConnection(Object.assign({ type: "http", url: publicToolsUrl }, (headers === undefined ? {} : { headers })), resolveCloudToolsHeaders);
|
|
917
924
|
}
|
|
918
925
|
}
|
|
919
926
|
}
|
|
@@ -1105,7 +1112,15 @@ function mountAgentRoutes(router, runtime, args) {
|
|
|
1105
1112
|
}
|
|
1106
1113
|
return null;
|
|
1107
1114
|
};
|
|
1108
|
-
|
|
1115
|
+
// A v2 mount served under `--no-control-plane` is a hosted v2 guest: the
|
|
1116
|
+
// hosted control plane drives it through the hosted delivery route below.
|
|
1117
|
+
// Session HTTP is a control-plane surface, so such a guest mounts no
|
|
1118
|
+
// `/v1/session*` or `/v1/sessions` routes — session starts arrive as hosted
|
|
1119
|
+
// admissions (`agentsdk.session` on the built-in http channel) and session
|
|
1120
|
+
// reads come from the control plane's runs surface and durable storage.
|
|
1121
|
+
// Local dev, self-hosted serve, and hosted v1 keep the engine mounts.
|
|
1122
|
+
const hostedV2Guest = noControlPlane === true && isV2Project(project);
|
|
1123
|
+
if (hostedV2Guest) {
|
|
1109
1124
|
registerHostedDeliveryRoute(Object.assign(Object.assign(Object.assign(Object.assign({ router,
|
|
1110
1125
|
base,
|
|
1111
1126
|
// The built-in http channel is not in `project.channels`; the control
|
|
@@ -1246,32 +1261,36 @@ function mountAgentRoutes(router, runtime, args) {
|
|
|
1246
1261
|
});
|
|
1247
1262
|
},
|
|
1248
1263
|
});
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
(
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1264
|
+
// Session list is session surface: not mounted on a hosted v2 guest (the
|
|
1265
|
+
// control plane owns session reads there; see hostedV2Guest above).
|
|
1266
|
+
if (!hostedV2Guest) {
|
|
1267
|
+
router.add({
|
|
1268
|
+
method: "GET",
|
|
1269
|
+
pattern: `${base}/v1/sessions`,
|
|
1270
|
+
auth: httpAuth,
|
|
1271
|
+
handler: (request, ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
1272
|
+
// Same gate as requireSessionOwner / relaxSessionReadAuth: never with
|
|
1273
|
+
// bearer or custom channel auth (strict per-principal isolation).
|
|
1274
|
+
// `--allow-anonymous` alone is a shared-principal trust boundary (corp
|
|
1275
|
+
// Okta ALB); `--dev` alone stays loopback-only.
|
|
1276
|
+
const includeAll = relaxSessionReadAuth &&
|
|
1277
|
+
(relaxSessionReadAuthBeyondLoopback ||
|
|
1278
|
+
(typeof ctx.requestIp === "string" &&
|
|
1279
|
+
isLoopbackAddress(ctx.requestIp)));
|
|
1280
|
+
// `?latest=1` — only the newest visible session. Clients binding a
|
|
1281
|
+
// default session (agsh) do not need the whole list, and on hosted
|
|
1282
|
+
// storage the whole list is a database scan.
|
|
1283
|
+
const latest = new URL(request.url).searchParams.get("latest");
|
|
1284
|
+
const listed = latest === "1" || latest === "true"
|
|
1285
|
+
? yield engine.latestSessionWithSource(ctx.auth, { includeAll })
|
|
1286
|
+
: yield engine.listSessionsWithSource(ctx.auth, { includeAll });
|
|
1287
|
+
return jsonResponse({
|
|
1288
|
+
sessions: listed.sessions,
|
|
1289
|
+
source: listed.source,
|
|
1290
|
+
});
|
|
1291
|
+
}),
|
|
1292
|
+
});
|
|
1293
|
+
}
|
|
1275
1294
|
// Durable artifacts (ctx.artifacts / tag_artifact), newest-updated first.
|
|
1276
1295
|
router.add({
|
|
1277
1296
|
method: "GET",
|
|
@@ -1512,6 +1531,41 @@ function mountAgentRoutes(router, runtime, args) {
|
|
|
1512
1531
|
}
|
|
1513
1532
|
}),
|
|
1514
1533
|
});
|
|
1534
|
+
// Deterministic skill reads: the body the harness would receive, plus
|
|
1535
|
+
// resolved sibling files. Read-only, so plain GETs with no session binding.
|
|
1536
|
+
router.add({
|
|
1537
|
+
method: "GET",
|
|
1538
|
+
pattern: `${base}/v1/skills`,
|
|
1539
|
+
auth: httpAuth,
|
|
1540
|
+
handler: () => __awaiter(this, void 0, void 0, function* () {
|
|
1541
|
+
return jsonResponse({
|
|
1542
|
+
skills: project.agent.skills.map(skillListEntry),
|
|
1543
|
+
});
|
|
1544
|
+
}),
|
|
1545
|
+
});
|
|
1546
|
+
router.add({
|
|
1547
|
+
method: "GET",
|
|
1548
|
+
pattern: `${base}/v1/skills/:skillName`,
|
|
1549
|
+
auth: httpAuth,
|
|
1550
|
+
handler: (_request, ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
1551
|
+
var _a;
|
|
1552
|
+
const skillName = (_a = ctx.params.skillName) !== null && _a !== void 0 ? _a : "";
|
|
1553
|
+
try {
|
|
1554
|
+
return jsonResponse(yield readSkillDetail(project.agent.skills, skillName));
|
|
1555
|
+
}
|
|
1556
|
+
catch (error) {
|
|
1557
|
+
if (error instanceof UnknownSkillError) {
|
|
1558
|
+
return jsonResponse({
|
|
1559
|
+
ok: false,
|
|
1560
|
+
error: "unknown_skill",
|
|
1561
|
+
message: error.message,
|
|
1562
|
+
availableSkills: error.availableSkillNames,
|
|
1563
|
+
}, { status: 404 });
|
|
1564
|
+
}
|
|
1565
|
+
throw error;
|
|
1566
|
+
}
|
|
1567
|
+
}),
|
|
1568
|
+
});
|
|
1515
1569
|
if (playground) {
|
|
1516
1570
|
// Serve the built Vite SPA. `<base href>` is injected so the SPA's relative
|
|
1517
1571
|
// asset URLs resolve under this mount regardless of the trailing slash the
|
|
@@ -1533,18 +1587,25 @@ function mountAgentRoutes(router, runtime, args) {
|
|
|
1533
1587
|
handler: (_request, ctx) => { var _a; return renderPlaygroundAsset((_a = ctx.params.file) !== null && _a !== void 0 ? _a : ""); },
|
|
1534
1588
|
});
|
|
1535
1589
|
}
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1590
|
+
// The built-in HTTP session channel (`/v1/session*`, including the
|
|
1591
|
+
// session-scoped approvals/auths routes) is session surface: not mounted on
|
|
1592
|
+
// a hosted v2 guest (see hostedV2Guest above). The `http` channel itself
|
|
1593
|
+
// stays registered with the hosted delivery route, which is how the control
|
|
1594
|
+
// plane's session starts reach it.
|
|
1595
|
+
if (!hostedV2Guest) {
|
|
1596
|
+
for (const route of buildHttpChannelRoutes({
|
|
1597
|
+
engine,
|
|
1598
|
+
config: project.httpChannel,
|
|
1599
|
+
auth: httpAuth,
|
|
1600
|
+
basePath: base,
|
|
1601
|
+
// Dev playground lists every session (`includeAll`); allow opening them
|
|
1602
|
+
// (see relaxSessionReadAuth above).
|
|
1603
|
+
relaxSessionReadAuth,
|
|
1604
|
+
relaxSessionReadAuthBeyondLoopback,
|
|
1605
|
+
relaxSessionApprovalAuth,
|
|
1606
|
+
})) {
|
|
1607
|
+
router.add(route);
|
|
1608
|
+
}
|
|
1548
1609
|
}
|
|
1549
1610
|
// Playground eval list/run — available without `--dev` (corp / allow-anonymous).
|
|
1550
1611
|
// Schedule/reminder hand-dispatch stays `--dev` only below.
|
|
@@ -2260,9 +2321,11 @@ function handleRequest(router, req, res, logger) {
|
|
|
2260
2321
|
? ((_c = error.stack) !== null && _c !== void 0 ? _c : error.message)
|
|
2261
2322
|
: String(error)}`);
|
|
2262
2323
|
const snippet = hostedErrorStackSnippet(error);
|
|
2263
|
-
const message =
|
|
2264
|
-
?
|
|
2265
|
-
:
|
|
2324
|
+
const message = hostedDeliveryRequest
|
|
2325
|
+
? hostedErrorMessageOnly(error)
|
|
2326
|
+
: snippet.length > 0
|
|
2327
|
+
? `Internal server error: ${snippet}`
|
|
2328
|
+
: "Internal server error.";
|
|
2266
2329
|
response = hostedDeliveryRequest
|
|
2267
2330
|
? hostedGuestErrorResponse({
|
|
2268
2331
|
status: 500,
|