@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.
- package/AGENTS.md +16 -5
- package/README.md +8 -9
- package/dist/bin/agent-serve.d.ts +3 -1
- package/dist/bin/agent-serve.d.ts.map +1 -1
- package/dist/bin/agent-serve.js +389 -152
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.Oje4vhlk.js → app.BR0RbIdx.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DtIOQzGj.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.H5XZ2zCB.js → VPLocalSearchBox.qjsVTneI.js} +1 -1
- package/dist/docs/assets/chunks/{theme.CTR_TuaE.js → theme.2Kg8jIp_.js} +2 -2
- package/dist/docs/assets/{quickstart.md.CfU8_uTC.js → quickstart.md.BU6Iwi_9.js} +18 -6
- package/dist/docs/assets/{reference_cli.md.DA730zCu.js → reference_cli.md.Bv6pOxcF.js} +11 -6
- package/dist/docs/assets/{reference_cli.md.DA730zCu.lean.js → reference_cli.md.Bv6pOxcF.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +3 -3
- package/dist/docs/concepts.html +3 -3
- package/dist/docs/deployment.html +3 -3
- package/dist/docs/evals.html +3 -3
- package/dist/docs/guides/agent-to-agent.html +3 -3
- package/dist/docs/guides/cloud-runtime.html +3 -3
- package/dist/docs/guides/github.html +3 -3
- package/dist/docs/guides/human-in-the-loop.html +3 -3
- package/dist/docs/guides/slack.html +3 -3
- package/dist/docs/guides/webhooks.html +3 -3
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +3 -3
- package/dist/docs/index.html +3 -3
- package/dist/docs/quickstart.html +22 -10
- package/dist/docs/reference/agent-config.html +3 -3
- package/dist/docs/reference/channels.html +3 -3
- package/dist/docs/reference/cli.html +14 -9
- package/dist/docs/reference/connections.html +3 -3
- package/dist/docs/reference/hooks.html +3 -3
- package/dist/docs/reference/http-api.html +3 -3
- package/dist/docs/reference/instructions.html +3 -3
- package/dist/docs/reference/playground.html +3 -3
- package/dist/docs/reference/project-layout.html +3 -3
- package/dist/docs/reference/schedules.html +3 -3
- package/dist/docs/reference/sessions.html +3 -3
- package/dist/docs/reference/skills.html +3 -3
- package/dist/docs/reference/subagents.html +3 -3
- package/dist/docs/reference/tools.html +3 -3
- package/dist/docs/scaffolding-agents.html +3 -3
- package/dist/docs/storage.html +3 -3
- package/dist/docs/troubleshooting.html +3 -3
- package/dist/internal/chat-client.d.ts +29 -3
- package/dist/internal/chat-client.d.ts.map +1 -1
- package/dist/internal/chat-client.js +180 -27
- package/dist/internal/cli-ax.d.ts +75 -2
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +600 -52
- package/dist/internal/cli-cursor.d.ts.map +1 -1
- package/dist/internal/cli-cursor.js +8 -36
- package/dist/internal/cli-deploy.d.ts +59 -3
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +316 -38
- package/dist/internal/cursor/credentials.d.ts +9 -0
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +12 -0
- package/dist/internal/deploy-client.d.ts +9 -1
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +23 -3
- package/dist/internal/deploy-source.d.ts +35 -0
- package/dist/internal/deploy-source.d.ts.map +1 -0
- package/dist/internal/deploy-source.js +118 -0
- package/dist/internal/discovery.d.ts +11 -0
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +43 -14
- package/dist/internal/eval-run-store.d.ts.map +1 -1
- package/dist/internal/eval-run-store.js +2 -1
- package/dist/internal/eval-runner.d.ts +2 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +2 -0
- package/dist/internal/event-mapper.d.ts +54 -1
- package/dist/internal/event-mapper.d.ts.map +1 -1
- package/dist/internal/event-mapper.js +151 -41
- package/dist/internal/init-project.d.ts +88 -1
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +221 -31
- package/dist/internal/install-cursor-skills.d.ts +64 -0
- package/dist/internal/install-cursor-skills.d.ts.map +1 -0
- package/dist/internal/install-cursor-skills.js +274 -0
- package/dist/internal/logs-client.d.ts +60 -0
- package/dist/internal/logs-client.d.ts.map +1 -0
- package/dist/internal/logs-client.js +311 -0
- package/dist/internal/open-browser.d.ts +5 -0
- package/dist/internal/open-browser.d.ts.map +1 -0
- package/dist/internal/open-browser.js +34 -0
- package/dist/internal/playground/toolchain.d.ts.map +1 -1
- package/dist/internal/playground/toolchain.js +16 -11
- package/dist/internal/playground-proxy.d.ts +69 -0
- package/dist/internal/playground-proxy.d.ts.map +1 -0
- package/dist/internal/playground-proxy.js +468 -0
- package/dist/internal/prompt-context.d.ts +35 -0
- package/dist/internal/prompt-context.d.ts.map +1 -0
- package/dist/internal/prompt-context.js +71 -0
- package/dist/internal/request-headers.d.ts +11 -0
- package/dist/internal/request-headers.d.ts.map +1 -0
- package/dist/internal/request-headers.js +14 -0
- package/dist/internal/resolve-prod-target.d.ts +42 -0
- package/dist/internal/resolve-prod-target.d.ts.map +1 -0
- package/dist/internal/resolve-prod-target.js +111 -0
- package/dist/internal/run-client.d.ts +2 -2
- package/dist/internal/run-client.d.ts.map +1 -1
- package/dist/internal/run-client.js +38 -23
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +10 -4
- package/dist/internal/session-engine.d.ts +1 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +21 -6
- package/dist/internal/sessions-client.d.ts +21 -0
- package/dist/internal/sessions-client.d.ts.map +1 -0
- package/dist/internal/sessions-client.js +168 -0
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +31 -3
- package/dist/internal/terminal-style.d.ts +22 -0
- package/dist/internal/terminal-style.d.ts.map +1 -0
- package/dist/internal/terminal-style.js +49 -0
- package/dist/internal/trajectory.d.ts +10 -5
- package/dist/internal/trajectory.d.ts.map +1 -1
- package/dist/internal/trajectory.js +82 -10
- package/dist/internal/workspace.d.ts +11 -0
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +38 -4
- package/dist/playground/assets/index-D-vo2lV_.css +1 -0
- package/dist/playground/assets/index-x60b9q2j.js +312 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +26 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/quickstart.md +22 -7
- package/docs/reference/cli.md +51 -3
- package/package.json +3 -1
- package/skills/ab/SKILL.md +8 -8
- package/skills/create-agent/SKILL.md +28 -22
- package/skills/debug/SKILL.md +11 -11
- package/skills/evals/SKILL.md +16 -16
- package/skills/framework-map/SKILL.md +6 -6
- package/skills/github/SKILL.md +13 -13
- package/skills/hillclimb/SKILL.md +10 -10
- package/skills/setup-slack/SKILL.md +13 -13
- package/src/bin/agent-serve.ts +422 -188
- package/src/internal/chat-client.ts +252 -37
- package/src/internal/cli-ax.ts +722 -72
- package/src/internal/cli-cursor.ts +14 -42
- package/src/internal/cli-deploy.ts +428 -49
- package/src/internal/cursor/credentials.ts +14 -0
- package/src/internal/deploy-client.ts +45 -4
- package/src/internal/deploy-source.ts +133 -0
- package/src/internal/discovery.ts +53 -16
- package/src/internal/eval-run-store.ts +2 -1
- package/src/internal/eval-runner.ts +5 -0
- package/src/internal/event-mapper.ts +222 -42
- package/src/internal/init-project.ts +333 -51
- package/src/internal/install-cursor-skills.ts +327 -0
- package/src/internal/logs-client.ts +442 -0
- package/src/internal/open-browser.ts +41 -0
- package/src/internal/playground/toolchain.ts +15 -13
- package/src/internal/playground-proxy.ts +576 -0
- package/src/internal/prompt-context.ts +95 -0
- package/src/internal/request-headers.ts +23 -0
- package/src/internal/resolve-prod-target.ts +150 -0
- package/src/internal/run-client.ts +39 -36
- package/src/internal/server.ts +12 -3
- package/src/internal/session-engine.ts +22 -3
- package/src/internal/sessions-client.ts +182 -0
- package/src/internal/stream-progress.ts +36 -2
- package/src/internal/terminal-style.ts +74 -0
- package/src/internal/trajectory.ts +91 -13
- package/src/internal/workspace.ts +42 -4
- package/src/types.ts +42 -6
- package/dist/docs/assets/chunks/@localSearchIndexroot.zwQ9RCQ7.js +0 -1
- package/dist/playground/assets/index-B1Qc9h2u.css +0 -1
- package/dist/playground/assets/index-CpDYCj8W.js +0 -79
- /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",
|
|
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",
|
|
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
|
-
|
|
69
|
-
|
|
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 },
|
|
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 },
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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" &&
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
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,
|
|
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" },
|
|
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
|
-
|
|
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
|
-
/**
|
|
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;
|
|
1
|
+
{"version":3,"file":"cli-ax.d.ts","sourceRoot":"","sources":["../../src/internal/cli-ax.ts"],"names":[],"mappings":"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"}
|