@cursor/july 0.1.46 → 0.1.48
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/dist/bin/agent-serve.js +30 -35
- package/dist/docs/404.html +1 -1
- package/dist/docs/ab.html +2 -2
- package/dist/docs/assets/{app.C2NFTb-h.js → app.BC1P20xI.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DV5SAHnQ.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.o1_FJGip.js → VPLocalSearchBox.C_900xn2.js} +1 -1
- package/dist/docs/assets/chunks/{theme.BcGduE7g.js → theme.CT135Jhh.js} +2 -2
- package/dist/docs/building-with-agents.html +2 -2
- package/dist/docs/concepts.html +2 -2
- package/dist/docs/deployment.html +2 -2
- package/dist/docs/evals.html +2 -2
- package/dist/docs/example-agents/approval-buddy.html +2 -2
- package/dist/docs/example-agents/benny.html +2 -2
- package/dist/docs/example-agents/bugbot.html +2 -2
- package/dist/docs/example-agents/codebase-wiki.html +2 -2
- package/dist/docs/example-agents/codeowners-review.html +2 -2
- package/dist/docs/example-agents/concierge.html +2 -2
- package/dist/docs/example-agents/fsd.html +2 -2
- package/dist/docs/example-agents/index.html +2 -2
- package/dist/docs/example-agents/knowledge-base.html +2 -2
- package/dist/docs/example-agents/oncall.html +2 -2
- package/dist/docs/example-agents/security-reviewer.html +2 -2
- package/dist/docs/example-agents/slack-agent.html +2 -2
- package/dist/docs/example-agents/weather-agent.html +2 -2
- package/dist/docs/guides/agent-to-agent.html +2 -2
- package/dist/docs/guides/cloud-runtime.html +2 -2
- package/dist/docs/guides/github.html +2 -2
- package/dist/docs/guides/human-in-the-loop.html +2 -2
- package/dist/docs/guides/mcp-oauth.html +2 -2
- package/dist/docs/guides/opentelemetry.html +2 -2
- package/dist/docs/guides/slack.html +2 -2
- package/dist/docs/guides/webhooks.html +2 -2
- package/dist/docs/hillclimbing.html +2 -2
- package/dist/docs/index.html +2 -2
- package/dist/docs/quickstart.html +2 -2
- package/dist/docs/reference/agent-config.html +2 -2
- package/dist/docs/reference/artifacts.html +2 -2
- package/dist/docs/reference/channels.html +2 -2
- package/dist/docs/reference/cli.html +2 -2
- package/dist/docs/reference/connections.html +2 -2
- package/dist/docs/reference/hooks.html +2 -2
- package/dist/docs/reference/http-api.html +2 -2
- package/dist/docs/reference/instructions.html +2 -2
- package/dist/docs/reference/playground.html +2 -2
- package/dist/docs/reference/project-layout.html +2 -2
- package/dist/docs/reference/prompt.html +2 -2
- package/dist/docs/reference/schedules.html +2 -2
- package/dist/docs/reference/sessions.html +2 -2
- package/dist/docs/reference/skills.html +2 -2
- package/dist/docs/reference/subagents.html +2 -2
- package/dist/docs/reference/tools.html +2 -2
- package/dist/docs/scaffolding-agents.html +2 -2
- package/dist/docs/storage.html +2 -2
- package/dist/docs/templates/triage.html +2 -2
- package/dist/docs/troubleshooting.html +2 -2
- package/dist/internal/authored-loaders.d.ts +19 -0
- package/dist/internal/authored-loaders.d.ts.map +1 -1
- package/dist/internal/authored-loaders.js +39 -0
- package/dist/internal/cli-deploy.d.ts +2 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +97 -1
- package/dist/internal/deploy-client.d.ts +7 -2
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +12 -0
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +2 -8
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +3 -8
- package/dist/internal/logs-client.d.ts +1 -1
- package/dist/internal/logs-client.d.ts.map +1 -1
- package/dist/internal/logs-client.js +3 -0
- package/dist/internal/sdk-runner.d.ts +21 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +34 -1
- package/dist/internal/serve-restart.d.ts +42 -0
- package/dist/internal/serve-restart.d.ts.map +1 -0
- package/dist/internal/serve-restart.js +85 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +7 -2
- package/dist/playground/assets/index-CiCmH6R-.css +1 -0
- package/dist/playground/assets/{index-6wW6SAc4.js → index-DEVTyeOu.js} +46 -46
- package/dist/playground/index.html +2 -2
- package/package.json +1 -1
- package/src/bin/agent-serve.ts +39 -38
- package/src/internal/authored-loaders.ts +45 -0
- package/src/internal/cli-deploy.ts +103 -1
- package/src/internal/deploy-client.ts +19 -1
- package/src/internal/discovery.ts +5 -12
- package/src/internal/eval-runner.ts +3 -12
- package/src/internal/logs-client.ts +4 -0
- package/src/internal/sdk-runner.ts +46 -1
- package/src/internal/serve-restart.ts +120 -0
- package/src/internal/server.ts +11 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.B-FxvuoI.js +0 -1
- package/dist/playground/assets/index-CSRYDAFw.css +0 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enter-to-restart for `serve` / `dev` on a TTY.
|
|
3
|
+
*
|
|
4
|
+
* In-process close+re-serve cannot reload every authored change: Node ESM
|
|
5
|
+
* caches transitive imports, and module-level state (tsx, singletons) survives.
|
|
6
|
+
* The parent process therefore supervises a worker and respawns it when the
|
|
7
|
+
* worker exits with {@link ENTER_RESTART_EXIT_CODE}.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const ENTER_RESTART_EXIT_CODE = 75;
|
|
11
|
+
|
|
12
|
+
export const SERVE_RESTART_WORKER_ENV = "AGENT_SERVE_RESTART_WORKER";
|
|
13
|
+
|
|
14
|
+
export interface ServeRestartProcess {
|
|
15
|
+
execPath: string;
|
|
16
|
+
execArgv: readonly string[];
|
|
17
|
+
argv: readonly string[];
|
|
18
|
+
env: NodeJS.ProcessEnv;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ServeRestartSpawnPlan {
|
|
22
|
+
command: string;
|
|
23
|
+
args: string[];
|
|
24
|
+
env: NodeJS.ProcessEnv;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface ServeRestartWorkerChild {
|
|
28
|
+
once(
|
|
29
|
+
event: "exit",
|
|
30
|
+
listener: (code: number | null, signal: NodeJS.Signals | null) => void
|
|
31
|
+
): void;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function isServeRestartWorker(
|
|
35
|
+
env: NodeJS.ProcessEnv = process.env
|
|
36
|
+
): boolean {
|
|
37
|
+
return env[SERVE_RESTART_WORKER_ENV] === "1";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function serveRestartSpawnPlan(
|
|
41
|
+
proc: ServeRestartProcess
|
|
42
|
+
): ServeRestartSpawnPlan {
|
|
43
|
+
return {
|
|
44
|
+
command: proc.execPath,
|
|
45
|
+
args: [...proc.execArgv, ...proc.argv.slice(1)],
|
|
46
|
+
env: { ...proc.env, [SERVE_RESTART_WORKER_ENV]: "1" },
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function shouldRespawnServeWorker(
|
|
51
|
+
code: number | null,
|
|
52
|
+
signal: NodeJS.Signals | null
|
|
53
|
+
): boolean {
|
|
54
|
+
return signal === null && code === ENTER_RESTART_EXIT_CODE;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Run the TTY Enter-to-restart supervisor: spawn this CLI as a worker, and
|
|
59
|
+
* respawn whenever the worker exits asking for a restart. Other exits
|
|
60
|
+
* (Ctrl-C drain, crash, bind failure) propagate to the caller.
|
|
61
|
+
*/
|
|
62
|
+
export async function runEnterRestartSupervisor(options: {
|
|
63
|
+
spawn: (
|
|
64
|
+
command: string,
|
|
65
|
+
args: string[],
|
|
66
|
+
spawnOptions: { stdio: "inherit"; env: NodeJS.ProcessEnv }
|
|
67
|
+
) => ServeRestartWorkerChild;
|
|
68
|
+
proc?: ServeRestartProcess;
|
|
69
|
+
onRestart?: () => void;
|
|
70
|
+
installSignalGuards?: (handler: () => void) => () => void;
|
|
71
|
+
}): Promise<number> {
|
|
72
|
+
const proc = options.proc ?? {
|
|
73
|
+
execPath: process.execPath,
|
|
74
|
+
execArgv: process.execArgv,
|
|
75
|
+
argv: process.argv,
|
|
76
|
+
env: process.env,
|
|
77
|
+
};
|
|
78
|
+
const plan = serveRestartSpawnPlan(proc);
|
|
79
|
+
const uninstallSignals = (
|
|
80
|
+
options.installSignalGuards ?? installDefaultSignalGuards
|
|
81
|
+
)(() => undefined);
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
for (;;) {
|
|
85
|
+
const child = options.spawn(plan.command, plan.args, {
|
|
86
|
+
stdio: "inherit",
|
|
87
|
+
env: plan.env,
|
|
88
|
+
});
|
|
89
|
+
const { code, signal } = await waitForExit(child);
|
|
90
|
+
if (!shouldRespawnServeWorker(code, signal)) {
|
|
91
|
+
if (signal !== null) {
|
|
92
|
+
return 1;
|
|
93
|
+
}
|
|
94
|
+
return code ?? 1;
|
|
95
|
+
}
|
|
96
|
+
options.onRestart?.();
|
|
97
|
+
}
|
|
98
|
+
} finally {
|
|
99
|
+
uninstallSignals();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function waitForExit(
|
|
104
|
+
child: ServeRestartWorkerChild
|
|
105
|
+
): Promise<{ code: number | null; signal: NodeJS.Signals | null }> {
|
|
106
|
+
return new Promise((resolve) => {
|
|
107
|
+
child.once("exit", (code, signal) => {
|
|
108
|
+
resolve({ code, signal });
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function installDefaultSignalGuards(handler: () => void): () => void {
|
|
114
|
+
process.on("SIGINT", handler);
|
|
115
|
+
process.on("SIGTERM", handler);
|
|
116
|
+
return () => {
|
|
117
|
+
process.off("SIGINT", handler);
|
|
118
|
+
process.off("SIGTERM", handler);
|
|
119
|
+
};
|
|
120
|
+
}
|
package/src/internal/server.ts
CHANGED
|
@@ -147,7 +147,11 @@ import {
|
|
|
147
147
|
} from "./resolved-connections.js";
|
|
148
148
|
import { Router } from "./router.js";
|
|
149
149
|
import { ScheduleRunner, UnknownScheduleError } from "./schedule-runner.js";
|
|
150
|
-
import {
|
|
150
|
+
import {
|
|
151
|
+
type AgentRunner,
|
|
152
|
+
CursorSdkRunner,
|
|
153
|
+
resolveServeWorkspaceScanCacheTtlMs,
|
|
154
|
+
} from "./sdk-runner.js";
|
|
151
155
|
import {
|
|
152
156
|
SessionAuthError,
|
|
153
157
|
SessionBusyError,
|
|
@@ -364,11 +368,17 @@ export async function startServer(
|
|
|
364
368
|
"[agent-sdk] warning: --allow-anonymous admits every HTTP caller as the same principal; use only on a trusted network (e.g. Tailscale) and prefer --bearer-token for shared hosts"
|
|
365
369
|
);
|
|
366
370
|
}
|
|
371
|
+
const workspaceScanCacheTtlMs = resolveServeWorkspaceScanCacheTtlMs({
|
|
372
|
+
dev,
|
|
373
|
+
});
|
|
367
374
|
const runner =
|
|
368
375
|
options.runner ??
|
|
369
376
|
new CursorSdkRunner({
|
|
370
377
|
...(accountKey === undefined ? {} : { apiKey: accountKey.apiKey }),
|
|
371
378
|
logger,
|
|
379
|
+
...(workspaceScanCacheTtlMs === undefined
|
|
380
|
+
? {}
|
|
381
|
+
: { workspaceScanCacheTtlMs }),
|
|
372
382
|
});
|
|
373
383
|
|
|
374
384
|
const router = new Router();
|