@cursor/bdk 0.2.20 → 0.2.22
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/dist/channels/github/api.d.ts.map +1 -1
- package/dist/channels/github/api.js +47 -0
- package/dist/channels/github/defaults.d.ts +1 -1
- package/dist/channels/github/defaults.d.ts.map +1 -1
- package/dist/channels/github/defaults.js +1 -1
- package/dist/channels/github/progress.d.ts +1 -1
- package/dist/channels/github/progress.d.ts.map +1 -1
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +34 -1
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BzgJFr_T.js → app.BD1yvHJK.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.DLNj_nNf.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.Bn5QyUDM.js → VPLocalSearchBox.D25E8cn2.js} +1 -1
- package/dist/docs/assets/chunks/{arc.D734Gm5d.js → arc.1hKM2X5X.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.NX1jj-YX.js → architectureDiagram-Q4EWVU46.B1jE4xrG.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.nd8dxdeO.js → baseUniq.BwPi_maB.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DG8faTim.js → blockDiagram-DXYQGD6D.Cpy78QaZ.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.zD31AJ3b.js → c4Diagram-AHTNJAMY.DkCQNehT.js} +1 -1
- package/dist/docs/assets/chunks/channel.DRdmGkBC.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.BHQj6Rko.js → chunk-4BX2VUAB.BuR2bNxe.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.Cs38Yh16.js → chunk-4TB4RGXK.C24IlKyd.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.CFUR21JO.js → chunk-55IACEB6.CRD5fIjA.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.C80-Sneg.js → chunk-EDXVE4YY.gKhxQpy2.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CdT1MGza.js → chunk-FMBD7UC4.DPlyJIaG.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.BctEzab0.js → chunk-OYMX7WX6.DfDSVvIq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.DTneeX3k.js → chunk-QZHKN3VN.CsA80Wio.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.Cz47F_-o.js → chunk-YZCP3GAM.BtXaaMC_.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CAGM3Q8f.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CAGM3Q8f.js +1 -0
- package/dist/docs/assets/chunks/clone.DjA1k4gh.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BPYgB-_O.js → cose-bilkent-S5V4N54A.Bw9v-Pfp.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Cu6hECod.js → dagre-KV5264BT.Wc53s510.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BMgp95Tz.js → diagram-5BDNPKRD.DxJJrlh5.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.towWdhDi.js → diagram-G4DWMVQ6.Ldxa4MKP.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.D9IfOvE9.js → diagram-MMDJMWI5.D30RWuU-.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.NTX57RPu.js → diagram-TYMM5635.BuJ0aD65.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DIQLqDqu.js → erDiagram-SMLLAGMA.2N-5dVK2.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.DhqpItRe.js → flowDiagram-DWJPFMVM.B_te6Lre.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B998R3Ps.js → ganttDiagram-T4ZO3ILL.CuNbn0Wd.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.B45nTn8-.js → gitGraphDiagram-UUTBAWPF.C1uOicx6.js} +1 -1
- package/dist/docs/assets/chunks/{graph.DPseWzzM.js → graph.lSlSs4kh.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO._GhhBBai.js → infoDiagram-42DDH7IO.Cw_LmsnD.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CTUMcaMM.js → ishikawaDiagram-UXIWVN3A.DikoN3ai.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.DkJBUddC.js → journeyDiagram-VCZTEJTY.buwzIgeY.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B5Q3uwhy.js → kanban-definition-6JOO6SKY.yacNqa4l.js} +1 -1
- package/dist/docs/assets/chunks/{layout.CDY13IKh.js → layout.CPlTUhtI.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BPd1ql9p.js → linear.BpHFbx_2.js} +1 -1
- package/dist/docs/assets/chunks/{min.dlGuqIBP.js → min.B_dSxH85.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.Cp7zCtmb.js → mindmap-definition-QFDTVHPH.BO5-vmxy.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CRH034nu.js → pieDiagram-DEJITSTG.Bwj1Zq54.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.BspgZ-pX.js → quadrantDiagram-34T5L4WZ.D5dcUqJC.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CQZqZ0nZ.js → requirementDiagram-MS252O5E.CCP5yuT4.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DllwFU3k.js → sankeyDiagram-XADWPNL6.BWAu-_Jq.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B5fTXycf.js → sequenceDiagram-FGHM5R23.w545hYyz.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.12GQjmbD.js → stateDiagram-FHFEXIEX.CxcpDNk2.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CjwS--3R.js +1 -0
- package/dist/docs/assets/chunks/{theme.BgocqONV.js → theme.DSJaK7i1.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.DXKUL5rH.js → timeline-definition-GMOUNBTQ.2WxkfxRf.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BrsjYCjp.js → vennDiagram-DHZGUBPP.BGZwcK-Z.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.BtotXz_c.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.C4oM69gv.js → wardleyDiagram-NUSXRM2D.oryRmynQ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.qzHH9efW.js → xychartDiagram-5P7HB3ND.Bq7gMvIU.js} +1 -1
- package/dist/docs/assets/{deployment.md.D0uprX2p.js → deployment.md.CtSJ6sF9.js} +2 -2
- package/dist/docs/assets/{deployment.md.D0uprX2p.lean.js → deployment.md.CtSJ6sF9.lean.js} +1 -1
- package/dist/docs/assets/{guides_hooks.md.B_bKG1oA.js → guides_hooks.md.Bfj0pK91.js} +1 -1
- package/dist/docs/assets/{guides_hooks.md.B_bKG1oA.lean.js → guides_hooks.md.Bfj0pK91.lean.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.BHPm32OR.js → guides_opentelemetry.md.ByW1Fs7b.js} +4 -4
- package/dist/docs/assets/{guides_opentelemetry.md.BHPm32OR.lean.js → guides_opentelemetry.md.ByW1Fs7b.lean.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.CP3FENFJ.js → reference_hooks.md.B1jq3oGl.js} +2 -2
- package/dist/docs/assets/{reference_hooks.md.CP3FENFJ.lean.js → reference_hooks.md.B1jq3oGl.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.SNzIvnmC.js → reference_project-layout.md.mFcS8yDD.js} +3 -3
- package/dist/docs/assets/{reference_project-layout.md.SNzIvnmC.lean.js → reference_project-layout.md.mFcS8yDD.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.C_uzIWuy.js → reference_sessions.md.C8FXuGwk.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.gmPt5J-M.js → reference_subagents.md.ChNGh6HK.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.gmPt5J-M.lean.js → reference_subagents.md.ChNGh6HK.lean.js} +1 -1
- package/dist/docs/assets/{troubleshooting.md.PCafNCb5.js → troubleshooting.md.DFnoTDlQ.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/deployment.md +10 -3
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +35 -35
- 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 +37 -37
- package/dist/docs/guides/hooks.md +3 -1
- 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 +26 -13
- 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 +51 -23
- 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 +35 -35
- package/dist/docs/reference/cli.html +35 -35
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +37 -37
- package/dist/docs/reference/hooks.md +4 -1
- 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 +37 -37
- package/dist/docs/reference/project-layout.md +4 -1
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +36 -36
- package/dist/docs/reference/sessions.md +1 -3
- package/dist/docs/reference/skills.html +35 -35
- package/dist/docs/reference/subagents.html +36 -36
- package/dist/docs/reference/subagents.md +2 -0
- package/dist/docs/reference/tools.html +35 -35
- 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 +36 -36
- package/dist/docs/troubleshooting.md +1 -1
- package/dist/evals/assertions.d.ts +3 -3
- package/dist/evals/assertions.d.ts.map +1 -1
- package/dist/evals/assertions.js +2 -2
- package/dist/evals/judge.d.ts +5 -4
- package/dist/evals/judge.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +4 -1
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +20 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +22 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts +3 -3
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +4 -1
- package/dist/filesystem.js +1 -1
- package/dist/internal/cursor/account-mcp.d.ts +1 -1
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +1 -1
- package/dist/internal/cursor/github-credentials.d.ts +1 -1
- package/dist/internal/cursor/github-credentials.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-deployment-secrets.js +22 -6
- package/dist/internal/deploy-client.js +20 -1
- package/dist/internal/discovery/agent.d.ts +1 -1
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/eval-judge-model.d.ts +1 -1
- package/dist/internal/eval-judge-model.d.ts.map +1 -1
- package/dist/internal/eval-runner.d.ts +2 -2
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +1 -1
- package/dist/internal/evals-client.d.ts +1 -1
- package/dist/internal/evals-client.d.ts.map +1 -1
- package/dist/internal/evals-client.js +1 -1
- package/dist/internal/event-log.d.ts.map +1 -1
- package/dist/internal/event-log.js +4 -1
- package/dist/internal/event-mapper.d.ts.map +1 -1
- package/dist/internal/event-mapper.js +5 -1
- package/dist/internal/filesystem/nearest.d.ts +1 -1
- package/dist/internal/filesystem/nearest.d.ts.map +1 -1
- package/dist/internal/filesystem/scratch.d.ts +7 -6
- package/dist/internal/filesystem/scratch.d.ts.map +1 -1
- package/dist/internal/filesystem/scratch.js +13 -7
- package/dist/internal/filesystem/walk.d.ts +1 -1
- package/dist/internal/filesystem/walk.d.ts.map +1 -1
- package/dist/internal/filesystem/walk.js +1 -1
- package/dist/internal/host-otel.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +10 -0
- package/dist/internal/hosted-eval-cases.js +1 -1
- package/dist/internal/memory-dir.d.ts +8 -0
- package/dist/internal/memory-dir.d.ts.map +1 -0
- package/dist/internal/memory-dir.js +7 -0
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +61 -23
- package/dist/internal/otel/computer-use-attrs.d.ts +8 -3
- package/dist/internal/otel/computer-use-attrs.d.ts.map +1 -1
- package/dist/internal/otel/computer-use-attrs.js +10 -9
- package/dist/internal/otel/config.d.ts +1 -1
- package/dist/internal/otel/config.d.ts.map +1 -1
- package/dist/internal/otel/config.js +1 -1
- package/dist/internal/otel/runtime.d.ts +2 -6
- package/dist/internal/otel/runtime.d.ts.map +1 -1
- package/dist/internal/otel/runtime.js +54 -43
- package/dist/internal/otel/tool-error-class.d.ts +4 -0
- package/dist/internal/otel/tool-error-class.d.ts.map +1 -0
- package/dist/internal/otel/tool-error-class.js +36 -0
- package/dist/internal/tool-result.d.ts +2 -2
- package/dist/internal/tool-result.d.ts.map +1 -1
- package/dist/internal/tool-result.js +16 -11
- package/dist/internal/workspace-sync.js +1 -1
- package/dist/internal/workspace.js +1 -1
- package/dist/memory.d.ts +0 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +1 -2
- package/dist/playground/assets/index-CzV_Cybi.css +1 -0
- package/dist/playground/assets/index-XXYKgdQn.js +71 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +8 -3
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +10 -3
- package/docs/guides/hooks.md +3 -1
- package/docs/guides/opentelemetry.md +26 -13
- package/docs/reference/hooks.md +4 -1
- package/docs/reference/project-layout.md +4 -1
- package/docs/reference/sessions.md +1 -3
- package/docs/reference/subagents.md +2 -0
- package/docs/troubleshooting.md +1 -1
- package/package.json +11 -6
- package/skills/evals/SKILL.md +1 -1
- package/skills/framework-map/SKILL.md +3 -1
- package/skills/otel/SKILL.md +4 -3
- package/templates/agentic-owners/bot/lib/owners/matching.ts +4 -1
- package/templates/pr-autofixer/bot/tools/drive_pr.ts +1 -2
- package/dist/docs/assets/chunks/@localSearchIndexroot.gGwBYU3d.js +0 -1
- package/dist/docs/assets/chunks/channel.DQLJQMi3.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.j55aerUT.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.j55aerUT.js +0 -1
- package/dist/docs/assets/chunks/clone.XimRS84I.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.Ctv5WEMu.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.DZDndEXQ.js +0 -162
- package/dist/playground/assets/index-C77_FdOx.css +0 -1
- package/dist/playground/assets/index-CvzI2lhj.js +0 -71
- /package/dist/docs/assets/{reference_sessions.md.C_uzIWuy.lean.js → reference_sessions.md.C8FXuGwk.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.PCafNCb5.lean.js → troubleshooting.md.DFnoTDlQ.lean.js} +0 -0
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { posix } from "node:path";
|
|
8
8
|
import { minimatch } from "minimatch";
|
|
9
|
-
import { FILE_SYSTEM_SCAN_LIMIT, normalizeFsPath } from "../../filesystem.js";
|
|
9
|
+
import { FILE_SYSTEM_SCAN_LIMIT, normalizeFsPath, } from "../../filesystem.js";
|
|
10
10
|
import { mergeSorted } from "./merge.js";
|
|
11
11
|
/** Filename-character ingest budget; matches LocalLsExecutor. */
|
|
12
12
|
export const LS_INGEST_CHARACTER_BUDGET = 2_500;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-otel.d.ts","sourceRoot":"","sources":["../../src/internal/host-otel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAsB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"host-otel.d.ts","sourceRoot":"","sources":["../../src/internal/host-otel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAsB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAsBzD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAAC;CACnD;AAsBD,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,kBAAkB,CAYvF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -450,6 +450,13 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
450
450
|
};
|
|
451
451
|
}
|
|
452
452
|
};
|
|
453
|
+
/** A retried delivery must find its admission for as long as the owner turn it started is addressable. */
|
|
454
|
+
const holdAdmission = (deliveryId, admissionToken, expiresAt) => {
|
|
455
|
+
const operation = admissions.get(deliveryId);
|
|
456
|
+
if (operation?.settledReply?.body.admissionToken === admissionToken) {
|
|
457
|
+
operation.expiresAt = expiresAt;
|
|
458
|
+
}
|
|
459
|
+
};
|
|
453
460
|
const pruneExpired = () => {
|
|
454
461
|
const now = Date.now();
|
|
455
462
|
for (const [token, item] of pending) {
|
|
@@ -685,6 +692,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
685
692
|
}
|
|
686
693
|
if (admitted.execution === undefined) {
|
|
687
694
|
admitted.expiresAt = Date.now() + ownerTurnPendingTtlMs;
|
|
695
|
+
holdAdmission(admitted.deliveryId, execution.admissionToken, admitted.expiresAt);
|
|
688
696
|
}
|
|
689
697
|
admitted.execution ??= afterHostedWork(input.flushOtel, async () => {
|
|
690
698
|
const spanAttributes = {
|
|
@@ -890,6 +898,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
890
898
|
}).then((reply) => {
|
|
891
899
|
admitted.settledReply = reply;
|
|
892
900
|
admitted.expiresAt = Date.now() + pendingTtlMs;
|
|
901
|
+
holdAdmission(admitted.deliveryId, execution.admissionToken, admitted.expiresAt);
|
|
893
902
|
return reply;
|
|
894
903
|
}, (error) => {
|
|
895
904
|
admitted.settledReply = {
|
|
@@ -903,6 +912,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
903
912
|
},
|
|
904
913
|
};
|
|
905
914
|
admitted.expiresAt = Date.now() + pendingTtlMs;
|
|
915
|
+
holdAdmission(admitted.deliveryId, execution.admissionToken, admitted.expiresAt);
|
|
906
916
|
return admitted.settledReply;
|
|
907
917
|
});
|
|
908
918
|
if (execution.mode === "start") {
|
|
@@ -11,7 +11,7 @@ import { discoverEvals, runEvalCase } from "./eval-runner.js";
|
|
|
11
11
|
import { evalCaseOf } from "./http-control-plane-session.js";
|
|
12
12
|
import { RunSessionTimeoutError } from "./run-client.js";
|
|
13
13
|
import { buildTrajectory } from "./trajectory.js";
|
|
14
|
-
/** Under the
|
|
14
|
+
/** Under the 45-minute limit the host puts on one delivery. */
|
|
15
15
|
const CASE_DEADLINE_MS = 20 * 60_000;
|
|
16
16
|
/** Per tool-call input or output kept on the result; the session log keeps all of it. */
|
|
17
17
|
const MAX_TOOL_IO_CHARS = 8 * 1024;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name of the shared memory directory under the agent state root.
|
|
3
|
+
*
|
|
4
|
+
* Kept free of imports so filesystem and workspace modules can reserve the
|
|
5
|
+
* name without loading the memory backends and their hosted storage graph.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MEMORY_DIR_NAME = "memory";
|
|
8
|
+
//# sourceMappingURL=memory-dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-dir.d.ts","sourceRoot":"","sources":["../../src/internal/memory-dir.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name of the shared memory directory under the agent state root.
|
|
3
|
+
*
|
|
4
|
+
* Kept free of imports so filesystem and workspace modules can reserve the
|
|
5
|
+
* name without loading the memory backends and their hosted storage graph.
|
|
6
|
+
*/
|
|
7
|
+
export const MEMORY_DIR_NAME = "memory";
|
|
@@ -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;
|
|
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,CAyzBf"}
|
|
@@ -9,9 +9,12 @@
|
|
|
9
9
|
import { context, ROOT_CONTEXT, SpanKind, SpanStatusCode, trace, } from "@opentelemetry/api";
|
|
10
10
|
import { SeverityNumber } from "@opentelemetry/api-logs";
|
|
11
11
|
import { classifyExpectedDeliveryFailure } from "../expected-delivery-failure.js";
|
|
12
|
+
import { toolCallErrorMessage } from "../tool-result.js";
|
|
12
13
|
import { attrs } from "./attrs.js";
|
|
13
14
|
import { computerUseRequestAttrs, computerUseResultAttrs } from "./computer-use-attrs.js";
|
|
15
|
+
import { classifyToolErrorText } from "./tool-error-class.js";
|
|
14
16
|
const CONTENT_MAX = 2_048;
|
|
17
|
+
const SPAN_STATUS_REASON_MAX = 160;
|
|
15
18
|
export function createOtelCollector(runtime, agentName, log) {
|
|
16
19
|
const sessions = new Map();
|
|
17
20
|
const extraBySession = new Map();
|
|
@@ -129,14 +132,22 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
129
132
|
return;
|
|
130
133
|
}
|
|
131
134
|
case "reasoning.completed": {
|
|
132
|
-
ensureTurn(event, session, startTime)
|
|
135
|
+
const turn = ensureTurn(event, session, startTime);
|
|
136
|
+
if (turn === undefined) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
spanFor(turn, event.data.parentCallId).addEvent("reasoning.completed", attrs({
|
|
133
140
|
"agent_sdk.duration_ms": event.data.durationMs,
|
|
134
141
|
"agent_sdk.parent_call_id": event.data.parentCallId,
|
|
135
142
|
}), startTime);
|
|
136
143
|
return;
|
|
137
144
|
}
|
|
138
145
|
case "message.completed": {
|
|
139
|
-
ensureTurn(event, session, startTime)
|
|
146
|
+
const turn = ensureTurn(event, session, startTime);
|
|
147
|
+
if (turn === undefined) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
spanFor(turn, event.data.parentCallId).addEvent("message.completed", attrs({
|
|
140
151
|
"agent_sdk.finish_reason": event.data.finishReason,
|
|
141
152
|
"agent_sdk.parent_call_id": event.data.parentCallId,
|
|
142
153
|
}), startTime);
|
|
@@ -171,18 +182,20 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
171
182
|
return;
|
|
172
183
|
}
|
|
173
184
|
case "action.approval_resolved": {
|
|
174
|
-
ensureTurn(event, session, startTime)
|
|
175
|
-
|
|
176
|
-
?.
|
|
185
|
+
const approvalTurn = ensureTurn(event, session, startTime);
|
|
186
|
+
if (event.data.decision === "deny") {
|
|
187
|
+
approvalTurn?.pendingToolErrors.set(event.data.callId, "denied");
|
|
188
|
+
}
|
|
189
|
+
approvalTurn?.tools.get(event.data.callId)?.addEvent("approval_resolved", attrs({
|
|
177
190
|
"agent_sdk.decision": event.data.decision,
|
|
178
191
|
"agent_sdk.decision_by": event.data.by,
|
|
179
192
|
}), startTime);
|
|
180
193
|
return;
|
|
181
194
|
}
|
|
182
195
|
case "action.auth_requested": {
|
|
183
|
-
ensureTurn(event, session, startTime)
|
|
184
|
-
|
|
185
|
-
|
|
196
|
+
const authTurn = ensureTurn(event, session, startTime);
|
|
197
|
+
authTurn?.pendingToolErrors.set(event.data.callId, "auth_required");
|
|
198
|
+
authTurn?.tools.get(event.data.callId)?.addEvent("auth_requested", undefined, startTime);
|
|
186
199
|
emitLog("action.auth_requested", SeverityNumber.INFO, attrs({
|
|
187
200
|
...baseLog(event, session),
|
|
188
201
|
"cursor.tool.name": event.data.toolName,
|
|
@@ -192,9 +205,11 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
192
205
|
return;
|
|
193
206
|
}
|
|
194
207
|
case "action.auth_resolved": {
|
|
195
|
-
ensureTurn(event, session, startTime)
|
|
196
|
-
|
|
197
|
-
?.
|
|
208
|
+
const authTurn = ensureTurn(event, session, startTime);
|
|
209
|
+
if (event.data.decision === "approve") {
|
|
210
|
+
authTurn?.pendingToolErrors.delete(event.data.callId);
|
|
211
|
+
}
|
|
212
|
+
authTurn?.tools.get(event.data.callId)?.addEvent("auth_resolved", attrs({
|
|
198
213
|
"agent_sdk.decision": event.data.decision,
|
|
199
214
|
"agent_sdk.decision_by": event.data.by,
|
|
200
215
|
"agent_sdk.mcp_connection": event.data.connection,
|
|
@@ -207,18 +222,22 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
207
222
|
const status = event.data.isError ? "failure" : "success";
|
|
208
223
|
if (span !== undefined) {
|
|
209
224
|
span.setAttribute("cursor.tool.status", status);
|
|
210
|
-
span.setAttributes(attrs(computerUseResultAttrs(event.data
|
|
225
|
+
span.setAttributes(attrs(computerUseResultAttrs(event.data)));
|
|
211
226
|
if (logOpts?.toolContent === true && event.data.output !== undefined) {
|
|
212
227
|
span.setAttribute("agent_sdk.tool_output", truncate(json(event.data.output)));
|
|
213
228
|
}
|
|
214
229
|
if (event.data.isError) {
|
|
230
|
+
const errorClass = turn?.pendingToolErrors.get(event.data.callId) ??
|
|
231
|
+
classifyToolErrorText(event.data.output);
|
|
232
|
+
span.setAttribute("agent_sdk.tool_error_class", errorClass);
|
|
215
233
|
span.setStatus({
|
|
216
234
|
code: SpanStatusCode.ERROR,
|
|
217
|
-
message: "tool error",
|
|
235
|
+
message: toolFailureReason(event.data.output) ?? "tool error",
|
|
218
236
|
});
|
|
219
237
|
}
|
|
220
238
|
span.end(startTime);
|
|
221
239
|
turn?.tools.delete(event.data.callId);
|
|
240
|
+
turn?.pendingToolErrors.delete(event.data.callId);
|
|
222
241
|
}
|
|
223
242
|
metrics?.toolCalls.add(1, join(event.sessionId, {
|
|
224
243
|
"cursor.tool.name": event.data.toolName,
|
|
@@ -274,6 +293,9 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
274
293
|
const turn = ensureTurn(event, session, startTime);
|
|
275
294
|
const span = turn?.subagents.get(event.data.callId);
|
|
276
295
|
if (span !== undefined) {
|
|
296
|
+
if (event.data.isError === true) {
|
|
297
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: "subagent error" });
|
|
298
|
+
}
|
|
277
299
|
span.end(startTime);
|
|
278
300
|
turn?.subagents.delete(event.data.callId);
|
|
279
301
|
}
|
|
@@ -448,20 +470,19 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
448
470
|
const turn = {
|
|
449
471
|
span,
|
|
450
472
|
tools: new Map(),
|
|
473
|
+
pendingToolErrors: new Map(),
|
|
451
474
|
subagents: new Map(),
|
|
452
475
|
synthetic: args.synthetic,
|
|
453
476
|
};
|
|
454
477
|
args.state.turns.set(args.turnId, turn);
|
|
455
478
|
return turn;
|
|
456
479
|
}
|
|
480
|
+
// Work inside a subagent belongs to its span, everything else to the turn.
|
|
481
|
+
function spanFor(turn, parentCallId) {
|
|
482
|
+
return (parentCallId === undefined ? undefined : turn.subagents.get(parentCallId)) ?? turn.span;
|
|
483
|
+
}
|
|
457
484
|
function parentCtxFor(turn, parentCallId) {
|
|
458
|
-
|
|
459
|
-
const sub = turn.subagents.get(parentCallId);
|
|
460
|
-
if (sub !== undefined) {
|
|
461
|
-
return trace.setSpan(context.active(), sub);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
return trace.setSpan(context.active(), turn.span);
|
|
485
|
+
return trace.setSpan(context.active(), spanFor(turn, parentCallId));
|
|
465
486
|
}
|
|
466
487
|
function openToolSpan(args) {
|
|
467
488
|
const computerUseAttrs = computerUseRequestAttrs(args.call.toolName, args.call.args);
|
|
@@ -528,10 +549,20 @@ export function createOtelCollector(runtime, agentName, log) {
|
|
|
528
549
|
}
|
|
529
550
|
function endOpenChildren(turn, endTime) {
|
|
530
551
|
for (const span of turn.tools.values()) {
|
|
552
|
+
span.setAttribute("cursor.tool.status", "unknown");
|
|
553
|
+
span.setStatus({
|
|
554
|
+
code: SpanStatusCode.ERROR,
|
|
555
|
+
message: "no result",
|
|
556
|
+
});
|
|
531
557
|
span.end(endTime);
|
|
532
558
|
}
|
|
533
559
|
turn.tools.clear();
|
|
560
|
+
turn.pendingToolErrors.clear();
|
|
534
561
|
for (const span of turn.subagents.values()) {
|
|
562
|
+
span.setStatus({
|
|
563
|
+
code: SpanStatusCode.ERROR,
|
|
564
|
+
message: "no result",
|
|
565
|
+
});
|
|
535
566
|
span.end(endTime);
|
|
536
567
|
}
|
|
537
568
|
turn.subagents.clear();
|
|
@@ -661,11 +692,18 @@ function buildMetrics(meter) {
|
|
|
661
692
|
}),
|
|
662
693
|
};
|
|
663
694
|
}
|
|
664
|
-
function truncate(value) {
|
|
665
|
-
if (value.length <=
|
|
695
|
+
function truncate(value, max = CONTENT_MAX) {
|
|
696
|
+
if (value.length <= max) {
|
|
666
697
|
return value;
|
|
667
698
|
}
|
|
668
|
-
return `${value.slice(0,
|
|
699
|
+
return `${value.slice(0, max)}…`;
|
|
700
|
+
}
|
|
701
|
+
function toolFailureReason(output) {
|
|
702
|
+
const summary = toolCallErrorMessage(output);
|
|
703
|
+
if (summary === undefined) {
|
|
704
|
+
return undefined;
|
|
705
|
+
}
|
|
706
|
+
return truncate(summary.replace(/\s+/g, " ").trim(), SPAN_STATUS_REASON_MAX);
|
|
669
707
|
}
|
|
670
708
|
function json(value) {
|
|
671
709
|
try {
|
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
* Content-free span attributes for `computerUse` tool calls.
|
|
3
3
|
*
|
|
4
4
|
* Computer use args hold typed text and screen coordinates, so the collector
|
|
5
|
-
* exports them only under `toolContent`. These attributes keep the
|
|
6
|
-
* shape visible without that opt-in.
|
|
5
|
+
* exports them only under `toolContent`. These attributes keep the action
|
|
6
|
+
* shape visible without that opt-in. On the cloud agent path one
|
|
7
|
+
* `computerUse` call is one action, so its tool span is the action span.
|
|
7
8
|
*/
|
|
8
9
|
import type { AttrValue } from "./attrs.js";
|
|
9
10
|
type Attrs = Record<string, AttrValue | undefined>;
|
|
10
11
|
export declare function computerUseRequestAttrs(toolName: string, args: unknown): Attrs;
|
|
11
|
-
export declare function computerUseResultAttrs(
|
|
12
|
+
export declare function computerUseResultAttrs(result: {
|
|
13
|
+
readonly toolName: string;
|
|
14
|
+
readonly output?: unknown;
|
|
15
|
+
readonly isError: boolean;
|
|
16
|
+
}): Attrs;
|
|
12
17
|
export {};
|
|
13
18
|
//# sourceMappingURL=computer-use-attrs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computer-use-attrs.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/computer-use-attrs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"computer-use-attrs.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/computer-use-attrs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;AAEnD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,CAU9E;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,GAAG,KAAK,CAWR"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Content-free span attributes for `computerUse` tool calls.
|
|
3
3
|
*
|
|
4
4
|
* Computer use args hold typed text and screen coordinates, so the collector
|
|
5
|
-
* exports them only under `toolContent`. These attributes keep the
|
|
6
|
-
* shape visible without that opt-in.
|
|
5
|
+
* exports them only under `toolContent`. These attributes keep the action
|
|
6
|
+
* shape visible without that opt-in. On the cloud agent path one
|
|
7
|
+
* `computerUse` call is one action, so its tool span is the action span.
|
|
7
8
|
*/
|
|
8
9
|
import { isRecord } from "../is-record.js";
|
|
9
10
|
export function computerUseRequestAttrs(toolName, args) {
|
|
@@ -13,17 +14,17 @@ export function computerUseRequestAttrs(toolName, args) {
|
|
|
13
14
|
// The SDK adapter emits only known action types, so `type` is a fixed
|
|
14
15
|
// literal and carries no content.
|
|
15
16
|
const types = args.actions.map((action) => isRecord(action) && typeof action.type === "string" ? action.type : "other");
|
|
16
|
-
return {
|
|
17
|
-
"agent_sdk.computer.action_count": types.length,
|
|
18
|
-
"agent_sdk.computer.actions": types.join(","),
|
|
19
|
-
};
|
|
17
|
+
return { "agent_sdk.computer.actions": types.join(",") };
|
|
20
18
|
}
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
// An error result is rebuilt from the thrown error and reports zero
|
|
20
|
+
// durations, so only a success result carries executor timing.
|
|
21
|
+
export function computerUseResultAttrs(result) {
|
|
22
|
+
const { toolName, output, isError } = result;
|
|
23
|
+
if (toolName !== "computerUse" || isError || !isRecord(output)) {
|
|
23
24
|
return {};
|
|
24
25
|
}
|
|
25
26
|
return {
|
|
26
|
-
"agent_sdk.computer.completed_action_count": typeof output.actionCount === "number" ? output.actionCount : undefined,
|
|
27
27
|
"agent_sdk.computer.executor_duration_ms": typeof output.durationMs === "number" ? output.durationMs : undefined,
|
|
28
|
+
"agent_sdk.computer.settle_ms": typeof output.settleMs === "number" ? output.settleMs : undefined,
|
|
28
29
|
};
|
|
29
30
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Merge authored `defineOtel`, `serve({ otel })`, and standard OTel env.
|
|
3
3
|
*/
|
|
4
|
-
import type
|
|
4
|
+
import { type OtelConfig, type OtelDefinition, type OtelExporterConfig, type OtelLogOptions, type OtelMetricOptions, type OtelSignal, type OtelTraceOptions } from "../../otel.js";
|
|
5
5
|
export interface ResolvedOtelConfig {
|
|
6
6
|
enabled: boolean;
|
|
7
7
|
serviceName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,
|
|
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,iBAAiB,CAAC;IACnC,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,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBhF;AAED,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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Merge authored `defineOtel`, `serve({ otel })`, and standard OTel env.
|
|
3
3
|
*/
|
|
4
|
-
import { resolveOtelDefinition } from "../../otel.js";
|
|
4
|
+
import { resolveOtelDefinition, } from "../../otel.js";
|
|
5
5
|
/**
|
|
6
6
|
* Process-global authored config. OTel SDK is one per serve process — if
|
|
7
7
|
* several mounts ship `agent/otel.ts`, they must be identical.
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Process-level OTel SDK (OTLP HTTP exporters for traces / metrics / logs).
|
|
3
|
-
*
|
|
4
|
-
* Refuses to install a second global Tracer/Meter/Logger provider when one
|
|
5
|
-
* already owns the process (CLI, extension host, etc.). Spans still use
|
|
6
|
-
* `trace.getTracer()` so they nest under an existing parent when present.
|
|
7
3
|
*/
|
|
8
|
-
import type
|
|
9
|
-
import type
|
|
4
|
+
import { type Histogram, type Meter, type Tracer } from "@opentelemetry/api";
|
|
5
|
+
import { type Logger as OtelLogger } from "@opentelemetry/api-logs";
|
|
10
6
|
import { type ResolvedOtelConfig } from "./config.js";
|
|
11
7
|
/**
|
|
12
8
|
* Hosted v2 pods may be frozen or destroyed as soon as the HTTP reply
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/runtime.ts"],"names":[],"mappings":"AAAA
|
|
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,EAKZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,MAAM,IAAI,UAAU,EAAQ,MAAM,yBAAyB,CAAC;AAiC1E,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAK1E;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AAErD,2EAA2E;AAC3E,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,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,wBAAwB;IACvC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,kBAAkB,CAAC;CAC1C;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,kBAAkB,EAC1B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC3B,OAAO,CAAC,EAAE,wBAAwB,GACjC,WAAW,GAAG,SAAS,CA8BzB;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"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Process-level OTel SDK (OTLP HTTP exporters for traces / metrics / logs).
|
|
3
|
-
*
|
|
4
|
-
* Refuses to install a second global Tracer/Meter/Logger provider when one
|
|
5
|
-
* already owns the process (CLI, extension host, etc.). Spans still use
|
|
6
|
-
* `trace.getTracer()` so they nest under an existing parent when present.
|
|
7
3
|
*/
|
|
8
|
-
import { DiagLogLevel, diag, metrics, trace } from "@opentelemetry/api";
|
|
4
|
+
import { DiagLogLevel, diag, metrics, trace, } from "@opentelemetry/api";
|
|
9
5
|
import { logs } from "@opentelemetry/api-logs";
|
|
10
6
|
import { ExportResultCode } from "@opentelemetry/core";
|
|
11
7
|
import { OTLPLogExporter as OTLPLogExporterHttp } from "@opentelemetry/exporter-logs-otlp-http";
|
|
@@ -17,7 +13,7 @@ import { OTLPTraceExporter as OTLPTraceExporterProto } from "@opentelemetry/expo
|
|
|
17
13
|
import { resourceFromAttributes } from "@opentelemetry/resources";
|
|
18
14
|
import { BatchLogRecordProcessor, LoggerProvider } from "@opentelemetry/sdk-logs";
|
|
19
15
|
import { AggregationTemporality, MeterProvider, PeriodicExportingMetricReader, } from "@opentelemetry/sdk-metrics";
|
|
20
|
-
import { SimpleSpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
16
|
+
import { SimpleSpanProcessor, } from "@opentelemetry/sdk-trace-base";
|
|
21
17
|
import { BatchSpanProcessor, NodeTracerProvider, ParentBasedSampler, TraceIdRatioBasedSampler, } from "@opentelemetry/sdk-trace-node";
|
|
22
18
|
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
|
|
23
19
|
import { installOutboundFetchInstrumentation, } from "../../otel.js";
|
|
@@ -51,12 +47,12 @@ export function createOtelRuntime(config, log, options) {
|
|
|
51
47
|
}
|
|
52
48
|
ensureW3cPropagator();
|
|
53
49
|
const sdk = startOtelSdk(config, log, options?.resolveExport);
|
|
54
|
-
const meter = config.metrics === false ? undefined : metrics.
|
|
50
|
+
const meter = config.metrics === false ? undefined : (sdk.meter ?? metrics.getMeter(INSTRUMENTATION));
|
|
55
51
|
return {
|
|
56
52
|
config,
|
|
57
|
-
tracer:
|
|
53
|
+
tracer: sdk.tracer,
|
|
58
54
|
meter,
|
|
59
|
-
logger: config.logs === false ? undefined : logs.getLogger(INSTRUMENTATION),
|
|
55
|
+
logger: config.logs === false ? undefined : (sdk.logger ?? logs.getLogger(INSTRUMENTATION)),
|
|
60
56
|
httpDuration: meter === undefined
|
|
61
57
|
? undefined
|
|
62
58
|
: meter.createHistogram("agent_sdk.http.duration", {
|
|
@@ -105,20 +101,18 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
105
101
|
const traceOpts = config.traces;
|
|
106
102
|
if (traceOpts !== false) {
|
|
107
103
|
const exporters = exportersForSignal(config.exporters, "traces");
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (exporters.length > 0) {
|
|
114
|
-
for (const exporter of exporters) {
|
|
115
|
-
spanProcessors.push(new BatchSpanProcessor(createTraceExporter(exporter, signalUrl(exporter.url, "traces"))));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
memoryExporter = new BoundedMemorySpanExporter(OTEL_IN_MEMORY_SPAN_LIMIT);
|
|
120
|
-
spanProcessors.push(new SimpleSpanProcessor(memoryExporter));
|
|
104
|
+
const globalTracer = hasRealTracerProvider();
|
|
105
|
+
const spanProcessors = [];
|
|
106
|
+
if (exporters.length > 0) {
|
|
107
|
+
for (const exporter of exporters) {
|
|
108
|
+
spanProcessors.push(new BatchSpanProcessor(createTraceExporter(exporter, signalUrl(exporter.url, "traces"))));
|
|
121
109
|
}
|
|
110
|
+
}
|
|
111
|
+
else if (!globalTracer) {
|
|
112
|
+
memoryExporter = new BoundedMemorySpanExporter(OTEL_IN_MEMORY_SPAN_LIMIT);
|
|
113
|
+
spanProcessors.push(new SimpleSpanProcessor(memoryExporter));
|
|
114
|
+
}
|
|
115
|
+
if (spanProcessors.length > 0) {
|
|
122
116
|
tracerProvider = new NodeTracerProvider({
|
|
123
117
|
resource,
|
|
124
118
|
spanProcessors,
|
|
@@ -126,7 +120,12 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
126
120
|
root: new TraceIdRatioBasedSampler(traceOpts.sampleRatio ?? 1),
|
|
127
121
|
}),
|
|
128
122
|
});
|
|
129
|
-
|
|
123
|
+
if (globalTracer) {
|
|
124
|
+
logger("[bdk:otel] TracerProvider already registered; BDK traces export on a local provider");
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
tracerProvider.register();
|
|
128
|
+
}
|
|
130
129
|
}
|
|
131
130
|
}
|
|
132
131
|
const metricOpts = config.metrics;
|
|
@@ -141,12 +140,9 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
141
140
|
exportIntervalMillis,
|
|
142
141
|
})),
|
|
143
142
|
});
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
else {
|
|
148
|
-
logger("[bdk:otel] MeterProvider already registered; reusing global (BDK OTLP exporters not attached)");
|
|
149
|
-
void provider.shutdown();
|
|
143
|
+
meterProvider = provider;
|
|
144
|
+
if (!metrics.setGlobalMeterProvider(provider)) {
|
|
145
|
+
logger("[bdk:otel] MeterProvider already registered; BDK metrics export on a local provider");
|
|
150
146
|
}
|
|
151
147
|
}
|
|
152
148
|
}
|
|
@@ -157,13 +153,10 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
157
153
|
resource,
|
|
158
154
|
processors: exporters.map((exporter) => new BatchLogRecordProcessor(createLogExporter(exporter, signalUrl(exporter.url, "logs")))),
|
|
159
155
|
});
|
|
156
|
+
loggerProvider = provider;
|
|
160
157
|
// api-logs returns the active provider (ours on success, existing otherwise).
|
|
161
|
-
if (logs.setGlobalLoggerProvider(provider)
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
logger("[bdk:otel] LoggerProvider already registered; reusing global (BDK OTLP exporters not attached)");
|
|
166
|
-
void provider.shutdown();
|
|
158
|
+
if (logs.setGlobalLoggerProvider(provider) !== provider) {
|
|
159
|
+
logger("[bdk:otel] LoggerProvider already registered; BDK logs export on a local provider");
|
|
167
160
|
}
|
|
168
161
|
}
|
|
169
162
|
}
|
|
@@ -173,14 +166,17 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
173
166
|
else {
|
|
174
167
|
logger(`[bdk] otel recording service=${config.serviceName} (export on flush when OTLP exporters resolve)`);
|
|
175
168
|
}
|
|
176
|
-
|
|
169
|
+
let draining;
|
|
170
|
+
const flushDeferred = () => {
|
|
171
|
+
draining ??= drainDeferred().finally(() => {
|
|
172
|
+
draining = undefined;
|
|
173
|
+
});
|
|
174
|
+
return draining;
|
|
175
|
+
};
|
|
176
|
+
const drainDeferred = async () => {
|
|
177
177
|
if (memoryExporter === undefined) {
|
|
178
178
|
return;
|
|
179
179
|
}
|
|
180
|
-
const spans = memoryExporter.getFinishedSpans();
|
|
181
|
-
if (spans.length === 0) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
180
|
const exportConfig = resolveExport?.() ?? config;
|
|
185
181
|
const destinations = exportersForSignal(exportConfig.exporters, "traces");
|
|
186
182
|
if (destinations.length === 0) {
|
|
@@ -189,12 +185,23 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
189
185
|
// Spans already carry the bake-time Resource. Hosted v2 binds
|
|
190
186
|
// deployment secrets after bake, so env / service extras on
|
|
191
187
|
// exportConfig must replace that Resource on the wire.
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
memoryExporter.
|
|
188
|
+
const resource = buildResource(exportConfig);
|
|
189
|
+
for (;;) {
|
|
190
|
+
const spans = memoryExporter.getFinishedSpans();
|
|
191
|
+
if (spans.length === 0) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const ok = await exportQueuedSpans(spans, destinations, logger, resource);
|
|
195
|
+
if (!ok) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
memoryExporter.dropExported(spans);
|
|
195
199
|
}
|
|
196
200
|
};
|
|
197
201
|
return {
|
|
202
|
+
tracer: tracerProvider?.getTracer(INSTRUMENTATION) ?? trace.getTracer(INSTRUMENTATION),
|
|
203
|
+
meter: meterProvider?.getMeter(INSTRUMENTATION),
|
|
204
|
+
logger: loggerProvider?.getLogger(INSTRUMENTATION),
|
|
198
205
|
forceFlush: async () => {
|
|
199
206
|
await Promise.allSettled([
|
|
200
207
|
raceOtelForceFlush(Promise.allSettled([
|
|
@@ -306,6 +313,10 @@ class BoundedMemorySpanExporter {
|
|
|
306
313
|
getFinishedSpans() {
|
|
307
314
|
return this.spans.slice();
|
|
308
315
|
}
|
|
316
|
+
dropExported(exported) {
|
|
317
|
+
const exportedSet = new Set(exported);
|
|
318
|
+
this.spans = this.spans.filter((span) => !exportedSet.has(span));
|
|
319
|
+
}
|
|
309
320
|
reset() {
|
|
310
321
|
this.spans = [];
|
|
311
322
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type ToolErrorTextClass = "not_found" | "rate_limited" | "timeout" | "unauthorized" | "tool_error";
|
|
2
|
+
export type ToolErrorClass = ToolErrorTextClass | "auth_required" | "denied";
|
|
3
|
+
export declare function classifyToolErrorText(output: unknown): ToolErrorTextClass;
|
|
4
|
+
//# sourceMappingURL=tool-error-class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-error-class.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/tool-error-class.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,cAAc,GACd,SAAS,GACT,cAAc,GACd,YAAY,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,eAAe,GAAG,QAAQ,CAAC;AA6B7E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAWzE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { toolCallErrorMessage } from "../tool-result.js";
|
|
2
|
+
const MAX_SCANNED_CHARS = 2_000;
|
|
3
|
+
const TEXT_CLASSES = [
|
|
4
|
+
["not_found", /\bnot found: \/|path does not exist:|\benoent\b|no such file or directory/i],
|
|
5
|
+
[
|
|
6
|
+
"rate_limited",
|
|
7
|
+
/\b(?:HTTP(?:\/[\d.]+)?|status(?: code)?|code)[\s:=]*429\b|rate limit|too many requests/i,
|
|
8
|
+
],
|
|
9
|
+
["timeout", /\btimed?\s*out\b|\btimeout\b|\betimedout\b/i],
|
|
10
|
+
[
|
|
11
|
+
"unauthorized",
|
|
12
|
+
/\b(?:HTTP(?:\/[\d.]+)?|status(?: code)?|code)[\s:=]*(?:401|403)\b|\bunauthorized\b|\bforbidden\b/i,
|
|
13
|
+
],
|
|
14
|
+
];
|
|
15
|
+
function errorText(output) {
|
|
16
|
+
const message = toolCallErrorMessage(output);
|
|
17
|
+
if (message !== undefined || output === null || typeof output !== "object") {
|
|
18
|
+
return message;
|
|
19
|
+
}
|
|
20
|
+
const error = output.error;
|
|
21
|
+
return typeof error === "string" && error.trim() !== "" ? error : undefined;
|
|
22
|
+
}
|
|
23
|
+
const HOST_TOOL_PREFIX = /^Tool "[^"]*" /;
|
|
24
|
+
const INPUT_ECHO_PREFIX = /^(?:Invalid input for tool "|invalid grep pattern:)/i;
|
|
25
|
+
export function classifyToolErrorText(output) {
|
|
26
|
+
const text = errorText(output)?.replace(HOST_TOOL_PREFIX, "").slice(0, MAX_SCANNED_CHARS);
|
|
27
|
+
if (text === undefined || INPUT_ECHO_PREFIX.test(text)) {
|
|
28
|
+
return "tool_error";
|
|
29
|
+
}
|
|
30
|
+
for (const [errorClass, pattern] of TEXT_CLASSES) {
|
|
31
|
+
if (pattern.test(text)) {
|
|
32
|
+
return errorClass;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return "tool_error";
|
|
36
|
+
}
|