@cursor/july 0.1.7 → 0.1.9

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 (210) hide show
  1. package/dist/bin/agent-serve.js +31 -2
  2. package/dist/channels/slack/channel-watch.d.ts +6 -1
  3. package/dist/channels/slack/channel-watch.d.ts.map +1 -1
  4. package/dist/channels/slack/channel-watch.js +22 -1
  5. package/dist/channels/slack/cursor-account.d.ts +4 -0
  6. package/dist/channels/slack/cursor-account.d.ts.map +1 -1
  7. package/dist/channels/slack/cursor-account.js +12 -2
  8. package/dist/channels/slack/defaults.d.ts +10 -5
  9. package/dist/channels/slack/defaults.d.ts.map +1 -1
  10. package/dist/channels/slack/defaults.js +39 -17
  11. package/dist/channels/slack/dispatch.d.ts +18 -0
  12. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  13. package/dist/channels/slack/dispatch.js +141 -38
  14. package/dist/channels/slack/inbound.d.ts +13 -3
  15. package/dist/channels/slack/inbound.d.ts.map +1 -1
  16. package/dist/channels/slack/inbound.js +17 -9
  17. package/dist/channels/slack/index.d.ts +4 -0
  18. package/dist/channels/slack/index.d.ts.map +1 -1
  19. package/dist/channels/slack/index.js +4 -0
  20. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  21. package/dist/channels/slack/live-delivery.js +1 -0
  22. package/dist/channels/slack/manifest.d.ts.map +1 -1
  23. package/dist/channels/slack/manifest.js +3 -0
  24. package/dist/channels/slack/nudge-carrier.d.ts +19 -0
  25. package/dist/channels/slack/nudge-carrier.d.ts.map +1 -0
  26. package/dist/channels/slack/nudge-carrier.js +166 -0
  27. package/dist/channels/slack/nudge-store.d.ts +61 -0
  28. package/dist/channels/slack/nudge-store.d.ts.map +1 -0
  29. package/dist/channels/slack/nudge-store.js +266 -0
  30. package/dist/channels/slack/post-update-delivery.js +318 -0
  31. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  32. package/dist/channels/slack/slack-channel.js +74 -25
  33. package/dist/channels/slack/stop.d.ts +14 -0
  34. package/dist/channels/slack/stop.d.ts.map +1 -0
  35. package/dist/channels/slack/stop.js +22 -0
  36. package/dist/channels/slack/thread-context.d.ts +81 -0
  37. package/dist/channels/slack/thread-context.d.ts.map +1 -0
  38. package/dist/channels/slack/thread-context.js +470 -0
  39. package/dist/channels/slack/types.d.ts +27 -0
  40. package/dist/channels/slack/types.d.ts.map +1 -1
  41. package/dist/docs/404.html +2 -2
  42. package/dist/docs/ab.html +4 -4
  43. package/dist/docs/assets/{app.COTN7wgo.js → app.Ciosf24M.js} +1 -1
  44. package/dist/docs/assets/chunks/@localSearchIndexroot.D154Detj.js +1 -0
  45. package/dist/docs/assets/chunks/{VPLocalSearchBox.BW3TBdT0.js → VPLocalSearchBox.BcRDly7n.js} +1 -1
  46. package/dist/docs/assets/chunks/{theme.BEJW0vE7.js → theme.CMpbjdfx.js} +2 -2
  47. package/dist/docs/assets/{deployment.md.BtfEsc9S.js → deployment.md.DC5-ImcM.js} +1 -1
  48. package/dist/docs/assets/{example-agents_approval-buddy.md.8R5phXb5.js → example-agents_approval-buddy.md.DFGBYLcc.js} +2 -2
  49. package/dist/docs/assets/{example-agents_approval-buddy.md.8R5phXb5.lean.js → example-agents_approval-buddy.md.DFGBYLcc.lean.js} +1 -1
  50. package/dist/docs/assets/example-agents_index.md.BPXjUtRB.js +2 -0
  51. package/dist/docs/assets/example-agents_index.md.BPXjUtRB.lean.js +1 -0
  52. package/dist/docs/assets/example-agents_oncall.md.BG_sUMly.js +10 -0
  53. package/dist/docs/assets/example-agents_oncall.md.BG_sUMly.lean.js +1 -0
  54. package/dist/docs/assets/{example-agents_security-reviewer.md.D2rtwDTO.js → example-agents_security-reviewer.md.CE9v-aKm.js} +2 -2
  55. package/dist/docs/assets/{example-agents_security-reviewer.md.D2rtwDTO.lean.js → example-agents_security-reviewer.md.CE9v-aKm.lean.js} +1 -1
  56. package/dist/docs/assets/{guides_slack.md.CCwqHvSV.js → guides_slack.md.FWale6Ip.js} +4 -3
  57. package/dist/docs/assets/{guides_slack.md.CCwqHvSV.lean.js → guides_slack.md.FWale6Ip.lean.js} +1 -1
  58. package/dist/docs/assets/{reference_sessions.md.DdjWabnN.js → reference_sessions.md.DLd6mvbv.js} +2 -2
  59. package/dist/docs/assets/{reference_sessions.md.DdjWabnN.lean.js → reference_sessions.md.DLd6mvbv.lean.js} +1 -1
  60. package/dist/docs/assets/{storage.md.CVnInNiN.js → storage.md.DRTdnFvd.js} +9 -2
  61. package/dist/docs/assets/{storage.md.CVnInNiN.lean.js → storage.md.DRTdnFvd.lean.js} +1 -1
  62. package/dist/docs/building-with-agents.html +4 -4
  63. package/dist/docs/concepts.html +4 -4
  64. package/dist/docs/deployment.html +6 -6
  65. package/dist/docs/evals.html +4 -4
  66. package/dist/docs/example-agents/approval-buddy.html +5 -5
  67. package/dist/docs/example-agents/benny.html +5 -5
  68. package/dist/docs/example-agents/bugbot.html +5 -5
  69. package/dist/docs/example-agents/codebase-wiki.html +4 -4
  70. package/dist/docs/example-agents/codeowners-review.html +4 -4
  71. package/dist/docs/example-agents/concierge.html +4 -4
  72. package/dist/docs/example-agents/fsd.html +4 -4
  73. package/dist/docs/example-agents/index.html +6 -6
  74. package/dist/docs/example-agents/knowledge-base.html +4 -4
  75. package/dist/docs/example-agents/oncall.html +34 -0
  76. package/dist/docs/example-agents/security-reviewer.html +6 -6
  77. package/dist/docs/example-agents/slack-agent.html +4 -4
  78. package/dist/docs/example-agents/weather-agent.html +4 -4
  79. package/dist/docs/guides/agent-to-agent.html +4 -4
  80. package/dist/docs/guides/cloud-runtime.html +4 -4
  81. package/dist/docs/guides/github.html +4 -4
  82. package/dist/docs/guides/human-in-the-loop.html +4 -4
  83. package/dist/docs/guides/slack.html +7 -6
  84. package/dist/docs/guides/webhooks.html +4 -4
  85. package/dist/docs/hashmap.json +1 -1
  86. package/dist/docs/hillclimbing.html +4 -4
  87. package/dist/docs/index.html +4 -4
  88. package/dist/docs/quickstart.html +4 -4
  89. package/dist/docs/reference/agent-config.html +4 -4
  90. package/dist/docs/reference/channels.html +4 -4
  91. package/dist/docs/reference/cli.html +4 -4
  92. package/dist/docs/reference/connections.html +4 -4
  93. package/dist/docs/reference/hooks.html +4 -4
  94. package/dist/docs/reference/http-api.html +4 -4
  95. package/dist/docs/reference/instructions.html +4 -4
  96. package/dist/docs/reference/playground.html +4 -4
  97. package/dist/docs/reference/project-layout.html +4 -4
  98. package/dist/docs/reference/schedules.html +4 -4
  99. package/dist/docs/reference/sessions.html +5 -5
  100. package/dist/docs/reference/skills.html +4 -4
  101. package/dist/docs/reference/subagents.html +4 -4
  102. package/dist/docs/reference/tools.html +4 -4
  103. package/dist/docs/scaffolding-agents.html +4 -4
  104. package/dist/docs/storage.html +13 -6
  105. package/dist/docs/troubleshooting.html +4 -4
  106. package/dist/internal/cli-deploy.d.ts.map +1 -1
  107. package/dist/internal/cli-deploy.js +45 -18
  108. package/dist/internal/cli-mcp.d.ts +64 -0
  109. package/dist/internal/cli-mcp.d.ts.map +1 -0
  110. package/dist/internal/cli-mcp.js +570 -0
  111. package/dist/internal/deploy-client.d.ts +7 -1
  112. package/dist/internal/deploy-client.d.ts.map +1 -1
  113. package/dist/internal/deploy-client.js +3 -0
  114. package/dist/internal/deploy-source.d.ts +3 -0
  115. package/dist/internal/deploy-source.d.ts.map +1 -1
  116. package/dist/internal/deploy-source.js +25 -7
  117. package/dist/internal/discovery.js +1 -1
  118. package/dist/internal/distribution.d.ts.map +1 -1
  119. package/dist/internal/distribution.js +3 -0
  120. package/dist/internal/host-kv.d.ts +17 -0
  121. package/dist/internal/host-kv.d.ts.map +1 -0
  122. package/dist/internal/host-kv.js +77 -0
  123. package/dist/internal/hosting.d.ts +12 -2
  124. package/dist/internal/hosting.d.ts.map +1 -1
  125. package/dist/internal/hosting.js +21 -4
  126. package/dist/internal/json-dir-store.js +100 -0
  127. package/dist/internal/logs-client.d.ts +16 -2
  128. package/dist/internal/logs-client.d.ts.map +1 -1
  129. package/dist/internal/logs-client.js +51 -16
  130. package/dist/internal/server.d.ts.map +1 -1
  131. package/dist/internal/server.js +8 -0
  132. package/dist/internal/session-engine.d.ts +42 -7
  133. package/dist/internal/session-engine.d.ts.map +1 -1
  134. package/dist/internal/session-engine.js +276 -66
  135. package/dist/internal/storage-coordinator.d.ts +18 -1
  136. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  137. package/dist/internal/storage-coordinator.js +43 -0
  138. package/dist/internal/workspace.d.ts +19 -0
  139. package/dist/internal/workspace.d.ts.map +1 -1
  140. package/dist/internal/workspace.js +47 -13
  141. package/dist/playground/assets/{index-72vCOBWO.js → index-C0-QEG4O.js} +42 -42
  142. package/dist/playground/assets/index-z3JY9O2x.css +1 -0
  143. package/dist/playground/index.html +2 -2
  144. package/dist/storage-backends/cursor-hosted.d.ts +65 -0
  145. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -0
  146. package/dist/storage-backends/cursor-hosted.js +203 -0
  147. package/dist/storage-backends/file-kv.d.ts +42 -0
  148. package/dist/storage-backends/file-kv.d.ts.map +1 -0
  149. package/dist/storage-backends/file-kv.js +190 -0
  150. package/dist/storage-backends/postgres-kv.d.ts +82 -0
  151. package/dist/storage-backends/postgres-kv.d.ts.map +1 -0
  152. package/dist/storage-backends/postgres-kv.js +185 -0
  153. package/dist/storage.d.ts +10 -1
  154. package/dist/storage.d.ts.map +1 -1
  155. package/dist/storage.js +10 -1
  156. package/dist/types.d.ts +79 -0
  157. package/dist/types.d.ts.map +1 -1
  158. package/docs/.vitepress/cache/deps/package.json +3 -0
  159. package/docs/deployment.md +7 -3
  160. package/docs/example-agents/approval-buddy.md +1 -1
  161. package/docs/example-agents/index.md +15 -10
  162. package/docs/example-agents/oncall.md +216 -0
  163. package/docs/example-agents/security-reviewer.md +5 -5
  164. package/docs/guides/slack.md +11 -2
  165. package/docs/reference/sessions.md +13 -4
  166. package/docs/storage.md +41 -0
  167. package/package.json +22 -1
  168. package/skills/framework-map/SKILL.md +6 -4
  169. package/src/bin/agent-serve.ts +32 -2
  170. package/src/channels/slack/channel-watch.ts +28 -1
  171. package/src/channels/slack/cursor-account.ts +20 -0
  172. package/src/channels/slack/defaults.ts +51 -20
  173. package/src/channels/slack/dispatch.ts +215 -40
  174. package/src/channels/slack/inbound.ts +30 -10
  175. package/src/channels/slack/index.ts +4 -0
  176. package/src/channels/slack/live-delivery.ts +1 -0
  177. package/src/channels/slack/manifest.ts +3 -0
  178. package/src/channels/slack/nudge-carrier.ts +182 -0
  179. package/src/channels/slack/nudge-store.ts +308 -0
  180. package/src/channels/slack/slack-channel.ts +106 -31
  181. package/src/channels/slack/stop.ts +25 -0
  182. package/src/channels/slack/thread-context.ts +572 -0
  183. package/src/channels/slack/types.ts +27 -0
  184. package/src/internal/cli-deploy.ts +58 -20
  185. package/src/internal/cli-mcp.ts +708 -0
  186. package/src/internal/deploy-client.ts +11 -0
  187. package/src/internal/deploy-source.ts +24 -6
  188. package/src/internal/discovery.ts +1 -1
  189. package/src/internal/distribution.ts +3 -0
  190. package/src/internal/host-kv.ts +85 -0
  191. package/src/internal/hosting.ts +24 -4
  192. package/src/internal/logs-client.ts +67 -21
  193. package/src/internal/server.ts +31 -0
  194. package/src/internal/session-engine.ts +379 -61
  195. package/src/internal/storage-coordinator.ts +41 -0
  196. package/src/internal/workspace.ts +48 -11
  197. package/src/storage-backends/cursor-hosted.ts +246 -0
  198. package/src/storage-backends/file-kv.ts +221 -0
  199. package/src/storage-backends/postgres-kv.ts +253 -0
  200. package/src/storage.ts +11 -1
  201. package/src/types.ts +83 -0
  202. package/dist/docs/assets/chunks/@localSearchIndexroot.B7UcKvIn.js +0 -1
  203. package/dist/docs/assets/example-agents_index.md.CRqJlnIf.js +0 -2
  204. package/dist/docs/assets/example-agents_index.md.CRqJlnIf.lean.js +0 -1
  205. package/dist/internal/persistence-coordinator.d.ts +0 -127
  206. package/dist/internal/persistence-coordinator.d.ts.map +0 -1
  207. package/dist/persistence.d.ts +0 -184
  208. package/dist/persistence.d.ts.map +0 -1
  209. package/dist/playground/assets/index-BjnMwYoR.css +0 -1
  210. /package/dist/docs/assets/{deployment.md.BtfEsc9S.lean.js → deployment.md.DC5-ImcM.lean.js} +0 -0
