deepline 0.1.214 → 0.1.215
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/apps/play-runner-workers/src/child-manifest-resolver.ts +107 -0
- package/dist/bundling-sources/apps/play-runner-workers/src/coordinator-entry.ts +85 -10
- package/dist/bundling-sources/apps/play-runner-workers/src/coordinator-runtime-proxy.ts +34 -0
- package/dist/bundling-sources/apps/play-runner-workers/src/entry.ts +50 -36
- package/dist/bundling-sources/apps/play-runner-workers/src/runtime/harness-receipt-store.ts +12 -0
- package/dist/bundling-sources/apps/play-runner-workers/src/workflow-retry.ts +4 -0
- package/dist/bundling-sources/sdk/src/client.ts +1 -2
- package/dist/bundling-sources/sdk/src/release.ts +2 -2
- package/dist/bundling-sources/sdk/src/types.ts +2 -3
- package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +21 -3
- package/dist/bundling-sources/shared_libs/play-runtime/context.ts +6 -6
- package/dist/bundling-sources/shared_libs/play-runtime/durable-receipt-execution.ts +14 -3
- package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +19 -0
- package/dist/bundling-sources/shared_libs/play-runtime/profiles.ts +22 -0
- package/dist/bundling-sources/shared_libs/play-runtime/providers.ts +32 -0
- package/dist/bundling-sources/shared_libs/play-runtime/run-failure.ts +13 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts +5 -2
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-session-execution.ts +66 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +18 -55
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +57 -25
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-contract.ts +17 -1
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +3 -2
- package/dist/bundling-sources/shared_libs/play-runtime/secret-redaction.ts +11 -1
- package/dist/bundling-sources/shared_libs/play-runtime/transient-service-error.ts +10 -0
- package/dist/cli/index.js +35 -12
- package/dist/cli/index.mjs +35 -12
- package/dist/index.d.mts +2 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.js +7 -6
- package/dist/index.mjs +7 -6
- package/package.json +1 -1
|
@@ -95,7 +95,7 @@ import {
|
|
|
95
95
|
PLAY_RUNTIME_CONTRACT,
|
|
96
96
|
PLAY_RUNTIME_CONTRACT_HEADER,
|
|
97
97
|
} from './runtime-contract';
|
|
98
|
-
import {
|
|
98
|
+
import { PLAY_RUNTIME_API_CURRENT_PATH } from './runtime-api-paths';
|
|
99
99
|
import {
|
|
100
100
|
PLAY_RUNTIME_SHEET_ATTEMPT_LEASE_TTL_MS,
|
|
101
101
|
PLAY_RUNTIME_WORK_RECEIPT_LEASE_TTL_MS,
|
|
@@ -298,6 +298,7 @@ const RUNTIME_WORK_RECEIPT_LEASE_COLUMNS = [
|
|
|
298
298
|
'lease_expires_at',
|
|
299
299
|
] as const;
|
|
300
300
|
const RUNTIME_WORK_RECEIPT_FAILURE_KIND_COLUMN = 'failure_kind';
|
|
301
|
+
const RUNTIME_WORK_RECEIPT_KEY_INDEX = 'idx_deepline_step_receipts_k_unique';
|
|
301
302
|
const RUNTIME_WORK_RECEIPT_SELF_HEAL_COLUMNS = [
|
|
302
303
|
...RUNTIME_WORK_RECEIPT_LEASE_COLUMNS,
|
|
303
304
|
RUNTIME_WORK_RECEIPT_FAILURE_KIND_COLUMN,
|
|
@@ -504,7 +505,7 @@ function resolveRuntimeApiUrl(context: RuntimeApiContext): string {
|
|
|
504
505
|
if (!baseUrl) {
|
|
505
506
|
throw new Error('Runner runtime API requires a baseUrl.');
|
|
506
507
|
}
|
|
507
|
-
return `${baseUrl.replace(/\/$/, '')}${
|
|
508
|
+
return `${baseUrl.replace(/\/$/, '')}${PLAY_RUNTIME_API_CURRENT_PATH}`;
|
|
508
509
|
}
|
|
509
510
|
|
|
510
511
|
function resolveRuntimeApiHeaders(
|
|
@@ -588,9 +589,11 @@ async function postRuntimeApi<TResponse>(
|
|
|
588
589
|
const details =
|
|
589
590
|
typeof parsed?.details === 'string'
|
|
590
591
|
? parsed.details
|
|
591
|
-
: typeof parsed?.
|
|
592
|
-
? parsed.
|
|
593
|
-
:
|
|
592
|
+
: typeof parsed?.detail === 'string'
|
|
593
|
+
? parsed.detail
|
|
594
|
+
: typeof parsed?.debug_error === 'string'
|
|
595
|
+
? parsed.debug_error
|
|
596
|
+
: null;
|
|
594
597
|
const shouldRetryRuntimeResponse =
|
|
595
598
|
(response.status === 503 &&
|
|
596
599
|
parsed?.code === 'ingestion_plane_not_ready') ||
|
|
@@ -2040,6 +2043,22 @@ function isMissingRuntimeWorkReceiptSelfHealColumnError(
|
|
|
2040
2043
|
);
|
|
2041
2044
|
}
|
|
2042
2045
|
|
|
2046
|
+
function isMissingRuntimeWorkReceiptKeyConstraintError(
|
|
2047
|
+
error: unknown,
|
|
2048
|
+
): boolean {
|
|
2049
|
+
if (!error || typeof error !== 'object') {
|
|
2050
|
+
return false;
|
|
2051
|
+
}
|
|
2052
|
+
const code = 'code' in error ? String(error.code) : '';
|
|
2053
|
+
const message = 'message' in error ? String(error.message) : '';
|
|
2054
|
+
return (
|
|
2055
|
+
code === '42P10' ||
|
|
2056
|
+
/no unique or exclusion constraint matching the ON CONFLICT specification/i.test(
|
|
2057
|
+
message,
|
|
2058
|
+
)
|
|
2059
|
+
);
|
|
2060
|
+
}
|
|
2061
|
+
|
|
2043
2062
|
function runtimeWorkReceiptEnsureCacheKey(
|
|
2044
2063
|
session: RuntimePostgresSession,
|
|
2045
2064
|
): string {
|
|
@@ -2119,22 +2138,29 @@ async function ensureRuntimeWorkReceiptTable(
|
|
|
2119
2138
|
session,
|
|
2120
2139
|
client,
|
|
2121
2140
|
);
|
|
2122
|
-
if (missingColumns.length
|
|
2141
|
+
if (missingColumns.length > 0) {
|
|
2142
|
+
await client.query(`
|
|
2143
|
+
ALTER TABLE ${workReceiptTable(session)}
|
|
2144
|
+
${missingColumns
|
|
2145
|
+
.map((column) => {
|
|
2146
|
+
const type =
|
|
2147
|
+
column === 'lease_expires_at'
|
|
2148
|
+
? 'timestamptz'
|
|
2149
|
+
: column === 'lease_owner_attempt'
|
|
2150
|
+
? 'integer'
|
|
2151
|
+
: column === RUNTIME_WORK_RECEIPT_FAILURE_KIND_COLUMN
|
|
2152
|
+
? 'smallint NOT NULL DEFAULT 0'
|
|
2153
|
+
: 'text';
|
|
2154
|
+
return `ADD COLUMN IF NOT EXISTS ${column} ${type}`;
|
|
2155
|
+
})
|
|
2156
|
+
.join(',\n ')}
|
|
2157
|
+
`);
|
|
2158
|
+
}
|
|
2123
2159
|
await client.query(`
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
column === 'lease_expires_at'
|
|
2129
|
-
? 'timestamptz'
|
|
2130
|
-
: column === 'lease_owner_attempt'
|
|
2131
|
-
? 'integer'
|
|
2132
|
-
: column === RUNTIME_WORK_RECEIPT_FAILURE_KIND_COLUMN
|
|
2133
|
-
? 'smallint NOT NULL DEFAULT 0'
|
|
2134
|
-
: 'text';
|
|
2135
|
-
return `ADD COLUMN IF NOT EXISTS ${column} ${type}`;
|
|
2136
|
-
})
|
|
2137
|
-
.join(',\n ')}
|
|
2160
|
+
CREATE UNIQUE INDEX IF NOT EXISTS ${quoteIdentifier(
|
|
2161
|
+
RUNTIME_WORK_RECEIPT_KEY_INDEX,
|
|
2162
|
+
)}
|
|
2163
|
+
ON ${workReceiptTable(session)} (k)
|
|
2138
2164
|
`);
|
|
2139
2165
|
})
|
|
2140
2166
|
.then(() => undefined);
|
|
@@ -2238,7 +2264,8 @@ async function withRuntimeWorkReceiptClient<T>(
|
|
|
2238
2264
|
} catch (error) {
|
|
2239
2265
|
if (
|
|
2240
2266
|
isMissingRelationError(error) ||
|
|
2241
|
-
isMissingRuntimeWorkReceiptSelfHealColumnError(error)
|
|
2267
|
+
isMissingRuntimeWorkReceiptSelfHealColumnError(error) ||
|
|
2268
|
+
isMissingRuntimeWorkReceiptKeyConstraintError(error)
|
|
2242
2269
|
) {
|
|
2243
2270
|
runtimeWorkReceiptEnsureCache.delete(
|
|
2244
2271
|
runtimeWorkReceiptEnsureCacheKey(session),
|
|
@@ -4636,6 +4663,7 @@ export async function completeRuntimeWorkReceipt(
|
|
|
4636
4663
|
runAttempt?: number | null;
|
|
4637
4664
|
leaseId?: string | null;
|
|
4638
4665
|
output: unknown;
|
|
4666
|
+
returnOutput?: boolean;
|
|
4639
4667
|
},
|
|
4640
4668
|
): Promise<WorkReceipt | null> {
|
|
4641
4669
|
if (
|
|
@@ -4741,7 +4769,7 @@ export async function completeRuntimeWorkReceipt(
|
|
|
4741
4769
|
})}
|
|
4742
4770
|
RETURNING convert_from(k, 'UTF8') AS k,
|
|
4743
4771
|
status,
|
|
4744
|
-
output,
|
|
4772
|
+
CASE WHEN $7::boolean THEN output ELSE NULL::jsonb END AS output,
|
|
4745
4773
|
error,
|
|
4746
4774
|
failure_kind,
|
|
4747
4775
|
run_id,
|
|
@@ -4754,7 +4782,7 @@ export async function completeRuntimeWorkReceipt(
|
|
|
4754
4782
|
replay AS (
|
|
4755
4783
|
SELECT convert_from(k, 'UTF8') AS k,
|
|
4756
4784
|
status,
|
|
4757
|
-
output,
|
|
4785
|
+
CASE WHEN $7::boolean THEN output ELSE NULL::jsonb END AS output,
|
|
4758
4786
|
error,
|
|
4759
4787
|
failure_kind,
|
|
4760
4788
|
run_id,
|
|
@@ -4783,6 +4811,7 @@ export async function completeRuntimeWorkReceipt(
|
|
|
4783
4811
|
input.runId,
|
|
4784
4812
|
leaseId,
|
|
4785
4813
|
runAttempt,
|
|
4814
|
+
input.returnOutput !== false,
|
|
4786
4815
|
],
|
|
4787
4816
|
);
|
|
4788
4817
|
return rows[0] ? mapRuntimeWorkReceiptRow(rows[0]) : null;
|
|
@@ -4801,6 +4830,7 @@ export async function completeRuntimeWorkReceipts(
|
|
|
4801
4830
|
leaseId?: string | null;
|
|
4802
4831
|
runAttempt?: number | null;
|
|
4803
4832
|
}>;
|
|
4833
|
+
returnOutput?: boolean;
|
|
4804
4834
|
},
|
|
4805
4835
|
): Promise<Array<WorkReceipt | null>> {
|
|
4806
4836
|
const receipts = input.receipts.filter((receipt) => receipt.key.trim());
|
|
@@ -4819,6 +4849,7 @@ export async function completeRuntimeWorkReceipts(
|
|
|
4819
4849
|
await completeRuntimeWorkReceipts(context, {
|
|
4820
4850
|
playName: input.playName,
|
|
4821
4851
|
receipts: siblingReceipts,
|
|
4852
|
+
returnOutput: input.returnOutput,
|
|
4822
4853
|
});
|
|
4823
4854
|
} catch (error) {
|
|
4824
4855
|
siblingError = error;
|
|
@@ -4938,7 +4969,7 @@ export async function completeRuntimeWorkReceipts(
|
|
|
4938
4969
|
})}
|
|
4939
4970
|
RETURNING target.k,
|
|
4940
4971
|
target.status,
|
|
4941
|
-
target.output,
|
|
4972
|
+
CASE WHEN $7::boolean THEN target.output ELSE NULL::jsonb END AS output,
|
|
4942
4973
|
target.error,
|
|
4943
4974
|
target.failure_kind,
|
|
4944
4975
|
target.run_id,
|
|
@@ -4952,7 +4983,7 @@ export async function completeRuntimeWorkReceipts(
|
|
|
4952
4983
|
replay AS (
|
|
4953
4984
|
SELECT target.k,
|
|
4954
4985
|
target.status,
|
|
4955
|
-
target.output,
|
|
4986
|
+
CASE WHEN $7::boolean THEN target.output ELSE NULL::jsonb END AS output,
|
|
4956
4987
|
target.error,
|
|
4957
4988
|
target.failure_kind,
|
|
4958
4989
|
target.run_id,
|
|
@@ -5020,6 +5051,7 @@ export async function completeRuntimeWorkReceipts(
|
|
|
5020
5051
|
),
|
|
5021
5052
|
),
|
|
5022
5053
|
RECEIPT_STATUS_COMPLETED,
|
|
5054
|
+
input.returnOutput !== false,
|
|
5023
5055
|
],
|
|
5024
5056
|
);
|
|
5025
5057
|
return rows.map((row) =>
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
export const PLAY_RUNTIME_CONTRACT =
|
|
1
|
+
export const PLAY_RUNTIME_CONTRACT = 3;
|
|
2
2
|
export const PLAY_RUNTIME_CONTRACT_MIN_SUPPORTED = 1;
|
|
3
3
|
export const PLAY_RUNTIME_CONTRACT_HEADER = 'x-deepline-runtime-contract';
|
|
4
4
|
|
|
5
5
|
export const RUNTIME_CONTRACT_CHANGELOG = [
|
|
6
|
+
{
|
|
7
|
+
contract: 3,
|
|
8
|
+
changed:
|
|
9
|
+
'Runtime receipt completion responses are compact acknowledgements; receipt reads remain the payload replay path.',
|
|
10
|
+
compatOwner: 'runtime',
|
|
11
|
+
compatRemoval: 'contract 2 support window closure',
|
|
12
|
+
},
|
|
6
13
|
{
|
|
7
14
|
contract: 2,
|
|
8
15
|
changed:
|
|
@@ -12,6 +19,15 @@ export const RUNTIME_CONTRACT_CHANGELOG = [
|
|
|
12
19
|
},
|
|
13
20
|
] as const;
|
|
14
21
|
|
|
22
|
+
export function runtimeReceiptCompletionResponse<
|
|
23
|
+
T extends { output?: unknown },
|
|
24
|
+
>(runtimeContract: number | null | undefined, receipt: T | null): T | null {
|
|
25
|
+
if (!receipt || (runtimeContract ?? 1) < 3) return receipt;
|
|
26
|
+
const { output, ...ack } = receipt;
|
|
27
|
+
void output;
|
|
28
|
+
return ack as T;
|
|
29
|
+
}
|
|
30
|
+
|
|
15
31
|
export type RuntimeContractResolution =
|
|
16
32
|
| { ok: true; contract: number }
|
|
17
33
|
| {
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* One of three pluggable axes (alongside runner-backends and dedup-backends).
|
|
5
5
|
* Selected per-run via PlayExecutionProfile.
|
|
6
6
|
*
|
|
7
|
-
* Absurd is the
|
|
8
|
-
*
|
|
7
|
+
* Absurd is the enabled production scheduler. The Cloudflare Workflows
|
|
8
|
+
* adapter is retained for historical run interpretation while workers_edge
|
|
9
|
+
* launch admission is disabled.
|
|
9
10
|
*
|
|
10
11
|
* Customer plays are unaffected — this is purely the orchestration layer.
|
|
11
12
|
*/
|
|
@@ -5,10 +5,18 @@ const JWT_RE =
|
|
|
5
5
|
/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g;
|
|
6
6
|
const PRIVATE_KEY_RE =
|
|
7
7
|
/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z0-9 ]*PRIVATE KEY-----/g;
|
|
8
|
+
// Only redact self-identifying credential prefixes here. Generic words such as
|
|
9
|
+
// `key`, `token`, and `secret` are common in harmless play/run slugs (for
|
|
10
|
+
// example `absurd-key-rotation-check`) and need an assignment context before
|
|
11
|
+
// they are sensitive; HIGH_ENTROPY_ASSIGNMENT_RE handles that case below.
|
|
8
12
|
const COMMON_SECRET_RE =
|
|
9
|
-
/\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs]
|
|
13
|
+
/\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs])[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
14
|
+
const GENERIC_PREFIXED_SECRET_RE =
|
|
15
|
+
/\b(?:key|token|secret|api[_-]?key)_[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
10
16
|
const URL_SECRET_VALUE_RE =
|
|
11
17
|
/\b(?:sk|pk|rk|pat|ghp|github_pat|xox)[A-Za-z0-9_./+=:-]{12,}\b/i;
|
|
18
|
+
const GENERIC_SECRET_ASSIGNMENT_RE =
|
|
19
|
+
/\b(?:api[_-]?key|token|secret|password)\b\s*[:=]\s*["']?[^"',\s]{12,}["']?/gi;
|
|
12
20
|
const HIGH_ENTROPY_ASSIGNMENT_RE =
|
|
13
21
|
/\b(?:api[_-]?key|token|secret|password|authorization|access[_-]?token|refresh[_-]?token)\b\s*[:=]\s*["']?[^"',\s]{16,}["']?/gi;
|
|
14
22
|
const SENSITIVE_URL_PARAM_RE =
|
|
@@ -39,6 +47,8 @@ export function redactSecretLikeString(value: string): string {
|
|
|
39
47
|
.replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`)
|
|
40
48
|
.replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER)
|
|
41
49
|
.replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER)
|
|
50
|
+
.replace(GENERIC_PREFIXED_SECRET_RE, SECRET_REDACTION_PLACEHOLDER)
|
|
51
|
+
.replace(GENERIC_SECRET_ASSIGNMENT_RE, SECRET_REDACTION_PLACEHOLDER)
|
|
42
52
|
.replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
43
53
|
const separator = match.includes('=') ? '=' : ':';
|
|
44
54
|
const [key] = match.split(separator, 1);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function transientServiceUnavailableDetail(
|
|
2
|
+
error: unknown,
|
|
3
|
+
): string | null {
|
|
4
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
5
|
+
return /ServiceUnavailable|Service temporarily unavailable|temporarily unavailable \(Code:\s*\d+\)/i.test(
|
|
6
|
+
detail,
|
|
7
|
+
)
|
|
8
|
+
? detail
|
|
9
|
+
: null;
|
|
10
|
+
}
|
package/dist/cli/index.js
CHANGED
|
@@ -623,10 +623,10 @@ var SDK_RELEASE = {
|
|
|
623
623
|
// 0.1.154 removes the short-lived generated enrich StepOptions recompute
|
|
624
624
|
// fields shipped in 0.1.153.
|
|
625
625
|
// 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
|
|
626
|
-
version: "0.1.
|
|
626
|
+
version: "0.1.215",
|
|
627
627
|
apiContract: "2026-06-dataset-handle-results-hard-cutover",
|
|
628
628
|
supportPolicy: {
|
|
629
|
-
latest: "0.1.
|
|
629
|
+
latest: "0.1.215",
|
|
630
630
|
minimumSupported: "0.1.53",
|
|
631
631
|
deprecatedBelow: "0.1.53",
|
|
632
632
|
commandMinimumSupported: [
|
|
@@ -1364,8 +1364,10 @@ var SECRET_REDACTION_PLACEHOLDER = "[REDACTED_SECRET]";
|
|
|
1364
1364
|
var BEARER_TOKEN_RE = /\bBearer\s+[A-Za-z0-9._~+/=-]{12,}\b/g;
|
|
1365
1365
|
var JWT_RE = /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g;
|
|
1366
1366
|
var PRIVATE_KEY_RE = /-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z0-9 ]*PRIVATE KEY-----/g;
|
|
1367
|
-
var COMMON_SECRET_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs]
|
|
1367
|
+
var COMMON_SECRET_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs])[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
1368
|
+
var GENERIC_PREFIXED_SECRET_RE = /\b(?:key|token|secret|api[_-]?key)_[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
1368
1369
|
var URL_SECRET_VALUE_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox)[A-Za-z0-9_./+=:-]{12,}\b/i;
|
|
1370
|
+
var GENERIC_SECRET_ASSIGNMENT_RE = /\b(?:api[_-]?key|token|secret|password)\b\s*[:=]\s*["']?[^"',\s]{12,}["']?/gi;
|
|
1369
1371
|
var HIGH_ENTROPY_ASSIGNMENT_RE = /\b(?:api[_-]?key|token|secret|password|authorization|access[_-]?token|refresh[_-]?token)\b\s*[:=]\s*["']?[^"',\s]{16,}["']?/gi;
|
|
1370
1372
|
var SENSITIVE_URL_PARAM_RE = /[?#&](?:\w*(?:key|token)|secret|password|authorization|credential|signature|sig)(?:=|$)/i;
|
|
1371
1373
|
function escapeRegExp(value) {
|
|
@@ -1382,7 +1384,7 @@ function redactSecretLikeString(value) {
|
|
|
1382
1384
|
}
|
|
1383
1385
|
if (!URL_SECRET_VALUE_RE.test(value)) return value;
|
|
1384
1386
|
}
|
|
1385
|
-
return value.replace(PRIVATE_KEY_RE, SECRET_REDACTION_PLACEHOLDER).replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`).replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER).replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
1387
|
+
return value.replace(PRIVATE_KEY_RE, SECRET_REDACTION_PLACEHOLDER).replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`).replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER).replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(GENERIC_PREFIXED_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(GENERIC_SECRET_ASSIGNMENT_RE, SECRET_REDACTION_PLACEHOLDER).replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
1386
1388
|
const separator = match.includes("=") ? "=" : ":";
|
|
1387
1389
|
const [key] = match.split(separator, 1);
|
|
1388
1390
|
return `${key.trim()}${separator}${SECRET_REDACTION_PLACEHOLDER}`;
|
|
@@ -3047,8 +3049,7 @@ var DeeplineClient = class {
|
|
|
3047
3049
|
...forceToolRefresh ? { forceToolRefresh: true } : {},
|
|
3048
3050
|
...typeof request.waitForCompletionMs === "number" ? { waitForCompletionMs: request.waitForCompletionMs } : {},
|
|
3049
3051
|
// Profile selection is the API's job, not the CLI's. The server
|
|
3050
|
-
// defaults to absurd; callers
|
|
3051
|
-
// `request.profile` explicitly.
|
|
3052
|
+
// defaults to absurd; callers normally omit this field.
|
|
3052
3053
|
...request.profile ? { profile: request.profile } : {},
|
|
3053
3054
|
...integrationMode ? { integrationMode } : {},
|
|
3054
3055
|
...testPolicyOverrides ? { testPolicyOverrides } : {}
|
|
@@ -10763,6 +10764,18 @@ var PLAY_RUNTIME_PROVIDER_IDS = {
|
|
|
10763
10764
|
workersEdge: "workers_edge",
|
|
10764
10765
|
absurd: "absurd"
|
|
10765
10766
|
};
|
|
10767
|
+
var PLAY_RUNTIME_PROVIDER_DISABLED_CODE = "PLAY_RUNTIME_PROVIDER_DISABLED";
|
|
10768
|
+
var PlayRuntimeProviderDisabledError = class extends Error {
|
|
10769
|
+
code = PLAY_RUNTIME_PROVIDER_DISABLED_CODE;
|
|
10770
|
+
profile;
|
|
10771
|
+
constructor(profile) {
|
|
10772
|
+
super(
|
|
10773
|
+
`Play runtime profile "${profile}" is disabled. Deepline runs now execute on the "absurd" profile.`
|
|
10774
|
+
);
|
|
10775
|
+
this.name = "PlayRuntimeProviderDisabledError";
|
|
10776
|
+
this.profile = profile;
|
|
10777
|
+
}
|
|
10778
|
+
};
|
|
10766
10779
|
var PLAY_RUNTIME_PROVIDERS = {
|
|
10767
10780
|
workers_edge: {
|
|
10768
10781
|
id: PLAY_RUNTIME_PROVIDER_IDS.workersEdge,
|
|
@@ -10787,6 +10800,11 @@ var PLAY_RUNTIME_PROVIDERS = {
|
|
|
10787
10800
|
function defaultPlayRuntimeProvider() {
|
|
10788
10801
|
return PLAY_RUNTIME_PROVIDERS.absurd;
|
|
10789
10802
|
}
|
|
10803
|
+
function assertPlayRuntimeProviderEnabled(provider) {
|
|
10804
|
+
if (provider.id === PLAY_RUNTIME_PROVIDER_IDS.workersEdge) {
|
|
10805
|
+
throw new PlayRuntimeProviderDisabledError(provider.id);
|
|
10806
|
+
}
|
|
10807
|
+
}
|
|
10790
10808
|
function resolvePlayRuntimeProvider(override) {
|
|
10791
10809
|
if (override?.trim()) {
|
|
10792
10810
|
const id = override.trim();
|
|
@@ -10801,17 +10819,22 @@ function resolvePlayRuntimeProvider(override) {
|
|
|
10801
10819
|
}
|
|
10802
10820
|
return defaultPlayRuntimeProvider();
|
|
10803
10821
|
}
|
|
10822
|
+
function resolveEnabledPlayRuntimeProvider(override) {
|
|
10823
|
+
const provider = resolvePlayRuntimeProvider(override);
|
|
10824
|
+
assertPlayRuntimeProviderEnabled(provider);
|
|
10825
|
+
return provider;
|
|
10826
|
+
}
|
|
10804
10827
|
|
|
10805
10828
|
// ../shared_libs/play-runtime/profiles.ts
|
|
10806
10829
|
var PLAY_EXECUTION_PROFILE_IDS = {
|
|
10807
10830
|
...PLAY_RUNTIME_PROVIDER_IDS
|
|
10808
10831
|
};
|
|
10809
10832
|
var PLAY_EXECUTION_PROFILES = PLAY_RUNTIME_PROVIDERS;
|
|
10810
|
-
function
|
|
10833
|
+
function resolveEnabledExecutionProfile(override) {
|
|
10811
10834
|
try {
|
|
10812
|
-
return
|
|
10835
|
+
return resolveEnabledPlayRuntimeProvider(override);
|
|
10813
10836
|
} catch (error) {
|
|
10814
|
-
if (override?.trim()) {
|
|
10837
|
+
if (override?.trim() && error instanceof Error && /Unsupported play runtime provider/.test(error.message)) {
|
|
10815
10838
|
throw new Error(
|
|
10816
10839
|
`Unknown execution profile "${override.trim()}". Expected one of: ${Object.keys(
|
|
10817
10840
|
PLAY_EXECUTION_PROFILES
|
|
@@ -11759,7 +11782,7 @@ async function collectBundledPlayGraph(entryFile, profile = null) {
|
|
|
11759
11782
|
const playBundler = await loadPlayBundler();
|
|
11760
11783
|
const nodes = /* @__PURE__ */ new Map();
|
|
11761
11784
|
const visiting = /* @__PURE__ */ new Set();
|
|
11762
|
-
const artifactKind =
|
|
11785
|
+
const artifactKind = resolveEnabledExecutionProfile(profile).artifactKind;
|
|
11763
11786
|
const visit = async (filePath) => {
|
|
11764
11787
|
const absolutePath = normalizePlayPath(filePath);
|
|
11765
11788
|
const cached = nodes.get(absolutePath);
|
|
@@ -14473,7 +14496,7 @@ function writeStartedPlayRun(input2) {
|
|
|
14473
14496
|
);
|
|
14474
14497
|
}
|
|
14475
14498
|
function parsePlayRunOptions(args) {
|
|
14476
|
-
const usage = "Usage: deepline plays run <play-name> [--input '{...}'] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run <play-file.ts> [--input '{...}'] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run --file <play-file.ts> [--input '{...}'] [--profile <id>] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run --name <name> [--input '{...}'] [--profile <id>] [--live|--latest|--revision-id <id>] [--no-wait] [--tail-timeout-ms 30000] [--force] [--no-open] [--json] [--full] [--<input> value]\n
|
|
14499
|
+
const usage = "Usage: deepline plays run <play-name> [--input '{...}'] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run <play-file.ts> [--input '{...}'] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run --file <play-file.ts> [--input '{...}'] [--profile <id>] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run --name <name> [--input '{...}'] [--profile <id>] [--live|--latest|--revision-id <id>] [--no-wait] [--tail-timeout-ms 30000] [--force] [--no-open] [--json] [--full] [--<input> value]\n Runs default to absurd. The workers_edge profile is disabled.\n Unknown --<input> value flags, such as --limit 5, are passed into play input.\nRun `deepline plays run --help` for idempotent call caching and ctx.dataset guidance.";
|
|
14477
14500
|
let filePath = null;
|
|
14478
14501
|
let playName = null;
|
|
14479
14502
|
let input2 = null;
|
|
@@ -14512,7 +14535,7 @@ function parsePlayRunOptions(args) {
|
|
|
14512
14535
|
throw new Error("--profile requires an execution profile id.");
|
|
14513
14536
|
}
|
|
14514
14537
|
profile = value.trim();
|
|
14515
|
-
|
|
14538
|
+
resolveEnabledExecutionProfile(profile);
|
|
14516
14539
|
index += 1;
|
|
14517
14540
|
continue;
|
|
14518
14541
|
}
|
package/dist/cli/index.mjs
CHANGED
|
@@ -608,10 +608,10 @@ var SDK_RELEASE = {
|
|
|
608
608
|
// 0.1.154 removes the short-lived generated enrich StepOptions recompute
|
|
609
609
|
// fields shipped in 0.1.153.
|
|
610
610
|
// 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
|
|
611
|
-
version: "0.1.
|
|
611
|
+
version: "0.1.215",
|
|
612
612
|
apiContract: "2026-06-dataset-handle-results-hard-cutover",
|
|
613
613
|
supportPolicy: {
|
|
614
|
-
latest: "0.1.
|
|
614
|
+
latest: "0.1.215",
|
|
615
615
|
minimumSupported: "0.1.53",
|
|
616
616
|
deprecatedBelow: "0.1.53",
|
|
617
617
|
commandMinimumSupported: [
|
|
@@ -1349,8 +1349,10 @@ var SECRET_REDACTION_PLACEHOLDER = "[REDACTED_SECRET]";
|
|
|
1349
1349
|
var BEARER_TOKEN_RE = /\bBearer\s+[A-Za-z0-9._~+/=-]{12,}\b/g;
|
|
1350
1350
|
var JWT_RE = /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g;
|
|
1351
1351
|
var PRIVATE_KEY_RE = /-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z0-9 ]*PRIVATE KEY-----/g;
|
|
1352
|
-
var COMMON_SECRET_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs]
|
|
1352
|
+
var COMMON_SECRET_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs])[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
1353
|
+
var GENERIC_PREFIXED_SECRET_RE = /\b(?:key|token|secret|api[_-]?key)_[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
1353
1354
|
var URL_SECRET_VALUE_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox)[A-Za-z0-9_./+=:-]{12,}\b/i;
|
|
1355
|
+
var GENERIC_SECRET_ASSIGNMENT_RE = /\b(?:api[_-]?key|token|secret|password)\b\s*[:=]\s*["']?[^"',\s]{12,}["']?/gi;
|
|
1354
1356
|
var HIGH_ENTROPY_ASSIGNMENT_RE = /\b(?:api[_-]?key|token|secret|password|authorization|access[_-]?token|refresh[_-]?token)\b\s*[:=]\s*["']?[^"',\s]{16,}["']?/gi;
|
|
1355
1357
|
var SENSITIVE_URL_PARAM_RE = /[?#&](?:\w*(?:key|token)|secret|password|authorization|credential|signature|sig)(?:=|$)/i;
|
|
1356
1358
|
function escapeRegExp(value) {
|
|
@@ -1367,7 +1369,7 @@ function redactSecretLikeString(value) {
|
|
|
1367
1369
|
}
|
|
1368
1370
|
if (!URL_SECRET_VALUE_RE.test(value)) return value;
|
|
1369
1371
|
}
|
|
1370
|
-
return value.replace(PRIVATE_KEY_RE, SECRET_REDACTION_PLACEHOLDER).replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`).replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER).replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
1372
|
+
return value.replace(PRIVATE_KEY_RE, SECRET_REDACTION_PLACEHOLDER).replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`).replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER).replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(GENERIC_PREFIXED_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(GENERIC_SECRET_ASSIGNMENT_RE, SECRET_REDACTION_PLACEHOLDER).replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
1371
1373
|
const separator = match.includes("=") ? "=" : ":";
|
|
1372
1374
|
const [key] = match.split(separator, 1);
|
|
1373
1375
|
return `${key.trim()}${separator}${SECRET_REDACTION_PLACEHOLDER}`;
|
|
@@ -3032,8 +3034,7 @@ var DeeplineClient = class {
|
|
|
3032
3034
|
...forceToolRefresh ? { forceToolRefresh: true } : {},
|
|
3033
3035
|
...typeof request.waitForCompletionMs === "number" ? { waitForCompletionMs: request.waitForCompletionMs } : {},
|
|
3034
3036
|
// Profile selection is the API's job, not the CLI's. The server
|
|
3035
|
-
// defaults to absurd; callers
|
|
3036
|
-
// `request.profile` explicitly.
|
|
3037
|
+
// defaults to absurd; callers normally omit this field.
|
|
3037
3038
|
...request.profile ? { profile: request.profile } : {},
|
|
3038
3039
|
...integrationMode ? { integrationMode } : {},
|
|
3039
3040
|
...testPolicyOverrides ? { testPolicyOverrides } : {}
|
|
@@ -10792,6 +10793,18 @@ var PLAY_RUNTIME_PROVIDER_IDS = {
|
|
|
10792
10793
|
workersEdge: "workers_edge",
|
|
10793
10794
|
absurd: "absurd"
|
|
10794
10795
|
};
|
|
10796
|
+
var PLAY_RUNTIME_PROVIDER_DISABLED_CODE = "PLAY_RUNTIME_PROVIDER_DISABLED";
|
|
10797
|
+
var PlayRuntimeProviderDisabledError = class extends Error {
|
|
10798
|
+
code = PLAY_RUNTIME_PROVIDER_DISABLED_CODE;
|
|
10799
|
+
profile;
|
|
10800
|
+
constructor(profile) {
|
|
10801
|
+
super(
|
|
10802
|
+
`Play runtime profile "${profile}" is disabled. Deepline runs now execute on the "absurd" profile.`
|
|
10803
|
+
);
|
|
10804
|
+
this.name = "PlayRuntimeProviderDisabledError";
|
|
10805
|
+
this.profile = profile;
|
|
10806
|
+
}
|
|
10807
|
+
};
|
|
10795
10808
|
var PLAY_RUNTIME_PROVIDERS = {
|
|
10796
10809
|
workers_edge: {
|
|
10797
10810
|
id: PLAY_RUNTIME_PROVIDER_IDS.workersEdge,
|
|
@@ -10816,6 +10829,11 @@ var PLAY_RUNTIME_PROVIDERS = {
|
|
|
10816
10829
|
function defaultPlayRuntimeProvider() {
|
|
10817
10830
|
return PLAY_RUNTIME_PROVIDERS.absurd;
|
|
10818
10831
|
}
|
|
10832
|
+
function assertPlayRuntimeProviderEnabled(provider) {
|
|
10833
|
+
if (provider.id === PLAY_RUNTIME_PROVIDER_IDS.workersEdge) {
|
|
10834
|
+
throw new PlayRuntimeProviderDisabledError(provider.id);
|
|
10835
|
+
}
|
|
10836
|
+
}
|
|
10819
10837
|
function resolvePlayRuntimeProvider(override) {
|
|
10820
10838
|
if (override?.trim()) {
|
|
10821
10839
|
const id = override.trim();
|
|
@@ -10830,17 +10848,22 @@ function resolvePlayRuntimeProvider(override) {
|
|
|
10830
10848
|
}
|
|
10831
10849
|
return defaultPlayRuntimeProvider();
|
|
10832
10850
|
}
|
|
10851
|
+
function resolveEnabledPlayRuntimeProvider(override) {
|
|
10852
|
+
const provider = resolvePlayRuntimeProvider(override);
|
|
10853
|
+
assertPlayRuntimeProviderEnabled(provider);
|
|
10854
|
+
return provider;
|
|
10855
|
+
}
|
|
10833
10856
|
|
|
10834
10857
|
// ../shared_libs/play-runtime/profiles.ts
|
|
10835
10858
|
var PLAY_EXECUTION_PROFILE_IDS = {
|
|
10836
10859
|
...PLAY_RUNTIME_PROVIDER_IDS
|
|
10837
10860
|
};
|
|
10838
10861
|
var PLAY_EXECUTION_PROFILES = PLAY_RUNTIME_PROVIDERS;
|
|
10839
|
-
function
|
|
10862
|
+
function resolveEnabledExecutionProfile(override) {
|
|
10840
10863
|
try {
|
|
10841
|
-
return
|
|
10864
|
+
return resolveEnabledPlayRuntimeProvider(override);
|
|
10842
10865
|
} catch (error) {
|
|
10843
|
-
if (override?.trim()) {
|
|
10866
|
+
if (override?.trim() && error instanceof Error && /Unsupported play runtime provider/.test(error.message)) {
|
|
10844
10867
|
throw new Error(
|
|
10845
10868
|
`Unknown execution profile "${override.trim()}". Expected one of: ${Object.keys(
|
|
10846
10869
|
PLAY_EXECUTION_PROFILES
|
|
@@ -11788,7 +11811,7 @@ async function collectBundledPlayGraph(entryFile, profile = null) {
|
|
|
11788
11811
|
const playBundler = await loadPlayBundler();
|
|
11789
11812
|
const nodes = /* @__PURE__ */ new Map();
|
|
11790
11813
|
const visiting = /* @__PURE__ */ new Set();
|
|
11791
|
-
const artifactKind =
|
|
11814
|
+
const artifactKind = resolveEnabledExecutionProfile(profile).artifactKind;
|
|
11792
11815
|
const visit = async (filePath) => {
|
|
11793
11816
|
const absolutePath = normalizePlayPath(filePath);
|
|
11794
11817
|
const cached = nodes.get(absolutePath);
|
|
@@ -14502,7 +14525,7 @@ function writeStartedPlayRun(input2) {
|
|
|
14502
14525
|
);
|
|
14503
14526
|
}
|
|
14504
14527
|
function parsePlayRunOptions(args) {
|
|
14505
|
-
const usage = "Usage: deepline plays run <play-name> [--input '{...}'] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run <play-file.ts> [--input '{...}'] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run --file <play-file.ts> [--input '{...}'] [--profile <id>] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run --name <name> [--input '{...}'] [--profile <id>] [--live|--latest|--revision-id <id>] [--no-wait] [--tail-timeout-ms 30000] [--force] [--no-open] [--json] [--full] [--<input> value]\n
|
|
14528
|
+
const usage = "Usage: deepline plays run <play-name> [--input '{...}'] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run <play-file.ts> [--input '{...}'] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run --file <play-file.ts> [--input '{...}'] [--profile <id>] [--no-wait] [--tail-timeout-ms 30000] [--force] [--full] [--<input> value]\n deepline plays run --name <name> [--input '{...}'] [--profile <id>] [--live|--latest|--revision-id <id>] [--no-wait] [--tail-timeout-ms 30000] [--force] [--no-open] [--json] [--full] [--<input> value]\n Runs default to absurd. The workers_edge profile is disabled.\n Unknown --<input> value flags, such as --limit 5, are passed into play input.\nRun `deepline plays run --help` for idempotent call caching and ctx.dataset guidance.";
|
|
14506
14529
|
let filePath = null;
|
|
14507
14530
|
let playName = null;
|
|
14508
14531
|
let input2 = null;
|
|
@@ -14541,7 +14564,7 @@ function parsePlayRunOptions(args) {
|
|
|
14541
14564
|
throw new Error("--profile requires an execution profile id.");
|
|
14542
14565
|
}
|
|
14543
14566
|
profile = value.trim();
|
|
14544
|
-
|
|
14567
|
+
resolveEnabledExecutionProfile(profile);
|
|
14545
14568
|
index += 1;
|
|
14546
14569
|
continue;
|
|
14547
14570
|
}
|
package/dist/index.d.mts
CHANGED
|
@@ -1085,9 +1085,8 @@ interface StartPlayRunRequest {
|
|
|
1085
1085
|
/** Optionally let the start request wait briefly and return a terminal result. */
|
|
1086
1086
|
waitForCompletionMs?: number;
|
|
1087
1087
|
/**
|
|
1088
|
-
* Per-run execution profile override. The server defaults to absurd
|
|
1089
|
-
*
|
|
1090
|
-
* this unset.
|
|
1088
|
+
* Per-run execution profile override. The server defaults to absurd. The
|
|
1089
|
+
* workers_edge profile is disabled; most callers should leave this unset.
|
|
1091
1090
|
*/
|
|
1092
1091
|
profile?: string;
|
|
1093
1092
|
/** Optional per-run provider execution mode for eval/smoke runs. */
|
package/dist/index.d.ts
CHANGED
|
@@ -1085,9 +1085,8 @@ interface StartPlayRunRequest {
|
|
|
1085
1085
|
/** Optionally let the start request wait briefly and return a terminal result. */
|
|
1086
1086
|
waitForCompletionMs?: number;
|
|
1087
1087
|
/**
|
|
1088
|
-
* Per-run execution profile override. The server defaults to absurd
|
|
1089
|
-
*
|
|
1090
|
-
* this unset.
|
|
1088
|
+
* Per-run execution profile override. The server defaults to absurd. The
|
|
1089
|
+
* workers_edge profile is disabled; most callers should leave this unset.
|
|
1091
1090
|
*/
|
|
1092
1091
|
profile?: string;
|
|
1093
1092
|
/** Optional per-run provider execution mode for eval/smoke runs. */
|
package/dist/index.js
CHANGED
|
@@ -422,10 +422,10 @@ var SDK_RELEASE = {
|
|
|
422
422
|
// 0.1.154 removes the short-lived generated enrich StepOptions recompute
|
|
423
423
|
// fields shipped in 0.1.153.
|
|
424
424
|
// 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
|
|
425
|
-
version: "0.1.
|
|
425
|
+
version: "0.1.215",
|
|
426
426
|
apiContract: "2026-06-dataset-handle-results-hard-cutover",
|
|
427
427
|
supportPolicy: {
|
|
428
|
-
latest: "0.1.
|
|
428
|
+
latest: "0.1.215",
|
|
429
429
|
minimumSupported: "0.1.53",
|
|
430
430
|
deprecatedBelow: "0.1.53",
|
|
431
431
|
commandMinimumSupported: [
|
|
@@ -1163,8 +1163,10 @@ var SECRET_REDACTION_PLACEHOLDER = "[REDACTED_SECRET]";
|
|
|
1163
1163
|
var BEARER_TOKEN_RE = /\bBearer\s+[A-Za-z0-9._~+/=-]{12,}\b/g;
|
|
1164
1164
|
var JWT_RE = /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g;
|
|
1165
1165
|
var PRIVATE_KEY_RE = /-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z0-9 ]*PRIVATE KEY-----/g;
|
|
1166
|
-
var COMMON_SECRET_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs]
|
|
1166
|
+
var COMMON_SECRET_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs])[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
1167
|
+
var GENERIC_PREFIXED_SECRET_RE = /\b(?:key|token|secret|api[_-]?key)_[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
1167
1168
|
var URL_SECRET_VALUE_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox)[A-Za-z0-9_./+=:-]{12,}\b/i;
|
|
1169
|
+
var GENERIC_SECRET_ASSIGNMENT_RE = /\b(?:api[_-]?key|token|secret|password)\b\s*[:=]\s*["']?[^"',\s]{12,}["']?/gi;
|
|
1168
1170
|
var HIGH_ENTROPY_ASSIGNMENT_RE = /\b(?:api[_-]?key|token|secret|password|authorization|access[_-]?token|refresh[_-]?token)\b\s*[:=]\s*["']?[^"',\s]{16,}["']?/gi;
|
|
1169
1171
|
var SENSITIVE_URL_PARAM_RE = /[?#&](?:\w*(?:key|token)|secret|password|authorization|credential|signature|sig)(?:=|$)/i;
|
|
1170
1172
|
function escapeRegExp(value) {
|
|
@@ -1181,7 +1183,7 @@ function redactSecretLikeString(value) {
|
|
|
1181
1183
|
}
|
|
1182
1184
|
if (!URL_SECRET_VALUE_RE.test(value)) return value;
|
|
1183
1185
|
}
|
|
1184
|
-
return value.replace(PRIVATE_KEY_RE, SECRET_REDACTION_PLACEHOLDER).replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`).replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER).replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
1186
|
+
return value.replace(PRIVATE_KEY_RE, SECRET_REDACTION_PLACEHOLDER).replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`).replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER).replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(GENERIC_PREFIXED_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(GENERIC_SECRET_ASSIGNMENT_RE, SECRET_REDACTION_PLACEHOLDER).replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
1185
1187
|
const separator = match.includes("=") ? "=" : ":";
|
|
1186
1188
|
const [key] = match.split(separator, 1);
|
|
1187
1189
|
return `${key.trim()}${separator}${SECRET_REDACTION_PLACEHOLDER}`;
|
|
@@ -2846,8 +2848,7 @@ var DeeplineClient = class {
|
|
|
2846
2848
|
...forceToolRefresh ? { forceToolRefresh: true } : {},
|
|
2847
2849
|
...typeof request.waitForCompletionMs === "number" ? { waitForCompletionMs: request.waitForCompletionMs } : {},
|
|
2848
2850
|
// Profile selection is the API's job, not the CLI's. The server
|
|
2849
|
-
// defaults to absurd; callers
|
|
2850
|
-
// `request.profile` explicitly.
|
|
2851
|
+
// defaults to absurd; callers normally omit this field.
|
|
2851
2852
|
...request.profile ? { profile: request.profile } : {},
|
|
2852
2853
|
...integrationMode ? { integrationMode } : {},
|
|
2853
2854
|
...testPolicyOverrides ? { testPolicyOverrides } : {}
|
package/dist/index.mjs
CHANGED
|
@@ -352,10 +352,10 @@ var SDK_RELEASE = {
|
|
|
352
352
|
// 0.1.154 removes the short-lived generated enrich StepOptions recompute
|
|
353
353
|
// fields shipped in 0.1.153.
|
|
354
354
|
// 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
|
|
355
|
-
version: "0.1.
|
|
355
|
+
version: "0.1.215",
|
|
356
356
|
apiContract: "2026-06-dataset-handle-results-hard-cutover",
|
|
357
357
|
supportPolicy: {
|
|
358
|
-
latest: "0.1.
|
|
358
|
+
latest: "0.1.215",
|
|
359
359
|
minimumSupported: "0.1.53",
|
|
360
360
|
deprecatedBelow: "0.1.53",
|
|
361
361
|
commandMinimumSupported: [
|
|
@@ -1093,8 +1093,10 @@ var SECRET_REDACTION_PLACEHOLDER = "[REDACTED_SECRET]";
|
|
|
1093
1093
|
var BEARER_TOKEN_RE = /\bBearer\s+[A-Za-z0-9._~+/=-]{12,}\b/g;
|
|
1094
1094
|
var JWT_RE = /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g;
|
|
1095
1095
|
var PRIVATE_KEY_RE = /-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z0-9 ]*PRIVATE KEY-----/g;
|
|
1096
|
-
var COMMON_SECRET_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs]
|
|
1096
|
+
var COMMON_SECRET_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox[baprs])[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
1097
|
+
var GENERIC_PREFIXED_SECRET_RE = /\b(?:key|token|secret|api[_-]?key)_[A-Za-z0-9_./+=:-]{12,}\b/gi;
|
|
1097
1098
|
var URL_SECRET_VALUE_RE = /\b(?:sk|pk|rk|pat|ghp|github_pat|xox)[A-Za-z0-9_./+=:-]{12,}\b/i;
|
|
1099
|
+
var GENERIC_SECRET_ASSIGNMENT_RE = /\b(?:api[_-]?key|token|secret|password)\b\s*[:=]\s*["']?[^"',\s]{12,}["']?/gi;
|
|
1098
1100
|
var HIGH_ENTROPY_ASSIGNMENT_RE = /\b(?:api[_-]?key|token|secret|password|authorization|access[_-]?token|refresh[_-]?token)\b\s*[:=]\s*["']?[^"',\s]{16,}["']?/gi;
|
|
1099
1101
|
var SENSITIVE_URL_PARAM_RE = /[?#&](?:\w*(?:key|token)|secret|password|authorization|credential|signature|sig)(?:=|$)/i;
|
|
1100
1102
|
function escapeRegExp(value) {
|
|
@@ -1111,7 +1113,7 @@ function redactSecretLikeString(value) {
|
|
|
1111
1113
|
}
|
|
1112
1114
|
if (!URL_SECRET_VALUE_RE.test(value)) return value;
|
|
1113
1115
|
}
|
|
1114
|
-
return value.replace(PRIVATE_KEY_RE, SECRET_REDACTION_PLACEHOLDER).replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`).replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER).replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
1116
|
+
return value.replace(PRIVATE_KEY_RE, SECRET_REDACTION_PLACEHOLDER).replace(BEARER_TOKEN_RE, `Bearer ${SECRET_REDACTION_PLACEHOLDER}`).replace(JWT_RE, SECRET_REDACTION_PLACEHOLDER).replace(COMMON_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(GENERIC_PREFIXED_SECRET_RE, SECRET_REDACTION_PLACEHOLDER).replace(GENERIC_SECRET_ASSIGNMENT_RE, SECRET_REDACTION_PLACEHOLDER).replace(HIGH_ENTROPY_ASSIGNMENT_RE, (match) => {
|
|
1115
1117
|
const separator = match.includes("=") ? "=" : ":";
|
|
1116
1118
|
const [key] = match.split(separator, 1);
|
|
1117
1119
|
return `${key.trim()}${separator}${SECRET_REDACTION_PLACEHOLDER}`;
|
|
@@ -2776,8 +2778,7 @@ var DeeplineClient = class {
|
|
|
2776
2778
|
...forceToolRefresh ? { forceToolRefresh: true } : {},
|
|
2777
2779
|
...typeof request.waitForCompletionMs === "number" ? { waitForCompletionMs: request.waitForCompletionMs } : {},
|
|
2778
2780
|
// Profile selection is the API's job, not the CLI's. The server
|
|
2779
|
-
// defaults to absurd; callers
|
|
2780
|
-
// `request.profile` explicitly.
|
|
2781
|
+
// defaults to absurd; callers normally omit this field.
|
|
2781
2782
|
...request.profile ? { profile: request.profile } : {},
|
|
2782
2783
|
...integrationMode ? { integrationMode } : {},
|
|
2783
2784
|
...testPolicyOverrides ? { testPolicyOverrides } : {}
|