@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.
Files changed (179) hide show
  1. package/AGENTS.md +1 -1
  2. package/dist/bin/agent-serve.js +6 -7
  3. package/dist/channels/github/github-channel.d.ts.map +1 -1
  4. package/dist/channels/github/github-channel.js +16 -0
  5. package/dist/channels/origin/origin-channel.d.ts +2 -0
  6. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  7. package/dist/channels/origin/origin-channel.js +37 -4
  8. package/dist/channels/slack/defaults.d.ts.map +1 -1
  9. package/dist/channels/slack/defaults.js +76 -55
  10. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  11. package/dist/channels/slack/dispatch.js +1 -1
  12. package/dist/channels/slack/live-delivery.d.ts +1 -1
  13. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  14. package/dist/channels/slack/live-delivery.js +4 -2
  15. package/dist/channels/slack/progress-delivery.d.ts +28 -0
  16. package/dist/channels/slack/progress-delivery.d.ts.map +1 -0
  17. package/dist/channels/slack/progress-delivery.js +115 -0
  18. package/dist/channels/slack/types.d.ts +9 -1
  19. package/dist/channels/slack/types.d.ts.map +1 -1
  20. package/dist/docs/404.html +2 -2
  21. package/dist/docs/ab.html +4 -4
  22. package/dist/docs/assets/{app.B3rWNYE1.js → app.BplEAZ3S.js} +1 -1
  23. package/dist/docs/assets/chunks/@localSearchIndexroot.DpuI4i7Z.js +1 -0
  24. package/dist/docs/assets/chunks/{VPLocalSearchBox.C1lhqJJR.js → VPLocalSearchBox.CHXyv4wP.js} +1 -1
  25. package/dist/docs/assets/chunks/{theme.B40_SXuv.js → theme.BTcsZmjQ.js} +2 -2
  26. package/dist/docs/assets/{reference_cli.md.RyZf5OTE.js → reference_cli.md.DfoeyvL0.js} +4 -4
  27. package/dist/docs/assets/{reference_cli.md.RyZf5OTE.lean.js → reference_cli.md.DfoeyvL0.lean.js} +1 -1
  28. package/dist/docs/assets/{reference_http-api.md.5zOAbV86.js → reference_http-api.md.BEJx9XVj.js} +1 -1
  29. package/dist/docs/assets/{reference_tools.md.B84gw9Ii.js → reference_tools.md.CvAHsdSp.js} +10 -2
  30. package/dist/docs/assets/{reference_tools.md.B84gw9Ii.lean.js → reference_tools.md.CvAHsdSp.lean.js} +1 -1
  31. package/dist/docs/building-with-agents.html +4 -4
  32. package/dist/docs/concepts.html +4 -4
  33. package/dist/docs/deployment.html +4 -4
  34. package/dist/docs/design/runtime-abstraction.md +1757 -0
  35. package/dist/docs/evals.html +4 -4
  36. package/dist/docs/guides/agent-to-agent.html +4 -4
  37. package/dist/docs/guides/cloud-runtime.html +4 -4
  38. package/dist/docs/guides/convert-automation.html +4 -4
  39. package/dist/docs/guides/github.html +4 -4
  40. package/dist/docs/guides/human-in-the-loop.html +4 -4
  41. package/dist/docs/guides/mcp-oauth.html +4 -4
  42. package/dist/docs/guides/opentelemetry.html +4 -4
  43. package/dist/docs/guides/slack.html +4 -4
  44. package/dist/docs/guides/webhooks.html +4 -4
  45. package/dist/docs/hashmap.json +1 -1
  46. package/dist/docs/hillclimbing.html +4 -4
  47. package/dist/docs/index.html +4 -4
  48. package/dist/docs/llms-full.txt +1789 -7
  49. package/dist/docs/llms.txt +1 -0
  50. package/dist/docs/quickstart.html +4 -4
  51. package/dist/docs/reference/agent-config.html +4 -4
  52. package/dist/docs/reference/artifacts.html +4 -4
  53. package/dist/docs/reference/channels.html +4 -4
  54. package/dist/docs/reference/cli.html +7 -7
  55. package/dist/docs/reference/cli.md +1 -7
  56. package/dist/docs/reference/connections.html +4 -4
  57. package/dist/docs/reference/hooks.html +4 -4
  58. package/dist/docs/reference/http-api.html +6 -6
  59. package/dist/docs/reference/http-api.md +1 -0
  60. package/dist/docs/reference/instructions.html +4 -4
  61. package/dist/docs/reference/playground.html +4 -4
  62. package/dist/docs/reference/project-layout.html +4 -4
  63. package/dist/docs/reference/prompt.html +4 -4
  64. package/dist/docs/reference/schedules.html +4 -4
  65. package/dist/docs/reference/sessions.html +4 -4
  66. package/dist/docs/reference/skills.html +4 -4
  67. package/dist/docs/reference/subagents.html +4 -4
  68. package/dist/docs/reference/tools.html +14 -6
  69. package/dist/docs/reference/tools.md +25 -0
  70. package/dist/docs/scaffolding-agents.html +4 -4
  71. package/dist/docs/storage.html +4 -4
  72. package/dist/docs/templates/agentic-owners.html +4 -4
  73. package/dist/docs/templates/agents-md.html +4 -4
  74. package/dist/docs/templates/code-wiki.html +4 -4
  75. package/dist/docs/templates/demo.html +4 -4
  76. package/dist/docs/templates/pr-autofixer.html +4 -4
  77. package/dist/docs/templates/security-help.html +4 -4
  78. package/dist/docs/templates/security-reviewer.html +4 -4
  79. package/dist/docs/templates/triage.html +4 -4
  80. package/dist/docs/troubleshooting.html +4 -4
  81. package/dist/files-backends/cursor-hosted.d.ts +3 -2
  82. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  83. package/dist/files-backends/cursor-hosted.js +3 -2
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +1 -0
  87. package/dist/internal/as-of.d.ts +19 -0
  88. package/dist/internal/as-of.d.ts.map +1 -0
  89. package/dist/internal/as-of.js +82 -0
  90. package/dist/internal/cli-deploy.d.ts +2 -1
  91. package/dist/internal/cli-deploy.d.ts.map +1 -1
  92. package/dist/internal/cli-deploy.js +100 -5
  93. package/dist/internal/cursor-event-relay.d.ts.map +1 -1
  94. package/dist/internal/cursor-event-relay.js +5 -6
  95. package/dist/internal/framework-file-storage.d.ts +10 -16
  96. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  97. package/dist/internal/framework-file-storage.js +11 -40
  98. package/dist/internal/framework-storage-selection.d.ts +13 -11
  99. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  100. package/dist/internal/framework-storage-selection.js +37 -26
  101. package/dist/internal/hosted-admission-adapter.d.ts +28 -0
  102. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -0
  103. package/dist/internal/hosted-admission-adapter.js +7 -0
  104. package/dist/internal/hosted-delivery-protocol.d.ts +6 -1
  105. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  106. package/dist/internal/hosted-delivery-protocol.js +1 -1
  107. package/dist/internal/hosted-delivery.d.ts +15 -1
  108. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  109. package/dist/internal/hosted-delivery.js +47 -21
  110. package/dist/internal/hosted-execution-diag.d.ts +11 -0
  111. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  112. package/dist/internal/hosted-execution-diag.js +39 -2
  113. package/dist/internal/http-channel.d.ts.map +1 -1
  114. package/dist/internal/http-channel.js +4 -1
  115. package/dist/internal/null-kv-storage.d.ts +48 -0
  116. package/dist/internal/null-kv-storage.d.ts.map +1 -0
  117. package/dist/internal/null-kv-storage.js +58 -0
  118. package/dist/internal/server.d.ts +3 -0
  119. package/dist/internal/server.d.ts.map +1 -1
  120. package/dist/internal/server.js +82 -19
  121. package/dist/internal/session-engine.d.ts.map +1 -1
  122. package/dist/internal/session-engine.js +24 -4
  123. package/dist/internal/session-run-log.d.ts +120 -0
  124. package/dist/internal/session-run-log.d.ts.map +1 -0
  125. package/dist/internal/session-run-log.js +359 -0
  126. package/dist/internal/storage-coordinator.d.ts +6 -0
  127. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  128. package/dist/internal/storage-coordinator.js +9 -1
  129. package/dist/internal/tool-policy.d.ts +20 -8
  130. package/dist/internal/tool-policy.d.ts.map +1 -1
  131. package/dist/internal/tool-policy.js +11 -0
  132. package/dist/playground/assets/index-D7rGZNjy.css +1 -0
  133. package/dist/playground/assets/index-jzNbJENa.js +69 -0
  134. package/dist/playground/index.html +2 -2
  135. package/dist/storage-protocol.d.ts +8 -0
  136. package/dist/storage-protocol.d.ts.map +1 -1
  137. package/dist/storage-protocol.js +8 -0
  138. package/dist/tools.d.ts +12 -2
  139. package/dist/tools.d.ts.map +1 -1
  140. package/dist/types.d.ts +25 -0
  141. package/dist/types.d.ts.map +1 -1
  142. package/docs/design/runtime-abstraction.md +1757 -0
  143. package/docs/reference/cli.md +1 -7
  144. package/docs/reference/http-api.md +1 -0
  145. package/docs/reference/tools.md +25 -0
  146. package/package.json +1 -1
  147. package/src/bin/agent-serve.ts +6 -7
  148. package/src/channels/github/github-channel.ts +17 -0
  149. package/src/channels/origin/origin-channel.ts +74 -10
  150. package/src/channels/slack/defaults.ts +91 -63
  151. package/src/channels/slack/dispatch.ts +2 -0
  152. package/src/channels/slack/live-delivery.ts +5 -3
  153. package/src/channels/slack/progress-delivery.ts +133 -0
  154. package/src/channels/slack/types.ts +9 -1
  155. package/src/files-backends/cursor-hosted.ts +3 -2
  156. package/src/index.ts +4 -0
  157. package/src/internal/as-of.ts +107 -0
  158. package/src/internal/cli-deploy.ts +128 -8
  159. package/src/internal/cursor-event-relay.ts +5 -6
  160. package/src/internal/framework-file-storage.ts +11 -45
  161. package/src/internal/framework-storage-selection.ts +41 -25
  162. package/src/internal/hosted-admission-adapter.ts +42 -0
  163. package/src/internal/hosted-delivery-protocol.ts +7 -2
  164. package/src/internal/hosted-delivery.ts +88 -36
  165. package/src/internal/hosted-execution-diag.ts +45 -0
  166. package/src/internal/http-channel.ts +8 -0
  167. package/src/internal/null-kv-storage.ts +74 -0
  168. package/src/internal/server.ts +100 -2
  169. package/src/internal/session-engine.ts +32 -1
  170. package/src/internal/session-run-log.ts +584 -0
  171. package/src/internal/storage-coordinator.ts +11 -1
  172. package/src/internal/tool-policy.ts +31 -9
  173. package/src/storage-protocol.ts +10 -0
  174. package/src/tools.ts +12 -2
  175. package/src/types.ts +25 -0
  176. package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +0 -1
  177. package/dist/playground/assets/index-DrkI6y5O.js +0 -88
  178. package/dist/playground/assets/index-DzNGwm7q.css +0 -1
  179. /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. V1 GitHub
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 github = getGitHubChannelOptions(input.definition);
71
- if (github === undefined) {
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, github));
82
+ return runDuringHostedAdmission(() => runAdmission(input, adapter));
79
83
  });
80
84
  }
81
- function runAdmission(input, github) {
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 args = withPropagatingGitHubBackgroundErrors(Object.assign(Object.assign({}, input.args), { send: (message_1, ...args_1) => __awaiter(this, [message_1, ...args_1], void 0, function* (message, options = {}) {
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 dispatchGitHubWebhook({
97
- options: github,
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 = getGitHubDispatchOutcome(dispatched);
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
- if (input.stateRoot === undefined) {
256
- return;
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
- yield writeHostedExecutionDiag(input.stateRoot, Object.assign(Object.assign(Object.assign({ v: 1, executionId, writtenAt: new Date().toISOString(), sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: Math.max(0, Math.round(performance.now() - startedAt)) }, (message === undefined ? {} : { message })), (message !== undefined && /abort/i.test(message)
262
- ? { signalAborted: true }
263
- : {})), (fields.abortReason === undefined
264
- ? {}
265
- : { abortReason: fields.abortReason })));
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;AAkC9D,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,CAsEjC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAkBf"}
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,CAmfhB;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"}
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;AAqFrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAyCpE,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AA2BpE,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;CACzC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAw9B3B"}
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"}