@cursor/july 0.1.27 → 0.1.28

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 +12 -3
  2. package/dist/channels/slack/auth.d.ts +13 -13
  3. package/dist/channels/slack/auth.d.ts.map +1 -1
  4. package/dist/channels/slack/auth.js +19 -10
  5. package/dist/channels/slack/cursor-account.d.ts.map +1 -1
  6. package/dist/channels/slack/cursor-account.js +3 -1
  7. package/dist/channels/slack/defaults.d.ts +7 -4
  8. package/dist/channels/slack/defaults.d.ts.map +1 -1
  9. package/dist/channels/slack/defaults.js +14 -4
  10. package/dist/channels/slack/dispatch.d.ts +6 -0
  11. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  12. package/dist/channels/slack/dispatch.js +59 -21
  13. package/dist/channels/slack/external-policy.d.ts +27 -0
  14. package/dist/channels/slack/external-policy.d.ts.map +1 -0
  15. package/dist/channels/slack/external-policy.js +53 -0
  16. package/dist/channels/slack/index.d.ts +1 -0
  17. package/dist/channels/slack/index.d.ts.map +1 -1
  18. package/dist/channels/slack/index.js +1 -0
  19. package/dist/channels/slack/interactive.d.ts +6 -0
  20. package/dist/channels/slack/interactive.d.ts.map +1 -1
  21. package/dist/channels/slack/interactive.js +42 -15
  22. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  23. package/dist/channels/slack/slack-channel.js +19 -6
  24. package/dist/channels/slack/types.d.ts +10 -0
  25. package/dist/channels/slack/types.d.ts.map +1 -1
  26. package/dist/docs/404.html +2 -2
  27. package/dist/docs/ab.html +3 -3
  28. package/dist/docs/assets/{app.BICLoJYF.js → app.CqjrYaT2.js} +1 -1
  29. package/dist/docs/assets/chunks/@localSearchIndexroot.VWQoPFJ1.js +1 -0
  30. package/dist/docs/assets/chunks/{VPLocalSearchBox.wN4Ko9dT.js → VPLocalSearchBox.ag-MwUel.js} +1 -1
  31. package/dist/docs/assets/chunks/{theme.dnnTE-Co.js → theme.BS-DJWat.js} +2 -2
  32. package/dist/docs/assets/{guides_slack.md.D_xFKlnF.js → guides_slack.md.CjmJSvZS.js} +8 -4
  33. package/dist/docs/assets/guides_slack.md.CjmJSvZS.lean.js +1 -0
  34. package/dist/docs/assets/guides_webhooks.md.wSOYas3X.js +183 -0
  35. package/dist/docs/assets/{guides_webhooks.md.B1EswtUu.lean.js → guides_webhooks.md.wSOYas3X.lean.js} +1 -1
  36. package/dist/docs/assets/{index.md.Dfv5ic9t.js → index.md.CH_s5uZe.js} +1 -1
  37. package/dist/docs/assets/{reference_channels.md.DdmiKgqf.js → reference_channels.md.CDhTRfUz.js} +2 -2
  38. package/dist/docs/assets/{reference_channels.md.DdmiKgqf.lean.js → reference_channels.md.CDhTRfUz.lean.js} +1 -1
  39. package/dist/docs/building-with-agents.html +3 -3
  40. package/dist/docs/concepts.html +3 -3
  41. package/dist/docs/deployment.html +3 -3
  42. package/dist/docs/evals.html +3 -3
  43. package/dist/docs/example-agents/approval-buddy.html +3 -3
  44. package/dist/docs/example-agents/benny.html +3 -3
  45. package/dist/docs/example-agents/bugbot.html +3 -3
  46. package/dist/docs/example-agents/codebase-wiki.html +3 -3
  47. package/dist/docs/example-agents/codeowners-review.html +3 -3
  48. package/dist/docs/example-agents/concierge.html +3 -3
  49. package/dist/docs/example-agents/fsd.html +3 -3
  50. package/dist/docs/example-agents/index.html +3 -3
  51. package/dist/docs/example-agents/knowledge-base.html +3 -3
  52. package/dist/docs/example-agents/oncall.html +3 -3
  53. package/dist/docs/example-agents/security-reviewer.html +3 -3
  54. package/dist/docs/example-agents/slack-agent.html +3 -3
  55. package/dist/docs/example-agents/weather-agent.html +3 -3
  56. package/dist/docs/guides/agent-to-agent.html +3 -3
  57. package/dist/docs/guides/cloud-runtime.html +3 -3
  58. package/dist/docs/guides/github.html +3 -3
  59. package/dist/docs/guides/human-in-the-loop.html +3 -3
  60. package/dist/docs/guides/mcp-oauth.html +3 -3
  61. package/dist/docs/guides/slack.html +11 -7
  62. package/dist/docs/guides/webhooks.html +138 -5
  63. package/dist/docs/hashmap.json +1 -1
  64. package/dist/docs/hillclimbing.html +3 -3
  65. package/dist/docs/index.html +5 -5
  66. package/dist/docs/quickstart.html +3 -3
  67. package/dist/docs/reference/agent-config.html +3 -3
  68. package/dist/docs/reference/channels.html +5 -5
  69. package/dist/docs/reference/cli.html +3 -3
  70. package/dist/docs/reference/connections.html +3 -3
  71. package/dist/docs/reference/hooks.html +3 -3
  72. package/dist/docs/reference/http-api.html +3 -3
  73. package/dist/docs/reference/instructions.html +3 -3
  74. package/dist/docs/reference/playground.html +3 -3
  75. package/dist/docs/reference/project-layout.html +3 -3
  76. package/dist/docs/reference/prompt.html +3 -3
  77. package/dist/docs/reference/schedules.html +3 -3
  78. package/dist/docs/reference/sessions.html +3 -3
  79. package/dist/docs/reference/skills.html +3 -3
  80. package/dist/docs/reference/subagents.html +3 -3
  81. package/dist/docs/reference/tools.html +3 -3
  82. package/dist/docs/scaffolding-agents.html +3 -3
  83. package/dist/docs/storage.html +3 -3
  84. package/dist/docs/troubleshooting.html +3 -3
  85. package/dist/internal/cli-ax.d.ts +8 -0
  86. package/dist/internal/cli-ax.d.ts.map +1 -1
  87. package/dist/internal/cli-ax.js +116 -57
  88. package/dist/internal/cursor-slack-relay.d.ts +2 -0
  89. package/dist/internal/cursor-slack-relay.d.ts.map +1 -1
  90. package/dist/internal/cursor-slack-relay.js +1 -0
  91. package/dist/internal/deploy-client.d.ts +2 -0
  92. package/dist/internal/deploy-client.d.ts.map +1 -1
  93. package/dist/internal/deploy-client.js +1 -0
  94. package/dist/internal/discovery.js +8 -1
  95. package/dist/internal/server.js +10 -5
  96. package/dist/playground/assets/{index-BDCeW4uc.js → index-CkN74U_L.js} +48 -47
  97. package/dist/playground/index.html +1 -1
  98. package/docs/README.md +1 -0
  99. package/docs/guides/slack.md +32 -7
  100. package/docs/guides/webhooks.md +183 -0
  101. package/docs/reference/channels.md +2 -1
  102. package/package.json +1 -1
  103. package/skills/setup-slack/SKILL.md +3 -0
  104. package/src/bin/agent-serve.ts +12 -3
  105. package/src/channels/slack/auth.ts +29 -22
  106. package/src/channels/slack/cursor-account.ts +2 -0
  107. package/src/channels/slack/defaults.ts +24 -4
  108. package/src/channels/slack/dispatch.ts +42 -1
  109. package/src/channels/slack/external-policy.ts +62 -0
  110. package/src/channels/slack/index.ts +1 -0
  111. package/src/channels/slack/interactive.ts +42 -10
  112. package/src/channels/slack/slack-channel.ts +20 -3
  113. package/src/channels/slack/types.ts +12 -0
  114. package/src/internal/cli-ax.ts +110 -34
  115. package/src/internal/cursor-slack-relay.ts +3 -0
  116. package/src/internal/deploy-client.ts +3 -0
  117. package/src/internal/discovery.ts +8 -1
  118. package/src/internal/server.ts +9 -5
  119. package/dist/docs/assets/chunks/@localSearchIndexroot.CQJytDwU.js +0 -1
  120. package/dist/docs/assets/guides_slack.md.D_xFKlnF.lean.js +0 -1
  121. package/dist/docs/assets/guides_webhooks.md.B1EswtUu.js +0 -50
  122. /package/dist/docs/assets/{index.md.Dfv5ic9t.lean.js → index.md.CH_s5uZe.lean.js} +0 -0
