deepline 0.3.128 → 0.3.129

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 (128) hide show
  1. package/dist/bundling-sources/sdk/src/client.ts +34 -9
  2. package/dist/bundling-sources/sdk/src/http.ts +22 -0
  3. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  4. package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +22 -0
  5. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +265 -2
  6. package/dist/bundling-sources/shared_libs/play-runtime/bounded-batch-function.ts +682 -0
  7. package/dist/bundling-sources/shared_libs/play-runtime/child-execution-strategy.ts +21 -5
  8. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +5390 -1732
  9. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +107 -1
  10. package/dist/bundling-sources/shared_libs/play-runtime/deployment/commands/roll-execution-relay.ts +7 -0
  11. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-machines.ts +229 -7
  12. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-registry.ts +25 -4
  13. package/dist/bundling-sources/shared_libs/play-runtime/deployment/runtime-gateway-capacity.ts +71 -0
  14. package/dist/bundling-sources/shared_libs/play-runtime/deployment/runtime-gateway-drain.ts +1 -1
  15. package/dist/bundling-sources/shared_libs/play-runtime/deployment/runtime-topology.ts +4 -1
  16. package/dist/bundling-sources/shared_libs/play-runtime/durable-receipt-execution.ts +694 -28
  17. package/dist/bundling-sources/shared_libs/play-runtime/egress-bandwidth-probe.ts +167 -0
  18. package/dist/bundling-sources/shared_libs/play-runtime/execute-server-timing.ts +103 -0
  19. package/dist/bundling-sources/shared_libs/play-runtime/execution-gateway-receipt-output-reference.ts +34 -0
  20. package/dist/bundling-sources/shared_libs/play-runtime/execution-gateway-response-size.ts +27 -0
  21. package/dist/bundling-sources/shared_libs/play-runtime/gateway-postgres-admission.ts +66 -1
  22. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +425 -71
  23. package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +210 -32
  24. package/dist/bundling-sources/shared_libs/play-runtime/governor/in-memory-rate-state-backend.ts +27 -13
  25. package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +19 -6
  26. package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +61 -2
  27. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/contracts.ts +33 -1
  28. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/job.ts +42 -1
  29. package/dist/bundling-sources/shared_libs/play-runtime/launch-source-policy.ts +11 -11
  30. package/dist/bundling-sources/shared_libs/play-runtime/ledger-safe-payload.ts +49 -16
  31. package/dist/bundling-sources/shared_libs/play-runtime/map-memory-limits.ts +1653 -98
  32. package/dist/bundling-sources/shared_libs/play-runtime/memory-ledger.ts +807 -0
  33. package/dist/bundling-sources/shared_libs/play-runtime/memory-pressure-signal.ts +138 -0
  34. package/dist/bundling-sources/shared_libs/play-runtime/output-size-limits.ts +85 -3
  35. package/dist/bundling-sources/shared_libs/play-runtime/persistence-latch.ts +60 -2
  36. package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +46 -1
  37. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/contracts.ts +2 -0
  38. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/job.ts +1 -0
  39. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/ports.ts +1 -0
  40. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/postgres-adapter.ts +1 -0
  41. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-semantics.ts +70 -27
  42. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +56 -0
  43. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/adaptive-provider-capacity-controller.ts +192 -0
  44. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/epoch-aimd-rate-controller.ts +194 -0
  45. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/fixture-capacity-simulator.ts +220 -0
  46. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/gradient2-concurrency-controller.ts +214 -0
  47. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-capacity-policy.ts +43 -0
  48. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-concurrency-policy.ts +30 -0
  49. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-rate-policy.ts +95 -0
  50. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-throttle-classifier.ts +40 -0
  51. package/dist/bundling-sources/shared_libs/play-runtime/resource-governor.ts +1535 -11
  52. package/dist/bundling-sources/shared_libs/play-runtime/run-failure.ts +49 -2
  53. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger.ts +6 -1
  54. package/dist/bundling-sources/shared_libs/play-runtime/run-log-buffer.ts +55 -0
  55. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/egress-probe.ts +221 -0
  56. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +339 -29
  57. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-deadline.ts +28 -1
  58. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-progress-push.ts +192 -165
  59. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +6 -0
  60. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts +90 -5
  61. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-runtime-watchdog.ts +281 -6
  62. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +27 -1
  63. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/local-process.ts +19 -0
  64. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/modal.ts +108 -0
  65. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +40 -0
  66. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/types.ts +11 -5
  67. package/dist/bundling-sources/shared_libs/play-runtime/runtime-actions.ts +30 -0
  68. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api-compression.ts +276 -0
  69. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +723 -115
  70. package/dist/bundling-sources/shared_libs/play-runtime/runtime-capacity-policy.ts +98 -2
  71. package/dist/bundling-sources/shared_libs/play-runtime/runtime-contract.ts +3 -2
  72. package/dist/bundling-sources/shared_libs/play-runtime/runtime-environment.ts +41 -4
  73. package/dist/bundling-sources/shared_libs/play-runtime/runtime-flow.ts +448 -0
  74. package/dist/bundling-sources/shared_libs/play-runtime/runtime-map-row-feed.ts +215 -0
  75. package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +11 -0
  76. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-store-adapter.ts +161 -14
  77. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-value.ts +184 -0
  78. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-writer.ts +607 -121
  79. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sandbox-placement-policy.ts +4 -0
  80. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sheet-row-writer.ts +21 -0
  81. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +15 -2
  82. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +71 -14
  83. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-deploy-task.ts +2 -2
  84. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +288 -119
  85. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-shared.ts +8 -6
  86. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +28 -3
  87. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/canonical-integration-operation-store.ts +179 -0
  88. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-heavy-request-admission.ts +80 -2
  89. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-progress-registry.ts +31 -2
  90. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/integration-operation-store-contract.ts +104 -0
  91. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/integration-operation-value-reference.ts +47 -0
  92. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/integration-operation-value-retirement.ts +193 -0
  93. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/integration-operation-value-storage.ts +420 -0
  94. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-pool.ts +41 -0
  95. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +134 -3
  96. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-state.ts +1657 -95
  97. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +885 -73
  98. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-completion-coalescer.ts +452 -0
  99. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +601 -42
  100. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-terminal-transition.ts +1 -0
  101. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-value-storage.ts +371 -0
  102. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-resource-metrics.ts +86 -7
  103. package/dist/bundling-sources/shared_libs/play-runtime/secret-redaction.ts +153 -22
  104. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/index.ts +1 -0
  105. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/receipt-cohort.ts +188 -38
  106. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/runtime-step-receipts-adapter.ts +28 -13
  107. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +44 -1
  108. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +56 -4
  109. package/dist/bundling-sources/shared_libs/play-runtime/work-receipts.ts +2 -0
  110. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +16 -10
  111. package/dist/bundling-sources/shared_libs/plays/dataset.ts +4 -1
  112. package/dist/cli/index.js +250 -38
  113. package/dist/cli/index.mjs +250 -38
  114. package/dist/{compiler-manifest-DfSnbCTW.d.mts → compiler-manifest-BIqRyj5m.d.mts} +1 -1
  115. package/dist/{compiler-manifest-DfSnbCTW.d.ts → compiler-manifest-BIqRyj5m.d.ts} +1 -1
  116. package/dist/index.d.mts +4 -2
  117. package/dist/index.d.ts +4 -2
  118. package/dist/index.js +231 -35
  119. package/dist/index.mjs +231 -35
  120. package/dist/install-integrity.json +31 -2
  121. package/dist/plays/bundle-play-file.d.mts +2 -2
  122. package/dist/plays/bundle-play-file.d.ts +2 -2
  123. package/dist/plays/bundle-play-file.mjs +65 -1
  124. package/dist/release.d.mts +1 -1
  125. package/dist/release.d.ts +1 -1
  126. package/dist/release.js +1 -1
  127. package/dist/release.mjs +1 -1
  128. package/package.json +1 -1
