@cursor/july 0.1.97 → 0.1.99
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 -1
- package/dist/bin/agent-serve.js +6 -7
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +16 -0
- package/dist/channels/origin/origin-channel.d.ts +2 -0
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +37 -4
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +76 -55
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +1 -1
- package/dist/channels/slack/live-delivery.d.ts +1 -1
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +4 -2
- package/dist/channels/slack/progress-delivery.d.ts +28 -0
- package/dist/channels/slack/progress-delivery.d.ts.map +1 -0
- package/dist/channels/slack/progress-delivery.js +115 -0
- package/dist/channels/slack/types.d.ts +9 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.B3rWNYE1.js → app.BplEAZ3S.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DpuI4i7Z.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.C1lhqJJR.js → VPLocalSearchBox.CHXyv4wP.js} +1 -1
- package/dist/docs/assets/chunks/{theme.B40_SXuv.js → theme.BTcsZmjQ.js} +2 -2
- package/dist/docs/assets/{reference_cli.md.RyZf5OTE.js → reference_cli.md.DfoeyvL0.js} +4 -4
- package/dist/docs/assets/{reference_cli.md.RyZf5OTE.lean.js → reference_cli.md.DfoeyvL0.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.5zOAbV86.js → reference_http-api.md.BEJx9XVj.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.B84gw9Ii.js → reference_tools.md.CvAHsdSp.js} +10 -2
- package/dist/docs/assets/{reference_tools.md.B84gw9Ii.lean.js → reference_tools.md.CvAHsdSp.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +4 -4
- package/dist/docs/deployment.html +4 -4
- package/dist/docs/design/runtime-abstraction.md +1757 -0
- package/dist/docs/evals.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +4 -4
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +4 -4
- 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 +4 -4
- 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 +4 -4
- package/dist/docs/llms-full.txt +1789 -7
- package/dist/docs/llms.txt +1 -0
- 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 +4 -4
- package/dist/docs/reference/cli.html +7 -7
- package/dist/docs/reference/cli.md +1 -7
- package/dist/docs/reference/connections.html +4 -4
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +6 -6
- package/dist/docs/reference/http-api.md +1 -0
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +4 -4
- 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 +14 -6
- package/dist/docs/reference/tools.md +25 -0
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +4 -4
- package/dist/docs/templates/code-wiki.html +4 -4
- package/dist/docs/templates/demo.html +4 -4
- package/dist/docs/templates/pr-autofixer.html +4 -4
- package/dist/docs/templates/security-help.html +4 -4
- package/dist/docs/templates/security-reviewer.html +4 -4
- package/dist/docs/templates/triage.html +4 -4
- package/dist/docs/troubleshooting.html +4 -4
- package/dist/files-backends/cursor-hosted.d.ts +3 -2
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +3 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/internal/as-of.d.ts +19 -0
- package/dist/internal/as-of.d.ts.map +1 -0
- package/dist/internal/as-of.js +82 -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 +100 -5
- package/dist/internal/cursor-event-relay.d.ts.map +1 -1
- package/dist/internal/cursor-event-relay.js +5 -6
- package/dist/internal/framework-file-storage.d.ts +10 -16
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +11 -40
- package/dist/internal/framework-storage-selection.d.ts +13 -11
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +37 -26
- package/dist/internal/hosted-admission-adapter.d.ts +28 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -0
- package/dist/internal/hosted-admission-adapter.js +7 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +6 -1
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +1 -1
- package/dist/internal/hosted-delivery.d.ts +15 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +47 -21
- package/dist/internal/hosted-execution-diag.d.ts +11 -0
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +39 -2
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +4 -1
- package/dist/internal/null-kv-storage.d.ts +48 -0
- package/dist/internal/null-kv-storage.d.ts.map +1 -0
- package/dist/internal/null-kv-storage.js +58 -0
- package/dist/internal/server.d.ts +3 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +82 -19
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +24 -4
- package/dist/internal/session-run-log.d.ts +120 -0
- package/dist/internal/session-run-log.d.ts.map +1 -0
- package/dist/internal/session-run-log.js +359 -0
- package/dist/internal/storage-coordinator.d.ts +6 -0
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +9 -1
- package/dist/internal/tool-policy.d.ts +20 -8
- package/dist/internal/tool-policy.d.ts.map +1 -1
- package/dist/internal/tool-policy.js +11 -0
- package/dist/playground/assets/index-D7rGZNjy.css +1 -0
- package/dist/playground/assets/index-jzNbJENa.js +69 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-protocol.d.ts +8 -0
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +8 -0
- package/dist/tools.d.ts +12 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/design/runtime-abstraction.md +1757 -0
- package/docs/reference/cli.md +1 -7
- package/docs/reference/http-api.md +1 -0
- package/docs/reference/tools.md +25 -0
- package/package.json +1 -1
- package/src/bin/agent-serve.ts +6 -7
- package/src/channels/github/github-channel.ts +17 -0
- package/src/channels/origin/origin-channel.ts +74 -10
- package/src/channels/slack/defaults.ts +91 -63
- package/src/channels/slack/dispatch.ts +2 -0
- package/src/channels/slack/live-delivery.ts +5 -3
- package/src/channels/slack/progress-delivery.ts +133 -0
- package/src/channels/slack/types.ts +9 -1
- package/src/files-backends/cursor-hosted.ts +3 -2
- package/src/index.ts +4 -0
- package/src/internal/as-of.ts +107 -0
- package/src/internal/cli-deploy.ts +128 -8
- package/src/internal/cursor-event-relay.ts +5 -6
- package/src/internal/framework-file-storage.ts +11 -45
- package/src/internal/framework-storage-selection.ts +41 -25
- package/src/internal/hosted-admission-adapter.ts +42 -0
- package/src/internal/hosted-delivery-protocol.ts +7 -2
- package/src/internal/hosted-delivery.ts +88 -36
- package/src/internal/hosted-execution-diag.ts +45 -0
- package/src/internal/http-channel.ts +8 -0
- package/src/internal/null-kv-storage.ts +74 -0
- package/src/internal/server.ts +100 -2
- package/src/internal/session-engine.ts +32 -1
- package/src/internal/session-run-log.ts +584 -0
- package/src/internal/storage-coordinator.ts +11 -1
- package/src/internal/tool-policy.ts +31 -9
- package/src/storage-protocol.ts +10 -0
- package/src/tools.ts +12 -2
- package/src/types.ts +25 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +0 -1
- package/dist/playground/assets/index-DrkI6y5O.js +0 -88
- package/dist/playground/assets/index-DzNGwm7q.css +0 -1
- /package/dist/docs/assets/{reference_http-api.md.5zOAbV86.lean.js → reference_http-api.md.BEJx9XVj.lean.js} +0 -0
|
@@ -8,13 +8,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { randomBytes } from "node:crypto";
|
|
11
|
-
import { dispatchGitHubWebhook, getGitHubChannelOptions, getGitHubDispatchOutcome, withPropagatingGitHubBackgroundErrors, } from "../channels/github/github-channel.js";
|
|
12
11
|
import { createDeferredChannelSession, DeferredChannelSessionError, } from "./deferred-channel-session.js";
|
|
12
|
+
import { getHostedAdmissionAdapter, } from "./hosted-admission-adapter.js";
|
|
13
13
|
import { HostedAdmissionLocalSendError, runDuringHostedAdmission, } from "./hosted-admission-context.js";
|
|
14
14
|
import { HOSTED_ADMISSION_PATH, HOSTED_DELIVERY_HEADER, HOSTED_DELIVERY_PROTOCOL_VERSION, HOSTED_EXECUTION_PATH, parseHostedAdmission, parseHostedExecution, } from "./hosted-delivery-protocol.js";
|
|
15
|
-
import { abortReasonFromTurnStatus, HOSTED_EXECUTION_DIAG_RUNNING_STATUS, hostedExecutionDiagId, writeHostedExecutionDiag, } from "./hosted-execution-diag.js";
|
|
15
|
+
import { abortReasonFromTurnStatus, HOSTED_EXECUTION_DIAG_RUNNING_STATUS, hostedErrorStackSnippet, hostedExecutionDiagId, writeHostedExecutionDiag, } from "./hosted-execution-diag.js";
|
|
16
16
|
import { recordHostedManagedAutomation } from "./hosted-managed-automation.js";
|
|
17
17
|
import { errorResponse, readJsonObject } from "./http-channel.js";
|
|
18
|
+
import { serializeSessionRunError, snapshotSessionRunLogs, } from "./session-run-log.js";
|
|
18
19
|
/**
|
|
19
20
|
* A second `send()` in one delivery is a deterministic authored bug — the
|
|
20
21
|
* wire protocol carries exactly one pending send per delivery — so it must
|
|
@@ -59,30 +60,35 @@ function nonRetryableRejection(error) {
|
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
62
|
-
* Run authored admission without creating a framework session.
|
|
63
|
+
* Run authored admission without creating a framework session. Authored
|
|
63
64
|
* `task` callbacks execute as sessionless work; the first `send` is captured
|
|
64
65
|
* and executed only after the control plane allocates `ses_…`. Capturing
|
|
65
66
|
* does not terminate the caller — `send` returns an inert deferred handle so
|
|
66
67
|
* a task body runs to completion before the admission response is computed.
|
|
68
|
+
*
|
|
69
|
+
* Dispatch is the adapter the mounted channel attached. Hosted delivery
|
|
70
|
+
* does not switch on `channelKind`.
|
|
67
71
|
*/
|
|
68
72
|
export function dispatchHostedAdmission(input) {
|
|
69
73
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
74
|
+
const adapter = getHostedAdmissionAdapter(input.definition);
|
|
75
|
+
if (adapter === undefined || adapter.kind !== input.delivery.channelKind) {
|
|
72
76
|
return {
|
|
73
77
|
response: Response.json({ ok: false, error: "channel_kind_mismatch" }, { status: 422 }),
|
|
74
78
|
};
|
|
75
79
|
}
|
|
76
80
|
// The admission window marker follows the async graph into task bodies so
|
|
77
81
|
// the engine can refuse local sends that would bypass the capture stub.
|
|
78
|
-
return runDuringHostedAdmission(() => runAdmission(input,
|
|
82
|
+
return runDuringHostedAdmission(() => runAdmission(input, adapter));
|
|
79
83
|
});
|
|
80
84
|
}
|
|
81
|
-
function runAdmission(input,
|
|
85
|
+
function runAdmission(input, adapter) {
|
|
82
86
|
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
+
var _a;
|
|
88
|
+
var _b;
|
|
83
89
|
const background = [];
|
|
84
90
|
let captured;
|
|
85
|
-
const
|
|
91
|
+
const capturingArgs = Object.assign(Object.assign({}, input.args), { send: (message_1, ...args_1) => __awaiter(this, [message_1, ...args_1], void 0, function* (message, options = {}) {
|
|
86
92
|
if (captured !== undefined) {
|
|
87
93
|
throw new HostedSendLimitExceeded();
|
|
88
94
|
}
|
|
@@ -90,12 +96,12 @@ function runAdmission(input, github) {
|
|
|
90
96
|
return createDeferredChannelSession();
|
|
91
97
|
}), waitUntil: (promise) => {
|
|
92
98
|
background.push(promise);
|
|
93
|
-
} })
|
|
99
|
+
} });
|
|
100
|
+
const args = (_b = (_a = adapter.prepareArgs) === null || _a === void 0 ? void 0 : _a.call(adapter, capturingArgs)) !== null && _b !== void 0 ? _b : capturingArgs;
|
|
94
101
|
let dispatched;
|
|
95
102
|
try {
|
|
96
|
-
dispatched = yield
|
|
97
|
-
|
|
98
|
-
eventName: input.delivery.eventType,
|
|
103
|
+
dispatched = yield adapter.dispatch({
|
|
104
|
+
eventType: input.delivery.eventType,
|
|
99
105
|
payload: input.delivery.payload,
|
|
100
106
|
deliveryId: input.delivery.deliveryId,
|
|
101
107
|
args,
|
|
@@ -140,7 +146,7 @@ function runAdmission(input, github) {
|
|
|
140
146
|
},
|
|
141
147
|
};
|
|
142
148
|
}
|
|
143
|
-
const outcome =
|
|
149
|
+
const outcome = adapter.getOutcome(dispatched);
|
|
144
150
|
if (outcome === undefined) {
|
|
145
151
|
return {
|
|
146
152
|
response: Response.json({ ok: false, error: "channel_outcome_missing" }, { status: 502 }),
|
|
@@ -252,17 +258,36 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
252
258
|
const startedAt = performance.now();
|
|
253
259
|
const executionId = hostedExecutionDiagId(execution.admissionToken);
|
|
254
260
|
const writeDiag = (fields) => __awaiter(this, void 0, void 0, function* () {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
261
|
+
var _a;
|
|
262
|
+
var _b;
|
|
263
|
+
const durationMs = Math.max(0, Math.round(performance.now() - startedAt));
|
|
258
264
|
const message = fields.message === undefined
|
|
259
265
|
? undefined
|
|
260
266
|
: boundedMessage(fields.message);
|
|
261
|
-
|
|
262
|
-
?
|
|
263
|
-
:
|
|
264
|
-
|
|
265
|
-
|
|
267
|
+
const stack = fields.error === undefined
|
|
268
|
+
? undefined
|
|
269
|
+
: hostedErrorStackSnippet(fields.error);
|
|
270
|
+
if (input.stateRoot !== undefined) {
|
|
271
|
+
yield writeHostedExecutionDiag(input.stateRoot, Object.assign(Object.assign(Object.assign(Object.assign({ v: 1, executionId, writtenAt: new Date().toISOString(), sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs }, (message === undefined ? {} : { message })), (stack === undefined || stack.length === 0 ? {} : { stack })), (message !== undefined && /abort/i.test(message)
|
|
272
|
+
? { signalAborted: true }
|
|
273
|
+
: {})), (fields.abortReason === undefined
|
|
274
|
+
? {}
|
|
275
|
+
: { abortReason: fields.abortReason })));
|
|
276
|
+
}
|
|
277
|
+
if (input.persistSessionRun === undefined) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const error = fields.error === undefined
|
|
281
|
+
? undefined
|
|
282
|
+
: serializeSessionRunError(fields.error);
|
|
283
|
+
try {
|
|
284
|
+
yield input.persistSessionRun(Object.assign(Object.assign(Object.assign(Object.assign({ executionId, writtenAt: new Date().toISOString(), sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs }, (fields.abortReason === undefined
|
|
285
|
+
? {}
|
|
286
|
+
: { abortReason: fields.abortReason })), (message === undefined ? {} : { message })), (error === undefined ? {} : { error })), { logs: snapshotSessionRunLogs((_b = (_a = input.snapshotLogs) === null || _a === void 0 ? void 0 : _a.call(input)) !== null && _b !== void 0 ? _b : []) }));
|
|
287
|
+
}
|
|
288
|
+
catch (_c) {
|
|
289
|
+
// Soft-fail: a store outage must not change the HTTP reply.
|
|
290
|
+
}
|
|
266
291
|
});
|
|
267
292
|
// Claim the file before the turn runs. The host reads it after its
|
|
268
293
|
// own POST returns, which for a 9-minute timeout is while this turn
|
|
@@ -313,6 +338,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
313
338
|
turnStatus: "error",
|
|
314
339
|
message: error instanceof Error ? error.message : String(error),
|
|
315
340
|
abortReason: "execute_throw",
|
|
341
|
+
error,
|
|
316
342
|
});
|
|
317
343
|
throw error;
|
|
318
344
|
}
|
|
@@ -31,12 +31,23 @@ export type HostedExecutionDiag = {
|
|
|
31
31
|
turnStatus: string;
|
|
32
32
|
durationMs: number;
|
|
33
33
|
message?: string;
|
|
34
|
+
/** First frames of a thrown Error; omitted on soft turn failures. */
|
|
35
|
+
stack?: string;
|
|
34
36
|
signalAborted?: boolean;
|
|
35
37
|
requestId?: string;
|
|
36
38
|
abortReason?: HostedExecutionDiagAbortReason;
|
|
37
39
|
};
|
|
38
40
|
/** Written before the turn starts so a stalled execution still has a record. */
|
|
39
41
|
export declare const HOSTED_EXECUTION_DIAG_RUNNING_STATUS = "running";
|
|
42
|
+
/** First line + frames; factory `last_error` is 1024 chars with a TAS prefix. */
|
|
43
|
+
export declare const HOSTED_ERROR_STACK_LINE_COUNT = 5;
|
|
44
|
+
export declare const HOSTED_ERROR_SNIPPET_MAX_CHARS = 700;
|
|
45
|
+
/**
|
|
46
|
+
* Bounded throw text for the hosted 500 body and the on-disk diag `stack`.
|
|
47
|
+
* Prefers `Error.stack` (message line + `at` frames) so `last_error` is not
|
|
48
|
+
* the generic "Internal server error." when the throw has a stack.
|
|
49
|
+
*/
|
|
50
|
+
export declare function hostedErrorStackSnippet(error: unknown): string;
|
|
40
51
|
export declare function hostedExecutionDiagPath(stateRoot: string): string;
|
|
41
52
|
export declare function abortReasonFromTurnStatus(status: string, message: string | undefined): HostedExecutionDiagAbortReason | undefined;
|
|
42
53
|
export declare function parseHostedExecutionDiag(raw: string): HostedExecutionDiag | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-execution-diag.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-diag.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2EAA2E;AAC3E,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,eAAe,CAAC;AAEpB;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACxC,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,8BAA8B,CAAC;CAC9C,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,oCAAoC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hosted-execution-diag.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-diag.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2EAA2E;AAC3E,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,eAAe,CAAC;AAEpB;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACxC,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,8BAA8B,CAAC;CAC9C,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,oCAAoC,YAAY,CAAC;AAmC9D,iFAAiF;AACjF,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAyB9D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,8BAA8B,GAAG,SAAS,CAU5C;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,GACV,mBAAmB,GAAG,SAAS,CA2EjC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -40,6 +40,7 @@ const DIAG_KEYS = new Set([
|
|
|
40
40
|
"turnStatus",
|
|
41
41
|
"durationMs",
|
|
42
42
|
"message",
|
|
43
|
+
"stack",
|
|
43
44
|
"signalAborted",
|
|
44
45
|
"requestId",
|
|
45
46
|
"abortReason",
|
|
@@ -57,6 +58,41 @@ function boundedOptionalString(value, max) {
|
|
|
57
58
|
: value
|
|
58
59
|
: undefined;
|
|
59
60
|
}
|
|
61
|
+
/** First line + frames; factory `last_error` is 1024 chars with a TAS prefix. */
|
|
62
|
+
export const HOSTED_ERROR_STACK_LINE_COUNT = 5;
|
|
63
|
+
export const HOSTED_ERROR_SNIPPET_MAX_CHARS = 700;
|
|
64
|
+
/**
|
|
65
|
+
* Bounded throw text for the hosted 500 body and the on-disk diag `stack`.
|
|
66
|
+
* Prefers `Error.stack` (message line + `at` frames) so `last_error` is not
|
|
67
|
+
* the generic "Internal server error." when the throw has a stack.
|
|
68
|
+
*/
|
|
69
|
+
export function hostedErrorStackSnippet(error) {
|
|
70
|
+
var _a;
|
|
71
|
+
if (error instanceof Error) {
|
|
72
|
+
const stack = (_a = error.stack) === null || _a === void 0 ? void 0 : _a.trim();
|
|
73
|
+
if (stack !== undefined && stack.length > 0) {
|
|
74
|
+
const lines = stack
|
|
75
|
+
.split("\n")
|
|
76
|
+
.map((line) => line.trimEnd())
|
|
77
|
+
.filter((line) => line.trim().length > 0)
|
|
78
|
+
.slice(0, HOSTED_ERROR_STACK_LINE_COUNT);
|
|
79
|
+
const text = lines.join("\n");
|
|
80
|
+
return text.length > HOSTED_ERROR_SNIPPET_MAX_CHARS
|
|
81
|
+
? `${text.slice(0, HOSTED_ERROR_SNIPPET_MAX_CHARS)}…`
|
|
82
|
+
: text;
|
|
83
|
+
}
|
|
84
|
+
return error.message.length > HOSTED_ERROR_SNIPPET_MAX_CHARS
|
|
85
|
+
? `${error.message.slice(0, HOSTED_ERROR_SNIPPET_MAX_CHARS)}…`
|
|
86
|
+
: error.message;
|
|
87
|
+
}
|
|
88
|
+
const text = String(error);
|
|
89
|
+
if (text.length === 0) {
|
|
90
|
+
return "";
|
|
91
|
+
}
|
|
92
|
+
return text.length > HOSTED_ERROR_SNIPPET_MAX_CHARS
|
|
93
|
+
? `${text.slice(0, HOSTED_ERROR_SNIPPET_MAX_CHARS)}…`
|
|
94
|
+
: text;
|
|
95
|
+
}
|
|
60
96
|
export function hostedExecutionDiagPath(stateRoot) {
|
|
61
97
|
return join(stateRoot, HOSTED_EXECUTION_DIAG_FILENAME);
|
|
62
98
|
}
|
|
@@ -110,6 +146,7 @@ export function parseHostedExecutionDiag(raw) {
|
|
|
110
146
|
return undefined;
|
|
111
147
|
}
|
|
112
148
|
const message = boundedOptionalString(body.message, 1024);
|
|
149
|
+
const stack = boundedOptionalString(body.stack, HOSTED_ERROR_SNIPPET_MAX_CHARS);
|
|
113
150
|
const requestId = boundedOptionalString(body.requestId, 128);
|
|
114
151
|
const abortReason = body.abortReason === undefined
|
|
115
152
|
? undefined
|
|
@@ -124,7 +161,7 @@ export function parseHostedExecutionDiag(raw) {
|
|
|
124
161
|
typeof body.signalAborted !== "boolean") {
|
|
125
162
|
return undefined;
|
|
126
163
|
}
|
|
127
|
-
return Object.assign(Object.assign(Object.assign(Object.assign({ v: HOSTED_EXECUTION_DIAG_VERSION, executionId: body.executionId, writtenAt: body.writtenAt, sessionPublicId: body.sessionPublicId, sessionId: body.sessionId, turnStatus: body.turnStatus, durationMs: body.durationMs }, (message === undefined ? {} : { message })), (body.signalAborted === true ? { signalAborted: true } : {})), (requestId === undefined ? {} : { requestId })), (abortReason === undefined ? {} : { abortReason }));
|
|
164
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: HOSTED_EXECUTION_DIAG_VERSION, executionId: body.executionId, writtenAt: body.writtenAt, sessionPublicId: body.sessionPublicId, sessionId: body.sessionId, turnStatus: body.turnStatus, durationMs: body.durationMs }, (message === undefined ? {} : { message })), (stack === undefined ? {} : { stack })), (body.signalAborted === true ? { signalAborted: true } : {})), (requestId === undefined ? {} : { requestId })), (abortReason === undefined ? {} : { abortReason }));
|
|
128
165
|
}
|
|
129
166
|
/**
|
|
130
167
|
* Overwrite the per-execution diag file. Soft-fail: a write error must not
|
|
@@ -138,7 +175,7 @@ export function writeHostedExecutionDiag(stateRoot, diag) {
|
|
|
138
175
|
yield mkdir(stateRoot, { recursive: true });
|
|
139
176
|
const serialized = JSON.stringify(diag);
|
|
140
177
|
const body = serialized.length > HOSTED_EXECUTION_DIAG_MAX_BYTES
|
|
141
|
-
? JSON.stringify(Object.assign(Object.assign({}, diag), { message: boundedOptionalString(diag.message, 256) }))
|
|
178
|
+
? JSON.stringify(Object.assign(Object.assign({}, diag), { stack: undefined, message: boundedOptionalString(diag.message, 256) }))
|
|
142
179
|
: serialized;
|
|
143
180
|
yield writeFile(tmp, body, "utf8");
|
|
144
181
|
yield rename(tmp, path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-channel.d.ts","sourceRoot":"","sources":["../../src/internal/http-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAQ7B,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"http-channel.d.ts","sourceRoot":"","sources":["../../src/internal/http-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAQ7B,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,WAAW,EAAE,CA2fhB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GACA,QAAQ,GAAG,SAAS,CAiBtB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,GAC/D,QAAQ,CAQV;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,QAAQ,CAEV;AAoGD,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAc9C"}
|
|
@@ -48,12 +48,15 @@ export function buildHttpChannelRoutes(args) {
|
|
|
48
48
|
if (body === undefined || typeof body.message !== "string") {
|
|
49
49
|
return errorResponse(400, "invalid_request", "Expected a JSON body with a string `message`.");
|
|
50
50
|
}
|
|
51
|
+
if (body.asOf !== undefined && typeof body.asOf !== "string") {
|
|
52
|
+
return errorResponse(400, "invalid_request", "`asOf` must be an ISO-8601 instant with a timezone when provided.");
|
|
53
|
+
}
|
|
51
54
|
const message = yield transformMessage(body.message, ctx.auth);
|
|
52
55
|
const workspaceFiles = readWorkspaceFiles(body.workspaceFiles);
|
|
53
56
|
// Per-session cloud attach (create only). Eval harness uses this to pin
|
|
54
57
|
// fixture repos without putting them on the agent's default cloud.repos.
|
|
55
58
|
const cloud = readCloudOptions(body.cloud);
|
|
56
|
-
const session = yield engine.send(HTTP_CHANNEL_ID, message, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ auth: ctx.auth }, (typeof body.title === "string" ? { title: body.title } : {})), (body.purpose === "eval" ? { purpose: "eval" } : {})), (body.dryRun === true ? { dryRun: true } : {})), (workspaceFiles === undefined ? {} : { workspaceFiles })), (cloud === undefined ? {} : { cloud })));
|
|
59
|
+
const session = yield engine.send(HTTP_CHANNEL_ID, message, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ auth: ctx.auth }, (typeof body.title === "string" ? { title: body.title } : {})), (body.purpose === "eval" ? { purpose: "eval" } : {})), (body.dryRun === true ? { dryRun: true } : {})), { asOf: body.asOf }), (workspaceFiles === undefined ? {} : { workspaceFiles })), (cloud === undefined ? {} : { cloud })));
|
|
57
60
|
return jsonResponse({
|
|
58
61
|
ok: true,
|
|
59
62
|
sessionId: session.id,
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The inert KV half of hosted v2 storage.
|
|
3
|
+
*
|
|
4
|
+
* The control-plane KV proxy (`/internal/agent-serve/storage/*`) authorizes a
|
|
5
|
+
* request by mapping the caller's pod service account to a row in the v1
|
|
6
|
+
* deployment table. Architecture v2 registers its deployments in the factory
|
|
7
|
+
* control plane instead, so every proxy call from a v2 pod answers
|
|
8
|
+
* `403 No Agent Serve deployment is bound to this service account`. The
|
|
9
|
+
* lazy-restore path deliberately propagates read failures (a store outage must
|
|
10
|
+
* not read as "unknown continuation token"), so those 403s fail follow-up
|
|
11
|
+
* deliveries outright.
|
|
12
|
+
*
|
|
13
|
+
* This backend stands in for the proxy until it can resolve v2 deployments:
|
|
14
|
+
* writes are dropped, reads are definitive misses, and lists are empty. It is
|
|
15
|
+
* paired with the framework file store (see framework-file-storage.ts), which
|
|
16
|
+
* authorizes by store source id rather than by deployment row and therefore
|
|
17
|
+
* still carries session records, event transcripts, and the continuation
|
|
18
|
+
* index — the state sessions are restored from.
|
|
19
|
+
*
|
|
20
|
+
* Author KV is the one thing that must not silently accept writes here, since
|
|
21
|
+
* handlers read their own writes back. {@link AUTHOR_KV_UNSUPPORTED} marks the
|
|
22
|
+
* definition so `ctx.host.kv` falls back to `--state-root` disk instead, the
|
|
23
|
+
* same fallback a deployment with no configured backend gets.
|
|
24
|
+
*/
|
|
25
|
+
import type { StorageConfig } from "../storage.js";
|
|
26
|
+
/**
|
|
27
|
+
* Marker stamped on a definition whose KV core cannot serve `ctx.host.kv`,
|
|
28
|
+
* even though `get` is present for framework session state. Explicit
|
|
29
|
+
* `unique symbol` annotation required for `--isolatedDeclarations` (TS9010).
|
|
30
|
+
*/
|
|
31
|
+
export declare const AUTHOR_KV_UNSUPPORTED: unique symbol;
|
|
32
|
+
/** True when `value` was built from {@link nullKvStorage}. */
|
|
33
|
+
export declare function isAuthorKvUnsupported(value: unknown): boolean;
|
|
34
|
+
type NullKvStorageMethods = Required<Pick<StorageConfig, "put" | "get" | "delete" | "list">> & {
|
|
35
|
+
readonly [AUTHOR_KV_UNSUPPORTED]: true;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A KV core that stores nothing. `get` resolving `undefined` is honest here
|
|
39
|
+
* rather than dangerous: nothing was ever written, so a miss cannot shadow a
|
|
40
|
+
* session that exists elsewhere.
|
|
41
|
+
*
|
|
42
|
+
* No `cas` group and no `listNewest`: conditional writes over a store that
|
|
43
|
+
* forgets would report a lock acquired, and write-time ordering means nothing
|
|
44
|
+
* without writes.
|
|
45
|
+
*/
|
|
46
|
+
export declare function nullKvStorage(): NullKvStorageMethods;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=null-kv-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null-kv-storage.d.ts","sourceRoot":"","sources":["../../src/internal/null-kv-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAE1C,CAAC;AAEF,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM7D;AAED,KAAK,oBAAoB,GAAG,QAAQ,CAClC,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CACvD,GAAG;IACF,QAAQ,CAAC,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAC;CACxC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,aAAa,IAAI,oBAAoB,CAYpD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The inert KV half of hosted v2 storage.
|
|
3
|
+
*
|
|
4
|
+
* The control-plane KV proxy (`/internal/agent-serve/storage/*`) authorizes a
|
|
5
|
+
* request by mapping the caller's pod service account to a row in the v1
|
|
6
|
+
* deployment table. Architecture v2 registers its deployments in the factory
|
|
7
|
+
* control plane instead, so every proxy call from a v2 pod answers
|
|
8
|
+
* `403 No Agent Serve deployment is bound to this service account`. The
|
|
9
|
+
* lazy-restore path deliberately propagates read failures (a store outage must
|
|
10
|
+
* not read as "unknown continuation token"), so those 403s fail follow-up
|
|
11
|
+
* deliveries outright.
|
|
12
|
+
*
|
|
13
|
+
* This backend stands in for the proxy until it can resolve v2 deployments:
|
|
14
|
+
* writes are dropped, reads are definitive misses, and lists are empty. It is
|
|
15
|
+
* paired with the framework file store (see framework-file-storage.ts), which
|
|
16
|
+
* authorizes by store source id rather than by deployment row and therefore
|
|
17
|
+
* still carries session records, event transcripts, and the continuation
|
|
18
|
+
* index — the state sessions are restored from.
|
|
19
|
+
*
|
|
20
|
+
* Author KV is the one thing that must not silently accept writes here, since
|
|
21
|
+
* handlers read their own writes back. {@link AUTHOR_KV_UNSUPPORTED} marks the
|
|
22
|
+
* definition so `ctx.host.kv` falls back to `--state-root` disk instead, the
|
|
23
|
+
* same fallback a deployment with no configured backend gets.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Marker stamped on a definition whose KV core cannot serve `ctx.host.kv`,
|
|
27
|
+
* even though `get` is present for framework session state. Explicit
|
|
28
|
+
* `unique symbol` annotation required for `--isolatedDeclarations` (TS9010).
|
|
29
|
+
*/
|
|
30
|
+
export const AUTHOR_KV_UNSUPPORTED = Symbol.for("@cursor/july.storage.author-kv-unsupported");
|
|
31
|
+
/** True when `value` was built from {@link nullKvStorage}. */
|
|
32
|
+
export function isAuthorKvUnsupported(value) {
|
|
33
|
+
return (typeof value === "object" &&
|
|
34
|
+
value !== null &&
|
|
35
|
+
value[AUTHOR_KV_UNSUPPORTED] === true);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A KV core that stores nothing. `get` resolving `undefined` is honest here
|
|
39
|
+
* rather than dangerous: nothing was ever written, so a miss cannot shadow a
|
|
40
|
+
* session that exists elsewhere.
|
|
41
|
+
*
|
|
42
|
+
* No `cas` group and no `listNewest`: conditional writes over a store that
|
|
43
|
+
* forgets would report a lock acquired, and write-time ordering means nothing
|
|
44
|
+
* without writes.
|
|
45
|
+
*/
|
|
46
|
+
export function nullKvStorage() {
|
|
47
|
+
return {
|
|
48
|
+
[AUTHOR_KV_UNSUPPORTED]: true,
|
|
49
|
+
put() { },
|
|
50
|
+
get() {
|
|
51
|
+
return undefined;
|
|
52
|
+
},
|
|
53
|
+
delete() { },
|
|
54
|
+
list() {
|
|
55
|
+
return [];
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import type { AgentProject, AgentServeHandle, ServeOptions } from "../types.js";
|
|
8
8
|
import type { McpOauthSecretsTarget } from "./mcp-oauth-persist.js";
|
|
9
9
|
import { type AgentRunner } from "./sdk-runner.js";
|
|
10
|
+
import { selectSessionRunLogStore } from "./session-run-log.js";
|
|
10
11
|
/** One agent to serve: its slug (empty for single-agent mode) and project. */
|
|
11
12
|
export interface AgentMount {
|
|
12
13
|
slug: string;
|
|
@@ -18,6 +19,8 @@ export interface StartServerInternalOptions {
|
|
|
18
19
|
runner?: AgentRunner;
|
|
19
20
|
/** Test seam: bind the `--store` secrets client for on-demand MCP OAuth. */
|
|
20
21
|
mcpOauthSecrets?: McpOauthSecretsTarget;
|
|
22
|
+
/** Test seam: persist hosted-execution run logs without a live store. */
|
|
23
|
+
sessionRunLog?: ReturnType<typeof selectSessionRunLogStore>;
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
23
26
|
* Start an HTTP server hosting one or more agents. A single agent with an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoCH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoCH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;AAuFrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAyCpE,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAWpE,OAAO,EAEL,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAiB9B,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAmCD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,yEAAyE;IACzE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CA2+B3B"}
|