@@ -17,7 +17,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
17
17
  };
18
18
  import { mkdir, mkdtemp, writeFile } from "node:fs/promises";
19
19
  import { tmpdir } from "node:os";
20
- import { join, resolve } from "node:path";
20
+ import { dirname, join, resolve } from "node:path";
21
21
  import { Artifacts, JUnit } from "../evals/reporters.js";
22
22
  import { serve } from "../index.js";
23
23
  import { lookupSessionContinuation, runChat } from "./chat-client.js";
@@ -561,6 +561,16 @@ export function cmdEval(options) {
561
561
  return 2;
562
562
  }
563
563
  }
564
+ if (trimNonEmpty(options.out) !== undefined) {
565
+ if (options.list === true) {
566
+ process.stderr.write("--out and --list are mutually exclusive\n");
567
+ return 2;
568
+ }
569
+ if (options.noWait === true) {
570
+ process.stderr.write(`--out needs the finished results; drop --no-wait, or poll later with ${CLI_COMMAND_NAME} eval status <evalId> --out <path>\n`);
571
+ return 2;
572
+ }
573
+ }
564
574
  const filterIds = options.evalIds === undefined || options.evalIds.length === 0
565
575
  ? undefined
566
576
  : options.evalIds;
@@ -641,7 +651,7 @@ export function cmdEval(options) {
641
651
  process.stderr.write("No matching evals found.\n");
642
652
  return 2;
643
653
  }