@@ -19,12 +19,18 @@ import {
19
19
  } from '../app-runtime-api';
20
20
  import type { PlayVisualNodeProgressMap } from '../worker-api-types';
21
21
  import type { PlayExecutionEvent } from '../ctx-types';
22
+ import type { PlayActivityObservation } from '../activity-observation';
22
23
  import type {
23
24
  PlayRunnerLogEvent,
24
25
  PlayRunnerResult,
25
26
  } from '../protocol';
26
27
  import type { PlaySchedulerSubmitInput } from '../scheduler-backend';
27
28
  import type { DocflowObservationRecord } from '../docflow-observation';
29
+ import {
30
+ buildPlayRunLedgerEventsFromStatusPatch,
31
+ createEmptyPlayRunLedgerSnapshot,
32
+ type PlayRunLedgerEvent,
33
+ } from '../run-ledger';
28
34
  import {
29
35
  getTopLevelPipelineSubsteps,
30
36
  type PlayStaticPipeline,
@@ -248,7 +254,16 @@ function shouldPublishTerminalResultLog(
248
254
  mode: PostgresSchedulerDurableLogMode,
249
255
  line: string,
250
256
  ): boolean {
251
- return mode !== 'direct_worker' || CTX_LOG_TIMESTAMP_PREFIX_RE.test(line);
257
+ // Direct workers keep host lifecycle noise out of the customer Run Log
258
+ // Stream. The resource summary is one bounded, machine-readable terminal
259
+ // diagnostic rather than a host log, though: the fixture harness needs it
260
+ // after the runner has gone away and the normal terminal result is no longer
261
+ // available through the status projection.
262
+ return (
263
+ mode !== 'direct_worker' ||
264
+ CTX_LOG_TIMESTAMP_PREFIX_RE.test(line) ||
265
+ line.startsWith('[runtime.phase_summary] ')
266
+ );
252
267
  }
253
268
 
254
269
  type TerminalLogReplayPayload = NonNullable<
@@ -323,14 +338,34 @@ export function createPostgresSchedulerProgressReporter(input: {
323
338
  durableLogMode?: PostgresSchedulerDurableLogMode;
324
339
  producerAttempt?: number;
325
340
  isCurrentAttempt?: () => boolean | Promise<boolean>;
341
+ /**
342
+ * The caller already read the durable attempt fence for THIS request and it
343
+ * was current. The first projection flush then reuses that read instead of
344
+ * paying a second identical round trip. A reporter lives for exactly one
345
+ * request, and the credit is consumed by the first flush, so a later flush —
346
+ * and every other request — re-reads the fence.
347
+ */
348
+ attemptAlreadyVerified?: boolean;
326
349
  /** Durable log position before this reporter's first event. Push runners own
327
350
  * this cursor so successive batches may land on different gateway Machines. */
328
351
  initialLiveLogTotalCount?: number;
352
+ /** Override the app-runtime transport when a caller needs to capture the
353
+ * folded terminal patch for a durable scheduler outbox instead of posting
354
+ * it synchronously. */
355
+ publishStatusUpdate?: (update: RuntimeStatusUpdate) => Promise<void>;
329
356
  }): PostgresSchedulerProgressReporter {
330
357
  const launch = input.launch;
331
358
  const durableLogMode = input.durableLogMode ?? 'progress_reporter';
332
359
  const producerAttempt = input.producerAttempt;
333
- const isCurrentAttempt = input.isCurrentAttempt ?? (() => true);
360
+ const readAttemptFence = input.isCurrentAttempt ?? (() => true);
361
+ let verifiedAttemptCredit = input.attemptAlreadyVerified === true;
362
+ const isCurrentAttempt = async (): Promise<boolean> => {
363
+ if (verifiedAttemptCredit) {
364
+ verifiedAttemptCredit = false;
365
+ return true;
366
+ }
367
+ return await readAttemptFence();
368
+ };
334
369
  const orderedNodes = buildOrderedNodeList(launch.contractSnapshot);
335
370
  const mapNodeLookup = buildMapNodeLookup(launch.contractSnapshot);
336
371
  const runtimeApi = {
@@ -338,6 +373,10 @@ export function createPostgresSchedulerProgressReporter(input: {
338
373
  executorToken: launch.executorToken,
339
374
  vercelProtectionBypassToken: launch.vercelProtectionBypassToken ?? null,
340
375
  };
376
+ const publishStatusUpdate =
377
+ input.publishStatusUpdate ??
378
+ ((update: RuntimeStatusUpdate) =>
379
+ updateRunStatusViaAppRuntime(runtimeApi, update));
341
380
 
342
381
  let liveNodeProgress: PlayVisualNodeProgressMap = {};
343
382
  let liveNodeProgressDirty = false;
@@ -427,7 +466,7 @@ export function createPostgresSchedulerProgressReporter(input: {
427
466
 
428
467
  try {
429
468
  if (await isCurrentAttempt()) {
430
- await updateRunStatusViaAppRuntime(runtimeApi, {
469
+ await publishStatusUpdate({
431
470
  playId: launch.runId,
432
471
  status: request.status,
433
472
  liveNodeProgress: nextProgress,
@@ -1246,10 +1285,102 @@ export const createDirectWorkerProgressReporter = (input: {
1246
1285
  launch: PlaySchedulerSubmitInput;
1247
1286
  producerAttempt?: number;
1248
1287
  isCurrentAttempt?: () => boolean | Promise<boolean>;
1288
+ /** See `createPostgresSchedulerProgressReporter`: one request, one credit. */
1289
+ attemptAlreadyVerified?: boolean;
1249
1290
  initialLiveLogTotalCount?: number;
1291
+ publishStatusUpdate?: (update: RuntimeStatusUpdate) => Promise<void>;
1250
1292
  }) =>
1251
1293
  createPostgresSchedulerProgressReporter({
1252
1294
  ...input,
1253
1295
  durableLogMode: 'direct_worker',
1254
1296
  });
1255
1297
  export type DirectWorkerProgressReporter = PostgresSchedulerProgressReporter;
1298
+
1299
+ /**
1300
+ * Fold a detached runner's final progress without crossing the app-runtime
1301
+ * network boundary. The returned events are stored in the same Postgres
1302
+ * terminal outbox row as `run.completed`, so the projector can append the
1303
+ * final step/log/activity facts and the terminal fact in one ordered Convex
1304
+ * mutation. This is the completed-run fast path; failed/suspended runs retain
1305
+ * the compatibility projection until their parked worker resumes.
1306
+ */
1307
+ export async function collectGatewayRunnerTerminalProgressLedgerEvents(input: {
1308
+ launch: PlaySchedulerSubmitInput;
1309
+ attempt: number;
1310
+ result: PlayRunnerResult;
1311
+ events: unknown[];
1312
+ liveLogOffset: number;
1313
+ }): Promise<PlayRunLedgerEvent[]> {
1314
+ const captured: { update?: RuntimeStatusUpdate } = {};
1315
+ const reporter = createDirectWorkerProgressReporter({
1316
+ launch: input.launch,
1317
+ producerAttempt: input.attempt,
1318
+ initialLiveLogTotalCount: input.liveLogOffset,
1319
+ isCurrentAttempt: () => true,
1320
+ attemptAlreadyVerified: true,
1321
+ publishStatusUpdate: async (update) => {
1322
+ captured.update = update;
1323
+ },
1324
+ });
1325
+ for (const event of input.events) reporter.onRunnerEvent(event);
1326
+ await reporter.finalize(input.result, {
1327
+ status: 'running',
1328
+ required: true,
1329
+ skipTerminalLogReplay: true,
1330
+ terminalLogProducerAttempt: input.attempt,
1331
+ });
1332
+ const finalUpdate = captured.update;
1333
+ if (!finalUpdate) return [];
1334
+
1335
+ const liveLogs = finalUpdate.liveLogs ?? [];
1336
+ const liveLogTotalCount =
1337
+ finalUpdate.liveLogTotalCount ?? liveLogs.length + input.liveLogOffset;
1338
+ const progressEvents = buildPlayRunLedgerEventsFromStatusPatch({
1339
+ patch: {
1340
+ runId: input.launch.runId,
1341
+ status: 'running',
1342
+ lastCheckpointAt: finalUpdate.lastCheckpointAt,
1343
+ liveNodeProgress: finalUpdate.liveNodeProgress,
1344
+ liveLogs,
1345
+ liveLogsChannelOffset: Math.max(0, liveLogTotalCount - liveLogs.length),
1346
+ liveLogsProducerAttempt:
1347
+ finalUpdate.liveLogProducerAttempt ?? input.attempt,
1348
+ },
1349
+ previousSnapshot: createEmptyPlayRunLedgerSnapshot({
1350
+ runId: input.launch.runId,
1351
+ status: 'queued',
1352
+ }),
1353
+ source: 'worker',
1354
+ });
1355
+ const datasetEvents: PlayRunLedgerEvent[] = (
1356
+ finalUpdate.datasetLifecycleEvents ?? []
1357
+ ).map((event) => ({
1358
+ type: 'dataset.lifecycle',
1359
+ runId: input.launch.runId,
1360
+ source: 'worker',
1361
+ occurredAt: event.at,
1362
+ datasetId: event.datasetId,
1363
+ path: event.path,
1364
+ tableNamespace: event.tableNamespace,
1365
+ phase: event.phase,
1366
+ ...(event.persistedRows === undefined
1367
+ ? {}
1368
+ : { persistedRows: event.persistedRows }),
1369
+ ...(event.succeededRows === undefined
1370
+ ? {}
1371
+ : { succeededRows: event.succeededRows }),
1372
+ ...(event.failedRows === undefined ? {} : { failedRows: event.failedRows }),
1373
+ ...(event.complete === undefined ? {} : { complete: event.complete }),
1374
+ ...(event.bornFrom === undefined ? {} : { bornFrom: event.bornFrom }),
1375
+ }));
1376
+ const activityEvents: PlayRunLedgerEvent[] = (
1377
+ finalUpdate.activityObservations ?? []
1378
+ ).map((observation: PlayActivityObservation) => ({
1379
+ type: 'activity.observed',
1380
+ runId: input.launch.runId,
1381
+ source: 'worker',
1382
+ occurredAt: observation.observedAt,
1383
+ observation,
1384
+ }));
1385
+ return [...progressEvents, ...datasetEvents, ...activityEvents];
1386
+ }