@cursor/july 0.1.27 → 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 (180) hide show
  1. package/dist/bin/agent-serve.js +32 -5
  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 +19 -1
  23. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  24. package/dist/channels/slack/slack-channel.js +48 -6
  25. package/dist/channels/slack/types.d.ts +10 -0
  26. package/dist/channels/slack/types.d.ts.map +1 -1
  27. package/dist/docs/404.html +2 -2
  28. package/dist/docs/ab.html +3 -3
  29. package/dist/docs/assets/{app.BICLoJYF.js → app.QdunVQKg.js} +1 -1
  30. package/dist/docs/assets/chunks/@localSearchIndexroot.DGe61XHA.js +1 -0
  31. package/dist/docs/assets/chunks/{VPLocalSearchBox.wN4Ko9dT.js → VPLocalSearchBox.B6EpUXYf.js} +1 -1
  32. package/dist/docs/assets/chunks/{theme.dnnTE-Co.js → theme.BOTJVqh7.js} +2 -2
  33. package/dist/docs/assets/{guides_slack.md.D_xFKlnF.js → guides_slack.md.CjmJSvZS.js} +8 -4
  34. package/dist/docs/assets/guides_slack.md.CjmJSvZS.lean.js +1 -0
  35. package/dist/docs/assets/guides_webhooks.md.wSOYas3X.js +183 -0
  36. package/dist/docs/assets/{guides_webhooks.md.B1EswtUu.lean.js → guides_webhooks.md.wSOYas3X.lean.js} +1 -1
  37. package/dist/docs/assets/{index.md.Dfv5ic9t.js → index.md.CH_s5uZe.js} +1 -1
  38. package/dist/docs/assets/{reference_channels.md.DdmiKgqf.js → reference_channels.md.CDhTRfUz.js} +2 -2
  39. package/dist/docs/assets/{reference_channels.md.DdmiKgqf.lean.js → reference_channels.md.CDhTRfUz.lean.js} +1 -1
  40. package/dist/docs/building-with-agents.html +3 -3
  41. package/dist/docs/concepts.html +3 -3
  42. package/dist/docs/deployment.html +3 -3
  43. package/dist/docs/evals.html +3 -3
  44. package/dist/docs/example-agents/approval-buddy.html +3 -3
  45. package/dist/docs/example-agents/benny.html +3 -3
  46. package/dist/docs/example-agents/bugbot.html +3 -3
  47. package/dist/docs/example-agents/codebase-wiki.html +3 -3
  48. package/dist/docs/example-agents/codeowners-review.html +3 -3
  49. package/dist/docs/example-agents/concierge.html +3 -3
  50. package/dist/docs/example-agents/fsd.html +3 -3
  51. package/dist/docs/example-agents/index.html +3 -3
  52. package/dist/docs/example-agents/knowledge-base.html +3 -3
  53. package/dist/docs/example-agents/oncall.html +3 -3
  54. package/dist/docs/example-agents/security-reviewer.html +3 -3
  55. package/dist/docs/example-agents/slack-agent.html +3 -3
  56. package/dist/docs/example-agents/weather-agent.html +3 -3
  57. package/dist/docs/guides/agent-to-agent.html +3 -3
  58. package/dist/docs/guides/cloud-runtime.html +3 -3
  59. package/dist/docs/guides/github.html +3 -3
  60. package/dist/docs/guides/human-in-the-loop.html +3 -3
  61. package/dist/docs/guides/mcp-oauth.html +3 -3
  62. package/dist/docs/guides/slack.html +11 -7
  63. package/dist/docs/guides/webhooks.html +138 -5
  64. package/dist/docs/hashmap.json +1 -1
  65. package/dist/docs/hillclimbing.html +3 -3
  66. package/dist/docs/index.html +5 -5
  67. package/dist/docs/quickstart.html +3 -3
  68. package/dist/docs/reference/agent-config.html +3 -3
  69. package/dist/docs/reference/channels.html +5 -5
  70. package/dist/docs/reference/cli.html +3 -3
  71. package/dist/docs/reference/connections.html +3 -3
  72. package/dist/docs/reference/hooks.html +3 -3
  73. package/dist/docs/reference/http-api.html +3 -3
  74. package/dist/docs/reference/instructions.html +3 -3
  75. package/dist/docs/reference/playground.html +3 -3
  76. package/dist/docs/reference/project-layout.html +3 -3
  77. package/dist/docs/reference/prompt.html +3 -3
  78. package/dist/docs/reference/schedules.html +3 -3
  79. package/dist/docs/reference/sessions.html +3 -3
  80. package/dist/docs/reference/skills.html +3 -3
  81. package/dist/docs/reference/subagents.html +3 -3
  82. package/dist/docs/reference/tools.html +3 -3
  83. package/dist/docs/scaffolding-agents.html +3 -3
  84. package/dist/docs/storage.html +3 -3
  85. package/dist/docs/troubleshooting.html +3 -3
  86. package/dist/internal/cli-ax.d.ts +8 -0
  87. package/dist/internal/cli-ax.d.ts.map +1 -1
  88. package/dist/internal/cli-ax.js +116 -57
  89. package/dist/internal/cloud-turn-cost.d.ts +34 -0
  90. package/dist/internal/cloud-turn-cost.d.ts.map +1 -0
  91. package/dist/internal/cloud-turn-cost.js +106 -0
  92. package/dist/internal/cursor-slack-relay.d.ts +2 -0
  93. package/dist/internal/cursor-slack-relay.d.ts.map +1 -1
  94. package/dist/internal/cursor-slack-relay.js +1 -0
  95. package/dist/internal/deploy-client.d.ts +2 -0
  96. package/dist/internal/deploy-client.d.ts.map +1 -1
  97. package/dist/internal/deploy-client.js +1 -0
  98. package/dist/internal/discovery.d.ts.map +1 -1
  99. package/dist/internal/discovery.js +9 -2
  100. package/dist/internal/event-log.d.ts +6 -0
  101. package/dist/internal/event-log.d.ts.map +1 -1
  102. package/dist/internal/event-log.js +16 -0
  103. package/dist/internal/host-platforms.d.ts +13 -0
  104. package/dist/internal/host-platforms.d.ts.map +1 -1
  105. package/dist/internal/host-platforms.js +25 -16
  106. package/dist/internal/http-channel.d.ts.map +1 -1
  107. package/dist/internal/http-channel.js +3 -1
  108. package/dist/internal/local-control-plane.d.ts +25 -0
  109. package/dist/internal/local-control-plane.d.ts.map +1 -0
  110. package/dist/internal/local-control-plane.js +172 -0
  111. package/dist/internal/platform-schedule-sync.d.ts +17 -0
  112. package/dist/internal/platform-schedule-sync.d.ts.map +1 -0
  113. package/dist/internal/platform-schedule-sync.js +72 -0
  114. package/dist/internal/platform-timers.d.ts +28 -0
  115. package/dist/internal/platform-timers.d.ts.map +1 -0
  116. package/dist/internal/platform-timers.js +120 -0
  117. package/dist/internal/reminder-runner.d.ts +16 -12
  118. package/dist/internal/reminder-runner.d.ts.map +1 -1
  119. package/dist/internal/reminder-runner.js +112 -61
  120. package/dist/internal/reminder-store.d.ts +5 -4
  121. package/dist/internal/reminder-store.d.ts.map +1 -1
  122. package/dist/internal/reminder-store.js +5 -4
  123. package/dist/internal/sdk-runner.d.ts.map +1 -1
  124. package/dist/internal/sdk-runner.js +44 -1
  125. package/dist/internal/server.d.ts.map +1 -1
  126. package/dist/internal/server.js +115 -16
  127. package/dist/internal/session-engine.d.ts +22 -1
  128. package/dist/internal/session-engine.d.ts.map +1 -1
  129. package/dist/internal/session-engine.js +110 -4
  130. package/dist/internal/storage-coordinator.d.ts +4 -15
  131. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  132. package/dist/internal/storage-coordinator.js +4 -30
  133. package/dist/playground/assets/index-CquRB-l0.js +85 -0
  134. package/dist/playground/assets/{index-Bul1WfrB.css → index-Dj0bWpkn.css} +1 -1
  135. package/dist/playground/index.html +2 -2
  136. package/dist/storage.d.ts +0 -3
  137. package/dist/storage.d.ts.map +1 -1
  138. package/dist/storage.js +0 -3
  139. package/dist/types.d.ts +11 -2
  140. package/dist/types.d.ts.map +1 -1
  141. package/docs/README.md +1 -0
  142. package/docs/guides/slack.md +32 -7
  143. package/docs/guides/webhooks.md +183 -0
  144. package/docs/reference/channels.md +2 -1
  145. package/package.json +1 -1
  146. package/skills/setup-slack/SKILL.md +3 -0
  147. package/src/bin/agent-serve.ts +33 -5
  148. package/src/channels/slack/auth.ts +29 -22
  149. package/src/channels/slack/cursor-account.ts +2 -0
  150. package/src/channels/slack/defaults.ts +24 -4
  151. package/src/channels/slack/dispatch.ts +42 -1
  152. package/src/channels/slack/external-policy.ts +62 -0
  153. package/src/channels/slack/index.ts +1 -0
  154. package/src/channels/slack/interactive.ts +42 -10
  155. package/src/channels/slack/slack-channel.ts +66 -3
  156. package/src/channels/slack/types.ts +12 -0
  157. package/src/internal/cli-ax.ts +110 -34
  158. package/src/internal/cloud-turn-cost.ts +158 -0
  159. package/src/internal/cursor-slack-relay.ts +3 -0
  160. package/src/internal/deploy-client.ts +3 -0
  161. package/src/internal/discovery.ts +9 -1
  162. package/src/internal/event-log.ts +17 -0
  163. package/src/internal/host-platforms.ts +40 -18
  164. package/src/internal/http-channel.ts +3 -1
  165. package/src/internal/local-control-plane.ts +188 -0
  166. package/src/internal/platform-schedule-sync.ts +81 -0
  167. package/src/internal/platform-timers.ts +173 -0
  168. package/src/internal/reminder-runner.ts +131 -67
  169. package/src/internal/reminder-store.ts +5 -4
  170. package/src/internal/sdk-runner.ts +49 -1
  171. package/src/internal/server.ts +130 -11
  172. package/src/internal/session-engine.ts +138 -3
  173. package/src/internal/storage-coordinator.ts +4 -41
  174. package/src/storage.ts +0 -5
  175. package/src/types.ts +11 -2
  176. package/dist/docs/assets/chunks/@localSearchIndexroot.CQJytDwU.js +0 -1
  177. package/dist/docs/assets/guides_slack.md.D_xFKlnF.lean.js +0 -1
  178. package/dist/docs/assets/guides_webhooks.md.B1EswtUu.js +0 -50
  179. package/dist/playground/assets/index-BDCeW4uc.js +0 -86
  180. /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;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Recover token usage / estimated cost for cloud turns that finished without
