@cursor/july 0.1.30 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/README.md +10 -5
- package/dist/bin/agent-serve.js +4 -4
- package/dist/channels/github/index.d.ts +1 -1
- package/dist/channels/github/index.js +1 -1
- package/dist/channels/slack/bot-mentions.d.ts +1 -1
- package/dist/channels/slack/bot-mentions.d.ts.map +1 -1
- package/dist/channels/slack/bot-mentions.js +1 -1
- package/dist/channels/slack/eval-directive.js +1 -1
- package/dist/channels/slack/external-policy.d.ts +1 -1
- package/dist/channels/slack/external-policy.js +1 -1
- package/dist/channels/slack/log.d.ts +1 -1
- package/dist/channels/slack/log.js +1 -1
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/socket-mode.js +1 -1
- package/dist/docs/404.html +3 -3
- package/dist/docs/ab.html +11 -11
- package/dist/docs/assets/{ab.md.BMCZ6Hd7.js → ab.md.DAQoJ-up.js} +6 -6
- package/dist/docs/assets/{ab.md.BMCZ6Hd7.lean.js → ab.md.DAQoJ-up.lean.js} +1 -1
- package/dist/docs/assets/{app.Cm4lsMc4.js → app.DigB_9cQ.js} +1 -1
- package/dist/docs/assets/building-with-agents.md.CnHqvYDd.js +13 -0
- package/dist/docs/assets/{building-with-agents.md.CJCtZCyi.lean.js → building-with-agents.md.CnHqvYDd.lean.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CnFFl07y.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CYUFXspH.js → VPLocalSearchBox.BCMX25Bv.js} +1 -1
- package/dist/docs/assets/chunks/{theme.CTjkX9vc.js → theme.BDDWeELx.js} +2 -2
- package/dist/docs/assets/concepts.md.DFaQEFkA.js +4 -0
- package/dist/docs/assets/concepts.md.DFaQEFkA.lean.js +1 -0
- package/dist/docs/assets/deployment.md.9MYBuKM1.js +55 -0
- package/dist/docs/assets/deployment.md.9MYBuKM1.lean.js +1 -0
- package/dist/docs/assets/{evals.md.DYOjkRCX.js → evals.md.BIUoVZ6X.js} +13 -13
- package/dist/docs/assets/evals.md.BIUoVZ6X.lean.js +1 -0
- package/dist/docs/assets/{example-agents_approval-buddy.md.DFGBYLcc.js → example-agents_approval-buddy.md.BhEfleVx.js} +4 -4
- package/dist/docs/assets/{example-agents_approval-buddy.md.DFGBYLcc.lean.js → example-agents_approval-buddy.md.BhEfleVx.lean.js} +1 -1
- package/dist/docs/assets/example-agents_benny.md.2Et1qa8f.js +7 -0
- package/dist/docs/assets/{example-agents_bugbot.md.DelIdhxB.js → example-agents_bugbot.md.ByUexi5i.js} +5 -5
- package/dist/docs/assets/{example-agents_codebase-wiki.md.DC6sgwn0.js → example-agents_codebase-wiki.md.B4y-7ZVW.js} +6 -6
- package/dist/docs/assets/{example-agents_codebase-wiki.md.DC6sgwn0.lean.js → example-agents_codebase-wiki.md.B4y-7ZVW.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_codeowners-review.md.Ku_tG2RY.js → example-agents_codeowners-review.md.D6ay4nvf.js} +6 -6
- package/dist/docs/assets/{example-agents_codeowners-review.md.Ku_tG2RY.lean.js → example-agents_codeowners-review.md.D6ay4nvf.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_concierge.md.4rQTSMXt.js → example-agents_concierge.md.lL8rhYlj.js} +7 -7
- package/dist/docs/assets/{example-agents_fsd.md.CzgUrDfi.js → example-agents_fsd.md.DfNKQTHz.js} +5 -5
- package/dist/docs/assets/example-agents_index.md.DgGBwckv.js +2 -0
- package/dist/docs/assets/example-agents_index.md.DgGBwckv.lean.js +1 -0
- package/dist/docs/assets/{example-agents_knowledge-base.md.BPJiVueF.js → example-agents_knowledge-base.md.CzyZ2DCr.js} +5 -5
- package/dist/docs/assets/{example-agents_knowledge-base.md.BPJiVueF.lean.js → example-agents_knowledge-base.md.CzyZ2DCr.lean.js} +1 -1
- package/dist/docs/assets/example-agents_oncall.md.wFFXXEyW.js +10 -0
- package/dist/docs/assets/{example-agents_security-reviewer.md.Dhj_m7_B.js → example-agents_security-reviewer.md.Dkf1gyo6.js} +8 -8
- package/dist/docs/assets/example-agents_slack-agent.md.DvgvT4nn.js +5 -0
- package/dist/docs/assets/example-agents_weather-agent.md.Dmrcphhl.js +24 -0
- package/dist/docs/assets/example-agents_weather-agent.md.Dmrcphhl.lean.js +1 -0
- package/dist/docs/assets/{guides_agent-to-agent.md.Bpzgq2Pq.js → guides_agent-to-agent.md.Bmbxy-FA.js} +4 -4
- package/dist/docs/assets/guides_cloud-runtime.md.BZ2GA7Es.js +9 -0
- package/dist/docs/assets/{guides_github.md.DOOCpqsW.js → guides_github.md.R2QlpR75.js} +5 -5
- package/dist/docs/assets/{guides_human-in-the-loop.md.DlUqsp1S.js → guides_human-in-the-loop.md.BWvT7UqY.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.Dd8EgSem.js → guides_mcp-oauth.md.C7G7IykG.js} +5 -5
- package/dist/docs/assets/guides_mcp-oauth.md.C7G7IykG.lean.js +1 -0
- package/dist/docs/assets/guides_slack.md.zriQpU_9.js +47 -0
- package/dist/docs/assets/guides_slack.md.zriQpU_9.lean.js +1 -0
- package/dist/docs/assets/{guides_webhooks.md.wSOYas3X.js → guides_webhooks.md.DiAwSR42.js} +1 -1
- package/dist/docs/assets/{hillclimbing.md.DHNast08.js → hillclimbing.md.D9Y1_bYh.js} +1 -1
- package/dist/docs/assets/index.md.CZqbBJPB.js +20 -0
- package/dist/docs/assets/index.md.CZqbBJPB.lean.js +1 -0
- package/dist/docs/assets/{quickstart.md.BU6Iwi_9.js → quickstart.md.TnEXYgYW.js} +12 -12
- package/dist/docs/assets/{reference_agent-config.md.DrW2JUM8.js → reference_agent-config.md.kuN6-OxK.js} +1 -1
- package/dist/docs/assets/reference_cli.md.sD-IUWjg.js +73 -0
- package/dist/docs/assets/{reference_cli.md.ccoKOoXt.lean.js → reference_cli.md.sD-IUWjg.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.B9Q3TOve.js → reference_connections.md.DGqAsFXb.js} +3 -3
- package/dist/docs/assets/reference_http-api.md.CfVM_ICa.js +11 -0
- package/dist/docs/assets/{reference_project-layout.md.Bd_CKtNS.js → reference_project-layout.md.D8E6ZmHJ.js} +4 -4
- package/dist/docs/assets/{reference_project-layout.md.Bd_CKtNS.lean.js → reference_project-layout.md.D8E6ZmHJ.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.w_F2mXB6.js → reference_schedules.md.gmfYzf_I.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.DLd6mvbv.js → reference_sessions.md.C_ouF_uf.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.BRSDnTbN.js → reference_tools.md.BswAQM41.js} +3 -3
- package/dist/docs/assets/{scaffolding-agents.md.C3pTrmoE.js → scaffolding-agents.md.Bsr9Pwzu.js} +1 -1
- package/dist/docs/assets/{scaffolding-agents.md.C3pTrmoE.lean.js → scaffolding-agents.md.Bsr9Pwzu.lean.js} +1 -1
- package/dist/docs/assets/{storage.md.DRTdnFvd.js → storage.md.xZoiGM58.js} +3 -3
- package/dist/docs/assets/storage.md.xZoiGM58.lean.js +1 -0
- package/dist/docs/assets/troubleshooting.md.B5RVX_tL.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.CmQkmnzC.lean.js → troubleshooting.md.B5RVX_tL.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +12 -12
- package/dist/docs/concepts.html +6 -6
- package/dist/docs/deployment.html +32 -32
- package/dist/docs/evals.html +19 -19
- package/dist/docs/example-agents/approval-buddy.html +9 -9
- package/dist/docs/example-agents/benny.html +11 -11
- package/dist/docs/example-agents/bugbot.html +10 -10
- package/dist/docs/example-agents/codebase-wiki.html +11 -11
- package/dist/docs/example-agents/codeowners-review.html +11 -11
- package/dist/docs/example-agents/concierge.html +12 -12
- package/dist/docs/example-agents/fsd.html +10 -10
- package/dist/docs/example-agents/index.html +7 -7
- package/dist/docs/example-agents/knowledge-base.html +10 -10
- package/dist/docs/example-agents/oncall.html +10 -10
- package/dist/docs/example-agents/security-reviewer.html +13 -13
- package/dist/docs/example-agents/slack-agent.html +10 -10
- package/dist/docs/example-agents/weather-agent.html +16 -16
- package/dist/docs/guides/agent-to-agent.html +9 -9
- package/dist/docs/guides/cloud-runtime.html +7 -7
- package/dist/docs/guides/github.html +10 -10
- package/dist/docs/guides/human-in-the-loop.html +7 -7
- package/dist/docs/guides/mcp-oauth.html +11 -11
- package/dist/docs/guides/slack.html +22 -17
- package/dist/docs/guides/webhooks.html +7 -7
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +7 -7
- package/dist/docs/index.html +9 -9
- package/dist/docs/quickstart.html +17 -17
- package/dist/docs/reference/agent-config.html +7 -7
- package/dist/docs/reference/channels.html +5 -5
- package/dist/docs/reference/cli.html +56 -48
- package/dist/docs/reference/connections.html +9 -9
- package/dist/docs/reference/hooks.html +5 -5
- package/dist/docs/reference/http-api.html +7 -7
- package/dist/docs/reference/instructions.html +5 -5
- package/dist/docs/reference/playground.html +5 -5
- package/dist/docs/reference/project-layout.html +9 -9
- package/dist/docs/reference/prompt.html +5 -5
- package/dist/docs/reference/schedules.html +7 -7
- package/dist/docs/reference/sessions.html +8 -8
- package/dist/docs/reference/skills.html +5 -5
- package/dist/docs/reference/subagents.html +5 -5
- package/dist/docs/reference/tools.html +9 -9
- package/dist/docs/scaffolding-agents.html +6 -6
- package/dist/docs/storage.html +9 -9
- package/dist/docs/troubleshooting.html +6 -6
- package/dist/evals/reporters.d.ts +1 -1
- package/dist/evals/reporters.js +1 -1
- package/dist/evals.d.ts +2 -2
- package/dist/files-backends/agent-store-presigned-url.d.ts +100 -0
- package/dist/files-backends/agent-store-presigned-url.d.ts.map +1 -0
- package/dist/files-backends/agent-store-presigned-url.js +347 -0
- package/dist/files-backends/cursor-hosted.d.ts +87 -0
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -0
- package/dist/files-backends/cursor-hosted.js +540 -0
- package/dist/files-backends/local-fs.d.ts +33 -0
- package/dist/files-backends/local-fs.d.ts.map +1 -0
- package/dist/files-backends/local-fs.js +199 -0
- package/dist/files.d.ts +139 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +89 -0
- package/dist/internal/ab-collector.js +2 -2
- package/dist/internal/ab-fold.js +1 -1
- package/dist/internal/cli-ax.d.ts +2 -2
- package/dist/internal/cli-ax.js +2 -2
- package/dist/internal/cli-deploy.d.ts +1 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +7 -2
- package/dist/internal/cli-docs.d.ts +1 -1
- package/dist/internal/cli-docs.js +1 -1
- package/dist/internal/cli-github.js +13 -13
- package/dist/internal/cli-mcp-oauth.d.ts +1 -1
- package/dist/internal/cli-mcp-oauth.js +2 -2
- package/dist/internal/cli-mcp.d.ts +3 -3
- package/dist/internal/cli-mcp.js +4 -4
- package/dist/internal/cli-skills.js +1 -1
- package/dist/internal/cloud-turn-cost.d.ts +9 -1
- package/dist/internal/cloud-turn-cost.d.ts.map +1 -1
- package/dist/internal/cloud-turn-cost.js +14 -4
- package/dist/internal/cursor/account-mcp.js +5 -5
- package/dist/internal/cursor/backend-client.js +1 -1
- package/dist/internal/cursor/github-credentials.js +3 -3
- package/dist/internal/cursor-account-mcp-auth.d.ts +1 -1
- package/dist/internal/cursor-account-mcp-auth.js +1 -1
- package/dist/internal/cursor-event-relay.js +1 -1
- package/dist/internal/cursor-relay-core.d.ts +1 -1
- package/dist/internal/cursor-relay-core.d.ts.map +1 -1
- package/dist/internal/cursor-slack-relay.js +1 -1
- package/dist/internal/deploy-client.d.ts +6 -1
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +3 -2
- package/dist/internal/deploy-source.d.ts +2 -2
- package/dist/internal/deploy-source.js +2 -2
- package/dist/internal/discovery.js +2 -2
- package/dist/internal/distribution.d.ts +5 -5
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +6 -6
- package/dist/internal/docs-site.js +5 -5
- package/dist/internal/eval-run-store.js +8 -8
- package/dist/internal/evals-client.d.ts +1 -1
- package/dist/internal/evals-client.js +1 -1
- package/dist/internal/github-fanout.js +2 -2
- package/dist/internal/host-files.d.ts +29 -0
- package/dist/internal/host-files.d.ts.map +1 -0
- package/dist/internal/host-files.js +283 -0
- package/dist/internal/host-platforms.js +5 -5
- package/dist/internal/hosting.d.ts +1 -1
- package/dist/internal/hosting.js +1 -1
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +26 -0
- package/dist/internal/install-cursor-skills.d.ts +1 -1
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +33 -4
- package/dist/internal/local-control-plane.js +2 -2
- package/dist/internal/logs-client.d.ts +2 -2
- package/dist/internal/logs-client.js +2 -2
- package/dist/internal/mcp-endpoint.js +1 -1
- package/dist/internal/mcp-oauth.js +2 -2
- package/dist/internal/platform-schedule-sync.js +2 -2
- package/dist/internal/playground/toolchain.js +6 -6
- package/dist/internal/reminder-runner.js +13 -13
- package/dist/internal/resolved-connections.js +6 -6
- package/dist/internal/schedule-runner.js +1 -1
- package/dist/internal/sdk-runner.js +5 -5
- package/dist/internal/server.js +16 -16
- package/dist/internal/session-cost.d.ts +3 -2
- package/dist/internal/session-cost.d.ts.map +1 -1
- package/dist/internal/session-cost.js +7 -6
- package/dist/internal/session-engine.d.ts +31 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +119 -31
- package/dist/internal/slack-provision-client.js +1 -1
- package/dist/internal/storage-coordinator.js +7 -7
- package/dist/internal/trajectory.js +2 -2
- package/dist/internal/turn-cost.d.ts +27 -0
- package/dist/internal/turn-cost.d.ts.map +1 -0
- package/dist/internal/turn-cost.js +83 -0
- package/dist/internal/update-check.d.ts +3 -3
- package/dist/internal/update-check.d.ts.map +1 -1
- package/dist/internal/update-check.js +5 -5
- package/dist/memory.d.ts +1 -1
- package/dist/memory.js +1 -1
- package/dist/playground/assets/index-50PKeJlG.css +1 -0
- package/dist/playground/assets/index-C0f2Wl1q.js +85 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage.d.ts +1 -1
- package/dist/storage.js +1 -1
- package/dist/types.d.ts +120 -16
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +23 -23
- package/docs/ab.md +12 -12
- package/docs/building-with-agents.md +9 -9
- package/docs/concepts.md +11 -11
- package/docs/deployment.md +55 -43
- package/docs/evals.md +20 -20
- package/docs/example-agents/approval-buddy.md +9 -9
- package/docs/example-agents/benny.md +13 -13
- package/docs/example-agents/bugbot.md +6 -6
- package/docs/example-agents/codebase-wiki.md +8 -8
- package/docs/example-agents/codeowners-review.md +8 -8
- package/docs/example-agents/concierge.md +10 -10
- package/docs/example-agents/fsd.md +7 -7
- package/docs/example-agents/index.md +8 -8
- package/docs/example-agents/knowledge-base.md +9 -9
- package/docs/example-agents/oncall.md +7 -7
- package/docs/example-agents/security-reviewer.md +12 -12
- package/docs/example-agents/slack-agent.md +10 -10
- package/docs/example-agents/weather-agent.md +30 -26
- package/docs/guides/agent-to-agent.md +4 -4
- package/docs/guides/cloud-runtime.md +3 -3
- package/docs/guides/github.md +6 -6
- package/docs/guides/human-in-the-loop.md +1 -1
- package/docs/guides/mcp-oauth.md +9 -9
- package/docs/guides/slack.md +94 -21
- package/docs/guides/webhooks.md +1 -1
- package/docs/hillclimbing.md +3 -3
- package/docs/quickstart.md +18 -18
- package/docs/reference/agent-config.md +1 -1
- package/docs/reference/cli.md +110 -79
- package/docs/reference/connections.md +3 -3
- package/docs/reference/http-api.md +2 -2
- package/docs/reference/project-layout.md +7 -7
- package/docs/reference/schedules.md +1 -1
- package/docs/reference/sessions.md +7 -7
- package/docs/reference/tools.md +3 -3
- package/docs/scaffolding-agents.md +2 -2
- package/docs/storage.md +5 -5
- package/docs/troubleshooting.md +11 -10
- package/package.json +3 -1
- package/skills/ab/SKILL.md +5 -5
- package/skills/create-agent/SKILL.md +17 -17
- package/skills/debug/SKILL.md +10 -10
- package/skills/evals/SKILL.md +13 -13
- package/skills/framework-map/SKILL.md +3 -3
- package/skills/github/SKILL.md +11 -11
- package/skills/hillclimb/SKILL.md +9 -9
- package/skills/mcp-auth/SKILL.md +11 -11
- package/skills/setup-slack/SKILL.md +28 -28
- package/src/bin/agent-serve.ts +4 -4
- package/src/channels/github/index.ts +1 -1
- package/src/channels/slack/bot-mentions.ts +1 -1
- package/src/channels/slack/eval-directive.ts +1 -1
- package/src/channels/slack/external-policy.ts +1 -1
- package/src/channels/slack/log.ts +1 -1
- package/src/channels/slack/setup.ts +1 -1
- package/src/channels/slack/socket-mode.ts +1 -1
- package/src/evals/reporters.ts +1 -1
- package/src/evals.ts +2 -2
- package/src/files-backends/agent-store-presigned-url.ts +402 -0
- package/src/files-backends/cursor-hosted.ts +698 -0
- package/src/files-backends/local-fs.ts +178 -0
- package/src/files.ts +195 -0
- package/src/internal/ab-collector.ts +2 -2
- package/src/internal/ab-fold.ts +1 -1
- package/src/internal/cli-ax.ts +2 -2
- package/src/internal/cli-deploy.ts +7 -2
- package/src/internal/cli-docs.ts +1 -1
- package/src/internal/cli-github.ts +13 -13
- package/src/internal/cli-mcp-oauth.ts +2 -2
- package/src/internal/cli-mcp.ts +4 -4
- package/src/internal/cli-skills.ts +1 -1
- package/src/internal/cloud-turn-cost.ts +20 -4
- package/src/internal/cursor/account-mcp.ts +5 -5
- package/src/internal/cursor/backend-client.ts +1 -1
- package/src/internal/cursor/github-credentials.ts +3 -3
- package/src/internal/cursor-account-mcp-auth.ts +1 -1
- package/src/internal/cursor-event-relay.ts +1 -1
- package/src/internal/cursor-relay-core.ts +1 -1
- package/src/internal/cursor-slack-relay.ts +1 -1
- package/src/internal/deploy-client.ts +8 -2
- package/src/internal/deploy-source.ts +2 -2
- package/src/internal/discovery.ts +2 -2
- package/src/internal/distribution.ts +6 -6
- package/src/internal/docs-site.ts +5 -5
- package/src/internal/eval-run-store.ts +8 -8
- package/src/internal/evals-client.ts +1 -1
- package/src/internal/github-fanout.ts +2 -2
- package/src/internal/host-files.ts +372 -0
- package/src/internal/host-platforms.ts +5 -5
- package/src/internal/hosting.ts +1 -1
- package/src/internal/http-channel.ts +30 -0
- package/src/internal/install-cursor-skills.ts +31 -3
- package/src/internal/local-control-plane.ts +2 -2
- package/src/internal/logs-client.ts +2 -2
- package/src/internal/mcp-endpoint.ts +1 -1
- package/src/internal/mcp-oauth.ts +2 -2
- package/src/internal/platform-schedule-sync.ts +2 -2
- package/src/internal/playground/toolchain.ts +6 -6
- package/src/internal/reminder-runner.ts +13 -13
- package/src/internal/resolved-connections.ts +6 -6
- package/src/internal/schedule-runner.ts +1 -1
- package/src/internal/sdk-runner.ts +5 -5
- package/src/internal/server.ts +16 -16
- package/src/internal/session-cost.ts +7 -6
- package/src/internal/session-engine.ts +141 -28
- package/src/internal/slack-provision-client.ts +1 -1
- package/src/internal/storage-coordinator.ts +7 -7
- package/src/internal/trajectory.ts +2 -2
- package/src/internal/turn-cost.ts +110 -0
- package/src/internal/update-check.ts +6 -6
- package/src/memory.ts +1 -1
- package/src/storage.ts +1 -1
- package/src/types.ts +148 -16
- package/dist/docs/assets/building-with-agents.md.CJCtZCyi.js +0 -13
- package/dist/docs/assets/chunks/@localSearchIndexroot.CbQshWFK.js +0 -1
- package/dist/docs/assets/concepts.md.Cfb9b-k1.js +0 -4
- package/dist/docs/assets/concepts.md.Cfb9b-k1.lean.js +0 -1
- package/dist/docs/assets/deployment.md.TecHo0_2.js +0 -55
- package/dist/docs/assets/deployment.md.TecHo0_2.lean.js +0 -1
- package/dist/docs/assets/evals.md.DYOjkRCX.lean.js +0 -1
- package/dist/docs/assets/example-agents_benny.md.B0gjhI-p.js +0 -7
- package/dist/docs/assets/example-agents_index.md.D2PEVSXl.js +0 -2
- package/dist/docs/assets/example-agents_index.md.D2PEVSXl.lean.js +0 -1
- package/dist/docs/assets/example-agents_oncall.md.BG_sUMly.js +0 -10
- package/dist/docs/assets/example-agents_slack-agent.md.buLbgvBf.js +0 -5
- package/dist/docs/assets/example-agents_weather-agent.md.C9Qv-W0o.js +0 -24
- package/dist/docs/assets/example-agents_weather-agent.md.C9Qv-W0o.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-runtime.md.gVzabdQL.js +0 -9
- package/dist/docs/assets/guides_mcp-oauth.md.Dd8EgSem.lean.js +0 -1
- package/dist/docs/assets/guides_slack.md.CjmJSvZS.js +0 -42
- package/dist/docs/assets/guides_slack.md.CjmJSvZS.lean.js +0 -1
- package/dist/docs/assets/index.md.CH_s5uZe.js +0 -20
- package/dist/docs/assets/index.md.CH_s5uZe.lean.js +0 -1
- package/dist/docs/assets/reference_cli.md.ccoKOoXt.js +0 -65
- package/dist/docs/assets/reference_http-api.md.BncLd3PZ.js +0 -11
- package/dist/docs/assets/storage.md.DRTdnFvd.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.CmQkmnzC.js +0 -1
- package/dist/internal/model-pricing.d.ts +0 -49
- package/dist/internal/model-pricing.d.ts.map +0 -1
- package/dist/internal/model-pricing.js +0 -377
- package/dist/playground/assets/index-CquRB-l0.js +0 -85
- package/dist/playground/assets/index-Dj0bWpkn.css +0 -1
- package/src/internal/model-pricing.ts +0 -426
- /package/dist/docs/assets/{example-agents_benny.md.B0gjhI-p.lean.js → example-agents_benny.md.2Et1qa8f.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_bugbot.md.DelIdhxB.lean.js → example-agents_bugbot.md.ByUexi5i.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_concierge.md.4rQTSMXt.lean.js → example-agents_concierge.md.lL8rhYlj.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_fsd.md.CzgUrDfi.lean.js → example-agents_fsd.md.DfNKQTHz.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_oncall.md.BG_sUMly.lean.js → example-agents_oncall.md.wFFXXEyW.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_security-reviewer.md.Dhj_m7_B.lean.js → example-agents_security-reviewer.md.Dkf1gyo6.lean.js} +0 -0
- /package/dist/docs/assets/{example-agents_slack-agent.md.buLbgvBf.lean.js → example-agents_slack-agent.md.DvgvT4nn.lean.js} +0 -0
- /package/dist/docs/assets/{guides_agent-to-agent.md.Bpzgq2Pq.lean.js → guides_agent-to-agent.md.Bmbxy-FA.lean.js} +0 -0
- /package/dist/docs/assets/{guides_cloud-runtime.md.gVzabdQL.lean.js → guides_cloud-runtime.md.BZ2GA7Es.lean.js} +0 -0
- /package/dist/docs/assets/{guides_github.md.DOOCpqsW.lean.js → guides_github.md.R2QlpR75.lean.js} +0 -0
- /package/dist/docs/assets/{guides_human-in-the-loop.md.DlUqsp1S.lean.js → guides_human-in-the-loop.md.BWvT7UqY.lean.js} +0 -0
- /package/dist/docs/assets/{guides_webhooks.md.wSOYas3X.lean.js → guides_webhooks.md.DiAwSR42.lean.js} +0 -0
- /package/dist/docs/assets/{hillclimbing.md.DHNast08.lean.js → hillclimbing.md.D9Y1_bYh.lean.js} +0 -0
- /package/dist/docs/assets/{quickstart.md.BU6Iwi_9.lean.js → quickstart.md.TnEXYgYW.lean.js} +0 -0
- /package/dist/docs/assets/{reference_agent-config.md.DrW2JUM8.lean.js → reference_agent-config.md.kuN6-OxK.lean.js} +0 -0
- /package/dist/docs/assets/{reference_connections.md.B9Q3TOve.lean.js → reference_connections.md.DGqAsFXb.lean.js} +0 -0
- /package/dist/docs/assets/{reference_http-api.md.BncLd3PZ.lean.js → reference_http-api.md.CfVM_ICa.lean.js} +0 -0
- /package/dist/docs/assets/{reference_schedules.md.w_F2mXB6.lean.js → reference_schedules.md.gmfYzf_I.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.DLd6mvbv.lean.js → reference_sessions.md.C_ouF_uf.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.BRSDnTbN.lean.js → reference_tools.md.BswAQM41.lean.js} +0 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local-disk file sink: one file per key under a directory you own.
|
|
3
|
+
*
|
|
4
|
+
* The default off Cursor-managed hosting. Paths are real, so the harness can
|
|
5
|
+
* open a file with its ordinary tools — that is why this reports
|
|
6
|
+
* `materialized` — and there are no etags, so `conflictDetection` is honestly
|
|
7
|
+
* false and concurrent writers are last-writer-wins.
|
|
8
|
+
*/
|
|
9
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
19
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
20
|
+
var m = o[Symbol.asyncIterator], i;
|
|
21
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
22
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
23
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
24
|
+
};
|
|
25
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
26
|
+
var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
|
|
27
|
+
var i, p;
|
|
28
|
+
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
|
|
29
|
+
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
|
|
30
|
+
};
|
|
31
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
32
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
33
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
34
|
+
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
35
|
+
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
36
|
+
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
37
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
38
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
39
|
+
function fulfill(value) { resume("next", value); }
|
|
40
|
+
function reject(value) { resume("throw", value); }
|
|
41
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
42
|
+
};
|
|
43
|
+
import { randomUUID } from "node:crypto";
|
|
44
|
+
import { mkdir, readdir, readFile, rename, rm, stat, writeFile, } from "node:fs/promises";
|
|
45
|
+
import { join, relative, resolve, sep } from "node:path";
|
|
46
|
+
import { FilePathRejectedError, } from "../files.js";
|
|
47
|
+
/**
|
|
48
|
+
* Default sink: one file per key under the state root, written atomically.
|
|
49
|
+
*
|
|
50
|
+
* Reports `materialized` because the paths are real — that is what lets the
|
|
51
|
+
* harness read a file with its ordinary tools — and reports no `etags`, so
|
|
52
|
+
* `host.files.capabilities.conflictDetection` is honestly false and concurrent
|
|
53
|
+
* writers are last-writer-wins.
|
|
54
|
+
*/
|
|
55
|
+
export function localFiles(options) {
|
|
56
|
+
var _a;
|
|
57
|
+
const root = resolve(options.filesRoot);
|
|
58
|
+
const stripPrefix = (_a = options.stripKeyPrefix) !== null && _a !== void 0 ? _a : "";
|
|
59
|
+
const pathForKey = (key) => {
|
|
60
|
+
const rel = stripPrefix !== "" && key.startsWith(stripPrefix)
|
|
61
|
+
? key.slice(stripPrefix.length)
|
|
62
|
+
: key;
|
|
63
|
+
const candidate = resolve(root, rel);
|
|
64
|
+
const within = relative(root, candidate);
|
|
65
|
+
if (within === "" || within === ".." || within.startsWith(`..${sep}`)) {
|
|
66
|
+
throw new FilePathRejectedError(`host.files key does not resolve under the state root: ${key}`);
|
|
67
|
+
}
|
|
68
|
+
return candidate;
|
|
69
|
+
};
|
|
70
|
+
const entryFor = (key, absPath) => __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
try {
|
|
72
|
+
const info = yield stat(absPath);
|
|
73
|
+
if (!info.isFile()) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
return { key, size: info.size, mtimeMs: info.mtimeMs };
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error.code === "ENOENT") {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
capabilities: { materialized: true },
|
|
87
|
+
materializedPath: (key) => pathForKey(key),
|
|
88
|
+
put(key, body) {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
const target = pathForKey(key);
|
|
91
|
+
yield mkdir(join(target, ".."), { recursive: true });
|
|
92
|
+
// Same-directory temp + rename: a reader either sees the previous value
|
|
93
|
+
// or the whole new one, never a half-written file.
|
|
94
|
+
const tmp = join(target, "..", `.tmp-${randomUUID()}`);
|
|
95
|
+
try {
|
|
96
|
+
yield writeFile(tmp, body);
|
|
97
|
+
yield rename(tmp, target);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
yield rm(tmp, { force: true });
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
get(key) {
|
|
106
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
+
try {
|
|
108
|
+
return { body: new Uint8Array(yield readFile(pathForKey(key))) };
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const code = error.code;
|
|
112
|
+
if (code === "ENOENT" || code === "EISDIR") {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
delete(key) {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
+
yield rm(pathForKey(key), { force: true });
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
stat(key) {
|
|
125
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
126
|
+
return yield entryFor(key, pathForKey(key));
|
|
127
|
+
});
|
|
128
|
+
},
|
|
129
|
+
list(prefix) {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
var _a, e_1, _b, _c;
|
|
132
|
+
// Walk the deepest existing directory at or above the prefix, then keep
|
|
133
|
+
// the keys that actually start with it — `prefix` is a key prefix, not a
|
|
134
|
+
// directory, so `notes/sum` must match `notes/summary.md`.
|
|
135
|
+
const prefixPath = pathForKey(prefix);
|
|
136
|
+
const searchRoot = (yield isDirectory(prefixPath))
|
|
137
|
+
? prefixPath
|
|
138
|
+
: join(prefixPath, "..");
|
|
139
|
+
const out = [];
|
|
140
|
+
try {
|
|
141
|
+
for (var _d = true, _e = __asyncValues(walkFiles(searchRoot)), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
|
|
142
|
+
_c = _f.value;
|
|
143
|
+
_d = false;
|
|
144
|
+
const absPath = _c;
|
|
145
|
+
const key = `${stripPrefix}${relative(root, absPath).split(sep).join("/")}`;
|
|
146
|
+
if (!key.startsWith(prefix)) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const entry = yield entryFor(key, absPath);
|
|
150
|
+
if (entry !== undefined) {
|
|
151
|
+
out.push(entry);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
156
|
+
finally {
|
|
157
|
+
try {
|
|
158
|
+
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
|
|
159
|
+
}
|
|
160
|
+
finally { if (e_1) throw e_1.error; }
|
|
161
|
+
}
|
|
162
|
+
return out.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
|
|
163
|
+
});
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function isDirectory(absPath) {
|
|
168
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
+
try {
|
|
170
|
+
return (yield stat(absPath)).isDirectory();
|
|
171
|
+
}
|
|
172
|
+
catch (_a) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
function walkFiles(dir) {
|
|
178
|
+
return __asyncGenerator(this, arguments, function* walkFiles_1() {
|
|
179
|
+
let entries;
|
|
180
|
+
try {
|
|
181
|
+
entries = yield __await(readdir(dir, { withFileTypes: true }));
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
if (error.code === "ENOENT") {
|
|
185
|
+
return yield __await(void 0);
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
for (const entry of entries) {
|
|
190
|
+
const abs = join(dir, entry.name);
|
|
191
|
+
if (entry.isDirectory()) {
|
|
192
|
+
yield __await(yield* __asyncDelegator(__asyncValues(walkFiles(abs))));
|
|
193
|
+
}
|
|
194
|
+
else if (entry.isFile() && !entry.name.startsWith(".tmp-")) {
|
|
195
|
+
yield yield __await(abs);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The internal sink contract behind `ctx.host.files` — durable, file-shaped
|
|
3
|
+
* state that must outlive the engine process.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately **not a filesystem**: no file descriptors, no seeking, no
|
|
6
|
+
* rename, no directories as first-class objects, and no POSIX errno contract
|
|
7
|
+
* — a sink that is an HTTP API can implement all of it. The framework
|
|
8
|
+
* **mints every key** from a stable, versioned scheme (see {@link fileKeys});
|
|
9
|
+
* sinks see opaque strings and never learn which deployment or session a key
|
|
10
|
+
* belongs to, which is what keeps one deployment's files unreachable from
|
|
11
|
+
* another's.
|
|
12
|
+
*
|
|
13
|
+
* Internal for now: the authored plug-in surface (`agent/files.ts` with a
|
|
14
|
+
* `defineFiles`, mirroring `defineStorage`) is deliberately deferred so this
|
|
15
|
+
* ships as exactly the hosted connector plus the local default. When it
|
|
16
|
+
* lands, {@link FileSink} is the contract authored sinks implement.
|
|
17
|
+
*
|
|
18
|
+
* Delivery semantics differ from {@link import("./storage.js").defineStorage}
|
|
19
|
+
* on purpose. Storage is a fire-and-forget mirror of framework state, so a
|
|
20
|
+
* throwing `put` is logged and dropped. Files are author data the next turn
|
|
21
|
+
* may depend on, so {@link HostFilesApi} writes are **awaited and surface
|
|
22
|
+
* their failure** — an author who writes evidence and then delegates has to
|
|
23
|
+
* know the write did not land.
|
|
24
|
+
*/
|
|
25
|
+
/** One entry returned by {@link FileSink.list}. */
|
|
26
|
+
export interface FileSinkEntry {
|
|
27
|
+
/** Framework-minted key, as passed to {@link FileSink.put}. */
|
|
28
|
+
key: string;
|
|
29
|
+
size: number;
|
|
30
|
+
/** Last-modified epoch ms, when the sink tracks one. */
|
|
31
|
+
mtimeMs?: number;
|
|
32
|
+
/** Opaque version tag; required for `ifMatch` to be usable. */
|
|
33
|
+
etag?: string;
|
|
34
|
+
}
|
|
35
|
+
/** One stored value plus the version it was read at. */
|
|
36
|
+
export interface FileSinkBody {
|
|
37
|
+
body: Uint8Array;
|
|
38
|
+
etag?: string;
|
|
39
|
+
}
|
|
40
|
+
/** Outcome of {@link FileSink.put}. */
|
|
41
|
+
export interface FileSinkPutResult {
|
|
42
|
+
/** Version tag after the write, when the sink issues one. */
|
|
43
|
+
etag?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* What a sink can do beyond the four required calls. Absent flags are false,
|
|
47
|
+
* so the narrowest possible sink — four functions over an HTTP API — is valid
|
|
48
|
+
* and the framework degrades visibly rather than assuming.
|
|
49
|
+
*/
|
|
50
|
+
export interface FileSinkCapabilities {
|
|
51
|
+
/**
|
|
52
|
+
* `put` honors `ifMatch` and rejects a stale write. Required for
|
|
53
|
+
* {@link HostFilesApi} to report `conflictDetection`.
|
|
54
|
+
*/
|
|
55
|
+
etags?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* The sink keeps a local copy at {@link FileSink.materializedPath} that the
|
|
58
|
+
* harness can read with ordinary file tools.
|
|
59
|
+
*/
|
|
60
|
+
materialized?: boolean;
|
|
61
|
+
/** Largest value the sink accepts, in bytes. */
|
|
62
|
+
maxBytes?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The pluggable file store. Keys are framework-minted opaque strings; a sink
|
|
66
|
+
* may treat them as flat keys or split on `/` to build a hierarchy.
|
|
67
|
+
*/
|
|
68
|
+
export interface FileSink {
|
|
69
|
+
/**
|
|
70
|
+
* Write or replace one value. When `ifMatch` is set and the sink reports
|
|
71
|
+
* {@link FileSinkCapabilities.etags}, the write must fail unless the stored
|
|
72
|
+
* version matches — throw {@link FileConflictError} to say so precisely.
|
|
73
|
+
* `ifMatch: null` means "must not already exist".
|
|
74
|
+
*/
|
|
75
|
+
put(key: string, body: Uint8Array, options?: {
|
|
76
|
+
ifMatch?: string | null;
|
|
77
|
+
}): Promise<FileSinkPutResult | void>;
|
|
78
|
+
/** Read one value. Miss → `undefined`. */
|
|
79
|
+
get(key: string): Promise<FileSinkBody | Uint8Array | undefined>;
|
|
80
|
+
/** Remove one key. No-op when missing. */
|
|
81
|
+
delete(key: string): Promise<void>;
|
|
82
|
+
/** Entries whose key starts with `prefix`, in key order. */
|
|
83
|
+
list(prefix: string): Promise<FileSinkEntry[]>;
|
|
84
|
+
/** Per-key metadata without transferring the body. Optional; `list` is the fallback. */
|
|
85
|
+
stat?(key: string): Promise<FileSinkEntry | undefined>;
|
|
86
|
+
/**
|
|
87
|
+
* Absolute path of the sink's local copy of `key`, or `undefined` when it
|
|
88
|
+
* keeps none. Only consulted when
|
|
89
|
+
* {@link FileSinkCapabilities.materialized} is set.
|
|
90
|
+
*/
|
|
91
|
+
materializedPath?(key: string): string | undefined;
|
|
92
|
+
capabilities?: FileSinkCapabilities;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The framework-owned file key scheme, a stable versioned contract under
|
|
96
|
+
* {@link STORAGE_KEY_ROOT}. Sinks may treat these as opaque, or route on
|
|
97
|
+
* prefixes.
|
|
98
|
+
*
|
|
99
|
+
* | Key | Holds |
|
|
100
|
+
* | --- | --- |
|
|
101
|
+
* | `agentkit/v1/{agent}/files/deployment/{path}` | Deployment-scoped file, shared by every session and surviving redeploys |
|
|
102
|
+
* | `agentkit/v1/{agent}/files/deployment/{partition}/{path}` | Deployment-scoped file under an author partition (a PR, a customer, a branch) |
|
|
103
|
+
* | `agentkit/v1/{agent}/files/sessions/{sessionId}/{path}` | Session-scoped file |
|
|
104
|
+
*
|
|
105
|
+
* Scoping lives here, above the sink, so a sink cannot be handed a key for a
|
|
106
|
+
* deployment or session other than its own.
|
|
107
|
+
*/
|
|
108
|
+
export declare const fileKeys: {
|
|
109
|
+
readonly deployment: (agent: string, path: string) => string;
|
|
110
|
+
readonly deploymentPartition: (agent: string, partition: string, path: string) => string;
|
|
111
|
+
readonly session: (agent: string, sessionId: string, path: string) => string;
|
|
112
|
+
readonly deploymentPrefix: (agent: string) => string;
|
|
113
|
+
readonly sessionPrefix: (agent: string, sessionId: string) => string;
|
|
114
|
+
};
|
|
115
|
+
/** Errors raised by the file surface. Thrown by sinks and by the framework. */
|
|
116
|
+
export declare class FileConflictError extends Error {
|
|
117
|
+
readonly key: string;
|
|
118
|
+
constructor(key: string, options?: {
|
|
119
|
+
cause?: unknown;
|
|
120
|
+
storedEtag?: string;
|
|
121
|
+
});
|
|
122
|
+
storedEtag?: string;
|
|
123
|
+
}
|
|
124
|
+
/** A path the framework refuses to mint a key for. */
|
|
125
|
+
export declare class FilePathRejectedError extends Error {
|
|
126
|
+
constructor(message: string);
|
|
127
|
+
}
|
|
128
|
+
/** A session-scoped call with no session in scope. */
|
|
129
|
+
export declare class FileSessionRequiredError extends Error {
|
|
130
|
+
constructor(message: string);
|
|
131
|
+
}
|
|
132
|
+
/** A value larger than the sink accepts. */
|
|
133
|
+
export declare class FileTooLargeError extends Error {
|
|
134
|
+
readonly key: string;
|
|
135
|
+
readonly size: number;
|
|
136
|
+
readonly maxBytes: number;
|
|
137
|
+
constructor(key: string, size: number, maxBytes: number);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The internal sink contract behind `ctx.host.files` — durable, file-shaped
|
|
3
|
+
* state that must outlive the engine process.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately **not a filesystem**: no file descriptors, no seeking, no
|
|
6
|
+
* rename, no directories as first-class objects, and no POSIX errno contract
|
|
7
|
+
* — a sink that is an HTTP API can implement all of it. The framework
|
|
8
|
+
* **mints every key** from a stable, versioned scheme (see {@link fileKeys});
|
|
9
|
+
* sinks see opaque strings and never learn which deployment or session a key
|
|
10
|
+
* belongs to, which is what keeps one deployment's files unreachable from
|
|
11
|
+
* another's.
|
|
12
|
+
*
|
|
13
|
+
* Internal for now: the authored plug-in surface (`agent/files.ts` with a
|
|
14
|
+
* `defineFiles`, mirroring `defineStorage`) is deliberately deferred so this
|
|
15
|
+
* ships as exactly the hosted connector plus the local default. When it
|
|
16
|
+
* lands, {@link FileSink} is the contract authored sinks implement.
|
|
17
|
+
*
|
|
18
|
+
* Delivery semantics differ from {@link import("./storage.js").defineStorage}
|
|
19
|
+
* on purpose. Storage is a fire-and-forget mirror of framework state, so a
|
|
20
|
+
* throwing `put` is logged and dropped. Files are author data the next turn
|
|
21
|
+
* may depend on, so {@link HostFilesApi} writes are **awaited and surface
|
|
22
|
+
* their failure** — an author who writes evidence and then delegates has to
|
|
23
|
+
* know the write did not land.
|
|
24
|
+
*/
|
|
25
|
+
import { STORAGE_KEY_ROOT } from "./storage.js";
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Key scheme
|
|
28
|
+
// ============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* The framework-owned file key scheme, a stable versioned contract under
|
|
31
|
+
* {@link STORAGE_KEY_ROOT}. Sinks may treat these as opaque, or route on
|
|
32
|
+
* prefixes.
|
|
33
|
+
*
|
|
34
|
+
* | Key | Holds |
|
|
35
|
+
* | --- | --- |
|
|
36
|
+
* | `agentkit/v1/{agent}/files/deployment/{path}` | Deployment-scoped file, shared by every session and surviving redeploys |
|
|
37
|
+
* | `agentkit/v1/{agent}/files/deployment/{partition}/{path}` | Deployment-scoped file under an author partition (a PR, a customer, a branch) |
|
|
38
|
+
* | `agentkit/v1/{agent}/files/sessions/{sessionId}/{path}` | Session-scoped file |
|
|
39
|
+
*
|
|
40
|
+
* Scoping lives here, above the sink, so a sink cannot be handed a key for a
|
|
41
|
+
* deployment or session other than its own.
|
|
42
|
+
*/
|
|
43
|
+
export const fileKeys = {
|
|
44
|
+
deployment: (agent, path) => `${STORAGE_KEY_ROOT}/${agent}/files/deployment/${path}`,
|
|
45
|
+
deploymentPartition: (agent, partition, path) => `${STORAGE_KEY_ROOT}/${agent}/files/deployment/${partition}/${path}`,
|
|
46
|
+
session: (agent, sessionId, path) => `${STORAGE_KEY_ROOT}/${agent}/files/sessions/${sessionId}/${path}`,
|
|
47
|
+
deploymentPrefix: (agent) => `${STORAGE_KEY_ROOT}/${agent}/files/deployment/`,
|
|
48
|
+
sessionPrefix: (agent, sessionId) => `${STORAGE_KEY_ROOT}/${agent}/files/sessions/${sessionId}/`,
|
|
49
|
+
};
|
|
50
|
+
/** Errors raised by the file surface. Thrown by sinks and by the framework. */
|
|
51
|
+
export class FileConflictError extends Error {
|
|
52
|
+
constructor(key, options) {
|
|
53
|
+
super(`host.files write for "${key}" lost a race with another writer${(options === null || options === void 0 ? void 0 : options.storedEtag) === undefined
|
|
54
|
+
? ""
|
|
55
|
+
: ` (stored version ${options.storedEtag})`}`);
|
|
56
|
+
this.key = key;
|
|
57
|
+
this.name = "FileConflictError";
|
|
58
|
+
if ((options === null || options === void 0 ? void 0 : options.cause) !== undefined) {
|
|
59
|
+
this.cause = options.cause;
|
|
60
|
+
}
|
|
61
|
+
if ((options === null || options === void 0 ? void 0 : options.storedEtag) !== undefined) {
|
|
62
|
+
this.storedEtag = options.storedEtag;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** A path the framework refuses to mint a key for. */
|
|
67
|
+
export class FilePathRejectedError extends Error {
|
|
68
|
+
constructor(message) {
|
|
69
|
+
super(message);
|
|
70
|
+
this.name = "FilePathRejectedError";
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** A session-scoped call with no session in scope. */
|
|
74
|
+
export class FileSessionRequiredError extends Error {
|
|
75
|
+
constructor(message) {
|
|
76
|
+
super(message);
|
|
77
|
+
this.name = "FileSessionRequiredError";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** A value larger than the sink accepts. */
|
|
81
|
+
export class FileTooLargeError extends Error {
|
|
82
|
+
constructor(key, size, maxBytes) {
|
|
83
|
+
super(`host.files value for "${key}" is ${size} bytes, over the sink's ${maxBytes}-byte limit`);
|
|
84
|
+
this.key = key;
|
|
85
|
+
this.size = size;
|
|
86
|
+
this.maxBytes = maxBytes;
|
|
87
|
+
this.name = "FileTooLargeError";
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -103,7 +103,7 @@ export class ABCollector {
|
|
|
103
103
|
experiment: experiment.name,
|
|
104
104
|
variant,
|
|
105
105
|
}, (key, error) => {
|
|
106
|
-
this.logger(`[
|
|
106
|
+
this.logger(`[agent-sdk] ab "${experiment.name}" derive.${key} threw: ${describeError(error)}`);
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
if (!options.emitSamples) {
|
|
@@ -118,7 +118,7 @@ export class ABCollector {
|
|
|
118
118
|
yield def.onSample(sample);
|
|
119
119
|
}
|
|
120
120
|
catch (error) {
|
|
121
|
-
this.logger(`[
|
|
121
|
+
this.logger(`[agent-sdk] ab "${experiment.name}" onSample threw: ${describeError(error)}`);
|
|
122
122
|
}
|
|
123
123
|
(_b = this.persistSample) === null || _b === void 0 ? void 0 : _b.call(this, sample);
|
|
124
124
|
}
|
package/dist/internal/ab-fold.js
CHANGED
|
@@ -113,7 +113,7 @@ export function applyABDerive(state, events, experiments, sessionInfo, agentName
|
|
|
113
113
|
const ctx = collectContext(experiment.name, variant, sessionInfo, agentName);
|
|
114
114
|
for (const event of events) {
|
|
115
115
|
yield applyDeriveForEvent(accum.metrics.custom, def.derive, event, ctx, (key, error) => {
|
|
116
|
-
logger(`[
|
|
116
|
+
logger(`[agent-sdk] ab "${experiment.name}" derive.${key} threw: ${describeError(error)}`);
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
119
|
}
|
|
@@ -201,8 +201,8 @@ export declare function cmdSession(sessionId: string | undefined, options: AxCli
|
|
|
201
201
|
* With a session id: per-turn token usage + estimated cost for that session.
|
|
202
202
|
* Without one: one row per session (all sessions on the target) plus a
|
|
203
203
|
* total row. `--json` prints the underlying report(s); text is the default.
|
|
204
|
-
* Costs are
|
|
205
|
-
* (
|
|
204
|
+
* Costs are recorded on `turn.completed` via `POST /v1/models/estimate-cost`
|
|
205
|
+
* (billed usage when available). Turns persisted before cost tracking simply
|
|
206
206
|
* count as unpriced.
|
|
207
207
|
*/
|
|
208
208
|
export declare function cmdCost(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
|
package/dist/internal/cli-ax.js
CHANGED
|
@@ -1420,8 +1420,8 @@ const COST_FETCH_CONCURRENCY = 4;
|
|
|
1420
1420
|
* With a session id: per-turn token usage + estimated cost for that session.
|
|
1421
1421
|
* Without one: one row per session (all sessions on the target) plus a
|
|
1422
1422
|
* total row. `--json` prints the underlying report(s); text is the default.
|
|
1423
|
-
* Costs are
|
|
1424
|
-
* (
|
|
1423
|
+
* Costs are recorded on `turn.completed` via `POST /v1/models/estimate-cost`
|
|
1424
|
+
* (billed usage when available). Turns persisted before cost tracking simply
|
|
1425
1425
|
* count as unpriced.
|
|
1426
1426
|
*/
|
|
1427
1427
|
export function cmdCost(sessionId, options) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
2
|
+
* `agent-sdk deploy | deployments | deployment | stop | rotate-token |
|
|
3
3
|
* rotate-pod-credential | secrets set|list|unset` — Heroku-style deploys
|
|
4
4
|
* onto Cursor's managed agent-serve hosting.
|
|
5
5
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-deploy.d.ts","sourceRoot":"","sources":["../../src/internal/cli-deploy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli-deploy.d.ts","sourceRoot":"","sources":["../../src/internal/cli-deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
2
|
+
* `agent-sdk deploy | deployments | deployment | stop | rotate-token |
|
|
3
3
|
* rotate-pod-credential | secrets set|list|unset` — Heroku-style deploys
|
|
4
4
|
* onto Cursor's managed agent-serve hosting.
|
|
5
5
|
*
|
|
@@ -360,7 +360,7 @@ function deployOne(ctx, options, target, extras) {
|
|
|
360
360
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
361
361
|
const { dir, slug } = target;
|
|
362
362
|
// Fill --repo/--ref/--path from the local git checkout when omitted so
|
|
363
|
-
// `
|
|
363
|
+
// `agent-sdk deploy` inside an agent directory is enough. Only probe git
|
|
364
364
|
// for real agent projects (avoids ambient monorepo remotes when someone
|
|
365
365
|
// deploys a bare --slug). Explicit flags always win.
|
|
366
366
|
const isAgent = yield isAgentProjectDir(dir);
|
|
@@ -676,6 +676,11 @@ export function cmdDeploymentStatus(slug, options) {
|
|
|
676
676
|
detail.serviceAccountId !== null) {
|
|
677
677
|
lines.push(` service account: ${detail.serviceAccountId}`);
|
|
678
678
|
}
|
|
679
|
+
if (detail.agentStoreSourceId !== undefined) {
|
|
680
|
+
// The durable file store's address: GET /v0/agent-serve-files/<id> lists
|
|
681
|
+
// it, and the pod sees it as AGENT_SERVE_STORE_SOURCE_ID.
|
|
682
|
+
lines.push(` file store: ${detail.agentStoreSourceId}`);
|
|
683
|
+
}
|
|
679
684
|
if (detail.egressAllowedDomains !== undefined &&
|
|
680
685
|
detail.egressAllowedDomains.length > 0) {
|
|
681
686
|
lines.push(` egress: ${detail.egressAllowedDomains.join(", ")}`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
2
|
+
* `agent-sdk docs` / `npx @cursor/july docs` — serve the shipped VitePress
|
|
3
3
|
* site on loopback and open it in a browser. Does not start an agent host.
|
|
4
4
|
*/
|
|
5
5
|
import { createServer } from "node:http";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
2
|
+
* `agent-sdk docs` / `npx @cursor/july docs` — serve the shipped VitePress
|
|
3
3
|
* site on loopback and open it in a browser. Does not start an agent host.
|
|
4
4
|
*/
|
|
5
5
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
@@ -128,7 +128,7 @@ function cmdGithubForward(options) {
|
|
|
128
128
|
process.stderr.write("could not infer the repository — pass --repo owner/repo (or --org <org>)\n");
|
|
129
129
|
return 1;
|
|
130
130
|
}
|
|
131
|
-
process.stderr.write(`[
|
|
131
|
+
process.stderr.write(`[agent-sdk] inferred --repo ${repo}\n`);
|
|
132
132
|
}
|
|
133
133
|
const secret = (_c = options.secret) !== null && _c !== void 0 ? _c : process.env.GITHUB_WEBHOOK_SECRET;
|
|
134
134
|
// `gh webhook forward` targets a single URL, and GitHub allows only one
|
|
@@ -146,21 +146,21 @@ function cmdGithubForward(options) {
|
|
|
146
146
|
org,
|
|
147
147
|
secret,
|
|
148
148
|
});
|
|
149
|
-
process.stderr.write(`[
|
|
149
|
+
process.stderr.write(`[agent-sdk] forwarding ${org !== undefined ? `org ${org}` : `repo ${repo}`} to ${targets.length} channel${targets.length === 1 ? "" : "s"}:\n`);
|
|
150
150
|
for (const target of targets) {
|
|
151
|
-
process.stderr.write(`[
|
|
151
|
+
process.stderr.write(`[agent-sdk] → ${targetLabel(target)} ${target.url} (${target.events.join(", ")})\n`);
|
|
152
152
|
}
|
|
153
153
|
if (fanout) {
|
|
154
|
-
process.stderr.write(`[
|
|
154
|
+
process.stderr.write(`[agent-sdk] fan-out proxy on ${forwardUrl} (union events: ${events.join(", ")})\n`);
|
|
155
155
|
}
|
|
156
156
|
if (secret === undefined || secret === "") {
|
|
157
|
-
process.stderr.write("[
|
|
157
|
+
process.stderr.write("[agent-sdk] no signing secret — deliveries are unsigned. A `serve --dev` github channel accepts them; set GITHUB_WEBHOOK_SECRET on both sides to verify signatures (required for a non-dev target).\n");
|
|
158
158
|
}
|
|
159
159
|
const envToken = detectGitHubEnvTokenOverride();
|
|
160
160
|
if (envToken !== undefined) {
|
|
161
|
-
process.stderr.write(`[
|
|
161
|
+
process.stderr.write(`[agent-sdk] warning: ${githubEnvTokenHint(envToken)}\n`);
|
|
162
162
|
}
|
|
163
|
-
process.stderr.write(`[
|
|
163
|
+
process.stderr.write(`[agent-sdk] running: gh ${redact(args)}\n`);
|
|
164
164
|
try {
|
|
165
165
|
return yield spawnGh(args);
|
|
166
166
|
}
|
|
@@ -228,7 +228,7 @@ function cmdGithubReplay(options) {
|
|
|
228
228
|
const requested = parseEventList(options.events);
|
|
229
229
|
const { events: eventsToReplay, unsupported } = selectReplayEvents(requested, unionForwardEvents(targets));
|
|
230
230
|
if (unsupported.length > 0) {
|
|
231
|
-
process.stderr.write(`[
|
|
231
|
+
process.stderr.write(`[agent-sdk] cannot synthesize (skipped): ${unsupported.join(", ")}\n`);
|
|
232
232
|
}
|
|
233
233
|
if (eventsToReplay.length === 0) {
|
|
234
234
|
process.stderr.write("no synthesizable events selected\n");
|
|
@@ -263,7 +263,7 @@ function cmdGithubReplay(options) {
|
|
|
263
263
|
check,
|
|
264
264
|
});
|
|
265
265
|
if ("error" in result) {
|
|
266
|
-
process.stderr.write(`[
|
|
266
|
+
process.stderr.write(`[agent-sdk] skipping ${event}: ${result.error}\n`);
|
|
267
267
|
continue;
|
|
268
268
|
}
|
|
269
269
|
synthesized.push(result);
|
|
@@ -273,7 +273,7 @@ function cmdGithubReplay(options) {
|
|
|
273
273
|
return 1;
|
|
274
274
|
}
|
|
275
275
|
const secret = (_j = options.secret) !== null && _j !== void 0 ? _j : process.env.GITHUB_WEBHOOK_SECRET;
|
|
276
|
-
process.stderr.write(`[
|
|
276
|
+
process.stderr.write(`[agent-sdk] replaying ${ref.label} (${synthesized
|
|
277
277
|
.map((s) => s.eventName)
|
|
278
278
|
.join(", ")}) → ${targets.length} channel${targets.length === 1 ? "" : "s"}\n`);
|
|
279
279
|
const report = [];
|
|
@@ -291,7 +291,7 @@ function cmdGithubReplay(options) {
|
|
|
291
291
|
}
|
|
292
292
|
if (options.out !== undefined) {
|
|
293
293
|
const file = yield writeReplayFixture(options.out, event);
|
|
294
|
-
process.stderr.write(`[
|
|
294
|
+
process.stderr.write(`[agent-sdk] wrote ${file}\n`);
|
|
295
295
|
}
|
|
296
296
|
const label = eventLabel(event);
|
|
297
297
|
if (options.dryRun === true) {
|
|
@@ -311,7 +311,7 @@ function cmdGithubReplay(options) {
|
|
|
311
311
|
const summary = deliveries
|
|
312
312
|
.map((delivery) => `${delivery.label} ${delivery.status || "ERR"}${delivery.ok ? "" : " (rejected)"}`)
|
|
313
313
|
.join(", ") || "(no matching channel)";
|
|
314
|
-
process.stderr.write(`[
|
|
314
|
+
process.stderr.write(`[agent-sdk] ${label} → ${summary}\n`);
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
317
|
if (options.json === true) {
|
|
@@ -552,7 +552,7 @@ function ensureWebhookExtension(install) {
|
|
|
552
552
|
: `${GITHUB_WEBHOOK_EXTENSION} is ${(_b = parseGhWebhookExtensionVersion(list)) !== null && _b !== void 0 ? _b : "unknown"} (need ${GITHUB_WEBHOOK_EXTENSION_PIN}) — re-run with --install`,
|
|
553
553
|
};
|
|
554
554
|
}
|
|
555
|
-
process.stderr.write(`[
|
|
555
|
+
process.stderr.write(`[agent-sdk] installing ${GITHUB_WEBHOOK_EXTENSION}@${GITHUB_WEBHOOK_EXTENSION_PIN}…\n`);
|
|
556
556
|
if ((yield tryExec({
|
|
557
557
|
command: "gh",
|
|
558
558
|
args: ghWebhookExtensionInstallArgs({ force: installed && !pinOk }),
|