644
- return printEvalResults(results, options, undefined, artifactsDir);
654
+ return yield printEvalResults(results, options, undefined, artifactsDir);
645
655
  }
646
656
  finally {
647
657
  progress === null || progress === void 0 ? void 0 : progress.close();
@@ -694,7 +704,7 @@ export function cmdEval(options) {
694
704
  process.stderr.write("No matching evals found.\n");
695
705
  return 2;
696
706
  }
697
- return printEvalResults(results, options, {
707
+ return yield printEvalResults(results, options, {
698
708
  runId: snapshot.runId,
699
709
  status: snapshot.status,
700
710
  error: snapshot.error,
@@ -764,7 +774,7 @@ function printEvalAccepted(started, options, agentUrl) {
764
774
  const statusFlags = formatEvalStatusFlags(options);
765
775
  const playgroundUrl = yield resolveEvalPlaygroundDeepLink(options, started.runId, agentUrl);
766
776
  if (options.json) {
767
- console.log(JSON.stringify(Object.assign({ ok: true, accepted: true, evalId: started.runId, runId: started.runId, status: started.status, summary: started.summary, pollUrl: pollPath, durableRuns: started.config.durableRuns === true }, (playgroundUrl === undefined ? {} : { playgroundUrl })), null, 2));
777
+ process.stdout.write(`${JSON.stringify(Object.assign({ ok: true, accepted: true, evalId: started.runId, runId: started.runId, status: started.status, summary: started.summary, pollUrl: pollPath, durableRuns: started.config.durableRuns === true }, (playgroundUrl === undefined ? {} : { playgroundUrl })), null, 2)}\n`);
768
778
  }
769
779
  else {
770
780
  const durable = started.config.durableRuns === true ? " (persisted)" : "";
@@ -855,7 +865,7 @@ export function cmdEvalCancel(runId, options) {
855
865
  fetchImpl: options.fetchImpl,
856
866
  });
857
867
  if (options.json) {
858
- console.log(JSON.stringify(snap, null, 2));
868
+ process.stdout.write(`${JSON.stringify(snap, null, 2)}\n`);
859
869
  }
860
870
  else {
861
871
  process.stdout.write(`Cancelled Eval ID ${snap.runId} (${snap.summary.done}/${snap.summary.total} cases finalized)\n`);
@@ -894,6 +904,11 @@ export function cmdEvalStatus(runId, options) {
894
904
  process.stderr.write("eval status does not accept --list or --no-wait\n");
895
905
  return 2;
896
906
  }
907
+ if (trimNonEmpty(options.out) !== undefined &&
908
+ (runId === undefined || runId === "")) {
909
+ process.stderr.write("eval status --out requires an eval id\n");
910
+ return 2;
911
+ }
897
912
  const target = yield resolveEvalTarget(options);
898
913
  if (typeof target === "number") {
899
914
  return target;
@@ -910,7 +925,7 @@ export function cmdEvalStatus(runId, options) {
910
925
  fetchImpl: options.fetchImpl,
911
926
  });
912
927
  if (options.json) {
913
- console.log(JSON.stringify({ runs, activeRunId }, null, 2));
928
+ process.stdout.write(`${JSON.stringify({ runs, activeRunId }, null, 2)}\n`);
914
929
  }
915
930
  else if (runs.length === 0) {
916
931
  process.stdout.write("No eval runs on this agent.\n");
@@ -931,8 +946,12 @@ export function cmdEvalStatus(runId, options) {
931
946
  auth,
932
947
  fetchImpl: options.fetchImpl,
933
948
  });
949
+ const outPath = yield writeJsonOutFile(options.out, snap);
934
950
  if (options.json) {
935
- console.log(JSON.stringify(snap, null, 2));
951
+ process.stdout.write(`${JSON.stringify(snap, null, 2)}\n`);
952
+ if (outPath !== undefined) {
953
+ process.stderr.write(`results: ${outPath}\n`);
954
+ }
936
955
  }
937
956
  else {
938
957
  process.stdout.write(`${formatEvalRunSummaryLine(snap)}\n`);
@@ -949,6 +968,9 @@ export function cmdEvalStatus(runId, options) {
949
968
  process.stdout.write(` error: ${c.error}\n`);
950
969
  }
951
970
  }
971
+ if (outPath !== undefined) {
972
+ process.stdout.write(`results: ${outPath}\n`);
973
+ }
952
974
  }
953
975
  if (snap.status === "running") {
954
976
  return 3;
@@ -989,7 +1011,7 @@ function listLocalEvals(projectRoot, options, filterIds, tags) {
989
1011
  }
990
1012
  function printListedEvals(listed, options, emptyMessage) {
991
1013
  if (options.json) {
992
- console.log(JSON.stringify(listed, null, 2));
1014
+ process.stdout.write(`${JSON.stringify(listed, null, 2)}\n`);
993
1015
  }
994
1016
  else if (listed.length === 0) {
995
1017
  process.stdout.write(`${emptyMessage}\n`);
@@ -1079,64 +1101,91 @@ const EVAL_VERDICT_LABEL = {
1079
1101
  skipped: "SKIP",
1080
1102
  };
1081
1103
  function printEvalResults(results, options, batch, artifactsDir) {
1082
- var _a, _b;
1083
- const strict = options.strict === true;
1084
- const counts = { passed: 0, failed: 0, scored: 0, skipped: 0 };
1085
- for (const result of results) {
1086
- counts[evalVerdictOf(result)]++;
1087
- }
1088
- const batchFailed = (batch === null || batch === void 0 ? void 0 : batch.status) === "failed";
1089
- const ok = counts.failed === 0 && !(strict && counts.scored > 0) && !batchFailed;
1090
- if ((batch === null || batch === void 0 ? void 0 : batch.error) !== undefined && batch.error !== "" && !options.json) {
1091
- // Always surface harness-level failures (not only --verbose).
1092
- process.stderr.write(`eval run error: ${batch.error}\n`);
1093
- }
1094
- if (options.json) {
1095
- console.log(JSON.stringify(Object.assign(Object.assign(Object.assign(Object.assign({ ok, passed: counts.passed, failed: counts.failed, scored: counts.scored, skipped: counts.skipped, strict,
1104
+ return __awaiter(this, void 0, void 0, function* () {
1105
+ var _a, _b;
1106
+ const strict = options.strict === true;
1107
+ const counts = { passed: 0, failed: 0, scored: 0, skipped: 0 };
1108
+ for (const result of results) {
1109
+ counts[evalVerdictOf(result)]++;
1110
+ }
1111
+ const batchFailed = (batch === null || batch === void 0 ? void 0 : batch.status) === "failed";
1112
+ const ok = counts.failed === 0 && !(strict && counts.scored > 0) && !batchFailed;
1113
+ if ((batch === null || batch === void 0 ? void 0 : batch.error) !== undefined && batch.error !== "" && !options.json) {
1114
+ // Always surface harness-level failures (not only --verbose).
1115
+ process.stderr.write(`eval run error: ${batch.error}\n`);
1116
+ }
1117
+ const payload = Object.assign(Object.assign(Object.assign(Object.assign({ ok, passed: counts.passed, failed: counts.failed, scored: counts.scored, skipped: counts.skipped, strict,
1096
1118
  results }, (artifactsDir === undefined ? {} : { artifactsDir })), ((batch === null || batch === void 0 ? void 0 : batch.runId) === undefined ? {} : { runId: batch.runId })), ((batch === null || batch === void 0 ? void 0 : batch.status) === undefined ? {} : { status: batch.status })), ((batch === null || batch === void 0 ? void 0 : batch.error) === undefined || batch.error === ""
1097
1119
  ? {}
1098
- : { error: batch.error })), null, 2));
1099
- }
1100
- else {
1101
- for (const r of results) {
1102
- const verdict = evalVerdictOf(r);
1103
- process.stdout.write(`${EVAL_VERDICT_LABEL[verdict]} ${r.id} (${(r.durationMs / 1000).toFixed(1)}s)`);
1104
- if (r.description !== undefined) {
1105
- process.stdout.write(` — ${r.description}`);
1106
- }
1107
- process.stdout.write("\n");
1108
- if (r.skipReason !== undefined) {
1109
- process.stdout.write(` skipped: ${r.skipReason}\n`);
1120
+ : { error: batch.error }));
1121
+ const outPath = yield writeJsonOutFile(options.out, payload);
1122
+ if (options.json) {
1123
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
1124
+ if (outPath !== undefined) {
1125
+ // stdout stays pure JSON; report the file on stderr.
1126
+ process.stderr.write(`results: ${outPath}\n`);
1110
1127
  }
1111
- for (const a of r.assertions) {
1112
- process.stdout.write(` ${formatEvalAssertionLine(a)}\n`);
1128
+ }
1129
+ else {
1130
+ for (const r of results) {
1131
+ const verdict = evalVerdictOf(r);
1132
+ process.stdout.write(`${EVAL_VERDICT_LABEL[verdict]} ${r.id} (${(r.durationMs / 1000).toFixed(1)}s)`);
1133
+ if (r.description !== undefined) {
1134
+ process.stdout.write(` — ${r.description}`);
1135
+ }
1136
+ process.stdout.write("\n");
1137
+ if (r.skipReason !== undefined) {
1138
+ process.stdout.write(` skipped: ${r.skipReason}\n`);
1139
+ }
1140
+ for (const a of r.assertions) {
1141
+ process.stdout.write(` ${formatEvalAssertionLine(a)}\n`);
1142
+ }
1143
+ for (const [name, value] of Object.entries((_a = r.metrics) !== null && _a !== void 0 ? _a : {})) {
1144
+ process.stdout.write(` metric ${name}=${String(value)}\n`);
1145
+ }
1146
+ for (const line of (_b = r.logs) !== null && _b !== void 0 ? _b : []) {
1147
+ process.stdout.write(` ${line}\n`);
1148
+ }
1149
+ if (r.error !== undefined) {
1150
+ process.stdout.write(` error: ${r.error}\n`);
1151
+ }
1152
+ if (options.verbose && r.finalText !== undefined) {
1153
+ process.stdout.write(` reply: ${r.finalText.slice(0, 200).replace(/\s+/g, " ")}\n`);
1154
+ }
1113
1155
  }
1114
- for (const [name, value] of Object.entries((_a = r.metrics) !== null && _a !== void 0 ? _a : {})) {
1115
- process.stdout.write(` metric ${name}=${String(value)}\n`);
1156
+ const extra = [];
1157
+ if (counts.scored > 0) {
1158
+ extra.push(`${counts.scored} scored${strict ? " (fatal: --strict)" : ""}`);
1116
1159
  }
1117
- for (const line of (_b = r.logs) !== null && _b !== void 0 ? _b : []) {
1118
- process.stdout.write(` ${line}\n`);
1160
+ if (counts.skipped > 0) {
1161
+ extra.push(`${counts.skipped} skipped`);
1119
1162
  }
1120
- if (r.error !== undefined) {
1121
- process.stdout.write(` error: ${r.error}\n`);
1163
+ process.stdout.write(`\n${counts.passed} passed, ${counts.failed} failed${extra.length === 0 ? "" : `, ${extra.join(", ")}`}, ${results.length} total\n`);
1164
+ if (artifactsDir !== undefined) {
1165
+ process.stdout.write(`artifacts: ${artifactsDir}\n`);
1122
1166
  }
1123
- if (options.verbose && r.finalText !== undefined) {
1124
- process.stdout.write(` reply: ${r.finalText.slice(0, 200).replace(/\s+/g, " ")}\n`);
1167
+ if (outPath !== undefined) {
1168
+ process.stdout.write(`results: ${outPath}\n`);
1125
1169
  }
1126
1170
  }
1127
- const extra = [];
1128
- if (counts.scored > 0) {
1129
- extra.push(`${counts.scored} scored${strict ? " (fatal: --strict)" : ""}`);
1130
- }
1131
- if (counts.skipped > 0) {
1132
- extra.push(`${counts.skipped} skipped`);
1133
- }
1134
- process.stdout.write(`\n${counts.passed} passed, ${counts.failed} failed${extra.length === 0 ? "" : `, ${extra.join(", ")}`}, ${results.length} total\n`);
1135
- if (artifactsDir !== undefined) {
1136
- process.stdout.write(`artifacts: ${artifactsDir}\n`);
1171
+ return ok ? 0 : 1;
1172
+ });
1173
+ }
1174
+ /**
1175
+ * `--out <path>`: write a JSON payload (results / run snapshot), creating
1176
+ * parent directories. Returns the resolved path, or undefined when unset.
1177
+ */
1178
+ function writeJsonOutFile(out, payload) {
1179
+ return __awaiter(this, void 0, void 0, function* () {
1180
+ const trimmed = trimNonEmpty(out);
1181
+ if (trimmed === undefined) {
1182
+ return undefined;
1137
1183
  }
1138
- }
1139
- return ok ? 0 : 1;
1184
+ const target = resolve(trimmed);
1185
+ yield mkdir(dirname(target), { recursive: true });
1186
+ yield writeFile(target, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
1187
+ return target;
1188
+ });
1140
1189
  }
1141
1190
  /**
1142
1191
  * One assertion line. Soft assertions read `~` rather than `✗` when they miss,
@@ -1309,12 +1358,14 @@ export function cmdSessions(options) {
1309
1358
  /**
1310
1359
  * `session <id>` — view a full session (trajectory text by default).
1311
1360
  * `--json` → trajectory JSON; `--events` (`rawEvents`) → raw event list.
1361
+ * `--out <path>` → write the raw NDJSON trace to a file instead of printing
1362
+ * (same format as `run --events` and the playground download).
1312
1363
  * Interactive reattach: `resume [id]` / `chat --resume` (or `chat --session`).
1313
1364
  */
1314
1365
  export function cmdSession(sessionId, options) {
1315
1366
  return __awaiter(this, void 0, void 0, function* () {
1316
1367
  if (sessionId === undefined || sessionId.trim() === "") {
1317
- process.stderr.write(`Usage: ${CLI_COMMAND_NAME} session <sessionId> [--url | --prod] [--json | --text | --events]\n`);
1368
+ process.stderr.write(`Usage: ${CLI_COMMAND_NAME} session <sessionId> [--url | --prod] [--json | --text | --events] [--out <file.ndjson>]\n`);
1318
1369
  return 2;
1319
1370
  }
1320
1371
  if (options.rawEvents === true && options.json === true) {
@@ -1335,6 +1386,14 @@ export function cmdSession(sessionId, options) {
1335
1386
  },
1336
1387
  fetchImpl: options.fetchImpl,
1337
1388
  });
1389
+ const outPath = trimNonEmpty(options.out);
1390
+ if (outPath !== undefined) {
1391
+ const targetPath = resolve(outPath);
1392
+ yield mkdir(dirname(targetPath), { recursive: true });
1393
+ yield writeFile(targetPath, `${events.map((e) => JSON.stringify(e)).join("\n")}\n`, "utf8");
1394
+ process.stdout.write(`trace: ${targetPath} (${events.length} events)\n`);
1395
+ return 0;
1396
+ }
1338
1397
  if (options.rawEvents === true) {
1339
1398
  process.stdout.write(`${JSON.stringify({ sessionId, events }, null, 2)}\n`);
1340
1399
  return 0;
@@ -16,6 +16,8 @@ export interface CursorSlackAgentRegistration {
16
16
  name: string;
17
17
  iconUrl?: string;
18
18
  iconEmoji?: string;
19
+ /** Opt out of the default external-sender block. */
20
+ blockExternals?: boolean;
19
21
  }
20
22
  /** One relayed event as delivered to {@link CursorSlackRelayOptions.dispatch}. */
21
23
  export type CursorSlackRelayEvent = CursorSlackEnvelope & {
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-slack-relay.d.ts","sourceRoot":"","sources":["../../src/internal/cursor-slack-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAO/E,sEAAsE;AACtE,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,kFAAkF;AAClF,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,+DAA+D;AAC/D,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAGT;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,GAAG,CACF,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0CpC;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IAUf,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyC;IAC9D;;;;OAIG;IACH,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAAM;IAExB,YAA6B,OAAO,EAAE,uBAAuB,EAqE5D;IAED;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAGzC;IAED;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB,KAAK,IAAI,IAAI,CAEZ;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;CACF"}
1
+ {"version":3,"file":"cursor-slack-relay.d.ts","sourceRoot":"","sources":["../../src/internal/cursor-slack-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAO/E,sEAAsE;AACtE,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAYD,kFAAkF;AAClF,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,+DAA+D;AAC/D,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAGT;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,GAAG,CACF,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0CpC;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IAUf,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyC;IAC9D;;;;OAIG;IACH,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAAM;IAExB,YAA6B,OAAO,EAAE,uBAAuB,EAsE5D;IAED;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAGzC;IAED;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB,KAAK,IAAI,IAAI,CAEZ;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;CACF"}
@@ -103,6 +103,7 @@ export class CursorSlackRelay {
103
103
  name: agent.name,
104
104
  iconUrl: agent.iconUrl,
105
105
  iconEmoji: agent.iconEmoji,
106
+ blockExternals: agent.blockExternals === false ? false : undefined,
106
107
  })),
107
108
  };
108
109
  },
@@ -84,6 +84,8 @@ export interface Deployment {
84
84
  engineGeneration?: number | null;
85
85
  publicId?: string;
86
86
  engineUrl?: string | null;
87
+ /** Anyrun pod id for the active engine, when coordinates are known. */
88
+ enginePodId?: string | null;
87
89
  lastError?: string | null;
88
90
  engineAlias: string;
89
91
  desiredUpdatedAt?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-client.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-client.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-client.ts"],"names":[],"mappings":"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"}
@@ -122,6 +122,7 @@ const deploymentSchema = z.object({
122
122
  engineGeneration: z.number().nullable().optional(),
123
123
  publicId: z.string().optional(),
124
124
  engineUrl: z.string().nullable().optional(),
125
+ enginePodId: z.string().nullable().optional(),
125
126
  lastError: z.string().nullable().optional(),
126
127
  engineAlias: z.string(),
127
128
  desiredUpdatedAt: z.string().optional(),
@@ -1647,7 +1647,14 @@ function isModuleFile(fileName) {
1647
1647
  if (fileName.endsWith(".d.ts") || fileName.startsWith(".")) {
1648
1648
  return false;
1649
1649
  }
1650
- return MODULE_EXTENSIONS.has(extname(fileName));
1650
+ if (!MODULE_EXTENSIONS.has(extname(fileName))) {
1651
+ return false;
1652
+ }
1653
+ // Colocated unit tests (Vitest/Jest convention) are not definitions.
1654
+ // Without this, `channels/slack.test.ts` is scanned as a channel named
1655
+ // "slack.test", fails NAME_PATTERN, and the whole agent refuses to serve.
1656
+ const stem = moduleStem(fileName);
1657
+ return !stem.endsWith(".test") && !stem.endsWith(".spec");
1651
1658
  }
1652
1659
  function moduleStem(fileName) {
1653
1660
  return fileName.slice(0, -extname(fileName).length);
@@ -1349,11 +1349,16 @@ function startCursorSlackRelay(input) {
1349
1349
  const stateDir = join(baseStateRoot, "cursor-slack");
1350
1350
  // Optional fields may be undefined — the relay JSON-serializes the
1351
1351
  // registration body, which drops them.
1352
- const agents = targets.map((target) => { var _a, _b; return ({
1353
- name: target.agentName,
1354
- iconUrl: (_a = target.accountRuntime.options.agentIcon) === null || _a === void 0 ? void 0 : _a.url,
1355
- iconEmoji: (_b = target.accountRuntime.options.agentIcon) === null || _b === void 0 ? void 0 : _b.emoji,
1356
- }); });
1352
+ const agents = targets.map((target) => {
1353
+ var _a, _b;
1354
+ const policy = target.accountRuntime.options.policy;
1355
+ return {
1356
+ name: target.agentName,
1357
+ iconUrl: (_a = target.accountRuntime.options.agentIcon) === null || _a === void 0 ? void 0 : _a.url,
1358
+ iconEmoji: (_b = target.accountRuntime.options.agentIcon) === null || _b === void 0 ? void 0 : _b.emoji,
1359
+ blockExternals: (policy === null || policy === void 0 ? void 0 : policy.blockExternals) === false ? false : undefined,
1360
+ };
1361
+ });
1357
1362
  const targetByName = new Map(targets.map((target) => [target.agentName.toLowerCase(), target]));
1358
1363
  const relay = new CursorSlackRelay({
1359
1364
  baseUrl,