@cursor/july 0.1.28 → 0.1.29

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.
Files changed (122) hide show
  1. package/dist/bin/agent-serve.js +20 -2
  2. package/dist/channels/slack/slack-channel.d.ts +19 -1
  3. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  4. package/dist/channels/slack/slack-channel.js +29 -0
  5. package/dist/docs/404.html +1 -1
  6. package/dist/docs/ab.html +2 -2
  7. package/dist/docs/assets/{app.CqjrYaT2.js → app.QdunVQKg.js} +1 -1
  8. package/dist/docs/assets/chunks/@localSearchIndexroot.DGe61XHA.js +1 -0
  9. package/dist/docs/assets/chunks/{VPLocalSearchBox.ag-MwUel.js → VPLocalSearchBox.B6EpUXYf.js} +1 -1
  10. package/dist/docs/assets/chunks/{theme.BS-DJWat.js → theme.BOTJVqh7.js} +2 -2
  11. package/dist/docs/building-with-agents.html +2 -2
  12. package/dist/docs/concepts.html +2 -2
  13. package/dist/docs/deployment.html +2 -2
  14. package/dist/docs/evals.html +2 -2
  15. package/dist/docs/example-agents/approval-buddy.html +2 -2
  16. package/dist/docs/example-agents/benny.html +2 -2
  17. package/dist/docs/example-agents/bugbot.html +2 -2
  18. package/dist/docs/example-agents/codebase-wiki.html +2 -2
  19. package/dist/docs/example-agents/codeowners-review.html +2 -2
  20. package/dist/docs/example-agents/concierge.html +2 -2
  21. package/dist/docs/example-agents/fsd.html +2 -2
  22. package/dist/docs/example-agents/index.html +2 -2
  23. package/dist/docs/example-agents/knowledge-base.html +2 -2
  24. package/dist/docs/example-agents/oncall.html +2 -2
  25. package/dist/docs/example-agents/security-reviewer.html +2 -2
  26. package/dist/docs/example-agents/slack-agent.html +2 -2
  27. package/dist/docs/example-agents/weather-agent.html +2 -2
  28. package/dist/docs/guides/agent-to-agent.html +2 -2
  29. package/dist/docs/guides/cloud-runtime.html +2 -2
  30. package/dist/docs/guides/github.html +2 -2
  31. package/dist/docs/guides/human-in-the-loop.html +2 -2
  32. package/dist/docs/guides/mcp-oauth.html +2 -2
  33. package/dist/docs/guides/slack.html +2 -2
  34. package/dist/docs/guides/webhooks.html +2 -2
  35. package/dist/docs/hillclimbing.html +2 -2
  36. package/dist/docs/index.html +2 -2
  37. package/dist/docs/quickstart.html +2 -2
  38. package/dist/docs/reference/agent-config.html +2 -2
  39. package/dist/docs/reference/channels.html +2 -2
  40. package/dist/docs/reference/cli.html +2 -2
  41. package/dist/docs/reference/connections.html +2 -2
  42. package/dist/docs/reference/hooks.html +2 -2
  43. package/dist/docs/reference/http-api.html +2 -2
  44. package/dist/docs/reference/instructions.html +2 -2
  45. package/dist/docs/reference/playground.html +2 -2
  46. package/dist/docs/reference/project-layout.html +2 -2
  47. package/dist/docs/reference/prompt.html +2 -2
  48. package/dist/docs/reference/schedules.html +2 -2
  49. package/dist/docs/reference/sessions.html +2 -2
  50. package/dist/docs/reference/skills.html +2 -2
  51. package/dist/docs/reference/subagents.html +2 -2
  52. package/dist/docs/reference/tools.html +2 -2
  53. package/dist/docs/scaffolding-agents.html +2 -2
  54. package/dist/docs/storage.html +2 -2
  55. package/dist/docs/troubleshooting.html +2 -2
  56. package/dist/internal/cloud-turn-cost.d.ts +34 -0
  57. package/dist/internal/cloud-turn-cost.d.ts.map +1 -0
  58. package/dist/internal/cloud-turn-cost.js +106 -0
  59. package/dist/internal/discovery.d.ts.map +1 -1
  60. package/dist/internal/discovery.js +1 -1
  61. package/dist/internal/event-log.d.ts +6 -0
  62. package/dist/internal/event-log.d.ts.map +1 -1
  63. package/dist/internal/event-log.js +16 -0
  64. package/dist/internal/host-platforms.d.ts +13 -0
  65. package/dist/internal/host-platforms.d.ts.map +1 -1
  66. package/dist/internal/host-platforms.js +25 -16
  67. package/dist/internal/http-channel.d.ts.map +1 -1
  68. package/dist/internal/http-channel.js +3 -1
  69. package/dist/internal/local-control-plane.d.ts +25 -0
  70. package/dist/internal/local-control-plane.d.ts.map +1 -0
  71. package/dist/internal/local-control-plane.js +172 -0
  72. package/dist/internal/platform-schedule-sync.d.ts +17 -0
  73. package/dist/internal/platform-schedule-sync.d.ts.map +1 -0
  74. package/dist/internal/platform-schedule-sync.js +72 -0
  75. package/dist/internal/platform-timers.d.ts +28 -0
  76. package/dist/internal/platform-timers.d.ts.map +1 -0
  77. package/dist/internal/platform-timers.js +120 -0
  78. package/dist/internal/reminder-runner.d.ts +16 -12
  79. package/dist/internal/reminder-runner.d.ts.map +1 -1
  80. package/dist/internal/reminder-runner.js +112 -61
  81. package/dist/internal/reminder-store.d.ts +5 -4
  82. package/dist/internal/reminder-store.d.ts.map +1 -1
  83. package/dist/internal/reminder-store.js +5 -4
  84. package/dist/internal/sdk-runner.d.ts.map +1 -1
  85. package/dist/internal/sdk-runner.js +44 -1
  86. package/dist/internal/server.d.ts.map +1 -1
  87. package/dist/internal/server.js +105 -11
  88. package/dist/internal/session-engine.d.ts +22 -1
  89. package/dist/internal/session-engine.d.ts.map +1 -1
  90. package/dist/internal/session-engine.js +110 -4
  91. package/dist/internal/storage-coordinator.d.ts +4 -15
  92. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  93. package/dist/internal/storage-coordinator.js +4 -30
  94. package/dist/playground/assets/index-CquRB-l0.js +85 -0
  95. package/dist/playground/assets/{index-Bul1WfrB.css → index-Dj0bWpkn.css} +1 -1
  96. package/dist/playground/index.html +2 -2
  97. package/dist/storage.d.ts +0 -3
  98. package/dist/storage.d.ts.map +1 -1
  99. package/dist/storage.js +0 -3
  100. package/dist/types.d.ts +11 -2
  101. package/dist/types.d.ts.map +1 -1
  102. package/package.json +1 -1
  103. package/src/bin/agent-serve.ts +21 -2
  104. package/src/channels/slack/slack-channel.ts +46 -0
  105. package/src/internal/cloud-turn-cost.ts +158 -0
  106. package/src/internal/discovery.ts +1 -0
  107. package/src/internal/event-log.ts +17 -0
  108. package/src/internal/host-platforms.ts +40 -18
  109. package/src/internal/http-channel.ts +3 -1
  110. package/src/internal/local-control-plane.ts +188 -0
  111. package/src/internal/platform-schedule-sync.ts +81 -0
  112. package/src/internal/platform-timers.ts +173 -0
  113. package/src/internal/reminder-runner.ts +131 -67
  114. package/src/internal/reminder-store.ts +5 -4
  115. package/src/internal/sdk-runner.ts +49 -1
  116. package/src/internal/server.ts +121 -6
  117. package/src/internal/session-engine.ts +138 -3
  118. package/src/internal/storage-coordinator.ts +4 -41
  119. package/src/storage.ts +0 -5
  120. package/src/types.ts +11 -2
  121. package/dist/docs/assets/chunks/@localSearchIndexroot.VWQoPFJ1.js +0 -1
  122. package/dist/playground/assets/index-CkN74U_L.js +0 -87