3
+ * either field on `turn.completed`.
4
+ *
5
+ * Cloud `run.wait()` often drops streamed usage after SSE reconnect, and
6
+ * older engines never persisted cost. The playground Trace tab only renders
7
+ * what is on the event, so historical sessions stay blank unless we backfill
8
+ * from `Agent.getUsage` when the stream is read.
9
+ */
10
+ import type { ModelSetting, SessionEvent, TurnUsage } from "../types.js";
11
+ export interface CloudRunUsage {
12
+ runId: string;
13
+ usage: TurnUsage;
14
+ }
15
+ export interface CloudAgentUsage {
16
+ usage: TurnUsage;
17
+ runs: CloudRunUsage[];
18
+ }
19
+ export declare function usageTokenSum(usage: TurnUsage | undefined): number;
20
+ export declare function isUnpricedCompletedTurn(event: SessionEvent): boolean;
21
+ export declare function cloudSdkAgentIdFromEvents(events: ReadonlyArray<SessionEvent>): string | undefined;
22
+ /**
23
+ * Copy usage/cost onto unpriced `turn.completed` events. Returns undefined
24
+ * when the snapshot cannot be attributed safely (multiple unmatched turns).
25
+ */
26
+ export declare function applyCloudUsageToEvents(events: ReadonlyArray<SessionEvent>, billed: CloudAgentUsage, model: ModelSetting): SessionEvent[] | undefined;
27
+ export declare function mapSdkTokenUsage(usage: {
28
+ inputTokens: number;
29
+ outputTokens: number;
30
+ cacheReadTokens: number;
31
+ cacheWriteTokens: number;
32
+ reasoningTokens?: number;
33
+ }): TurnUsage;
34
+ //# sourceMappingURL=cloud-turn-cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-turn-cost.d.ts","sourceRoot":"","sources":["../../src/internal/cloud-turn-cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EAEZ,SAAS,EACV,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAUlE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAMpE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,GAClC,MAAM,GAAG,SAAS,CAYpB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,EACnC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,YAAY,GAClB,YAAY,EAAE,GAAG,SAAS,CAkE5B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,SAAS,CAWZ"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Recover token usage / estimated cost for cloud turns that finished without
3
+ * either field on `turn.completed`.
4
+ *
5
+ * Cloud `run.wait()` often drops streamed usage after SSE reconnect, and
6
+ * older engines never persisted cost. The playground Trace tab only renders
7
+ * what is on the event, so historical sessions stay blank unless we backfill
8
+ * from `Agent.getUsage` when the stream is read.
9
+ */
10
+ import { estimateTurnCost } from "./model-pricing.js";
11
+ export function usageTokenSum(usage) {
12
+ if (usage === undefined) {
13
+ return 0;
14
+ }
15
+ return (usage.inputTokens +
16
+ usage.outputTokens +
17
+ usage.cacheReadTokens +
18
+ usage.cacheWriteTokens);
19
+ }
20
+ export function isUnpricedCompletedTurn(event) {
21
+ return (event.type === "turn.completed" &&
22
+ usageTokenSum(event.data.usage) <= 0 &&
23
+ event.data.cost === undefined);
24
+ }
25
+ export function cloudSdkAgentIdFromEvents(events) {
26
+ let sdkAgentId;
27
+ for (const event of events) {
28
+ if (event.type !== "agent.bound") {
29
+ continue;
30
+ }
31
+ const id = event.data.sdkAgentId.trim();
32
+ if (id.startsWith("bc-")) {
33
+ sdkAgentId = id;
34
+ }
35
+ }
36
+ return sdkAgentId;
37
+ }
38
+ /**
39
+ * Copy usage/cost onto unpriced `turn.completed` events. Returns undefined
40
+ * when the snapshot cannot be attributed safely (multiple unmatched turns).
41
+ */
42
+ export function applyCloudUsageToEvents(events, billed, model) {
43
+ const completedIndexes = [];
44
+ const unpricedIndexes = [];
45
+ for (let i = 0; i < events.length; i++) {
46
+ const event = events[i];
47
+ if (event === undefined || event.type !== "turn.completed") {
48
+ continue;
49
+ }
50
+ completedIndexes.push(i);
51
+ if (isUnpricedCompletedTurn(event)) {
52
+ unpricedIndexes.push(i);
53
+ }
54
+ }
55
+ if (unpricedIndexes.length === 0) {
56
+ return [...events];
57
+ }
58
+ const patches = new Map();
59
+ if (unpricedIndexes.length === 1 &&
60
+ completedIndexes.length === 1 &&
61
+ usageTokenSum(billed.usage) > 0) {
62
+ const index = unpricedIndexes[0];
63
+ if (index !== undefined) {
64
+ patches.set(index, {
65
+ usage: billed.usage,
66
+ cost: estimateTurnCost(model, billed.usage),
67
+ });
68
+ }
69
+ }
70
+ else if (billed.runs.length === unpricedIndexes.length &&
71
+ billed.runs.every((run) => usageTokenSum(run.usage) > 0)) {
72
+ for (let i = 0; i < unpricedIndexes.length; i++) {
73
+ const index = unpricedIndexes[i];
74
+ const run = billed.runs[i];
75
+ if (index === undefined || run === undefined) {
76
+ return undefined;
77
+ }
78
+ patches.set(index, {
79
+ usage: run.usage,
80
+ cost: estimateTurnCost(model, run.usage),
81
+ });
82
+ }
83
+ }
84
+ else {
85
+ return undefined;
86
+ }
87
+ return events.map((event, index) => {
88
+ const patch = patches.get(index);
89
+ if (patch === undefined || event.type !== "turn.completed") {
90
+ return event;
91
+ }
92
+ return Object.assign(Object.assign({}, event), { data: Object.assign(Object.assign(Object.assign({}, event.data), { usage: patch.usage }), (patch.cost === undefined ? {} : { cost: patch.cost })) });
93
+ });
94
+ }
95
+ export function mapSdkTokenUsage(usage) {
96
+ const mapped = {
97
+ inputTokens: usage.inputTokens,
98
+ outputTokens: usage.outputTokens,
99
+ cacheReadTokens: usage.cacheReadTokens,
100
+ cacheWriteTokens: usage.cacheWriteTokens,
101
+ };
102
+ if (usage.reasoningTokens !== undefined) {
103
+ mapped.reasoningTokens = usage.reasoningTokens;
104
+ }
105
+ return mapped;
106
+ }
@@ -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(),
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EASrB,KAAK,UAAU,EAqBhB,MAAM,aAAa,CAAC;AA0BrB,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3E;AAmBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B1B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAoBzD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAAuB,GAAG;IACjC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtB,GACL,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAgBzD;AAWD,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAIrC,CAAC;AAEH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,YAAY,CAAC,CAiEvB;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAElE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAOnE;AA+oBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB3E;AAmtBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CA4InE"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EASrB,KAAK,UAAU,EAqBhB,MAAM,aAAa,CAAC;AA0BrB,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3E;AAmBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B1B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAoBzD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAAuB,GAAG;IACjC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtB,GACL,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAgBzD;AAWD,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAIrC,CAAC;AAEH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,YAAY,CAAC,CAiEvB;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAElE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAOnE;AA+oBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB3E;AAmtBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CA6InE"}
@@ -1445,7 +1445,7 @@ export function projectInfo(project) {
1445
1445
  url: "/v1/session/:sessionId/approvals/:callId",
1446
1446
  },
