@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,505 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session workspace materialization. Each session gets its own working
|
|
3
|
-
* directory that the Cursor harness treats as the project: skills land in
|
|
4
|
-
* `.cursor/skills/<name>/SKILL.md`, agent-side tools land in
|
|
5
|
-
* `.agent-serve/tools/<name>.sh`, and `agent/sandbox/workspace/**` seed files
|
|
6
|
-
* are mirrored in. The harness picks all of this up natively through its
|
|
7
|
-
* project setting source. Instructions are not written here: local turns
|
|
8
|
-
* deliver them as the harness system prompt ({@link buildAgentsMdContent}),
|
|
9
|
-
* and cloud / grokbot harnesses never read the session workspace.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { execFile } from "node:child_process";
|
|
13
|
-
import {
|
|
14
|
-
chmod,
|
|
15
|
-
copyFile,
|
|
16
|
-
lstat,
|
|
17
|
-
mkdir,
|
|
18
|
-
readlink,
|
|
19
|
-
rm,
|
|
20
|
-
stat,
|
|
21
|
-
symlink,
|
|
22
|
-
writeFile,
|
|
23
|
-
} from "node:fs/promises";
|
|
24
|
-
import { homedir } from "node:os";
|
|
25
|
-
import { dirname, join, parse, relative, resolve, sep } from "node:path";
|
|
26
|
-
import { promisify } from "node:util";
|
|
27
|
-
import { agentStoreKeys, DEPLOYMENT_STORE_MOUNT_PATH } from "../files.js";
|
|
28
|
-
import { MEMORY_DIR_NAME } from "../memory.js";
|
|
29
|
-
import type { DiscoveredSkill, DiscoveredTool, ResolvedAgent } from "../types.js";
|
|
30
|
-
import { parseFrontmatter, serializeFrontmatter } from "./frontmatter.js";
|
|
31
|
-
import { buildIdentitySection } from "./prompt-context.js";
|
|
32
|
-
|
|
33
|
-
const execFileAsync = promisify(execFile);
|
|
34
|
-
|
|
35
|
-
export interface MaterializeWorkspaceOptions {
|
|
36
|
-
agent: ResolvedAgent;
|
|
37
|
-
workspaceDir: string;
|
|
38
|
-
/**
|
|
39
|
-
* When true (first turn), seed files are copied in. Instructions and
|
|
40
|
-
* skills are always rewritten so authored edits show up on the next turn.
|
|
41
|
-
*/
|
|
42
|
-
seed: boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Agent state root. `<stateRoot>/memory/` (the durable cross-session
|
|
45
|
-
* directory the memory hook journals into — on hosting a local mirror of
|
|
46
|
-
* the Agent Store journal) is created and symlinked into the workspace as
|
|
47
|
-
* `memory` so the agent reads it with plain file tools. Cloud VMs have no
|
|
48
|
-
* materialized workspace; they read the store mount directly (see
|
|
49
|
-
* {@link buildCloudMemorySection}).
|
|
50
|
-
*/
|
|
51
|
-
stateRoot: string;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* First-turn preamble section for cloud-runtime sessions on hosted
|
|
56
|
-
* deployments: cloud VMs read the memory journal from the store mount.
|
|
57
|
-
*/
|
|
58
|
-
export function buildCloudMemorySection(agentName: string): string {
|
|
59
|
-
const dir = `${DEPLOYMENT_STORE_MOUNT_PATH}/${agentStoreKeys.memoryDir(agentName)}`;
|
|
60
|
-
return [
|
|
61
|
-
"## Shared session memory",
|
|
62
|
-
"",
|
|
63
|
-
`The cross-session memory journal (the \`memory/\` directory your instructions may reference) lives at \`${dir}\` on this machine — read \`${dir}/journal.jsonl\` with your normal file tools.`,
|
|
64
|
-
].join("\n");
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* First-turn preamble section for cloud-runtime sessions with authored
|
|
69
|
-
* `agent/sandbox/workspace/**` seeds. Cloud VMs get no materialized
|
|
70
|
-
* workspace; the seeds are synced onto the store mount instead (see
|
|
71
|
-
* `syncWorkspaceToStore`), so the model has to be told where they are.
|
|
72
|
-
*/
|
|
73
|
-
export function buildCloudWorkspaceSection(dir: string): string {
|
|
74
|
-
return [
|
|
75
|
-
"## Workspace files",
|
|
76
|
-
"",
|
|
77
|
-
`The agent's authored workspace files live at \`${dir}\` on this machine. Relative paths in your instructions that name these files resolve under that directory rather than your working directory. Read them with your normal file tools. The directory is shared across sessions, so copy a file into your working directory before editing it.`,
|
|
78
|
-
].join("\n");
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Per-turn preamble for cloud `workspaceFiles` after they land on the
|
|
83
|
-
* session store prefix (see `syncSessionWorkspaceFiles`). Omitted when
|
|
84
|
-
* the sync did not land.
|
|
85
|
-
*
|
|
86
|
-
* Same shared Agent Store mount as authored seeds — the session path is
|
|
87
|
-
* replace-per-send / task-end wipe lifetime, not a separate mount ACL.
|
|
88
|
-
*/
|
|
89
|
-
export function buildCloudSessionWorkspaceSection(
|
|
90
|
-
dir: string,
|
|
91
|
-
relPaths: readonly string[],
|
|
92
|
-
): string {
|
|
93
|
-
const listed = relPaths.map(path => `\`${path}\``).join(", ");
|
|
94
|
-
return [
|
|
95
|
-
"## Session workspace files",
|
|
96
|
-
"",
|
|
97
|
-
`This turn's workspace files live at \`${dir}\` on this machine (${listed}). Read them with your normal file tools. They sit on the same shared Agent Store mount as authored workspace seeds; the session directory is replaced on the next send for this session, and task sessions remove it when they finish.`,
|
|
98
|
-
].join("\n");
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/** Relative path of an agent-side tool script inside the session workspace. */
|
|
102
|
-
export function agentToolScriptPath(toolName: string): string {
|
|
103
|
-
return `.agent-serve/tools/${toolName}.sh`;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Reserved MCP connection name under which authored server tools are served
|
|
108
|
-
* to cloud turns (the session-bound tool MCP endpoint). Shared between the
|
|
109
|
-
* turn's MCP config and the first-prompt server-tool catalog so the model is
|
|
110
|
-
* told exactly where those tools live.
|
|
111
|
-
*/
|
|
112
|
-
export const SERVER_TOOLS_MCP_SERVER_NAME = "agentsdk-tools";
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Always-on identity line prepended when composing instructions. Sourced from
|
|
116
|
-
* {@link ResolvedAgent.name} (`defineAgent({ name })`, else package/dir name)
|
|
117
|
-
* so agents know who they are without restating it in authored prose.
|
|
118
|
-
*/
|
|
119
|
-
export function buildIdentityPreamble(name: string): string {
|
|
120
|
-
const trimmed = name.trim();
|
|
121
|
-
if (trimmed === "") {
|
|
122
|
-
return "";
|
|
123
|
-
}
|
|
124
|
-
return `You are ${trimmed}. That is your name; use it when people ask who you are.`;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Prepend {@link buildIdentityPreamble} to authored instructions. Used when
|
|
129
|
-
* loading `instructions.md` / `.ts` / dir into {@link ResolvedAgent.instructions}.
|
|
130
|
-
*/
|
|
131
|
-
export function withIdentityPreamble(
|
|
132
|
-
name: string,
|
|
133
|
-
instructions: string | undefined,
|
|
134
|
-
): string | undefined {
|
|
135
|
-
const preamble = buildIdentityPreamble(name);
|
|
136
|
-
const body = instructions?.trim() ?? "";
|
|
137
|
-
if (preamble === "" && body === "") {
|
|
138
|
-
return undefined;
|
|
139
|
-
}
|
|
140
|
-
if (preamble === "") {
|
|
141
|
-
return body === "" ? undefined : body;
|
|
142
|
-
}
|
|
143
|
-
if (body === "") {
|
|
144
|
-
return preamble;
|
|
145
|
-
}
|
|
146
|
-
return `${preamble}\n\n${body}`;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Markdown catalog of agent-side tools for AGENTS.md / cloud first prompt.
|
|
151
|
-
*
|
|
152
|
-
* @param includeScripts — when true, embed full script bodies (cloud first prompt).
|
|
153
|
-
* Local workspaces omit bodies because the files already exist on disk.
|
|
154
|
-
*/
|
|
155
|
-
export function buildAgentToolsCatalog(
|
|
156
|
-
tools: DiscoveredTool[],
|
|
157
|
-
options: { includeScripts: boolean } = { includeScripts: false },
|
|
158
|
-
): string {
|
|
159
|
-
const agentTools = tools.filter(tool => tool.execution === "agent");
|
|
160
|
-
if (agentTools.length === 0) {
|
|
161
|
-
return "";
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const parts: string[] = [
|
|
165
|
-
"## Agent tools",
|
|
166
|
-
"",
|
|
167
|
-
"These tools run in the agent environment (not on the agent-serve host).",
|
|
168
|
-
"Pass a JSON object on stdin matching the input schema; read the result from stdout.",
|
|
169
|
-
"Only the tools in this section are scripts. Do not create, edit, or run a script for any other tool name.",
|
|
170
|
-
"",
|
|
171
|
-
];
|
|
172
|
-
|
|
173
|
-
for (const tool of agentTools) {
|
|
174
|
-
const rel = agentToolScriptPath(tool.name);
|
|
175
|
-
parts.push(`### \`${tool.name}\``);
|
|
176
|
-
parts.push("");
|
|
177
|
-
parts.push(tool.description.trim());
|
|
178
|
-
parts.push("");
|
|
179
|
-
parts.push(`Path: \`${rel}\``);
|
|
180
|
-
parts.push("");
|
|
181
|
-
parts.push("Input schema:");
|
|
182
|
-
parts.push("");
|
|
183
|
-
parts.push("```json");
|
|
184
|
-
parts.push(JSON.stringify(tool.inputSchema, null, 2));
|
|
185
|
-
parts.push("```");
|
|
186
|
-
parts.push("");
|
|
187
|
-
parts.push("Invoke:");
|
|
188
|
-
parts.push("");
|
|
189
|
-
parts.push("```bash");
|
|
190
|
-
parts.push(`printf '%s' '{"key":"value"}' | bash ${rel}`);
|
|
191
|
-
parts.push("```");
|
|
192
|
-
parts.push("");
|
|
193
|
-
if (options.includeScripts && tool.script !== undefined) {
|
|
194
|
-
parts.push("Script body (write to the path above if missing):");
|
|
195
|
-
parts.push("");
|
|
196
|
-
parts.push("```bash");
|
|
197
|
-
parts.push(normalizeScriptBody(tool.script));
|
|
198
|
-
parts.push("```");
|
|
199
|
-
parts.push("");
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
return `${parts.join("\n").trimEnd()}\n`;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Markdown catalog of authored server tools for the cloud first prompt.
|
|
208
|
-
*
|
|
209
|
-
* Server tools execute on the serve host and reach cloud turns only as MCP
|
|
210
|
-
* tools on {@link SERVER_TOOLS_MCP_SERVER_NAME}. Instructions reference them
|
|
211
|
-
* by bare name. The agent-tool catalog still teaches "write the script if
|
|
212
|
-
* missing" for *agent* tools; this section must come first on cloud and
|
|
213
|
-
* say that server tools are MCP-only, or the model copies that recipe onto
|
|
214
|
-
* a host tool and the host-side marker never appears.
|
|
215
|
-
*/
|
|
216
|
-
export function buildServerToolsCatalog(
|
|
217
|
-
tools: DiscoveredTool[],
|
|
218
|
-
options: { mcpServerName: string },
|
|
219
|
-
): string {
|
|
220
|
-
const serverTools = tools.filter(tool => tool.execution === "server");
|
|
221
|
-
if (serverTools.length === 0) {
|
|
222
|
-
return "";
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
const parts: string[] = [
|
|
226
|
-
"## Server tools",
|
|
227
|
-
"",
|
|
228
|
-
`These tools execute on the agent-serve host, not in this environment. They are available ONLY as MCP tools on the \`${options.mcpServerName}\` MCP server.`,
|
|
229
|
-
"Call them through your MCP tooling: list that server's tools, then invoke the tool by its exact name (GetMcpTools / CallMcpTool, or the equivalent). There is no `.agent-serve/tools/<name>.sh` for any tool in this section.",
|
|
230
|
-
`If the \`${options.mcpServerName}\` server is not in your MCP server list, stop and report that. Do not write, edit, or run a local script or other substitute. A local re-implementation cannot produce the host-side marker, logs, or session events.`,
|
|
231
|
-
"",
|
|
232
|
-
];
|
|
233
|
-
|
|
234
|
-
for (const tool of serverTools) {
|
|
235
|
-
parts.push(`### \`${tool.name}\``);
|
|
236
|
-
parts.push("");
|
|
237
|
-
parts.push(tool.description.trim());
|
|
238
|
-
parts.push("");
|
|
239
|
-
parts.push("Input schema:");
|
|
240
|
-
parts.push("");
|
|
241
|
-
parts.push("```json");
|
|
242
|
-
parts.push(JSON.stringify(tool.inputSchema, null, 2));
|
|
243
|
-
parts.push("```");
|
|
244
|
-
parts.push("");
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
return `${parts.join("\n").trimEnd()}\n`;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* The full instructions context for an agent: instructions, identity
|
|
252
|
-
* section, and the agent-side tool catalog. Local turns send it as the
|
|
253
|
-
* harness system prompt (`AgentOptions.systemPrompt`, replacing Cursor's
|
|
254
|
-
* built-in prompt), grokbot turns carry it into the hosted session's system
|
|
255
|
-
* prompt, and cloud turns inline it into the first prompt because a cloud VM
|
|
256
|
-
* has no materialized workspace to read it from.
|
|
257
|
-
*
|
|
258
|
-
* `serverToolsMcpName` is cloud-only: when the turn's MCP config carries the
|
|
259
|
-
* session-bound server-tool endpoint, the catalog names that server so the
|
|
260
|
-
* model calls the real tools instead of inventing local stand-ins. It is
|
|
261
|
-
* emitted *before* the agent-tool catalog so "write the script if missing"
|
|
262
|
-
* cannot be read as applying to server-tool names. Local runtimes omit it —
|
|
263
|
-
* there the harness exposes server tools natively.
|
|
264
|
-
*/
|
|
265
|
-
export function buildAgentsMdContent(
|
|
266
|
-
agent: ResolvedAgent,
|
|
267
|
-
options: { includeScripts: boolean; serverToolsMcpName?: string },
|
|
268
|
-
): string {
|
|
269
|
-
return [
|
|
270
|
-
agent.instructions?.trim() ?? "",
|
|
271
|
-
buildIdentitySection(agent),
|
|
272
|
-
options.serverToolsMcpName === undefined
|
|
273
|
-
? ""
|
|
274
|
-
: buildServerToolsCatalog(agent.tools, {
|
|
275
|
-
mcpServerName: options.serverToolsMcpName,
|
|
276
|
-
}),
|
|
277
|
-
buildAgentToolsCatalog(agent.tools, {
|
|
278
|
-
includeScripts: options.includeScripts,
|
|
279
|
-
}),
|
|
280
|
-
]
|
|
281
|
-
.filter(part => part !== "")
|
|
282
|
-
.join("\n\n");
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* True when `dir` sits strictly inside a git repository (a `.git` exists in
|
|
287
|
-
* an ancestor directory but not in `dir` itself). The Cursor harness resolves
|
|
288
|
-
* its project root by walking up to the nearest git root, so a nested session
|
|
289
|
-
* workspace loses its own `AGENTS.md` / `.cursor` scaffold: the enclosing
|
|
290
|
-
* repo's rules load instead, and the (necessarily gitignored) workspace files
|
|
291
|
-
* are skipped by nested rule discovery.
|
|
292
|
-
*/
|
|
293
|
-
export async function isNestedInGitRepo(dir: string): Promise<boolean> {
|
|
294
|
-
let current = resolve(dir);
|
|
295
|
-
if (await exists(join(current, ".git"))) {
|
|
296
|
-
// The workspace is itself a repo root; the harness roots rules here.
|
|
297
|
-
return false;
|
|
298
|
-
}
|
|
299
|
-
const { root } = parse(current);
|
|
300
|
-
while (current !== root) {
|
|
301
|
-
current = dirname(current);
|
|
302
|
-
if (await exists(join(current, ".git"))) {
|
|
303
|
-
return true;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/** Default harness parent for a nested-git agent project. */
|
|
310
|
-
export function defaultLocalHarnessCwd(dirName: string): string {
|
|
311
|
-
return join(homedir(), ".cache", "agent-serve", dirName);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/**
|
|
315
|
-
* Give a session workspace its own git root so the harness roots *there*
|
|
316
|
-
* rather than at the enclosing repo (see {@link isNestedInGitRepo}). Without
|
|
317
|
-
* it the harness reads the outer repo's `.cursor/hooks.json`, rules, skills
|
|
318
|
-
* and `mcp.json`, and never sees the ones written into this workspace —
|
|
319
|
-
* instructions have an inline fallback, hooks have none.
|
|
320
|
-
*
|
|
321
|
-
* Best effort: a workspace that already has `.git` (a borrowed checkout or
|
|
322
|
-
* worktree) is left alone, and a failed `git init` leaves the harness where
|
|
323
|
-
* it already was.
|
|
324
|
-
*/
|
|
325
|
-
export async function ensureOwnGitRoot(dir: string): Promise<boolean> {
|
|
326
|
-
if (!(await isNestedInGitRepo(dir))) {
|
|
327
|
-
return false;
|
|
328
|
-
}
|
|
329
|
-
try {
|
|
330
|
-
await execFileAsync("git", ["init", "--quiet"], { cwd: dir });
|
|
331
|
-
return true;
|
|
332
|
-
} catch {
|
|
333
|
-
return false;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
export async function materializeWorkspace(options: MaterializeWorkspaceOptions): Promise<void> {
|
|
338
|
-
const { agent, workspaceDir, seed, stateRoot } = options;
|
|
339
|
-
await mkdir(workspaceDir, { recursive: true });
|
|
340
|
-
if (seed) {
|
|
341
|
-
await linkSharedMemoryDir(workspaceDir, stateRoot);
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
for (const tool of agent.tools) {
|
|
345
|
-
if (tool.execution !== "agent" || tool.script === undefined) {
|
|
346
|
-
continue;
|
|
347
|
-
}
|
|
348
|
-
await materializeAgentTool(workspaceDir, tool);
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
for (const skill of agent.skills) {
|
|
352
|
-
await materializeSkill(workspaceDir, skill);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
if (seed) {
|
|
356
|
-
for (const seedFile of agent.seedFiles) {
|
|
357
|
-
const target = resolveWorkspaceWritePath(workspaceDir, seedFile.relativePath);
|
|
358
|
-
if (await exists(target)) {
|
|
359
|
-
continue;
|
|
360
|
-
}
|
|
361
|
-
await mkdir(dirname(target), { recursive: true });
|
|
362
|
-
await copyFile(seedFile.sourcePath, target);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Resolve a workspace-rooted write target, refusing escapes and the
|
|
369
|
-
* reserved `memory` name. `memory` is a symlink into the agent's durable
|
|
370
|
-
* cross-session state, so a caller-supplied `workspaceFiles` entry (or a
|
|
371
|
-
* seed file) under it would write through the link and poison the journal
|
|
372
|
-
* every other session trusts. The check runs on the *resolved* path so
|
|
373
|
-
* `./memory/x` and `foo/../memory/x` cannot slip past.
|
|
374
|
-
*/
|
|
375
|
-
function resolveWorkspaceWritePath(workspaceDir: string, relativePath: string): string {
|
|
376
|
-
const target = resolveInside(workspaceDir, relativePath);
|
|
377
|
-
const first = relative(workspaceDir, target).split(sep, 1)[0];
|
|
378
|
-
if (first === MEMORY_DIR_NAME) {
|
|
379
|
-
throw new Error(
|
|
380
|
-
`"${MEMORY_DIR_NAME}" is reserved for shared session memory; refusing to write ${relativePath}`,
|
|
381
|
-
);
|
|
382
|
-
}
|
|
383
|
-
return target;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Symlink `<stateRoot>/memory` into the workspace as `memory`. Stale links
|
|
388
|
-
* (a moved state root) are re-pointed; seeded files and symlink-refusing
|
|
389
|
-
* platforms (unprivileged Windows) are left alone — memory then stays
|
|
390
|
-
* reachable only via the state path.
|
|
391
|
-
*/
|
|
392
|
-
async function linkSharedMemoryDir(workspaceDir: string, stateRoot: string): Promise<void> {
|
|
393
|
-
const target = join(stateRoot, MEMORY_DIR_NAME);
|
|
394
|
-
const linkPath = join(workspaceDir, MEMORY_DIR_NAME);
|
|
395
|
-
await mkdir(target, { recursive: true });
|
|
396
|
-
try {
|
|
397
|
-
await symlink(target, linkPath, "dir");
|
|
398
|
-
} catch (error) {
|
|
399
|
-
if ((error as NodeJS.ErrnoException).code !== "EEXIST") {
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
const existing = await lstat(linkPath);
|
|
403
|
-
if (!existing.isSymbolicLink() || (await readlink(linkPath)) === target) {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
await rm(linkPath);
|
|
407
|
-
await symlink(target, linkPath, "dir");
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
async function materializeAgentTool(workspaceDir: string, tool: DiscoveredTool): Promise<void> {
|
|
412
|
-
if (tool.script === undefined) {
|
|
413
|
-
return;
|
|
414
|
-
}
|
|
415
|
-
const relativePath = agentToolScriptPath(tool.name);
|
|
416
|
-
const target = resolveInside(workspaceDir, relativePath);
|
|
417
|
-
await mkdir(dirname(target), { recursive: true });
|
|
418
|
-
await writeFile(target, `${normalizeScriptBody(tool.script)}\n`, "utf8");
|
|
419
|
-
try {
|
|
420
|
-
await chmod(target, 0o755);
|
|
421
|
-
} catch {
|
|
422
|
-
// Best-effort on platforms that ignore mode bits.
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
async function materializeSkill(workspaceDir: string, skill: DiscoveredSkill): Promise<void> {
|
|
427
|
-
const skillDir = join(workspaceDir, ".cursor", "skills", skill.name);
|
|
428
|
-
await mkdir(skillDir, { recursive: true });
|
|
429
|
-
await writeFile(join(skillDir, "SKILL.md"), buildSkillMd(skill), "utf8");
|
|
430
|
-
|
|
431
|
-
for (const [relativePath, source] of Object.entries(skill.files)) {
|
|
432
|
-
const target = resolveInside(skillDir, relativePath);
|
|
433
|
-
await mkdir(dirname(target), { recursive: true });
|
|
434
|
-
if ("contents" in source) {
|
|
435
|
-
await writeFile(target, source.contents, "utf8");
|
|
436
|
-
} else {
|
|
437
|
-
await copyFile(source.sourcePath, target);
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* Ensure the script has a shebang. Catalog fences stay tidy without a
|
|
444
|
-
* trailing blank line inside the fence.
|
|
445
|
-
*/
|
|
446
|
-
function normalizeScriptBody(script: string): string {
|
|
447
|
-
const trimmed = script.replace(/\r\n/g, "\n").trimEnd();
|
|
448
|
-
if (trimmed.startsWith("#!")) {
|
|
449
|
-
return trimmed;
|
|
450
|
-
}
|
|
451
|
-
return `#!/usr/bin/env bash\n${trimmed}`;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
/**
|
|
455
|
-
* Generate the SKILL.md the harness reads: `name` + `description`
|
|
456
|
-
* frontmatter (any authored frontmatter was already stripped at discovery)
|
|
457
|
-
* followed by the skill body.
|
|
458
|
-
*/
|
|
459
|
-
export function buildSkillMd(skill: DiscoveredSkill): string {
|
|
460
|
-
const { body } = parseFrontmatter(skill.markdown);
|
|
461
|
-
const frontmatter = serializeFrontmatter({
|
|
462
|
-
name: skill.name,
|
|
463
|
-
description: skill.description,
|
|
464
|
-
});
|
|
465
|
-
return `${frontmatter}\n${body.trim()}\n`;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
/**
|
|
469
|
-
* Write relative path → contents under `workspaceDir`, refusing paths that
|
|
470
|
-
* escape the directory. Values may be utf8 strings or base64 blob envelopes.
|
|
471
|
-
*/
|
|
472
|
-
export async function writeWorkspaceFiles(
|
|
473
|
-
workspaceDir: string,
|
|
474
|
-
files: Record<string, string | { encoding: "base64"; data: string; mimeType?: string }>,
|
|
475
|
-
): Promise<void> {
|
|
476
|
-
for (const [relativePath, contents] of Object.entries(files)) {
|
|
477
|
-
const target = resolveWorkspaceWritePath(workspaceDir, relativePath);
|
|
478
|
-
await mkdir(dirname(target), { recursive: true });
|
|
479
|
-
if (typeof contents === "string") {
|
|
480
|
-
await writeFile(target, contents, "utf8");
|
|
481
|
-
} else if (contents.encoding === "base64") {
|
|
482
|
-
await writeFile(target, Buffer.from(contents.data, "base64"));
|
|
483
|
-
} else {
|
|
484
|
-
throw new Error(`Unsupported workspace file encoding for ${relativePath}`);
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
function resolveInside(baseDir: string, relativePath: string): string {
|
|
490
|
-
const target = resolve(baseDir, relativePath);
|
|
491
|
-
const rel = relative(baseDir, target);
|
|
492
|
-
if (rel.startsWith("..") || rel === "" || relativePath.includes("\0")) {
|
|
493
|
-
throw new Error(`Refusing to write outside the workspace: ${relativePath}`);
|
|
494
|
-
}
|
|
495
|
-
return target;
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
async function exists(path: string): Promise<boolean> {
|
|
499
|
-
try {
|
|
500
|
-
await stat(path);
|
|
501
|
-
return true;
|
|
502
|
-
} catch {
|
|
503
|
-
return false;
|
|
504
|
-
}
|
|
505
|
-
}
|
package/src/kv/memory-kv.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* In-memory {@link HostKvCasApi} — the test/dev implementation of
|
|
3
|
-
* `@cursor/bdk/kv`.
|
|
4
|
-
*
|
|
5
|
-
* Internal only: SDK tests and Cursor factory code. Not a public Agent
|
|
6
|
-
* SDK export.
|
|
7
|
-
*
|
|
8
|
-
* The memory KV *is* the test shim: tests and local runs exercise the
|
|
9
|
-
* CAS contract, not a mock of an RPC. Values are deep-copied on both write and
|
|
10
|
-
* read so callers can never observe (or cause) shared-reference mutation.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import type { StorageCasTable } from "../storage.js";
|
|
14
|
-
import type { HostKvCasApi, JsonValue, KvCasResult, KvVersionedEntry } from "../types.js";
|
|
15
|
-
|
|
16
|
-
/** Create an empty in-memory CAS-capable KV. */
|
|
17
|
-
export function createMemoryKv(): HostKvCasApi {
|
|
18
|
-
const entries = new Map<string, { value: JsonValue; version: string }>();
|
|
19
|
-
let versionCounter = 0;
|
|
20
|
-
|
|
21
|
-
const nextVersion = (): string => {
|
|
22
|
-
versionCounter += 1;
|
|
23
|
-
return `v${versionCounter}`;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
const snapshot = (key: string): KvVersionedEntry | undefined => {
|
|
27
|
-
const entry = entries.get(key);
|
|
28
|
-
if (entry === undefined) {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
return { value: structuredClone(entry.value), version: entry.version };
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
async get(key): Promise<JsonValue | undefined> {
|
|
36
|
-
return snapshot(key)?.value;
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
async put(key, value): Promise<void> {
|
|
40
|
-
entries.set(key, {
|
|
41
|
-
value: structuredClone(value),
|
|
42
|
-
version: nextVersion(),
|
|
43
|
-
});
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
async delete(key): Promise<void> {
|
|
47
|
-
entries.delete(key);
|
|
48
|
-
},
|
|
49
|
-
|
|
50
|
-
async getWithVersion(key): Promise<KvVersionedEntry | undefined> {
|
|
51
|
-
return snapshot(key);
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
async putIfAbsent(key, value): Promise<KvCasResult> {
|
|
55
|
-
if (entries.has(key)) {
|
|
56
|
-
return { ok: false, current: snapshot(key) };
|
|
57
|
-
}
|
|
58
|
-
const version = nextVersion();
|
|
59
|
-
entries.set(key, { value: structuredClone(value), version });
|
|
60
|
-
return { ok: true, version };
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
async putIfVersion(key, value, expectedVersion): Promise<KvCasResult> {
|
|
64
|
-
const entry = entries.get(key);
|
|
65
|
-
if (entry === undefined || entry.version !== expectedVersion) {
|
|
66
|
-
return { ok: false, current: snapshot(key) };
|
|
67
|
-
}
|
|
68
|
-
const version = nextVersion();
|
|
69
|
-
entries.set(key, { value: structuredClone(value), version });
|
|
70
|
-
return { ok: true, version };
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
async listKeys(prefix): Promise<string[]> {
|
|
74
|
-
return [...entries.keys()].filter(key => key.startsWith(prefix)).sort();
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* In-memory `cas` group for `defineStorage` — a complete conditional-write
|
|
81
|
-
* group for sinks whose plain methods are inert or live elsewhere (test
|
|
82
|
-
* fixtures, an off-hosting no-op sink). Non-durable and process-local by
|
|
83
|
-
* construction; a real deployment backend should implement CAS against
|
|
84
|
-
* its own store instead.
|
|
85
|
-
*/
|
|
86
|
-
export function memoryCasTable(): StorageCasTable {
|
|
87
|
-
const kv = createMemoryKv();
|
|
88
|
-
return {
|
|
89
|
-
getWithVersion: key => kv.getWithVersion(key),
|
|
90
|
-
putIfAbsent: (key, value) => kv.putIfAbsent(key, value),
|
|
91
|
-
putIfVersion: (key, value, expectedVersion) => kv.putIfVersion(key, value, expectedVersion),
|
|
92
|
-
listKeys: prefix => kv.listKeys(prefix),
|
|
93
|
-
};
|
|
94
|
-
}
|
package/src/kv.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The CAS-capable KV **interface** — `@cursor/bdk/kv`.
|
|
3
|
-
*
|
|
4
|
-
* This module is implementation-free on purpose: it is the contract a
|
|
5
|
-
* bring-your-own KV implements so conditional writes can run on it.
|
|
6
|
-
* {@link HostKvCasApi} is the conditional-write superset of the plain
|
|
7
|
-
* {@link HostKvApi}; {@link supportsKvCas} is the runtime probe for
|
|
8
|
-
* stores of unknown provenance — a `defineStorage` backend declares CAS
|
|
9
|
-
* through its `cas` group instead, so it never needs probing.
|
|
10
|
-
*
|
|
11
|
-
* Implementations live on the storage backends: they implement the same
|
|
12
|
-
* operations as the `cas` group on the internal-only `defineStorage`
|
|
13
|
-
* (its `StorageCasTable` member): `fileKv` (single-process) and
|
|
14
|
-
* `cursorHostedStorage` (control-plane proxy). See `docs/storage.md`.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
export type { HostKvApi, HostKvCasApi, KvCasResult, KvVersionedEntry } from "./types.js";
|
|
18
|
-
export { supportsKvCas } from "./types.js";
|