@cursor/bdk 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/dist/bin/agent-serve.js +32 -8
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +36 -5
- package/dist/channels/slack/attachments.d.ts +2 -1
- package/dist/channels/slack/attachments.d.ts.map +1 -1
- package/dist/channels/slack/attachments.js +19 -9
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +26 -24
- package/dist/channels/slack/thread-context.d.ts +21 -11
- package/dist/channels/slack/thread-context.d.ts.map +1 -1
- package/dist/channels/slack/thread-context.js +75 -27
- package/dist/connections.d.ts +1 -1
- package/dist/connections.js +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.DtYVVVyK.js → app.4kQ8Db_q.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.CvuAJ0My.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D47xT7J4.js → VPLocalSearchBox.DY1RwB8Q.js} +1 -1
- package/dist/docs/assets/chunks/{arc.CDJ6xzxR.js → arc.CxE_fSPK.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.l1Xnjd3N.js → architectureDiagram-Q4EWVU46.CPX426ui.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.x-finShZ.js → baseUniq.CB52JrKG.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.COC3qynH.js → blockDiagram-DXYQGD6D.J0cNaQCL.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.DdQO850E.js → c4Diagram-AHTNJAMY.DJn3vEGT.js} +1 -1
- package/dist/docs/assets/chunks/channel.BoNycAoN.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.Dpn8omLk.js → chunk-4BX2VUAB.Dao618F6.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C0XWStUN.js → chunk-4TB4RGXK.QW8Rhjai.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DsKSZfIM.js → chunk-55IACEB6.DfRLLKF_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.dNU6JDu6.js → chunk-EDXVE4YY.CIV2ApKQ.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DN41fxKE.js → chunk-FMBD7UC4.BEheSuxp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.COpKCZus.js → chunk-OYMX7WX6.CUN88ENB.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.HDB-azx2.js → chunk-QZHKN3VN.CgqCs8b_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DEeX_a2j.js → chunk-YZCP3GAM.iCH0nnTJ.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C4x07Gkj.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C4x07Gkj.js +1 -0
- package/dist/docs/assets/chunks/clone.Db22cH_-.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.C3yGL2A8.js → cose-bilkent-S5V4N54A.BLcUxhWE.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Bpl24en4.js → dagre-KV5264BT.Ep7LofOm.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.nFco6seU.js → diagram-5BDNPKRD.Bzf4GSQ4.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DXhA6DWR.js → diagram-G4DWMVQ6.DD6Jh-eM.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.8GoOYcwk.js → diagram-MMDJMWI5.oOIl8bWd.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.DDBlqvlJ.js → diagram-TYMM5635.DHs85Ade.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.vl_N81P4.js → erDiagram-SMLLAGMA.BIb5ghCk.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.Cteg8g7I.js → flowDiagram-DWJPFMVM.DV4paY9k.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.D4aMhlMM.js → ganttDiagram-T4ZO3ILL.AyEKA6_v.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DF_J0D4q.js → gitGraphDiagram-UUTBAWPF.BltiCDFo.js} +1 -1
- package/dist/docs/assets/chunks/{graph.DJs0LDCf.js → graph.DzuEYGdC.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.Bb-4RQwg.js → infoDiagram-42DDH7IO.BV2l981J.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DEtQRSbc.js → ishikawaDiagram-UXIWVN3A.BA4Izf-m.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.DhQQ75FA.js → journeyDiagram-VCZTEJTY.DjaFbFS3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.C4gEw3Rk.js → kanban-definition-6JOO6SKY.CfTFieDs.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DT-PGlXa.js → layout.DzfWqTBV.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BMMe__JW.js → linear.BO6mpulV.js} +1 -1
- package/dist/docs/assets/chunks/{min.XyaU9K9Q.js → min.BGgTadgT.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CbBM6xZ-.js → mindmap-definition-QFDTVHPH.DPuIXVWY.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DFJoIVou.js → pieDiagram-DEJITSTG.BOnl3bBg.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CQjkDYqb.js → quadrantDiagram-34T5L4WZ.DNB6Ckdc.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.D-mK-JQu.js → requirementDiagram-MS252O5E.D5-Qo7vb.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BStQInpd.js → sankeyDiagram-XADWPNL6.8t65cesf.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.CA_eooPJ.js → sequenceDiagram-FGHM5R23.CaG07BdS.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BXl-b7ad.js → stateDiagram-FHFEXIEX.TKOweTB6.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CuqmyQc4.js +1 -0
- package/dist/docs/assets/chunks/{theme.q37tOs4x.js → theme.Dx-JhpTB.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.vjuaGOSe.js → timeline-definition-GMOUNBTQ.fE53zQ2s.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BxduJl-F.js → vennDiagram-DHZGUBPP.DJsZZaJg.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.844kyrjl.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D1z3ds0D.js → wardleyDiagram-NUSXRM2D.CMZ-Ru_t.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CRU5Ti9b.js → xychartDiagram-5P7HB3ND.XXrhBc7a.js} +1 -1
- package/dist/docs/assets/{deployment.md.nGo1yIsa.js → deployment.md.UhnJIMr-.js} +6 -9
- package/dist/docs/assets/{deployment.md.nGo1yIsa.lean.js → deployment.md.UhnJIMr-.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.C2_DSWlE.js → guides_github.md.Bq9kQU9B.js} +9 -3
- package/dist/docs/assets/{guides_github.md.C2_DSWlE.lean.js → guides_github.md.Bq9kQU9B.lean.js} +1 -1
- package/dist/docs/assets/{guides_jev.md.BNDm14Gy.js → guides_jev.md.CRcgmjDb.js} +2 -2
- package/dist/docs/assets/{guides_jev.md.BNDm14Gy.lean.js → guides_jev.md.CRcgmjDb.lean.js} +1 -1
- package/dist/docs/assets/{guides_slack.md.ZbHQETOT.js → guides_slack.md.diqqXTTm.js} +2 -2
- package/dist/docs/assets/{guides_slack.md.ZbHQETOT.lean.js → guides_slack.md.diqqXTTm.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.wG4shE1f.js → quickstart.md.CHpHPBUN.js} +5 -3
- package/dist/docs/assets/{quickstart.md.wG4shE1f.lean.js → quickstart.md.CHpHPBUN.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.DzGI777n.js → reference_agent-config.md.Cj5uBKp4.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.CFMNPreZ.js → reference_artifacts.md.CQfKq8F2.js} +1 -1
- package/dist/docs/assets/reference_cli.md.DgeLTO18.js +91 -0
- package/dist/docs/assets/reference_cli.md.DgeLTO18.lean.js +1 -0
- package/dist/docs/assets/{reference_connections.md._XpKiOaF.js → reference_connections.md.COq--gAm.js} +7 -3
- package/dist/docs/assets/{reference_connections.md._XpKiOaF.lean.js → reference_connections.md.COq--gAm.lean.js} +1 -1
- package/dist/docs/assets/{reference_evals.md.DqNyHMA6.js → reference_evals.md.CJm3uCUm.js} +4 -4
- package/dist/docs/assets/{reference_evals.md.DqNyHMA6.lean.js → reference_evals.md.CJm3uCUm.lean.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.js → reference_extensions.md.pa2tN-e4.js} +4 -3
- package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.lean.js → reference_extensions.md.pa2tN-e4.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.CRFTxt9M.js → reference_skills.md.Cy00QMKS.js} +3 -3
- package/dist/docs/assets/{reference_skills.md.CRFTxt9M.lean.js → reference_skills.md.Cy00QMKS.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.Cw5PKa3t.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.BzZSu1Gz.lean.js → troubleshooting.md.Cw5PKa3t.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +41 -44
- package/dist/docs/deployment.md +49 -16
- 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/github.html +43 -37
- package/dist/docs/guides/github.md +34 -0
- package/dist/docs/guides/gitlab.html +35 -35
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +37 -37
- package/dist/docs/guides/jev.md +7 -0
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +37 -37
- package/dist/docs/guides/slack.md +5 -0
- 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 +223 -94
- package/dist/docs/quickstart.html +40 -38
- package/dist/docs/quickstart.md +7 -1
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/agent-config.md +1 -1
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/artifacts.md +1 -1
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +55 -61
- package/dist/docs/reference/cli.md +65 -63
- package/dist/docs/reference/connections.html +42 -38
- package/dist/docs/reference/connections.md +28 -2
- package/dist/docs/reference/evals.html +39 -39
- package/dist/docs/reference/evals.md +6 -7
- package/dist/docs/reference/extensions.html +39 -38
- package/dist/docs/reference/extensions.md +13 -0
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +38 -38
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.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 +7 -3
- package/dist/extensions/cursor-grokbot-agents/extension.d.ts +77 -0
- package/dist/extensions/cursor-grokbot-agents/extension.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/extension.js +63 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts +11 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +31 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts +56 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +158 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts +28 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +59 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts +53 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +206 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +15 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts +12 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +25 -0
- package/dist/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +37 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +32 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +24 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +34 -0
- package/dist/extensions/jev/extension.d.ts +3 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -1
- package/dist/extensions/jev/extension.js +10 -1
- package/dist/extensions/jev/lib/evaluate.d.ts +4 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -1
- package/dist/extensions/jev/lib/evaluate.js +6 -2
- package/dist/extensions.d.ts +4 -2
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +5 -2
- package/dist/internal/cli-ax.d.ts +1 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +43 -10
- package/dist/internal/cli-deploy.d.ts +5 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +41 -9
- package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
- package/dist/internal/cli-mcp-oauth.js +2 -1
- package/dist/internal/cli-skills.d.ts +1 -1
- package/dist/internal/cli-skills.d.ts.map +1 -1
- package/dist/internal/cli-skills.js +5 -5
- package/dist/internal/connection-env.d.ts +31 -0
- package/dist/internal/connection-env.d.ts.map +1 -0
- package/dist/internal/connection-env.js +84 -0
- package/dist/internal/cursor/backend-client.js +5 -0
- package/dist/internal/deploy-client.d.ts +30 -6
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +45 -9
- package/dist/internal/discovery/agent-config.d.ts +6 -5
- package/dist/internal/discovery/agent-config.d.ts.map +1 -1
- package/dist/internal/discovery/agent-config.js +29 -28
- package/dist/internal/discovery/agent.js +1 -1
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +11 -0
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +12 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +36 -11
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +31 -8
- package/dist/internal/hosted-delivery.d.ts +2 -2
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +228 -48
- package/dist/internal/hosting.d.ts +10 -2
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +33 -3
- package/dist/internal/install-cursor-skills.d.ts +20 -24
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +50 -48
- package/dist/internal/legacy-command-guard.d.ts +2 -0
- package/dist/internal/legacy-command-guard.d.ts.map +1 -1
- package/dist/internal/legacy-command-guard.js +10 -1
- package/dist/internal/mcp-host.d.ts +6 -0
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +35 -16
- package/dist/internal/sdk-runner.d.ts +2 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +10 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +11 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +9 -5
- package/dist/types.d.ts +29 -3
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +49 -16
- package/docs/guides/github.md +34 -0
- package/docs/guides/jev.md +7 -0
- package/docs/guides/slack.md +5 -0
- package/docs/quickstart.md +7 -1
- package/docs/reference/agent-config.md +1 -1
- package/docs/reference/artifacts.md +1 -1
- package/docs/reference/cli.md +65 -63
- package/docs/reference/connections.md +28 -2
- package/docs/reference/evals.md +6 -7
- package/docs/reference/extensions.md +13 -0
- package/docs/troubleshooting.md +7 -3
- package/package.json +1 -11
- package/scripts/install-cursor-skills.mjs +1 -1
- package/skills/create-agent/SKILL.md +1 -1
- package/skills/debug/SKILL.md +1 -1
- package/skills/deploy/SKILL.md +1 -1
- package/skills/evals/SKILL.md +1 -1
- package/skills/framework-map/SKILL.md +1 -1
- package/skills/github/SKILL.md +1 -1
- package/skills/hillclimb/SKILL.md +1 -1
- package/skills/mcp-auth/SKILL.md +1 -1
- package/skills/otel/SKILL.md +1 -1
- package/skills/setup-slack/SKILL.md +1 -1
- package/templates/agents-md/bot/lib/collect.ts +1 -4
- package/templates/code-wiki/bot/channels/github.ts +2 -2
- package/templates/demo/bot/channels/github.ts +5 -1
- package/templates/pr-autofixer/bot/lib/start-drive.ts +4 -4
- package/templates/triage/bot/lib/types.ts +6 -6
- package/dist/docs/assets/chunks/@localSearchIndexroot.BgTA2tV1.js +0 -1
- package/dist/docs/assets/chunks/channel.B2nMEx82.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D8iCH2ve.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D8iCH2ve.js +0 -1
- package/dist/docs/assets/chunks/clone.5XNLjby0.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.yGM2uLZQ.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.DKfyIejL.js +0 -162
- package/dist/docs/assets/reference_cli.md.BK2QUH67.js +0 -97
- package/dist/docs/assets/reference_cli.md.BK2QUH67.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BzZSu1Gz.js +0 -1
- package/src/artifacts.ts +0 -68
- package/src/bin/agent-serve.ts +0 -1833
- package/src/channels/bitbucket/api.ts +0 -891
- package/src/channels/bitbucket/binding.ts +0 -417
- package/src/channels/bitbucket/bitbucket-channel.ts +0 -162
- package/src/channels/bitbucket/bitbucket-webhook.ts +0 -519
- package/src/channels/bitbucket/checks.ts +0 -146
- package/src/channels/bitbucket/cursor-account.ts +0 -106
- package/src/channels/bitbucket/defaults.ts +0 -100
- package/src/channels/bitbucket/events.ts +0 -74
- package/src/channels/bitbucket/index.ts +0 -51
- package/src/channels/bitbucket/replay.ts +0 -421
- package/src/channels/bitbucket/state.ts +0 -59
- package/src/channels/bitbucket/types.ts +0 -261
- package/src/channels/change-monitors/change-monitors-channel.ts +0 -63
- package/src/channels/change-monitors/index.ts +0 -8
- package/src/channels/change-monitors/types.ts +0 -42
- package/src/channels/checks.ts +0 -185
- package/src/channels/deployments/deployments-channel.ts +0 -224
- package/src/channels/deployments/index.ts +0 -25
- package/src/channels/deployments/types.ts +0 -92
- package/src/channels/github/api.ts +0 -526
- package/src/channels/github/auth.ts +0 -254
- package/src/channels/github/binding.ts +0 -233
- package/src/channels/github/checks.ts +0 -145
- package/src/channels/github/cursor-account.ts +0 -303
- package/src/channels/github/defaults.ts +0 -168
- package/src/channels/github/events.ts +0 -67
- package/src/channels/github/forward.ts +0 -359
- package/src/channels/github/github-channel.ts +0 -2334
- package/src/channels/github/index.ts +0 -54
- package/src/channels/github/progress.ts +0 -365
- package/src/channels/github/replay.ts +0 -372
- package/src/channels/github/state.ts +0 -124
- package/src/channels/github/types.ts +0 -590
- package/src/channels/gitlab/api.ts +0 -329
- package/src/channels/gitlab/binding.ts +0 -231
- package/src/channels/gitlab/checks.ts +0 -228
- package/src/channels/gitlab/cursor-account.ts +0 -105
- package/src/channels/gitlab/defaults.ts +0 -80
- package/src/channels/gitlab/events.ts +0 -37
- package/src/channels/gitlab/gitlab-channel.ts +0 -160
- package/src/channels/gitlab/gitlab-webhook.ts +0 -509
- package/src/channels/gitlab/index.ts +0 -44
- package/src/channels/gitlab/replay.ts +0 -328
- package/src/channels/gitlab/state.ts +0 -55
- package/src/channels/gitlab/types.ts +0 -247
- package/src/channels/issues/index.ts +0 -9
- package/src/channels/issues/issues-channel.ts +0 -45
- package/src/channels/issues/types.ts +0 -38
- package/src/channels/origin/api.ts +0 -507
- package/src/channels/origin/binding.ts +0 -114
- package/src/channels/origin/checks.ts +0 -250
- package/src/channels/origin/cursor-account.ts +0 -58
- package/src/channels/origin/defaults.ts +0 -140
- package/src/channels/origin/events.ts +0 -35
- package/src/channels/origin/index.ts +0 -35
- package/src/channels/origin/origin-channel.ts +0 -815
- package/src/channels/origin/origin-webhook.ts +0 -296
- package/src/channels/origin/reactions.ts +0 -72
- package/src/channels/origin/state.ts +0 -54
- package/src/channels/origin/types.ts +0 -295
- package/src/channels/slack/agentic-delivery.ts +0 -634
- package/src/channels/slack/agentic-posted.ts +0 -135
- package/src/channels/slack/agentic-signals.ts +0 -231
- package/src/channels/slack/api.ts +0 -761
- package/src/channels/slack/approvals.ts +0 -279
- package/src/channels/slack/assistant.ts +0 -76
- package/src/channels/slack/attachments.ts +0 -596
- package/src/channels/slack/auth.ts +0 -127
- package/src/channels/slack/blocks.ts +0 -131
- package/src/channels/slack/bot-mentions.ts +0 -318
- package/src/channels/slack/channel-watch.ts +0 -314
- package/src/channels/slack/cli-project.ts +0 -249
- package/src/channels/slack/code-fences.ts +0 -171
- package/src/channels/slack/constants.ts +0 -38
- package/src/channels/slack/credentials.ts +0 -88
- package/src/channels/slack/defaults.ts +0 -714
- package/src/channels/slack/dispatch.ts +0 -1060
- package/src/channels/slack/doctor.ts +0 -338
- package/src/channels/slack/eval-directive.ts +0 -306
- package/src/channels/slack/event-id-dedupe.ts +0 -30
- package/src/channels/slack/external-policy.ts +0 -75
- package/src/channels/slack/footer.ts +0 -106
- package/src/channels/slack/inbound.ts +0 -416
- package/src/channels/slack/index.ts +0 -53
- package/src/channels/slack/init.ts +0 -169
- package/src/channels/slack/interactive.ts +0 -406
- package/src/channels/slack/links.ts +0 -23
- package/src/channels/slack/live-delivery.ts +0 -489
- package/src/channels/slack/log.ts +0 -70
- package/src/channels/slack/manifest.ts +0 -240
- package/src/channels/slack/message-body.ts +0 -82
- package/src/channels/slack/nudge-carrier.ts +0 -224
- package/src/channels/slack/nudge-store.ts +0 -334
- package/src/channels/slack/paint-start.ts +0 -93
- package/src/channels/slack/placeholder.ts +0 -358
- package/src/channels/slack/pr-ref.ts +0 -74
- package/src/channels/slack/progress-delivery.ts +0 -138
- package/src/channels/slack/reasoning-card.ts +0 -125
- package/src/channels/slack/reasoning-chip.ts +0 -41
- package/src/channels/slack/recording-sink.ts +0 -167
- package/src/channels/slack/redact.ts +0 -6
- package/src/channels/slack/reply-options.ts +0 -279
- package/src/channels/slack/setup.ts +0 -125
- package/src/channels/slack/slack-channel.ts +0 -744
- package/src/channels/slack/socket-mode.ts +0 -140
- package/src/channels/slack/stop.ts +0 -25
- package/src/channels/slack/stream.ts +0 -66
- package/src/channels/slack/thread-context.ts +0 -485
- package/src/channels/slack/tool-approval-events.ts +0 -233
- package/src/channels/slack/tool-cards.ts +0 -198
- package/src/channels/slack/tool-chip.ts +0 -34
- package/src/channels/slack/types.ts +0 -787
- package/src/channels/slack/upload.ts +0 -137
- package/src/channels.ts +0 -543
- package/src/connections.ts +0 -153
- package/src/dashboard-session-url.ts +0 -30
- package/src/evals/assertions.ts +0 -688
- package/src/evals/expect.ts +0 -250
- package/src/evals/judge.ts +0 -329
- package/src/evals/loaders.ts +0 -111
- package/src/evals/matchers.ts +0 -223
- package/src/evals/reporters.ts +0 -257
- package/src/evals/results.ts +0 -130
- package/src/evals/run-facts.ts +0 -306
- package/src/evals.ts +0 -709
- package/src/extensions/cursor-cloud-agents/extension.ts +0 -131
- package/src/extensions/cursor-cloud-agents/lib/backend.ts +0 -386
- package/src/extensions/cursor-cloud-agents/lib/channels.ts +0 -11
- package/src/extensions/cursor-cloud-agents/lib/fleet.ts +0 -98
- package/src/extensions/cursor-cloud-agents/lib/inputs.ts +0 -5
- package/src/extensions/cursor-cloud-agents/lib/repos.ts +0 -80
- package/src/extensions/cursor-cloud-agents/lib/transcript.ts +0 -19
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +0 -37
- package/src/extensions/cursor-cloud-agents/tools/cancel.ts +0 -21
- package/src/extensions/cursor-cloud-agents/tools/dump.ts +0 -47
- package/src/extensions/cursor-cloud-agents/tools/get.ts +0 -18
- package/src/extensions/cursor-cloud-agents/tools/launch.ts +0 -62
- package/src/extensions/cursor-cloud-agents/tools/list.ts +0 -31
- package/src/extensions/cursor-cloud-agents/tools/reply.ts +0 -36
- package/src/extensions/improve/extension.ts +0 -69
- package/src/extensions/improve/skills/yourself.ts +0 -50
- package/src/extensions/jev/extension.ts +0 -95
- package/src/extensions/jev/lib/evaluate.ts +0 -266
- package/src/extensions/jev/skills/gated-write.md +0 -25
- package/src/extensions/jev/skills/questions.md +0 -33
- package/src/extensions/jev/tools/evaluate.ts +0 -82
- package/src/extensions/slack-communication/evals/harness.ts +0 -705
- package/src/extensions/slack-communication/evals/slack-communication.eval.ts +0 -830
- package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +0 -172
- package/src/extensions/slack-communication/extension.ts +0 -44
- package/src/extensions/slack-communication/skills/slack-voice.ts +0 -56
- package/src/extensions/slack-communication/tools/delete-message.ts +0 -33
- package/src/extensions/slack-communication/tools/edit-message.ts +0 -42
- package/src/extensions/slack-communication/tools/post-card.ts +0 -28
- package/src/extensions/slack-communication/tools/post-file.ts +0 -82
- package/src/extensions/slack-communication/tools/post-update.ts +0 -40
- package/src/extensions/slack-communication/tools/react.ts +0 -30
- package/src/extensions/slack-communication/tools/set-status.ts +0 -21
- package/src/extensions.ts +0 -179
- package/src/files-backends/agent-store-presigned-url.ts +0 -11
- package/src/files-backends/cursor-hosted.ts +0 -1212
- package/src/files-backends/local-fs.ts +0 -163
- package/src/files.ts +0 -293
- package/src/filesystem.ts +0 -2005
- package/src/hooks.ts +0 -30
- package/src/index.ts +0 -259
- package/src/internal/advertise-tools.ts +0 -370
- package/src/internal/approval-gate.ts +0 -103
- package/src/internal/artifacts-store.ts +0 -836
- package/src/internal/as-of.ts +0 -257
- package/src/internal/auth.ts +0 -46
- package/src/internal/authored-alias-hooks.ts +0 -138
- package/src/internal/authored-loaders.ts +0 -188
- package/src/internal/bounded-int.ts +0 -24
- package/src/internal/bounded.ts +0 -25
- package/src/internal/brand.ts +0 -28
- package/src/internal/browser-origin-guard.ts +0 -67
- package/src/internal/builtin-tools/artifacts.ts +0 -62
- package/src/internal/builtin-tools/index.ts +0 -53
- package/src/internal/builtin-tools/reminders.ts +0 -145
- package/src/internal/channel-dispatch.ts +0 -129
- package/src/internal/channel-route-dispatch.ts +0 -58
- package/src/internal/channel-state.ts +0 -83
- package/src/internal/chat-client.ts +0 -594
- package/src/internal/cli-ax.ts +0 -2273
- package/src/internal/cli-bitbucket.ts +0 -438
- package/src/internal/cli-convert-automation.ts +0 -335
- package/src/internal/cli-cursor.ts +0 -282
- package/src/internal/cli-deploy.ts +0 -2486
- package/src/internal/cli-docs.ts +0 -192
- package/src/internal/cli-github.ts +0 -806
- package/src/internal/cli-gitlab.ts +0 -452
- package/src/internal/cli-images.ts +0 -672
- package/src/internal/cli-manifest.ts +0 -56
- package/src/internal/cli-mcp-oauth.ts +0 -395
- package/src/internal/cli-mcp.ts +0 -808
- package/src/internal/cli-skills.ts +0 -99
- package/src/internal/cli-slack-manual.ts +0 -418
- package/src/internal/cli-slack.ts +0 -874
- package/src/internal/cloud-merge.ts +0 -51
- package/src/internal/cloud-turn-cost.ts +0 -159
- package/src/internal/continuation-channel.ts +0 -233
- package/src/internal/continuation-identity.ts +0 -935
- package/src/internal/conversation-mirror.ts +0 -423
- package/src/internal/convert-automation/convert-workflow.ts +0 -1377
- package/src/internal/convert-automation/slug.ts +0 -29
- package/src/internal/convert-automation/types.ts +0 -212
- package/src/internal/cron.ts +0 -76
- package/src/internal/cursor/account-mcp.ts +0 -692
- package/src/internal/cursor/backend-client.ts +0 -978
- package/src/internal/cursor/bound-secret-file.ts +0 -101
- package/src/internal/cursor/credentials.ts +0 -560
- package/src/internal/cursor/cursor-api-transport.ts +0 -65
- package/src/internal/cursor/github-credentials.ts +0 -228
- package/src/internal/cursor/hosted-bound-secrets.ts +0 -71
- package/src/internal/cursor/hosted-deployment-secrets.ts +0 -100
- package/src/internal/cursor/hosted-store-secrets.ts +0 -152
- package/src/internal/cursor/session-token.ts +0 -111
- package/src/internal/cursor/store-api-client.ts +0 -323
- package/src/internal/cursor-account-mcp-auth.ts +0 -303
- package/src/internal/cursor-agent-template.ts +0 -50
- package/src/internal/cursor-deployment-relay.ts +0 -315
- package/src/internal/cursor-event-relay.ts +0 -675
- package/src/internal/cursor-relay-core.ts +0 -563
- package/src/internal/deferred-channel-session.ts +0 -61
- package/src/internal/deploy-client.ts +0 -1504
- package/src/internal/deploy-manifest.ts +0 -361
- package/src/internal/deploy-source.ts +0 -144
- package/src/internal/describe-error.ts +0 -32
- package/src/internal/dev-mode.ts +0 -20
- package/src/internal/discovery/agent-config.ts +0 -288
- package/src/internal/discovery/agent.ts +0 -381
- package/src/internal/discovery/channels.ts +0 -100
- package/src/internal/discovery/connections.ts +0 -505
- package/src/internal/discovery/context.ts +0 -38
- package/src/internal/discovery/cursor-plugin.ts +0 -628
- package/src/internal/discovery/extension-overlay.ts +0 -247
- package/src/internal/discovery/extensions.ts +0 -490
- package/src/internal/discovery/fs.ts +0 -103
- package/src/internal/discovery/hooks.ts +0 -63
- package/src/internal/discovery/info.ts +0 -174
- package/src/internal/discovery/instructions.ts +0 -98
- package/src/internal/discovery/modules.ts +0 -107
- package/src/internal/discovery/names.ts +0 -45
- package/src/internal/discovery/project.ts +0 -319
- package/src/internal/discovery/reminders.ts +0 -65
- package/src/internal/discovery/runtime.ts +0 -158
- package/src/internal/discovery/schedules.ts +0 -120
- package/src/internal/discovery/seed-files.ts +0 -34
- package/src/internal/discovery/services.ts +0 -151
- package/src/internal/discovery/skills.ts +0 -174
- package/src/internal/discovery/subagent.ts +0 -138
- package/src/internal/discovery/tools.ts +0 -170
- package/src/internal/discovery.ts +0 -27
- package/src/internal/distribution.ts +0 -126
- package/src/internal/docs-site.ts +0 -248
- package/src/internal/duration.ts +0 -37
- package/src/internal/env-file.ts +0 -83
- package/src/internal/eval-judge-model.ts +0 -142
- package/src/internal/eval-run-store.ts +0 -585
- package/src/internal/eval-runner.ts +0 -823
- package/src/internal/evals-client.ts +0 -475
- package/src/internal/event-log.ts +0 -342
- package/src/internal/event-mapper.ts +0 -811
- package/src/internal/expected-delivery-failure.ts +0 -34
- package/src/internal/factory-resource-channel.ts +0 -103
- package/src/internal/filesystem/errors.ts +0 -207
- package/src/internal/filesystem/format.ts +0 -253
- package/src/internal/filesystem/merge.ts +0 -192
- package/src/internal/filesystem/nearest.ts +0 -112
- package/src/internal/filesystem/scratch.ts +0 -239
- package/src/internal/filesystem/sdk-schemas.ts +0 -204
- package/src/internal/filesystem/tools.ts +0 -804
- package/src/internal/filesystem/walk.ts +0 -366
- package/src/internal/fixtures/units-server.ts +0 -52
- package/src/internal/framework-file-storage.ts +0 -357
- package/src/internal/framework-storage-selection.ts +0 -156
- package/src/internal/frontmatter.ts +0 -108
- package/src/internal/github-fanout.ts +0 -144
- package/src/internal/guest-network.ts +0 -391
- package/src/internal/handleAgentServeTrigger.ts +0 -286
- package/src/internal/host-files.ts +0 -341
- package/src/internal/host-kv.ts +0 -81
- package/src/internal/host-otel.ts +0 -231
- package/src/internal/host-platforms.ts +0 -170
- package/src/internal/hosted-admission-adapter.ts +0 -47
- package/src/internal/hosted-admission-context.ts +0 -37
- package/src/internal/hosted-catch-protocol.ts +0 -112
- package/src/internal/hosted-catch.ts +0 -179
- package/src/internal/hosted-delivery-protocol.ts +0 -787
- package/src/internal/hosted-delivery.ts +0 -1152
- package/src/internal/hosted-execution-diag.ts +0 -291
- package/src/internal/hosted-execution-flush.ts +0 -136
- package/src/internal/hosted-execution-latency.ts +0 -301
- package/src/internal/hosted-managed-automation.ts +0 -116
- package/src/internal/hosting.ts +0 -107
- package/src/internal/http-channel-define.ts +0 -25
- package/src/internal/http-channel.ts +0 -669
- package/src/internal/http-control-plane-session.ts +0 -110
- package/src/internal/ids.ts +0 -39
- package/src/internal/incoming-headers-to-fetch.ts +0 -45
- package/src/internal/init-interview.ts +0 -360
- package/src/internal/init-project.ts +0 -711
- package/src/internal/init-scaffold.ts +0 -182
- package/src/internal/inline-stdio-define-stub.ts +0 -4
- package/src/internal/inline-stdio-mcp.ts +0 -230
- package/src/internal/install-cursor-skills.ts +0 -601
- package/src/internal/is-record.ts +0 -3
- package/src/internal/json-schema.ts +0 -95
- package/src/internal/legacy-command-guard.ts +0 -54
- package/src/internal/listen-port.ts +0 -85
- package/src/internal/local-control-plane.ts +0 -442
- package/src/internal/local-env.ts +0 -59
- package/src/internal/local-ingress.ts +0 -90
- package/src/internal/log-ring.ts +0 -59
- package/src/internal/logs-client.ts +0 -477
- package/src/internal/map-pool.ts +0 -39
- package/src/internal/mcp-endpoint.ts +0 -747
- package/src/internal/mcp-host.ts +0 -481
- package/src/internal/mcp-oauth-on-demand.ts +0 -337
- package/src/internal/mcp-oauth-persist.ts +0 -118
- package/src/internal/mcp-oauth.ts +0 -549
- package/src/internal/net.ts +0 -29
- package/src/internal/open-browser.ts +0 -41
- package/src/internal/otel/attrs.ts +0 -16
- package/src/internal/otel/collector.ts +0 -937
- package/src/internal/otel/config.ts +0 -287
- package/src/internal/otel/http.ts +0 -122
- package/src/internal/otel/mcp.ts +0 -56
- package/src/internal/otel/propagation.ts +0 -17
- package/src/internal/otel/runtime.ts +0 -441
- package/src/internal/package-inline-stdio.ts +0 -114
- package/src/internal/peer-connections.ts +0 -96
- package/src/internal/platform-schedule-sync.ts +0 -75
- package/src/internal/platform-timers.ts +0 -365
- package/src/internal/playground/static.ts +0 -278
- package/src/internal/playground/toolchain.ts +0 -270
- package/src/internal/playground-proxy.ts +0 -564
- package/src/internal/process-memory-telemetry.ts +0 -334
- package/src/internal/project-layout.ts +0 -31
- package/src/internal/prompt-context.ts +0 -116
- package/src/internal/reminder-control-plane-protocol.ts +0 -482
- package/src/internal/reminder-runner.ts +0 -1559
- package/src/internal/reminder-schedule.ts +0 -104
- package/src/internal/reminder-store.ts +0 -176
- package/src/internal/request-error-status.ts +0 -95
- package/src/internal/request-headers.ts +0 -21
- package/src/internal/resolve-prod-target.ts +0 -334
- package/src/internal/resolved-connections.ts +0 -190
- package/src/internal/router.ts +0 -143
- package/src/internal/run-client.ts +0 -354
- package/src/internal/runtime-dispatch-runner.ts +0 -50
- package/src/internal/sanitize-mcp-tool-name.ts +0 -31
- package/src/internal/schedule-runner.ts +0 -154
- package/src/internal/scm/pr-url.ts +0 -245
- package/src/internal/sdk-runner.ts +0 -948
- package/src/internal/serve-restart.ts +0 -113
- package/src/internal/server.ts +0 -3135
- package/src/internal/session-cost.ts +0 -208
- package/src/internal/session-engine.ts +0 -5618
- package/src/internal/session-links.ts +0 -84
- package/src/internal/session-run-log.ts +0 -535
- package/src/internal/session-store.ts +0 -307
- package/src/internal/session-urls.ts +0 -32
- package/src/internal/sessions-client.ts +0 -239
- package/src/internal/skill-catalog.ts +0 -66
- package/src/internal/skills-sync.ts +0 -55
- package/src/internal/slack-provision-client.ts +0 -544
- package/src/internal/slack-thread-key.ts +0 -11
- package/src/internal/sleep.ts +0 -3
- package/src/internal/start-log-store.ts +0 -164
- package/src/internal/steering.ts +0 -17
- package/src/internal/storage-coordinator.ts +0 -800
- package/src/internal/storage-roles.ts +0 -86
- package/src/internal/storage.ts +0 -1
- package/src/internal/store-api-protocol.ts +0 -205
- package/src/internal/store-mirror.ts +0 -73
- package/src/internal/stream-progress.ts +0 -294
- package/src/internal/terminal-style.ts +0 -133
- package/src/internal/testing/factory-resource-fixtures.ts +0 -84
- package/src/internal/testing/scm-continuation-fixtures.ts +0 -285
- package/src/internal/tool-catalog.ts +0 -104
- package/src/internal/tool-policy.ts +0 -222
- package/src/internal/tool-result.ts +0 -50
- package/src/internal/trajectory.ts +0 -418
- package/src/internal/turn-cost.ts +0 -136
- package/src/internal/turn-governor.ts +0 -145
- package/src/internal/turn-lease-store.ts +0 -144
- package/src/internal/turn-outbox.ts +0 -77
- package/src/internal/update-check.ts +0 -517
- package/src/internal/v2-hosting.ts +0 -52
- package/src/internal/workspace-sync.ts +0 -114
- package/src/internal/workspace.ts +0 -505
- package/src/kv/memory-kv.ts +0 -94
- package/src/kv.ts +0 -18
- package/src/memory.ts +0 -487
- package/src/otel-public.ts +0 -24
- package/src/otel.ts +0 -320
- package/src/prompt.ts +0 -80
- package/src/reminders.ts +0 -65
- package/src/schedules.ts +0 -31
- package/src/skills.ts +0 -27
- package/src/storage-backends/cursor-hosted-v2.ts +0 -204
- package/src/storage-backends/cursor-hosted.ts +0 -388
- package/src/storage-backends/file-kv.ts +0 -276
- package/src/storage-protocol.ts +0 -261
- package/src/storage.ts +0 -408
- package/src/tools.ts +0 -166
- package/src/types.ts +0 -3766
- /package/dist/docs/assets/{reference_agent-config.md.DzGI777n.lean.js → reference_agent-config.md.Cj5uBKp4.lean.js} +0 -0
- /package/dist/docs/assets/{reference_artifacts.md.CFMNPreZ.lean.js → reference_artifacts.md.CQfKq8F2.lean.js} +0 -0
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dollar cost for an agent turn, computed by the Cloud Agents
|
|
3
|
-
* `POST /v1/models/estimate-cost` endpoint (billed usage events when an
|
|
4
|
-
* agent/conversation id is known, otherwise live catalog pricing).
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { ModelSetting, TurnCost, TurnUsage } from "../types.js";
|
|
8
|
-
import { cursorExternalApiUrl, resolveApiKey } from "./cursor/credentials.js";
|
|
9
|
-
|
|
10
|
-
export interface UsageCostCents {
|
|
11
|
-
rawCostCents: number;
|
|
12
|
-
chargedCents: number;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface EstimateTurnCostInput {
|
|
16
|
-
model: ModelSetting;
|
|
17
|
-
usage?: TurnUsage;
|
|
18
|
-
agentId?: string;
|
|
19
|
-
conversationId?: string;
|
|
20
|
-
runId?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export type EstimateTurnCostFn = (input: EstimateTurnCostInput) => Promise<TurnCost | undefined>;
|
|
24
|
-
|
|
25
|
-
export function modelSettingId(model: ModelSetting): string {
|
|
26
|
-
return typeof model === "string" ? model : model.id;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* This estimate-cost client treats OpenAI-compat usage as **provider-gross**
|
|
31
|
-
* (local playground: `prompt_tokens` includes `cachedPromptTokens`). Catalog
|
|
32
|
-
* `costForBaseTier` assumes Anthropic / billing-style disjoint nets and ADDs
|
|
33
|
-
* `cacheRead × cachedRate` on top of `input × inputRate`, so we send
|
|
34
|
-
* `input − cache` for Grok / xAI / GPT / o-series.
|
|
35
|
-
*
|
|
36
|
-
* Non-OpenAI-compat models are left alone. `input < cache` is only a
|
|
37
|
-
* defensive clamp (avoid a negative uncached count), not a detector for
|
|
38
|
-
* billed / openaiProxy-shaped tokens. Cloud catalog fallback with already-
|
|
39
|
-
* netted OpenAI-compat usage is out of scope here.
|
|
40
|
-
*/
|
|
41
|
-
export function isOpenAiCompatGrossCacheModel(model: ModelSetting): boolean {
|
|
42
|
-
const id = modelSettingId(model).toLowerCase();
|
|
43
|
-
return (
|
|
44
|
-
id.includes("grok") || id.includes("xai") || id.includes("gpt") || /(^|[-_/])o[1-9]/.test(id)
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function toCatalogDisjointUsage(usage: TurnUsage, model?: ModelSetting): TurnUsage {
|
|
49
|
-
if (model === undefined || !isOpenAiCompatGrossCacheModel(model)) {
|
|
50
|
-
return usage;
|
|
51
|
-
}
|
|
52
|
-
const cachedTokens = usage.cacheReadTokens + usage.cacheWriteTokens;
|
|
53
|
-
if (cachedTokens === 0 || usage.inputTokens < cachedTokens) {
|
|
54
|
-
return usage;
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
...usage,
|
|
58
|
-
inputTokens: usage.inputTokens - cachedTokens,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export function roundCostUsd(usd: number): number {
|
|
63
|
-
return Math.round(usd * 1e6) / 1e6;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export function turnCostFromCents(args: {
|
|
67
|
-
model: string | ModelSetting;
|
|
68
|
-
cost: UsageCostCents;
|
|
69
|
-
source: TurnCost["source"];
|
|
70
|
-
}): TurnCost {
|
|
71
|
-
const totalUsd = roundCostUsd(args.cost.chargedCents / 100);
|
|
72
|
-
const model = typeof args.model === "string" ? args.model : modelSettingId(args.model);
|
|
73
|
-
return {
|
|
74
|
-
totalUsd,
|
|
75
|
-
inputUsd: 0,
|
|
76
|
-
outputUsd: 0,
|
|
77
|
-
cacheReadUsd: 0,
|
|
78
|
-
cacheWriteUsd: 0,
|
|
79
|
-
model,
|
|
80
|
-
source: args.source,
|
|
81
|
-
rawCostCents: args.cost.rawCostCents,
|
|
82
|
-
chargedCents: args.cost.chargedCents,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
interface EstimateCostApiResponse {
|
|
87
|
-
model?: string;
|
|
88
|
-
cost?: UsageCostCents;
|
|
89
|
-
source?: "usage" | "catalog";
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export async function estimateTurnCostFromApi(
|
|
93
|
-
input: EstimateTurnCostInput,
|
|
94
|
-
): Promise<TurnCost | undefined> {
|
|
95
|
-
const resolved = await resolveApiKey();
|
|
96
|
-
if (resolved === undefined) {
|
|
97
|
-
return undefined;
|
|
98
|
-
}
|
|
99
|
-
const model = modelSettingId(input.model);
|
|
100
|
-
const catalogUsage =
|
|
101
|
-
input.usage === undefined ? undefined : toCatalogDisjointUsage(input.usage, input.model);
|
|
102
|
-
const response = await fetch(`${cursorExternalApiUrl()}/v1/models/estimate-cost`, {
|
|
103
|
-
method: "POST",
|
|
104
|
-
headers: {
|
|
105
|
-
authorization: `Bearer ${resolved.apiKey}`,
|
|
106
|
-
"content-type": "application/json",
|
|
107
|
-
},
|
|
108
|
-
body: JSON.stringify({
|
|
109
|
-
model,
|
|
110
|
-
inputTokens: catalogUsage?.inputTokens,
|
|
111
|
-
outputTokens: catalogUsage?.outputTokens,
|
|
112
|
-
cacheReadTokens: catalogUsage?.cacheReadTokens,
|
|
113
|
-
cacheWriteTokens: catalogUsage?.cacheWriteTokens,
|
|
114
|
-
agentId: input.agentId,
|
|
115
|
-
conversationId: input.conversationId,
|
|
116
|
-
runId: input.runId,
|
|
117
|
-
}),
|
|
118
|
-
});
|
|
119
|
-
if (!response.ok) {
|
|
120
|
-
return undefined;
|
|
121
|
-
}
|
|
122
|
-
let body: EstimateCostApiResponse;
|
|
123
|
-
try {
|
|
124
|
-
body = (await response.json()) as EstimateCostApiResponse;
|
|
125
|
-
} catch {
|
|
126
|
-
return undefined;
|
|
127
|
-
}
|
|
128
|
-
if (typeof body.cost?.rawCostCents !== "number" || typeof body.cost.chargedCents !== "number") {
|
|
129
|
-
return undefined;
|
|
130
|
-
}
|
|
131
|
-
return turnCostFromCents({
|
|
132
|
-
model: body.model ?? model,
|
|
133
|
-
cost: body.cost,
|
|
134
|
-
source: body.source === "usage" ? "usage" : "catalog",
|
|
135
|
-
});
|
|
136
|
-
}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FIFO admission of model turns under `concurrency.maxRunningTurns`
|
|
3
|
-
* (see {@link AgentConcurrencyOptions}). One governor per session engine:
|
|
4
|
-
* every turn acquires a slot before its SDK run starts and releases it when
|
|
5
|
-
* the run settles, so at most `maxRunningTurns` turns execute at once and
|
|
6
|
-
* the rest wait in arrival order instead of failing.
|
|
7
|
-
*
|
|
8
|
-
* Waiting is cancellable: the engine passes the turn's abort signal, so a
|
|
9
|
-
* follow-up that preempts a queued turn (or an explicit `interrupt()`)
|
|
10
|
-
* removes the waiter without ever running it.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import type { AgentConcurrencyOptions } from "../types.js";
|
|
14
|
-
|
|
15
|
-
export interface TurnPermit {
|
|
16
|
-
/** Return the slot. Idempotent; wakes the oldest waiter, if any. */
|
|
17
|
-
release(): void;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface AcquireTurnSlotArgs {
|
|
21
|
-
sessionId: string;
|
|
22
|
-
/** Abort waiting (preemption / interrupt). Ignored once a slot is held. */
|
|
23
|
-
signal?: AbortSignal;
|
|
24
|
-
/**
|
|
25
|
-
* Called synchronously when the turn must wait, with its 1-based
|
|
26
|
-
* position among waiting turns at enqueue time.
|
|
27
|
-
*/
|
|
28
|
-
onQueued?: (position: number) => void;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
interface TurnWaiter {
|
|
32
|
-
sessionId: string;
|
|
33
|
-
grant: (permit: TurnPermit) => void;
|
|
34
|
-
cancel: () => void;
|
|
35
|
-
cleanup: () => void;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export class TurnGovernor {
|
|
39
|
-
/** The configured ceiling, or undefined for unlimited. */
|
|
40
|
-
readonly maxRunningTurns: number | undefined;
|
|
41
|
-
private running = 0;
|
|
42
|
-
private readonly waiters: TurnWaiter[] = [];
|
|
43
|
-
/** Sessions currently waiting for a slot (at most one turn per session). */
|
|
44
|
-
private readonly queuedSessions = new Set<string>();
|
|
45
|
-
|
|
46
|
-
constructor(concurrency: AgentConcurrencyOptions | undefined) {
|
|
47
|
-
this.maxRunningTurns = concurrency?.maxRunningTurns;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/** True when a `maxRunningTurns` ceiling is configured. */
|
|
51
|
-
get limited(): boolean {
|
|
52
|
-
return this.maxRunningTurns !== undefined;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/** True while `sessionId` has a turn waiting for a slot. */
|
|
56
|
-
isQueued(sessionId: string): boolean {
|
|
57
|
-
return this.queuedSessions.has(sessionId);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/** Turns currently waiting for a slot. */
|
|
61
|
-
get queuedCount(): number {
|
|
62
|
-
return this.waiters.length;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/** Turns currently holding a slot. */
|
|
66
|
-
get runningCount(): number {
|
|
67
|
-
return this.running;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Acquire a turn slot. Resolves with a permit once a slot is free (FIFO
|
|
72
|
-
* behind earlier waiters), or with `undefined` when the abort signal
|
|
73
|
-
* fires while waiting — the turn must then settle as cancelled without
|
|
74
|
-
* running. Unlimited governors grant immediately.
|
|
75
|
-
*/
|
|
76
|
-
acquire(args: AcquireTurnSlotArgs): Promise<TurnPermit | undefined> {
|
|
77
|
-
const limit = this.maxRunningTurns;
|
|
78
|
-
if (limit === undefined) {
|
|
79
|
-
return Promise.resolve(NO_OP_PERMIT);
|
|
80
|
-
}
|
|
81
|
-
if (this.running < limit && this.waiters.length === 0) {
|
|
82
|
-
return Promise.resolve(this.grantSlot());
|
|
83
|
-
}
|
|
84
|
-
// Saturated. A turn that is already preempted never enqueues.
|
|
85
|
-
if (args.signal?.aborted === true) {
|
|
86
|
-
return Promise.resolve(undefined);
|
|
87
|
-
}
|
|
88
|
-
return new Promise<TurnPermit | undefined>(resolve => {
|
|
89
|
-
const waiter: TurnWaiter = {
|
|
90
|
-
sessionId: args.sessionId,
|
|
91
|
-
grant: permit => resolve(permit),
|
|
92
|
-
cancel: () => resolve(undefined),
|
|
93
|
-
cleanup: () => {
|
|
94
|
-
this.queuedSessions.delete(args.sessionId);
|
|
95
|
-
args.signal?.removeEventListener("abort", onAbort);
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
const onAbort = (): void => {
|
|
99
|
-
const index = this.waiters.indexOf(waiter);
|
|
100
|
-
if (index === -1) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
this.waiters.splice(index, 1);
|
|
104
|
-
waiter.cleanup();
|
|
105
|
-
waiter.cancel();
|
|
106
|
-
};
|
|
107
|
-
this.waiters.push(waiter);
|
|
108
|
-
this.queuedSessions.add(args.sessionId);
|
|
109
|
-
args.signal?.addEventListener("abort", onAbort, { once: true });
|
|
110
|
-
args.onQueued?.(this.waiters.length);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/** Take a slot and build its (idempotent) release handle. */
|
|
115
|
-
private grantSlot(): TurnPermit {
|
|
116
|
-
this.running += 1;
|
|
117
|
-
let released = false;
|
|
118
|
-
return {
|
|
119
|
-
release: () => {
|
|
120
|
-
if (released) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
released = true;
|
|
124
|
-
this.running -= 1;
|
|
125
|
-
this.wakeNextWaiter();
|
|
126
|
-
},
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
private wakeNextWaiter(): void {
|
|
131
|
-
const limit = this.maxRunningTurns;
|
|
132
|
-
if (limit === undefined || this.running >= limit) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
const waiter = this.waiters.shift();
|
|
136
|
-
if (waiter === undefined) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
waiter.cleanup();
|
|
140
|
-
waiter.grant(this.grantSlot());
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/** Permit handed out by unlimited governors. */
|
|
145
|
-
const NO_OP_PERMIT: TurnPermit = { release: () => {} };
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Durable per-session turn ownership: `activeTurns` is in-memory, so servers
|
|
3
|
-
* sharing a state root would otherwise both run the same session.
|
|
4
|
-
*
|
|
5
|
-
* Exclusion, staleness and liveness refresh come from `proper-lockfile`, which
|
|
6
|
-
* the monorepo already uses for the git cache. Hand-rolling them means
|
|
7
|
-
* inferring that a process died — timeouts, heartbeats, and a takeover path
|
|
8
|
-
* that has to stay atomic while removing another owner's claim. That is where
|
|
9
|
-
* the subtle races live, and none of it is specific to turns.
|
|
10
|
-
*
|
|
11
|
-
* Liveness is lock age, not pid: containers have separate PID namespaces.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { mkdir } from "node:fs/promises";
|
|
15
|
-
import { join } from "node:path";
|
|
16
|
-
import * as lockfile from "proper-lockfile";
|
|
17
|
-
|
|
18
|
-
/** A held turn lease. Releasing is idempotent. */
|
|
19
|
-
export interface TurnLease {
|
|
20
|
-
release(): Promise<void>;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Reject path traversal; session ids are opaque strings from the caller. */
|
|
24
|
-
function safeKey(sessionId: string): string {
|
|
25
|
-
const sanitized = sessionId
|
|
26
|
-
.trim()
|
|
27
|
-
.replace(/[^a-zA-Z0-9._-]+/g, "_")
|
|
28
|
-
.replace(/^\.+/, "")
|
|
29
|
-
.replace(/\.+/g, "_")
|
|
30
|
-
.slice(0, 180);
|
|
31
|
-
return sanitized === "" ? "_empty" : sanitized;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
interface HeldLock {
|
|
35
|
-
release: () => Promise<void>;
|
|
36
|
-
/** The coalesce drain nests turns, so the same session is acquired twice. */
|
|
37
|
-
refs: number;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export class TurnLeaseStore {
|
|
41
|
-
private readonly dir: string;
|
|
42
|
-
private readonly staleMs: number;
|
|
43
|
-
/** Locks this process holds. Their release closures cannot live on disk. */
|
|
44
|
-
private readonly held = new Map<string, HeldLock>();
|
|
45
|
-
|
|
46
|
-
constructor(dir: string, options: { ttlMs?: number } = {}) {
|
|
47
|
-
this.dir = dir;
|
|
48
|
-
// Several refreshes, so a slow owner is not mistaken for a dead one.
|
|
49
|
-
this.staleMs = options.ttlMs ?? 30_000;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
private path(sessionId: string): string {
|
|
53
|
-
return join(this.dir, `${safeKey(sessionId)}.lease`);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Undefined when another process holds this session and is still refreshing.
|
|
58
|
-
*
|
|
59
|
-
* `onCompromised` fires when the lock is lost mid-turn — the owner stalled
|
|
60
|
-
* past the stale window and a successor took over. No lease scheme can stop
|
|
61
|
-
* that; the callback is how the displaced turn learns to stand down instead
|
|
62
|
-
* of answering alongside its successor.
|
|
63
|
-
*/
|
|
64
|
-
async acquire(sessionId: string, onCompromised?: () => void): Promise<TurnLease | undefined> {
|
|
65
|
-
const existing = this.held.get(sessionId);
|
|
66
|
-
if (existing !== undefined) {
|
|
67
|
-
existing.refs += 1;
|
|
68
|
-
return this.handle(sessionId);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
await mkdir(this.dir, { recursive: true });
|
|
72
|
-
let release: () => Promise<void>;
|
|
73
|
-
try {
|
|
74
|
-
release = await lockfile.lock(this.path(sessionId), {
|
|
75
|
-
realpath: false,
|
|
76
|
-
retries: 0,
|
|
77
|
-
stale: this.staleMs,
|
|
78
|
-
// How often the library refreshes the lock's mtime while we hold it.
|
|
79
|
-
update: 5_000,
|
|
80
|
-
onCompromised: () => {
|
|
81
|
-
this.held.delete(sessionId);
|
|
82
|
-
onCompromised?.();
|
|
83
|
-
},
|
|
84
|
-
});
|
|
85
|
-
} catch {
|
|
86
|
-
// Held elsewhere, or the store is unusable. Either way this process must
|
|
87
|
-
// not run the turn: coalescing costs latency, two servers on one session
|
|
88
|
-
// costs the conversation.
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
this.held.set(sessionId, { release, refs: 1 });
|
|
92
|
-
return this.handle(sessionId);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
private handle(sessionId: string): TurnLease {
|
|
96
|
-
let released = false;
|
|
97
|
-
return {
|
|
98
|
-
release: async () => {
|
|
99
|
-
if (released) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
released = true;
|
|
103
|
-
const lock = this.held.get(sessionId);
|
|
104
|
-
if (lock === undefined) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
lock.refs -= 1;
|
|
108
|
-
if (lock.refs > 0) {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
this.held.delete(sessionId);
|
|
112
|
-
// Throws if the lock was already compromised, which is not our problem
|
|
113
|
-
// to solve here: the successor owns it.
|
|
114
|
-
await lock.release().catch(() => {});
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/** Graceful shutdown: drop every claim so a successor need not wait it out. */
|
|
120
|
-
async releaseAll(): Promise<void> {
|
|
121
|
-
for (const [sessionId, lock] of [...this.held]) {
|
|
122
|
-
this.held.delete(sessionId);
|
|
123
|
-
await lock.release().catch(() => {});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* The session is running in another server process. Mirrors the engine's
|
|
129
|
-
* in-memory `isTurnRunning`, which only ever sees this process.
|
|
130
|
-
*/
|
|
131
|
-
async runningElsewhere(sessionId: string): Promise<boolean> {
|
|
132
|
-
if (this.held.has(sessionId)) {
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
try {
|
|
136
|
-
return await lockfile.check(this.path(sessionId), {
|
|
137
|
-
realpath: false,
|
|
138
|
-
stale: this.staleMs,
|
|
139
|
-
});
|
|
140
|
-
} catch {
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hand-off of a message to the server that holds the session's turn lease.
|
|
3
|
-
*
|
|
4
|
-
* Blue/green replicas share a state root but not a process, and only the
|
|
5
|
-
* lease holder can admit a message to its running turn. A server that
|
|
6
|
-
* receives a message for a turn it does not own drops it here, under
|
|
7
|
-
* `<stateRoot>/outbox/<sessionId>`; the holder takes everything out while its
|
|
8
|
-
* turn runs and once more after releasing the lease. Local messages never
|
|
9
|
-
* touch this.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { randomUUID } from "node:crypto";
|
|
13
|
-
import { mkdir, readdir, readFile, rename, rm, unlink, writeFile } from "node:fs/promises";
|
|
14
|
-
import { join } from "node:path";
|
|
15
|
-
|
|
16
|
-
export interface OutboxItem<T> {
|
|
17
|
-
message: string;
|
|
18
|
-
options: T;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function safeKey(sessionId: string): string {
|
|
22
|
-
const sanitized = sessionId
|
|
23
|
-
.trim()
|
|
24
|
-
.replace(/[^a-zA-Z0-9._-]+/g, "_")
|
|
25
|
-
.replace(/^\.+/, "")
|
|
26
|
-
.replace(/\.+/g, "_")
|
|
27
|
-
.slice(0, 180);
|
|
28
|
-
return sanitized === "" ? "_empty" : sanitized;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export class TurnOutbox<T> {
|
|
32
|
-
private readonly rootDir: string;
|
|
33
|
-
|
|
34
|
-
constructor(rootDir: string) {
|
|
35
|
-
this.rootDir = rootDir;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
private dir(sessionId: string): string {
|
|
39
|
-
return join(this.rootDir, safeKey(sessionId));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
async post(sessionId: string, item: OutboxItem<T>): Promise<void> {
|
|
43
|
-
const dir = this.dir(sessionId);
|
|
44
|
-
await mkdir(dir, { recursive: true });
|
|
45
|
-
// Timestamp first so a listing sorts in arrival order.
|
|
46
|
-
const path = join(dir, `${Date.now()}-${randomUUID()}.json`);
|
|
47
|
-
await writeFile(`${path}.tmp`, `${JSON.stringify(item)}\n`, "utf8");
|
|
48
|
-
await rename(`${path}.tmp`, path);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** Remove and return everything posted, in arrival order. */
|
|
52
|
-
async takeAll(sessionId: string): Promise<OutboxItem<T>[]> {
|
|
53
|
-
const dir = this.dir(sessionId);
|
|
54
|
-
let names: string[];
|
|
55
|
-
try {
|
|
56
|
-
names = await readdir(dir);
|
|
57
|
-
} catch {
|
|
58
|
-
return [];
|
|
59
|
-
}
|
|
60
|
-
const items: OutboxItem<T>[] = [];
|
|
61
|
-
for (const name of names.filter(n => n.endsWith(".json")).sort()) {
|
|
62
|
-
const path = join(dir, name);
|
|
63
|
-
try {
|
|
64
|
-
const raw = await readFile(path, "utf8");
|
|
65
|
-
await unlink(path);
|
|
66
|
-
items.push(JSON.parse(raw) as OutboxItem<T>);
|
|
67
|
-
} catch {
|
|
68
|
-
// Taken by the holder between readdir and here.
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return items;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
async clear(sessionId: string): Promise<void> {
|
|
75
|
-
await rm(this.dir(sessionId), { recursive: true, force: true });
|
|
76
|
-
}
|
|
77
|
-
}
|