@@ -40,9 +40,11 @@ import {
40
40
  } from "./discovery.js";
41
41
  import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
42
42
  import {
43
+ isReservedSecretName,
43
44
  isValidCursorEventRepo,
44
45
  validateSettableSecretName,
45
46
  } from "./hosting.js";
47
+ import { deployProgressLabel, sanitizeCustomerError } from "./logs-client.js";
46
48
  import { stderrPalette } from "./terminal-style.js";
47
49
 
48
50
  const DEFAULT_POLL_INTERVAL_MS = 3_000;
@@ -554,6 +556,24 @@ async function deployOne(
554
556
  );
555
557
  return 1;
556
558
  }
559
+ // Repo-backed fields without a resolvable https origin become a static
560
+ // deploy body the control plane rejects. Fail here with a fix hint —
561
+ // common when origin is an unrecognized SSH shape (pass --repo).
562
+ if (
563
+ gitRepoUrl === undefined &&
564
+ (gitRef !== undefined ||
565
+ agentPath !== undefined ||
566
+ (options.cursorEventsRepos !== undefined &&
567
+ options.cursorEventsRepos.length > 0) ||
568
+ (options.allowDomains !== undefined && options.allowDomains.length > 0))
569
+ ) {
570
+ ctx.err(
571
+ `Could not resolve an https:// git repository URL for this deploy.\n` +
572
+ ` Pass --repo https://github.com/<owner>/<repo> (inferred from origin when possible).\n` +
573
+ ` Or omit --ref/--path/--cursor-events-repo/--allow-domain for a static engine.\n`
574
+ );
575
+ return 1;
576
+ }
557
577
  for (const repo of options.cursorEventsRepos ?? []) {
558
578
  if (!isValidCursorEventRepo(repo)) {
559
579
  ctx.err(`Invalid --cursor-events-repo: ${repo} (expected owner/name)\n`);
@@ -659,13 +679,11 @@ async function deployOne(
659
679
  }
660
680
 
661
681
  if (detail.status !== "running") {
662
- ctx.err(
663
- `Deployment ${slug} ended ${detail.status}${
664
- detail.lastError === null || detail.lastError === undefined
665
- ? ""
666
- : `: ${detail.lastError}`
667
- }\n`
668
- );
682
+ const errorDetail =
683
+ detail.lastError === null || detail.lastError === undefined
684
+ ? ""
685
+ : `: ${sanitizeCustomerError(detail.lastError)}`;
686
+ ctx.err(`Deployment ${slug} ended ${detail.status}${errorDetail}\n`);
669
687
  return 1;
670
688
  }
671
689
  ctx.out(
@@ -709,7 +727,11 @@ function warnMissingSecrets(
709
727
  return;
710
728
  }
711
729
  const setNames = new Set(set ?? []);
712
- const missing = declared.filter((name) => !setNames.has(name));
730
+ // Platform-managed names (CURSOR_*, hosted storage) are injected by the
731
+ // control plane and never appear in secrets list — do not warn on them.
732
+ const missing = declared.filter(
733
+ (name) => !setNames.has(name) && !isReservedSecretName(name)
734
+ );
713
735
  if (missing.length === 0) {
714
736
  return;
715
737
  }
@@ -793,11 +815,23 @@ export async function cmdDeploymentStatus(
793
815
  const lines = [
794
816
  `${detail.slug} (team ${detail.teamId})`,
795
817
  ` status: ${detail.status}`,
818
+ ];
819
+ if (detail.progress !== undefined) {
820
+ lines.push(` progress: ${detail.progress}`);
821
+ }
822
+ if (
823
+ detail.statusMessage !== null &&
824
+ detail.statusMessage !== undefined &&
825
+ detail.statusMessage.trim() !== ""
826
+ ) {
827
+ lines.push(` step: ${detail.statusMessage}`);
828
+ }
829
+ lines.push(
796
830
  ` generation: ${detail.generation}`,
797
831
  ` kind: ${detail.deploymentKind}`,
798
832
  ` alias: ${aliasUrl}`,
799
- ` playground: ${aliasUrl}/playground`,
800
- ];
833
+ ` playground: ${aliasUrl}/playground`
834
+ );
801
835
  if (detail.gitRepoUrl !== null && detail.gitRepoUrl !== undefined) {
802
836
  lines.push(` repo: ${detail.gitRepoUrl} @ ${detail.gitRef ?? ""}`);
803
837
  }
@@ -835,7 +869,7 @@ export async function cmdDeploymentStatus(
835
869
  );
836
870
  }
837
871
  if (detail.lastError !== null && detail.lastError !== undefined) {
838
- lines.push(` last error: ${detail.lastError}`);
872
+ lines.push(` last error: ${sanitizeCustomerError(detail.lastError)}`);
839
873
  }
840
874
  if (detail.desiredUpdatedAt !== undefined) {
841
875
  lines.push(` updated: ${detail.desiredUpdatedAt}`);
@@ -1229,7 +1263,9 @@ function createLineReader(
1229
1263
  /**
1230
1264
  * Poll deployment status every `pollIntervalMs` until it lands in
1231
1265
  * `terminal` (single-line progress on a TTY, one line per transition
1232
- * otherwise). Throws DeployApiError on request failures or timeout.
1266
+ * otherwise). Prefers customer `statusMessage` / `progress` over raw
1267
+ * status so create → checkout → start is visible. Throws DeployApiError
1268
+ * on request failures or timeout.
1233
1269
  */
1234
1270
  async function pollUntil(
1235
1271
  ctx: DeployCliContext,
@@ -1238,21 +1274,22 @@ async function pollUntil(
1238
1274
  ): Promise<DeploymentDetail> {
1239
1275
  const startedAt = Date.now();
1240
1276
  const tty = process.stderr.isTTY === true;
1241
- let lastStatus: DeploymentStatus | undefined;
1277
+ let lastLabel: string | undefined;
1242
1278
  let sawProgress = false;
1243
1279
 
1244
- const report = (status: DeploymentStatus): void => {
1280
+ const report = (detail: DeploymentDetail): void => {
1245
1281
  if (ctx.json) {
1246
1282
  return;
1247
1283
  }
1284
+ const label = deployProgressLabel(detail);
1248
1285
  const elapsed = Math.round((Date.now() - startedAt) / 1000);
1249
1286
  if (tty) {
1250
- ctx.err(`\r\x1b[2K${slug}: ${status} (${elapsed}s)`);
1287
+ ctx.err(`\r\x1b[2K${slug}: ${label} (${elapsed}s)`);
1251
1288
  sawProgress = true;
1252
- } else if (status !== lastStatus) {
1253
- ctx.err(`${slug}: ${status}\n`);
1289
+ } else if (label !== lastLabel) {
1290
+ ctx.err(`${slug}: ${label}\n`);
1254
1291
  }
1255
- lastStatus = status;
1292
+ lastLabel = label;
1256
1293
  };
1257
1294
  const finishProgressLine = (): void => {
1258
1295
  if (tty && sawProgress) {
@@ -1267,15 +1304,16 @@ async function pollUntil(
1267
1304
  finishProgressLine();
1268
1305
  throw error;
1269
1306
  });
1270
- report(detail.status);
1307
+ report(detail);
1271
1308
  if (terminal.has(detail.status)) {
1272
1309
  finishProgressLine();
1273
1310
  return detail;
1274
1311
  }
1275
1312
  if (Date.now() - startedAt >= ctx.timeoutMs) {
1276
1313
  finishProgressLine();
1314
+ const last = deployProgressLabel(detail);
1277
1315
  throw new DeployApiError(
1278
- `Timed out after ${Math.round(ctx.timeoutMs / 1000)}s waiting for ${slug} (last status: ${detail.status}). It may still converge — check \`${CLI} deployment ${slug} --team ${ctx.teamId}\`.`,
1316
+ `Timed out after ${Math.round(ctx.timeoutMs / 1000)}s waiting for ${slug} (last: ${last}). It may still converge — check \`${CLI} deployment ${slug} --team ${ctx.teamId}\`.`,
1279
1317
  0
1280
1318
  );
1281
1319
  }