@cursor/july 0.1.2 → 0.1.3

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 (174) hide show
  1. package/AGENTS.md +16 -5
  2. package/README.md +8 -9
  3. package/dist/bin/agent-serve.d.ts +3 -1
  4. package/dist/bin/agent-serve.d.ts.map +1 -1
  5. package/dist/bin/agent-serve.js +389 -152
  6. package/dist/docs/404.html +2 -2
  7. package/dist/docs/ab.html +3 -3
  8. package/dist/docs/assets/{app.Oje4vhlk.js → app.BR0RbIdx.js} +1 -1
  9. package/dist/docs/assets/chunks/@localSearchIndexroot.DtIOQzGj.js +1 -0
  10. package/dist/docs/assets/chunks/{VPLocalSearchBox.H5XZ2zCB.js → VPLocalSearchBox.qjsVTneI.js} +1 -1
  11. package/dist/docs/assets/chunks/{theme.CTR_TuaE.js → theme.2Kg8jIp_.js} +2 -2
  12. package/dist/docs/assets/{quickstart.md.CfU8_uTC.js → quickstart.md.BU6Iwi_9.js} +18 -6
  13. package/dist/docs/assets/{reference_cli.md.DA730zCu.js → reference_cli.md.Bv6pOxcF.js} +11 -6
  14. package/dist/docs/assets/{reference_cli.md.DA730zCu.lean.js → reference_cli.md.Bv6pOxcF.lean.js} +1 -1
  15. package/dist/docs/building-with-agents.html +3 -3
  16. package/dist/docs/concepts.html +3 -3
  17. package/dist/docs/deployment.html +3 -3
  18. package/dist/docs/evals.html +3 -3
  19. package/dist/docs/guides/agent-to-agent.html +3 -3
  20. package/dist/docs/guides/cloud-runtime.html +3 -3
  21. package/dist/docs/guides/github.html +3 -3
  22. package/dist/docs/guides/human-in-the-loop.html +3 -3
  23. package/dist/docs/guides/slack.html +3 -3
  24. package/dist/docs/guides/webhooks.html +3 -3
  25. package/dist/docs/hashmap.json +1 -1
  26. package/dist/docs/hillclimbing.html +3 -3
  27. package/dist/docs/index.html +3 -3
  28. package/dist/docs/quickstart.html +22 -10
  29. package/dist/docs/reference/agent-config.html +3 -3
  30. package/dist/docs/reference/channels.html +3 -3
  31. package/dist/docs/reference/cli.html +14 -9
  32. package/dist/docs/reference/connections.html +3 -3
  33. package/dist/docs/reference/hooks.html +3 -3
  34. package/dist/docs/reference/http-api.html +3 -3
  35. package/dist/docs/reference/instructions.html +3 -3
  36. package/dist/docs/reference/playground.html +3 -3
  37. package/dist/docs/reference/project-layout.html +3 -3
  38. package/dist/docs/reference/schedules.html +3 -3
  39. package/dist/docs/reference/sessions.html +3 -3
  40. package/dist/docs/reference/skills.html +3 -3
  41. package/dist/docs/reference/subagents.html +3 -3
  42. package/dist/docs/reference/tools.html +3 -3
  43. package/dist/docs/scaffolding-agents.html +3 -3
  44. package/dist/docs/storage.html +3 -3
  45. package/dist/docs/troubleshooting.html +3 -3
  46. package/dist/internal/chat-client.d.ts +29 -3
  47. package/dist/internal/chat-client.d.ts.map +1 -1
  48. package/dist/internal/chat-client.js +180 -27
  49. package/dist/internal/cli-ax.d.ts +75 -2
  50. package/dist/internal/cli-ax.d.ts.map +1 -1
  51. package/dist/internal/cli-ax.js +600 -52
  52. package/dist/internal/cli-cursor.d.ts.map +1 -1
  53. package/dist/internal/cli-cursor.js +8 -36
  54. package/dist/internal/cli-deploy.d.ts +59 -3
  55. package/dist/internal/cli-deploy.d.ts.map +1 -1
  56. package/dist/internal/cli-deploy.js +316 -38
  57. package/dist/internal/cursor/credentials.d.ts +9 -0
  58. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  59. package/dist/internal/cursor/credentials.js +12 -0
  60. package/dist/internal/deploy-client.d.ts +9 -1
  61. package/dist/internal/deploy-client.d.ts.map +1 -1
  62. package/dist/internal/deploy-client.js +23 -3
  63. package/dist/internal/deploy-source.d.ts +35 -0
  64. package/dist/internal/deploy-source.d.ts.map +1 -0
  65. package/dist/internal/deploy-source.js +118 -0
  66. package/dist/internal/discovery.d.ts +11 -0
  67. package/dist/internal/discovery.d.ts.map +1 -1
  68. package/dist/internal/discovery.js +43 -14
  69. package/dist/internal/eval-run-store.d.ts.map +1 -1
  70. package/dist/internal/eval-run-store.js +2 -1
  71. package/dist/internal/eval-runner.d.ts +2 -0
  72. package/dist/internal/eval-runner.d.ts.map +1 -1
  73. package/dist/internal/eval-runner.js +2 -0
  74. package/dist/internal/event-mapper.d.ts +54 -1
  75. package/dist/internal/event-mapper.d.ts.map +1 -1
  76. package/dist/internal/event-mapper.js +151 -41
  77. package/dist/internal/init-project.d.ts +88 -1
  78. package/dist/internal/init-project.d.ts.map +1 -1
  79. package/dist/internal/init-project.js +221 -31
  80. package/dist/internal/install-cursor-skills.d.ts +64 -0
  81. package/dist/internal/install-cursor-skills.d.ts.map +1 -0
  82. package/dist/internal/install-cursor-skills.js +274 -0
  83. package/dist/internal/logs-client.d.ts +60 -0
  84. package/dist/internal/logs-client.d.ts.map +1 -0
  85. package/dist/internal/logs-client.js +311 -0
  86. package/dist/internal/open-browser.d.ts +5 -0
  87. package/dist/internal/open-browser.d.ts.map +1 -0
  88. package/dist/internal/open-browser.js +34 -0
  89. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  90. package/dist/internal/playground/toolchain.js +16 -11
  91. package/dist/internal/playground-proxy.d.ts +69 -0
  92. package/dist/internal/playground-proxy.d.ts.map +1 -0
  93. package/dist/internal/playground-proxy.js +468 -0
  94. package/dist/internal/prompt-context.d.ts +35 -0
  95. package/dist/internal/prompt-context.d.ts.map +1 -0
  96. package/dist/internal/prompt-context.js +71 -0
  97. package/dist/internal/request-headers.d.ts +11 -0
  98. package/dist/internal/request-headers.d.ts.map +1 -0
  99. package/dist/internal/request-headers.js +14 -0
  100. package/dist/internal/resolve-prod-target.d.ts +42 -0
  101. package/dist/internal/resolve-prod-target.d.ts.map +1 -0
  102. package/dist/internal/resolve-prod-target.js +111 -0
  103. package/dist/internal/run-client.d.ts +2 -2
  104. package/dist/internal/run-client.d.ts.map +1 -1
  105. package/dist/internal/run-client.js +38 -23
  106. package/dist/internal/server.d.ts.map +1 -1
  107. package/dist/internal/server.js +10 -4
  108. package/dist/internal/session-engine.d.ts +1 -1
  109. package/dist/internal/session-engine.d.ts.map +1 -1
  110. package/dist/internal/session-engine.js +21 -6
  111. package/dist/internal/sessions-client.d.ts +21 -0
  112. package/dist/internal/sessions-client.d.ts.map +1 -0
  113. package/dist/internal/sessions-client.js +168 -0
  114. package/dist/internal/stream-progress.d.ts.map +1 -1
  115. package/dist/internal/stream-progress.js +31 -3
  116. package/dist/internal/terminal-style.d.ts +22 -0
  117. package/dist/internal/terminal-style.d.ts.map +1 -0
  118. package/dist/internal/terminal-style.js +49 -0
  119. package/dist/internal/trajectory.d.ts +10 -5
  120. package/dist/internal/trajectory.d.ts.map +1 -1
  121. package/dist/internal/trajectory.js +82 -10
  122. package/dist/internal/workspace.d.ts +11 -0
  123. package/dist/internal/workspace.d.ts.map +1 -1
  124. package/dist/internal/workspace.js +38 -4
  125. package/dist/playground/assets/index-D-vo2lV_.css +1 -0
  126. package/dist/playground/assets/index-x60b9q2j.js +312 -0
  127. package/dist/playground/index.html +2 -2
  128. package/dist/types.d.ts +26 -1
  129. package/dist/types.d.ts.map +1 -1
  130. package/docs/quickstart.md +22 -7
  131. package/docs/reference/cli.md +51 -3
  132. package/package.json +3 -1
  133. package/skills/ab/SKILL.md +8 -8
  134. package/skills/create-agent/SKILL.md +28 -22
  135. package/skills/debug/SKILL.md +11 -11
  136. package/skills/evals/SKILL.md +16 -16
  137. package/skills/framework-map/SKILL.md +6 -6
  138. package/skills/github/SKILL.md +13 -13
  139. package/skills/hillclimb/SKILL.md +10 -10
  140. package/skills/setup-slack/SKILL.md +13 -13
  141. package/src/bin/agent-serve.ts +422 -188
  142. package/src/internal/chat-client.ts +252 -37
  143. package/src/internal/cli-ax.ts +722 -72
  144. package/src/internal/cli-cursor.ts +14 -42
  145. package/src/internal/cli-deploy.ts +428 -49
  146. package/src/internal/cursor/credentials.ts +14 -0
  147. package/src/internal/deploy-client.ts +45 -4
  148. package/src/internal/deploy-source.ts +133 -0
  149. package/src/internal/discovery.ts +53 -16
  150. package/src/internal/eval-run-store.ts +2 -1
  151. package/src/internal/eval-runner.ts +5 -0
  152. package/src/internal/event-mapper.ts +222 -42
  153. package/src/internal/init-project.ts +333 -51
  154. package/src/internal/install-cursor-skills.ts +327 -0
  155. package/src/internal/logs-client.ts +442 -0
  156. package/src/internal/open-browser.ts +41 -0
  157. package/src/internal/playground/toolchain.ts +15 -13
  158. package/src/internal/playground-proxy.ts +576 -0
  159. package/src/internal/prompt-context.ts +95 -0
  160. package/src/internal/request-headers.ts +23 -0
  161. package/src/internal/resolve-prod-target.ts +150 -0
  162. package/src/internal/run-client.ts +39 -36
  163. package/src/internal/server.ts +12 -3
  164. package/src/internal/session-engine.ts +22 -3
  165. package/src/internal/sessions-client.ts +182 -0
  166. package/src/internal/stream-progress.ts +36 -2
  167. package/src/internal/terminal-style.ts +74 -0
  168. package/src/internal/trajectory.ts +91 -13
  169. package/src/internal/workspace.ts +42 -4
  170. package/src/types.ts +42 -6
  171. package/dist/docs/assets/chunks/@localSearchIndexroot.zwQ9RCQ7.js +0 -1
  172. package/dist/playground/assets/index-B1Qc9h2u.css +0 -1
  173. package/dist/playground/assets/index-CpDYCj8W.js +0 -79
  174. /package/dist/docs/assets/{quickstart.md.CfU8_uTC.lean.js → quickstart.md.BU6Iwi_9.lean.js} +0 -0
