@cursor/bdk 0.2.8 → 0.2.10
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/artifacts.js +3 -5
- package/dist/bin/agent-serve.d.ts +1 -0
- package/dist/bin/agent-serve.d.ts.map +1 -1
- package/dist/bin/agent-serve.js +820 -807
- package/dist/channels/bitbucket/api.js +305 -321
- package/dist/channels/bitbucket/binding.js +97 -61
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
- package/dist/channels/bitbucket/checks.js +9 -21
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/defaults.js +14 -4
- package/dist/channels/bitbucket/events.js +1 -2
- package/dist/channels/bitbucket/index.d.ts +6 -2
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +6 -2
- package/dist/channels/bitbucket/replay.js +80 -56
- package/dist/channels/bitbucket/state.js +16 -7
- package/dist/channels/bitbucket/types.d.ts +11 -2
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/checks.js +18 -28
- package/dist/channels/deployments/deployments-channel.js +26 -34
- package/dist/channels/github/api.js +216 -210
- package/dist/channels/github/auth.d.ts +5 -1
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +157 -174
- package/dist/channels/github/binding.js +48 -39
- package/dist/channels/github/checks.js +9 -14
- package/dist/channels/github/cursor-account.js +6 -11
- package/dist/channels/github/defaults.js +105 -130
- package/dist/channels/github/forward.js +13 -17
- package/dist/channels/github/github-channel.d.ts +43 -2
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +1228 -958
- package/dist/channels/github/progress.js +145 -146
- package/dist/channels/github/replay.js +30 -39
- package/dist/channels/github/state.js +40 -16
- package/dist/channels/github/types.d.ts +30 -6
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +100 -114
- package/dist/channels/gitlab/binding.js +52 -33
- package/dist/channels/gitlab/checks.js +28 -29
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/defaults.js +9 -3
- package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +95 -42
- package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +282 -249
- package/dist/channels/gitlab/index.d.ts +6 -2
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +6 -2
- package/dist/channels/gitlab/replay.js +50 -27
- package/dist/channels/gitlab/state.js +14 -6
- package/dist/channels/gitlab/types.d.ts +13 -2
- package/dist/channels/gitlab/types.d.ts.map +1 -1
- package/dist/channels/origin/api.js +100 -116
- package/dist/channels/origin/binding.js +15 -16
- package/dist/channels/origin/checks.js +30 -28
- package/dist/channels/origin/defaults.js +50 -65
- package/dist/channels/origin/origin-channel.js +266 -272
- package/dist/channels/origin/origin-webhook.js +70 -88
- package/dist/channels/origin/reactions.js +9 -21
- package/dist/channels/origin/state.js +13 -5
- package/dist/channels/slack/agentic-delivery.js +426 -478
- package/dist/channels/slack/agentic-posted.js +9 -10
- package/dist/channels/slack/agentic-signals.js +2 -3
- package/dist/channels/slack/api.js +417 -427
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/assistant.js +37 -47
- package/dist/channels/slack/attachments.js +188 -206
- package/dist/channels/slack/auth.js +8 -6
- package/dist/channels/slack/bot-mentions.js +31 -45
- package/dist/channels/slack/channel-watch.js +42 -48
- package/dist/channels/slack/cli-project.js +112 -137
- package/dist/channels/slack/code-fences.js +3 -5
- package/dist/channels/slack/constants.js +2 -2
- package/dist/channels/slack/credentials.js +23 -38
- package/dist/channels/slack/defaults.js +292 -331
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +533 -460
- package/dist/channels/slack/doctor.js +200 -214
- package/dist/channels/slack/eval-directive.js +79 -96
- package/dist/channels/slack/event-id-dedupe.js +1 -1
- package/dist/channels/slack/external-policy.js +26 -39
- package/dist/channels/slack/footer.js +28 -41
- package/dist/channels/slack/inbound.d.ts +1 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +50 -31
- package/dist/channels/slack/init.d.ts +1 -5
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +42 -59
- package/dist/channels/slack/interactive.d.ts +9 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +160 -162
- package/dist/channels/slack/links.js +1 -2
- package/dist/channels/slack/live-delivery.js +172 -190
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +44 -23
- package/dist/channels/slack/message-body.js +2 -2
- package/dist/channels/slack/nudge-carrier.js +30 -42
- package/dist/channels/slack/nudge-store.js +164 -191
- package/dist/channels/slack/paint-start.js +66 -81
- package/dist/channels/slack/placeholder.js +123 -152
- package/dist/channels/slack/pr-ref.js +1 -1
- package/dist/channels/slack/progress-delivery.js +65 -78
- package/dist/channels/slack/reasoning-card.js +36 -49
- package/dist/channels/slack/recording-sink.js +12 -24
- package/dist/channels/slack/reply-options.js +7 -12
- package/dist/channels/slack/self-identity.js +27 -35
- package/dist/channels/slack/sender-name.d.ts +12 -3
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +57 -61
- package/dist/channels/slack/setup.js +2 -4
- package/dist/channels/slack/slack-channel.d.ts +6 -4
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +441 -308
- package/dist/channels/slack/socket-mode.js +38 -52
- package/dist/channels/slack/thread-context.js +143 -160
- package/dist/channels/slack/tool-approval-events.js +149 -166
- package/dist/channels/slack/tool-cards.js +6 -11
- package/dist/channels/slack/tool-chip.js +1 -2
- package/dist/channels/slack/types.d.ts +15 -17
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.js +84 -97
- package/dist/channels/slack/user-info.js +27 -41
- package/dist/channels.js +9 -20
- package/dist/dashboard-session-url.js +3 -4
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.oyjtOr3W.js → app.DXI7bwox.js} +4 -4
- package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D0P6J_UJ.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.B0LY1J1h.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.dPduLUxY.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.B_Ohm21h.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.B4zcanaJ.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D9Iw21nx.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DDVwRShI.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DsYcdn1i.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.BzzQvcYp.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BMiXZ7FX.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.D_mBcLoc.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMVjWVMx.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BG-FrPv9.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CkFE1ap3.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVNnCTvY.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CDN5PR9l.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DQRUlT-i.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.CoeblYQT.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DW3ymjl0.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.BP0uN4Jw.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DVFUWEn4.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.HU-eHspv.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHNhXijY.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DkISXcO3.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CCV0fuRR.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.bgILzOoc.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CuryXC0F.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BL1Pr-wu.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BbGjvk4l.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.C4PfdldS.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.C3xD1T6X.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.CzgRAQ9c.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CA9rSWum.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B8MprgJu.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DndDwbKT.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.Zhfgwlnn.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.B6RRm6N5.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bfmz-1PN.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.gbrdNqgj.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
- package/dist/docs/assets/chunks/{theme.gpWjytMh.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bl1l7M1f.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.Dfle4U0d.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.CM_4lmvZ.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CHT5X28R.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
- package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
- package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
- package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/building-with-agents.md +2 -0
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +7 -0
- package/dist/docs/evals.html +36 -36
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +38 -38
- package/dist/docs/guides/bitbucket.md +9 -1
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +39 -39
- package/dist/docs/guides/github.md +20 -4
- package/dist/docs/guides/gitlab.html +38 -38
- package/dist/docs/guides/gitlab.md +9 -1
- 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 +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/migrate.html +66 -0
- package/dist/docs/guides/migrate.md +122 -0
- 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 +214 -6
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -38
- package/dist/docs/reference/cli.md +39 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +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/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/docs/troubleshooting.md +1 -0
- package/dist/evals/assertions.js +20 -34
- package/dist/evals/expect.js +3 -6
- package/dist/evals/judge.js +5 -8
- package/dist/evals/loaders.js +45 -62
- package/dist/evals/matchers.js +2 -3
- package/dist/evals/reporters.js +43 -67
- package/dist/evals/results.js +1 -1
- package/dist/evals/run-facts.js +5 -6
- package/dist/evals.js +27 -15
- package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +0 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +101 -130
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
- package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
- package/dist/extensions/cursor-cloud-agents/tools/list.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/list.js +9 -20
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
- package/dist/extensions/jev/extension.js +3 -3
- package/dist/extensions/jev/lib/evaluate.js +43 -60
- package/dist/extensions/jev/tools/evaluate.js +6 -17
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions.js +3 -5
- package/dist/files-backends/cursor-hosted.js +504 -523
- package/dist/files-backends/local-fs.js +72 -134
- package/dist/files.js +3 -3
- package/dist/filesystem.js +562 -861
- package/dist/index.js +16 -35
- package/dist/internal/advertise-tools.js +74 -86
- package/dist/internal/artifacts-store.js +298 -361
- package/dist/internal/as-of.js +2 -4
- package/dist/internal/authored-alias-hooks.js +6 -4
- package/dist/internal/authored-loaders.js +37 -52
- package/dist/internal/bounded-int.js +1 -2
- package/dist/internal/bounded.js +13 -24
- package/dist/internal/brand.js +1 -1
- package/dist/internal/browser-origin-guard.js +4 -4
- package/dist/internal/builtin-tools/artifacts.js +15 -27
- package/dist/internal/builtin-tools/index.js +2 -3
- package/dist/internal/builtin-tools/reminders.js +33 -52
- package/dist/internal/channel-architecture.d.ts +21 -0
- package/dist/internal/channel-architecture.d.ts.map +1 -0
- package/dist/internal/channel-architecture.js +41 -0
- package/dist/internal/channel-dispatch.js +3 -4
- package/dist/internal/channel-route-dispatch.js +40 -51
- package/dist/internal/channel-state.js +1 -1
- package/dist/internal/chat-client.js +319 -340
- package/dist/internal/cli-ax.js +1262 -1294
- package/dist/internal/cli-bitbucket.js +244 -272
- package/dist/internal/cli-convert-automation.js +137 -151
- package/dist/internal/cli-cursor.js +126 -147
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1457 -1507
- package/dist/internal/cli-docs.js +130 -147
- package/dist/internal/cli-github.js +437 -476
- package/dist/internal/cli-gitlab.js +259 -288
- package/dist/internal/cli-images.js +266 -334
- package/dist/internal/cli-manifest.js +25 -37
- package/dist/internal/cli-mcp-oauth.js +228 -247
- package/dist/internal/cli-mcp.js +358 -383
- package/dist/internal/cli-migrate.d.ts +18 -0
- package/dist/internal/cli-migrate.d.ts.map +1 -0
- package/dist/internal/cli-migrate.js +136 -0
- package/dist/internal/cli-skills.js +35 -47
- package/dist/internal/cli-slack-manual.d.ts +0 -1
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +175 -204
- package/dist/internal/cli-slack.d.ts +1 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +416 -456
- package/dist/internal/cloud-merge.js +7 -3
- package/dist/internal/cloud-turn-cost.js +8 -1
- package/dist/internal/connection-env.js +5 -6
- package/dist/internal/continuation-channel.js +10 -7
- package/dist/internal/continuation-identity.js +85 -67
- package/dist/internal/conversation-mirror.js +112 -131
- package/dist/internal/convert-automation/convert-workflow.js +21 -31
- package/dist/internal/cron.js +3 -3
- package/dist/internal/cursor/account-mcp.js +147 -146
- package/dist/internal/cursor/backend-client.js +290 -320
- package/dist/internal/cursor/bound-secret-file.js +3 -3
- package/dist/internal/cursor/credentials.d.ts +1 -0
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +130 -142
- package/dist/internal/cursor/cursor-api-transport.js +4 -8
- package/dist/internal/cursor/github-credentials.js +91 -108
- package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +5 -9
- package/dist/internal/cursor/session-token.js +36 -48
- package/dist/internal/cursor/store-api-client.js +77 -92
- package/dist/internal/cursor-account-mcp-auth.js +132 -149
- package/dist/internal/cursor-agent-template.js +1 -1
- package/dist/internal/cursor-deployment-relay.js +33 -54
- package/dist/internal/cursor-event-relay.js +65 -59
- package/dist/internal/cursor-relay-core.js +258 -286
- package/dist/internal/deferred-channel-session.js +3 -12
- package/dist/internal/deploy-client.js +410 -475
- package/dist/internal/deploy-manifest.d.ts +17 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +71 -21
- package/dist/internal/deploy-source.js +31 -43
- package/dist/internal/discovery/agent-config.js +45 -59
- package/dist/internal/discovery/agent.js +276 -280
- package/dist/internal/discovery/channels.js +67 -80
- package/dist/internal/discovery/connections.js +286 -296
- package/dist/internal/discovery/context.js +2 -13
- package/dist/internal/discovery/cursor-plugin.js +223 -259
- package/dist/internal/discovery/extension-overlay.js +104 -131
- package/dist/internal/discovery/extensions.js +276 -281
- package/dist/internal/discovery/fs.js +56 -79
- package/dist/internal/discovery/hooks.js +39 -50
- package/dist/internal/discovery/info.js +17 -19
- package/dist/internal/discovery/instructions.js +58 -71
- package/dist/internal/discovery/modules.js +45 -58
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +192 -215
- package/dist/internal/discovery/reminders.js +41 -52
- package/dist/internal/discovery/runtime.js +1 -1
- package/dist/internal/discovery/schedules.js +71 -82
- package/dist/internal/discovery/seed-files.js +21 -32
- package/dist/internal/discovery/services.js +74 -96
- package/dist/internal/discovery/skills.js +77 -94
- package/dist/internal/discovery/subagent.js +79 -95
- package/dist/internal/discovery/tools.js +12 -23
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +30 -45
- package/dist/internal/duration.js +1 -1
- package/dist/internal/env-file.js +48 -64
- package/dist/internal/eval-judge-model.js +17 -28
- package/dist/internal/eval-run-store.js +265 -254
- package/dist/internal/eval-runner.d.ts +8 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +406 -408
- package/dist/internal/eval-transport.d.ts +24 -0
- package/dist/internal/eval-transport.d.ts.map +1 -0
- package/dist/internal/eval-transport.js +22 -0
- package/dist/internal/evals-client.js +242 -246
- package/dist/internal/event-log.js +72 -120
- package/dist/internal/event-mapper.js +30 -31
- package/dist/internal/factory-resource-channel.js +16 -30
- package/dist/internal/filesystem/errors.js +6 -6
- package/dist/internal/filesystem/format.js +10 -13
- package/dist/internal/filesystem/merge.js +52 -94
- package/dist/internal/filesystem/nearest.js +15 -27
- package/dist/internal/filesystem/scratch.js +65 -85
- package/dist/internal/filesystem/tools.js +221 -241
- package/dist/internal/filesystem/walk.js +76 -143
- package/dist/internal/framework-file-storage.js +118 -139
- package/dist/internal/framework-storage-selection.js +21 -13
- package/dist/internal/frontmatter.js +4 -6
- package/dist/internal/github-fanout.js +50 -64
- package/dist/internal/guest-network.js +96 -109
- package/dist/internal/handleAgentServeTrigger.js +121 -126
- package/dist/internal/host-files.js +73 -88
- package/dist/internal/host-kv.js +21 -36
- package/dist/internal/host-otel.js +22 -19
- package/dist/internal/host-platforms.js +49 -63
- package/dist/internal/hosted-catch-protocol.d.ts +1 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +1 -0
- package/dist/internal/hosted-catch.d.ts +5 -3
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +84 -93
- package/dist/internal/hosted-delivery-protocol.js +32 -8
- package/dist/internal/hosted-delivery.d.ts +13 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +614 -584
- package/dist/internal/hosted-eval-cases.d.ts +21 -0
- package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
- package/dist/internal/hosted-eval-cases.js +162 -0
- package/dist/internal/hosted-execution-diag.js +38 -30
- package/dist/internal/hosted-execution-flush.js +75 -66
- package/dist/internal/hosted-execution-latency.js +16 -8
- package/dist/internal/hosted-managed-automation.js +2 -2
- package/dist/internal/hosting.js +2 -3
- package/dist/internal/http-channel-define.js +4 -1
- package/dist/internal/http-channel.js +101 -112
- package/dist/internal/http-control-plane-session.d.ts +18 -1
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +66 -32
- package/dist/internal/incoming-headers-to-fetch.js +1 -2
- package/dist/internal/init-interview.js +73 -93
- package/dist/internal/init-project.js +182 -214
- package/dist/internal/init-scaffold.js +10 -21
- package/dist/internal/inline-stdio-mcp.js +80 -86
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +238 -274
- package/dist/internal/legacy-command-guard.js +18 -31
- package/dist/internal/listen-port.js +34 -45
- package/dist/internal/local-control-plane.js +293 -307
- package/dist/internal/local-env.js +1 -1
- package/dist/internal/local-ingress.js +15 -9
- package/dist/internal/log-ring.js +1 -2
- package/dist/internal/logs-client.js +207 -227
- package/dist/internal/map-pool.js +24 -38
- package/dist/internal/mcp-endpoint.js +204 -180
- package/dist/internal/mcp-host.js +165 -168
- package/dist/internal/mcp-oauth-on-demand.js +170 -207
- package/dist/internal/mcp-oauth-persist.js +15 -29
- package/dist/internal/mcp-oauth.js +209 -266
- package/dist/internal/named-webhook-secret.d.ts +39 -0
- package/dist/internal/named-webhook-secret.d.ts.map +1 -0
- package/dist/internal/named-webhook-secret.js +47 -0
- package/dist/internal/open-browser.js +2 -3
- package/dist/internal/otel/collector.js +104 -68
- package/dist/internal/otel/config.js +24 -37
- package/dist/internal/otel/http.js +5 -7
- package/dist/internal/otel/mcp.js +3 -12
- package/dist/internal/otel/runtime.js +69 -83
- package/dist/internal/package-inline-stdio.js +57 -65
- package/dist/internal/peer-connections.js +9 -5
- package/dist/internal/platform-schedule-sync.js +39 -54
- package/dist/internal/platform-timers.js +176 -210
- package/dist/internal/playground/static.js +1 -2
- package/dist/internal/playground/toolchain.js +37 -53
- package/dist/internal/playground-proxy.js +230 -270
- package/dist/internal/process-memory-telemetry.js +33 -51
- package/dist/internal/prompt-context.js +3 -6
- package/dist/internal/reminder-control-plane-protocol.js +46 -13
- package/dist/internal/reminder-runner.js +770 -785
- package/dist/internal/reminder-schedule.js +1 -1
- package/dist/internal/reminder-store.js +57 -78
- package/dist/internal/request-error-status.js +1 -3
- package/dist/internal/request-headers.js +2 -2
- package/dist/internal/resolve-prod-target.js +119 -135
- package/dist/internal/resolved-connections.js +16 -6
- package/dist/internal/run-client.js +221 -229
- package/dist/internal/runtime-dispatch-runner.js +18 -43
- package/dist/internal/schedule-runner.js +49 -58
- package/dist/internal/scm/pr-url.js +7 -6
- package/dist/internal/sdk-runner.js +388 -363
- package/dist/internal/serve-restart.js +26 -39
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1283 -1244
- package/dist/internal/session-cost.js +7 -9
- package/dist/internal/session-engine.d.ts +3 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +2801 -2777
- package/dist/internal/session-links.js +12 -16
- package/dist/internal/session-run-log.js +134 -82
- package/dist/internal/session-store.js +133 -164
- package/dist/internal/sessions-client.js +97 -118
- package/dist/internal/skill-catalog.js +18 -23
- package/dist/internal/skills-sync.js +16 -30
- package/dist/internal/slack-provision-client.js +90 -116
- package/dist/internal/start-log-store.js +48 -67
- package/dist/internal/steering.js +1 -2
- package/dist/internal/storage-coordinator.js +160 -196
- package/dist/internal/store-mirror.js +16 -30
- package/dist/internal/stream-progress.js +6 -8
- package/dist/internal/terminal-style.js +3 -4
- package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
- package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
- package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
- package/dist/internal/tool-catalog.js +11 -5
- package/dist/internal/tool-result.js +1 -1
- package/dist/internal/trajectory.js +19 -22
- package/dist/internal/turn-cost.js +52 -62
- package/dist/internal/turn-governor.js +5 -8
- package/dist/internal/turn-lease-store.js +85 -105
- package/dist/internal/turn-outbox.js +28 -43
- package/dist/internal/update-check.js +231 -259
- package/dist/internal/v2-hosting.js +1 -2
- package/dist/internal/workspace-sync.js +25 -41
- package/dist/internal/workspace.js +111 -139
- package/dist/kv/memory-kv.js +27 -51
- package/dist/memory.js +106 -148
- package/dist/otel.js +5 -8
- package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
- package/dist/playground/assets/{index-MijLHTbB.js → index-JekUQERK.js} +45 -45
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +2 -4
- package/dist/storage-backends/cursor-hosted-v2.js +53 -83
- package/dist/storage-backends/cursor-hosted.js +105 -145
- package/dist/storage-backends/file-kv.js +100 -128
- package/dist/storage-protocol.js +3 -5
- package/dist/storage.js +17 -26
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -18
- package/docs/building-with-agents.md +2 -0
- package/docs/deployment.md +7 -0
- package/docs/guides/bitbucket.md +9 -1
- package/docs/guides/github.md +20 -4
- package/docs/guides/gitlab.md +9 -1
- package/docs/guides/migrate.md +127 -0
- package/docs/reference/cli.md +39 -0
- package/docs/troubleshooting.md +1 -0
- package/package.json +1 -1
- package/skills/debug/SKILL.md +1 -0
- package/skills/github/SKILL.md +23 -0
- package/skills/migrate-v2/SKILL.md +264 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +0 -1
- package/dist/docs/assets/chunks/channel.CRUyWDV-.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +0 -1
- package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +0 -162
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
- package/dist/playground/assets/index-DPKLl4C_.css +0 -1
- /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
- /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
|
@@ -11,201 +11,187 @@
|
|
|
11
11
|
* Production should set App credentials and omit ambient PATs. Local testing
|
|
12
12
|
* can keep using a PAT or `gh auth login` when App creds are unset.
|
|
13
13
|
*/
|
|
14
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
14
|
import { execFile } from "node:child_process";
|
|
24
15
|
import { promisify } from "node:util";
|
|
25
16
|
import { createAppAuth } from "@octokit/auth-app";
|
|
17
|
+
import { isSecretRef } from "../../types.js";
|
|
26
18
|
const execFileAsync = promisify(execFile);
|
|
27
19
|
let ghAuthTokenCache = null;
|
|
28
|
-
const GH_AUTH_CACHE_MS = 5 *
|
|
20
|
+
const GH_AUTH_CACHE_MS = 5 * 60_000;
|
|
29
21
|
/** Refresh exported `GH_TOKEN` before installation tokens expire (~60m). */
|
|
30
|
-
const GH_CLI_TOKEN_REFRESH_MS = 50 *
|
|
22
|
+
const GH_CLI_TOKEN_REFRESH_MS = 50 * 60_000;
|
|
31
23
|
let ghCliTokenRefreshTimer = null;
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a credential value: a literal, a lazy getter, or a named secret
|
|
26
|
+
* read from `process.env` (locally the shell; hosted, the bound deployment
|
|
27
|
+
* secrets the runtime loads into the environment per request).
|
|
28
|
+
*/
|
|
29
|
+
export async function resolveCredentialValue(value) {
|
|
30
|
+
if (value === undefined) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
const resolved = typeof value === "function"
|
|
34
|
+
? await value()
|
|
35
|
+
: isSecretRef(value)
|
|
36
|
+
? process.env[value.secretName]
|
|
37
|
+
: value;
|
|
38
|
+
if (typeof resolved !== "string") {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
const trimmed = resolved.trim();
|
|
42
|
+
return trimmed === "" ? undefined : trimmed;
|
|
45
43
|
}
|
|
46
44
|
/** True when App id + private key are configured (credentials or env). */
|
|
47
|
-
export function hasGitHubAppCredentials(credentials) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
});
|
|
45
|
+
export async function hasGitHubAppCredentials(credentials) {
|
|
46
|
+
try {
|
|
47
|
+
await resolveGitHubAppId(credentials?.appId);
|
|
48
|
+
await resolveGitHubPrivateKey(credentials?.privateKey);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
58
54
|
}
|
|
59
55
|
/**
|
|
60
56
|
* Resolve an installation id from the call site, then
|
|
61
57
|
* `GITHUB_APP_INSTALLATION_ID` (host / non-webhook GitHub calls).
|
|
62
58
|
*/
|
|
63
|
-
export function resolveGitHubInstallationId(installationId) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return Number(fromEnv);
|
|
76
|
-
});
|
|
59
|
+
export async function resolveGitHubInstallationId(installationId) {
|
|
60
|
+
if (installationId !== undefined && Number.isInteger(installationId) && installationId > 0) {
|
|
61
|
+
return installationId;
|
|
62
|
+
}
|
|
63
|
+
const fromEnv = await resolveCredentialValue(process.env.GITHUB_APP_INSTALLATION_ID);
|
|
64
|
+
if (fromEnv === undefined) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
if (!/^[1-9][0-9]*$/u.test(fromEnv)) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
return Number(fromEnv);
|
|
77
71
|
}
|
|
78
72
|
/**
|
|
79
73
|
* Resolve a bearer token for GitHub REST calls. Prefer explicit credentials,
|
|
80
74
|
* then App installation tokens when configured, then local PAT / `gh auth`.
|
|
81
75
|
*/
|
|
82
|
-
export function resolveGitHubAccessToken(input) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
throw new Error("githubChannel: no GitHub token available (set GITHUB_APP_ID + GITHUB_APP_PRIVATE_KEY + installation id, or GITHUB_TOKEN / GH_TOKEN, or run `gh auth login`).");
|
|
108
|
-
});
|
|
76
|
+
export async function resolveGitHubAccessToken(input) {
|
|
77
|
+
const explicit = (await resolveCredentialValue(input.credentials?.token)) ??
|
|
78
|
+
(await resolveCredentialValue(input.credentials?.installationToken));
|
|
79
|
+
if (explicit !== undefined) {
|
|
80
|
+
return explicit;
|
|
81
|
+
}
|
|
82
|
+
const installationId = await resolveGitHubInstallationId(input.installationId);
|
|
83
|
+
if (installationId !== undefined && (await hasGitHubAppCredentials(input.credentials))) {
|
|
84
|
+
return createGitHubInstallationToken({
|
|
85
|
+
api: input.api,
|
|
86
|
+
appId: input.credentials?.appId,
|
|
87
|
+
installationId,
|
|
88
|
+
privateKey: input.credentials?.privateKey,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
const fromEnv = (await resolveCredentialValue(process.env.GITHUB_TOKEN)) ??
|
|
92
|
+
(await resolveCredentialValue(process.env.GH_TOKEN));
|
|
93
|
+
if (fromEnv !== undefined) {
|
|
94
|
+
return fromEnv;
|
|
95
|
+
}
|
|
96
|
+
const fromGh = await tryResolveGhAuthToken();
|
|
97
|
+
if (fromGh !== undefined) {
|
|
98
|
+
return fromGh;
|
|
99
|
+
}
|
|
100
|
+
throw new Error("githubChannel: no GitHub token available (set GITHUB_APP_ID + GITHUB_APP_PRIVATE_KEY + installation id, or GITHUB_TOKEN / GH_TOKEN, or run `gh auth login`).");
|
|
109
101
|
}
|
|
110
102
|
/** Soft resolve — returns undefined instead of throwing. */
|
|
111
|
-
export function tryResolveGitHubAccessToken(input) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
});
|
|
103
|
+
export async function tryResolveGitHubAccessToken(input) {
|
|
104
|
+
try {
|
|
105
|
+
return await resolveGitHubAccessToken(input);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
120
110
|
}
|
|
121
111
|
/** Read `gh auth token` when the CLI is logged in. Cached briefly. */
|
|
122
|
-
export function tryResolveGhAuthToken() {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (token === "") {
|
|
134
|
-
return undefined;
|
|
135
|
-
}
|
|
136
|
-
ghAuthTokenCache = {
|
|
137
|
-
token,
|
|
138
|
-
expiresAtMs: Date.now() + GH_AUTH_CACHE_MS,
|
|
139
|
-
};
|
|
140
|
-
return token;
|
|
141
|
-
}
|
|
142
|
-
catch (_a) {
|
|
112
|
+
export async function tryResolveGhAuthToken() {
|
|
113
|
+
if (ghAuthTokenCache !== null && Date.now() < ghAuthTokenCache.expiresAtMs) {
|
|
114
|
+
return ghAuthTokenCache.token;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const { stdout } = await execFileAsync("gh", ["auth", "token"], {
|
|
118
|
+
timeout: 5_000,
|
|
119
|
+
env: process.env,
|
|
120
|
+
});
|
|
121
|
+
const token = stdout.trim();
|
|
122
|
+
if (token === "") {
|
|
143
123
|
return undefined;
|
|
144
124
|
}
|
|
145
|
-
|
|
125
|
+
ghAuthTokenCache = {
|
|
126
|
+
token,
|
|
127
|
+
expiresAtMs: Date.now() + GH_AUTH_CACHE_MS,
|
|
128
|
+
};
|
|
129
|
+
return token;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
146
134
|
}
|
|
147
|
-
export function resolveGitHubAppId(appId) {
|
|
148
|
-
|
|
149
|
-
|
|
135
|
+
export async function resolveGitHubAppId(appId) {
|
|
136
|
+
const source = appId ??
|
|
137
|
+
(process.env.GITHUB_APP_ID !== undefined && process.env.GITHUB_APP_ID !== ""
|
|
150
138
|
? process.env.GITHUB_APP_ID
|
|
151
139
|
: undefined);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
});
|
|
140
|
+
if (source === undefined) {
|
|
141
|
+
throw new Error("githubChannel: GITHUB_APP_ID is required.");
|
|
142
|
+
}
|
|
143
|
+
if (typeof source === "number") {
|
|
144
|
+
return String(source);
|
|
145
|
+
}
|
|
146
|
+
const value = await resolveCredentialValue(source);
|
|
147
|
+
if (value === undefined) {
|
|
148
|
+
throw new Error("githubChannel: GITHUB_APP_ID is required.");
|
|
149
|
+
}
|
|
150
|
+
return value;
|
|
164
151
|
}
|
|
165
|
-
export function resolveGitHubPrivateKey(privateKey) {
|
|
166
|
-
|
|
167
|
-
|
|
152
|
+
export async function resolveGitHubPrivateKey(privateKey) {
|
|
153
|
+
const source = privateKey ??
|
|
154
|
+
(process.env.GITHUB_APP_PRIVATE_KEY !== undefined && process.env.GITHUB_APP_PRIVATE_KEY !== ""
|
|
168
155
|
? process.env.GITHUB_APP_PRIVATE_KEY
|
|
169
156
|
: undefined);
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
});
|
|
157
|
+
if (source === undefined) {
|
|
158
|
+
throw new Error("githubChannel: GITHUB_APP_PRIVATE_KEY is required.");
|
|
159
|
+
}
|
|
160
|
+
const value = await resolveCredentialValue(source);
|
|
161
|
+
if (value === undefined) {
|
|
162
|
+
throw new Error("githubChannel: GITHUB_APP_PRIVATE_KEY is required.");
|
|
163
|
+
}
|
|
164
|
+
return value.replace(/\\n/gu, "\n");
|
|
179
165
|
}
|
|
180
166
|
/**
|
|
181
167
|
* Mint an installation access token via `@octokit/auth-app`.
|
|
182
168
|
* Prefer {@link createGitHubOctokit} for normal API work — this is for
|
|
183
169
|
* callers that only need the raw token string.
|
|
184
170
|
*/
|
|
185
|
-
export function createGitHubInstallationToken(input) {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
try {
|
|
196
|
-
const result = yield auth({
|
|
197
|
-
type: "installation",
|
|
198
|
-
installationId: input.installationId,
|
|
199
|
-
});
|
|
200
|
-
return result.token;
|
|
201
|
-
}
|
|
202
|
-
catch (error) {
|
|
203
|
-
throw installationTokenMintError(error, {
|
|
204
|
-
appId,
|
|
205
|
-
installationId: input.installationId,
|
|
206
|
-
});
|
|
207
|
-
}
|
|
171
|
+
export async function createGitHubInstallationToken(input) {
|
|
172
|
+
const appId = await resolveGitHubAppId(input.appId);
|
|
173
|
+
const privateKey = await resolveGitHubPrivateKey(input.privateKey);
|
|
174
|
+
// Prefer createGitHubOctokit for API work — this path only mints a raw
|
|
175
|
+
// token. Custom fetch belongs on the Octokit client, not createAppAuth
|
|
176
|
+
// (StrategyOptions.request expects a full RequestInterface).
|
|
177
|
+
const auth = createAppAuth({
|
|
178
|
+
appId,
|
|
179
|
+
privateKey,
|
|
180
|
+
...(input.api?.apiBaseUrl === undefined ? {} : { baseUrl: input.api.apiBaseUrl }),
|
|
208
181
|
});
|
|
182
|
+
try {
|
|
183
|
+
const result = await auth({
|
|
184
|
+
type: "installation",
|
|
185
|
+
installationId: input.installationId,
|
|
186
|
+
});
|
|
187
|
+
return result.token;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
throw installationTokenMintError(error, {
|
|
191
|
+
appId,
|
|
192
|
+
installationId: input.installationId,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
209
195
|
}
|
|
210
196
|
/**
|
|
211
197
|
* Octokit's bare mint failure ("Not Found - <docs url>") names neither the
|
|
@@ -236,23 +222,20 @@ function installationTokenMintError(error, context) {
|
|
|
236
222
|
* agent-serve). Intended for serve warmup when auth source is `app`.
|
|
237
223
|
* Returns whether `GH_TOKEN` was written; refreshes on an interval.
|
|
238
224
|
*/
|
|
239
|
-
export function ensureGhCliTokenEnv() {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}
|
|
254
|
-
return true;
|
|
255
|
-
});
|
|
225
|
+
export async function ensureGhCliTokenEnv() {
|
|
226
|
+
const token = await tryResolveGitHubAccessToken({});
|
|
227
|
+
if (token === undefined) {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
process.env.GH_TOKEN = token;
|
|
231
|
+
if (ghCliTokenRefreshTimer === null) {
|
|
232
|
+
const timer = setInterval(() => {
|
|
233
|
+
void ensureGhCliTokenEnv();
|
|
234
|
+
}, GH_CLI_TOKEN_REFRESH_MS);
|
|
235
|
+
timer.unref?.();
|
|
236
|
+
ghCliTokenRefreshTimer = timer;
|
|
237
|
+
}
|
|
238
|
+
return true;
|
|
256
239
|
}
|
|
257
240
|
/** Clears in-memory caches. Intended for tests. */
|
|
258
241
|
export function clearGitHubAuthCaches() {
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Rebuild GitHub API + thread handles for inbound hooks and stream events.
|
|
3
3
|
*/
|
|
4
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
4
|
import { callGitHubApi, createGitHubCommitStatus, createGitHubIssueComment, createGitHubOctokit, createGitHubReaction, createGitHubReviewCommentReply, } from "./api.js";
|
|
14
5
|
import { createGitHubCheck } from "./checks.js";
|
|
15
6
|
/** Hidden marker on outbound GitHub comments so inbound dispatch ignores them. */
|
|
@@ -21,17 +12,22 @@ export function formatGitHubOutboundComment(body) {
|
|
|
21
12
|
return `${body.trimEnd()}\n\n${GITHUB_OUTBOUND_MARKER}`;
|
|
22
13
|
}
|
|
23
14
|
export function buildGitHubBinding(input) {
|
|
24
|
-
var _a, _b;
|
|
25
15
|
const { config, state } = input;
|
|
26
|
-
const repository =
|
|
27
|
-
|
|
16
|
+
const repository = {
|
|
17
|
+
fullName: `${state.owner}/${state.repo}`,
|
|
18
|
+
url: state.repositoryUrl ?? `https://github.com/${state.owner}/${state.repo}`,
|
|
19
|
+
owner: state.owner,
|
|
20
|
+
name: state.repo,
|
|
21
|
+
...(state.repositoryId === null ? {} : { id: state.repositoryId }),
|
|
22
|
+
};
|
|
23
|
+
const installationId = state.installationId ?? undefined;
|
|
28
24
|
let octokitPromise;
|
|
29
25
|
const getOctokit = () => {
|
|
30
|
-
octokitPromise
|
|
26
|
+
octokitPromise ??= createGitHubOctokit({
|
|
31
27
|
api: config.api,
|
|
32
28
|
credentials: config.credentials,
|
|
33
29
|
installationId,
|
|
34
|
-
})
|
|
30
|
+
});
|
|
35
31
|
return octokitPromise;
|
|
36
32
|
};
|
|
37
33
|
const github = {
|
|
@@ -49,21 +45,36 @@ export function buildGitHubBinding(input) {
|
|
|
49
45
|
});
|
|
50
46
|
},
|
|
51
47
|
createStatus(status) {
|
|
52
|
-
return createGitHubCommitStatus(
|
|
48
|
+
return createGitHubCommitStatus({
|
|
49
|
+
api: config.api,
|
|
50
|
+
credentials: config.credentials,
|
|
51
|
+
installationId,
|
|
52
|
+
owner: state.owner,
|
|
53
|
+
repo: state.repo,
|
|
54
|
+
sha: status.sha,
|
|
55
|
+
state: status.state,
|
|
56
|
+
...(status.context === undefined ? {} : { context: status.context }),
|
|
57
|
+
...(status.description === undefined ? {} : { description: status.description }),
|
|
58
|
+
...(status.targetUrl === undefined ? {} : { targetUrl: status.targetUrl }),
|
|
59
|
+
});
|
|
53
60
|
},
|
|
54
61
|
createCheck(check) {
|
|
55
|
-
return createGitHubCheck(
|
|
62
|
+
return createGitHubCheck({
|
|
63
|
+
...check,
|
|
64
|
+
github: { getOctokit },
|
|
65
|
+
owner: state.owner,
|
|
66
|
+
repo: state.repo,
|
|
67
|
+
});
|
|
56
68
|
},
|
|
57
69
|
};
|
|
58
70
|
const thread = {
|
|
59
71
|
kind: state.conversationKind,
|
|
60
72
|
post(message) {
|
|
61
|
-
var _a, _b;
|
|
62
73
|
if (state.conversationKind === "review_thread") {
|
|
63
74
|
return createGitHubReviewCommentReply({
|
|
64
75
|
api: config.api,
|
|
65
76
|
body: message,
|
|
66
|
-
commentId: requiredNumber(
|
|
77
|
+
commentId: requiredNumber(state.reviewThreadRootCommentId ?? state.reviewCommentId, "reviewThreadRootCommentId"),
|
|
67
78
|
credentials: config.credentials,
|
|
68
79
|
installationId,
|
|
69
80
|
owner: state.owner,
|
|
@@ -76,31 +87,29 @@ export function buildGitHubBinding(input) {
|
|
|
76
87
|
body: message,
|
|
77
88
|
credentials: config.credentials,
|
|
78
89
|
installationId,
|
|
79
|
-
issueNumber: requiredNumber(
|
|
90
|
+
issueNumber: requiredNumber(state.issueNumber ?? state.pullRequestNumber, "issueNumber"),
|
|
80
91
|
owner: state.owner,
|
|
81
92
|
repo: state.repo,
|
|
82
93
|
});
|
|
83
94
|
},
|
|
84
|
-
react(content) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
: "issue_comment",
|
|
103
|
-
});
|
|
95
|
+
async react(content) {
|
|
96
|
+
const commentId = state.conversationKind === "review_thread"
|
|
97
|
+
? state.reviewCommentId
|
|
98
|
+
: state.triggeringCommentId;
|
|
99
|
+
if (commentId === null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
await createGitHubReaction({
|
|
103
|
+
api: config.api,
|
|
104
|
+
commentId,
|
|
105
|
+
content,
|
|
106
|
+
credentials: config.credentials,
|
|
107
|
+
installationId,
|
|
108
|
+
owner: state.owner,
|
|
109
|
+
repo: state.repo,
|
|
110
|
+
subject: state.conversationKind === "review_thread"
|
|
111
|
+
? "pull_request_review_comment"
|
|
112
|
+
: "issue_comment",
|
|
104
113
|
});
|
|
105
114
|
},
|
|
106
115
|
};
|
|
@@ -12,15 +12,6 @@
|
|
|
12
12
|
* `contents-write` tier; GitHub App / PAT credentials need the equivalent
|
|
13
13
|
* permission. API failures are normalized into `GitHubApiError`.
|
|
14
14
|
*/
|
|
15
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
16
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
17
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
18
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
19
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
20
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
21
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
15
|
import { openCiCheck, resumeCiCheck, } from "../checks.js";
|
|
25
16
|
import { wrapOctokitError } from "./api.js";
|
|
26
17
|
/**
|
|
@@ -29,8 +20,8 @@ import { wrapOctokitError } from "./api.js";
|
|
|
29
20
|
*/
|
|
30
21
|
function githubCheckWriter(input) {
|
|
31
22
|
let checkRunId = input.checkRunId;
|
|
32
|
-
return (write) =>
|
|
33
|
-
const octokit =
|
|
23
|
+
return async (write) => {
|
|
24
|
+
const octokit = await input.github.getOctokit();
|
|
34
25
|
const base = {
|
|
35
26
|
owner: input.owner,
|
|
36
27
|
repo: input.repo,
|
|
@@ -46,7 +37,11 @@ function githubCheckWriter(input) {
|
|
|
46
37
|
throw new Error("githubChannel: cannot create a check without a sha.");
|
|
47
38
|
}
|
|
48
39
|
try {
|
|
49
|
-
const response =
|
|
40
|
+
const response = await octokit.rest.checks.create({
|
|
41
|
+
...base,
|
|
42
|
+
head_sha: input.sha,
|
|
43
|
+
started_at: write.startedAt,
|
|
44
|
+
});
|
|
50
45
|
checkRunId = response.data.id;
|
|
51
46
|
return {
|
|
52
47
|
id: response.data.id,
|
|
@@ -58,13 +53,13 @@ function githubCheckWriter(input) {
|
|
|
58
53
|
}
|
|
59
54
|
}
|
|
60
55
|
try {
|
|
61
|
-
|
|
56
|
+
await octokit.rest.checks.update({ ...base, check_run_id: checkRunId });
|
|
62
57
|
return undefined;
|
|
63
58
|
}
|
|
64
59
|
catch (error) {
|
|
65
60
|
throw wrapOctokitError(error, "PATCH", `/repos/${input.owner}/${input.repo}/check-runs/${checkRunId}`);
|
|
66
61
|
}
|
|
67
|
-
}
|
|
62
|
+
};
|
|
68
63
|
}
|
|
69
64
|
/**
|
|
70
65
|
* Create a CI check run on a commit and return a handle for later updates.
|
|
@@ -27,8 +27,6 @@ export function parseCursorGithubPermissions(value, fallback = "pr-write") {
|
|
|
27
27
|
* `--repo` / channel `{ repos }`).
|
|
28
28
|
*/
|
|
29
29
|
export function githubRepoFromOctokitRequest(request) {
|
|
30
|
-
var _a, _b;
|
|
31
|
-
var _c, _d;
|
|
32
30
|
if (typeof request.owner === "string" && typeof request.repo === "string") {
|
|
33
31
|
const slug = `${request.owner.trim()}/${request.repo.trim()}`.toLowerCase();
|
|
34
32
|
if (CURSOR_GITHUB_REPO_PATTERN.test(slug) && !slug.includes("..")) {
|
|
@@ -39,8 +37,8 @@ export function githubRepoFromOctokitRequest(request) {
|
|
|
39
37
|
return undefined;
|
|
40
38
|
}
|
|
41
39
|
const match = request.url.match(/\/repos\/([^/?#]+)\/([^/?#]+)/);
|
|
42
|
-
const owner =
|
|
43
|
-
const repo =
|
|
40
|
+
const owner = match?.[1]?.trim() ?? "";
|
|
41
|
+
const repo = match?.[2]?.trim() ?? "";
|
|
44
42
|
if (owner === "" || repo === "" || owner.includes("{") || repo.includes("{")) {
|
|
45
43
|
return undefined;
|
|
46
44
|
}
|
|
@@ -64,7 +62,6 @@ export function resolveCursorGithubCredentialScope(values, permissions = "pr-wri
|
|
|
64
62
|
return parseCursorGithubRepoScope(repos, permissions);
|
|
65
63
|
}
|
|
66
64
|
export function parseCursorGithubRepoScope(values, permissions = "pr-write") {
|
|
67
|
-
var _a;
|
|
68
65
|
const repos = [...new Set(values.map(repo => repo.trim().toLowerCase()).filter(Boolean))];
|
|
69
66
|
if (repos.length === 0) {
|
|
70
67
|
throw new Error("Cursor account GitHub credentials require at least one repository.");
|
|
@@ -77,7 +74,7 @@ export function parseCursorGithubRepoScope(values, permissions = "pr-write") {
|
|
|
77
74
|
throw new Error(`Invalid Cursor account GitHub repository "${repo}"; expected owner/repo.`);
|
|
78
75
|
}
|
|
79
76
|
}
|
|
80
|
-
const owner =
|
|
77
|
+
const owner = repos[0]?.split("/", 1)[0];
|
|
81
78
|
if (owner === undefined) {
|
|
82
79
|
throw new Error("Cursor account GitHub repository owner is missing.");
|
|
83
80
|
}
|
|
@@ -97,9 +94,8 @@ export function parseCursorGithubRepoScope(values, permissions = "pr-write") {
|
|
|
97
94
|
* post Checks API runs. `"read"` cannot post merge-box checks.
|
|
98
95
|
*/
|
|
99
96
|
export function cursorGithubPermissionsForChannel(options, authored = "pr-write") {
|
|
100
|
-
|
|
101
|
-
const
|
|
102
|
-
const commitStatus = (_a = options.progress) === null || _a === void 0 ? void 0 : _a.commitStatus;
|
|
97
|
+
const base = authored ?? "pr-write";
|
|
98
|
+
const commitStatus = options.progress?.commitStatus;
|
|
103
99
|
const wantsChecks = options.checks === true || (commitStatus !== undefined && commitStatus !== false);
|
|
104
100
|
if (!wantsChecks) {
|
|
105
101
|
return base;
|
|
@@ -142,8 +138,7 @@ export function createCursorGithubProxyHostResolver(input) {
|
|
|
142
138
|
}
|
|
143
139
|
/** Proxy transport for a resolver's credentials, when the host bound one. */
|
|
144
140
|
export function getCursorAccountGithubProxyTransport(resolver) {
|
|
145
|
-
|
|
146
|
-
return (_a = pendingByResolver.get(resolver)) === null || _a === void 0 ? void 0 : _a.getProxyTransport();
|
|
141
|
+
return pendingByResolver.get(resolver)?.getProxyTransport();
|
|
147
142
|
}
|
|
148
143
|
const pendingByResolver = new WeakMap();
|
|
149
144
|
/**
|