@cursor/july 0.1.95 → 0.1.97
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 +3 -4
- package/README.md +3 -2
- package/dist/bin/agent-serve.js +14 -3
- package/dist/channels/deployments/types.d.ts +1 -1
- package/dist/channels/deployments/types.d.ts.map +1 -1
- package/dist/channels/deployments/types.js +1 -0
- package/dist/channels/origin/api.d.ts +72 -15
- package/dist/channels/origin/api.d.ts.map +1 -1
- package/dist/channels/origin/api.js +185 -28
- package/dist/channels/origin/binding.d.ts +13 -2
- package/dist/channels/origin/binding.d.ts.map +1 -1
- package/dist/channels/origin/binding.js +41 -25
- package/dist/channels/origin/checks.d.ts +6 -6
- package/dist/channels/origin/checks.js +6 -6
- package/dist/channels/origin/cursor-account.d.ts +5 -3
- package/dist/channels/origin/cursor-account.d.ts.map +1 -1
- package/dist/channels/origin/cursor-account.js +5 -3
- package/dist/channels/origin/index.d.ts +1 -0
- package/dist/channels/origin/index.d.ts.map +1 -1
- package/dist/channels/origin/index.js +1 -0
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +3 -0
- package/dist/channels/origin/reactions.d.ts +56 -0
- package/dist/channels/origin/reactions.d.ts.map +1 -0
- package/dist/channels/origin/reactions.js +67 -0
- package/dist/channels/origin/types.d.ts +11 -0
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/api.d.ts +9 -0
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +36 -5
- package/dist/channels/slack/approvals.d.ts +16 -0
- package/dist/channels/slack/approvals.d.ts.map +1 -1
- package/dist/channels/slack/approvals.js +86 -0
- package/dist/channels/slack/cli-project.d.ts +19 -0
- package/dist/channels/slack/cli-project.d.ts.map +1 -0
- package/dist/channels/slack/cli-project.js +234 -0
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +110 -81
- package/dist/channels/slack/dispatch.d.ts +7 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +47 -23
- package/dist/channels/slack/inbound.d.ts +8 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +32 -0
- package/dist/channels/slack/init.d.ts +3 -2
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +5 -5
- package/dist/channels/slack/interactive.d.ts +2 -1
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +15 -4
- package/dist/channels/slack/live-delivery.d.ts +26 -29
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +172 -73
- package/dist/channels/slack/manifest.d.ts +1 -1
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +6 -2
- package/dist/channels/slack/nudge-carrier.d.ts +2 -0
- package/dist/channels/slack/nudge-carrier.d.ts.map +1 -1
- package/dist/channels/slack/nudge-carrier.js +48 -1
- package/dist/channels/slack/setup.d.ts +1 -1
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +10 -6
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +3 -2
- package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
- package/dist/channels/slack/tool-approval-events.js +91 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.BBj0klBO.js → app.B3rWNYE1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CUEXpL78.js → VPLocalSearchBox.C1lhqJJR.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DabmQnia.js → theme.B40_SXuv.js} +2 -2
- package/dist/docs/assets/{deployment.md.D9msOFOW.js → deployment.md.MFPKqsqI.js} +2 -2
- package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.js → guides_mcp-oauth.md.CN-6YmTJ.js} +4 -4
- package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.lean.js → guides_mcp-oauth.md.CN-6YmTJ.lean.js} +1 -1
- package/dist/docs/assets/guides_slack.md.VDXQV3ja.js +22 -0
- package/dist/docs/assets/guides_slack.md.VDXQV3ja.lean.js +1 -0
- package/dist/docs/assets/index.md.CVeRUOeZ.js +5 -0
- package/dist/docs/assets/{index.md.BoHaMdeZ.lean.js → index.md.CVeRUOeZ.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.js → reference_agent-config.md.BHeYMgme.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.BsMOxDvh.js → reference_cli.md.RyZf5OTE.js} +10 -6
- package/dist/docs/assets/{reference_cli.md.BsMOxDvh.lean.js → reference_cli.md.RyZf5OTE.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.js → reference_connections.md.DxldvyIB.js} +4 -3
- package/dist/docs/assets/{reference_http-api.md.D89k1mdm.js → reference_http-api.md.5zOAbV86.js} +1 -1
- package/dist/docs/assets/reference_sessions.md.NxFP_CAC.js +1 -0
- package/dist/docs/assets/{reference_tools.md.BHeXn2id.js → reference_tools.md.B84gw9Ii.js} +1 -1
- package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +2 -0
- package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +1 -0
- package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.js +2 -0
- package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.lean.js +1 -0
- package/dist/docs/assets/troubleshooting.md.DCiPBhYs.js +1 -0
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +4 -4
- package/dist/docs/deployment.html +7 -7
- package/dist/docs/deployment.md +5 -4
- package/dist/docs/evals.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +4 -4
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +4 -4
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +8 -8
- package/dist/docs/guides/mcp-oauth.md +26 -8
- package/dist/docs/guides/opentelemetry.html +4 -4
- package/dist/docs/guides/slack.html +17 -33
- package/dist/docs/guides/slack.md +92 -201
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +7 -3
- package/dist/docs/llms-full.txt +398 -653
- package/dist/docs/llms.txt +3 -2
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +6 -6
- package/dist/docs/reference/agent-config.md +2 -2
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +4 -4
- package/dist/docs/reference/cli.html +14 -10
- package/dist/docs/reference/cli.md +39 -16
- package/dist/docs/reference/connections.html +9 -8
- package/dist/docs/reference/connections.md +6 -3
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +6 -6
- package/dist/docs/reference/http-api.md +2 -1
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +4 -4
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +5 -5
- package/dist/docs/reference/sessions.md +4 -2
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +6 -6
- package/dist/docs/reference/tools.md +9 -2
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +28 -0
- package/dist/docs/templates/agents-md.md +105 -0
- package/dist/docs/templates/code-wiki.html +28 -0
- package/dist/docs/templates/code-wiki.md +91 -0
- package/dist/docs/templates/demo.html +5 -5
- package/dist/docs/templates/pr-autofixer.html +4 -4
- package/dist/docs/templates/security-help.html +4 -4
- package/dist/docs/templates/security-reviewer.html +5 -5
- package/dist/docs/templates/triage.html +4 -4
- package/dist/docs/troubleshooting.html +5 -5
- package/dist/docs/troubleshooting.md +2 -2
- package/dist/evals/run-facts.d.ts.map +1 -1
- package/dist/evals/run-facts.js +27 -0
- package/dist/files-backends/cursor-hosted.d.ts +26 -4
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +32 -4
- package/dist/internal/advertise-tools.d.ts +2 -0
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +30 -10
- package/dist/internal/approval-gate.d.ts +12 -13
- package/dist/internal/approval-gate.d.ts.map +1 -1
- package/dist/internal/approval-gate.js +16 -21
- package/dist/internal/bounded.d.ts +7 -0
- package/dist/internal/bounded.d.ts.map +1 -0
- package/dist/internal/bounded.js +32 -0
- package/dist/internal/chat-client.js +10 -0
- package/dist/internal/cli-deploy.d.ts +5 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +57 -18
- package/dist/internal/cli-mcp-oauth.js +8 -18
- package/dist/internal/cli-slack-manual.d.ts +24 -2
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +251 -20
- package/dist/internal/cli-slack.d.ts +9 -2
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +29 -82
- package/dist/internal/conversation-mirror.d.ts +11 -8
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +116 -55
- package/dist/internal/cursor/account-mcp.d.ts +1 -0
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +17 -0
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +22 -48
- package/dist/internal/cursor/session-token.d.ts +45 -0
- package/dist/internal/cursor/session-token.d.ts.map +1 -0
- package/dist/internal/cursor/session-token.js +99 -0
- package/dist/internal/cursor-agent-template.d.ts +1 -1
- package/dist/internal/cursor-agent-template.d.ts.map +1 -1
- package/dist/internal/cursor-agent-template.js +2 -0
- package/dist/internal/deploy-client.d.ts +17 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +31 -10
- package/dist/internal/env-file.d.ts +19 -0
- package/dist/internal/env-file.d.ts.map +1 -0
- package/dist/internal/env-file.js +90 -0
- package/dist/internal/framework-file-storage.d.ts +61 -0
- package/dist/internal/framework-file-storage.d.ts.map +1 -0
- package/dist/internal/framework-file-storage.js +210 -0
- package/dist/internal/framework-storage-selection.d.ts +11 -5
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +38 -11
- package/dist/internal/hosted-delivery-protocol.d.ts +7 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +7 -0
- package/dist/internal/hosted-delivery.d.ts +13 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +64 -19
- package/dist/internal/hosted-execution-diag.d.ts +48 -0
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -0
- package/dist/internal/hosted-execution-diag.js +150 -0
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +81 -1
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +4 -0
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +1 -3
- package/dist/internal/logs-client.d.ts +5 -0
- package/dist/internal/logs-client.d.ts.map +1 -1
- package/dist/internal/logs-client.js +5 -0
- package/dist/internal/managed-delivery.d.ts +80 -0
- package/dist/internal/managed-delivery.d.ts.map +1 -0
- package/dist/internal/managed-delivery.js +86 -0
- package/dist/internal/mcp-endpoint.js +2 -3
- package/dist/internal/mcp-host.d.ts +10 -0
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +57 -8
- package/dist/internal/mcp-oauth-on-demand.d.ts +68 -0
- package/dist/internal/mcp-oauth-on-demand.d.ts.map +1 -0
- package/dist/internal/mcp-oauth-on-demand.js +287 -0
- package/dist/internal/mcp-oauth-persist.d.ts +42 -0
- package/dist/internal/mcp-oauth-persist.d.ts.map +1 -0
- package/dist/internal/mcp-oauth-persist.js +92 -0
- package/dist/internal/mcp-oauth.d.ts +1 -0
- package/dist/internal/mcp-oauth.d.ts.map +1 -1
- package/dist/internal/mcp-oauth.js +10 -2
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +22 -9
- package/dist/internal/runtime-dispatch-runner.d.ts +5 -1
- package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
- package/dist/internal/runtime-dispatch-runner.js +7 -0
- package/dist/internal/sdk-runner.d.ts +11 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +39 -8
- package/dist/internal/server.d.ts +3 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +49 -21
- package/dist/internal/session-engine.d.ts +101 -3
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +577 -46
- package/dist/internal/sessions-client.d.ts +9 -7
- package/dist/internal/sessions-client.d.ts.map +1 -1
- package/dist/internal/sessions-client.js +3 -1
- package/dist/internal/steering.d.ts +15 -0
- package/dist/internal/steering.d.ts.map +1 -0
- package/dist/internal/steering.js +18 -0
- package/dist/internal/storage-coordinator.d.ts +7 -0
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +28 -5
- package/dist/internal/storage-roles.d.ts +5 -0
- package/dist/internal/storage-roles.d.ts.map +1 -1
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +10 -0
- package/dist/internal/tool-policy.d.ts +9 -1
- package/dist/internal/tool-policy.d.ts.map +1 -1
- package/dist/internal/tool-policy.js +13 -0
- package/dist/internal/trajectory.d.ts.map +1 -1
- package/dist/internal/trajectory.js +10 -0
- package/dist/internal/turn-outbox.d.ts +24 -0
- package/dist/internal/turn-outbox.d.ts.map +1 -0
- package/dist/internal/turn-outbox.js +80 -0
- package/dist/playground/assets/{index-CZA1uEWA.js → index-DrkI6y5O.js} +51 -51
- package/dist/playground/assets/index-DzNGwm7q.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted.d.ts +9 -6
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +16 -3
- package/dist/storage.d.ts +8 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/types.d.ts +65 -8
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +7 -3
- package/docs/deployment.md +5 -4
- package/docs/guides/mcp-oauth.md +26 -8
- package/docs/guides/slack.md +93 -202
- package/docs/reference/agent-config.md +2 -2
- package/docs/reference/cli.md +39 -16
- package/docs/reference/connections.md +6 -3
- package/docs/reference/http-api.md +2 -1
- package/docs/reference/sessions.md +4 -2
- package/docs/reference/tools.md +9 -2
- package/docs/templates/agents-md.md +110 -0
- package/docs/templates/code-wiki.md +96 -0
- package/docs/troubleshooting.md +2 -2
- package/package.json +2 -2
- package/skills/ab/SKILL.md +13 -97
- package/skills/create-agent/SKILL.md +124 -223
- package/skills/debug/SKILL.md +34 -68
- package/skills/evals/SKILL.md +55 -180
- package/skills/framework-map/SKILL.md +83 -145
- package/skills/github/SKILL.md +53 -111
- package/skills/hillclimb/SKILL.md +40 -163
- package/skills/mcp-auth/SKILL.md +51 -107
- package/skills/otel/SKILL.md +22 -68
- package/skills/setup-slack/SKILL.md +91 -212
- package/src/bin/agent-serve.ts +13 -1
- package/src/channels/deployments/types.ts +1 -0
- package/src/channels/origin/api.ts +264 -33
- package/src/channels/origin/binding.ts +57 -28
- package/src/channels/origin/checks.ts +6 -6
- package/src/channels/origin/cursor-account.ts +5 -3
- package/src/channels/origin/index.ts +1 -0
- package/src/channels/origin/origin-channel.ts +4 -0
- package/src/channels/origin/reactions.ts +82 -0
- package/src/channels/origin/types.ts +11 -0
- package/src/channels/slack/api.ts +41 -5
- package/src/channels/slack/approvals.ts +105 -0
- package/src/channels/slack/cli-project.ts +267 -0
- package/src/channels/slack/defaults.ts +122 -93
- package/src/channels/slack/dispatch.ts +56 -22
- package/src/channels/slack/inbound.ts +43 -0
- package/src/channels/slack/init.ts +10 -5
- package/src/channels/slack/interactive.ts +35 -9
- package/src/channels/slack/live-delivery.ts +235 -114
- package/src/channels/slack/manifest.ts +6 -2
- package/src/channels/slack/nudge-carrier.ts +48 -1
- package/src/channels/slack/setup.ts +10 -6
- package/src/channels/slack/slack-channel.ts +3 -0
- package/src/channels/slack/tool-approval-events.ts +93 -0
- package/src/evals/run-facts.ts +32 -0
- package/src/files-backends/cursor-hosted.ts +40 -7
- package/src/internal/advertise-tools.ts +49 -12
- package/src/internal/approval-gate.ts +20 -29
- package/src/internal/bounded.ts +28 -0
- package/src/internal/chat-client.ts +19 -0
- package/src/internal/cli-deploy.ts +91 -9
- package/src/internal/cli-mcp-oauth.ts +7 -21
- package/src/internal/cli-slack-manual.ts +350 -18
- package/src/internal/cli-slack.ts +40 -84
- package/src/internal/conversation-mirror.ts +145 -69
- package/src/internal/cursor/account-mcp.ts +21 -0
- package/src/internal/cursor/backend-client.ts +34 -58
- package/src/internal/cursor/session-token.ts +115 -0
- package/src/internal/cursor-agent-template.ts +2 -0
- package/src/internal/deploy-client.ts +43 -0
- package/src/internal/env-file.ts +84 -0
- package/src/internal/framework-file-storage.ts +228 -0
- package/src/internal/framework-storage-selection.ts +51 -11
- package/src/internal/hosted-delivery-protocol.ts +7 -0
- package/src/internal/hosted-delivery.ts +107 -24
- package/src/internal/hosted-execution-diag.ts +207 -0
- package/src/internal/http-channel.ts +99 -0
- package/src/internal/init-project.ts +4 -0
- package/src/internal/install-cursor-skills.ts +1 -4
- package/src/internal/logs-client.ts +5 -0
- package/src/internal/managed-delivery.ts +125 -0
- package/src/internal/mcp-endpoint.ts +13 -4
- package/src/internal/mcp-host.ts +77 -11
- package/src/internal/mcp-oauth-on-demand.ts +352 -0
- package/src/internal/mcp-oauth-persist.ts +127 -0
- package/src/internal/mcp-oauth.ts +17 -1
- package/src/internal/otel/collector.ts +30 -0
- package/src/internal/runtime-dispatch-runner.ts +10 -0
- package/src/internal/sdk-runner.ts +56 -8
- package/src/internal/server.ts +61 -9
- package/src/internal/session-engine.ts +723 -60
- package/src/internal/sessions-client.ts +17 -8
- package/src/internal/steering.ts +17 -0
- package/src/internal/storage-coordinator.ts +38 -8
- package/src/internal/storage-roles.ts +7 -0
- package/src/internal/stream-progress.ts +19 -0
- package/src/internal/tool-policy.ts +18 -0
- package/src/internal/trajectory.ts +10 -0
- package/src/internal/turn-outbox.ts +85 -0
- package/src/storage-backends/cursor-hosted.ts +22 -8
- package/src/storage.ts +12 -0
- package/src/types.ts +70 -9
- package/templates/agents-md/README.md +39 -0
- package/templates/agents-md/agent/agent.ts +8 -0
- package/templates/agents-md/agent/channels/github.ts +10 -0
- package/templates/agents-md/agent/channels/queue.ts +28 -0
- package/templates/agents-md/agent/channels/slack.ts +9 -0
- package/templates/agents-md/agent/instructions.md +39 -0
- package/templates/agents-md/agent/lib/collect.ts +439 -0
- package/templates/agents-md/agent/lib/config.ts +8 -0
- package/templates/agents-md/agent/lib/paths.ts +51 -0
- package/templates/agents-md/agent/schedules/weekly.ts +17 -0
- package/templates/agents-md/agent/tools/apply_agents.ts +226 -0
- package/templates/agents-md/evals/agents.eval.ts +135 -0
- package/templates/agents-md/evals/evals.config.ts +5 -0
- package/templates/agents-md/init.json +38 -0
- package/templates/agents-md/package.json +18 -0
- package/templates/agents-md/tsconfig.json +12 -0
- package/templates/code-wiki/README.md +34 -0
- package/templates/code-wiki/agent/agent.ts +8 -0
- package/templates/code-wiki/agent/channels/github.ts +144 -0
- package/templates/code-wiki/agent/instructions.md +39 -0
- package/templates/code-wiki/agent/lib/repos.ts +5 -0
- package/templates/code-wiki/agent/lib/wiki.ts +22 -0
- package/templates/code-wiki/agent/tools/apply_wiki.ts +219 -0
- package/templates/code-wiki/evals/evals.config.ts +5 -0
- package/templates/code-wiki/evals/wiki.eval.ts +132 -0
- package/templates/code-wiki/init.json +25 -0
- package/templates/code-wiki/package.json +18 -0
- package/templates/code-wiki/tsconfig.json +12 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.oqPawjiD.js +0 -1
- package/dist/docs/assets/guides_slack.md.C32HsdKk.js +0 -38
- package/dist/docs/assets/guides_slack.md.C32HsdKk.lean.js +0 -1
- package/dist/docs/assets/index.md.BoHaMdeZ.js +0 -5
- package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Ctv3T8C2.js +0 -1
- package/dist/docs/design/agsh.md +0 -406
- package/dist/internal/deployment-scm-event-stream.d.ts +0 -116
- package/dist/internal/deployment-scm-event-stream.d.ts.map +0 -1
- package/dist/internal/deployment-scm-event-stream.js +0 -474
- package/dist/playground/assets/index-CF7hUDnQ.css +0 -1
- package/docs/design/agsh.md +0 -406
- package/src/internal/deployment-scm-event-stream.ts +0 -593
- /package/dist/docs/assets/{deployment.md.D9msOFOW.lean.js → deployment.md.MFPKqsqI.lean.js} +0 -0
- /package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.lean.js → reference_agent-config.md.BHeYMgme.lean.js} +0 -0
- /package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.lean.js → reference_connections.md.DxldvyIB.lean.js} +0 -0
- /package/dist/docs/assets/{reference_http-api.md.D89k1mdm.lean.js → reference_http-api.md.5zOAbV86.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.D0mIh4KK.lean.js → reference_sessions.md.NxFP_CAC.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.BHeXn2id.lean.js → reference_tools.md.B84gw9Ii.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.Ctv3T8C2.lean.js → troubleshooting.md.DCiPBhYs.lean.js} +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Keep AGENTS.md current from last week's work"
|
|
3
|
+
description: "Scaffold the agent, pick a repo and Slack channels, dispatch the weekly job, and deploy."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Keep AGENTS.md current from last week's work
|
|
7
|
+
|
|
8
|
+
This agent runs every Monday at 09:00 UTC. It reads last week's merged
|
|
9
|
+
pull requests and the Slack channels you list. When a durable rule
|
|
10
|
+
showed up, `apply_agents` parks the write until a person approves it,
|
|
11
|
+
then opens a draft follow-up pull request against the default branch.
|
|
12
|
+
Chores and rules the file already states stay quiet.
|
|
13
|
+
|
|
14
|
+
This template is one model turn: read the week, then call
|
|
15
|
+
`apply_agents`.
|
|
16
|
+
|
|
17
|
+
Init once per app. Pass a different repo and channel list each time.
|
|
18
|
+
|
|
19
|
+
## Scaffold
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx @cursor/july init ./agents-md --template agents-md
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`init` asks which GitHub repo to watch and which Slack channels to
|
|
26
|
+
read. Pass `--var repos=acme/api --var slack=#eng-api,#api-private`
|
|
27
|
+
to skip the prompt. Use `--var slack=none` when Slack is out of
|
|
28
|
+
scope.
|
|
29
|
+
|
|
30
|
+
The answers land in `agent/lib/config.ts`. Edit that file when the
|
|
31
|
+
set changes.
|
|
32
|
+
|
|
33
|
+
## Connect GitHub and Slack
|
|
34
|
+
|
|
35
|
+
Connect GitHub in Cursor for that repository (Settings or
|
|
36
|
+
[cursor.com/dashboard](https://cursor.com/dashboard)). Sign the host
|
|
37
|
+
in:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cd agents-md
|
|
41
|
+
agent-sdk login
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`cursorAccount` mints a short-lived, repo-scoped credential with
|
|
45
|
+
`contents-write` so the agent can open the follow-up PR. See the
|
|
46
|
+
[GitHub guide](../guides/github.md).
|
|
47
|
+
|
|
48
|
+
Create the Slack app and invite the bot to each listed channel,
|
|
49
|
+
including private ones:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
agent-sdk slack create --dir .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
See the [Slack guide](../guides/slack.md).
|
|
56
|
+
|
|
57
|
+
## First weekly run
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
agent-sdk dev
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Schedules never fire under `dev`. Dispatch the same path production
|
|
64
|
+
uses:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
curl -X POST http://127.0.0.1:3000/v1/dev/schedules/weekly
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The playground can run `/queue/run` too.
|
|
71
|
+
|
|
72
|
+
The host writes `week/prs.md`, `week/slack.md`, `week/window.txt`,
|
|
73
|
+
and `week/tree/**.txt` snapshots of the current `AGENTS.md` files,
|
|
74
|
+
then starts a model turn. The
|
|
75
|
+
model calls `apply_agents` once. A skip finishes. An update parks in
|
|
76
|
+
the playground until someone approves; then a draft PR opens against
|
|
77
|
+
the repository default branch. Later updates to the same base stack
|
|
78
|
+
on `agents-md/<base>`. Pull requests from those branches are ignored
|
|
79
|
+
so the follow-up cannot feed the next week.
|
|
80
|
+
|
|
81
|
+
Chat replies stay in the playground. `apply_agents` records a skip,
|
|
82
|
+
or parks the write. Approve there or with
|
|
83
|
+
`POST /v1/session/:id/approvals/:callId`.
|
|
84
|
+
|
|
85
|
+
## What to edit
|
|
86
|
+
|
|
87
|
+
- `agent/lib/config.ts`: repo and Slack channels
|
|
88
|
+
- `agent/instructions.md`: what counts as an update
|
|
89
|
+
- `evals/agents.eval.ts`: smoke cases
|
|
90
|
+
|
|
91
|
+
## Evals
|
|
92
|
+
|
|
93
|
+
Four smoke cases: a lint-only week, a billing rule that parks the
|
|
94
|
+
write, the same rule already in `AGENTS.md`, and an empty week.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
agent-sdk eval
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Eval sessions skip the GitHub write.
|
|
101
|
+
|
|
102
|
+
## Deploy
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
agent-sdk deploy
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Run it from the agent's git checkout. The command infers repository,
|
|
109
|
+
ref, path, and slug. Production fires the Monday cron. The deployment
|
|
110
|
+
uses the team's Cursor GitHub connection for the watched repo.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Keep a code wiki current after merge"
|
|
3
|
+
description: "Scaffold the agent, pick repos, replay a merged PR, and deploy."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Keep a code wiki current after merge
|
|
7
|
+
|
|
8
|
+
This agent wakes when a watched pull request merges. It reads the diff
|
|
9
|
+
and the in-repo `wiki/` pages. When a durable fact changed, it opens a
|
|
10
|
+
follow-up pull request with the page edits. Chores, cherry-picks, and
|
|
11
|
+
wiki-only merges stay quiet.
|
|
12
|
+
|
|
13
|
+
This template is one model turn: read the merge, then call `apply_wiki`.
|
|
14
|
+
|
|
15
|
+
## Scaffold
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx @cursor/july init ./code-wiki --template code-wiki
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`init` asks which GitHub repos to watch. Every repo must share one
|
|
22
|
+
owner. Pass `--var repos=acme/api,acme/web` to skip the prompt.
|
|
23
|
+
|
|
24
|
+
The list lands in `agent/lib/repos.ts`. The GitHub channel reads it for
|
|
25
|
+
`cursorAccount` and for the wake filter. Edit that file when the set
|
|
26
|
+
changes.
|
|
27
|
+
|
|
28
|
+
Pages live in `wiki/` at the repository root. Keep them flat markdown.
|
|
29
|
+
Add `wiki/_index.md` as the catalog.
|
|
30
|
+
|
|
31
|
+
## Connect GitHub through Cursor
|
|
32
|
+
|
|
33
|
+
Connect GitHub in Cursor for those repositories (Settings or
|
|
34
|
+
[cursor.com/dashboard](https://cursor.com/dashboard)). Sign the host in:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
cd code-wiki
|
|
38
|
+
agent-sdk login
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`cursorAccount` pulls SCM events from Cursor and mints a short-lived,
|
|
42
|
+
repo-scoped credential with `contents-write` so the agent can open the
|
|
43
|
+
follow-up PR. See the [GitHub guide](../guides/github.md).
|
|
44
|
+
|
|
45
|
+
## First update
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
agent-sdk dev
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`dev` starts the Cursor event relay for the watched repos. To drive a
|
|
52
|
+
known merge without waiting on a live push:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
agent-sdk github replay https://github.com/acme/api/pull/12 --dir . --action closed
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`replay` needs pull access. The payload must be a merged PR (`closed`
|
|
59
|
+
and `merged`). Repos outside `agent/lib/repos.ts`, wiki-only merges,
|
|
60
|
+
and branches named `wiki/*` are ignored so the follow-up PR cannot
|
|
61
|
+
wake the agent again.
|
|
62
|
+
|
|
63
|
+
The channel writes `pr/base.ref`, `pr/files.txt`, `pr/diff.patch`, and
|
|
64
|
+
the current `wiki/` pages, then starts a model turn. The model calls
|
|
65
|
+
`apply_wiki` once. The follow-up PR targets that merge's base. Later
|
|
66
|
+
updates to the same base stack on `wiki/<base>`.
|
|
67
|
+
|
|
68
|
+
Chat replies stay in the playground. `apply_wiki` opens the GitHub
|
|
69
|
+
pull request, or records a skip.
|
|
70
|
+
|
|
71
|
+
## What to edit
|
|
72
|
+
|
|
73
|
+
- `agent/lib/repos.ts`: watched repos
|
|
74
|
+
- `agent/instructions.md`: what counts as an update
|
|
75
|
+
- `evals/wiki.eval.ts`: smoke cases
|
|
76
|
+
|
|
77
|
+
## Evals
|
|
78
|
+
|
|
79
|
+
Four smoke cases drawn from a busy merge day: a lint fix, a new
|
|
80
|
+
protobuf contract, a markdown-only change, and a cherry-pick.
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
agent-sdk eval
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Eval sessions skip the GitHub write.
|
|
87
|
+
|
|
88
|
+
## Deploy
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
agent-sdk deploy
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Run it from the agent's git checkout. The command infers repository,
|
|
95
|
+
ref, path, and slug. The deployment uses the team's Cursor GitHub
|
|
96
|
+
connection for the same watched repos.
|
package/docs/troubleshooting.md
CHANGED
|
@@ -42,7 +42,7 @@ not on `PATH`, use `npx @cursor/july`.
|
|
|
42
42
|
| What you see | What to do |
|
|
43
43
|
| --- | --- |
|
|
44
44
|
| `409` on a follow-up message | Refresh the `continuationToken` or confirm the session is a chat session. Task sessions do not accept follow-ups. |
|
|
45
|
-
| `409 session_busy` on `call --session` | Wait for the
|
|
45
|
+
| `409 session_busy` on `call --session` | The tool is a write (or declares no effect) and a model turn is running. Wait for the turn to finish, omit `--session` for a one-off call, or declare `effect: "read"` on a tool that only reads so it runs alongside turns. |
|
|
46
46
|
| `403` on stream or follow-up | Use the same auth identity that created the session. Off localhost, pass `--bearer-token` and send it on every request. |
|
|
47
47
|
| Works on localhost; blocked through a tunnel or LAN | Default auth allows only direct loopback callers. Share the host with `--bearer-token <secret>` (or authored `bearerAuth`). Use `--allow-anonymous` only on a trusted private network. |
|
|
48
48
|
| A channel route fails to compile with a schema type error | `GET` routes need a Zod `querySchema`. `POST` / `PUT` / `PATCH` need a Zod `bodySchema`. Use `z.object({})` or `z.unknown()` for open shapes. |
|
|
@@ -70,7 +70,7 @@ not on `PATH`, use `npx @cursor/july`.
|
|
|
70
70
|
| What you see | What to do |
|
|
71
71
|
| --- | --- |
|
|
72
72
|
| `must be defineConnection({ url, oauth: true })` | The connection file needs `oauth: true`, or you passed the wrong connection name to `agent-sdk mcp oauth`. |
|
|
73
|
-
| Local auth works; hosted calls unauthorized |
|
|
73
|
+
| Local auth works; hosted calls unauthorized | Finish Connect on the hosted engine, or run `agent-sdk mcp oauth <name> --store`. Confirm names with `agent-sdk secrets list <slug>`, then redeploy. |
|
|
74
74
|
| Model asks for `mcp_auth` or IDE MCP for a connector it already has | Attached MCP is behind meta-tools. Set `advertiseTools: true` for named tools on local turns, or call it from a host tool via `ctx.host.mcp`. |
|
|
75
75
|
|
|
76
76
|
See [Host MCP OAuth](./guides/mcp-oauth.md) and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cursor/july",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.97",
|
|
4
4
|
"description": "(early alpha) Filesystem-first framework for defining Cursor agents as markdown and TypeScript and serving them over channels with the Cursor SDK.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"repository": {
|
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
"!src/**/*.test.ts",
|
|
31
31
|
"!src/internal/tenant-mcp/**",
|
|
32
32
|
"skills/**/*",
|
|
33
|
-
"!skills/operate/**",
|
|
34
33
|
"templates/**/*",
|
|
35
34
|
"docs/**/*.md",
|
|
36
35
|
"!docs/.cursor/**",
|
|
@@ -217,6 +216,7 @@
|
|
|
217
216
|
},
|
|
218
217
|
"scripts": {
|
|
219
218
|
"build": "tsgo -p tsconfig.build.json && node scripts/bundle-publish-shims.mjs && pnpm run build:playground && pnpm run docs:build",
|
|
219
|
+
"build:dist": "node scripts/build-hosted-dist.mjs",
|
|
220
220
|
"postinstall": "node -e \"try{const p='./scripts/install-cursor-skills.mjs';if(require('fs').existsSync(p))require('child_process').execFileSync(process.execPath,[p],{stdio:'inherit'})}catch{}\"",
|
|
221
221
|
"build:playground": "vite build --config playground/vite.config.ts",
|
|
222
222
|
"build:playground:central": "vite build --mode central --config playground/vite.config.ts",
|
package/skills/ab/SKILL.md
CHANGED
|
@@ -1,35 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agentsdk-ab
|
|
3
3
|
description: >-
|
|
4
|
-
Author defineAB live A/B metrics
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
comparison; use defineEval for regression gates.
|
|
4
|
+
Author defineAB live A/B metrics under agent/ab. Sticky variants
|
|
5
|
+
and onSample on live runs. Not a test runner. Use when comparing
|
|
6
|
+
variants on traffic; use defineEval for regression gates.
|
|
8
7
|
---
|
|
9
8
|
|
|
10
9
|
# Agent SDK A/B metrics (`defineAB`)
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
`defineAB` is a **live metrics plug-in**. At session creation the engine runs
|
|
16
|
-
`split` and appends durable `ab.assigned` events; the collector folds the
|
|
17
|
-
session event stream and calls `onSample`. There is **no** `agent-sdk ab`
|
|
18
|
-
CLI and **no** assertion API.
|
|
19
|
-
|
|
20
|
-
Human-facing reference: [`docs/ab.md`](../../docs/ab.md).
|
|
11
|
+
Live metrics plug-in. No `agent-sdk ab` CLI. No assertion API.
|
|
12
|
+
Reference: `docs/ab.md`.
|
|
21
13
|
|
|
22
14
|
| | `defineEval` | `defineAB` |
|
|
23
15
|
| --- | --- | --- |
|
|
24
|
-
| Job |
|
|
16
|
+
| Job | Gates on frozen fixtures | Metrics on live runs |
|
|
25
17
|
| Location | `evals/**/*.eval.ts` | `agent/ab.ts` or `agent/ab/<name>.ts` |
|
|
26
|
-
| How it runs | `agent-sdk eval` |
|
|
27
|
-
| Driver | `t.send` + gates | `split` → `ab.assigned` + `onSample` |
|
|
28
|
-
|
|
29
|
-
## Authoring
|
|
18
|
+
| How it runs | `agent-sdk eval` | Under `serve` / `run` |
|
|
30
19
|
|
|
31
20
|
```ts
|
|
32
|
-
import { defineAB, splitBySessionHash
|
|
21
|
+
import { defineAB, splitBySessionHash } from "@cursor/july/ab";
|
|
33
22
|
|
|
34
23
|
export default defineAB({
|
|
35
24
|
name: "concise-instructions",
|
|
@@ -37,13 +26,11 @@ export default defineAB({
|
|
|
37
26
|
control: { label: "Baseline" },
|
|
38
27
|
treatment: {
|
|
39
28
|
label: "Shorter",
|
|
40
|
-
// Optional: appended to agent instructions for this arm.
|
|
41
29
|
instructions: "Keep replies to one short paragraph.",
|
|
42
30
|
},
|
|
43
31
|
},
|
|
44
32
|
split: splitBySessionHash({ holdout: 0.1 }),
|
|
45
33
|
derive: {
|
|
46
|
-
// Keep sync + cheap — runs on every event, including message deltas.
|
|
47
34
|
weatherCalls: (event) =>
|
|
48
35
|
event.type === "action.result" && event.data.toolName === "get_weather"
|
|
49
36
|
? 1
|
|
@@ -55,8 +42,6 @@ export default defineAB({
|
|
|
55
42
|
});
|
|
56
43
|
```
|
|
57
44
|
|
|
58
|
-
In tools, read the arm from session context:
|
|
59
|
-
|
|
60
45
|
```ts
|
|
61
46
|
async execute(input, ctx) {
|
|
62
47
|
if (ctx.session.abs?.["concise-instructions"] === "treatment") {
|
|
@@ -65,78 +50,9 @@ async execute(input, ctx) {
|
|
|
65
50
|
}
|
|
66
51
|
```
|
|
67
52
|
|
|
53
|
+
Enrollment is at session creation. Eval sessions skip it. Do not
|
|
54
|
+
use `splitIf` to filter evals. Split helpers and `onSample`
|
|
55
|
+
fields: `docs/ab.md`.
|
|
68
56
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
Optional project defaults in `agent/ab.config.ts` (retention + persistence):
|
|
72
|
-
|
|
73
|
-
```ts
|
|
74
|
-
import {
|
|
75
|
-
defineABConfig,
|
|
76
|
-
persistABSamplesToDir,
|
|
77
|
-
persistABSnapshotsToDir,
|
|
78
|
-
} from "@cursor/july/ab";
|
|
79
|
-
|
|
80
|
-
export default defineABConfig({
|
|
81
|
-
// maxPlaygroundSessions: 200, // optional; default 200; A/Bs tab / GET /v1/abs only
|
|
82
|
-
persistSamples: persistABSamplesToDir(".agent-serve/ab-samples"),
|
|
83
|
-
persistSnapshots: persistABSnapshotsToDir(".agent-serve/ab-snapshots"),
|
|
84
|
-
});
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Session `events.ndjson` remains the assignment/metrics source of truth.
|
|
88
|
-
`persistSamples` / `persistSnapshots` are author-controlled exports (like
|
|
89
|
-
eval `persistRuns`).
|
|
90
|
-
|
|
91
|
-
### Stream model
|
|
92
|
-
|
|
93
|
-
Typical new-session prefix:
|
|
94
|
-
|
|
95
|
-
1. `session.started`
|
|
96
|
-
2. one `ab.assigned` per experiment (`variant` key or `null` skip)
|
|
97
|
-
3. `message.received` / `turn.started` / …
|
|
98
|
-
|
|
99
|
-
Enrollment is **at session creation** (before the first turn) so each arm can
|
|
100
|
-
vary instructions and tool behavior from a known assignment. Failed/`null`
|
|
101
|
-
splits persist as `ab.assigned` with `variant: null` (sticky skip). The
|
|
102
|
-
collector is a pure fold over the log. `SessionRecord.abs` is a convenience
|
|
103
|
-
mirror, not a metrics store. After park/restart it replays `events.ndjson` to
|
|
104
|
-
rebuild counters without re-firing `onSample`.
|
|
105
|
-
|
|
106
|
-
**Evals are separate:** the eval harness creates sessions with
|
|
107
|
-
`purpose: "eval"` (playground Evals / `agent-sdk eval`). Those skip
|
|
108
|
-
enrollment entirely — no `ab.assigned`, no `onSample`, omitted from
|
|
109
|
-
`GET /v1/abs`. Ordinary chat / `agent-sdk run` / Slack stay `"live"`.
|
|
110
|
-
Do not use `splitIf` to filter evals; the framework already does.
|
|
111
|
-
|
|
112
|
-
After enrollment, arms are on `session.abs` (experiment → variant | `null`)
|
|
113
|
-
for tools/hooks, and optional per-variant `instructions` are appended to the
|
|
114
|
-
agent prompt for that session (a treatment arm can, say, switch `get_weather`
|
|
115
|
-
to °C for its sessions).
|
|
116
|
-
|
|
117
|
-
### Split helpers
|
|
118
|
-
|
|
119
|
-
| Helper | Behavior |
|
|
120
|
-
| --- | --- |
|
|
121
|
-
| `splitBySessionHash({ weights?, holdout?, salt? })` | Sticky hash → arm |
|
|
122
|
-
| `splitByRandom({ weights?, holdout? })` | Random once, then sticky |
|
|
123
|
-
| `splitAlways("control")` | Pin all new sessions |
|
|
124
|
-
| `splitNone()` | Skip everyone (pause in place) |
|
|
125
|
-
| `splitIf(pred, inner)` | Skip unless `pred` |
|
|
126
|
-
| `(ctx) => …` | Custom — variant key or `null` |
|
|
127
|
-
|
|
128
|
-
### Built-in metrics
|
|
129
|
-
|
|
130
|
-
`turns`, `turnFailures`, `toolCalls`, `toolErrors`, token fields, `wallTimeMs`,
|
|
131
|
-
plus `custom.*` from `derive`. `onSample` fires on `turn.completed` / `turn.failed`.
|
|
132
|
-
|
|
133
|
-
Playground **A/Bs** tab and `GET /v1/abs` fold the same durable streams into
|
|
134
|
-
per-session assignments and aggregate arm totals (no separate metrics store).
|
|
135
|
-
|
|
136
|
-
### `derive` cost
|
|
137
|
-
|
|
138
|
-
`derive` extractors run on **every** session event (same cost model as hooks).
|
|
139
|
-
Keep them synchronous and cheap — no network, no disk, no heavy parsing.
|
|
140
|
-
|
|
141
|
-
Before wiring: pick experiment name + arm labels, a split helper (and who
|
|
142
|
-
to leave out), and a real `onSample` sink — do not invent credentials.
|
|
57
|
+
Pick a name, arm labels, a split, and a real `onSample` sink. Do
|
|
58
|
+
not invent credentials.
|