@cursor/july 0.1.42 → 0.1.43
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 +1 -0
- package/dist/bin/agent-serve.js +3 -1
- package/dist/channels/github/api.d.ts +5 -0
- package/dist/channels/github/api.d.ts.map +1 -1
- package/dist/channels/github/api.js +18 -0
- package/dist/channels/github/defaults.d.ts +4 -5
- package/dist/channels/github/defaults.d.ts.map +1 -1
- package/dist/channels/github/defaults.js +27 -1
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +28 -5
- package/dist/channels/github/index.d.ts +1 -0
- package/dist/channels/github/index.d.ts.map +1 -1
- package/dist/channels/github/index.js +1 -0
- package/dist/channels/github/progress.d.ts +54 -0
- package/dist/channels/github/progress.d.ts.map +1 -0
- package/dist/channels/github/progress.js +168 -0
- package/dist/channels/github/state.d.ts +2 -0
- package/dist/channels/github/state.d.ts.map +1 -1
- package/dist/channels/github/state.js +1 -1
- package/dist/channels/github/types.d.ts +8 -4
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.d.ts +4 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +4 -0
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.C4-Gwi7g.js → app.DsTLo2j1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BZx4pmZL.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DDoLm843.js → VPLocalSearchBox.DoVfutcV.js} +1 -1
- package/dist/docs/assets/chunks/{theme.SbjGIiM0.js → theme.DtuVtKkc.js} +2 -2
- package/dist/docs/assets/{deployment.md.BHVjVqRa.js → deployment.md.Cdp4rTE4.js} +1 -1
- package/dist/docs/assets/{guides_github.md.R2QlpR75.js → guides_github.md.DSg0j9qj.js} +29 -3
- package/dist/docs/assets/{guides_github.md.R2QlpR75.lean.js → guides_github.md.DSg0j9qj.lean.js} +1 -1
- package/dist/docs/assets/guides_opentelemetry.md.DmyUwC5R.js +20 -0
- package/dist/docs/assets/guides_opentelemetry.md.DmyUwC5R.lean.js +1 -0
- package/dist/docs/assets/{index.md.BKpbkCa6.js → index.md.CMc5FP7E.js} +2 -1
- package/dist/docs/assets/{reference_channels.md.BIabFUAI.js → reference_channels.md.MN8iDy8V.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.B40QAG6m.js → reference_hooks.md.4cbRRIIu.js} +2 -2
- package/dist/docs/assets/{reference_hooks.md.B40QAG6m.lean.js → reference_hooks.md.4cbRRIIu.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md._XdeMahr.js → reference_project-layout.md.D3MdHM2z.js} +2 -1
- package/dist/docs/assets/templates_triage.md.CConZt1z.js +11 -0
- package/dist/docs/assets/templates_triage.md.CConZt1z.lean.js +1 -0
- package/dist/docs/building-with-agents.html +5 -5
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/deployment.html +6 -6
- package/dist/docs/evals.html +4 -4
- package/dist/docs/example-agents/approval-buddy.html +4 -4
- package/dist/docs/example-agents/benny.html +4 -4
- package/dist/docs/example-agents/bugbot.html +4 -4
- package/dist/docs/example-agents/codebase-wiki.html +4 -4
- package/dist/docs/example-agents/codeowners-review.html +4 -4
- package/dist/docs/example-agents/concierge.html +4 -4
- package/dist/docs/example-agents/fsd.html +4 -4
- package/dist/docs/example-agents/index.html +5 -5
- package/dist/docs/example-agents/knowledge-base.html +4 -4
- package/dist/docs/example-agents/oncall.html +4 -4
- package/dist/docs/example-agents/security-reviewer.html +4 -4
- package/dist/docs/example-agents/slack-agent.html +4 -4
- package/dist/docs/example-agents/weather-agent.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +5 -5
- package/dist/docs/guides/github.html +33 -7
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +4 -4
- package/dist/docs/guides/opentelemetry.html +44 -0
- package/dist/docs/guides/slack.html +4 -4
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +7 -6
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +4 -4
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +6 -6
- package/dist/docs/reference/cli.html +4 -4
- package/dist/docs/reference/connections.html +4 -4
- package/dist/docs/reference/hooks.html +6 -6
- package/dist/docs/reference/http-api.html +4 -4
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +7 -6
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +4 -4
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +4 -4
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/triage.html +35 -0
- package/dist/docs/troubleshooting.html +4 -4
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/internal/cli-ax.d.ts +1 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +18 -3
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +36 -4
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +1 -0
- package/dist/internal/init-project.d.ts +24 -0
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +126 -7
- package/dist/internal/otel/attrs.d.ts +7 -0
- package/dist/internal/otel/attrs.d.ts.map +1 -0
- package/dist/internal/otel/attrs.js +13 -0
- package/dist/internal/otel/collector.d.ts +16 -0
- package/dist/internal/otel/collector.d.ts.map +1 -0
- package/dist/internal/otel/collector.js +564 -0
- package/dist/internal/otel/config.d.ts +42 -0
- package/dist/internal/otel/config.d.ts.map +1 -0
- package/dist/internal/otel/config.js +236 -0
- package/dist/internal/otel/http.d.ts +11 -0
- package/dist/internal/otel/http.d.ts.map +1 -0
- package/dist/internal/otel/http.js +97 -0
- package/dist/internal/otel/runtime.d.ts +21 -0
- package/dist/internal/otel/runtime.d.ts.map +1 -0
- package/dist/internal/otel/runtime.js +188 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +25 -1
- package/dist/internal/session-engine.d.ts +10 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +35 -2
- package/dist/memory.d.ts +4 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +4 -0
- package/dist/otel.d.ts +88 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +64 -0
- package/dist/playground/assets/{index-B3HBneZZ.js → index-D-DIYQzw.js} +31 -31
- package/dist/playground/assets/index-DQTH622f.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +22 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +3 -0
- package/docs/deployment.md +2 -1
- package/docs/guides/github.md +79 -6
- package/docs/guides/opentelemetry.md +184 -0
- package/docs/reference/channels.md +3 -1
- package/docs/reference/hooks.md +21 -4
- package/docs/reference/project-layout.md +2 -0
- package/docs/templates/triage.md +147 -0
- package/package.json +23 -1
- package/skills/create-agent/SKILL.md +2 -2
- package/skills/framework-map/SKILL.md +2 -0
- package/skills/otel/SKILL.md +80 -0
- package/src/bin/agent-serve.ts +3 -1
- package/src/channels/github/api.ts +22 -0
- package/src/channels/github/defaults.ts +27 -6
- package/src/channels/github/github-channel.ts +27 -1
- package/src/channels/github/index.ts +1 -0
- package/src/channels/github/progress.ts +243 -0
- package/src/channels/github/state.ts +3 -0
- package/src/channels/github/types.ts +8 -4
- package/src/channels/slack/slack-channel.ts +4 -0
- package/src/index.ts +6 -0
- package/src/internal/cli-ax.ts +19 -1
- package/src/internal/discovery.ts +59 -4
- package/src/internal/distribution.ts +1 -0
- package/src/internal/init-project.ts +150 -7
- package/src/internal/otel/attrs.ts +18 -0
- package/src/internal/otel/collector.ts +796 -0
- package/src/internal/otel/config.ts +307 -0
- package/src/internal/otel/http.ts +126 -0
- package/src/internal/otel/runtime.ts +271 -0
- package/src/internal/server.ts +38 -1
- package/src/internal/session-engine.ts +51 -0
- package/src/memory.ts +4 -0
- package/src/otel.ts +155 -0
- package/src/types.ts +20 -1
- package/templates/triage/README.md +48 -0
- package/templates/triage/agent/agent.ts +14 -0
- package/templates/triage/agent/channels/intake.ts +20 -0
- package/templates/triage/agent/channels/slack.ts +3 -0
- package/templates/triage/agent/hooks/memory.ts +3 -0
- package/templates/triage/agent/instructions.md +27 -0
- package/templates/triage/agent/skills/triage-rubric.md +43 -0
- package/templates/triage/agent/tools/record_triage.ts +23 -0
- package/templates/triage/evals/evals.config.ts +5 -0
- package/templates/triage/evals/triage.eval.ts +43 -0
- package/templates/triage/package.json +18 -0
- package/templates/triage/tsconfig.json +12 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.BlU3A8EB.js +0 -1
- package/dist/playground/assets/index-Bqk9nplh.css +0 -1
- /package/dist/docs/assets/{deployment.md.BHVjVqRa.lean.js → deployment.md.Cdp4rTE4.lean.js} +0 -0
- /package/dist/docs/assets/{index.md.BKpbkCa6.lean.js → index.md.CMc5FP7E.lean.js} +0 -0
- /package/dist/docs/assets/{reference_channels.md.BIabFUAI.lean.js → reference_channels.md.MN8iDy8V.lean.js} +0 -0
- /package/dist/docs/assets/{reference_project-layout.md._XdeMahr.lean.js → reference_project-layout.md.D3MdHM2z.lean.js} +0 -0
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { spawn } from "node:child_process";
|
|
6
|
-
import { existsSync } from "node:fs";
|
|
7
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
6
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
7
|
+
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
8
8
|
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
9
9
|
import type { ModelSetting } from "../types.js";
|
|
10
10
|
import {
|
|
11
11
|
CLI_COMMAND_NAME,
|
|
12
12
|
PACKAGE_NAME,
|
|
13
|
+
packageRootDir,
|
|
13
14
|
packageVersion,
|
|
14
15
|
} from "./distribution.js";
|
|
15
16
|
import {
|
|
@@ -25,6 +26,7 @@ export interface InitProjectOptions {
|
|
|
25
26
|
name?: string;
|
|
26
27
|
/** Model id override written into agent.ts. */
|
|
27
28
|
model?: string;
|
|
29
|
+
templateDir?: string;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
export type InitFileAction = "create" | "exist";
|
|
@@ -44,6 +46,99 @@ export interface InitProjectResult {
|
|
|
44
46
|
skipped: string[];
|
|
45
47
|
}
|
|
46
48
|
|
|
49
|
+
export function availableTemplates(): string[] {
|
|
50
|
+
const templatesDir = join(packageRootDir(), "templates");
|
|
51
|
+
try {
|
|
52
|
+
return readdirSync(templatesDir, { withFileTypes: true })
|
|
53
|
+
.filter((entry) => entry.isDirectory())
|
|
54
|
+
.map((entry) => entry.name)
|
|
55
|
+
.sort();
|
|
56
|
+
} catch (error) {
|
|
57
|
+
if (hasErrorCode(error, "ENOENT")) {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export type TemplateResolution =
|
|
65
|
+
| { ok: true; name: string; dir: string }
|
|
66
|
+
| { ok: false; message: string };
|
|
67
|
+
|
|
68
|
+
export function resolveTemplate(name: string): TemplateResolution {
|
|
69
|
+
if (!/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
70
|
+
return {
|
|
71
|
+
ok: false,
|
|
72
|
+
message: "template name must match /^[a-z][a-z0-9-]*$/",
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const available = availableTemplates();
|
|
76
|
+
if (!available.includes(name)) {
|
|
77
|
+
const detail =
|
|
78
|
+
available.length === 0
|
|
79
|
+
? "no templates ship with this build"
|
|
80
|
+
: `available: ${available.join(", ")}`;
|
|
81
|
+
return {
|
|
82
|
+
ok: false,
|
|
83
|
+
message: `unknown template "${name}" (${detail})`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
ok: true,
|
|
88
|
+
name,
|
|
89
|
+
dir: join(packageRootDir(), "templates", name),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export type InitTargetCheck = { ok: true } | { ok: false; message: string };
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Re-init must keep the mode the project was scaffolded with: template
|
|
97
|
+
* scaffolds stamp `cursorAgentTemplate` into package.json, and a mismatch
|
|
98
|
+
* here would silently mix default-scaffold files into a template project
|
|
99
|
+
* (or the reverse).
|
|
100
|
+
*/
|
|
101
|
+
export function checkInitTarget(
|
|
102
|
+
rootDir: string,
|
|
103
|
+
template: string | undefined
|
|
104
|
+
): InitTargetCheck {
|
|
105
|
+
const pkgPath = join(rootDir, "package.json");
|
|
106
|
+
if (!existsSync(pkgPath)) {
|
|
107
|
+
return { ok: true };
|
|
108
|
+
}
|
|
109
|
+
let marker: string | undefined;
|
|
110
|
+
try {
|
|
111
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8")) as {
|
|
112
|
+
cursorAgentTemplate?: unknown;
|
|
113
|
+
};
|
|
114
|
+
marker =
|
|
115
|
+
typeof pkg.cursorAgentTemplate === "string"
|
|
116
|
+
? pkg.cursorAgentTemplate
|
|
117
|
+
: undefined;
|
|
118
|
+
} catch {
|
|
119
|
+
marker = undefined;
|
|
120
|
+
}
|
|
121
|
+
if (marker === template) {
|
|
122
|
+
return { ok: true };
|
|
123
|
+
}
|
|
124
|
+
if (template === undefined) {
|
|
125
|
+
return {
|
|
126
|
+
ok: false,
|
|
127
|
+
message: `${rootDir} was scaffolded from the "${marker}" template; re-run with --template ${marker}`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (marker === undefined) {
|
|
131
|
+
return {
|
|
132
|
+
ok: false,
|
|
133
|
+
message: `${rootDir} already has a package.json without template provenance; re-run init without --template, or scaffold into a fresh directory`,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
ok: false,
|
|
138
|
+
message: `${rootDir} was scaffolded from the "${marker}" template, not "${template}"`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
47
142
|
const DEFAULT_MODEL: ModelSetting = {
|
|
48
143
|
id: "grok-4.5",
|
|
49
144
|
params: [
|
|
@@ -73,13 +168,15 @@ export async function initProject(
|
|
|
73
168
|
options: InitProjectOptions
|
|
74
169
|
): Promise<InitProjectResult> {
|
|
75
170
|
const rootDir = resolve(options.dir);
|
|
76
|
-
const
|
|
171
|
+
const projectName = basename(rootDir);
|
|
172
|
+
const name = options.name ?? projectName;
|
|
77
173
|
const model = formatModelLiteral(options.model ?? DEFAULT_MODEL);
|
|
78
|
-
const agentDir = join(rootDir, "agent");
|
|
79
|
-
await mkdir(agentDir, { recursive: true });
|
|
80
174
|
|
|
81
175
|
const files: InitFileEntry[] = [];
|
|
82
|
-
const write = async (
|
|
176
|
+
const write = async (
|
|
177
|
+
rel: string,
|
|
178
|
+
contents: string | Uint8Array
|
|
179
|
+
): Promise<void> => {
|
|
83
180
|
const abs = join(rootDir, rel);
|
|
84
181
|
await mkdir(dirname(abs), { recursive: true });
|
|
85
182
|
try {
|
|
@@ -95,6 +192,47 @@ export async function initProject(
|
|
|
95
192
|
}
|
|
96
193
|
};
|
|
97
194
|
|
|
195
|
+
if (options.templateDir !== undefined) {
|
|
196
|
+
const templateDir = options.templateDir;
|
|
197
|
+
const entries = await readdir(templateDir, {
|
|
198
|
+
recursive: true,
|
|
199
|
+
withFileTypes: true,
|
|
200
|
+
});
|
|
201
|
+
const relativePaths = entries
|
|
202
|
+
.filter((entry) => entry.isFile())
|
|
203
|
+
.map((entry) => relative(templateDir, join(entry.parentPath, entry.name)))
|
|
204
|
+
.sort();
|
|
205
|
+
for (const rel of relativePaths) {
|
|
206
|
+
const source = join(templateDir, rel);
|
|
207
|
+
if (rel === "package.json") {
|
|
208
|
+
const packageJson: {
|
|
209
|
+
name: string;
|
|
210
|
+
dependencies: Record<string, string>;
|
|
211
|
+
[key: string]: unknown;
|
|
212
|
+
} = JSON.parse(await readFile(source, "utf8"));
|
|
213
|
+
packageJson.name = projectName;
|
|
214
|
+
packageJson.dependencies[PACKAGE_NAME] = `^${packageVersion()}`;
|
|
215
|
+
packageJson.cursorAgentTemplate = basename(templateDir);
|
|
216
|
+
await write(rel, `${JSON.stringify(packageJson, null, 2)}\n`);
|
|
217
|
+
} else {
|
|
218
|
+
await write(rel, await readFile(source));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
rootDir,
|
|
223
|
+
files,
|
|
224
|
+
created: files
|
|
225
|
+
.filter((entry) => entry.action === "create")
|
|
226
|
+
.map((entry) => entry.path),
|
|
227
|
+
skipped: files
|
|
228
|
+
.filter((entry) => entry.action === "exist")
|
|
229
|
+
.map((entry) => entry.path),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const agentDir = join(rootDir, "agent");
|
|
234
|
+
await mkdir(agentDir, { recursive: true });
|
|
235
|
+
|
|
98
236
|
await write(
|
|
99
237
|
"package.json",
|
|
100
238
|
`${JSON.stringify(
|
|
@@ -209,11 +347,15 @@ export default memoryHook();
|
|
|
209
347
|
}
|
|
210
348
|
|
|
211
349
|
export function isEexist(error: unknown): boolean {
|
|
350
|
+
return hasErrorCode(error, "EEXIST");
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
function hasErrorCode(error: unknown, code: string): boolean {
|
|
212
354
|
return (
|
|
213
355
|
error !== null &&
|
|
214
356
|
typeof error === "object" &&
|
|
215
357
|
"code" in error &&
|
|
216
|
-
|
|
358
|
+
error.code === code
|
|
217
359
|
);
|
|
218
360
|
}
|
|
219
361
|
|
|
@@ -598,6 +740,7 @@ export function printInitGuide(): void {
|
|
|
598
740
|
|
|
599
741
|
Scaffold a project, then open the playground:
|
|
600
742
|
npx ${PACKAGE_NAME} init ./my-agent # installs deps + puts agent-sdk on PATH
|
|
743
|
+
npx ${PACKAGE_NAME} init ./my-triage --template triage # start from a template (agent-sdk templates: triage)
|
|
601
744
|
cd ./my-agent && ${CLI_COMMAND_NAME} dev
|
|
602
745
|
|
|
603
746
|
Recommended loop once the project exists (from the project directory):
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build OTel attribute maps without conditional spreads. `undefined` values
|
|
3
|
+
* are dropped (the OTel API rejects them).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export type AttrValue = string | number | boolean;
|
|
7
|
+
|
|
8
|
+
export function attrs(
|
|
9
|
+
input: Record<string, AttrValue | undefined>
|
|
10
|
+
): Record<string, AttrValue> {
|
|
11
|
+
const out: Record<string, AttrValue> = {};
|
|
12
|
+
for (const [key, value] of Object.entries(input)) {
|
|
13
|
+
if (value !== undefined) {
|
|
14
|
+
out[key] = value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return out;
|
|
18
|
+
}
|