deepline 0.3.198 → 0.3.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundling-sources/sdk/src/release.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/context.ts +54 -33
- package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +2 -0
- package/dist/bundling-sources/shared_libs/play-runtime/fullenrich-batching.ts +1 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +1 -3
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +133 -52
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/release.d.mts +1 -1
- package/dist/release.d.ts +1 -1
- package/dist/release.js +1 -1
- package/dist/release.mjs +1 -1
- package/package.json +1 -1
|
@@ -200,7 +200,7 @@ export const SDK_RELEASE = {
|
|
|
200
200
|
// getters keep their established compatibility behavior.
|
|
201
201
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
202
202
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
203
|
-
version: '0.3.
|
|
203
|
+
version: '0.3.200',
|
|
204
204
|
updateSummary:
|
|
205
205
|
'Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.',
|
|
206
206
|
packageCapabilities: {
|
|
@@ -13735,51 +13735,70 @@ export class PlayContextImpl implements ScalarPlayAuthoringRuntimeContext {
|
|
|
13735
13735
|
const suspendAfterTimeoutMs = timeoutPolicy
|
|
13736
13736
|
? timeoutPolicy.suspendAfterTimeoutMs
|
|
13737
13737
|
: handler.suspendAfterTimeoutMs;
|
|
13738
|
-
|
|
13739
|
-
|
|
13740
|
-
|
|
13741
|
-
|
|
13742
|
-
|
|
13743
|
-
|
|
13744
|
-
|
|
13745
|
-
|
|
13746
|
-
|
|
13747
|
-
|
|
13748
|
-
|
|
13749
|
-
|
|
13750
|
-
:
|
|
13751
|
-
|
|
13752
|
-
|
|
13753
|
-
|
|
13754
|
-
|
|
13755
|
-
|
|
13738
|
+
let timeoutFinalizedAt = existing.timeoutFinalizedAt;
|
|
13739
|
+
// This is a replay acknowledgement, not exactly-once execution: a
|
|
13740
|
+
// crash after the provider succeeds but before this checkpoint is
|
|
13741
|
+
// durable can still repeat the finalizer on a later attempt.
|
|
13742
|
+
if (timeoutFinalizedAt === undefined && handler.onTimeout) {
|
|
13743
|
+
try {
|
|
13744
|
+
await handler.onTimeout({
|
|
13745
|
+
payload: input,
|
|
13746
|
+
context: eventContext,
|
|
13747
|
+
boundary: {
|
|
13748
|
+
boundaryId: preparedBoundary.boundaryId,
|
|
13749
|
+
eventKey: preparedBoundary.eventKey,
|
|
13750
|
+
timeoutMs: preparedBoundary.timeoutMs,
|
|
13751
|
+
provider: existing.provider ?? handler.provider,
|
|
13752
|
+
toolId: existing.toolId ?? handler.toolId,
|
|
13753
|
+
...(existing.messageRef
|
|
13754
|
+
? { messageRef: existing.messageRef }
|
|
13755
|
+
: {}),
|
|
13756
|
+
...(existing.requestKey
|
|
13757
|
+
? { requestKey: existing.requestKey }
|
|
13758
|
+
: {}),
|
|
13759
|
+
...(existing.interactionId
|
|
13760
|
+
? { interactionId: existing.interactionId }
|
|
13761
|
+
: {}),
|
|
13762
|
+
...(timeoutPolicy ? { timeoutPolicy } : {}),
|
|
13763
|
+
},
|
|
13764
|
+
});
|
|
13765
|
+
timeoutFinalizedAt = Date.now();
|
|
13766
|
+
} catch (error) {
|
|
13767
|
+
this.recordSlackHitlTimeoutFailure(error);
|
|
13768
|
+
throw error;
|
|
13769
|
+
}
|
|
13770
|
+
}
|
|
13771
|
+
const persistTimeoutFinalization = (completedAt?: number) => {
|
|
13772
|
+
if (
|
|
13773
|
+
timeoutFinalizedAt === existing.timeoutFinalizedAt &&
|
|
13774
|
+
completedAt === existing.completedAt
|
|
13775
|
+
) {
|
|
13776
|
+
return;
|
|
13777
|
+
}
|
|
13778
|
+
this.checkpoint.resolvedBoundaries = {
|
|
13779
|
+
...(this.checkpoint.resolvedBoundaries ?? {}),
|
|
13780
|
+
[preparedBoundary.boundaryId]: {
|
|
13781
|
+
...existing,
|
|
13782
|
+
...(completedAt !== undefined ? { completedAt } : {}),
|
|
13783
|
+
...(timeoutFinalizedAt !== undefined
|
|
13784
|
+
? { timeoutFinalizedAt }
|
|
13756
13785
|
: {}),
|
|
13757
|
-
...(timeoutPolicy ? { timeoutPolicy } : {}),
|
|
13758
13786
|
},
|
|
13759
|
-
}
|
|
13760
|
-
|
|
13761
|
-
|
|
13762
|
-
throw error;
|
|
13763
|
-
}
|
|
13787
|
+
};
|
|
13788
|
+
this.#options.onBatchComplete?.(this.checkpoint);
|
|
13789
|
+
};
|
|
13764
13790
|
if (timeoutPolicy?.timeoutOutcome === 'error') {
|
|
13765
13791
|
// The provider finalizer above must complete first. That ordering
|
|
13766
13792
|
// makes an expired Slack card and the terminal Play state agree,
|
|
13767
13793
|
// while provider finalization failures stay retryable instead.
|
|
13794
|
+
persistTimeoutFinalization();
|
|
13768
13795
|
const error = new SlackHitlTimeoutError(timeoutPolicy.timeoutError);
|
|
13769
13796
|
this.recordSlackHitlTimeoutFailure(error);
|
|
13770
13797
|
throw error;
|
|
13771
13798
|
}
|
|
13772
13799
|
if (suspendAfterTimeoutMs !== undefined) {
|
|
13773
13800
|
const finalizedAtMs = existing.completedAt ?? Date.now();
|
|
13774
|
-
|
|
13775
|
-
this.checkpoint.resolvedBoundaries = {
|
|
13776
|
-
...(this.checkpoint.resolvedBoundaries ?? {}),
|
|
13777
|
-
[preparedBoundary.boundaryId]: {
|
|
13778
|
-
...existing,
|
|
13779
|
-
completedAt: finalizedAtMs,
|
|
13780
|
-
},
|
|
13781
|
-
};
|
|
13782
|
-
}
|
|
13801
|
+
persistTimeoutFinalization(finalizedAtMs);
|
|
13783
13802
|
this.runtimeLog(
|
|
13784
13803
|
`Integration event ${preparedBoundary.boundaryId}: timeout finalized externally; keeping Play parked`,
|
|
13785
13804
|
);
|
|
@@ -13792,6 +13811,8 @@ export class PlayContextImpl implements ScalarPlayAuthoringRuntimeContext {
|
|
|
13792
13811
|
postTimeoutPark: true,
|
|
13793
13812
|
...(existing.messageRef ? { messageRef: existing.messageRef } : {}),
|
|
13794
13813
|
});
|
|
13814
|
+
} else {
|
|
13815
|
+
persistTimeoutFinalization();
|
|
13795
13816
|
}
|
|
13796
13817
|
}
|
|
13797
13818
|
this.runtimeLog(
|
|
@@ -1210,6 +1210,8 @@ export interface PlayCheckpoint {
|
|
|
1210
1210
|
timeoutPolicy?: IntegrationEventWaitBoundary['timeoutPolicy'];
|
|
1211
1211
|
output?: unknown;
|
|
1212
1212
|
completedAt?: number;
|
|
1213
|
+
/** Timestamp of the successful provider timeout finalizer, if any. */
|
|
1214
|
+
timeoutFinalizedAt?: number;
|
|
1213
1215
|
}
|
|
1214
1216
|
| {
|
|
1215
1217
|
kind: 'fetch';
|
|
@@ -26,7 +26,5 @@ export function getPlayRuntimeBatchStrategy(
|
|
|
26
26
|
if (!operation) {
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
operation === 'fullenrich_enrich' ? 'fullenrich_bulk_enrich' : operation;
|
|
31
|
-
return PLAY_RUNTIME_BATCH_OPERATION_REGISTRY[canonicalOperation] ?? null;
|
|
29
|
+
return PLAY_RUNTIME_BATCH_OPERATION_REGISTRY[operation] ?? null;
|
|
32
30
|
}
|
|
@@ -70,6 +70,7 @@ import {
|
|
|
70
70
|
type DocflowObservationRecord,
|
|
71
71
|
type DocflowObservationUpsert,
|
|
72
72
|
} from '../docflow-observation';
|
|
73
|
+
import { normalizePlayDocflowNodeIoState } from '../docflow-node-io';
|
|
73
74
|
import {
|
|
74
75
|
workReceiptFailureKindCodeForWrite,
|
|
75
76
|
workReceiptFailureKindFromCode,
|
|
@@ -15714,7 +15715,7 @@ export async function renewPostgresRunLedgerDelivery(
|
|
|
15714
15715
|
throw new RunLedgerProjectionLeaseLostError();
|
|
15715
15716
|
}
|
|
15716
15717
|
|
|
15717
|
-
/** Only
|
|
15718
|
+
/** Only the currently claimed causal prefix may use the projection write path. */
|
|
15718
15719
|
export async function assertPostgresRunLedgerDelivery(
|
|
15719
15720
|
client: PostgresSchedulerQueryClient,
|
|
15720
15721
|
input: {
|
|
@@ -15728,64 +15729,106 @@ export async function assertPostgresRunLedgerDelivery(
|
|
|
15728
15729
|
const result = await client.query<{
|
|
15729
15730
|
delivery_key: string;
|
|
15730
15731
|
event_type: string;
|
|
15731
|
-
lease_owner: string;
|
|
15732
|
+
lease_owner: string | null;
|
|
15733
|
+
lease_live: boolean;
|
|
15734
|
+
due: boolean;
|
|
15735
|
+
blocked: boolean;
|
|
15732
15736
|
}>(
|
|
15733
15737
|
`
|
|
15734
|
-
SELECT outbox.delivery_key,
|
|
15738
|
+
SELECT outbox.delivery_key,
|
|
15739
|
+
outbox.event_type,
|
|
15740
|
+
outbox.lease_owner,
|
|
15741
|
+
outbox.lease_expires_at > now() AS lease_live,
|
|
15742
|
+
coalesce(outbox.next_attempt_at, outbox.created_at) <= now() AS due,
|
|
15743
|
+
outbox.failed_at IS NOT NULL AS blocked
|
|
15735
15744
|
FROM ${tableName('outbox', options)} AS outbox
|
|
15736
15745
|
JOIN ${tableName('runs', options)} AS runs ON runs.run_id = outbox.run_id
|
|
15737
15746
|
WHERE outbox.run_id = $1 AND runs.org_id = $2
|
|
15738
|
-
AND outbox.delivered_at IS NULL
|
|
15739
|
-
|
|
15740
|
-
AND ($3::text IS NULL OR outbox.lease_owner = $3)
|
|
15741
|
-
ORDER BY outbox.created_at, outbox.event_id
|
|
15747
|
+
AND outbox.delivered_at IS NULL
|
|
15748
|
+
ORDER BY ${runLedgerOrderSql('outbox')}
|
|
15742
15749
|
`,
|
|
15743
|
-
[input.runId, input.orgId
|
|
15750
|
+
[input.runId, input.orgId],
|
|
15744
15751
|
);
|
|
15745
|
-
const
|
|
15746
|
-
|
|
15747
|
-
|
|
15748
|
-
|
|
15749
|
-
groups.set(row.lease_owner, group);
|
|
15752
|
+
const rows = result.rows;
|
|
15753
|
+
const leaseOwner = input.leaseOwner?.trim() || rows[0]?.lease_owner;
|
|
15754
|
+
if (!leaseOwner || rows[0]?.lease_owner !== leaseOwner) {
|
|
15755
|
+
throw new RunLedgerProjectionLeaseLostError();
|
|
15750
15756
|
}
|
|
15751
|
-
|
|
15752
|
-
|
|
15753
|
-
|
|
15754
|
-
|
|
15755
|
-
|
|
15756
|
-
|
|
15757
|
-
|
|
15758
|
-
|
|
15759
|
-
|
|
15760
|
-
|
|
15761
|
-
.
|
|
15762
|
-
|
|
15763
|
-
|
|
15764
|
-
|
|
15765
|
-
|
|
15766
|
-
|
|
15767
|
-
|
|
15768
|
-
|
|
15769
|
-
|
|
15757
|
+
|
|
15758
|
+
// A normal projector leases only the batch it is about to send. Cancellation
|
|
15759
|
+
// intentionally transfers the entire pending causal prefix to one stable
|
|
15760
|
+
// owner before synchronously draining it, while run.events are still claimed
|
|
15761
|
+
// one row at a time. Validate the submitted key against a *contiguous due
|
|
15762
|
+
// prefix*, not every row carrying that owner; otherwise a valid cancellation
|
|
15763
|
+
// head is rejected whenever later facts share the cancellation lease.
|
|
15764
|
+
const prefix: typeof rows = [];
|
|
15765
|
+
for (const row of rows) {
|
|
15766
|
+
if (
|
|
15767
|
+
row.lease_owner !== leaseOwner ||
|
|
15768
|
+
row.lease_live !== true ||
|
|
15769
|
+
row.due !== true ||
|
|
15770
|
+
row.blocked === true
|
|
15771
|
+
) {
|
|
15772
|
+
break;
|
|
15773
|
+
}
|
|
15774
|
+
if (prefix.length > 0 && row.event_type === 'run.events') break;
|
|
15775
|
+
prefix.push(row);
|
|
15776
|
+
|
|
15777
|
+
const first = prefix[0]!;
|
|
15778
|
+
const terminal = prefix.find((candidate) =>
|
|
15779
|
+
['run.completed', 'run.failed', 'run.cancelled'].includes(
|
|
15780
|
+
candidate.event_type,
|
|
15781
|
+
),
|
|
15782
|
+
);
|
|
15783
|
+
let expectedKey: string;
|
|
15784
|
+
if (terminal) {
|
|
15785
|
+
expectedKey = buildRunLedgerTerminalIdempotencyKey({
|
|
15786
|
+
runId: input.runId,
|
|
15787
|
+
deliveryKey: terminal.delivery_key,
|
|
15788
|
+
});
|
|
15789
|
+
} else if (
|
|
15790
|
+
prefix.length === 1 &&
|
|
15791
|
+
['run.created', 'run.started'].includes(first.event_type)
|
|
15792
|
+
) {
|
|
15793
|
+
expectedKey = buildRunLedgerStartIdempotencyKey({
|
|
15794
|
+
runId: input.runId,
|
|
15795
|
+
deliveryKey: first.delivery_key,
|
|
15796
|
+
});
|
|
15797
|
+
} else {
|
|
15798
|
+
const digest = createHash('sha256')
|
|
15799
|
+
.update(prefix.map((candidate) => candidate.delivery_key).join('\n'))
|
|
15800
|
+
.digest('hex');
|
|
15801
|
+
expectedKey = buildRunLedgerEventsIdempotencyKey({
|
|
15802
|
+
runId: input.runId,
|
|
15803
|
+
deliveryDigest: digest,
|
|
15804
|
+
});
|
|
15805
|
+
}
|
|
15806
|
+
if (input.idempotencyKey === expectedKey) return;
|
|
15807
|
+
|
|
15808
|
+
// The pre-batch projector used run-terminal:<delivery-key> for a single
|
|
15809
|
+
// nonterminal fact. Retain that wire-compatibility key for the current
|
|
15810
|
+
// singleton head, but never let it authorize a later row in the prefix.
|
|
15811
|
+
if (
|
|
15812
|
+
prefix.length === 1 &&
|
|
15813
|
+
!['run.created', 'run.started'].includes(first.event_type) &&
|
|
15814
|
+
input.idempotencyKey ===
|
|
15815
|
+
buildRunLedgerTerminalIdempotencyKey({
|
|
15770
15816
|
runId: input.runId,
|
|
15771
|
-
deliveryKey:
|
|
15817
|
+
deliveryKey: first.delivery_key,
|
|
15772
15818
|
})
|
|
15773
|
-
|
|
15774
|
-
const startKey =
|
|
15775
|
-
rows.length === 1 &&
|
|
15776
|
-
single &&
|
|
15777
|
-
['run.created', 'run.started'].includes(single.event_type)
|
|
15778
|
-
? buildRunLedgerStartIdempotencyKey({
|
|
15779
|
-
runId: input.runId,
|
|
15780
|
-
deliveryKey: single.delivery_key,
|
|
15781
|
-
})
|
|
15782
|
-
: null;
|
|
15783
|
-
if (
|
|
15784
|
-
input.idempotencyKey === batchKey ||
|
|
15785
|
-
input.idempotencyKey === terminalKey ||
|
|
15786
|
-
input.idempotencyKey === startKey
|
|
15787
|
-
)
|
|
15819
|
+
) {
|
|
15788
15820
|
return;
|
|
15821
|
+
}
|
|
15822
|
+
|
|
15823
|
+
if (
|
|
15824
|
+
prefix.length === 1 &&
|
|
15825
|
+
['run.created', 'run.started', 'run.events'].includes(first.event_type)
|
|
15826
|
+
) {
|
|
15827
|
+
break;
|
|
15828
|
+
}
|
|
15829
|
+
if (terminal || prefix.length >= 8) {
|
|
15830
|
+
break;
|
|
15831
|
+
}
|
|
15789
15832
|
}
|
|
15790
15833
|
throw new RunLedgerProjectionLeaseLostError();
|
|
15791
15834
|
}
|
|
@@ -16497,6 +16540,21 @@ export async function markPostgresSchedulerOutboxDelivered(
|
|
|
16497
16540
|
return result.rows.length;
|
|
16498
16541
|
}
|
|
16499
16542
|
|
|
16543
|
+
function normalizeOutboxIngressPreview(
|
|
16544
|
+
event: PlayRunLedgerIngressEvent,
|
|
16545
|
+
): PlayRunLedgerIngressEvent {
|
|
16546
|
+
if (event.type !== 'step.progress' && event.key !== 'step.progress') {
|
|
16547
|
+
return event;
|
|
16548
|
+
}
|
|
16549
|
+
const progress = recordPayload(event.progress);
|
|
16550
|
+
if (!progress || !('nodeIo' in progress)) return event;
|
|
16551
|
+
const nodeIo = normalizePlayDocflowNodeIoState(progress.nodeIo);
|
|
16552
|
+
if (!nodeIo) return event;
|
|
16553
|
+
// Old outbox rows can be delivered to their launch-pinned app deployment.
|
|
16554
|
+
// Make their previews Convex-safe before crossing that older API boundary.
|
|
16555
|
+
return { ...event, progress: { ...progress, nodeIo } };
|
|
16556
|
+
}
|
|
16557
|
+
|
|
16500
16558
|
export function buildRunLedgerEventsFromPostgresSchedulerOutbox(
|
|
16501
16559
|
event: PostgresSchedulerOutboxEvent,
|
|
16502
16560
|
): PlayRunLedgerIngressEvent[] {
|
|
@@ -16523,7 +16581,9 @@ export function buildRunLedgerEventsFromPostgresSchedulerOutbox(
|
|
|
16523
16581
|
}
|
|
16524
16582
|
// Preserve event time, source, opaque payloads and positional log identity;
|
|
16525
16583
|
// the outbox timestamp orders delivery, not the customer's execution trace.
|
|
16526
|
-
return events as AcceptedPlayRunLedgerEvent[]
|
|
16584
|
+
return (events as AcceptedPlayRunLedgerEvent[]).map(
|
|
16585
|
+
normalizeOutboxIngressPreview,
|
|
16586
|
+
);
|
|
16527
16587
|
}
|
|
16528
16588
|
if (event.eventType === 'run.started') {
|
|
16529
16589
|
return [
|
|
@@ -16546,7 +16606,7 @@ export function buildRunLedgerEventsFromPostgresSchedulerOutbox(
|
|
|
16546
16606
|
const lines = stringArrayPayloadField(event.payload, 'terminalLogLines');
|
|
16547
16607
|
const resultSummary = payloadField(event.payload, 'resultSummary');
|
|
16548
16608
|
return [
|
|
16549
|
-
...progressEvents,
|
|
16609
|
+
...progressEvents.map(normalizeOutboxIngressPreview),
|
|
16550
16610
|
...(lines.length === 0
|
|
16551
16611
|
? []
|
|
16552
16612
|
: [
|
|
@@ -16584,7 +16644,7 @@ export function buildRunLedgerEventsFromPostgresSchedulerOutbox(
|
|
|
16584
16644
|
);
|
|
16585
16645
|
const resultSummary = payloadField(event.payload, 'resultSummary');
|
|
16586
16646
|
return [
|
|
16587
|
-
...progressEvents,
|
|
16647
|
+
...progressEvents.map(normalizeOutboxIngressPreview),
|
|
16588
16648
|
...(lines.length === 0
|
|
16589
16649
|
? []
|
|
16590
16650
|
: [
|
|
@@ -16965,6 +17025,7 @@ export async function dispatchRunLedgerOutboxToLedgerThroughEventWithClientScope
|
|
|
16965
17025
|
withClient,
|
|
16966
17026
|
{
|
|
16967
17027
|
...input,
|
|
17028
|
+
waitForRunLock: true,
|
|
16968
17029
|
limit:
|
|
16969
17030
|
remaining === null ? batchSize : Math.min(batchSize, remaining),
|
|
16970
17031
|
},
|
|
@@ -17039,7 +17100,7 @@ export async function dispatchRunLedgerOutboxToLedgerBatchOnceWithClientScope(
|
|
|
17039
17100
|
withClient: <T>(
|
|
17040
17101
|
operation: (client: PostgresSchedulerQueryClient) => Promise<T>,
|
|
17041
17102
|
) => Promise<T>,
|
|
17042
|
-
input: RunLedgerOutboxDispatchInput,
|
|
17103
|
+
input: RunLedgerOutboxDispatchInput & { waitForRunLock?: boolean },
|
|
17043
17104
|
options?: Pick<PostgresSchedulerOptions, 'schema'>,
|
|
17044
17105
|
): Promise<PostgresSchedulerOutboxProjectionResult> {
|
|
17045
17106
|
const leaseOwner =
|
|
@@ -17052,6 +17113,26 @@ export async function dispatchRunLedgerOutboxToLedgerBatchOnceWithClientScope(
|
|
|
17052
17113
|
await client.query('BEGIN');
|
|
17053
17114
|
try {
|
|
17054
17115
|
const targetRunId = input.runId?.trim() || null;
|
|
17116
|
+
if (input.waitForRunLock && targetRunId) {
|
|
17117
|
+
// A synchronous drain must not mistake a busy run for an empty
|
|
17118
|
+
// outbox. In particular, cancellation owns its pending prefix lease,
|
|
17119
|
+
// so returning early also prevents background recovery from helping.
|
|
17120
|
+
// Wait only for this run, under the existing cancellation SQL budget,
|
|
17121
|
+
// then select the prefix using a fresh READ COMMITTED snapshot. The
|
|
17122
|
+
// transaction still ends before HTTP; background claims keep SKIP LOCKED.
|
|
17123
|
+
await client.query(
|
|
17124
|
+
`SELECT set_config('lock_timeout', $1, true),
|
|
17125
|
+
set_config('statement_timeout', $2, true)`,
|
|
17126
|
+
[
|
|
17127
|
+
`${RUNTIME_SCHEDULER_CANCEL_LOCK_TIMEOUT_MS}ms`,
|
|
17128
|
+
`${RUNTIME_SCHEDULER_CANCEL_STATEMENT_TIMEOUT_MS}ms`,
|
|
17129
|
+
],
|
|
17130
|
+
);
|
|
17131
|
+
await client.query(
|
|
17132
|
+
`SELECT run_id FROM ${tableName('runs', options)} WHERE run_id = $1 FOR UPDATE`,
|
|
17133
|
+
[targetRunId],
|
|
17134
|
+
);
|
|
17135
|
+
}
|
|
17055
17136
|
// A worker fast path always names one run. Keep that lookup on the
|
|
17056
17137
|
// run-scoped outbox prefix: combining it with global recovery through a
|
|
17057
17138
|
// nullable predicate made PostgreSQL materialize every pending run head
|
package/dist/cli/index.js
CHANGED
|
@@ -3051,7 +3051,7 @@ var SDK_RELEASE = {
|
|
|
3051
3051
|
// getters keep their established compatibility behavior.
|
|
3052
3052
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
3053
3053
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
3054
|
-
version: "0.3.
|
|
3054
|
+
version: "0.3.200",
|
|
3055
3055
|
updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
|
|
3056
3056
|
packageCapabilities: {
|
|
3057
3057
|
updatePreferences: 1
|
package/dist/cli/index.mjs
CHANGED
|
@@ -3046,7 +3046,7 @@ var SDK_RELEASE = {
|
|
|
3046
3046
|
// getters keep their established compatibility behavior.
|
|
3047
3047
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
3048
3048
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
3049
|
-
version: "0.3.
|
|
3049
|
+
version: "0.3.200",
|
|
3050
3050
|
updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
|
|
3051
3051
|
packageCapabilities: {
|
|
3052
3052
|
updatePreferences: 1
|
package/dist/index.js
CHANGED
|
@@ -864,7 +864,7 @@ var SDK_RELEASE = {
|
|
|
864
864
|
// getters keep their established compatibility behavior.
|
|
865
865
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
866
866
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
867
|
-
version: "0.3.
|
|
867
|
+
version: "0.3.200",
|
|
868
868
|
updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
|
|
869
869
|
packageCapabilities: {
|
|
870
870
|
updatePreferences: 1
|
package/dist/index.mjs
CHANGED
|
@@ -768,7 +768,7 @@ var SDK_RELEASE = {
|
|
|
768
768
|
// getters keep their established compatibility behavior.
|
|
769
769
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
770
770
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
771
|
-
version: "0.3.
|
|
771
|
+
version: "0.3.200",
|
|
772
772
|
updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
|
|
773
773
|
packageCapabilities: {
|
|
774
774
|
updatePreferences: 1
|
package/dist/release.d.mts
CHANGED
|
@@ -149,7 +149,7 @@ type SdkRelease = {
|
|
|
149
149
|
supportPolicy: SdkSupportPolicy;
|
|
150
150
|
};
|
|
151
151
|
declare const SDK_RELEASE: {
|
|
152
|
-
readonly version: "0.3.
|
|
152
|
+
readonly version: "0.3.200";
|
|
153
153
|
readonly updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.";
|
|
154
154
|
readonly packageCapabilities: {
|
|
155
155
|
readonly updatePreferences: 1;
|
package/dist/release.d.ts
CHANGED
|
@@ -149,7 +149,7 @@ type SdkRelease = {
|
|
|
149
149
|
supportPolicy: SdkSupportPolicy;
|
|
150
150
|
};
|
|
151
151
|
declare const SDK_RELEASE: {
|
|
152
|
-
readonly version: "0.3.
|
|
152
|
+
readonly version: "0.3.200";
|
|
153
153
|
readonly updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.";
|
|
154
154
|
readonly packageCapabilities: {
|
|
155
155
|
readonly updatePreferences: 1;
|
package/dist/release.js
CHANGED
|
@@ -74,7 +74,7 @@ var SDK_RELEASE = {
|
|
|
74
74
|
// getters keep their established compatibility behavior.
|
|
75
75
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
76
76
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
77
|
-
version: "0.3.
|
|
77
|
+
version: "0.3.200",
|
|
78
78
|
updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
|
|
79
79
|
packageCapabilities: {
|
|
80
80
|
updatePreferences: 1
|
package/dist/release.mjs
CHANGED
|
@@ -48,7 +48,7 @@ var SDK_RELEASE = {
|
|
|
48
48
|
// getters keep their established compatibility behavior.
|
|
49
49
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
50
50
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
51
|
-
version: "0.3.
|
|
51
|
+
version: "0.3.200",
|
|
52
52
|
updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
|
|
53
53
|
packageCapabilities: {
|
|
54
54
|
updatePreferences: 1
|