@cursor/bdk 0.2.24 → 0.2.25
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/AGENTS.md +1 -0
- package/dist/bin/agent-serve.d.ts +1 -1
- package/dist/bin/agent-serve.js +48 -12
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +3 -2
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +14 -9
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +9 -18
- package/dist/channels/pagerduty/api.d.ts +74 -0
- package/dist/channels/pagerduty/api.d.ts.map +1 -0
- package/dist/channels/pagerduty/api.js +101 -0
- package/dist/channels/pagerduty/defaults.d.ts +42 -0
- package/dist/channels/pagerduty/defaults.d.ts.map +1 -0
- package/dist/channels/pagerduty/defaults.js +132 -0
- package/dist/channels/pagerduty/events.d.ts +24 -0
- package/dist/channels/pagerduty/events.d.ts.map +1 -0
- package/dist/channels/pagerduty/events.js +38 -0
- package/dist/channels/pagerduty/index.d.ts +31 -0
- package/dist/channels/pagerduty/index.d.ts.map +1 -0
- package/dist/channels/pagerduty/index.js +30 -0
- package/dist/channels/pagerduty/pagerduty-channel.d.ts +64 -0
- package/dist/channels/pagerduty/pagerduty-channel.d.ts.map +1 -0
- package/dist/channels/pagerduty/pagerduty-channel.js +195 -0
- package/dist/channels/pagerduty/pagerduty-webhook.d.ts +70 -0
- package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -0
- package/dist/channels/pagerduty/pagerduty-webhook.js +280 -0
- package/dist/channels/pagerduty/payload.d.ts +33 -0
- package/dist/channels/pagerduty/payload.d.ts.map +1 -0
- package/dist/channels/pagerduty/payload.js +150 -0
- package/dist/channels/pagerduty/replay.d.ts +35 -0
- package/dist/channels/pagerduty/replay.d.ts.map +1 -0
- package/dist/channels/pagerduty/replay.js +115 -0
- package/dist/channels/pagerduty/secrets.d.ts +16 -0
- package/dist/channels/pagerduty/secrets.d.ts.map +1 -0
- package/dist/channels/pagerduty/secrets.js +23 -0
- package/dist/channels/pagerduty/self-user.d.ts +51 -0
- package/dist/channels/pagerduty/self-user.d.ts.map +1 -0
- package/dist/channels/pagerduty/self-user.js +157 -0
- package/dist/channels/pagerduty/state.d.ts +31 -0
- package/dist/channels/pagerduty/state.d.ts.map +1 -0
- package/dist/channels/pagerduty/state.js +30 -0
- package/dist/channels/pagerduty/types.d.ts +217 -0
- package/dist/channels/pagerduty/types.d.ts.map +1 -0
- package/dist/channels/pagerduty/types.js +1 -0
- package/dist/channels.d.ts +6 -0
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +11 -23
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.DTIg0uKK.js → app.BjS1QEI4.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BpJoSaxi.js → VPLocalSearchBox.BOuvjb5Y.js} +1 -1
- package/dist/docs/assets/chunks/{arc.ylgNvRNq.js → arc.3WR6Jf-y.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.BMrNJqYk.js → architectureDiagram-Q4EWVU46.Dtb6Dqh6.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.BBWUEqf9.js → baseUniq.BUyrgrZE.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DFMu-Vza.js → blockDiagram-DXYQGD6D.BVLV_voZ.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.8nkAAxWv.js → c4Diagram-AHTNJAMY.jXJ1q70M.js} +1 -1
- package/dist/docs/assets/chunks/channel.Dt4aweTm.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.sO-z2Bag.js → chunk-4BX2VUAB.zz1SMBvK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BMROzTMq.js → chunk-4TB4RGXK.CzYKuv3I.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.X81urwg7.js → chunk-55IACEB6.C7_tcJZD.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.eaZVFLZM.js → chunk-EDXVE4YY.DeTwQPVO.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CmZhzstR.js → chunk-FMBD7UC4.DhMTl7ut.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CTezt9Lc.js → chunk-OYMX7WX6.Me7f5hEp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.s-T8zukB.js → chunk-QZHKN3VN.D0E0Bb6g.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DN4Nhy-D.js → chunk-YZCP3GAM.CdOOBFYL.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +1 -0
- package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Cqyp4BUH.js → cose-bilkent-S5V4N54A.BNbGESzN.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.BIECOiqR.js → dagre-KV5264BT.zU7Lu_xJ.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.1tLyWoTg.js → diagram-5BDNPKRD.B9qOdE5h.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.BVY_6VMO.js → diagram-G4DWMVQ6.D8X-sf77.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BSZ7xiBB.js → diagram-MMDJMWI5.CW7MvMlE.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.Bho6GmLh.js → diagram-TYMM5635.J489G0Nd.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.A0yVIANn.js → erDiagram-SMLLAGMA.BkW7tGfs.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.ZMgbllH6.js → flowDiagram-DWJPFMVM.jc9iWORD.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.BCCPBhXo.js → ganttDiagram-T4ZO3ILL.B-UQfd9E.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.BOkL0BbA.js → gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js} +1 -1
- package/dist/docs/assets/chunks/{graph.DMyZPu86.js → graph.C5IB6_e_.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.CjG1IiEw.js → infoDiagram-42DDH7IO.DwF0-c8L.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.UCe-kq9g.js → ishikawaDiagram-UXIWVN3A.fBaTqzE7.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.3WyOK_eY.js → journeyDiagram-VCZTEJTY.CM8gDVJy.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.WoRG2qY1.js → kanban-definition-6JOO6SKY.YiD1p0LB.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DV07xDd5.js → layout.6Um-DVJT.js} +1 -1
- package/dist/docs/assets/chunks/{linear.CTO8mN6o.js → linear.DcTeg4Hn.js} +1 -1
- package/dist/docs/assets/chunks/{min.SvTtcKuZ.js → min.CIxkY8Fe.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.DMGgQ-HB.js → mindmap-definition-QFDTVHPH.D4QM_voR.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B7851apI.js → pieDiagram-DEJITSTG.nmB309G1.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CEqyypIX.js → quadrantDiagram-34T5L4WZ.D1HtZR3C.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.C3Mwsw-H.js → requirementDiagram-MS252O5E.CZgQWob-.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DyYK0XxY.js → sankeyDiagram-XADWPNL6.DtiBfU-P.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.SiQPH-XM.js → sequenceDiagram-FGHM5R23.Cld4gDSt.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CTJMsP4p.js → stateDiagram-FHFEXIEX.DatP823_.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +1 -0
- package/dist/docs/assets/chunks/{theme.DJo4my9R.js → theme.D5jbBys7.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.CxSNRlQ6.js → timeline-definition-GMOUNBTQ.DwQLI2be.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BdoJskyD.js → vennDiagram-DHZGUBPP.a5yMfnsa.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.B-FXivgT.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.IjIbFn_F.js → wardleyDiagram-NUSXRM2D.Dz--Opy3.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CPUxDZLH.js → xychartDiagram-5P7HB3ND.Dl8w8TeT.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.Ck1o2frw.js → guides_opentelemetry.md.DBQtp7_V.js} +4 -4
- package/dist/docs/assets/{guides_opentelemetry.md.Ck1o2frw.lean.js → guides_opentelemetry.md.DBQtp7_V.lean.js} +1 -1
- package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.js +60 -0
- package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.lean.js +1 -0
- package/dist/docs/assets/{reference_channels.md.DYg0CLud.js → reference_channels.md.Bxaa020x.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.DB7Llw3T.js → reference_cli.md.1o_TqKdt.js} +7 -2
- package/dist/docs/assets/{reference_cli.md.DB7Llw3T.lean.js → reference_cli.md.1o_TqKdt.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.08XR7lIl.js → reference_tools.md.-6pypsWt.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +35 -35
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +36 -36
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/export-grokbot.html +35 -35
- package/dist/docs/guides/github.html +35 -35
- package/dist/docs/guides/gitlab.html +35 -35
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/migrate.html +35 -35
- package/dist/docs/guides/opentelemetry.html +39 -39
- package/dist/docs/guides/opentelemetry.md +10 -5
- package/dist/docs/guides/pagerduty.html +119 -0
- package/dist/docs/guides/pagerduty.md +336 -0
- package/dist/docs/guides/slack.html +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +381 -6
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +37 -37
- package/dist/docs/reference/channels.md +2 -1
- package/dist/docs/reference/cli.html +42 -37
- package/dist/docs/reference/cli.md +27 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +36 -36
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/memory.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +35 -35
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +37 -37
- package/dist/docs/reference/tools.md +1 -0
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +35 -35
- package/dist/internal/approval-gate.d.ts +4 -2
- package/dist/internal/approval-gate.d.ts.map +1 -1
- package/dist/internal/approval-gate.js +2 -1
- package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
- package/dist/internal/builtin-tools/artifacts.js +45 -12
- package/dist/internal/channel-architecture.d.ts +1 -1
- package/dist/internal/channel-architecture.d.ts.map +1 -1
- package/dist/internal/channel-architecture.js +4 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +21 -12
- package/dist/internal/cli-pagerduty.d.ts +32 -0
- package/dist/internal/cli-pagerduty.d.ts.map +1 -0
- package/dist/internal/cli-pagerduty.js +242 -0
- package/dist/internal/continuation-channel.d.ts.map +1 -1
- package/dist/internal/continuation-channel.js +7 -0
- package/dist/internal/continuation-identity.d.ts +11 -3
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +83 -0
- package/dist/internal/deploy-manifest.d.ts +11 -4
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +17 -5
- package/dist/internal/discovery/agent-config.d.ts.map +1 -1
- package/dist/internal/discovery/agent-config.js +10 -10
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +10 -10
- package/dist/internal/discovery/channels.d.ts.map +1 -1
- package/dist/internal/discovery/channels.js +20 -16
- package/dist/internal/discovery/context.d.ts +16 -0
- package/dist/internal/discovery/context.d.ts.map +1 -1
- package/dist/internal/discovery/context.js +66 -0
- package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
- package/dist/internal/discovery/extension-overlay.js +2 -6
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +3 -0
- package/dist/internal/discovery/instructions.d.ts.map +1 -1
- package/dist/internal/discovery/instructions.js +3 -6
- package/dist/internal/discovery/modules.d.ts.map +1 -1
- package/dist/internal/discovery/modules.js +3 -6
- package/dist/internal/discovery/project.d.ts +6 -0
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +27 -5
- package/dist/internal/discovery/runtime.d.ts.map +1 -1
- package/dist/internal/discovery/runtime.js +8 -8
- package/dist/internal/discovery.d.ts +1 -1
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +1 -1
- package/dist/internal/expected-delivery-failure.d.ts.map +1 -1
- package/dist/internal/expected-delivery-failure.js +6 -0
- package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -1
- package/dist/internal/filesystem/sdk-schemas.js +4 -3
- package/dist/internal/hmac-secret-values.d.ts +48 -0
- package/dist/internal/hmac-secret-values.d.ts.map +1 -0
- package/dist/internal/hmac-secret-values.js +68 -0
- package/dist/internal/host-platforms.d.ts.map +1 -1
- package/dist/internal/host-platforms.js +8 -2
- package/dist/internal/json-schema.d.ts +7 -7
- package/dist/internal/json-schema.d.ts.map +1 -1
- package/dist/internal/json-schema.js +13 -16
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +3 -1
- package/dist/internal/otel/config.d.ts +6 -1
- package/dist/internal/otel/config.d.ts.map +1 -1
- package/dist/internal/otel/config.js +27 -1
- package/dist/internal/otel/runtime.d.ts.map +1 -1
- package/dist/internal/otel/runtime.js +26 -3
- package/dist/internal/package-inline-stdio.d.ts.map +1 -1
- package/dist/internal/package-inline-stdio.js +21 -6
- package/dist/internal/sdk-runner.d.ts +2 -3
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +8 -4
- package/dist/internal/secret-alternatives.d.ts +11 -0
- package/dist/internal/secret-alternatives.d.ts.map +1 -0
- package/dist/internal/secret-alternatives.js +13 -0
- package/dist/internal/server.js +2 -2
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +5 -4
- package/dist/internal/sqlite-experimental-warning.d.ts +2 -0
- package/dist/internal/sqlite-experimental-warning.d.ts.map +1 -0
- package/dist/internal/sqlite-experimental-warning.js +22 -0
- package/dist/internal/testing/conversation-identity-vectors.d.ts +6 -1
- package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -1
- package/dist/internal/testing/conversation-identity-vectors.js +34 -0
- package/dist/internal/testing/hmac-secret-vectors.d.ts +38 -0
- package/dist/internal/testing/hmac-secret-vectors.d.ts.map +1 -0
- package/dist/internal/testing/hmac-secret-vectors.js +89 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts +42 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.js +175 -0
- package/dist/internal/zod-schema.d.ts +14 -0
- package/dist/internal/zod-schema.d.ts.map +1 -0
- package/dist/internal/zod-schema.js +22 -0
- package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
- package/dist/playground/assets/index-BdMwybMt.css +1 -0
- package/dist/playground/assets/{index-DKKdkF29.js → index-CHk6O92d.js} +38 -38
- package/dist/playground/index.html +2 -2
- package/dist/tools.d.ts +13 -10
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +3 -2
- package/dist/types.d.ts +67 -16
- package/dist/types.d.ts.map +1 -1
- package/docs/guides/opentelemetry.md +10 -5
- package/docs/guides/pagerduty.md +341 -0
- package/docs/reference/channels.md +2 -1
- package/docs/reference/cli.md +27 -0
- package/docs/reference/tools.md +1 -0
- package/package.json +10 -3
- package/skills/migrate-v2/SKILL.md +1 -1
- package/skills/otel/SKILL.md +7 -3
- package/templates/agentic-owners/README.md +6 -1
- package/templates/agentic-owners/bot/lib/owners/decision.ts +31 -5
- package/templates/agentic-owners/bot/lib/owners/globalOverride.ts +60 -0
- package/templates/agentic-owners/bot/lib/owners/match.ts +85 -19
- package/templates/agentic-owners/bot/lib/owners/parse.ts +133 -2
- package/templates/agentic-owners/bot/lib/owners/types.ts +23 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.3ebvCWKy.js +0 -1
- package/dist/docs/assets/chunks/channel.BOebySCN.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C55IaN-T.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C55IaN-T.js +0 -1
- package/dist/docs/assets/chunks/clone.D06pA7ML.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DddRVjeq.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.CVCRSuQK.js +0 -162
- package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
- package/dist/playground/assets/index-DpKinTMs.css +0 -1
- /package/dist/docs/assets/{reference_channels.md.DYg0CLud.lean.js → reference_channels.md.Bxaa020x.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.08XR7lIl.lean.js → reference_tools.md.-6pypsWt.lean.js} +0 -0
|
@@ -8,7 +8,7 @@ import { applyAgentContinuationDefaults, warnOmittedContinuationDowngrades, } fr
|
|
|
8
8
|
import { httpChannel } from "../http-channel-define.js";
|
|
9
9
|
import { loadAgent, warnUnknownSlots } from "./agent.js";
|
|
10
10
|
import { loadChannels } from "./channels.js";
|
|
11
|
-
import { defaultImportModule, displayPath, } from "./context.js";
|
|
11
|
+
import { defaultImportModule, displayPath, pushConfigDiagnostic, } from "./context.js";
|
|
12
12
|
import { hasFlatLayoutMarkers, isDirectory, readPackageName, sortedEntries } from "./fs.js";
|
|
13
13
|
import { loadHooks } from "./hooks.js";
|
|
14
14
|
import { NAME_PATTERN, RESERVED_SLUGS } from "./names.js";
|
|
@@ -166,7 +166,7 @@ export async function loadAgentProject(dir, options = {}) {
|
|
|
166
166
|
const { channels, httpChannelDefinition } = await loadChannels(ctx, join(agentDir, "channels"));
|
|
167
167
|
for (const channel of projectSlots.channels) {
|
|
168
168
|
if (channel.id === "http" || channels.some((c) => c.id === channel.id)) {
|
|
169
|
-
ctx
|
|
169
|
+
pushConfigDiagnostic(ctx, {
|
|
170
170
|
severity: "error",
|
|
171
171
|
path: displayPath(ctx, join(agentDir, "extensions")),
|
|
172
172
|
message: `Extension channel "${channel.id}" collides with an agent channel.`,
|
|
@@ -194,18 +194,26 @@ export async function loadAgentProject(dir, options = {}) {
|
|
|
194
194
|
const channelPath = displayPath(ctx, join(agentDir, "channels", `${channel.id}.ts`));
|
|
195
195
|
const architectureError = channelArchitectureError(agent.architecture, channel.definition);
|
|
196
196
|
if (architectureError !== undefined) {
|
|
197
|
-
ctx
|
|
197
|
+
pushConfigDiagnostic(ctx, {
|
|
198
|
+
severity: "error",
|
|
199
|
+
path: channelPath,
|
|
200
|
+
message: architectureError,
|
|
201
|
+
});
|
|
198
202
|
}
|
|
199
203
|
const migrationWarning = channelArchitectureMigrationWarning(agent.architecture, channel.definition);
|
|
200
204
|
if (migrationWarning !== undefined) {
|
|
201
|
-
ctx
|
|
205
|
+
pushConfigDiagnostic(ctx, {
|
|
206
|
+
severity: "warning",
|
|
207
|
+
path: channelPath,
|
|
208
|
+
message: migrationWarning,
|
|
209
|
+
});
|
|
202
210
|
}
|
|
203
211
|
}
|
|
204
212
|
warnOmittedContinuationDowngrades({
|
|
205
213
|
architecture: agent.architecture,
|
|
206
214
|
channels,
|
|
207
215
|
warn: (id, message) => {
|
|
208
|
-
ctx
|
|
216
|
+
pushConfigDiagnostic(ctx, {
|
|
209
217
|
severity: "warning",
|
|
210
218
|
path: displayPath(ctx, join(agentDir, "channels", `${id}.ts`)),
|
|
211
219
|
message,
|
|
@@ -264,3 +272,17 @@ export function formatDiagnostics(diagnostics) {
|
|
|
264
272
|
})
|
|
265
273
|
.join("\n");
|
|
266
274
|
}
|
|
275
|
+
export function formatValidateJson(mounts) {
|
|
276
|
+
const agents = mounts.map(({ slug, project }) => ({
|
|
277
|
+
slug,
|
|
278
|
+
diagnostics: project.diagnostics.map((diagnostic) => ({
|
|
279
|
+
severity: diagnostic.severity,
|
|
280
|
+
code: diagnostic.code ?? "other",
|
|
281
|
+
path: diagnostic.path,
|
|
282
|
+
package: diagnostic.package,
|
|
283
|
+
message: diagnostic.message,
|
|
284
|
+
})),
|
|
285
|
+
}));
|
|
286
|
+
const ok = !agents.some((agent) => agent.diagnostics.some((diagnostic) => diagnostic.severity === "error"));
|
|
287
|
+
return `${JSON.stringify({ version: 1, ok, agents })}\n`;
|
|
288
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAqC,MAAM,cAAc,CAAC;AAExF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,GAAG,SAAS,GAChC,YAAY,CAed;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IACN,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,GACA,IAAI,CA2DN;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IACN,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B,GACA,IAAI,CAkCN"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Runtime resolution and the limitations each runtime imposes on the authored surface.
|
|
3
3
|
*/
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import { displayPath } from "./context.js";
|
|
5
|
+
import { displayPath, pushConfigDiagnostic } from "./context.js";
|
|
6
6
|
/**
|
|
7
7
|
* Validate the authored runtime. An unrecognized value is an error
|
|
8
8
|
* diagnostic and falls back to local — a typo must not silently pick a
|
|
@@ -15,7 +15,7 @@ export function resolveRuntime(ctx, agentDir, runtime) {
|
|
|
15
15
|
runtime === "grokbot") {
|
|
16
16
|
return runtime ?? "local";
|
|
17
17
|
}
|
|
18
|
-
ctx
|
|
18
|
+
pushConfigDiagnostic(ctx, {
|
|
19
19
|
severity: "error",
|
|
20
20
|
path: displayPath(ctx, join(agentDir, "agent.ts")),
|
|
21
21
|
message: `runtime must be "local", "cloud", or "grokbot"; got ${JSON.stringify(runtime)}.`,
|
|
@@ -31,10 +31,10 @@ export function resolveRuntime(ctx, agentDir, runtime) {
|
|
|
31
31
|
export function checkGrokBotRuntimeLimitations(ctx, agentDir, counts) {
|
|
32
32
|
const agentPath = displayPath(ctx, join(agentDir, "agent.ts"));
|
|
33
33
|
const error = (path, message) => {
|
|
34
|
-
ctx
|
|
34
|
+
pushConfigDiagnostic(ctx, { severity: "error", path, message });
|
|
35
35
|
};
|
|
36
36
|
const warn = (path, message) => {
|
|
37
|
-
ctx
|
|
37
|
+
pushConfigDiagnostic(ctx, { severity: "warning", path, message });
|
|
38
38
|
};
|
|
39
39
|
if (counts.serverTools > 0) {
|
|
40
40
|
error(displayPath(ctx, join(agentDir, "tools")), 'Server tools (execution: "server", including opted-in builtinTools) are not reachable from grokbot turns yet. Remove them or run the agent on the local runtime.');
|
|
@@ -67,28 +67,28 @@ export function checkGrokBotRuntimeLimitations(ctx, agentDir, counts) {
|
|
|
67
67
|
export function warnCloudRuntimeLimitations(ctx, agentDir, counts) {
|
|
68
68
|
const agentPath = displayPath(ctx, join(agentDir, "agent.ts"));
|
|
69
69
|
if (!counts.hasCloudOptions) {
|
|
70
|
-
ctx
|
|
70
|
+
pushConfigDiagnostic(ctx, {
|
|
71
71
|
severity: "warning",
|
|
72
72
|
path: agentPath,
|
|
73
73
|
message: 'runtime: "cloud" usually needs a `cloud` block (e.g. repos / env). Without it the Cursor cloud API may reject create.',
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
76
|
if (counts.agentTools > 0) {
|
|
77
|
-
ctx
|
|
77
|
+
pushConfigDiagnostic(ctx, {
|
|
78
78
|
severity: "warning",
|
|
79
79
|
path: displayPath(ctx, join(agentDir, "tools")),
|
|
80
80
|
message: 'Agent tools (execution: "agent") are described on the first cloud prompt (with script bodies); they are not written into the cloud VM filesystem automatically.',
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
83
|
if (counts.skills > 0) {
|
|
84
|
-
ctx
|
|
84
|
+
pushConfigDiagnostic(ctx, {
|
|
85
85
|
severity: "warning",
|
|
86
86
|
path: displayPath(ctx, join(agentDir, "skills")),
|
|
87
87
|
message: "Authored skills reach cloud agents through native store discovery: hosted deployments write the deployment store's skills/ directory; local serve/run with a personal API key writes agent-serve/<agent>/skills/ on the USER store. Without a reachable store, only skills already in the cloud repo are visible.",
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
if (counts.seedFiles > 0) {
|
|
91
|
-
ctx
|
|
91
|
+
pushConfigDiagnostic(ctx, {
|
|
92
92
|
severity: "warning",
|
|
93
93
|
path: displayPath(ctx, join(agentDir, "sandbox")),
|
|
94
94
|
message: "sandbox/workspace seed files reach cloud agents through the Agent Store, not the checkout: hosted deployments write the deployment store's workspace/ directory; local serve/run with a personal API key writes agent-serve/<agent>/workspace/ on the USER store. The first cloud prompt names the mounted directory. Without a reachable store, cloud turns do not see them.",
|
|
@@ -11,5 +11,5 @@
|
|
|
11
11
|
export { DEFAULT_AGENT_ARCHITECTURE, runtimeArchitectureCompatibilityError, } from "./discovery/agent-config.js";
|
|
12
12
|
export type { LoadAgentProjectOptions } from "./discovery/context.js";
|
|
13
13
|
export { projectInfo } from "./discovery/info.js";
|
|
14
|
-
export { type ChildAgentDir, formatDiagnostics, hasErrorDiagnostics, isAgentProjectDir, listChildAgentDirs, loadAgentProject, loadAgentProjects, resolveAgentMounts, } from "./discovery/project.js";
|
|
14
|
+
export { type ChildAgentDir, formatDiagnostics, formatValidateJson, hasErrorDiagnostics, isAgentProjectDir, listChildAgentDirs, loadAgentProject, loadAgentProjects, resolveAgentMounts, } from "./discovery/project.js";
|
|
15
15
|
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,0BAA0B,EAC1B,qCAAqC,GACtC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,0BAA0B,EAC1B,qCAAqC,GACtC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC"}
|
|
@@ -10,4 +10,4 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export { DEFAULT_AGENT_ARCHITECTURE, runtimeArchitectureCompatibilityError, } from "./discovery/agent-config.js";
|
|
12
12
|
export { projectInfo } from "./discovery/info.js";
|
|
13
|
-
export { formatDiagnostics, hasErrorDiagnostics, isAgentProjectDir, listChildAgentDirs, loadAgentProject, loadAgentProjects, resolveAgentMounts, } from "./discovery/project.js";
|
|
13
|
+
export { formatDiagnostics, formatValidateJson, hasErrorDiagnostics, isAgentProjectDir, listChildAgentDirs, loadAgentProject, loadAgentProjects, resolveAgentMounts, } from "./discovery/project.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expected-delivery-failure.d.ts","sourceRoot":"","sources":["../../src/internal/expected-delivery-failure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expected-delivery-failure.d.ts","sourceRoot":"","sources":["../../src/internal/expected-delivery-failure.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,6BAA6B,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAE7E,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,6BAA6B,GAAG,SAAS,CAY3C"}
|
|
@@ -11,6 +11,12 @@ const USAGE_LIMIT_PHRASES = [
|
|
|
11
11
|
// Billing titles insert "monthly", or say "hit" instead of "reached".
|
|
12
12
|
"monthly usage limit",
|
|
13
13
|
"hit your usage limit",
|
|
14
|
+
// Prepaid wallets: the additional-usage cap or an exhausted balance.
|
|
15
|
+
"monthly additional usage limit",
|
|
16
|
+
"additional usage is off",
|
|
17
|
+
"prepaid balance is used up",
|
|
18
|
+
// A team's spend reached the budget its organization set.
|
|
19
|
+
"team budget limit reached",
|
|
14
20
|
];
|
|
15
21
|
const UNPAID_INVOICE_PHRASES = ["unpaid invoice"];
|
|
16
22
|
export function classifyExpectedDeliveryFailure(message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-schemas.d.ts","sourceRoot":"","sources":["../../../src/internal/filesystem/sdk-schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAmB3B,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAE1B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAM7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,UAI3B,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,UAO9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAE5B,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,UAI/B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAO7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAe1B,CAAC;AAuCH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAK7B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,UAGxB,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk-schemas.d.ts","sourceRoot":"","sources":["../../../src/internal/filesystem/sdk-schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAmB3B,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAE1B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAM7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,UAI3B,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,UAO9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAE5B,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,UAI/B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAO7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAe1B,CAAC;AAuCH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAK7B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,UAGxB,CAAC;AAgBH,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAI3B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,UAKhC,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAM7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,UAI/B,CAAC;AAEH,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,UAIlC,CAAC"}
|
|
@@ -120,14 +120,15 @@ export const sdkLsArgs = z.object({
|
|
|
120
120
|
const lsDirectoryTreeNodeFile = z.object({
|
|
121
121
|
name: z.string(),
|
|
122
122
|
});
|
|
123
|
-
|
|
123
|
+
// Not z.lazy: zod-to-json-schema warns on recursion with $refStrategy "none".
|
|
124
|
+
const lsDirectoryTreeNode = z.object({
|
|
124
125
|
absPath: z.string(),
|
|
125
|
-
childrenDirs: z.array(
|
|
126
|
+
childrenDirs: z.array(z.unknown()),
|
|
126
127
|
childrenFiles: z.array(lsDirectoryTreeNodeFile),
|
|
127
128
|
childrenWereProcessed: z.boolean(),
|
|
128
129
|
fullSubtreeExtensionCounts: z.record(z.number()),
|
|
129
130
|
numFiles: z.number(),
|
|
130
|
-
})
|
|
131
|
+
});
|
|
131
132
|
export const sdkLsResult = resultSchema(z.object({
|
|
132
133
|
directoryTreeRoot: lsDirectoryTreeNode,
|
|
133
134
|
}));
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-value HMAC secrets, July copy. The control plane keeps an
|
|
3
|
+
* equivalent parser and matcher in
|
|
4
|
+
* `backend/packages/server-shared/src/agentServe/agentSdkCatch.ts`; a
|
|
5
|
+
* backend drift test runs both over the shared vectors in
|
|
6
|
+
* `testing/hmac-secret-vectors.ts`.
|
|
7
|
+
*
|
|
8
|
+
* One named secret may hold several signing secrets, one per line, so a
|
|
9
|
+
* route that several provider subscriptions sign (each with its own
|
|
10
|
+
* secret), or one whose secret is mid-rotation, verifies under any of
|
|
11
|
+
* them. A value with no line break is one secret, used byte-for-byte.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Most signing secrets one named secret may hold. The control plane runs
|
|
15
|
+
* one HMAC per value over every unauthenticated request before any
|
|
16
|
+
* per-deployment limit applies, so the count is bounded rather than left to
|
|
17
|
+
* the secret's byte limit. A value over the cap verifies nothing.
|
|
18
|
+
*/
|
|
19
|
+
export declare const MAX_HMAC_SECRET_VALUES = 32;
|
|
20
|
+
/** At least one signing secret. */
|
|
21
|
+
export type HmacSecrets = readonly [string, ...string[]];
|
|
22
|
+
export type ParsedHmacSecrets = {
|
|
23
|
+
ok: true;
|
|
24
|
+
secrets: HmacSecrets;
|
|
25
|
+
} | {
|
|
26
|
+
ok: false;
|
|
27
|
+
reason: "unset" | "too_many_values";
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The signing secrets a named secret's value holds. Lines are trimmed and
|
|
31
|
+
* blank lines dropped; an unset or blank value is `unset`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseHmacSecrets(raw: string | undefined): ParsedHmacSecrets;
|
|
34
|
+
/**
|
|
35
|
+
* True when any signature in `presented` is `prefix` + the hex HMAC-SHA256
|
|
36
|
+
* of `body` under any of `secrets`. Without a `separator` the whole value is
|
|
37
|
+
* one signature. Every (secret, signature) pair is compared in constant
|
|
38
|
+
* time with no early exit, so timing does not reveal which matched; entries
|
|
39
|
+
* without the prefix never match.
|
|
40
|
+
*/
|
|
41
|
+
export declare function hmacSignatureMatchesAny(args: {
|
|
42
|
+
body: string | Buffer;
|
|
43
|
+
presented: string;
|
|
44
|
+
secrets: HmacSecrets;
|
|
45
|
+
prefix: string;
|
|
46
|
+
separator: string | undefined;
|
|
47
|
+
}): boolean;
|
|
48
|
+
//# sourceMappingURL=hmac-secret-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmac-secret-values.d.ts","sourceRoot":"","sources":["../../src/internal/hmac-secret-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,mCAAmC;AACnC,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAIvD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAe3E;AAQD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,GAAG,OAAO,CAmBV"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-value HMAC secrets, July copy. The control plane keeps an
|
|
3
|
+
* equivalent parser and matcher in
|
|
4
|
+
* `backend/packages/server-shared/src/agentServe/agentSdkCatch.ts`; a
|
|
5
|
+
* backend drift test runs both over the shared vectors in
|
|
6
|
+
* `testing/hmac-secret-vectors.ts`.
|
|
7
|
+
*
|
|
8
|
+
* One named secret may hold several signing secrets, one per line, so a
|
|
9
|
+
* route that several provider subscriptions sign (each with its own
|
|
10
|
+
* secret), or one whose secret is mid-rotation, verifies under any of
|
|
11
|
+
* them. A value with no line break is one secret, used byte-for-byte.
|
|
12
|
+
*/
|
|
13
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
14
|
+
/**
|
|
15
|
+
* Most signing secrets one named secret may hold. The control plane runs
|
|
16
|
+
* one HMAC per value over every unauthenticated request before any
|
|
17
|
+
* per-deployment limit applies, so the count is bounded rather than left to
|
|
18
|
+
* the secret's byte limit. A value over the cap verifies nothing.
|
|
19
|
+
*/
|
|
20
|
+
export const MAX_HMAC_SECRET_VALUES = 32;
|
|
21
|
+
const LINE_BREAK = /\r\n|\n|\r/;
|
|
22
|
+
/**
|
|
23
|
+
* The signing secrets a named secret's value holds. Lines are trimmed and
|
|
24
|
+
* blank lines dropped; an unset or blank value is `unset`.
|
|
25
|
+
*/
|
|
26
|
+
export function parseHmacSecrets(raw) {
|
|
27
|
+
const [first, ...rest] = raw === undefined || !LINE_BREAK.test(raw)
|
|
28
|
+
? [raw ?? ""].filter((value) => value !== "")
|
|
29
|
+
: raw
|
|
30
|
+
.split(LINE_BREAK)
|
|
31
|
+
.map((line) => line.trim())
|
|
32
|
+
.filter((line) => line !== "");
|
|
33
|
+
if (first === undefined) {
|
|
34
|
+
return { ok: false, reason: "unset" };
|
|
35
|
+
}
|
|
36
|
+
if (rest.length + 1 > MAX_HMAC_SECRET_VALUES) {
|
|
37
|
+
return { ok: false, reason: "too_many_values" };
|
|
38
|
+
}
|
|
39
|
+
return { ok: true, secrets: [first, ...rest] };
|
|
40
|
+
}
|
|
41
|
+
function constantTimeStringEquals(a, b) {
|
|
42
|
+
const aBytes = Buffer.from(a, "utf8");
|
|
43
|
+
const bBytes = Buffer.from(b, "utf8");
|
|
44
|
+
return aBytes.length === bBytes.length && timingSafeEqual(aBytes, bBytes);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* True when any signature in `presented` is `prefix` + the hex HMAC-SHA256
|
|
48
|
+
* of `body` under any of `secrets`. Without a `separator` the whole value is
|
|
49
|
+
* one signature. Every (secret, signature) pair is compared in constant
|
|
50
|
+
* time with no early exit, so timing does not reveal which matched; entries
|
|
51
|
+
* without the prefix never match.
|
|
52
|
+
*/
|
|
53
|
+
export function hmacSignatureMatchesAny(args) {
|
|
54
|
+
const entries = (args.separator === undefined || args.separator.length === 0
|
|
55
|
+
? [args.presented]
|
|
56
|
+
: args.presented.split(args.separator)).map((raw) => raw.trim());
|
|
57
|
+
let matched = false;
|
|
58
|
+
for (const secret of args.secrets) {
|
|
59
|
+
const expected = createHmac("sha256", secret).update(args.body).digest("hex");
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
if (entry.startsWith(args.prefix) &&
|
|
62
|
+
constantTimeStringEquals(entry.slice(args.prefix.length).toLowerCase(), expected)) {
|
|
63
|
+
matched = true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return matched;
|
|
68
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-platforms.d.ts","sourceRoot":"","sources":["../../src/internal/host-platforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,gBAAgB,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,CAAC;AAE3F,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnE,eAAe,
|
|
1
|
+
{"version":3,"file":"host-platforms.d.ts","sourceRoot":"","sources":["../../src/internal/host-platforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,gBAAgB,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,CAAC;AAE3F,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnE,eAAe,CAsBjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAoBrF;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAYjF;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgDhC"}
|
|
@@ -21,7 +21,10 @@ export function createHostSlackClient(options = {}) {
|
|
|
21
21
|
throw new Error(`No Slack bot token available (set ${hint}).`);
|
|
22
22
|
}
|
|
23
23
|
return new WebClient(token);
|
|
24
|
-
})()
|
|
24
|
+
})().catch((error) => {
|
|
25
|
+
slackPromise = undefined;
|
|
26
|
+
throw error;
|
|
27
|
+
});
|
|
25
28
|
return slackPromise;
|
|
26
29
|
},
|
|
27
30
|
};
|
|
@@ -38,6 +41,9 @@ export function createHostPlatforms(options = {}) {
|
|
|
38
41
|
getOctokit: () => {
|
|
39
42
|
octokitPromise ??= createGitHubOctokit({
|
|
40
43
|
credentials: options.githubCredentials,
|
|
44
|
+
}).catch((error) => {
|
|
45
|
+
octokitPromise = undefined;
|
|
46
|
+
throw error;
|
|
41
47
|
});
|
|
42
48
|
return octokitPromise;
|
|
43
49
|
},
|
|
@@ -89,7 +95,7 @@ export async function warmupHostGitHubAuth(options) {
|
|
|
89
95
|
}
|
|
90
96
|
}
|
|
91
97
|
const label = source === "cursor-account"
|
|
92
|
-
? "Cursor account
|
|
98
|
+
? "Cursor account credential"
|
|
93
99
|
: source === "app"
|
|
94
100
|
? exportedGhToken
|
|
95
101
|
? "GitHub App installation token (also exported as GH_TOKEN for gh CLI)"
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare function isZodSchema(value: unknown): value is z.ZodTypeAny;
|
|
1
|
+
import type { JsonSchemaObject, ZodSchema } from "../types.js";
|
|
2
|
+
export declare function isZodSchema(value: unknown): value is ZodSchema;
|
|
4
3
|
/** Convert an authored input schema into the JSON Schema shown to the model. */
|
|
5
|
-
export declare function toolInputJsonSchema(inputSchema:
|
|
4
|
+
export declare function toolInputJsonSchema(inputSchema: ZodSchema | JsonSchemaObject | undefined): JsonSchemaObject;
|
|
6
5
|
/**
|
|
7
6
|
* Convert an authored output schema into the JSON Schema advertised on the
|
|
8
7
|
* tool. Unlike {@link toolInputJsonSchema} there is no fallback: an
|
|
9
8
|
* undeclared output schema stays undeclared (the MCP field is optional), and
|
|
10
|
-
* outputs are never validated against it.
|
|
9
|
+
* outputs are never validated against it. Zod 4 schemas describe the
|
|
10
|
+
* `execute` result here, so fields with a default are required.
|
|
11
11
|
*/
|
|
12
|
-
export declare function toolOutputJsonSchema(outputSchema:
|
|
12
|
+
export declare function toolOutputJsonSchema(outputSchema: ZodSchema | JsonSchemaObject | undefined): JsonSchemaObject | undefined;
|
|
13
13
|
export type ToolInputValidation = {
|
|
14
14
|
ok: true;
|
|
15
15
|
value: unknown;
|
|
@@ -21,5 +21,5 @@ export type ToolInputValidation = {
|
|
|
21
21
|
* Validate tool-call args before `execute` runs. Zod schemas validate (and
|
|
22
22
|
* transform); plain JSON schemas pass through unvalidated.
|
|
23
23
|
*/
|
|
24
|
-
export declare function validateToolInput(inputSchema:
|
|
24
|
+
export declare function validateToolInput(inputSchema: ZodSchema | JsonSchemaObject | undefined, args: unknown): ToolInputValidation;
|
|
25
25
|
//# sourceMappingURL=json-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/internal/json-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/internal/json-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS/D,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAa9D;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,SAAS,GAAG,gBAAgB,GAAG,SAAS,GACpD,gBAAgB,CAKlB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,SAAS,GAAG,gBAAgB,GAAG,SAAS,GACrD,gBAAgB,GAAG,SAAS,CAK9B;AAmBD,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,SAAS,GAAG,gBAAgB,GAAG,SAAS,EACrD,IAAI,EAAE,OAAO,GACZ,mBAAmB,CAerB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod/v3";
|
|
2
2
|
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
3
|
+
import { isZodV4Schema, zodV4ToJsonSchema } from "./zod-schema.js";
|
|
3
4
|
const ANY_OBJECT_SCHEMA = {
|
|
4
5
|
type: "object",
|
|
5
6
|
properties: {},
|
|
@@ -22,38 +23,34 @@ export function toolInputJsonSchema(inputSchema) {
|
|
|
22
23
|
if (inputSchema === undefined) {
|
|
23
24
|
return ANY_OBJECT_SCHEMA;
|
|
24
25
|
}
|
|
25
|
-
return authoredSchemaToJsonSchema(inputSchema);
|
|
26
|
+
return authoredSchemaToJsonSchema(inputSchema, "input");
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
29
|
* Convert an authored output schema into the JSON Schema advertised on the
|
|
29
30
|
* tool. Unlike {@link toolInputJsonSchema} there is no fallback: an
|
|
30
31
|
* undeclared output schema stays undeclared (the MCP field is optional), and
|
|
31
|
-
* outputs are never validated against it.
|
|
32
|
+
* outputs are never validated against it. Zod 4 schemas describe the
|
|
33
|
+
* `execute` result here, so fields with a default are required.
|
|
32
34
|
*/
|
|
33
35
|
export function toolOutputJsonSchema(outputSchema) {
|
|
34
36
|
if (outputSchema === undefined) {
|
|
35
37
|
return undefined;
|
|
36
38
|
}
|
|
37
|
-
return authoredSchemaToJsonSchema(outputSchema);
|
|
39
|
+
return authoredSchemaToJsonSchema(outputSchema, "output");
|
|
38
40
|
}
|
|
39
|
-
function authoredSchemaToJsonSchema(schema) {
|
|
41
|
+
function authoredSchemaToJsonSchema(schema, io) {
|
|
40
42
|
if (!isZodSchema(schema)) {
|
|
41
43
|
return schema;
|
|
42
44
|
}
|
|
43
|
-
const converted =
|
|
45
|
+
const converted = isZodV4Schema(schema)
|
|
46
|
+
? zodV4ToJsonSchema(schema, io)
|
|
47
|
+
: zodToJsonSchema(schema, {
|
|
48
|
+
$refStrategy: "none",
|
|
49
|
+
target: "jsonSchema7",
|
|
50
|
+
});
|
|
44
51
|
delete converted.$schema;
|
|
45
52
|
return converted;
|
|
46
53
|
}
|
|
47
|
-
function convertZodSchema(schema) {
|
|
48
|
-
const native = schema.toJSONSchema;
|
|
49
|
-
if (typeof native === "function") {
|
|
50
|
-
return native.call(schema);
|
|
51
|
-
}
|
|
52
|
-
return zodToJsonSchema(schema, {
|
|
53
|
-
$refStrategy: "none",
|
|
54
|
-
target: "jsonSchema7",
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
54
|
/**
|
|
58
55
|
* Validate tool-call args before `execute` runs. Zod schemas validate (and
|
|
59
56
|
* transform); plain JSON schemas pass through unvalidated.
|
|
@@ -68,7 +65,7 @@ export function validateToolInput(inputSchema, args) {
|
|
|
68
65
|
}
|
|
69
66
|
const issues = parsed.error.issues
|
|
70
67
|
.map((issue) => {
|
|
71
|
-
const path = issue.path.join(".");
|
|
68
|
+
const path = issue.path.map(String).join(".");
|
|
72
69
|
return path === "" ? issue.message : `${path}: ${issue.message}`;
|
|
73
70
|
})
|
|
74
71
|
.join("; ");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,0FAA0F;IAC1F,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC7D,yEAAyE;IACzE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;IACrF,mEAAmE;IACnE,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAChF;AAkBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC1B,aAAa,
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,0FAA0F;IAC1F,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC7D,yEAAyE;IACzE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;IACrF,mEAAmE;IACnE,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAChF;AAkBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC1B,aAAa,CAw1Bf"}
|
|
@@ -247,6 +247,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
247
247
|
const turn = ensureTurn(event, session, startTime);
|
|
248
248
|
const span = turn?.tools.get(event.data.callId);
|
|
249
249
|
const status = event.data.isError ? "failure" : "success";
|
|
250
|
+
const failureReason = event.data.isError ? toolFailureReason(event.data.output) : undefined;
|
|
250
251
|
if (span !== undefined) {
|
|
251
252
|
span.setAttribute("cursor.tool.status", status);
|
|
252
253
|
span.setAttributes(attrs(computerUseResultAttrs(event.data)));
|
|
@@ -259,7 +260,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
259
260
|
span.setAttribute("agent_sdk.tool_error_class", errorClass);
|
|
260
261
|
span.setStatus({
|
|
261
262
|
code: SpanStatusCode.ERROR,
|
|
262
|
-
message:
|
|
263
|
+
message: failureReason ?? "tool error",
|
|
263
264
|
});
|
|
264
265
|
}
|
|
265
266
|
span.end(startTime);
|
|
@@ -277,6 +278,7 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
277
278
|
"cursor.tool.name": event.data.toolName,
|
|
278
279
|
"cursor.tool.status": status,
|
|
279
280
|
"agent_sdk.call_id": event.data.callId,
|
|
281
|
+
"agent_sdk.error_message": failureReason,
|
|
280
282
|
}));
|
|
281
283
|
// Direct callTool never emits turn.completed — close when idle.
|
|
282
284
|
if (turn !== undefined &&
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* Merge authored `defineOtel`, `serve({ otel })`, and standard OTel env.
|
|
3
3
|
*/
|
|
4
4
|
import { type OtelConfig, type OtelDefinition, type OtelExporterConfig, type OtelLogOptions, type OtelMetricOptions, type OtelSignal, type OtelTraceOptions } from "../../otel.js";
|
|
5
|
+
export type MetricsTemporality = "cumulative" | "delta" | "lowmemory";
|
|
6
|
+
export interface ResolvedOtelMetrics extends OtelMetricOptions {
|
|
7
|
+
temporality: MetricsTemporality;
|
|
8
|
+
unrecognizedTemporality?: string;
|
|
9
|
+
}
|
|
5
10
|
export interface ResolvedOtelConfig {
|
|
6
11
|
enabled: boolean;
|
|
7
12
|
serviceName: string;
|
|
@@ -9,7 +14,7 @@ export interface ResolvedOtelConfig {
|
|
|
9
14
|
resourceAttributes: Record<string, string>;
|
|
10
15
|
exporters: OtelExporterConfig[];
|
|
11
16
|
traces: false | OtelTraceOptions;
|
|
12
|
-
metrics: false |
|
|
17
|
+
metrics: false | ResolvedOtelMetrics;
|
|
13
18
|
logs: false | OtelLogOptions;
|
|
14
19
|
}
|
|
15
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,MAAM,EAAE,KAAK,GAAG,gBAAgB,CAAC;IACjC,OAAO,EAAE,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC;AAEtE,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,WAAW,EAAE,kBAAkB,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,MAAM,EAAE,KAAK,GAAG,gBAAgB,CAAC;IACjC,OAAO,EAAE,KAAK,GAAG,mBAAmB,CAAC;IACrC,IAAI,EAAE,KAAK,GAAG,cAAc,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,CAAA;CAAE,CAAC,GAC3E,cAAc,GAAG,SAAS,CAmB5B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,kBAAkB,CAkDrB;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBhF;AAWD,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,kBAAkB,EAAE,EACxC,MAAM,EAAE,UAAU,GACjB,kBAAkB,EAAE,CAItB;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,CAWvD;AAgJD,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYjD"}
|
|
@@ -56,7 +56,7 @@ export function resolveOtelConfig(input) {
|
|
|
56
56
|
return disabledOtelConfig();
|
|
57
57
|
}
|
|
58
58
|
const traces = resolveSignal(merged.traces);
|
|
59
|
-
const metrics = exporters.length === 0 ? false :
|
|
59
|
+
const metrics = exporters.length === 0 ? false : resolveMetrics(merged.metrics, env);
|
|
60
60
|
const logs = exporters.length === 0 ? false : resolveLogs(merged.logs, env);
|
|
61
61
|
if (exporters.length === 0 && traces === false) {
|
|
62
62
|
return disabledOtelConfig();
|
|
@@ -170,6 +170,32 @@ function protocolFromEnv(raw) {
|
|
|
170
170
|
// Default protobuf — matches Cursor enterprise OTLP/HTTP. grpc unsupported.
|
|
171
171
|
return "http/protobuf";
|
|
172
172
|
}
|
|
173
|
+
function metricsTemporalityFromEnv(raw) {
|
|
174
|
+
const value = raw?.trim().toLowerCase();
|
|
175
|
+
if (value === undefined || value.length === 0) {
|
|
176
|
+
return { temporality: "delta", unrecognized: undefined };
|
|
177
|
+
}
|
|
178
|
+
switch (value) {
|
|
179
|
+
case "cumulative":
|
|
180
|
+
case "delta":
|
|
181
|
+
case "lowmemory":
|
|
182
|
+
return { temporality: value, unrecognized: undefined };
|
|
183
|
+
default:
|
|
184
|
+
return { temporality: "delta", unrecognized: raw };
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function resolveMetrics(value, env) {
|
|
188
|
+
const signal = resolveSignal(value);
|
|
189
|
+
if (signal === false) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
const parsed = metricsTemporalityFromEnv(env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE);
|
|
193
|
+
return {
|
|
194
|
+
...signal,
|
|
195
|
+
temporality: parsed.temporality,
|
|
196
|
+
unrecognizedTemporality: parsed.unrecognized,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
173
199
|
function resolveSignal(value) {
|
|
174
200
|
if (value === false) {
|
|
175
201
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,MAAM,EAMZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,MAAM,IAAI,UAAU,EAAQ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,MAAM,EAMZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,MAAM,IAAI,UAAU,EAAQ,MAAM,yBAAyB,CAAC;AAmC1E,OAAO,EAIL,KAAK,kBAAkB,EAGxB,MAAM,aAAa,CAAC;AAKrB;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,kBAAkB,EACjC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC3B,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAsEnB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzF;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EACtB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC3B,SAAS,GAAE,MAAoC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAef"}
|