@@ -15,6 +15,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
15
15
  });
16
16
  };
17
17
  import { createInterface } from "node:readline";
18
+ import { mergeRequestHeaders } from "./request-headers.js";
19
+ import { fetchSessionEvents, listSessions } from "./sessions-client.js";
18
20
  const IDENTITY = (s) => s;
19
21
  function makePalette(enabled) {
20
22
  if (!enabled) {
@@ -44,15 +46,19 @@ export function runChat(options) {
44
46
  return __awaiter(this, void 0, void 0, function* () {
45
47
  var _a;
46
48
  const baseUrl = options.baseUrl.replace(/\/$/, "");
49
+ const auth = {
50
+ bearerToken: options.bearerToken,
51
+ headers: options.headers,
52
+ };
47
53
  const colorEnabled = !options.noColor && process.stdout.isTTY === true && !process.env.NO_COLOR;
48
54
  const c = makePalette(colorEnabled);
49
55
  const write = (s) => {
50
56
  process.stdout.write(s);
51
57
  };
52
- const health = yield getJson(baseUrl, "/v1/health", options.bearerToken);
58
+ const health = yield getJson(baseUrl, "/v1/health", auth);
53
59
  const agentName = typeof (health === null || health === void 0 ? void 0 : health.name) === "string" ? health.name : "agent-serve";
54
60
  write(`${c.bold(agentName)} ${c.dim(`· ${baseUrl}`)}\n`);
55
- const info = yield getJson(baseUrl, "/v1/info", options.bearerToken);
61
+ const info = yield getJson(baseUrl, "/v1/info", auth);
56
62
  if (info && typeof info === "object") {
57
63
  const model = info.model;
58
64
  const tools = (_a = info.tools) !== null && _a !== void 0 ? _a : [];
@@ -60,26 +66,48 @@ export function runChat(options) {
60
66
  write(c.dim(`model ${modelText} · ${tools.length} tool${tools.length === 1 ? "" : "s"}\n`));
61
67
  }
62
68
  write("\n");
63
- let sessionId;
64
- let continuationToken;
69
+ let sessionId = options.sessionId;
70
+ let continuationToken = options.continuationToken;
65
71
  // Highest event index rendered so far; a follow-up streams from here so it
66
72
  // shows only the new turn, not the replayed transcript.
67
73
  let nextEventIndex = 0;
68
- const runTurn = (message) => __awaiter(this, void 0, void 0, function* () {
69
- write(`${c.cyan("› you")} ${message}\n`);
74
+ if (options.sessionId !== undefined) {
75
+ const attached = yield attachSession({
76
+ baseUrl,
77
+ auth,
78
+ sessionId: options.sessionId,
79
+ continuationToken: options.continuationToken,
80
+ agentName,
81
+ palette: c,
82
+ write,
83
+ });
84
+ sessionId = attached.sessionId;
85
+ continuationToken = attached.continuationToken;
86
+ nextEventIndex = attached.nextEventIndex;
87
+ }
88
+ else if (options.continuationToken !== undefined) {
89
+ throw new Error("--continuation-token requires --session (session id to reattach to)");
90
+ }
91
+ const runTurn = (message_1, ...args_1) => __awaiter(this, [message_1, ...args_1], void 0, function* (message, opts = {}) {
92
+ var _a;
93
+ // REPL lines are already echoed by readline; only reprint for seeded
94
+ // `--message` / one-shot so the transcript still shows the user turn.
95
+ if (opts.echoUser !== false) {
96
+ write(`${c.cyan("› you")} ${message}\n`);
97
+ }
70
98
  const startIndex = sessionId === undefined ? 0 : nextEventIndex;
71
99
  if (sessionId === undefined) {
72
- const created = yield postJson(baseUrl, "/v1/session", { message }, options.bearerToken);
100
+ const created = yield postJson(baseUrl, "/v1/session", { message }, auth);
73
101
  sessionId = str(created === null || created === void 0 ? void 0 : created.sessionId);
74
102
  continuationToken = str(created === null || created === void 0 ? void 0 : created.continuationToken);
75
103
  }
76
104
  else {
77
- const resp = yield postJson(baseUrl, `/v1/session/${sessionId}`, { message, continuationToken }, options.bearerToken);
105
+ const resp = yield postJson(baseUrl, `/v1/session/${sessionId}`, { message, continuationToken }, auth);
78
106
  if ((resp === null || resp === void 0 ? void 0 : resp.ok) === false) {
79
107
  write(`${c.red("error")} ${str(resp.error)}: ${str(resp.message)}\n\n`);
80
108
  return;
81
109
  }
82
- continuationToken = str(resp === null || resp === void 0 ? void 0 : resp.continuationToken);
110
+ continuationToken = (_a = str(resp === null || resp === void 0 ? void 0 : resp.continuationToken)) !== null && _a !== void 0 ? _a : continuationToken;
83
111
  }
84
112
  if (sessionId === undefined) {
85
113
  write(`${c.red("error")} server did not return a session id\n\n`);
@@ -89,15 +117,19 @@ export function runChat(options) {
89
117
  baseUrl,
90
118
  sessionId,
91
119
  startIndex,
92
- bearerToken: options.bearerToken,
120
+ auth,
121
+ agentName,
93
122
  palette: c,
94
123
  write,
95
124
  });
96
125
  write("\n");
97
126
  });
127
+ const oneShot = options.oneShot === true || process.stdin.isTTY !== true;
98
128
  if (options.message !== undefined) {
99
129
  yield runTurn(options.message);
100
- return;
130
+ if (oneShot) {
131
+ return;
132
+ }
101
133
  }
102
134
  write(c.dim("Type a message and press Enter. Ctrl-D or /quit to exit.\n\n"));
103
135
  const rl = createInterface({ input: process.stdin, output: process.stdout });
@@ -118,7 +150,7 @@ export function runChat(options) {
118
150
  return;
119
151
  }
120
152
  rl.pause();
121
- runTurn(text)
153
+ runTurn(text, { echoUser: false })
122
154
  .catch((err) => {
123
155
  write(`${c.red("error")} ${describe(err)}\n\n`);
124
156
  })
@@ -134,6 +166,95 @@ export function runChat(options) {
134
166
  });
135
167
  });
136
168
  }
169
+ /**
170
+ * Resolve the current continuation token for a session via `GET /v1/sessions`.
171
+ * Throws when the session is missing or not followable.
172
+ */
173
+ export function lookupSessionContinuation(args) {
174
+ return __awaiter(this, void 0, void 0, function* () {
175
+ const sessions = yield listSessions({
176
+ baseUrl: args.baseUrl,
177
+ auth: args.auth,
178
+ });
179
+ const match = sessions.find((s) => s.sessionId === args.sessionId);
180
+ if (match === undefined) {
181
+ throw new Error(`Session ${args.sessionId} not found in /v1/sessions (wrong id, or not owned by this caller). ` +
182
+ `Pass --continuation-token if you have it.`);
183
+ }
184
+ const token = str(match.continuationToken);
185
+ if (token === undefined) {
186
+ throw new Error(`Session ${args.sessionId} has no continuation token` +
187
+ (match.mode === "task" ? " (task sessions are not followable)." : "."));
188
+ }
189
+ return token;
190
+ });
191
+ }
192
+ function attachSession(args) {
193
+ return __awaiter(this, void 0, void 0, function* () {
194
+ const { palette: c, write } = args;
195
+ let continuationToken = args.continuationToken;
196
+ if (continuationToken === undefined || continuationToken === "") {
197
+ continuationToken = yield lookupSessionContinuation({
198
+ baseUrl: args.baseUrl,
199
+ sessionId: args.sessionId,
200
+ auth: args.auth,
201
+ });
202
+ }
203
+ const events = yield fetchSessionEvents({
204
+ baseUrl: args.baseUrl,
205
+ sessionId: args.sessionId,
206
+ auth: args.auth,
207
+ });
208
+ if (events.length > 0) {
209
+ write(c.dim(`reattached ${args.sessionId} · replaying ${events.length} events\n\n`));
210
+ renderTranscript(events, args.agentName, c, write);
211
+ write("\n");
212
+ }
213
+ else {
214
+ write(c.dim(`reattached ${args.sessionId}\n\n`));
215
+ }
216
+ const lastIndex = events.length === 0
217
+ ? -1
218
+ : Math.max(...events.map((e) => (typeof e.index === "number" ? e.index : -1)));
219
+ return {
220
+ sessionId: args.sessionId,
221
+ continuationToken,
222
+ nextEventIndex: lastIndex + 1,
223
+ };
224
+ });
225
+ }
226
+ /** Compact historical transcript for reattach (final messages + tool calls). */
227
+ function renderTranscript(events, agentName, c, write) {
228
+ var _a;
229
+ var _b;
230
+ for (const event of events) {
231
+ if (event.type === "message.received") {
232
+ write(`${c.cyan("› you")} ${event.data.text}\n`);
233
+ continue;
234
+ }
235
+ if (event.type === "message.completed") {
236
+ const text = (_b = (_a = event.data.text) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : "";
237
+ if (text !== "" && event.data.finishReason !== "tool_call") {
238
+ write(`${c.green(`‹ ${agentName}`)} ${text}\n`);
239
+ }
240
+ continue;
241
+ }
242
+ if (event.type === "actions.requested") {
243
+ for (const call of event.data.calls) {
244
+ write(` ${c.magenta("⚙")} ${c.bold(call.toolName)}${c.dim(formatArgs(call.args))}\n`);
245
+ }
246
+ continue;
247
+ }
248
+ if (event.type === "action.result") {
249
+ const label = event.data.isError ? c.red("✗") : c.magenta("→");
250
+ write(` ${label} ${c.dim(truncate(stringify(event.data.output), 100))}\n`);
251
+ continue;
252
+ }
253
+ if (event.type === "turn.completed") {
254
+ write(c.dim(" ─ turn done\n"));
255
+ }
256
+ }
257
+ }
137
258
  const TERMINAL_TYPES = new Set([
138
259
  "session.waiting",
139
260
  "session.completed",
@@ -145,7 +266,7 @@ function streamTurn(args) {
145
266
  var _a, _b;
146
267
  const { palette: c, write } = args;
147
268
  const url = `${args.baseUrl}/v1/session/${args.sessionId}/stream?startIndex=${args.startIndex}`;
148
- const resp = yield fetch(url, { headers: authHeaders(args.bearerToken) });
269
+ const resp = yield fetch(url, { headers: mergeRequestHeaders(args.auth) });
149
270
  if (!resp.ok || resp.body === null) {
150
271
  write(`${c.red("error")} stream failed (${resp.status})\n`);
151
272
  return args.startIndex;
@@ -194,27 +315,42 @@ function streamTurn(args) {
194
315
  }
195
316
  continue;
196
317
  }
197
- if (event.type === "reasoning.appended" && !thinkingShown) {
318
+ if (event.type === "reasoning.appended" &&
319
+ event.data.parentCallId === undefined &&
320
+ !thinkingShown) {
198
321
  thinkingShown = true;
199
322
  write(c.dim(" · thinking…\n"));
200
323
  continue;
201
324
  }
202
325
  if (event.type === "message.appended") {
326
+ if (event.data.parentCallId !== undefined) {
327
+ continue;
328
+ }
203
329
  if (!assistantOpen) {
204
- write(`${c.green("‹ agent")} `);
330
+ write(`${c.green(`‹ ${args.agentName}`)} `);
205
331
  assistantOpen = true;
206
332
  }
207
333
  write(event.data.delta);
208
334
  continue;
209
335
  }
210
336
  if (event.type === "message.completed") {
337
+ if (event.data.parentCallId !== undefined) {
338
+ continue;
339
+ }
211
340
  closeAssistant();
212
341
  continue;
213
342
  }
214
343
  if (event.type === "actions.requested") {
215
344
  closeAssistant();
216
345
  for (const call of event.data.calls) {
217
- write(` ${c.magenta("")} ${c.bold(call.toolName)}${c.dim(formatArgs(call.args))}\n`);
346
+ if (call.toolName === "task" && call.parentCallId === undefined) {
347
+ continue;
348
+ }
349
+ const indent = call.parentCallId !== undefined ||
350
+ event.data.parentCallId !== undefined
351
+ ? " "
352
+ : " ";
353
+ write(`${indent}${c.magenta("⚙")} ${c.bold(call.toolName)}${c.dim(formatArgs(call.args))}\n`);
218
354
  }
219
355
  continue;
220
356
  }
@@ -229,8 +365,13 @@ function streamTurn(args) {
229
365
  continue;
230
366
  }
231
367
  if (event.type === "action.result") {
368
+ if (event.data.toolName === "task" &&
369
+ event.data.parentCallId === undefined) {
370
+ continue;
371
+ }
232
372
  const label = event.data.isError ? c.red("✗") : c.magenta("→");
233
- write(` ${label} ${c.dim(truncate(stringify(event.data.output), 100))}\n`);
373
+ const indent = event.data.parentCallId !== undefined ? " " : " ";
374
+ write(`${indent}${label} ${c.dim(truncate(stringify(event.data.output), 100))}\n`);
234
375
  continue;
235
376
  }
236
377
  if (event.type === "subagent.called") {
@@ -272,16 +413,11 @@ function streamTurn(args) {
272
413
  // ---------------------------------------------------------------------------
273
414
  // HTTP helpers (built-in fetch; node 22+)
274
415
  // ---------------------------------------------------------------------------
275
- function authHeaders(bearerToken) {
276
- return bearerToken === undefined
277
- ? {}
278
- : { authorization: `Bearer ${bearerToken}` };
279
- }
280
- function getJson(baseUrl, path, bearerToken) {
416
+ function getJson(baseUrl, path, auth) {
281
417
  return __awaiter(this, void 0, void 0, function* () {
282
418
  try {
283
419
  const resp = yield fetch(`${baseUrl}${path}`, {
284
- headers: authHeaders(bearerToken),
420
+ headers: mergeRequestHeaders(auth),
285
421
  });
286
422
  const text = yield resp.text();
287
423
  return text ? JSON.parse(text) : undefined;
@@ -291,15 +427,32 @@ function getJson(baseUrl, path, bearerToken) {
291
427
  }
292
428
  });
293
429
  }
294
- function postJson(baseUrl, path, body, bearerToken) {
430
+ function postJson(baseUrl, path, body, auth) {
295
431
  return __awaiter(this, void 0, void 0, function* () {
432
+ var _a, _b, _c;
296
433
  const resp = yield fetch(`${baseUrl}${path}`, {
297
434
  method: "POST",
298
- headers: Object.assign({ "content-type": "application/json" }, authHeaders(bearerToken)),
435
+ headers: Object.assign({ "content-type": "application/json" }, mergeRequestHeaders(auth)),
299
436
  body: JSON.stringify(body),
300
437
  });
301
438
  const text = yield resp.text();
302
- return text ? JSON.parse(text) : undefined;
439
+ let parsed;
440
+ if (text) {
441
+ try {
442
+ parsed = JSON.parse(text);
443
+ }
444
+ catch (_d) {
445
+ parsed = { message: text };
446
+ }
447
+ }
448
+ if (!resp.ok) {
449
+ const anyrunReason = resp.headers.get("x-anyrun-failure-reason");
450
+ const message = (_c = (_b = (_a = (typeof (parsed === null || parsed === void 0 ? void 0 : parsed.message) === "string" && parsed.message !== ""
451
+ ? parsed.message
452
+ : undefined)) !== null && _a !== void 0 ? _a : (typeof (parsed === null || parsed === void 0 ? void 0 : parsed.error) === "string" ? parsed.error : undefined)) !== null && _b !== void 0 ? _b : anyrunReason) !== null && _c !== void 0 ? _c : `HTTP ${resp.status}`;
453
+ return { ok: false, error: "http_error", message, status: resp.status };
454
+ }
455
+ return parsed;
303
456
  });
304
457
  }
305
458
  function str(value) {
@@ -9,7 +9,11 @@
9
9
  export interface AxCliOptions {
10
10
  cwd?: string;
11
11
  dir: string;
12
- /** Agent slug when multiple agents are mounted. */
12
+ /**
13
+ * Local multi-agent mount slug, or (with `--prod`) the hosted deployment
14
+ * slug. When `--prod` is set and this is omitted, the slug is derived from
15
+ * the directory name (same as `deploy`).
16
+ */
13
17
  slug?: string;
14
18
  bearerToken?: string;
15
19
  stateRoot?: string;
@@ -38,15 +42,61 @@ export interface AxCliOptions {
38
42
  toolName?: string;
39
43
  /** JSON input for `call`. */
40
44
  toolInput?: string;
41
- /** Remote agent base URL (skip local host) for run/eval. */
45
+ /** Remote agent base URL (skip local host) for run/eval/chat. */
42
46
  url?: string;
47
+ /**
48
+ * Route chat/resume/run/call/eval/logs/sessions at the team's hosted
49
+ * deployment
50
+ * instead of a local ephemeral server. Mutually exclusive with `--url`.
51
+ */
52
+ prod?: boolean;
53
+ /** Cursor team id for `--prod` (defaults to the account's team). */
54
+ team?: string;
55
+ /** Cursor API key override for `--prod` management calls. */
56
+ apiKey?: string;
57
+ /** Injected fetch for `--prod` tests. */
58
+ fetchImpl?: typeof fetch;
43
59
  /**
44
60
  * Stream live turn progress to stderr (default: stderr is a TTY).
45
61
  * Final JSON/text still goes to stdout.
46
62
  */
47
63
  stream?: boolean;
64
+ /** Force plain chat output even on a TTY. */
65
+ noColor?: boolean;
66
+ /** `logs`: dump current buffer / progress once and exit. */
67
+ once?: boolean;
68
+ /**
69
+ * `session`: print raw `{ sessionId, events }` JSON instead of a trajectory.
70
+ * (CLI flag `--events`; rewritten from colliding with run's `--events <file>`.)
71
+ */
72
+ rawEvents?: boolean;
73
+ /**
74
+ * `playground`: print the URL only; do not open a browser.
75
+ * (CLI flag `--print`.)
76
+ */
77
+ print?: boolean;
78
+ /** Abort signal (tests / programmatic stop of `playground` proxy). */
79
+ signal?: AbortSignal;
80
+ }
81
+ export interface ResolvedAgentTarget {
82
+ agentUrl: string;
83
+ headers?: Record<string, string>;
84
+ close?: () => Promise<void>;
48
85
  }
86
+ export declare function resolveTarget(options: AxCliOptions): Promise<ResolvedAgentTarget>;
49
87
  export declare function cmdInit(options: AxCliOptions): Promise<number>;
88
+ /**
89
+ * `chat` — talk to a running (or `--prod` hosted) agent. With `--json`,
90
+ * prints a trajectory instead of the interactive UI.
91
+ */
92
+ /**
93
+ * `resume <sessionId>` — reattach the interactive chat REPL to an existing
94
+ * session (looks up the continuation token via `/v1/sessions` when omitted).
95
+ * Same flags as `chat` (`--prod`, `--message`, `--json`, …). `--session`
96
+ * is accepted as a redundant alias for the positional id.
97
+ */
98
+ export declare function cmdResume(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
99
+ export declare function cmdChat(options: AxCliOptions): Promise<number>;
50
100
  export declare function cmdRun(options: AxCliOptions): Promise<number>;
51
101
  /**
52
102
  * `agent-serve call <tool>` — deterministic tool invocation over
@@ -55,4 +105,27 @@ export declare function cmdRun(options: AxCliOptions): Promise<number>;
55
105
  export declare function cmdCall(options: AxCliOptions): Promise<number>;
56
106
  export declare function cmdTrajectory(options: AxCliOptions): Promise<number>;
57
107
  export declare function cmdEval(options: AxCliOptions): Promise<number>;
108
+ /**
109
+ * `logs` — follow deploy progress (`--prod`) then runtime agent logs.
110
+ * Local / `--url` tails `/v1/logs` only.
111
+ */
112
+ export declare function cmdLogs(options: AxCliOptions): Promise<number>;
113
+ /**
114
+ * `sessions` — list sessions on a running (or `--prod` hosted) agent.
115
+ */
116
+ export declare function cmdSessions(options: AxCliOptions): Promise<number>;
117
+ /**
118
+ * `session <id>` — view a full session (trajectory text by default).
119
+ * `--json` → trajectory JSON; `--events` (`rawEvents`) → raw event list.
120
+ * Interactive reattach: `resume <id>` (or `chat --session`).
121
+ */
122
+ export declare function cmdSession(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
123
+ /**
124
+ * `playground` — open the web UI against local / `--url` / `--prod`.
125
+ *
126
+ * Hosted engines need short-lived access headers a browser cannot set, so
127
+ * `--prod` (and `--bearer-token`) run a loopback reverse proxy that injects
128
+ * them. Ctrl-C stops the proxy.
129
+ */
130
+ export declare function cmdPlayground(options: AxCliOptions): Promise<number>;
58
131
  //# sourceMappingURL=cli-ax.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-ax.d.ts","sourceRoot":"","sources":["../../src/internal/cli-ax.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+ED,wBAAsB,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BpE;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA8FnE;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAuDpE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAe1E;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAgFpE"}
1
+ {"version":3,"file":"cli-ax.d.ts","sourceRoot":"","sources":["../../src/internal/cli-ax.ts"],"names":[],"mappings":"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"}