@@ -270,6 +270,9 @@ Options:
270
270
  connections (defineConnection({ agent })) on cloud-runtime
271
271
  turns; local turns always use loopback.
272
272
  --no-schedules Disable the cron runner outside dev mode.
273
+ --no-control-plane serve: do not start the bundled control plane (schedule
274
+ and reminder clocks). Cursor hosting passes this so the
275
+ kit uses the Cursor backend instead.
273
276
  --team deploy/deployments/deployment/stop/rotate-token and
274
277
  chat/resume/run/call/eval/logs/sessions/session/playground
275
278
  --prod: Cursor team id. Defaults to the account's team when
@@ -369,6 +372,17 @@ Options:
369
372
  playground-openable). github replay: write synthesized
370
373
  payloads as fixtures.
371
374
  `;
375
+ function writeStdout(text) {
376
+ return new Promise((resolve, reject) => {
377
+ process.stdout.write(text, (error) => {
378
+ if (error) {
379
+ reject(error);
380
+ return;
381
+ }
382
+ resolve();
383
+ });
384
+ });
385
+ }
372
386
  function main(argv) {
373
387
  return __awaiter(this, void 0, void 0, function* () {
374
388
  var _a, _b, _c, _d, _e, _f, _g;
@@ -378,11 +392,13 @@ function main(argv) {
378
392
  command === "help" ||
379
393
  command === "--help" ||
380
394
  command === "-h") {
381
- process.stdout.write(HELP);
395
+ // Await the write: HELP is larger than a pipe buffer, and process.exit
396
+ // after main() would otherwise truncate --help under execFile / CI.
397
+ yield writeStdout(HELP);
382
398
  return command === undefined ? 1 : 0;
383
399
  }
384
400
  if (command === "version" || command === "--version" || command === "-V") {
385
- process.stdout.write(`${CLI} ${packageVersion()}\n`);
401
+ yield writeStdout(`${CLI} ${packageVersion()}\n`);
386
402
  return 0;
387
403
  }
388
404
  // `session --events` means "dump raw events" (boolean). Rewrite so it does
@@ -408,6 +424,7 @@ function main(argv) {
408
424
  "allow-anonymous-cursor-account-mcp": { type: "boolean", default: false },
409
425
  "cursor-github-proxy": { type: "boolean", default: false },
410
426
  "no-schedules": { type: "boolean", default: false },
427
+ "no-control-plane": { type: "boolean", default: false },
411
428
  "no-playground": { type: "boolean", default: false },
412
429
  "no-docs": { type: "boolean", default: false },
413
430
  url: { type: "string" },
@@ -961,6 +978,7 @@ function main(argv) {
961
978
  : undefined,
962
979
  cursorGithubProxy: values["cursor-github-proxy"] === true ? true : undefined,
963
980
  schedules: values["no-schedules"] === true ? false : undefined,
981
+ noControlPlane: values["no-control-plane"] === true ? true : undefined,
964
982
  playground: values["no-playground"] === true ? false : undefined,
965
983
  docs: values["no-docs"] === true ? false : undefined,
966
984
  publicUrl: values["public-url"],
@@ -7,7 +7,25 @@
7
7
  * envelopes.
8
8
  */
9
9
  import type { ChannelDefinition } from "../../types.js";
10
- import { type SlackChannelOptions, type SlackChannelState, type SlackCursorAgentName } from "./types.js";
10
+ import { type SlackChannelOptions, type SlackChannelState, type SlackCredentials, type SlackCursorAgentName } from "./types.js";
11
+ /**
12
+ * Recover the {@link SlackChannelOptions} used to build a channel definition,
13
+ * if it was created via {@link slackChannel}.
14
+ */
15
+ export declare function getSlackChannelOptions(definition: object): SlackChannelOptions | undefined;
16
+ /** Dedicated Socket Mode credentials for `ctx.host.slack.getClient()`. */
17
+ export interface SlackChannelHostBinding {
18
+ credentials: SlackCredentials;
19
+ envPrefix?: string;
20
+ }
21
+ /**
22
+ * First dedicated (Socket Mode) Slack channel on a project. Skips
23
+ * `cursorAccount` channels — those have no local bot token for
24
+ * {@link HostContext.slack.getClient}.
25
+ */
26
+ export declare function resolveDedicatedSlackHostBinding(channels: ReadonlyArray<{
27
+ definition: object;
28
+ }>): SlackChannelHostBinding | undefined;
11
29
  /**
12
30
  * Create a Slack channel. Author as `agent/channels/slack.ts` default export.
13
31
  *
@@ -1 +1 @@
1
- {"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/slack-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAEV,iBAAiB,EAMlB,MAAM,gBAAgB,CAAC;AA+CxB,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAC7D,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,GAAG;IAChD,SAAS,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;CACnC,GACL,iBAAiB,CAAC,iBAAiB,CAAC,CA8etC"}
1
+ {"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/slack-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAEV,iBAAiB,EAMlB,MAAM,gBAAgB,CAAC;AA+CxB,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAC1B,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,SAAS,CAEjC;AAED,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,aAAa,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,uBAAuB,GAAG,SAAS,CAYrC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAC7D,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,GAAG;IAChD,SAAS,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;CACnC,GACL,iBAAiB,CAAC,iBAAiB,CAAC,CAgftC"}
@@ -29,6 +29,34 @@ import { createSlackLogger } from "./log.js";
29
29
  import { startSlackSocketMode, } from "./socket-mode.js";
30
30
  import { buildToolApprovalEvents } from "./tool-approval-events.js";
31
31
  import { assertSlackCursorAgentName, } from "./types.js";
32
+ /** Options used to construct a slack channel — for host-level credential binding. */
33
+ const slackChannelOptionsByDefinition = new WeakMap();
34
+ /**
35
+ * Recover the {@link SlackChannelOptions} used to build a channel definition,
36
+ * if it was created via {@link slackChannel}.
37
+ */
38
+ export function getSlackChannelOptions(definition) {
39
+ return slackChannelOptionsByDefinition.get(definition);
40
+ }
41
+ /**
42
+ * First dedicated (Socket Mode) Slack channel on a project. Skips
43
+ * `cursorAccount` channels — those have no local bot token for
44
+ * {@link HostContext.slack.getClient}.
45
+ */
46
+ export function resolveDedicatedSlackHostBinding(channels) {
47
+ var _a;
48
+ for (const channel of channels) {
49
+ const options = slackChannelOptionsByDefinition.get(channel.definition);
50
+ if (options === undefined || options.cursorAccount === true) {
51
+ continue;
52
+ }
53
+ return {
54
+ credentials: (_a = options.credentials) !== null && _a !== void 0 ? _a : credentialsFromEnv(options.envPrefix),
55
+ envPrefix: options.envPrefix,
56
+ };
57
+ }
58
+ return undefined;
59
+ }
32
60
  /**
33
61
  * Create a Slack channel. Author as `agent/channels/slack.ts` default export.
34
62
  *
@@ -396,6 +424,7 @@ export function slackChannel(options = {}) {
396
424
  yield (_a = options.onStop) === null || _a === void 0 ? void 0 : _a.call(options);
397
425
  }),
398
426
  });
427
+ slackChannelOptionsByDefinition.set(definition, options);
399
428
  if (accountTransport !== undefined) {
400
429
  // Serve-time seam: the host discovers cursor-account channels through
401
430
  // this registry, binds the outbound transport, and dispatches relayed
@@ -9,7 +9,7 @@
9
9
  <link rel="preload stylesheet" href="/docs/assets/style.Bj-IXa5W.css" as="style">
10
10
  <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/docs/assets/app.CqjrYaT2.js"></script>
12
+ <script type="module" src="/docs/assets/app.QdunVQKg.js"></script>
13
13
  <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
14
  <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
15
15
  <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
package/dist/docs/ab.html CHANGED
@@ -9,9 +9,9 @@
9
9
  <link rel="preload stylesheet" href="/docs/assets/style.Bj-IXa5W.css" as="style">
10
10
  <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/docs/assets/app.CqjrYaT2.js"></script>
12
+ <script type="module" src="/docs/assets/app.QdunVQKg.js"></script>
13
13
  <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
- <link rel="modulepreload" href="/docs/assets/chunks/theme.BS-DJWat.js">
14
+ <link rel="modulepreload" href="/docs/assets/chunks/theme.BOTJVqh7.js">
15
15
  <link rel="modulepreload" href="/docs/assets/chunks/framework.CAZyNGu9.js">
16
16
  <link rel="modulepreload" href="/docs/assets/ab.md.BMCZ6Hd7.lean.js">
17
17
  <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
@@ -1 +1 @@
1
- import{t as p}from"./chunks/theme.BS-DJWat.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.CAZyNGu9.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
1
+ import{t as p}from"./chunks/theme.BOTJVqh7.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.CAZyNGu9.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};