@cursor/bdk 0.2.3 → 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/dist/bin/agent-serve.js +9 -1
- 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/docs/404.html +2 -2
- package/dist/docs/assets/{app.BOIHhrKi.js → app.4kQ8Db_q.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.CvuAJ0My.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D49zVZqM.js → VPLocalSearchBox.DY1RwB8Q.js} +1 -1
- package/dist/docs/assets/chunks/{arc.hmjb-sc4.js → arc.CxE_fSPK.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CxEI1KqM.js → architectureDiagram-Q4EWVU46.CPX426ui.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.DHHvBWoV.js → baseUniq.CB52JrKG.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DnXW-3bu.js → blockDiagram-DXYQGD6D.J0cNaQCL.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.e-47O2jM.js → c4Diagram-AHTNJAMY.DJn3vEGT.js} +1 -1
- package/dist/docs/assets/chunks/channel.BoNycAoN.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.3ry4pYXB.js → chunk-4BX2VUAB.Dao618F6.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DGIZFRx6.js → chunk-4TB4RGXK.QW8Rhjai.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DKBnqg9U.js → chunk-55IACEB6.DfRLLKF_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BIU8Ue5k.js → chunk-EDXVE4YY.CIV2ApKQ.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DP-TFhjI.js → chunk-FMBD7UC4.BEheSuxp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Ux0OYj5v.js → chunk-OYMX7WX6.CUN88ENB.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BzHMwYox.js → chunk-QZHKN3VN.CgqCs8b_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.D4OGAsSP.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.Jq_7BUNx.js → cose-bilkent-S5V4N54A.BLcUxhWE.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Di-skR2x.js → dagre-KV5264BT.Ep7LofOm.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DeREHIdH.js → diagram-5BDNPKRD.Bzf4GSQ4.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.C7Kcqxro.js → diagram-G4DWMVQ6.DD6Jh-eM.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BK3eohyo.js → diagram-MMDJMWI5.oOIl8bWd.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.C6TyymXT.js → diagram-TYMM5635.DHs85Ade.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DYGG-gGx.js → erDiagram-SMLLAGMA.BIb5ghCk.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.C9nBcSV4.js → flowDiagram-DWJPFMVM.DV4paY9k.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.wAg_ymsp.js → ganttDiagram-T4ZO3ILL.AyEKA6_v.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.B87j9Oeg.js → gitGraphDiagram-UUTBAWPF.BltiCDFo.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CuFMj31w.js → graph.DzuEYGdC.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.P_mLGumP.js → infoDiagram-42DDH7IO.BV2l981J.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DyuL_MsT.js → ishikawaDiagram-UXIWVN3A.BA4Izf-m.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CtP09IoJ.js → journeyDiagram-VCZTEJTY.DjaFbFS3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BoeSYPZo.js → kanban-definition-6JOO6SKY.CfTFieDs.js} +1 -1
- package/dist/docs/assets/chunks/{layout.B0lMMtNo.js → layout.DzfWqTBV.js} +1 -1
- package/dist/docs/assets/chunks/{linear.HxRBiAFX.js → linear.BO6mpulV.js} +1 -1
- package/dist/docs/assets/chunks/{min.BGlFFHwS.js → min.BGgTadgT.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.JyLBD9M8.js → mindmap-definition-QFDTVHPH.DPuIXVWY.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DnSmNZF8.js → pieDiagram-DEJITSTG.BOnl3bBg.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CUCnbfCa.js → quadrantDiagram-34T5L4WZ.DNB6Ckdc.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.py0IVUn5.js → requirementDiagram-MS252O5E.D5-Qo7vb.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.Bkc-HWYp.js → sankeyDiagram-XADWPNL6.8t65cesf.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Dqn8Mlv2.js → sequenceDiagram-FGHM5R23.CaG07BdS.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.JikkoQUU.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.b6HQ6zG_.js → theme.Dx-JhpTB.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BvpSXiBj.js → timeline-definition-GMOUNBTQ.fE53zQ2s.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CU7MVnZx.js → vennDiagram-DHZGUBPP.DJsZZaJg.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.BKwC4ctG.js → wardley-RL74JXVD.844kyrjl.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.BfaF6Uhe.js → wardleyDiagram-NUSXRM2D.CMZ-Ru_t.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.Bg5dcpj4.js → xychartDiagram-5P7HB3ND.XXrhBc7a.js} +1 -1
- package/dist/docs/assets/{deployment.md.BJ8i7Q6p.js → deployment.md.UhnJIMr-.js} +2 -2
- package/dist/docs/assets/{deployment.md.BJ8i7Q6p.lean.js → deployment.md.UhnJIMr-.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/{reference_agent-config.md.DzGI777n.js → reference_agent-config.md.Cj5uBKp4.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/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/deployment.md +4 -1
- 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 +35 -35
- package/dist/docs/guides/gitlab.html +35 -35
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +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 +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +25 -2
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/agent-config.md +1 -1
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +35 -35
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +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 +35 -35
- 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 +35 -35
- 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-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +19 -5
- 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/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +12 -0
- package/dist/internal/hosting.d.ts +8 -0
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +24 -0
- package/dist/types.d.ts +18 -2
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +4 -1
- package/docs/guides/jev.md +7 -0
- package/docs/reference/agent-config.md +1 -1
- package/docs/reference/extensions.md +13 -0
- package/package.json +1 -9
- package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +0 -1
- package/dist/docs/assets/chunks/channel.BbOGaJQP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +0 -1
- package/dist/docs/assets/chunks/clone.Co4MBflG.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +0 -1
- package/src/artifacts.ts +0 -68
- package/src/bin/agent-serve.ts +0 -1854
- 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 -293
- 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/cursor-grokbot-agents/extension.ts +0 -132
- package/src/extensions/cursor-grokbot-agents/lib/agents.ts +0 -42
- package/src/extensions/cursor-grokbot-agents/lib/backend.ts +0 -208
- package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +0 -74
- package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +0 -260
- package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +0 -21
- package/src/extensions/cursor-grokbot-agents/lib/lock.ts +0 -26
- package/src/extensions/cursor-grokbot-agents/skills/consult.md +0 -40
- package/src/extensions/cursor-grokbot-agents/tools/ask.ts +0 -32
- package/src/extensions/cursor-grokbot-agents/tools/check.ts +0 -25
- package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +0 -17
- package/src/extensions/cursor-grokbot-agents/tools/list.ts +0 -26
- 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 -2318
- 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 -2519
- 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 -396
- package/src/internal/cli-mcp.ts +0 -808
- package/src/internal/cli-skills.ts +0 -98
- 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/connection-env.ts +0 -106
- 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 -984
- 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 -1574
- 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 -516
- 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 -824
- package/src/internal/hosted-delivery.ts +0 -1410
- 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 -114
- 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 -604
- package/src/internal/is-record.ts +0 -3
- package/src/internal/json-schema.ts +0 -95
- package/src/internal/legacy-command-guard.ts +0 -66
- 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 -509
- 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 -959
- package/src/internal/serve-restart.ts +0 -113
- package/src/internal/server.ts +0 -3147
- package/src/internal/session-cost.ts +0 -208
- package/src/internal/session-engine.ts +0 -5622
- 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 -3776
- /package/dist/docs/assets/{reference_agent-config.md.DzGI777n.lean.js → reference_agent-config.md.Cj5uBKp4.lean.js} +0 -0
|
@@ -1,711 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scaffold a minimal BDK project (`bdk init`).
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { spawn } from "node:child_process";
|
|
6
|
-
import { existsSync } from "node:fs";
|
|
7
|
-
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
8
|
-
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
9
|
-
import { runfiles } from "@bazel/runfiles";
|
|
10
|
-
import type { ModelSetting } from "../types.js";
|
|
11
|
-
import {
|
|
12
|
-
canonicalTemplateName,
|
|
13
|
-
isTemplateName,
|
|
14
|
-
readCursorAgentTemplate,
|
|
15
|
-
type TemplateName,
|
|
16
|
-
} from "./cursor-agent-template.js";
|
|
17
|
-
import { CLI_COMMAND_NAME, PACKAGE_NAME, packageRootDir, packageVersion } from "./distribution.js";
|
|
18
|
-
import {
|
|
19
|
-
applyInitReplacements,
|
|
20
|
-
isTemplateMetaPath,
|
|
21
|
-
loadTemplateInitSpec,
|
|
22
|
-
posixRel,
|
|
23
|
-
type TemplateInitSpec,
|
|
24
|
-
templateFileHasReplacements,
|
|
25
|
-
} from "./init-interview.js";
|
|
26
|
-
import { agentsMd, GITIGNORE, writeDefaultScaffold } from "./init-scaffold.js";
|
|
27
|
-
import {
|
|
28
|
-
type ProjectRoot,
|
|
29
|
-
remapCanonicalProjectContents,
|
|
30
|
-
remapCanonicalProjectPath,
|
|
31
|
-
resolveProjectRoot,
|
|
32
|
-
} from "./project-layout.js";
|
|
33
|
-
import { makePalette, stdoutPalette, type TerminalPalette } from "./terminal-style.js";
|
|
34
|
-
|
|
35
|
-
export interface InitProjectOptions {
|
|
36
|
-
/** Directory to create (created if missing). */
|
|
37
|
-
dir: string;
|
|
38
|
-
/** Agent display name; defaults to the directory basename. */
|
|
39
|
-
name?: string;
|
|
40
|
-
/** Model id override written into agent.ts. */
|
|
41
|
-
model?: string;
|
|
42
|
-
templateDir?: string;
|
|
43
|
-
overlayDir?: string;
|
|
44
|
-
templateName?: string;
|
|
45
|
-
/** Answers collected from `init.json` / `--var`. */
|
|
46
|
-
answers?: Record<string, string>;
|
|
47
|
-
initSpec?: TemplateInitSpec;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export type InitFileAction = "create" | "exist";
|
|
51
|
-
|
|
52
|
-
export interface InitFileEntry {
|
|
53
|
-
path: string;
|
|
54
|
-
action: InitFileAction;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface InitProjectResult {
|
|
58
|
-
rootDir: string;
|
|
59
|
-
/** Scaffold files in write order, with create/exist for each. */
|
|
60
|
-
files: InitFileEntry[];
|
|
61
|
-
/** Paths newly written. */
|
|
62
|
-
created: string[];
|
|
63
|
-
/** Paths left alone because they already existed. */
|
|
64
|
-
skipped: string[];
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
type TemplateEntry = {
|
|
68
|
-
dir: string;
|
|
69
|
-
overlay?: string;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const TEMPLATES: Readonly<Record<TemplateName, TemplateEntry>> = {
|
|
73
|
-
"agentic-owners": { dir: "agentic-owners" },
|
|
74
|
-
"agents-md": { dir: "agents-md" },
|
|
75
|
-
"code-wiki": { dir: "code-wiki" },
|
|
76
|
-
demo: { dir: "demo" },
|
|
77
|
-
"grokbot-agents": { dir: "grokbot-agents" },
|
|
78
|
-
"pr-autofixer": { dir: "pr-autofixer" },
|
|
79
|
-
"security-help": { dir: "security-help" },
|
|
80
|
-
"security-reviewer": { dir: "security-reviewer" },
|
|
81
|
-
"thermo-quality-review": { dir: "thermo-quality-review" },
|
|
82
|
-
"thermo-review": { dir: "thermo-review" },
|
|
83
|
-
"triage-linear": { dir: "triage", overlay: "linear" },
|
|
84
|
-
"triage-jira": { dir: "triage", overlay: "jira" },
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
export function availableTemplates(): string[] {
|
|
88
|
-
return Object.keys(TEMPLATES).sort();
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export type TemplateResolution =
|
|
92
|
-
| { ok: true; name: string; dir: string; overlayDir?: string }
|
|
93
|
-
| { ok: false; message: string };
|
|
94
|
-
|
|
95
|
-
export function resolveTemplate(name: string): TemplateResolution {
|
|
96
|
-
if (!/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
97
|
-
return {
|
|
98
|
-
ok: false,
|
|
99
|
-
message: "template name must match /^[a-z][a-z0-9-]*$/",
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
const resolved = canonicalTemplateName(name);
|
|
103
|
-
if (!isTemplateName(resolved)) {
|
|
104
|
-
return {
|
|
105
|
-
ok: false,
|
|
106
|
-
message: `unknown template "${name}" (available: ${availableTemplates().join(", ")})`,
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
const entry = TEMPLATES[resolved];
|
|
110
|
-
const dir = resolvePackagePath("templates", entry.dir);
|
|
111
|
-
return {
|
|
112
|
-
ok: true,
|
|
113
|
-
name: resolved,
|
|
114
|
-
dir,
|
|
115
|
-
overlayDir: entry.overlay === undefined ? undefined : join(dir, "overlays", entry.overlay),
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function resolvePackagePath(...segments: string[]): string {
|
|
120
|
-
if (runfiles.workspace !== undefined) {
|
|
121
|
-
return runfiles.resolveWorkspaceRelative(["packages", "agent-serve", ...segments].join("/"));
|
|
122
|
-
}
|
|
123
|
-
return join(packageRootDir(), ...segments);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export type InitTargetCheck = { ok: true } | { ok: false; message: string };
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Re-init must keep the mode the project was scaffolded with: template
|
|
130
|
-
* scaffolds stamp `cursorAgentTemplate` into package.json, and a mismatch
|
|
131
|
-
* here would silently mix default-scaffold files into a template project
|
|
132
|
-
* (or the reverse).
|
|
133
|
-
*/
|
|
134
|
-
export function checkInitTarget(rootDir: string, template: string | undefined): InitTargetCheck {
|
|
135
|
-
const pkgPath = join(rootDir, "package.json");
|
|
136
|
-
if (!existsSync(pkgPath)) {
|
|
137
|
-
return { ok: true };
|
|
138
|
-
}
|
|
139
|
-
const marker = readCursorAgentTemplate(rootDir);
|
|
140
|
-
if (marker === template) {
|
|
141
|
-
return { ok: true };
|
|
142
|
-
}
|
|
143
|
-
if (
|
|
144
|
-
marker !== undefined &&
|
|
145
|
-
template !== undefined &&
|
|
146
|
-
canonicalTemplateName(marker) === canonicalTemplateName(template)
|
|
147
|
-
) {
|
|
148
|
-
return { ok: true };
|
|
149
|
-
}
|
|
150
|
-
if (template === undefined) {
|
|
151
|
-
return {
|
|
152
|
-
ok: false,
|
|
153
|
-
message: `${rootDir} was scaffolded from the "${marker}" template; re-run with --template ${marker}`,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
if (marker === undefined) {
|
|
157
|
-
return {
|
|
158
|
-
ok: false,
|
|
159
|
-
message: `${rootDir} already has a package.json without template provenance; re-run init without --template, or scaffold into a fresh directory`,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
return {
|
|
163
|
-
ok: false,
|
|
164
|
-
message: `${rootDir} was scaffolded from the "${marker}" template, not "${template}"`,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
const DEFAULT_MODEL: ModelSetting = {
|
|
169
|
-
id: "grok-4.5",
|
|
170
|
-
params: [
|
|
171
|
-
{ id: "effort", value: "high" },
|
|
172
|
-
{ id: "fast", value: "true" },
|
|
173
|
-
],
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
export async function initProject(options: InitProjectOptions): Promise<InitProjectResult> {
|
|
177
|
-
const rootDir = resolve(options.dir);
|
|
178
|
-
const projectName = basename(rootDir);
|
|
179
|
-
const name = options.name ?? projectName;
|
|
180
|
-
const model = formatModelLiteral(options.model ?? DEFAULT_MODEL);
|
|
181
|
-
const projectRoot = resolveProjectRoot(rootDir);
|
|
182
|
-
|
|
183
|
-
const files: InitFileEntry[] = [];
|
|
184
|
-
const write = async (rel: string, contents: string | Uint8Array): Promise<void> => {
|
|
185
|
-
const abs = join(rootDir, rel);
|
|
186
|
-
await mkdir(dirname(abs), { recursive: true });
|
|
187
|
-
try {
|
|
188
|
-
await writeFile(abs, contents, { flag: "wx" });
|
|
189
|
-
files.push({ path: rel, action: "create" });
|
|
190
|
-
} catch (error) {
|
|
191
|
-
if (isEexist(error)) {
|
|
192
|
-
files.push({ path: rel, action: "exist" });
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
throw error;
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
if (options.templateDir !== undefined) {
|
|
200
|
-
const templateDir = options.templateDir;
|
|
201
|
-
const overlayDir = options.overlayDir;
|
|
202
|
-
const overlayPaths = overlayDir ? await listTemplateFiles(overlayDir) : [];
|
|
203
|
-
const overlaySet = new Set(overlayPaths);
|
|
204
|
-
const corePaths = (await listTemplateFiles(templateDir)).filter(rel => !overlaySet.has(rel));
|
|
205
|
-
const templateName = options.templateName ?? basename(templateDir);
|
|
206
|
-
const initSpec = options.initSpec ?? (await loadTemplateInitSpec(templateDir));
|
|
207
|
-
const answers = options.answers ?? {};
|
|
208
|
-
for (const rel of corePaths) {
|
|
209
|
-
await writeTemplateFile({
|
|
210
|
-
write,
|
|
211
|
-
sourceDir: templateDir,
|
|
212
|
-
rel,
|
|
213
|
-
destinationRel: remapCanonicalProjectPath(rel, projectRoot),
|
|
214
|
-
projectRoot,
|
|
215
|
-
projectName,
|
|
216
|
-
templateName,
|
|
217
|
-
initSpec,
|
|
218
|
-
answers,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
if (overlayDir !== undefined) {
|
|
222
|
-
for (const rel of overlayPaths) {
|
|
223
|
-
await writeTemplateFile({
|
|
224
|
-
write,
|
|
225
|
-
sourceDir: overlayDir,
|
|
226
|
-
rel,
|
|
227
|
-
destinationRel: remapCanonicalProjectPath(rel, projectRoot),
|
|
228
|
-
projectRoot,
|
|
229
|
-
projectName,
|
|
230
|
-
templateName,
|
|
231
|
-
initSpec,
|
|
232
|
-
answers,
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
} else {
|
|
237
|
-
await writeDefaultScaffold(write, name, model, projectRoot);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
await write("AGENTS.md", agentsMd(name, projectRoot));
|
|
241
|
-
await write(".gitignore", GITIGNORE);
|
|
242
|
-
return {
|
|
243
|
-
rootDir,
|
|
244
|
-
files,
|
|
245
|
-
created: files.filter(entry => entry.action === "create").map(entry => entry.path),
|
|
246
|
-
skipped: files.filter(entry => entry.action === "exist").map(entry => entry.path),
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
async function listTemplateFiles(root: string): Promise<string[]> {
|
|
251
|
-
const entries = await readdir(root, {
|
|
252
|
-
recursive: true,
|
|
253
|
-
withFileTypes: true,
|
|
254
|
-
});
|
|
255
|
-
return entries
|
|
256
|
-
.filter(entry => entry.isFile())
|
|
257
|
-
.map(entry => posixRel(relative(root, join(entry.parentPath, entry.name))))
|
|
258
|
-
.filter(rel => !isTemplateMetaPath(rel))
|
|
259
|
-
.sort();
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
async function writeTemplateFile(input: {
|
|
263
|
-
write: (rel: string, contents: string | Uint8Array) => Promise<void>;
|
|
264
|
-
sourceDir: string;
|
|
265
|
-
rel: string;
|
|
266
|
-
destinationRel: string;
|
|
267
|
-
projectRoot: ProjectRoot;
|
|
268
|
-
projectName: string;
|
|
269
|
-
templateName: string;
|
|
270
|
-
initSpec?: TemplateInitSpec;
|
|
271
|
-
answers: Record<string, string>;
|
|
272
|
-
}): Promise<void> {
|
|
273
|
-
const source = join(input.sourceDir, input.rel);
|
|
274
|
-
if (input.rel === "package.json") {
|
|
275
|
-
const packageJson: {
|
|
276
|
-
name: string;
|
|
277
|
-
dependencies: Record<string, string>;
|
|
278
|
-
[key: string]: unknown;
|
|
279
|
-
} = JSON.parse(await readFile(source, "utf8"));
|
|
280
|
-
packageJson.name = input.projectName;
|
|
281
|
-
packageJson.dependencies[PACKAGE_NAME] = `^${packageVersion()}`;
|
|
282
|
-
packageJson.cursorAgentTemplate = input.templateName;
|
|
283
|
-
await input.write(input.destinationRel, `${JSON.stringify(packageJson, null, 2)}\n`);
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
if (input.initSpec !== undefined && templateFileHasReplacements(input.initSpec, input.rel)) {
|
|
287
|
-
const contents = applyInitReplacements(
|
|
288
|
-
await readFile(source, "utf8"),
|
|
289
|
-
input.rel,
|
|
290
|
-
input.initSpec,
|
|
291
|
-
input.answers,
|
|
292
|
-
);
|
|
293
|
-
await input.write(
|
|
294
|
-
input.destinationRel,
|
|
295
|
-
remapCanonicalProjectContents(contents, input.projectRoot),
|
|
296
|
-
);
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
const contents = await readFile(source, "utf8");
|
|
300
|
-
await input.write(
|
|
301
|
-
input.destinationRel,
|
|
302
|
-
remapCanonicalProjectContents(contents, input.projectRoot),
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
export function isEexist(error: unknown): boolean {
|
|
307
|
-
return hasErrorCode(error, "EEXIST");
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
function hasErrorCode(error: unknown, code: string): boolean {
|
|
311
|
-
return error !== null && typeof error === "object" && "code" in error && error.code === code;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
export interface InstallScaffoldDependenciesOptions {
|
|
315
|
-
/**
|
|
316
|
-
* `inherit` streams npm output to the terminal (human `init`);
|
|
317
|
-
* `pipe` captures it ( `--json` / tests).
|
|
318
|
-
*/
|
|
319
|
-
stdio?: "inherit" | "pipe";
|
|
320
|
-
/** Test seam — replaces the real `npm install` spawn. */
|
|
321
|
-
runner?: (args: {
|
|
322
|
-
command: string;
|
|
323
|
-
args: string[];
|
|
324
|
-
cwd: string;
|
|
325
|
-
stdio: "inherit" | "pipe";
|
|
326
|
-
}) => Promise<{ exitCode: number; stderr: string }>;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
export interface InstallScaffoldDependenciesResult {
|
|
330
|
-
ok: boolean;
|
|
331
|
-
exitCode: number;
|
|
332
|
-
stderr: string;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Install the scaffold's npm dependencies so `dev` / `run` can resolve
|
|
337
|
-
* `@cursor/bdk` immediately after `init`.
|
|
338
|
-
*/
|
|
339
|
-
export async function installScaffoldDependencies(
|
|
340
|
-
rootDir: string,
|
|
341
|
-
options: InstallScaffoldDependenciesOptions = {},
|
|
342
|
-
): Promise<InstallScaffoldDependenciesResult> {
|
|
343
|
-
const stdio = options.stdio ?? "inherit";
|
|
344
|
-
const command = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
345
|
-
const args = ["install", "--no-fund", "--no-audit"];
|
|
346
|
-
const runner = options.runner ?? defaultNpmInstallRunner;
|
|
347
|
-
const result = await runner({ command, args, cwd: rootDir, stdio });
|
|
348
|
-
return {
|
|
349
|
-
ok: result.exitCode === 0,
|
|
350
|
-
exitCode: result.exitCode,
|
|
351
|
-
stderr: result.stderr,
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
export interface LinkCliOntoPathOptions {
|
|
356
|
-
stdio?: "inherit" | "pipe";
|
|
357
|
-
runner?: (args: {
|
|
358
|
-
command: string;
|
|
359
|
-
args: string[];
|
|
360
|
-
cwd: string;
|
|
361
|
-
stdio: "inherit" | "pipe";
|
|
362
|
-
}) => Promise<{ exitCode: number; stderr: string }>;
|
|
363
|
-
/** Test seam — absolute path of the linked CLI when present. */
|
|
364
|
-
whichImpl?: (command: string) => string | undefined | Promise<string | undefined>;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
export interface LinkCliOntoPathResult {
|
|
368
|
-
ok: boolean;
|
|
369
|
-
exitCode: number;
|
|
370
|
-
stderr: string;
|
|
371
|
-
/** Absolute path to the linked `bdk` when it resolves on PATH. */
|
|
372
|
-
resolvedPath?: string;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/**
|
|
376
|
-
* Put `bdk` on the user PATH by installing the already-downloaded project
|
|
377
|
-
* copy into the npm global prefix. `npx @cursor/bdk init` only runs the
|
|
378
|
-
* package; this is the install that makes bare `bdk …`
|
|
379
|
-
* work afterward.
|
|
380
|
-
*/
|
|
381
|
-
export async function linkCliOntoPath(
|
|
382
|
-
rootDir: string,
|
|
383
|
-
options: LinkCliOntoPathOptions = {},
|
|
384
|
-
): Promise<LinkCliOntoPathResult> {
|
|
385
|
-
const packageDir = join(rootDir, "node_modules", PACKAGE_NAME);
|
|
386
|
-
if (!existsSync(packageDir)) {
|
|
387
|
-
return {
|
|
388
|
-
ok: false,
|
|
389
|
-
exitCode: 1,
|
|
390
|
-
stderr: `missing ${PACKAGE_NAME} under ${packageDir} (run npm install first)`,
|
|
391
|
-
};
|
|
392
|
-
}
|
|
393
|
-
const stdio = options.stdio ?? "inherit";
|
|
394
|
-
const command = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
395
|
-
const args = ["install", "--global", "--no-fund", "--no-audit", packageDir];
|
|
396
|
-
const runner = options.runner ?? defaultNpmInstallRunner;
|
|
397
|
-
const result = await runner({ command, args, cwd: rootDir, stdio });
|
|
398
|
-
if (result.exitCode !== 0) {
|
|
399
|
-
return {
|
|
400
|
-
ok: false,
|
|
401
|
-
exitCode: result.exitCode,
|
|
402
|
-
stderr: result.stderr,
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
const whichImpl = options.whichImpl ?? resolveLinkedCli;
|
|
406
|
-
const resolvedPath = await whichImpl(CLI_COMMAND_NAME);
|
|
407
|
-
return {
|
|
408
|
-
ok: resolvedPath !== undefined,
|
|
409
|
-
exitCode: 0,
|
|
410
|
-
stderr:
|
|
411
|
-
resolvedPath === undefined
|
|
412
|
-
? `${CLI_COMMAND_NAME} linked into the npm global prefix but is not on PATH; open a new shell or add that bin directory to PATH`
|
|
413
|
-
: "",
|
|
414
|
-
resolvedPath,
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/** Prefer the npm-global bin; ignore an older `bdk` earlier on PATH. */
|
|
419
|
-
async function resolveLinkedCli(commandName: string): Promise<string | undefined> {
|
|
420
|
-
const prefix = await npmGlobalPrefix();
|
|
421
|
-
if (prefix === undefined) {
|
|
422
|
-
return whichOnPath(commandName);
|
|
423
|
-
}
|
|
424
|
-
const binDir = process.platform === "win32" ? prefix : join(prefix, "bin");
|
|
425
|
-
const exts =
|
|
426
|
-
process.platform === "win32"
|
|
427
|
-
? (process.env.PATHEXT ?? ".EXE;.CMD;.BAT").split(";").filter(Boolean)
|
|
428
|
-
: [""];
|
|
429
|
-
for (const ext of exts) {
|
|
430
|
-
const candidate = join(binDir, `${commandName}${ext}`);
|
|
431
|
-
if (!existsSync(candidate)) {
|
|
432
|
-
continue;
|
|
433
|
-
}
|
|
434
|
-
// Only claim PATH success when this linked bin is the first hit.
|
|
435
|
-
const onPath = whichOnPath(commandName);
|
|
436
|
-
return onPath === candidate ? candidate : undefined;
|
|
437
|
-
}
|
|
438
|
-
return undefined;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
async function npmGlobalPrefix(): Promise<string | undefined> {
|
|
442
|
-
const command = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
443
|
-
return await new Promise(resolvePromise => {
|
|
444
|
-
const child = spawn(command, ["prefix", "-g"], {
|
|
445
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
446
|
-
env: process.env,
|
|
447
|
-
});
|
|
448
|
-
let out = "";
|
|
449
|
-
child.stdout?.setEncoding("utf8");
|
|
450
|
-
child.stdout?.on("data", (chunk: string) => {
|
|
451
|
-
out += chunk;
|
|
452
|
-
});
|
|
453
|
-
child.on("error", () => resolvePromise(undefined));
|
|
454
|
-
child.on("close", code => {
|
|
455
|
-
if (code !== 0) {
|
|
456
|
-
resolvePromise(undefined);
|
|
457
|
-
return;
|
|
458
|
-
}
|
|
459
|
-
const prefix = out.trim();
|
|
460
|
-
resolvePromise(prefix === "" ? undefined : prefix);
|
|
461
|
-
});
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
function whichOnPath(commandName: string): string | undefined {
|
|
466
|
-
const pathEnv = process.env.PATH ?? "";
|
|
467
|
-
const sep = process.platform === "win32" ? ";" : ":";
|
|
468
|
-
const exts =
|
|
469
|
-
process.platform === "win32"
|
|
470
|
-
? (process.env.PATHEXT ?? ".EXE;.CMD;.BAT").split(";").filter(Boolean)
|
|
471
|
-
: [""];
|
|
472
|
-
for (const dir of pathEnv.split(sep)) {
|
|
473
|
-
if (dir === "") {
|
|
474
|
-
continue;
|
|
475
|
-
}
|
|
476
|
-
for (const ext of exts) {
|
|
477
|
-
const candidate = join(dir, `${commandName}${ext}`);
|
|
478
|
-
if (existsSync(candidate)) {
|
|
479
|
-
return candidate;
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
return undefined;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
async function defaultNpmInstallRunner(args: {
|
|
487
|
-
command: string;
|
|
488
|
-
args: string[];
|
|
489
|
-
cwd: string;
|
|
490
|
-
stdio: "inherit" | "pipe";
|
|
491
|
-
}): Promise<{ exitCode: number; stderr: string }> {
|
|
492
|
-
return await new Promise((resolvePromise, reject) => {
|
|
493
|
-
const child = spawn(args.command, args.args, {
|
|
494
|
-
cwd: args.cwd,
|
|
495
|
-
stdio: args.stdio === "inherit" ? "inherit" : ["ignore", "pipe", "pipe"],
|
|
496
|
-
env: process.env,
|
|
497
|
-
});
|
|
498
|
-
let stderr = "";
|
|
499
|
-
if (args.stdio === "pipe") {
|
|
500
|
-
child.stderr?.setEncoding("utf8");
|
|
501
|
-
child.stderr?.on("data", (chunk: string) => {
|
|
502
|
-
stderr += chunk;
|
|
503
|
-
});
|
|
504
|
-
child.stdout?.resume();
|
|
505
|
-
}
|
|
506
|
-
child.on("error", reject);
|
|
507
|
-
child.on("close", code => {
|
|
508
|
-
resolvePromise({ exitCode: code ?? 1, stderr });
|
|
509
|
-
});
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
function formatModelLiteral(model: string | ModelSetting): string {
|
|
514
|
-
if (typeof model === "string") {
|
|
515
|
-
return JSON.stringify(model);
|
|
516
|
-
}
|
|
517
|
-
const params =
|
|
518
|
-
model.params === undefined
|
|
519
|
-
? ""
|
|
520
|
-
: `,
|
|
521
|
-
params: [
|
|
522
|
-
${model.params
|
|
523
|
-
.map(param => ` { id: ${JSON.stringify(param.id)}, value: ${JSON.stringify(param.value)} },`)
|
|
524
|
-
.join("\n")}
|
|
525
|
-
]`;
|
|
526
|
-
return `{
|
|
527
|
-
id: ${JSON.stringify(model.id)}${params},
|
|
528
|
-
}`;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
export interface InitScaffoldSummaryOptions {
|
|
532
|
-
/** Scaffolded project root (absolute). */
|
|
533
|
-
rootDir: string;
|
|
534
|
-
/** Scaffold files in write order (`create` / `exist`). */
|
|
535
|
-
files: InitFileEntry[];
|
|
536
|
-
/** Override TTY color detection (tests / `--json` callers). */
|
|
537
|
-
color?: boolean;
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
export interface InitNextStepsOptions {
|
|
541
|
-
/** Scaffolded project root (absolute). */
|
|
542
|
-
rootDir: string;
|
|
543
|
-
/** Directory the command ran from. */
|
|
544
|
-
cwd: string;
|
|
545
|
-
/**
|
|
546
|
-
* True when a Cursor credential resolves. When false, next steps include
|
|
547
|
-
* `login` (used for `--json` and when an interactive login attempt failed).
|
|
548
|
-
*/
|
|
549
|
-
signedIn: boolean;
|
|
550
|
-
/**
|
|
551
|
-
* True when `bdk` resolves on PATH after init linked the CLI.
|
|
552
|
-
* When false, next steps include a PATH export for `node_modules/.bin`.
|
|
553
|
-
*/
|
|
554
|
-
cliOnPath: boolean;
|
|
555
|
-
/** Override TTY color detection (tests / `--json` callers). */
|
|
556
|
-
color?: boolean;
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
export type InitSummaryOptions = InitScaffoldSummaryOptions & InitNextStepsOptions;
|
|
560
|
-
|
|
561
|
-
function initPalette(color?: boolean): TerminalPalette {
|
|
562
|
-
return color === undefined ? stdoutPalette() : makePalette(color);
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
/**
|
|
566
|
-
* Created/skipped files plus the project path. Printed before an interactive
|
|
567
|
-
* login so the scaffold is visible while the browser flow runs.
|
|
568
|
-
*/
|
|
569
|
-
export function formatInitScaffoldSummary(options: InitScaffoldSummaryOptions): string {
|
|
570
|
-
const c = initPalette(options.color);
|
|
571
|
-
const name = basename(options.rootDir);
|
|
572
|
-
const lines: string[] = [];
|
|
573
|
-
lines.push(`Initialized agent ${name}`);
|
|
574
|
-
lines.push("");
|
|
575
|
-
for (const file of options.files) {
|
|
576
|
-
// Empty-dir placeholders stay on disk but clutter the summary.
|
|
577
|
-
if (file.path.endsWith("/.gitkeep") || file.path === ".gitkeep") {
|
|
578
|
-
continue;
|
|
579
|
-
}
|
|
580
|
-
// Thor/Rails status column is 12 chars, right-aligned.
|
|
581
|
-
lines.push(c.dim(`${file.action.padStart(12)} ${file.path}`));
|
|
582
|
-
}
|
|
583
|
-
lines.push("");
|
|
584
|
-
lines.push(c.dim(`Project: ${options.rootDir}`));
|
|
585
|
-
lines.push("");
|
|
586
|
-
return `${lines.join("\n")}\n`;
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
/**
|
|
590
|
-
* Numbered next steps after scaffold (and after login when init ran it).
|
|
591
|
-
* Includes `cd` when init did not already run inside the project.
|
|
592
|
-
*/
|
|
593
|
-
export function formatInitNextSteps(options: InitNextStepsOptions): string {
|
|
594
|
-
const c = initPalette(options.color);
|
|
595
|
-
const lines: string[] = [];
|
|
596
|
-
lines.push("Next steps:");
|
|
597
|
-
lines.push("");
|
|
598
|
-
|
|
599
|
-
const steps = initNextStepEntries(options);
|
|
600
|
-
const width = Math.max(...steps.map(step => step.command.length));
|
|
601
|
-
for (const [index, step] of steps.entries()) {
|
|
602
|
-
const command =
|
|
603
|
-
step.note === undefined
|
|
604
|
-
? step.command
|
|
605
|
-
: `${step.command.padEnd(width)} ${c.dim(`# ${step.note}`)}`;
|
|
606
|
-
lines.push(` ${index + 1}. ${command}`);
|
|
607
|
-
}
|
|
608
|
-
return `${lines.join("\n")}\n`;
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
/**
|
|
612
|
-
* Full human-readable scaffold summary (scaffold + next steps).
|
|
613
|
-
*/
|
|
614
|
-
export function formatInitSummary(options: InitSummaryOptions): string {
|
|
615
|
-
return formatInitScaffoldSummary(options) + formatInitNextSteps(options);
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
/**
|
|
619
|
-
* `cd` into the scaffold when init did not already run inside it. Relative
|
|
620
|
-
* when the target sits under the invoking directory, absolute otherwise.
|
|
621
|
-
*/
|
|
622
|
-
export function formatCdCommand(cwd: string, rootDir: string): string | undefined {
|
|
623
|
-
const rel = relative(cwd, rootDir);
|
|
624
|
-
if (rel === "") {
|
|
625
|
-
return undefined;
|
|
626
|
-
}
|
|
627
|
-
const path = rel.startsWith("..") ? rootDir : rel;
|
|
628
|
-
const quoted = /\s/.test(path) ? JSON.stringify(path) : path;
|
|
629
|
-
return `cd ${quoted}`;
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
function initNextStepEntries(options: InitNextStepsOptions): Array<{
|
|
633
|
-
command: string;
|
|
634
|
-
note?: string;
|
|
635
|
-
}> {
|
|
636
|
-
const steps: Array<{ command: string; note?: string }> = [];
|
|
637
|
-
const cd = formatCdCommand(options.cwd, options.rootDir);
|
|
638
|
-
if (cd !== undefined) {
|
|
639
|
-
steps.push({ command: cd });
|
|
640
|
-
}
|
|
641
|
-
if (!options.signedIn) {
|
|
642
|
-
const login = options.cliOnPath ? `${CLI_COMMAND_NAME} login` : `npx ${PACKAGE_NAME} login`;
|
|
643
|
-
steps.push({
|
|
644
|
-
command: login,
|
|
645
|
-
note: "connect your Cursor account (powers model turns)",
|
|
646
|
-
});
|
|
647
|
-
}
|
|
648
|
-
const dev = options.cliOnPath ? `${CLI_COMMAND_NAME} dev` : `npx ${PACKAGE_NAME} dev`;
|
|
649
|
-
steps.push({
|
|
650
|
-
command: dev,
|
|
651
|
-
note: "start the local playground",
|
|
652
|
-
});
|
|
653
|
-
return steps;
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
/**
|
|
657
|
-
* Next-step commands for the `--json` scaffold summary (login omitted when
|
|
658
|
-
* the host already has a Cursor credential).
|
|
659
|
-
*/
|
|
660
|
-
export function initNextCommands(options: {
|
|
661
|
-
rootDir: string;
|
|
662
|
-
cwd: string;
|
|
663
|
-
signedIn: boolean;
|
|
664
|
-
cliOnPath: boolean;
|
|
665
|
-
}): string[] {
|
|
666
|
-
return initNextStepEntries(options).map(step => step.command);
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
/**
|
|
670
|
-
* Coding-agent setup guide printed by `bdk init`
|
|
671
|
-
* with no target directory (does not scaffold).
|
|
672
|
-
*/
|
|
673
|
-
export function printInitGuide(): void {
|
|
674
|
-
process.stdout.write(`${CLI_COMMAND_NAME} — coding agent setup
|
|
675
|
-
|
|
676
|
-
Scaffold a project, then open the playground:
|
|
677
|
-
npx ${PACKAGE_NAME} init ./my-agent # installs deps + links bdk onto PATH
|
|
678
|
-
npx ${PACKAGE_NAME} init ./my-demo --template demo # record a PR walkthrough
|
|
679
|
-
npx ${PACKAGE_NAME} init ./grokbot --template grokbot-agents # talk to Grok Bot agents
|
|
680
|
-
npx ${PACKAGE_NAME} init ./code-wiki --template code-wiki # keep wiki pages current after merge
|
|
681
|
-
npx ${PACKAGE_NAME} init ./agents-md --template agents-md # keep AGENTS.md current from last week's PRs and Slack
|
|
682
|
-
npx ${PACKAGE_NAME} init ./my-reviewer --template security-reviewer # review PRs for security bugs
|
|
683
|
-
npx ${PACKAGE_NAME} init ./thermo-review --template thermo-review # review PRs for bugs and breakage
|
|
684
|
-
npx ${PACKAGE_NAME} init ./thermo-quality --template thermo-quality-review # review PRs for code quality
|
|
685
|
-
npx ${PACKAGE_NAME} init ./security-help --template security-help # answer security questions in Slack
|
|
686
|
-
npx ${PACKAGE_NAME} init ./my-triage --template triage-linear # comment on Linear issues
|
|
687
|
-
npx ${PACKAGE_NAME} init ./my-triage --template triage-jira # comment on Jira issues
|
|
688
|
-
npx ${PACKAGE_NAME} init ./my-owners --template agentic-owners # review PRs via owners policies
|
|
689
|
-
# TTY asks the template's questions. Scripts pass --var:
|
|
690
|
-
# --var repos=acme/widgets,acme/api
|
|
691
|
-
# --var agents="Plan Keeper, Chief of Staff"
|
|
692
|
-
cd ./my-agent && ${CLI_COMMAND_NAME} dev # or: npx ${PACKAGE_NAME} dev
|
|
693
|
-
|
|
694
|
-
Recommended loop once the project exists (from the project directory):
|
|
695
|
-
1. Edit bot/ + tools under bot/tools/
|
|
696
|
-
2. ${CLI_COMMAND_NAME} info --dir . --json
|
|
697
|
-
3. ${CLI_COMMAND_NAME} run --dir . --message "..."
|
|
698
|
-
4. ${CLI_COMMAND_NAME} eval --dir .
|
|
699
|
-
|
|
700
|
-
Evals:
|
|
701
|
-
Create evals/**/*.eval.ts using defineEval from ${PACKAGE_NAME}/evals
|
|
702
|
-
Case id is the path: evals/weather/nyc.eval.ts → weather/nyc
|
|
703
|
-
Required: evals/evals.config.ts with defineEvalConfig({ maxConcurrency })
|
|
704
|
-
(hard-capped at 200 due to model provider request limits)
|
|
705
|
-
Run: ${CLI_COMMAND_NAME} eval [--json] [evalId...]
|
|
706
|
-
(pass --prod to run against the hosted deployment)
|
|
707
|
-
|
|
708
|
-
The scaffold writes AGENTS.md (coding-agent loop for this project).
|
|
709
|
-
See AGENTS.md in the ${PACKAGE_NAME} package for the framework loop.
|
|
710
|
-
`);
|
|
711
|
-
}
|