1447
1447
  ];
1448
- return Object.assign(Object.assign({ name: project.name, model: agent.model, runtime: agent.runtime, cloud: agent.cloud === undefined ? undefined : toPublicCloudInfo(agent.cloud), local: agent.local, hosting: agent.hosting, concurrency: agent.concurrency, mcp: { path: MCP_ENDPOINT_PATH, tools: mcpEndpointToolNames(project) }, instructions: agent.instructions === undefined
1448
+ return Object.assign(Object.assign({ name: project.name, description: agent.description, model: agent.model, runtime: agent.runtime, cloud: agent.cloud === undefined ? undefined : toPublicCloudInfo(agent.cloud), local: agent.local, hosting: agent.hosting, concurrency: agent.concurrency, mcp: { path: MCP_ENDPOINT_PATH, tools: mcpEndpointToolNames(project) }, instructions: agent.instructions === undefined
1449
1449
  ? undefined
1450
1450
  : {
1451
1451
  chars: agent.instructions.length,
@@ -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);
@@ -32,6 +32,12 @@ export declare class SessionEventLog {
32
32
  /** Wait for pending file writes (used on close). */
33
33
  flush(): Promise<void>;
34
34
  snapshot(startIndex?: number): SessionEvent[];
35
+ /**
36
+ * Replace one already-recorded event in memory. Used to backfill usage/cost
37
+ * onto historical `turn.completed` rows without rewriting `events.ndjson`.
38
+ * Live subscribers are not notified — patch before opening a replay stream.
39
+ */
40
+ replace(index: number, event: SessionEvent): boolean;
35
41
  subscribe(listener: (event: SessionEvent) => void): () => void;
36
42
  /**
37
43
  * NDJSON stream: replays recorded events from `startIndex`, then follows
@@ -1 +1 @@
1
- {"version":3,"file":"event-log.d.ts","sourceRoot":"","sources":["../../src/internal/event-log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO,eAIH;IAEJ,OAAa,IAAI,CAAC,IAAI,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;KAC3C,GAAG,OAAO,CAAC,eAAe,CAAC,CAQ3B;YAEa,OAAO;IAmBrB,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,YAAY,CAsB7C;IAED,oDAAoD;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,QAAQ,CAAC,UAAU,SAAI,GAAG,YAAY,EAAE,CAEvC;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAK7D;IAED;;;OAGG;IACH,MAAM,CAAC,UAAU,SAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CA0BjD;CACF;AAED,4DAA4D;AAC5D,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+C;IAEpE,YACmB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAC/C,cAAc,GAAE,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,KACX,IAAe,EAClB;IAEJ,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAc/C;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9B;CACF"}
1
+ {"version":3,"file":"event-log.d.ts","sourceRoot":"","sources":["../../src/internal/event-log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO,eAIH;IAEJ,OAAa,IAAI,CAAC,IAAI,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;KAC3C,GAAG,OAAO,CAAC,eAAe,CAAC,CAQ3B;YAEa,OAAO;IAmBrB,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,YAAY,CAsB7C;IAED,oDAAoD;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,QAAQ,CAAC,UAAU,SAAI,GAAG,YAAY,EAAE,CAEvC;IAED;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAUnD;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAK7D;IAED;;;OAGG;IACH,MAAM,CAAC,UAAU,SAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CA0BjD;CACF;AAED,4DAA4D;AAC5D,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+C;IAEpE,YACmB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAC/C,cAAc,GAAE,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,KACX,IAAe,EAClB;IAEJ,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAc/C;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9B;CACF"}
@@ -100,6 +100,22 @@ export class SessionEventLog {
100
100
  snapshot(startIndex = 0) {
101
101
  return startIndex <= 0 ? [...this.events] : this.events.slice(startIndex);
102
102
  }
103
+ /**
104
+ * Replace one already-recorded event in memory. Used to backfill usage/cost
105
+ * onto historical `turn.completed` rows without rewriting `events.ndjson`.
106
+ * Live subscribers are not notified — patch before opening a replay stream.
107
+ */
108
+ replace(index, event) {
109
+ if (index < 0 || index >= this.events.length) {
110
+ return false;
111
+ }
112
+ const current = this.events[index];
113
+ if (current === undefined || current.index !== index) {
114
+ return false;
115
+ }
116
+ this.events[index] = event;
117
+ return true;
118
+ }
103
119
  subscribe(listener) {
104
120
  this.listeners.add(listener);
105
121
  return () => {
@@ -3,6 +3,7 @@
3
3
  * schedules, and channel packs — same injection pattern as MCP.
4
4
  */
5
5
  import type { GitHubChannelCredentials } from "../channels/github/types.js";
6
+ import type { SlackCredentials } from "../channels/slack/types.js";
6
7
  import type { HostGitHubClient, HostSlackClient } from "../types.js";
7
8
  export interface HostPlatforms {
8
9
  github: HostGitHubClient;
@@ -16,7 +17,19 @@ export interface HostPlatforms {
16
17
  export type HostGitHubAuthSource = "app" | "cursor-account" | "env" | "gh" | "unavailable";
17
18
  export interface HostPlatformsOptions {
18
19
  githubCredentials?: GitHubChannelCredentials;
20
+ /**
21
+ * Per-agent Slack credentials (usually from a channel `envPrefix`).
22
+ * When omitted, `getClient()` falls back to `SLACK_BOT_TOKEN`.
23
+ */
24
+ slackCredentials?: SlackCredentials;
25
+ /** Env prefix used only to name the missing-token error. */
26
+ slackEnvPrefix?: string;
19
27
  }
28
+ /** Bot-token Slack client. Pass channel credentials so `envPrefix` is honored. */
29
+ export declare function createHostSlackClient(options?: {
30
+ credentials?: SlackCredentials;
31
+ envPrefix?: string;
32
+ }): HostSlackClient;
20
33
  /**
21
34
  * Build host platforms from ambient credentials. Prefer App installation
22
35
  * auth when configured; otherwise fall back to PAT / `gh auth` for local
@@ -1 +1 @@
1
- {"version":3,"file":"host-platforms.d.ts","sourceRoot":"","sources":["../../src/internal/host-platforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,KAAK,GACL,gBAAgB,GAChB,KAAK,GACL,IAAI,GACJ,aAAa,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,aAAa,CA8Bf;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAejF;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgDhC"}
1
+ {"version":3,"file":"host-platforms.d.ts","sourceRoot":"","sources":["../../src/internal/host-platforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAK5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,KAAK,GACL,gBAAgB,GAChB,KAAK,GACL,IAAI,GACJ,aAAa,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnE,eAAe,CAmBjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAiBf;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAejF;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgDhC"}