@rudderhq/agent-runtime-cursor-local 0.1.0-canary.0
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/LICENSE +14 -0
- package/dist/cli/format-event.d.ts +2 -0
- package/dist/cli/format-event.d.ts.map +1 -0
- package/dist/cli/format-event.js +296 -0
- package/dist/cli/format-event.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/server/execute.d.ts +15 -0
- package/dist/server/execute.d.ts.map +1 -0
- package/dist/server/execute.js +546 -0
- package/dist/server/execute.js.map +1 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +62 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/parse.d.ts +13 -0
- package/dist/server/parse.d.ts.map +1 -0
- package/dist/server/parse.js +139 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/skills.d.ts +7 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +66 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/server/test.d.ts +3 -0
- package/dist/server/test.d.ts.map +1 -0
- package/dist/server/test.js +188 -0
- package/dist/server/test.js.map +1 -0
- package/dist/shared/stream.d.ts +5 -0
- package/dist/shared/stream.d.ts.map +1 -0
- package/dist/shared/stream.js +13 -0
- package/dist/shared/stream.js.map +1 -0
- package/dist/shared/trust.d.ts +2 -0
- package/dist/shared/trust.d.ts.map +1 -0
- package/dist/shared/trust.js +7 -0
- package/dist/shared/trust.js.map +1 -0
- package/dist/ui/build-config.d.ts +3 -0
- package/dist/ui/build-config.d.ts.map +1 -0
- package/dist/ui/build-config.js +92 -0
- package/dist/ui/build-config.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/parse-stdout.d.ts +3 -0
- package/dist/ui/parse-stdout.d.ts.map +1 -0
- package/dist/ui/parse-stdout.js +373 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/package.json +61 -0
- package/skills/para-memory-files/SKILL.md +114 -0
- package/skills/para-memory-files/references/schemas.md +35 -0
- package/skills/rudder/SKILL.md +265 -0
- package/skills/rudder/references/api-reference.md +253 -0
- package/skills/rudder/references/cli-reference.md +67 -0
- package/skills/rudder/references/organization-skills.md +155 -0
- package/skills/rudder-create-agent/SKILL.md +166 -0
- package/skills/rudder-create-agent/references/api-reference.md +172 -0
- package/skills/rudder-create-agent/references/cli-reference.md +126 -0
- package/skills/rudder-create-plugin/SKILL.md +103 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
This package is part of the Rudder project.
|
|
2
|
+
|
|
3
|
+
Rudder began as a fork of an early version of Paperclip.
|
|
4
|
+
|
|
5
|
+
Licensing for this package follows the repository-level transition:
|
|
6
|
+
- new Rudder contributions are made under the Apache License, Version 2.0
|
|
7
|
+
- upstream-derived Paperclip portions preserve the original MIT notice where applicable
|
|
8
|
+
|
|
9
|
+
Canonical project-level license and attribution texts live in the source repository:
|
|
10
|
+
- `LICENSE`
|
|
11
|
+
- `NOTICE`
|
|
12
|
+
- `LICENSES/MIT-PAPERCLIP`
|
|
13
|
+
|
|
14
|
+
Source repository: https://github.com/Undertone0809/rudder
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-event.d.ts","sourceRoot":"","sources":["../../src/cli/format-event.ts"],"names":[],"mappings":"AAqMA,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAuHzE"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
import { normalizeCursorStreamLine } from "../shared/stream.js";
|
|
3
|
+
function asRecord(value) {
|
|
4
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
5
|
+
return null;
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
function asString(value, fallback = "") {
|
|
9
|
+
return typeof value === "string" ? value : fallback;
|
|
10
|
+
}
|
|
11
|
+
function asNumber(value, fallback = 0) {
|
|
12
|
+
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
13
|
+
}
|
|
14
|
+
function stringifyUnknown(value) {
|
|
15
|
+
if (typeof value === "string")
|
|
16
|
+
return value;
|
|
17
|
+
if (value === null || value === undefined)
|
|
18
|
+
return "";
|
|
19
|
+
try {
|
|
20
|
+
return JSON.stringify(value, null, 2);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return String(value);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function printUserMessage(messageRaw) {
|
|
27
|
+
if (typeof messageRaw === "string") {
|
|
28
|
+
const text = messageRaw.trim();
|
|
29
|
+
if (text)
|
|
30
|
+
console.log(pc.gray(`user: ${text}`));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const message = asRecord(messageRaw);
|
|
34
|
+
if (!message)
|
|
35
|
+
return;
|
|
36
|
+
const directText = asString(message.text).trim();
|
|
37
|
+
if (directText)
|
|
38
|
+
console.log(pc.gray(`user: ${directText}`));
|
|
39
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
40
|
+
for (const partRaw of content) {
|
|
41
|
+
const part = asRecord(partRaw);
|
|
42
|
+
if (!part)
|
|
43
|
+
continue;
|
|
44
|
+
const type = asString(part.type).trim();
|
|
45
|
+
if (type !== "output_text" && type !== "text")
|
|
46
|
+
continue;
|
|
47
|
+
const text = asString(part.text).trim();
|
|
48
|
+
if (text)
|
|
49
|
+
console.log(pc.gray(`user: ${text}`));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function printAssistantMessage(messageRaw) {
|
|
53
|
+
if (typeof messageRaw === "string") {
|
|
54
|
+
const text = messageRaw.trim();
|
|
55
|
+
if (text)
|
|
56
|
+
console.log(pc.green(`assistant: ${text}`));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const message = asRecord(messageRaw);
|
|
60
|
+
if (!message)
|
|
61
|
+
return;
|
|
62
|
+
const directText = asString(message.text).trim();
|
|
63
|
+
if (directText)
|
|
64
|
+
console.log(pc.green(`assistant: ${directText}`));
|
|
65
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
66
|
+
for (const partRaw of content) {
|
|
67
|
+
const part = asRecord(partRaw);
|
|
68
|
+
if (!part)
|
|
69
|
+
continue;
|
|
70
|
+
const type = asString(part.type).trim();
|
|
71
|
+
if (type === "output_text" || type === "text") {
|
|
72
|
+
const text = asString(part.text).trim();
|
|
73
|
+
if (text)
|
|
74
|
+
console.log(pc.green(`assistant: ${text}`));
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (type === "thinking") {
|
|
78
|
+
const text = asString(part.text).trim();
|
|
79
|
+
if (text)
|
|
80
|
+
console.log(pc.gray(`thinking: ${text}`));
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (type === "tool_call") {
|
|
84
|
+
const name = asString(part.name, asString(part.tool, "tool"));
|
|
85
|
+
console.log(pc.yellow(`tool_call: ${name}`));
|
|
86
|
+
const input = part.input ?? part.arguments ?? part.args;
|
|
87
|
+
if (input !== undefined) {
|
|
88
|
+
try {
|
|
89
|
+
console.log(pc.gray(JSON.stringify(input, null, 2)));
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
console.log(pc.gray(String(input)));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (type === "tool_result") {
|
|
98
|
+
const isError = part.is_error === true || asString(part.status).toLowerCase() === "error";
|
|
99
|
+
const contentText = asString(part.output) ||
|
|
100
|
+
asString(part.text) ||
|
|
101
|
+
asString(part.result) ||
|
|
102
|
+
stringifyUnknown(part.output ?? part.result ?? part.text ?? part);
|
|
103
|
+
console.log((isError ? pc.red : pc.cyan)(`tool_result${isError ? " (error)" : ""}`));
|
|
104
|
+
if (contentText)
|
|
105
|
+
console.log((isError ? pc.red : pc.gray)(contentText));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function printToolCallEventTopLevel(parsed) {
|
|
110
|
+
const subtype = asString(parsed.subtype).trim().toLowerCase();
|
|
111
|
+
const callId = asString(parsed.call_id, asString(parsed.callId, asString(parsed.id, "")));
|
|
112
|
+
const toolCall = asRecord(parsed.tool_call ?? parsed.toolCall);
|
|
113
|
+
if (!toolCall) {
|
|
114
|
+
console.log(pc.yellow(`tool_call${subtype ? `: ${subtype}` : ""}`));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const [toolName] = Object.keys(toolCall);
|
|
118
|
+
if (!toolName) {
|
|
119
|
+
console.log(pc.yellow(`tool_call${subtype ? `: ${subtype}` : ""}`));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const payload = asRecord(toolCall[toolName]) ?? {};
|
|
123
|
+
const args = payload.args ?? asRecord(payload.function)?.arguments;
|
|
124
|
+
const result = payload.result ??
|
|
125
|
+
payload.output ??
|
|
126
|
+
payload.error ??
|
|
127
|
+
asRecord(payload.function)?.result ??
|
|
128
|
+
asRecord(payload.function)?.output;
|
|
129
|
+
const isError = parsed.is_error === true ||
|
|
130
|
+
payload.is_error === true ||
|
|
131
|
+
subtype === "failed" ||
|
|
132
|
+
subtype === "error" ||
|
|
133
|
+
subtype === "cancelled" ||
|
|
134
|
+
payload.error !== undefined;
|
|
135
|
+
if (subtype === "started" || subtype === "start") {
|
|
136
|
+
console.log(pc.yellow(`tool_call: ${toolName}${callId ? ` (${callId})` : ""}`));
|
|
137
|
+
if (args !== undefined) {
|
|
138
|
+
console.log(pc.gray(stringifyUnknown(args)));
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (subtype === "completed" || subtype === "complete" || subtype === "finished") {
|
|
143
|
+
const header = `tool_result${isError ? " (error)" : ""}${callId ? ` (${callId})` : ""}`;
|
|
144
|
+
console.log((isError ? pc.red : pc.cyan)(header));
|
|
145
|
+
if (result !== undefined) {
|
|
146
|
+
console.log((isError ? pc.red : pc.gray)(stringifyUnknown(result)));
|
|
147
|
+
}
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
console.log(pc.yellow(`tool_call: ${toolName}${subtype ? ` (${subtype})` : ""}`));
|
|
151
|
+
}
|
|
152
|
+
function printLegacyToolEvent(part) {
|
|
153
|
+
const tool = asString(part.tool, "tool");
|
|
154
|
+
const callId = asString(part.callID, asString(part.id, ""));
|
|
155
|
+
const state = asRecord(part.state);
|
|
156
|
+
const status = asString(state?.status);
|
|
157
|
+
const input = state?.input;
|
|
158
|
+
const output = asString(state?.output).replace(/\s+$/, "");
|
|
159
|
+
const metadata = asRecord(state?.metadata);
|
|
160
|
+
const exit = asNumber(metadata?.exit, NaN);
|
|
161
|
+
const isError = status === "failed" ||
|
|
162
|
+
status === "error" ||
|
|
163
|
+
status === "cancelled" ||
|
|
164
|
+
(Number.isFinite(exit) && exit !== 0);
|
|
165
|
+
console.log(pc.yellow(`tool_call: ${tool}${callId ? ` (${callId})` : ""}`));
|
|
166
|
+
if (input !== undefined) {
|
|
167
|
+
try {
|
|
168
|
+
console.log(pc.gray(JSON.stringify(input, null, 2)));
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
console.log(pc.gray(String(input)));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (status || output) {
|
|
175
|
+
const summary = [
|
|
176
|
+
"tool_result",
|
|
177
|
+
status ? `status=${status}` : "",
|
|
178
|
+
Number.isFinite(exit) ? `exit=${exit}` : "",
|
|
179
|
+
]
|
|
180
|
+
.filter(Boolean)
|
|
181
|
+
.join(" ");
|
|
182
|
+
console.log((isError ? pc.red : pc.cyan)(summary));
|
|
183
|
+
if (output) {
|
|
184
|
+
console.log((isError ? pc.red : pc.gray)(output));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
export function printCursorStreamEvent(raw, _debug) {
|
|
189
|
+
const line = normalizeCursorStreamLine(raw).line;
|
|
190
|
+
if (!line)
|
|
191
|
+
return;
|
|
192
|
+
let parsed = null;
|
|
193
|
+
try {
|
|
194
|
+
parsed = JSON.parse(line);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
console.log(line);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const type = asString(parsed.type);
|
|
201
|
+
if (type === "system") {
|
|
202
|
+
const subtype = asString(parsed.subtype);
|
|
203
|
+
if (subtype === "init") {
|
|
204
|
+
const sessionId = asString(parsed.session_id) ||
|
|
205
|
+
asString(parsed.sessionId) ||
|
|
206
|
+
asString(parsed.sessionID);
|
|
207
|
+
const model = asString(parsed.model);
|
|
208
|
+
const details = [sessionId ? `session: ${sessionId}` : "", model ? `model: ${model}` : ""]
|
|
209
|
+
.filter(Boolean)
|
|
210
|
+
.join(", ");
|
|
211
|
+
console.log(pc.blue(`Cursor init${details ? ` (${details})` : ""}`));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
console.log(pc.blue(`system: ${subtype || "event"}`));
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
if (type === "assistant") {
|
|
218
|
+
printAssistantMessage(parsed.message);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (type === "user") {
|
|
222
|
+
printUserMessage(parsed.message);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (type === "thinking") {
|
|
226
|
+
const text = asString(parsed.text).trim() || asString(asRecord(parsed.delta)?.text).trim();
|
|
227
|
+
if (text)
|
|
228
|
+
console.log(pc.gray(`thinking: ${text}`));
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (type === "tool_call") {
|
|
232
|
+
printToolCallEventTopLevel(parsed);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (type === "result") {
|
|
236
|
+
const usage = asRecord(parsed.usage);
|
|
237
|
+
const input = asNumber(usage?.input_tokens, asNumber(usage?.inputTokens));
|
|
238
|
+
const output = asNumber(usage?.output_tokens, asNumber(usage?.outputTokens));
|
|
239
|
+
const cached = asNumber(usage?.cached_input_tokens, asNumber(usage?.cachedInputTokens, asNumber(usage?.cache_read_input_tokens)));
|
|
240
|
+
const cost = asNumber(parsed.total_cost_usd, asNumber(parsed.cost_usd, asNumber(parsed.cost)));
|
|
241
|
+
const subtype = asString(parsed.subtype, "result");
|
|
242
|
+
const isError = parsed.is_error === true || subtype === "error" || subtype === "failed";
|
|
243
|
+
console.log(pc.blue(`result: subtype=${subtype}`));
|
|
244
|
+
console.log(pc.blue(`tokens: in=${input} out=${output} cached=${cached} cost=$${cost.toFixed(6)}`));
|
|
245
|
+
const resultText = asString(parsed.result).trim();
|
|
246
|
+
if (resultText)
|
|
247
|
+
console.log((isError ? pc.red : pc.green)(`assistant: ${resultText}`));
|
|
248
|
+
const errors = Array.isArray(parsed.errors) ? parsed.errors.map((value) => stringifyUnknown(value)).filter(Boolean) : [];
|
|
249
|
+
if (errors.length > 0)
|
|
250
|
+
console.log(pc.red(`errors: ${errors.join(" | ")}`));
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (type === "error") {
|
|
254
|
+
const message = asString(parsed.message) || stringifyUnknown(parsed.error ?? parsed.detail) || line;
|
|
255
|
+
console.log(pc.red(`error: ${message}`));
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// Compatibility with older stream-json event shapes.
|
|
259
|
+
if (type === "step_start") {
|
|
260
|
+
const sessionId = asString(parsed.sessionID);
|
|
261
|
+
console.log(pc.blue(`step started${sessionId ? ` (session: ${sessionId})` : ""}`));
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
if (type === "text") {
|
|
265
|
+
const part = asRecord(parsed.part);
|
|
266
|
+
const text = asString(part?.text);
|
|
267
|
+
if (text)
|
|
268
|
+
console.log(pc.green(`assistant: ${text}`));
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (type === "tool_use") {
|
|
272
|
+
const part = asRecord(parsed.part);
|
|
273
|
+
if (part) {
|
|
274
|
+
printLegacyToolEvent(part);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
console.log(pc.yellow("tool_use"));
|
|
278
|
+
}
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (type === "step_finish") {
|
|
282
|
+
const part = asRecord(parsed.part);
|
|
283
|
+
const tokens = asRecord(part?.tokens);
|
|
284
|
+
const cache = asRecord(tokens?.cache);
|
|
285
|
+
const reason = asString(part?.reason, "step_finish");
|
|
286
|
+
const input = asNumber(tokens?.input);
|
|
287
|
+
const output = asNumber(tokens?.output);
|
|
288
|
+
const cached = asNumber(cache?.read);
|
|
289
|
+
const cost = asNumber(part?.cost);
|
|
290
|
+
console.log(pc.blue(`step finished: reason=${reason}`));
|
|
291
|
+
console.log(pc.blue(`tokens: in=${input} out=${output} cached=${cached} cost=$${cost.toFixed(6)}`));
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
console.log(line);
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=format-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-event.js","sourceRoot":"","sources":["../../src/cli/format-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const type = "cursor";
|
|
2
|
+
export declare const label = "Cursor CLI (local)";
|
|
3
|
+
export declare const DEFAULT_CURSOR_LOCAL_MODEL = "auto";
|
|
4
|
+
export declare const models: {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}[];
|
|
8
|
+
export declare const agentConfigurationDoc = "# cursor agent configuration\n\nAdapter: cursor\n\nUse when:\n- You want Rudder to run Cursor Agent CLI locally as the agent runtime\n- You want Cursor chat session resume across heartbeats via --resume\n- You want structured stream output in run logs via --output-format stream-json\n\nDon't use when:\n- You need webhook-style external invocation (use openclaw_gateway or http)\n- You only need one-shot shell commands (use process)\n- Cursor Agent CLI is not installed on the machine\n\nCore fields:\n- cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)\n- instructionsFilePath (string, optional): absolute path to a markdown instructions file prepended to the run prompt\n- promptTemplate (string, optional): run prompt template\n- model (string, optional): Cursor model id (for example auto or gpt-5.3-codex)\n- mode (string, optional): Cursor execution mode passed as --mode (plan|ask). Leave unset for normal autonomous runs.\n- command (string, optional): defaults to \"agent\"\n- extraArgs (string[], optional): additional CLI args\n- env (object, optional): KEY=VALUE environment variables\n\nOperational fields:\n- timeoutSec (number, optional): run timeout in seconds\n- graceSec (number, optional): SIGTERM grace period in seconds\n\nNotes:\n- Runs are executed with: agent -p --output-format stream-json ...\n- Prompts are piped to Cursor via stdin.\n- Sessions are resumed with --resume when stored session cwd matches current cwd.\n- Rudder realizes only the bundled Rudder skills plus the skills explicitly enabled on the agent's Skills page.\n- Selected skills are linked into a Rudder-managed Cursor home for the run; unselected skills already present in the real user home do not load.\n- Rudder auto-adds --yolo unless one of --trust/--yolo/-f is already present in extraArgs.\n";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,WAAW,CAAC;AAC7B,eAAO,MAAM,KAAK,uBAAuB,CAAC;AAC1C,eAAO,MAAM,0BAA0B,SAAS,CAAC;AA4CjD,eAAO,MAAM,MAAM;;;GAA6D,CAAC;AAEjF,eAAO,MAAM,qBAAqB,s1DAmCjC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export const type = "cursor";
|
|
2
|
+
export const label = "Cursor CLI (local)";
|
|
3
|
+
export const DEFAULT_CURSOR_LOCAL_MODEL = "auto";
|
|
4
|
+
const CURSOR_FALLBACK_MODEL_IDS = [
|
|
5
|
+
"auto",
|
|
6
|
+
"composer-1.5",
|
|
7
|
+
"composer-1",
|
|
8
|
+
"gpt-5.3-codex-low",
|
|
9
|
+
"gpt-5.3-codex-low-fast",
|
|
10
|
+
"gpt-5.3-codex",
|
|
11
|
+
"gpt-5.3-codex-fast",
|
|
12
|
+
"gpt-5.3-codex-high",
|
|
13
|
+
"gpt-5.3-codex-high-fast",
|
|
14
|
+
"gpt-5.3-codex-xhigh",
|
|
15
|
+
"gpt-5.3-codex-xhigh-fast",
|
|
16
|
+
"gpt-5.3-codex-spark-preview",
|
|
17
|
+
"gpt-5.2",
|
|
18
|
+
"gpt-5.2-codex-low",
|
|
19
|
+
"gpt-5.2-codex-low-fast",
|
|
20
|
+
"gpt-5.2-codex",
|
|
21
|
+
"gpt-5.2-codex-fast",
|
|
22
|
+
"gpt-5.2-codex-high",
|
|
23
|
+
"gpt-5.2-codex-high-fast",
|
|
24
|
+
"gpt-5.2-codex-xhigh",
|
|
25
|
+
"gpt-5.2-codex-xhigh-fast",
|
|
26
|
+
"gpt-5.1-codex-max",
|
|
27
|
+
"gpt-5.1-codex-max-high",
|
|
28
|
+
"gpt-5.2-high",
|
|
29
|
+
"gpt-5.1-high",
|
|
30
|
+
"gpt-5.1-codex-mini",
|
|
31
|
+
"opus-4.6-thinking",
|
|
32
|
+
"opus-4.6",
|
|
33
|
+
"opus-4.5",
|
|
34
|
+
"opus-4.5-thinking",
|
|
35
|
+
"sonnet-4.6",
|
|
36
|
+
"sonnet-4.6-thinking",
|
|
37
|
+
"sonnet-4.5",
|
|
38
|
+
"sonnet-4.5-thinking",
|
|
39
|
+
"gemini-3.1-pro",
|
|
40
|
+
"gemini-3-pro",
|
|
41
|
+
"gemini-3-flash",
|
|
42
|
+
"grok",
|
|
43
|
+
"kimi-k2.5",
|
|
44
|
+
];
|
|
45
|
+
export const models = CURSOR_FALLBACK_MODEL_IDS.map((id) => ({ id, label: id }));
|
|
46
|
+
export const agentConfigurationDoc = `# cursor agent configuration
|
|
47
|
+
|
|
48
|
+
Adapter: cursor
|
|
49
|
+
|
|
50
|
+
Use when:
|
|
51
|
+
- You want Rudder to run Cursor Agent CLI locally as the agent runtime
|
|
52
|
+
- You want Cursor chat session resume across heartbeats via --resume
|
|
53
|
+
- You want structured stream output in run logs via --output-format stream-json
|
|
54
|
+
|
|
55
|
+
Don't use when:
|
|
56
|
+
- You need webhook-style external invocation (use openclaw_gateway or http)
|
|
57
|
+
- You only need one-shot shell commands (use process)
|
|
58
|
+
- Cursor Agent CLI is not installed on the machine
|
|
59
|
+
|
|
60
|
+
Core fields:
|
|
61
|
+
- cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)
|
|
62
|
+
- instructionsFilePath (string, optional): absolute path to a markdown instructions file prepended to the run prompt
|
|
63
|
+
- promptTemplate (string, optional): run prompt template
|
|
64
|
+
- model (string, optional): Cursor model id (for example auto or gpt-5.3-codex)
|
|
65
|
+
- mode (string, optional): Cursor execution mode passed as --mode (plan|ask). Leave unset for normal autonomous runs.
|
|
66
|
+
- command (string, optional): defaults to "agent"
|
|
67
|
+
- extraArgs (string[], optional): additional CLI args
|
|
68
|
+
- env (object, optional): KEY=VALUE environment variables
|
|
69
|
+
|
|
70
|
+
Operational fields:
|
|
71
|
+
- timeoutSec (number, optional): run timeout in seconds
|
|
72
|
+
- graceSec (number, optional): SIGTERM grace period in seconds
|
|
73
|
+
|
|
74
|
+
Notes:
|
|
75
|
+
- Runs are executed with: agent -p --output-format stream-json ...
|
|
76
|
+
- Prompts are piped to Cursor via stdin.
|
|
77
|
+
- Sessions are resumed with --resume when stored session cwd matches current cwd.
|
|
78
|
+
- Rudder realizes only the bundled Rudder skills plus the skills explicitly enabled on the agent's Skills page.
|
|
79
|
+
- Selected skills are linked into a Rudder-managed Cursor home for the run; unselected skills already present in the real user home do not load.
|
|
80
|
+
- Rudder auto-adds --yolo unless one of --trust/--yolo/-f is already present in extraArgs.
|
|
81
|
+
`;
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,MAAM,CAAC,MAAM,KAAK,GAAG,oBAAoB,CAAC;AAC1C,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAEjD,MAAM,yBAAyB,GAAG;IAChC,MAAM;IACN,cAAc;IACd,YAAY;IACZ,mBAAmB;IACnB,wBAAwB;IACxB,eAAe;IACf,oBAAoB;IACpB,oBAAoB;IACpB,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,6BAA6B;IAC7B,SAAS;IACT,mBAAmB;IACnB,wBAAwB;IACxB,eAAe;IACf,oBAAoB;IACpB,oBAAoB;IACpB,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,mBAAmB;IACnB,wBAAwB;IACxB,cAAc;IACd,cAAc;IACd,oBAAoB;IACpB,mBAAmB;IACnB,UAAU;IACV,UAAU;IACV,mBAAmB;IACnB,YAAY;IACZ,qBAAqB;IACrB,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,MAAM;IACN,WAAW;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAEjF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCpC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type AgentRuntimeExecutionContext, type AgentRuntimeExecutionResult } from "@rudderhq/agent-runtime-utils";
|
|
2
|
+
type EnsureCursorSkillsInjectedOptions = {
|
|
3
|
+
skillsDir?: string | null;
|
|
4
|
+
skillsEntries?: Array<{
|
|
5
|
+
key: string;
|
|
6
|
+
runtimeName: string;
|
|
7
|
+
source: string;
|
|
8
|
+
}>;
|
|
9
|
+
skillsHome?: string;
|
|
10
|
+
linkSkill?: (source: string, target: string) => Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
export declare function ensureCursorSkillsInjected(onLog: AgentRuntimeExecutionContext["onLog"], options?: EnsureCursorSkillsInjectedOptions): Promise<void>;
|
|
13
|
+
export declare function execute(ctx: AgentRuntimeExecutionContext): Promise<AgentRuntimeExecutionResult>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/server/execute.ts"],"names":[],"mappings":"AAIA,OAAO,EAA+B,KAAK,4BAA4B,EAAE,KAAK,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AA2KjJ,KAAK,iCAAiC,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D,CAAC;AAEF,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,4BAA4B,CAAC,OAAO,CAAC,EAC5C,OAAO,GAAE,iCAAsC,iBAoDhD;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAmbrG"}
|