@cursor/bdk 0.2.25 → 0.2.27
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 +3 -18
- package/CHANGELOG.md +3 -0
- package/dist/artifacts.d.ts +1 -1
- package/dist/artifacts.js +1 -1
- package/dist/bin/agent-serve.js +25 -21
- package/dist/channels/bitbucket/api.d.ts +2 -2
- package/dist/channels/bitbucket/api.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +2 -2
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
- package/dist/channels/deployments/deployments-channel.js +1 -1
- package/dist/channels/github/cursor-account.d.ts +7 -0
- package/dist/channels/github/cursor-account.d.ts.map +1 -1
- package/dist/channels/github/cursor-account.js +22 -5
- package/dist/channels/github/github-channel.js +1 -1
- package/dist/channels/github/replay.d.ts +1 -1
- package/dist/channels/github/replay.d.ts.map +1 -1
- package/dist/channels/gitlab/api.d.ts +2 -2
- package/dist/channels/gitlab/api.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +1 -1
- package/dist/channels/issues/issues-channel.js +1 -1
- package/dist/channels/origin/api.d.ts +4 -4
- package/dist/channels/origin/api.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +1 -1
- package/dist/channels/origin/origin-webhook.d.ts +3 -3
- package/dist/channels/origin/origin-webhook.d.ts.map +1 -1
- package/dist/channels/pagerduty/pagerduty-webhook.d.ts +2 -2
- package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -1
- package/dist/channels/runs/runs-channel.js +1 -1
- package/dist/channels/slack/agentic-delivery.d.ts +2 -1
- package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.js +6 -10
- package/dist/channels/slack/agentic-signals.d.ts +2 -7
- package/dist/channels/slack/agentic-signals.d.ts.map +1 -1
- package/dist/channels/slack/agentic-signals.js +4 -3
- package/dist/channels/slack/api.d.ts +1 -0
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +3 -0
- package/dist/channels/slack/constants.d.ts +2 -0
- package/dist/channels/slack/constants.d.ts.map +1 -1
- package/dist/channels/slack/constants.js +2 -0
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +3 -2
- package/dist/channels/slack/dispatch.d.ts +9 -0
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +3 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +24 -20
- package/dist/channels/slack/interactive.d.ts +2 -0
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +1 -0
- package/dist/channels/slack/live-delivery.d.ts +3 -0
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +5 -0
- package/dist/channels/slack/reply-options.d.ts +9 -0
- package/dist/channels/slack/reply-options.d.ts.map +1 -1
- package/dist/channels/slack/reply-options.js +31 -1
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +7 -0
- package/dist/channels/slack/stream.d.ts +5 -1
- package/dist/channels/slack/stream.d.ts.map +1 -1
- package/dist/channels/slack/types.d.ts +29 -0
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels.d.ts +1 -1
- package/dist/channels.js +1 -1
- package/dist/docs/404.html +3 -3
- package/dist/docs/assets/{app.BjS1QEI4.js → app.wA5xBBcd.js} +4 -4
- package/dist/docs/assets/changelog.md.BvHRIiMH.js +1 -0
- package/dist/docs/assets/changelog.md.BvHRIiMH.lean.js +1 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.BoDEJQWv.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BOuvjb5Y.js → VPLocalSearchBox.C29HLCVL.js} +2 -2
- package/dist/docs/assets/chunks/{arc.3WR6Jf-y.js → arc.BOaoYWmh.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.Dtb6Dqh6.js → architectureDiagram-Q4EWVU46.MfG0itQh.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.BUyrgrZE.js → baseUniq.CUeJciCF.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BVLV_voZ.js → blockDiagram-DXYQGD6D.BrXMZRtK.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.jXJ1q70M.js → c4Diagram-AHTNJAMY.DfkDHeB9.js} +1 -1
- package/dist/docs/assets/chunks/channel.D2BTz0L-.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.zz1SMBvK.js → chunk-4BX2VUAB.xKz8CiXK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.CzYKuv3I.js → chunk-4TB4RGXK.kkfBh4zk.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.C7_tcJZD.js → chunk-55IACEB6.BClJGb94.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DeTwQPVO.js → chunk-EDXVE4YY.P9BpQ9L3.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DhMTl7ut.js → chunk-FMBD7UC4.R4iYi58S.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Me7f5hEp.js → chunk-OYMX7WX6.Cpn8L1dw.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D0E0Bb6g.js → chunk-QZHKN3VN.BLftECqU.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CdOOBFYL.js → chunk-YZCP3GAM.BWDV1AYt.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DqByliAC.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DqByliAC.js +1 -0
- package/dist/docs/assets/chunks/clone.CldT1lbQ.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BNbGESzN.js → cose-bilkent-S5V4N54A.DGpAcJ55.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.zU7Lu_xJ.js → dagre-KV5264BT.BBXxGEaD.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.B9qOdE5h.js → diagram-5BDNPKRD.EKqOwmK2.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.D8X-sf77.js → diagram-G4DWMVQ6.CB8pdkoZ.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.CW7MvMlE.js → diagram-MMDJMWI5.aHh4WGg9.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.J489G0Nd.js → diagram-TYMM5635.YIsbRH20.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.BkW7tGfs.js → erDiagram-SMLLAGMA.B3bTCW_e.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.jc9iWORD.js → flowDiagram-DWJPFMVM.M81hXIXZ.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B-UQfd9E.js → ganttDiagram-T4ZO3ILL.BKg7WY--.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js → gitGraphDiagram-UUTBAWPF.CLEMZgO3.js} +1 -1
- package/dist/docs/assets/chunks/{graph.C5IB6_e_.js → graph.DS38W_Q-.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.DwF0-c8L.js → infoDiagram-42DDH7IO.BTiWTi82.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.fBaTqzE7.js → ishikawaDiagram-UXIWVN3A.DcqY_KQL.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CM8gDVJy.js → journeyDiagram-VCZTEJTY.0lQNZ40U.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.YiD1p0LB.js → kanban-definition-6JOO6SKY.L5sKlf7X.js} +1 -1
- package/dist/docs/assets/chunks/{layout.6Um-DVJT.js → layout.7u4gFhQa.js} +1 -1
- package/dist/docs/assets/chunks/{linear.DcTeg4Hn.js → linear.D5v33SOb.js} +1 -1
- package/dist/docs/assets/chunks/{min.CIxkY8Fe.js → min.Dc9uCxf9.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.D4QM_voR.js → mindmap-definition-QFDTVHPH.B56nGoB_.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.nmB309G1.js → pieDiagram-DEJITSTG.Cba8e8lS.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D1HtZR3C.js → quadrantDiagram-34T5L4WZ.2YjBycHF.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CZgQWob-.js → requirementDiagram-MS252O5E.D4P5RqVI.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DtiBfU-P.js → sankeyDiagram-XADWPNL6.C0Hn8NUm.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Cld4gDSt.js → sequenceDiagram-FGHM5R23.BZm7EaoT.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DatP823_.js → stateDiagram-FHFEXIEX.DcR4f3X2.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.Bb4oMe0P.js +1 -0
- package/dist/docs/assets/chunks/{theme.D5jbBys7.js → theme.DvfKzyXq.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.DwQLI2be.js → timeline-definition-GMOUNBTQ.CgDh96vg.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.a5yMfnsa.js → vennDiagram-DHZGUBPP.B4fagbC8.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.B-FXivgT.js → wardley-RL74JXVD.Ck68omim.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.Dz--Opy3.js → wardleyDiagram-NUSXRM2D.DBUg0bvz.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.Dl8w8TeT.js → xychartDiagram-5P7HB3ND.DnKSGQE1.js} +1 -1
- package/dist/docs/assets/{guides_hooks.md.Bfj0pK91.js → guides_hooks.md.B2XfGX50.js} +7 -3
- package/dist/docs/assets/{guides_mcp-oauth.md.BM_eFC0L.js → guides_mcp-oauth.md.Cxq2TxBB.js} +3 -3
- package/dist/docs/assets/{guides_mcp-oauth.md.BM_eFC0L.lean.js → guides_mcp-oauth.md.Cxq2TxBB.lean.js} +1 -1
- package/dist/docs/assets/guides_opentelemetry.md.D4wO7_8v.js +37 -0
- package/dist/docs/assets/guides_opentelemetry.md.D4wO7_8v.lean.js +1 -0
- package/dist/docs/assets/{guides_slack.md.Bn-WupSE.js → guides_slack.md.ClIyi7FI.js} +8 -3
- package/dist/docs/assets/{guides_slack.md.Bn-WupSE.lean.js → guides_slack.md.ClIyi7FI.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.IplwL25I.js → reference_agent-config.md.CZrbHOfT.js} +8 -4
- package/dist/docs/assets/{reference_agent-config.md.IplwL25I.lean.js → reference_agent-config.md.CZrbHOfT.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.Bxaa020x.js → reference_channels.md.CNNIS6K7.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.B1jq3oGl.js → reference_hooks.md.CROr0QgC.js} +13 -7
- package/dist/docs/assets/{reference_hooks.md.B1jq3oGl.lean.js → reference_hooks.md.CROr0QgC.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.03Ryy9ca.js → reference_schedules.md.BqWnJES4.js} +3 -3
- package/dist/docs/assets/reference_sessions.md.Bi6lHttM.js +22 -0
- package/dist/docs/assets/reference_sessions.md.Bi6lHttM.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.C2GWh7g8.js → reference_skills.md.Ckddg6KX.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.-6pypsWt.js → reference_tools.md.Bo0UfT0a.js} +1 -1
- package/dist/docs/assets/{style.nMsabY-V.css → style.B9o0luvp.css} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/changelog.html +60 -0
- package/dist/docs/changelog.md +114 -0
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/evals.html +37 -37
- package/dist/docs/guides/agent-to-agent.html +37 -37
- package/dist/docs/guides/bitbucket.html +37 -37
- package/dist/docs/guides/cloud-agents.html +37 -37
- package/dist/docs/guides/convert-automation.html +37 -37
- package/dist/docs/guides/export-grokbot.html +37 -37
- package/dist/docs/guides/github.html +37 -37
- package/dist/docs/guides/gitlab.html +37 -37
- package/dist/docs/guides/grokbot-agents.html +37 -37
- package/dist/docs/guides/hooks.html +45 -41
- package/dist/docs/guides/hooks.md +7 -3
- package/dist/docs/guides/improve.html +37 -37
- package/dist/docs/guides/jev.html +37 -37
- package/dist/docs/guides/mcp-oauth.html +39 -39
- package/dist/docs/guides/mcp-oauth.md +12 -0
- package/dist/docs/guides/migrate.html +37 -37
- package/dist/docs/guides/opentelemetry.html +62 -70
- package/dist/docs/guides/opentelemetry.md +149 -179
- package/dist/docs/guides/pagerduty.html +37 -37
- package/dist/docs/guides/slack.html +44 -39
- package/dist/docs/guides/slack.md +41 -0
- package/dist/docs/guides/webhooks.html +37 -37
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +37 -37
- package/dist/docs/index.html +37 -37
- package/dist/docs/llms-full.txt +422 -193
- package/dist/docs/llms.txt +2 -1
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +44 -40
- package/dist/docs/reference/agent-config.md +30 -1
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/channels.html +38 -38
- package/dist/docs/reference/channels.md +5 -1
- package/dist/docs/reference/cli.html +37 -37
- package/dist/docs/reference/connections.html +37 -37
- package/dist/docs/reference/evals.html +37 -37
- package/dist/docs/reference/extensions.html +37 -37
- package/dist/docs/reference/hooks.html +49 -43
- package/dist/docs/reference/hooks.md +10 -5
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +37 -37
- package/dist/docs/reference/memory.html +37 -37
- package/dist/docs/reference/playground.html +36 -36
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +40 -40
- package/dist/docs/reference/sessions.html +58 -37
- package/dist/docs/reference/sessions.md +46 -1
- package/dist/docs/reference/skills.html +40 -40
- package/dist/docs/reference/subagents.html +37 -37
- package/dist/docs/reference/tools.html +39 -39
- package/dist/docs/reference/tools.md +3 -3
- package/dist/docs/templates/agentic-owners.html +37 -37
- package/dist/docs/templates/grokbot-agents.html +37 -37
- package/dist/docs/templates/security-reviewer.html +37 -37
- package/dist/docs/templates/thermo-quality-review.html +37 -37
- package/dist/docs/templates/thermo-review.html +37 -37
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +15 -15
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +2 -6
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.js +1 -1
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-grokbot-agents/extension.js +7 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
- package/dist/extensions/improve/extension.js +1 -1
- package/dist/extensions/jev/extension.js +2 -2
- package/dist/extensions/jev/tools/evaluate.js +3 -3
- package/dist/extensions/slack-communication/extension.js +1 -1
- package/dist/extensions/slack-communication/tools/delete-message.js +1 -1
- package/dist/extensions/slack-communication/tools/edit-message.d.ts.map +1 -1
- package/dist/extensions/slack-communication/tools/edit-message.js +3 -6
- package/dist/extensions/slack-communication/tools/post-card.js +1 -1
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions/slack-communication/tools/post-update.d.ts.map +1 -1
- package/dist/extensions/slack-communication/tools/post-update.js +3 -6
- package/dist/extensions/slack-communication/tools/react.js +1 -1
- package/dist/extensions/slack-communication/tools/set-status.js +1 -1
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +1 -1
- package/dist/filesystem.d.ts +26 -5
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +91 -18
- package/dist/index.d.ts +14 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/internal/as-of.d.ts +2 -0
- package/dist/internal/as-of.d.ts.map +1 -1
- package/dist/internal/as-of.js +2 -0
- package/dist/internal/builtin-tools/reminders.js +1 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +18 -10
- package/dist/internal/continuation.d.ts +3 -0
- package/dist/internal/continuation.d.ts.map +1 -0
- package/dist/internal/continuation.js +1 -0
- package/dist/internal/conversation-mirror.d.ts +5 -0
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +12 -1
- package/dist/internal/convert-automation/convert-workflow.js +1 -1
- package/dist/internal/convert-grokbot/answers.d.ts.map +1 -1
- package/dist/internal/convert-grokbot/answers.js +10 -8
- package/dist/internal/convert-grokbot/recipe.d.ts +1 -1
- package/dist/internal/convert-grokbot/recipe.d.ts.map +1 -1
- package/dist/internal/convert-grokbot/recipe.js +1 -1
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +2 -0
- package/dist/internal/cursor/backend-client.d.ts +8 -3
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +8 -3
- package/dist/internal/cursor/credentials.d.ts +2 -2
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +1 -1
- package/dist/internal/cursor-account-mcp-auth.d.ts +6 -2
- package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
- package/dist/internal/cursor-account-mcp-auth.js +15 -6
- package/dist/internal/deferred-channel-session.d.ts +5 -4
- package/dist/internal/deferred-channel-session.d.ts.map +1 -1
- package/dist/internal/deferred-channel-session.js +6 -4
- package/dist/internal/deploy-client.d.ts +5 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +3 -3
- package/dist/internal/deploy-manifest.js +2 -2
- package/dist/internal/describe-error.d.ts +2 -0
- package/dist/internal/describe-error.d.ts.map +1 -1
- package/dist/internal/describe-error.js +2 -0
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +29 -9
- package/dist/internal/discovery/context.d.ts.map +1 -1
- package/dist/internal/discovery/context.js +1 -2
- package/dist/internal/discovery/cursor-plugin.js +8 -8
- package/dist/internal/discovery/extensions.js +15 -8
- package/dist/internal/discovery/info.d.ts +2 -2
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +6 -9
- package/dist/internal/discovery/instrumentation.d.ts +10 -0
- package/dist/internal/discovery/instrumentation.d.ts.map +1 -0
- package/dist/internal/discovery/instrumentation.js +29 -0
- package/dist/internal/discovery/modules.d.ts.map +1 -1
- package/dist/internal/discovery/modules.js +4 -4
- package/dist/internal/discovery/project-public.d.ts +16 -0
- package/dist/internal/discovery/project-public.d.ts.map +1 -0
- package/dist/internal/discovery/project-public.js +54 -0
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +13 -3
- package/dist/internal/discovery/services.d.ts +5 -4
- package/dist/internal/discovery/services.d.ts.map +1 -1
- package/dist/internal/discovery/services.js +12 -6
- package/dist/internal/docs-site.d.ts +2 -5
- package/dist/internal/docs-site.d.ts.map +1 -1
- package/dist/internal/docs-site.js +2 -5
- package/dist/internal/event-mapper.d.ts.map +1 -1
- package/dist/internal/event-mapper.js +1 -0
- package/dist/internal/factory-resource-channel.d.ts +1 -1
- package/dist/internal/factory-resource-channel.d.ts.map +1 -1
- package/dist/internal/filesystem/nearest.d.ts +1 -0
- package/dist/internal/filesystem/nearest.d.ts.map +1 -1
- package/dist/internal/filesystem/nearest.js +1 -0
- package/dist/internal/filesystem/tools.d.ts.map +1 -1
- package/dist/internal/filesystem/tools.js +1 -1
- package/dist/internal/handleAgentServeTrigger.d.ts +10 -0
- package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
- package/dist/internal/handleAgentServeTrigger.js +3 -0
- package/dist/internal/hmac-secret-values.d.ts +1 -1
- package/dist/internal/hmac-secret-values.d.ts.map +1 -1
- package/dist/internal/host-otel.d.ts +1 -1
- package/dist/internal/host-otel.d.ts.map +1 -1
- package/dist/internal/host-otel.js +5 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +6 -2
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +1 -0
- package/dist/internal/ids.d.ts +8 -0
- package/dist/internal/ids.d.ts.map +1 -1
- package/dist/internal/ids.js +20 -0
- package/dist/internal/init-scaffold.js +1 -1
- package/dist/internal/interview/agent-questions.d.ts +1 -1
- package/dist/internal/interview/agent-questions.d.ts.map +1 -1
- package/dist/internal/interview/agent-questions.js +1 -1
- package/dist/internal/interview/question.d.ts +2 -2
- package/dist/internal/interview/question.d.ts.map +1 -1
- package/dist/internal/interview/question.js +2 -2
- package/dist/internal/json-schema.d.ts.map +1 -1
- package/dist/internal/json-schema.js +3 -7
- package/dist/internal/mcp-endpoint.d.ts +16 -4
- package/dist/internal/mcp-endpoint.d.ts.map +1 -1
- package/dist/internal/mcp-endpoint.js +18 -6
- package/dist/internal/mcp-host.d.ts +9 -0
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +15 -0
- package/dist/internal/otel/collector.d.ts +5 -0
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +24 -5
- package/dist/internal/otel/config.d.ts +31 -21
- package/dist/internal/otel/config.d.ts.map +1 -1
- package/dist/internal/otel/config.js +121 -140
- package/dist/internal/otel/conversation-span-processor.d.ts +9 -0
- package/dist/internal/otel/conversation-span-processor.d.ts.map +1 -0
- package/dist/internal/otel/conversation-span-processor.js +34 -0
- package/dist/internal/otel/customer.d.ts +52 -0
- package/dist/internal/otel/customer.d.ts.map +1 -0
- package/dist/internal/otel/customer.js +727 -0
- package/dist/internal/otel/runtime.d.ts +12 -16
- package/dist/internal/otel/runtime.d.ts.map +1 -1
- package/dist/internal/otel/runtime.js +30 -234
- package/dist/internal/otel-env.d.ts +6 -0
- package/dist/internal/otel-env.d.ts.map +1 -0
- package/dist/internal/otel-env.js +5 -0
- package/dist/internal/reminder-runner.d.ts +9 -4
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +12 -10
- package/dist/internal/reminder-schedule.d.ts +1 -0
- package/dist/internal/reminder-schedule.d.ts.map +1 -1
- package/dist/internal/reminder-schedule.js +1 -0
- package/dist/internal/sdk-runner.d.ts +8 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +190 -14
- package/dist/internal/server.d.ts +4 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +25 -24
- package/dist/internal/session-engine.d.ts +35 -3
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +213 -41
- package/dist/internal/slack-provision-client.js +1 -1
- package/dist/internal/store-api-protocol.d.ts +1 -1
- package/dist/internal/store-api-protocol.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.js +1 -1
- package/dist/internal/update-check.d.ts +2 -2
- package/dist/internal/update-check.d.ts.map +1 -1
- package/dist/internal/update-check.js +3 -3
- package/dist/internal/workspace.d.ts +10 -0
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +47 -1
- package/dist/internal/zod3-datetime.d.ts +12 -0
- package/dist/internal/zod3-datetime.d.ts.map +1 -0
- package/dist/internal/zod3-datetime.js +17 -0
- package/dist/otel-public.d.ts +2 -3
- package/dist/otel-public.d.ts.map +1 -1
- package/dist/otel-public.js +2 -2
- package/dist/otel.d.ts +3 -102
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +61 -97
- package/dist/playground/assets/cursor-icons-16-DfKNljMZ.woff2 +0 -0
- package/dist/playground/assets/index-B3_YohwW.js +62 -0
- package/dist/playground/assets/index-Cn3-adsJ.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/public-deprecated.d.ts +36 -0
- package/dist/public-deprecated.d.ts.map +1 -0
- package/dist/public-deprecated.js +39 -0
- package/dist/tools.d.ts +3 -3
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +1 -1
- package/dist/types.d.ts +262 -97
- package/dist/types.d.ts.map +1 -1
- package/docs/changelog.md +119 -0
- package/docs/guides/hooks.md +7 -3
- package/docs/guides/mcp-oauth.md +12 -0
- package/docs/guides/opentelemetry.md +149 -184
- package/docs/guides/slack.md +41 -0
- package/docs/reference/agent-config.md +30 -1
- package/docs/reference/channels.md +5 -1
- package/docs/reference/hooks.md +10 -5
- package/docs/reference/sessions.md +46 -1
- package/docs/reference/tools.md +3 -3
- package/package.json +35 -8
- package/schemas/grokbot-answers.schema.json +11 -0
- package/skills/framework-map/SKILL.md +2 -1
- package/skills/otel/SKILL.md +28 -48
- package/templates/code-wiki/evals/wiki.eval.ts +2 -2
- package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +0 -1
- package/dist/docs/assets/chunks/channel.Dt4aweTm.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +0 -1
- package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +0 -1
- package/dist/docs/assets/guides_opentelemetry.md.DBQtp7_V.js +0 -45
- package/dist/docs/assets/guides_opentelemetry.md.DBQtp7_V.lean.js +0 -1
- package/dist/docs/assets/reference_sessions.md.C8FXuGwk.js +0 -1
- package/dist/docs/assets/reference_sessions.md.C8FXuGwk.lean.js +0 -1
- package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
- package/dist/playground/assets/index-BdMwybMt.css +0 -1
- package/dist/playground/assets/index-CHk6O92d.js +0 -62
- package/templates/grokbot-agents/.gitignore +0 -4
- package/templates/security-help/.gitignore +0 -4
- /package/dist/docs/assets/{guides_hooks.md.Bfj0pK91.lean.js → guides_hooks.md.B2XfGX50.lean.js} +0 -0
- /package/dist/docs/assets/{reference_channels.md.Bxaa020x.lean.js → reference_channels.md.CNNIS6K7.lean.js} +0 -0
- /package/dist/docs/assets/{reference_schedules.md.03Ryy9ca.lean.js → reference_schedules.md.BqWnJES4.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.C2GWh7g8.lean.js → reference_skills.md.Ckddg6KX.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.-6pypsWt.lean.js → reference_tools.md.Bo0UfT0a.lean.js} +0 -0
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* installed (global npm/pnpm/yarn/bun, or a project dependency), and runs the
|
|
13
13
|
* matching install command.
|
|
14
14
|
*/
|
|
15
|
-
import
|
|
15
|
+
import * as z from "zod/v4";
|
|
16
16
|
/**
|
|
17
17
|
* Semver-style ordering: negative when `a < b`, 0 when equal, positive when
|
|
18
18
|
* `a > b`. Unparseable versions compare equal (never warn on garbage).
|
|
@@ -30,7 +30,7 @@ export declare function fetchLatestPublishedVersion(options?: {
|
|
|
30
30
|
declare const cacheSchema: z.ZodObject<{
|
|
31
31
|
checkedAt: z.ZodNumber;
|
|
32
32
|
latestVersion: z.ZodOptional<z.ZodString>;
|
|
33
|
-
}
|
|
33
|
+
}>;
|
|
34
34
|
export type UpdateCheckCache = z.infer<typeof cacheSchema>;
|
|
35
35
|
export declare function updateCheckCachePath(configDir?: string): string;
|
|
36
36
|
export declare function readUpdateCheckCache(configDir?: string): Promise<UpdateCheckCache | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/internal/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,
|
|
1
|
+
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/internal/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { spawn } from "node:child_process";
|
|
16
16
|
import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
17
17
|
import { dirname, join, sep } from "node:path";
|
|
18
|
-
import
|
|
18
|
+
import * as z from "zod/v4";
|
|
19
19
|
import { configDirPath } from "./cursor/credentials.js";
|
|
20
20
|
import { describeError } from "./describe-error.js";
|
|
21
21
|
import { CLI_COMMAND_NAME, isCompiledDistribution, PACKAGE_NAME, packageRootDir, packageVersion, } from "./distribution.js";
|
|
@@ -295,8 +295,8 @@ async function declaresDependency(dir, packageName) {
|
|
|
295
295
|
return false;
|
|
296
296
|
}
|
|
297
297
|
const manifestSchema = z.object({
|
|
298
|
-
dependencies: z.record(z.string()).optional(),
|
|
299
|
-
devDependencies: z.record(z.string()).optional(),
|
|
298
|
+
dependencies: z.record(z.string(), z.string()).optional(),
|
|
299
|
+
devDependencies: z.record(z.string(), z.string()).optional(),
|
|
300
300
|
});
|
|
301
301
|
try {
|
|
302
302
|
const parsed = manifestSchema.safeParse(JSON.parse(raw));
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* deliver them as the harness system prompt ({@link buildAgentsMdContent}),
|
|
9
9
|
* and cloud / grokbot harnesses never read the session workspace.
|
|
10
10
|
*/
|
|
11
|
+
import { type FileSystem } from "../filesystem.js";
|
|
11
12
|
import type { DiscoveredSkill, DiscoveredTool, ResolvedAgent } from "../types.js";
|
|
12
13
|
export interface MaterializeWorkspaceOptions {
|
|
13
14
|
agent: ResolvedAgent;
|
|
@@ -102,7 +103,16 @@ export declare function buildServerToolsCatalog(tools: DiscoveredTool[], options
|
|
|
102
103
|
export declare function buildAgentsMdContent(agent: ResolvedAgent, options: {
|
|
103
104
|
includeScripts: boolean;
|
|
104
105
|
serverToolsMcpName?: string;
|
|
106
|
+
skillsIndex?: boolean;
|
|
105
107
|
}): string;
|
|
108
|
+
/** Where an authored `fs` sees {@link skillsFileSystem}. */
|
|
109
|
+
export declare const SKILLS_MOUNT_PATH = "/agent/skills";
|
|
110
|
+
export declare const FS_AND_ROOT_CONFLICT = "Set `fs` or `root`, not both; `root` is a deprecated alias of `fs`.";
|
|
111
|
+
/**
|
|
112
|
+
* The discovered skills as a read-only tree: `/<name>/SKILL.md`, the same
|
|
113
|
+
* bytes {@link materializeSkill} writes, plus each skill's sibling files.
|
|
114
|
+
*/
|
|
115
|
+
export declare function skillsFileSystem(skills: readonly DiscoveredSkill[]): Promise<FileSystem>;
|
|
106
116
|
/**
|
|
107
117
|
* True when `dir` sits strictly inside a git repository (a `.git` exists in
|
|
108
118
|
* an ancestor directory but not in `dir` itself). The Cursor harness resolves
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/internal/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMlF,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,CAOR;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAapB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA8B,GAC/D,MAAM,CA8CR;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,MAAM,CA6BR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/internal/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,12 @@
|
|
|
9
9
|
* and cloud / grokbot harnesses never read the session workspace.
|
|
10
10
|
*/
|
|
11
11
|
import { execFile } from "node:child_process";
|
|
12
|
-
import { chmod, copyFile, lstat, mkdir, readlink, rm, stat, symlink, writeFile, } from "node:fs/promises";
|
|
12
|
+
import { chmod, copyFile, lstat, mkdir, readFile, readlink, rm, stat, symlink, writeFile, } from "node:fs/promises";
|
|
13
13
|
import { homedir } from "node:os";
|
|
14
14
|
import { dirname, join, parse, relative, resolve, sep } from "node:path";
|
|
15
15
|
import { promisify } from "node:util";
|
|
16
16
|
import { agentStoreKeys, DEPLOYMENT_STORE_MOUNT_PATH } from "../files.js";
|
|
17
|
+
import { readOnlyFs, tempFs } from "../filesystem.js";
|
|
17
18
|
import { MEMORY_DIR_NAME } from "./memory-dir.js";
|
|
18
19
|
import { parseFrontmatter, serializeFrontmatter } from "./frontmatter.js";
|
|
19
20
|
import { buildIdentitySection } from "./prompt-context.js";
|
|
@@ -209,10 +210,55 @@ export function buildAgentsMdContent(agent, options) {
|
|
|
209
210
|
buildAgentToolsCatalog(agent.tools, {
|
|
210
211
|
includeScripts: options.includeScripts,
|
|
211
212
|
}),
|
|
213
|
+
options.skillsIndex === true ? buildSkillsIndex(agent.skills) : "",
|
|
212
214
|
]
|
|
213
215
|
.filter((part) => part !== "")
|
|
214
216
|
.join("\n\n");
|
|
215
217
|
}
|
|
218
|
+
/** Where an authored `fs` sees {@link skillsFileSystem}. */
|
|
219
|
+
export const SKILLS_MOUNT_PATH = "/agent/skills";
|
|
220
|
+
export const FS_AND_ROOT_CONFLICT = "Set `fs` or `root`, not both; `root` is a deprecated alias of `fs`.";
|
|
221
|
+
/**
|
|
222
|
+
* Index of the discovered skills under {@link SKILLS_MOUNT_PATH}. An `fs`
|
|
223
|
+
* agent has no `.cursor/skills/` for the harness to discover, so the
|
|
224
|
+
* instructions name each SKILL.md instead.
|
|
225
|
+
*/
|
|
226
|
+
function buildSkillsIndex(skills) {
|
|
227
|
+
if (skills.length === 0) {
|
|
228
|
+
return "";
|
|
229
|
+
}
|
|
230
|
+
return [
|
|
231
|
+
"## Skills",
|
|
232
|
+
"",
|
|
233
|
+
`Skills are on-demand procedures under \`${SKILLS_MOUNT_PATH}\`. When a task matches a skill's description, read its \`SKILL.md\` before acting on that part of the task and follow it.`,
|
|
234
|
+
"",
|
|
235
|
+
...skills.map((skill) => `- \`${skill.name}\` (\`${SKILLS_MOUNT_PATH}/${skill.name}/SKILL.md\`): ${skill.description.trim()}`),
|
|
236
|
+
].join("\n");
|
|
237
|
+
}
|
|
238
|
+
function skillFilePath(skillName, relativePath) {
|
|
239
|
+
const parts = relativePath.split("/");
|
|
240
|
+
if (relativePath.includes("\0") ||
|
|
241
|
+
relativePath.startsWith("/") ||
|
|
242
|
+
parts.some((part) => part === "" || part === "..")) {
|
|
243
|
+
throw new Error(`Skill "${skillName}" file "${relativePath}" escapes its directory.`);
|
|
244
|
+
}
|
|
245
|
+
return `/${skillName}/${relativePath}`;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* The discovered skills as a read-only tree: `/<name>/SKILL.md`, the same
|
|
249
|
+
* bytes {@link materializeSkill} writes, plus each skill's sibling files.
|
|
250
|
+
*/
|
|
251
|
+
export async function skillsFileSystem(skills) {
|
|
252
|
+
const files = {};
|
|
253
|
+
for (const skill of skills) {
|
|
254
|
+
files[`/${skill.name}/SKILL.md`] = buildSkillMd(skill);
|
|
255
|
+
for (const [relativePath, source] of Object.entries(skill.files)) {
|
|
256
|
+
files[skillFilePath(skill.name, relativePath)] =
|
|
257
|
+
"contents" in source ? source.contents : await readFile(source.sourcePath);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return readOnlyFs(tempFs(files));
|
|
261
|
+
}
|
|
216
262
|
/**
|
|
217
263
|
* True when `dir` sits strictly inside a git repository (a `.git` exists in
|
|
218
264
|
* an ancestor directory but not in `dir` itself). The Cursor harness resolves
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
/**
|
|
3
|
+
* The datetime check of zod 3's `z.string().datetime()`. zod 4 refuses times
|
|
4
|
+
* without seconds and, with `offset`, `+HHMM` offsets; models and people still
|
|
5
|
+
* type both. Use it for values a person or a model writes; a value that only
|
|
6
|
+
* `toISOString()` writes can keep `z.iso.datetime()`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function zod3Datetime(options?: {
|
|
9
|
+
offset?: boolean;
|
|
10
|
+
message?: string;
|
|
11
|
+
}): z.ZodString;
|
|
12
|
+
//# sourceMappingURL=zod3-datetime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod3-datetime.d.ts","sourceRoot":"","sources":["../../src/internal/zod3-datetime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAM5B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,CAAC,CAAC,SAAS,CAM9F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
const DATE = z.regexes.date.source.slice(1, -1);
|
|
3
|
+
const TIME = String.raw `(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?`;
|
|
4
|
+
const OFFSET = String.raw `[+-]\d{2}:?\d{2}`;
|
|
5
|
+
/**
|
|
6
|
+
* The datetime check of zod 3's `z.string().datetime()`. zod 4 refuses times
|
|
7
|
+
* without seconds and, with `offset`, `+HHMM` offsets; models and people still
|
|
8
|
+
* type both. Use it for values a person or a model writes; a value that only
|
|
9
|
+
* `toISOString()` writes can keep `z.iso.datetime()`.
|
|
10
|
+
*/
|
|
11
|
+
export function zod3Datetime(options = {}) {
|
|
12
|
+
const zone = options.offset === true ? `(?:Z|${OFFSET})` : "Z";
|
|
13
|
+
return z
|
|
14
|
+
.string()
|
|
15
|
+
.regex(new RegExp(`^${DATE}T${TIME}${zone}$`), options.message ?? "Invalid datetime")
|
|
16
|
+
.meta({ format: "date-time" });
|
|
17
|
+
}
|
package/dist/otel-public.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Public `@cursor/bdk/otel` surface
|
|
3
|
-
* helpers. `defineOtel` is `@cursor/bdk/internal/otel`.
|
|
2
|
+
* Public `@cursor/bdk/otel` surface.
|
|
4
3
|
*/
|
|
5
|
-
export type { OtelConfig, OtelConfigFactory, OtelDefinition, OtelExporterConfig, OtelLogOptions, OtelMetricOptions, OtelSignal, OtelTraceOptions, } from "./otel.js";
|
|
6
4
|
export { activeTraceparent, BACKEND_TRACEPARENT_HEADER, formatTraceparent, injectActiveTraceContext, installOutboundFetchInstrumentation, instrumentedFetch, TRACEPARENT_HEADER, } from "./otel.js";
|
|
5
|
+
export { currentConversationId } from "./internal/otel/conversation-span-processor.js";
|
|
7
6
|
//# sourceMappingURL=otel-public.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel-public.d.ts","sourceRoot":"","sources":["../src/otel-public.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"otel-public.d.ts","sourceRoot":"","sources":["../src/otel-public.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,mCAAmC,EACnC,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC"}
|
package/dist/otel-public.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Public `@cursor/bdk/otel` surface
|
|
3
|
-
* helpers. `defineOtel` is `@cursor/bdk/internal/otel`.
|
|
2
|
+
* Public `@cursor/bdk/otel` surface.
|
|
4
3
|
*/
|
|
5
4
|
export { activeTraceparent, BACKEND_TRACEPARENT_HEADER, formatTraceparent, injectActiveTraceContext, installOutboundFetchInstrumentation, instrumentedFetch, TRACEPARENT_HEADER, } from "./otel.js";
|
|
5
|
+
export { currentConversationId } from "./internal/otel/conversation-span-processor.js";
|
package/dist/otel.d.ts
CHANGED
|
@@ -1,106 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* ```ts
|
|
6
|
-
* import { defineOtel } from "@cursor/bdk/internal/otel";
|
|
7
|
-
*
|
|
8
|
-
* export default defineOtel({
|
|
9
|
-
* serviceName: "cursor",
|
|
10
|
-
* exporters: [{ url: "https://otel.example.com", protocol: "http/protobuf" }],
|
|
11
|
-
* });
|
|
12
|
-
*
|
|
13
|
-
* export default defineOtel(() => resolveMyOtelConfig());
|
|
14
|
-
* ```
|
|
15
|
-
*
|
|
16
|
-
* Internal only: Cursor factory agents. Not a public Agent SDK export.
|
|
17
|
-
*/
|
|
18
|
-
export type OtelSignal = "traces" | "metrics" | "logs";
|
|
19
|
-
/** One OTLP destination. Multiple entries fan out. */
|
|
20
|
-
export interface OtelExporterConfig {
|
|
21
|
-
/**
|
|
22
|
-
* OTLP base URL (`https://otel.example.com`) or signal path
|
|
23
|
-
* (`…/v1/traces`). Signal paths are stripped to the base; the runtime
|
|
24
|
-
* re-appends `/v1/{signal}`.
|
|
25
|
-
*/
|
|
26
|
-
url: string;
|
|
27
|
-
/** Extra HTTP headers (merged with `OTEL_EXPORTER_OTLP_HEADERS`). */
|
|
28
|
-
headers?: Record<string, string>;
|
|
29
|
-
/**
|
|
30
|
-
* Wire format. Default `http/protobuf` (matches Cursor enterprise OTLP).
|
|
31
|
-
* Use `http/json` for collectors that only accept JSON.
|
|
32
|
-
*/
|
|
33
|
-
protocol?: "http/json" | "http/protobuf";
|
|
34
|
-
/**
|
|
35
|
-
* Restrict this destination to these signals. Default: all enabled
|
|
36
|
-
* signals. Set by env when per-signal `OTEL_EXPORTER_OTLP_*_ENDPOINT`
|
|
37
|
-
* vars differ.
|
|
38
|
-
*/
|
|
39
|
-
signals?: OtelSignal[];
|
|
40
|
-
}
|
|
41
|
-
export interface OtelTraceOptions {
|
|
42
|
-
/** Sample ratio in `[0, 1]`. Default `1`. */
|
|
43
|
-
sampleRatio?: number;
|
|
44
|
-
}
|
|
45
|
-
export interface OtelMetricOptions {
|
|
46
|
-
/** Export interval in ms. Default `10000`. */
|
|
47
|
-
exportIntervalMillis?: number;
|
|
48
|
-
}
|
|
49
|
-
export interface OtelLogOptions {
|
|
50
|
-
/**
|
|
51
|
-
* Include user prompt text on log records / span events.
|
|
52
|
-
* Default false; also toggled by `OTEL_LOG_USER_PROMPTS=1`.
|
|
53
|
-
*/
|
|
54
|
-
userPrompts?: boolean;
|
|
55
|
-
/**
|
|
56
|
-
* Include tool argument / result payloads and failure text (truncated).
|
|
57
|
-
* Default false; also `OTEL_LOG_TOOL_CONTENT=1`.
|
|
58
|
-
*/
|
|
59
|
-
toolContent?: boolean;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Authored / programmatic OTel config. Empty config still enables when
|
|
63
|
-
* standard `OTEL_EXPORTER_OTLP_*` env vars are set.
|
|
64
|
-
*/
|
|
65
|
-
export interface OtelConfig {
|
|
66
|
-
/**
|
|
67
|
-
* Resource `service.name`. Default: `OTEL_SERVICE_NAME` or `"cursor"`
|
|
68
|
-
* (same as enterprise export) so Agent SDK signals join org streams.
|
|
69
|
-
*/
|
|
70
|
-
serviceName?: string;
|
|
71
|
-
/** Resource `service.version`. */
|
|
72
|
-
serviceVersion?: string;
|
|
73
|
-
/** Extra resource attributes on every signal. */
|
|
74
|
-
resourceAttributes?: Record<string, string>;
|
|
75
|
-
/**
|
|
76
|
-
* OTLP destinations. Default: from `OTEL_EXPORTER_OTLP_ENDPOINT` /
|
|
77
|
-
* per-signal `*_TRACES_ENDPOINT` etc. Empty with no env = disabled.
|
|
78
|
-
*/
|
|
79
|
-
exporters?: OtelExporterConfig[];
|
|
80
|
-
/** Traces on/off or options. Default on. */
|
|
81
|
-
traces?: boolean | OtelTraceOptions;
|
|
82
|
-
/** Metrics on/off or options. Default on. */
|
|
83
|
-
metrics?: boolean | OtelMetricOptions;
|
|
84
|
-
/** Logs on/off or options. Default off (opt-in content). */
|
|
85
|
-
logs?: boolean | OtelLogOptions;
|
|
86
|
-
}
|
|
87
|
-
export type OtelDefinition = OtelConfig & {
|
|
88
|
-
readonly __agentServe: "otel";
|
|
89
|
-
};
|
|
90
|
-
/** Re-read authored config on each hosted request, after secrets load. */
|
|
91
|
-
export type OtelConfigFactory = () => OtelConfig;
|
|
92
|
-
/**
|
|
93
|
-
* Hidden factory on {@link OtelDefinition}. Not enumerable so
|
|
94
|
-
* `pickAuthoredOtel` compares the bake-time snapshot, not the thunk.
|
|
95
|
-
*/
|
|
96
|
-
export declare const OTEL_CONFIG_RESOLVE: symbol;
|
|
97
|
-
/**
|
|
98
|
-
* Author OpenTelemetry export under `agent/otel.ts`.
|
|
99
|
-
* Import from `@cursor/bdk/internal/otel`, not `@cursor/bdk`.
|
|
2
|
+
* W3C `traceparent` helpers for outbound calls.
|
|
3
|
+
* Set `OTEL_*` variables. There is no instrumentation file.
|
|
100
4
|
*/
|
|
101
|
-
export declare function defineOtel(config?: OtelConfig | OtelConfigFactory): OtelDefinition;
|
|
102
|
-
/** Invoke a `defineOtel(() => …)` factory, or return the static snapshot. */
|
|
103
|
-
export declare function resolveOtelDefinition(def: OtelConfig): OtelConfig;
|
|
104
5
|
export declare const TRACEPARENT_HEADER = "traceparent";
|
|
105
6
|
/** Cursor backend prefers this; `remoteSpanContextFromRequest` falls back to W3C. */
|
|
106
7
|
export declare const BACKEND_TRACEPARENT_HEADER = "backend-traceparent";
|
|
@@ -125,6 +26,6 @@ export declare function injectActiveTraceContext(headers: {
|
|
|
125
26
|
/** W3C `traceparent` for the active span, or undefined if none. */
|
|
126
27
|
export declare function activeTraceparent(): string | undefined;
|
|
127
28
|
export declare function instrumentedFetch(base?: typeof fetch): typeof fetch;
|
|
128
|
-
/** Idempotent. Safe to call
|
|
29
|
+
/** Idempotent. Safe to call on every serve. */
|
|
129
30
|
export declare function installOutboundFetchInstrumentation(): void;
|
|
130
31
|
//# sourceMappingURL=otel.d.ts.map
|
package/dist/otel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAChD,qFAAqF;AACrF,eAAO,MAAM,0BAA0B,wBAAwB,CAAC;AAEhE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,GAAG,SAAS,CAOrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC,GAAG,IAAI,CAWP;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAItD;AAoBD,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,OAAO,KAAa,GAAG,OAAO,KAAK,CAS1E;AAiED,+CAA+C;AAC/C,wBAAgB,mCAAmC,IAAI,IAAI,CAO1D"}
|
package/dist/otel.js
CHANGED
|
@@ -1,101 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* ```ts
|
|
6
|
-
* import { defineOtel } from "@cursor/bdk/internal/otel";
|
|
7
|
-
*
|
|
8
|
-
* export default defineOtel({
|
|
9
|
-
* serviceName: "cursor",
|
|
10
|
-
* exporters: [{ url: "https://otel.example.com", protocol: "http/protobuf" }],
|
|
11
|
-
* });
|
|
12
|
-
*
|
|
13
|
-
* export default defineOtel(() => resolveMyOtelConfig());
|
|
14
|
-
* ```
|
|
15
|
-
*
|
|
16
|
-
* Internal only: Cursor factory agents. Not a public Agent SDK export.
|
|
2
|
+
* W3C `traceparent` helpers for outbound calls.
|
|
3
|
+
* Set `OTEL_*` variables. There is no instrumentation file.
|
|
17
4
|
*/
|
|
18
5
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
19
6
|
import { context, trace } from "@opentelemetry/api";
|
|
20
|
-
import { brandDefinition } from "./internal/brand.js";
|
|
21
|
-
/**
|
|
22
|
-
* Hidden factory on {@link OtelDefinition}. Not enumerable so
|
|
23
|
-
* `pickAuthoredOtel` compares the bake-time snapshot, not the thunk.
|
|
24
|
-
*/
|
|
25
|
-
export const OTEL_CONFIG_RESOLVE = Symbol.for("anysphere.july.otel.configResolve");
|
|
26
|
-
/**
|
|
27
|
-
* Author OpenTelemetry export under `agent/otel.ts`.
|
|
28
|
-
* Import from `@cursor/bdk/internal/otel`, not `@cursor/bdk`.
|
|
29
|
-
*/
|
|
30
|
-
export function defineOtel(config = {}) {
|
|
31
|
-
const resolve = typeof config === "function" ? config : () => config;
|
|
32
|
-
const snapshot = resolve();
|
|
33
|
-
validateOtelConfig(snapshot);
|
|
34
|
-
const def = brandDefinition("otel", snapshot);
|
|
35
|
-
Object.defineProperty(def, OTEL_CONFIG_RESOLVE, {
|
|
36
|
-
value: resolve,
|
|
37
|
-
enumerable: false,
|
|
38
|
-
});
|
|
39
|
-
return def;
|
|
40
|
-
}
|
|
41
|
-
/** Invoke a `defineOtel(() => …)` factory, or return the static snapshot. */
|
|
42
|
-
export function resolveOtelDefinition(def) {
|
|
43
|
-
const resolve = def[OTEL_CONFIG_RESOLVE];
|
|
44
|
-
if (resolve === undefined) {
|
|
45
|
-
return def;
|
|
46
|
-
}
|
|
47
|
-
const next = resolve();
|
|
48
|
-
validateOtelConfig(next);
|
|
49
|
-
return next;
|
|
50
|
-
}
|
|
51
|
-
function validateOtelConfig(config) {
|
|
52
|
-
if (config.exporters !== undefined) {
|
|
53
|
-
for (const exporter of config.exporters) {
|
|
54
|
-
if (typeof exporter.url !== "string" || exporter.url.length === 0) {
|
|
55
|
-
throw new Error("defineOtel: exporters[].url must be a non-empty string");
|
|
56
|
-
}
|
|
57
|
-
if (exporter.protocol !== undefined &&
|
|
58
|
-
exporter.protocol !== "http/json" &&
|
|
59
|
-
exporter.protocol !== "http/protobuf") {
|
|
60
|
-
throw new Error('defineOtel: exporters[].protocol must be "http/json" or "http/protobuf"');
|
|
61
|
-
}
|
|
62
|
-
assertSignals(exporter.signals);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (config.resourceAttributes !== undefined) {
|
|
66
|
-
for (const [key, value] of Object.entries(config.resourceAttributes)) {
|
|
67
|
-
if (typeof value !== "string") {
|
|
68
|
-
throw new Error(`defineOtel: resourceAttributes.${key} must be a string`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
assertSampleRatio(config.traces);
|
|
73
|
-
}
|
|
74
|
-
function assertSignals(signals) {
|
|
75
|
-
if (signals === undefined) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (signals.length === 0) {
|
|
79
|
-
throw new Error("defineOtel: exporters[].signals must be non-empty");
|
|
80
|
-
}
|
|
81
|
-
for (const signal of signals) {
|
|
82
|
-
if (signal !== "traces" && signal !== "metrics" && signal !== "logs") {
|
|
83
|
-
throw new Error('defineOtel: exporters[].signals must be "traces" | "metrics" | "logs"');
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
function assertSampleRatio(traces) {
|
|
88
|
-
if (traces === undefined || typeof traces === "boolean") {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const ratio = traces.sampleRatio;
|
|
92
|
-
if (ratio === undefined) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
if (!Number.isFinite(ratio) || ratio < 0 || ratio > 1) {
|
|
96
|
-
throw new Error("defineOtel: traces.sampleRatio must be in [0, 1]");
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
7
|
export const TRACEPARENT_HEADER = "traceparent";
|
|
100
8
|
/** Cursor backend prefers this; `remoteSpanContextFromRequest` falls back to W3C. */
|
|
101
9
|
export const BACKEND_TRACEPARENT_HEADER = "backend-traceparent";
|
|
@@ -134,7 +42,7 @@ export function activeTraceparent() {
|
|
|
134
42
|
}
|
|
135
43
|
/**
|
|
136
44
|
* Copy the active span onto every outbound `fetch`. Agents should not
|
|
137
|
-
* wrap their own Connect / MCP clients for this
|
|
45
|
+
* wrap their own Connect / MCP clients for this. The serve runtime
|
|
138
46
|
* installs it on `globalThis.fetch` when traces are on.
|
|
139
47
|
*/
|
|
140
48
|
function headersForFetch(input, init) {
|
|
@@ -145,20 +53,76 @@ function headersForFetch(input, init) {
|
|
|
145
53
|
: input instanceof Request
|
|
146
54
|
? input.headers
|
|
147
55
|
: undefined);
|
|
148
|
-
injectActiveTraceContext(headers);
|
|
149
56
|
return headers;
|
|
150
57
|
}
|
|
151
58
|
export function instrumentedFetch(base = fetch) {
|
|
152
59
|
return (input, init) => {
|
|
153
60
|
const headers = headersForFetch(input, init);
|
|
61
|
+
applyOutboundTraceHeaders(headers, requestHost(input));
|
|
154
62
|
if (input instanceof Request && init === undefined) {
|
|
155
63
|
return base(new Request(input, { headers }));
|
|
156
64
|
}
|
|
157
65
|
return base(input, { ...init, headers });
|
|
158
66
|
};
|
|
159
67
|
}
|
|
68
|
+
function requestHost(input) {
|
|
69
|
+
const raw = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
|
|
70
|
+
try {
|
|
71
|
+
return new URL(raw).hostname;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function applyOutboundTraceHeaders(headers, host) {
|
|
78
|
+
if (host === undefined) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const span = trace.getSpan(context.active()) ?? getContextTracerSpan();
|
|
82
|
+
if (span === undefined) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const traceparent = formatTraceparent(span.spanContext());
|
|
86
|
+
if (traceparent === undefined) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (isCursorHost(host) || isCollectorHost(host)) {
|
|
90
|
+
headers.set(TRACEPARENT_HEADER, traceparent);
|
|
91
|
+
}
|
|
92
|
+
if (isCursorHost(host)) {
|
|
93
|
+
headers.set(BACKEND_TRACEPARENT_HEADER, traceparent);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function isCursorHost(host) {
|
|
97
|
+
return (host === "cursor.com" ||
|
|
98
|
+
host === "cursor.sh" ||
|
|
99
|
+
host.endsWith(".cursor.com") ||
|
|
100
|
+
host.endsWith(".cursor.sh"));
|
|
101
|
+
}
|
|
102
|
+
function isCollectorHost(host) {
|
|
103
|
+
for (const key of [
|
|
104
|
+
"OTEL_EXPORTER_OTLP_ENDPOINT",
|
|
105
|
+
"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
|
|
106
|
+
"OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",
|
|
107
|
+
"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT",
|
|
108
|
+
]) {
|
|
109
|
+
const raw = process.env[key];
|
|
110
|
+
if (raw === undefined || raw.length === 0) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
if (new URL(raw).hostname === host) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Ignore a value that is not a URL.
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
160
124
|
const OUTBOUND_FETCH_INSTALLED = Symbol.for("anysphere.july.otel.outboundFetch");
|
|
161
|
-
/** Idempotent. Safe to call
|
|
125
|
+
/** Idempotent. Safe to call on every serve. */
|
|
162
126
|
export function installOutboundFetchInstrumentation() {
|
|
163
127
|
const slots = globalThis;
|
|
164
128
|
if (slots[OUTBOUND_FETCH_INSTALLED] === true) {
|
|
Binary file
|