deepline 0.3.99 → 0.3.101
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/client.ts +4 -1
- package/dist/bundling-sources/sdk/src/plays/bundle-play-file.ts +2 -5
- package/dist/bundling-sources/sdk/src/release.ts +1 -1
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +10 -8
- package/dist/bundling-sources/shared_libs/plays/bundling/index.ts +5 -9
- package/dist/bundling-sources/shared_libs/plays/bundling/repository-adapter.ts +2 -2
- package/dist/bundling-sources/shared_libs/plays/deploy/control-plane-types.ts +1 -0
- package/dist/bundling-sources/shared_libs/plays/docflow.ts +7 -4
- package/dist/bundling-sources/shared_libs/security/secret-redaction.ts +145 -2
- package/dist/cli/index.js +54 -25
- package/dist/cli/index.mjs +54 -25
- package/dist/index.d.mts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/plays/bundle-play-file.mjs +10 -14
- 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
|
@@ -1091,7 +1091,10 @@ export type MonitorBatchExistingSubmitOptions = {
|
|
|
1091
1091
|
kind: 'audit' | 'deactivate' | 'reactivate' | 'repair';
|
|
1092
1092
|
scope: MonitorBatchScope;
|
|
1093
1093
|
dryRun?: boolean;
|
|
1094
|
-
/**
|
|
1094
|
+
/**
|
|
1095
|
+
* A declared policy reason for target deactivation. Omit it for an explicit
|
|
1096
|
+
* customer-owned key teardown; absent is the durable customer intent.
|
|
1097
|
+
*/
|
|
1095
1098
|
deactivationReason?: string;
|
|
1096
1099
|
/** Stable retry key. Reusing it joins the original durable operation. */
|
|
1097
1100
|
idempotencyKey: string;
|
|
@@ -5,6 +5,7 @@ import { existsSync } from 'node:fs';
|
|
|
5
5
|
import { realpath } from 'node:fs/promises';
|
|
6
6
|
import {
|
|
7
7
|
bundlePlayFile as bundlePlayFileCore,
|
|
8
|
+
PLAY_BUNDLE_CACHE_NAMESPACE,
|
|
8
9
|
type BundlePlayFileOptions,
|
|
9
10
|
type BundledPlayFileSuccess,
|
|
10
11
|
type BundledPlayFileResult,
|
|
@@ -40,7 +41,6 @@ export type {
|
|
|
40
41
|
|
|
41
42
|
export { extractDefinedPlayName } from '../../../shared_libs/plays/bundling/index.js';
|
|
42
43
|
|
|
43
|
-
const PLAY_BUNDLE_CACHE_VERSION = 37;
|
|
44
44
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
45
45
|
const SDK_PACKAGE_ROOT = resolve(MODULE_DIR, '..', '..');
|
|
46
46
|
const SOURCE_REPO_ROOT = resolve(SDK_PACKAGE_ROOT, '..', '..');
|
|
@@ -126,10 +126,7 @@ export function createSdkPlayBundlingAdapter(): PlayBundlingAdapter {
|
|
|
126
126
|
nodeModulesDir: HAS_PACKAGED_BUNDLING_SOURCES
|
|
127
127
|
? resolve(SDK_PACKAGE_ROOT, 'node_modules')
|
|
128
128
|
: resolve(PROJECT_ROOT, 'node_modules'),
|
|
129
|
-
cacheDir: join(
|
|
130
|
-
tmpdir(),
|
|
131
|
-
`deepline-play-artifacts-v${PLAY_BUNDLE_CACHE_VERSION}`,
|
|
132
|
-
),
|
|
129
|
+
cacheDir: join(tmpdir(), PLAY_BUNDLE_CACHE_NAMESPACE),
|
|
133
130
|
sdkSourceRoot: SDK_SOURCE_ROOT,
|
|
134
131
|
sdkPackageJson: SDK_PACKAGE_JSON,
|
|
135
132
|
sdkEntryFile: SDK_ENTRY_FILE,
|
|
@@ -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.101',
|
|
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: {
|
|
@@ -78,7 +78,11 @@ export type ProviderMonitorBatchOperationRequest = {
|
|
|
78
78
|
* this origin instead of recomputing it from a later deployment.
|
|
79
79
|
*/
|
|
80
80
|
callbackBaseUrl?: string;
|
|
81
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* A closed, platform-owned reason for a policy teardown. Omit it for a
|
|
83
|
+
* customer-owned exact-key or Fleet teardown: absence is the durable
|
|
84
|
+
* representation of the customer's own inactive intent.
|
|
85
|
+
*/
|
|
82
86
|
deactivationReason?: string;
|
|
83
87
|
};
|
|
84
88
|
|
|
@@ -204,13 +208,11 @@ export function validateProviderMonitorBatchOperationRequest(
|
|
|
204
208
|
if (request.kind === 'converge') {
|
|
205
209
|
throw new Error('Batch converge requires exactly one Fleet scope.');
|
|
206
210
|
}
|
|
207
|
-
if (
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (request.kind === 'deactivate') {
|
|
213
|
-
requireMonitorDeactivationReason(request.deactivationReason!);
|
|
211
|
+
if (
|
|
212
|
+
request.kind === 'deactivate' &&
|
|
213
|
+
request.deactivationReason !== undefined
|
|
214
|
+
) {
|
|
215
|
+
requireMonitorDeactivationReason(request.deactivationReason);
|
|
214
216
|
}
|
|
215
217
|
return {
|
|
216
218
|
...request,
|
|
@@ -59,15 +59,11 @@ import { validatePlaySourceFilesHaveNoInlineSecrets } from '../secret-guardrails
|
|
|
59
59
|
import { MAX_PLAY_BUNDLE_BYTES } from './limits';
|
|
60
60
|
import { PLAY_AUTHORING_CONTRACT_EDITION } from '../authoring-contract';
|
|
61
61
|
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
const PLAY_ARTIFACT_CACHE_DIR = join(
|
|
68
|
-
tmpdir(),
|
|
69
|
-
`deepline-play-artifacts-v${PLAY_BUNDLE_CACHE_VERSION}`,
|
|
70
|
-
);
|
|
62
|
+
// Local bundle caches may be discarded when compiler-only analysis changes;
|
|
63
|
+
// this descriptive namespace is not a runtime wire or schema version.
|
|
64
|
+
export const PLAY_BUNDLE_CACHE_NAMESPACE =
|
|
65
|
+
'deepline-play-artifacts-docflow-jsdoc';
|
|
66
|
+
const PLAY_ARTIFACT_CACHE_DIR = join(tmpdir(), PLAY_BUNDLE_CACHE_NAMESPACE);
|
|
71
67
|
const PLAY_PROXY_NAMESPACE = 'deepline-play-runtime-ref';
|
|
72
68
|
const SOURCE_EXTENSIONS = [
|
|
73
69
|
'.ts',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { tmpdir } from 'node:os';
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
|
-
import type
|
|
3
|
+
import { PLAY_BUNDLE_CACHE_NAMESPACE, type PlayBundlingAdapter } from './index';
|
|
4
4
|
import { discoverPackagedLocalFiles } from '../local-file-discovery';
|
|
5
5
|
|
|
6
6
|
/** Repository source bundling shared by the API and the deploy worker.
|
|
@@ -15,7 +15,7 @@ export function createRepositoryPlayBundlingAdapter(options: {
|
|
|
15
15
|
projectRoot: options.projectRoot,
|
|
16
16
|
sourceIdentityRoot: options.sourceIdentityRoot,
|
|
17
17
|
nodeModulesDir: resolve(options.projectRoot, 'node_modules'),
|
|
18
|
-
cacheDir: join(tmpdir(),
|
|
18
|
+
cacheDir: join(tmpdir(), PLAY_BUNDLE_CACHE_NAMESPACE),
|
|
19
19
|
sdkSourceRoot,
|
|
20
20
|
sdkPackageJson: resolve(sdkSourceRoot, '..', 'package.json'),
|
|
21
21
|
sdkEntryFile: resolve(sdkSourceRoot, 'index.ts'),
|
|
@@ -617,7 +617,7 @@ function levenshtein(left: string, right: string): number {
|
|
|
617
617
|
return row[right.length]!;
|
|
618
618
|
}
|
|
619
619
|
|
|
620
|
-
const
|
|
620
|
+
const JSDOC_BLOCK = /\/\*\*([\s\S]*?)\*\//g;
|
|
621
621
|
/**
|
|
622
622
|
* What a block header may name: an export name, or the play's own kebab-case
|
|
623
623
|
* name. Hyphens are in the set for the second — `@mermaid name-to-linkedin-url-
|
|
@@ -935,9 +935,12 @@ export function parsePlayDocflowFile(
|
|
|
935
935
|
syntax: NonNullable<PlayDocflow['syntax']>;
|
|
936
936
|
body: string;
|
|
937
937
|
}> = [];
|
|
938
|
-
|
|
939
|
-
for (const match of sourceCode.matchAll(
|
|
940
|
-
|
|
938
|
+
JSDOC_BLOCK.lastIndex = 0;
|
|
939
|
+
for (const match of sourceCode.matchAll(JSDOC_BLOCK)) {
|
|
940
|
+
const cleanedBody = cleanBlockBody(match[1]!);
|
|
941
|
+
const mermaid = /^@mermaid(?:[ \t]+|\r?\n|$)([\s\S]*)$/.exec(cleanedBody);
|
|
942
|
+
if (!mermaid) continue;
|
|
943
|
+
rawBlocks.push({ syntax: 'mermaid', body: mermaid[1]!.trim() });
|
|
941
944
|
}
|
|
942
945
|
if (rawBlocks.length === 0) return { blocks: [], bindings: [], errors };
|
|
943
946
|
|
|
@@ -2,6 +2,10 @@ const REDACTED_VALUE = '[REDACTED]';
|
|
|
2
2
|
|
|
3
3
|
type SecretRedactionOptions = {
|
|
4
4
|
redactHighEntropy?: boolean;
|
|
5
|
+
/** Preserve only known pagination cursor fields in authenticated result data. */
|
|
6
|
+
keyPolicy?: 'strict' | 'public-result';
|
|
7
|
+
/** Replace sample cursor values with a non-capability-bearing placeholder. */
|
|
8
|
+
placeholderContinuationValues?: boolean;
|
|
5
9
|
};
|
|
6
10
|
|
|
7
11
|
const SENSITIVE_KEY_PATTERNS = [
|
|
@@ -16,6 +20,55 @@ const SENSITIVE_KEY_PATTERNS = [
|
|
|
16
20
|
/private/i,
|
|
17
21
|
];
|
|
18
22
|
|
|
23
|
+
const PUBLIC_RESULT_CURSOR_KEYS = new Set([
|
|
24
|
+
'cursor',
|
|
25
|
+
'encoded_cursor',
|
|
26
|
+
'encodedCursor',
|
|
27
|
+
'next_cursor',
|
|
28
|
+
'nextCursor',
|
|
29
|
+
'scroll_token',
|
|
30
|
+
'scrollToken',
|
|
31
|
+
'pagination_token',
|
|
32
|
+
'paginationToken',
|
|
33
|
+
'continuation_token',
|
|
34
|
+
'continuationToken',
|
|
35
|
+
'page_token',
|
|
36
|
+
'pageToken',
|
|
37
|
+
'next_page_token',
|
|
38
|
+
'nextPageToken',
|
|
39
|
+
'previous_page_token',
|
|
40
|
+
'previousPageToken',
|
|
41
|
+
'prev_page_token',
|
|
42
|
+
'prevPageToken',
|
|
43
|
+
'next_token',
|
|
44
|
+
'nextToken',
|
|
45
|
+
'offset_token',
|
|
46
|
+
'offsetToken',
|
|
47
|
+
]);
|
|
48
|
+
|
|
49
|
+
const PUBLIC_RESULT_TOKEN_EXPIRY_KEYS = new Set([
|
|
50
|
+
'page_token_expiry',
|
|
51
|
+
'pageTokenExpiry',
|
|
52
|
+
]);
|
|
53
|
+
|
|
54
|
+
const PUBLIC_RESULT_TOKEN_COUNT_KEYS = new Set([
|
|
55
|
+
'input_tokens',
|
|
56
|
+
'inputTokens',
|
|
57
|
+
'output_tokens',
|
|
58
|
+
'outputTokens',
|
|
59
|
+
'total_tokens',
|
|
60
|
+
'totalTokens',
|
|
61
|
+
'tokens_used',
|
|
62
|
+
'tokensUsed',
|
|
63
|
+
]);
|
|
64
|
+
|
|
65
|
+
const PAGINATION_CONTAINER_KEYS = new Set([
|
|
66
|
+
'pagination',
|
|
67
|
+
'paging',
|
|
68
|
+
'page_info',
|
|
69
|
+
'pageInfo',
|
|
70
|
+
]);
|
|
71
|
+
|
|
19
72
|
const SAFE_IDENTIFIER_KEYS = new Set([
|
|
20
73
|
'artifactHash',
|
|
21
74
|
'artifactHashes',
|
|
@@ -135,6 +188,39 @@ function shouldRedactKey(key: string) {
|
|
|
135
188
|
return SENSITIVE_KEY_PATTERNS.some((pattern) => pattern.test(key));
|
|
136
189
|
}
|
|
137
190
|
|
|
191
|
+
function isPublicResultCursorKey(
|
|
192
|
+
key: string,
|
|
193
|
+
path: readonly string[],
|
|
194
|
+
): boolean {
|
|
195
|
+
return (
|
|
196
|
+
PUBLIC_RESULT_CURSOR_KEYS.has(key) ||
|
|
197
|
+
(key === 'token' && PAGINATION_CONTAINER_KEYS.has(path.at(-1) ?? ''))
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function isPublicResultSafeTokenKey(
|
|
202
|
+
key: string,
|
|
203
|
+
path: readonly string[],
|
|
204
|
+
value: unknown,
|
|
205
|
+
): boolean {
|
|
206
|
+
if (isPublicResultCursorKey(key, path)) return true;
|
|
207
|
+
if (value === null) {
|
|
208
|
+
return (
|
|
209
|
+
PUBLIC_RESULT_TOKEN_EXPIRY_KEYS.has(key) ||
|
|
210
|
+
PUBLIC_RESULT_TOKEN_COUNT_KEYS.has(key)
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
if (PUBLIC_RESULT_TOKEN_COUNT_KEYS.has(key)) {
|
|
214
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0;
|
|
215
|
+
}
|
|
216
|
+
return (
|
|
217
|
+
PUBLIC_RESULT_TOKEN_EXPIRY_KEYS.has(key) &&
|
|
218
|
+
typeof value === 'string' &&
|
|
219
|
+
/^\d{4}-\d{2}-\d{2}T/.test(value) &&
|
|
220
|
+
Number.isFinite(Date.parse(value))
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
138
224
|
function maybeRedactString(value: string, options: SecretRedactionOptions) {
|
|
139
225
|
if (EXPLICIT_SECRET_VALUE_PATTERNS.some((pattern) => pattern.test(value))) {
|
|
140
226
|
return REDACTED_VALUE;
|
|
@@ -171,6 +257,21 @@ export function redactSecretsInValue<T>(
|
|
|
171
257
|
if (parentKey && SAFE_IDENTIFIER_KEYS.has(parentKey)) {
|
|
172
258
|
return value as T;
|
|
173
259
|
}
|
|
260
|
+
if (
|
|
261
|
+
parentKey &&
|
|
262
|
+
options.keyPolicy === 'public-result' &&
|
|
263
|
+
isPublicResultSafeTokenKey(parentKey, [], value)
|
|
264
|
+
) {
|
|
265
|
+
const redacted = maybeRedactString(value, options);
|
|
266
|
+
return (
|
|
267
|
+
options.placeholderContinuationValues &&
|
|
268
|
+
isPublicResultCursorKey(parentKey, []) &&
|
|
269
|
+
redacted !== REDACTED_VALUE &&
|
|
270
|
+
redacted.length > 0
|
|
271
|
+
? '[PAGINATION_CURSOR]'
|
|
272
|
+
: redacted
|
|
273
|
+
) as T;
|
|
274
|
+
}
|
|
174
275
|
if (parentKey && shouldRedactKey(parentKey)) {
|
|
175
276
|
return REDACTED_VALUE as T;
|
|
176
277
|
}
|
|
@@ -185,7 +286,8 @@ export function redactSecretsInValue<T>(
|
|
|
185
286
|
source: Container;
|
|
186
287
|
target: Container;
|
|
187
288
|
parentKey?: string;
|
|
188
|
-
|
|
289
|
+
path: string[];
|
|
290
|
+
}> = [{ source: value as Container, target: root, parentKey, path: [] }];
|
|
189
291
|
|
|
190
292
|
const redactNestedValue = (
|
|
191
293
|
item: unknown,
|
|
@@ -196,7 +298,9 @@ export function redactSecretsInValue<T>(
|
|
|
196
298
|
return REDACTED_VALUE;
|
|
197
299
|
}
|
|
198
300
|
if (itemParentKey && SAFE_IDENTIFIER_KEYS.has(itemParentKey)) return item;
|
|
199
|
-
if (itemParentKey && shouldRedactKey(itemParentKey))
|
|
301
|
+
if (itemParentKey && shouldRedactKey(itemParentKey)) {
|
|
302
|
+
return REDACTED_VALUE;
|
|
303
|
+
}
|
|
200
304
|
return maybeRedactString(item, options);
|
|
201
305
|
};
|
|
202
306
|
|
|
@@ -206,6 +310,24 @@ export function redactSecretsInValue<T>(
|
|
|
206
310
|
const sourceIsArray = Array.isArray(current.source);
|
|
207
311
|
for (const [key, item] of Object.entries(current.source)) {
|
|
208
312
|
const itemParentKey = sourceIsArray ? current.parentKey : key;
|
|
313
|
+
if (
|
|
314
|
+
!sourceIsArray &&
|
|
315
|
+
options.keyPolicy === 'public-result' &&
|
|
316
|
+
isPublicResultSafeTokenKey(key, current.path, item) &&
|
|
317
|
+
(!item || typeof item !== 'object')
|
|
318
|
+
) {
|
|
319
|
+
const redacted =
|
|
320
|
+
typeof item === 'string' ? maybeRedactString(item, options) : item;
|
|
321
|
+
(current.target as Record<string, unknown>)[key] =
|
|
322
|
+
options.placeholderContinuationValues &&
|
|
323
|
+
isPublicResultCursorKey(key, current.path) &&
|
|
324
|
+
typeof redacted === 'string' &&
|
|
325
|
+
redacted !== REDACTED_VALUE &&
|
|
326
|
+
redacted.length > 0
|
|
327
|
+
? '[PAGINATION_CURSOR]'
|
|
328
|
+
: redacted;
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
209
331
|
if (!sourceIsArray && shouldRedactKey(key)) {
|
|
210
332
|
(current.target as Record<string, unknown>)[key] = REDACTED_VALUE;
|
|
211
333
|
continue;
|
|
@@ -217,6 +339,7 @@ export function redactSecretsInValue<T>(
|
|
|
217
339
|
source: item as Container,
|
|
218
340
|
target: nestedTarget,
|
|
219
341
|
parentKey: itemParentKey,
|
|
342
|
+
path: sourceIsArray ? current.path : [...current.path, key],
|
|
220
343
|
});
|
|
221
344
|
continue;
|
|
222
345
|
}
|
|
@@ -242,6 +365,18 @@ export function redactSecretsInCustomerValue<T>(
|
|
|
242
365
|
return redactSecretsInValue(value, parentKey, { redactHighEntropy: false });
|
|
243
366
|
}
|
|
244
367
|
|
|
368
|
+
/** Redaction for authenticated successful provider or Play result data. */
|
|
369
|
+
export function redactSecretsInPublicResultValue<T>(
|
|
370
|
+
value: T,
|
|
371
|
+
options: { placeholderContinuationValues?: boolean } = {},
|
|
372
|
+
): T {
|
|
373
|
+
return redactSecretsInValue(value, undefined, {
|
|
374
|
+
redactHighEntropy: false,
|
|
375
|
+
keyPolicy: 'public-result',
|
|
376
|
+
placeholderContinuationValues: options.placeholderContinuationValues,
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
|
|
245
380
|
export function redactSecretsInJsonText(
|
|
246
381
|
text: string,
|
|
247
382
|
options: SecretRedactionOptions = {},
|
|
@@ -265,3 +400,11 @@ export function redactSecretsInJsonText(
|
|
|
265
400
|
export function redactSecretsInCustomerJsonText(text: string) {
|
|
266
401
|
return redactSecretsInJsonText(text, { redactHighEntropy: false });
|
|
267
402
|
}
|
|
403
|
+
|
|
404
|
+
/** Redaction for serialized authenticated provider or Play result data. */
|
|
405
|
+
export function redactSecretsInPublicResultJsonText(text: string) {
|
|
406
|
+
return redactSecretsInJsonText(text, {
|
|
407
|
+
redactHighEntropy: false,
|
|
408
|
+
keyPolicy: 'public-result',
|
|
409
|
+
});
|
|
410
|
+
}
|
package/dist/cli/index.js
CHANGED
|
@@ -1298,7 +1298,7 @@ var SDK_RELEASE = {
|
|
|
1298
1298
|
// getters keep their established compatibility behavior.
|
|
1299
1299
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
1300
1300
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
1301
|
-
version: "0.3.
|
|
1301
|
+
version: "0.3.101",
|
|
1302
1302
|
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.",
|
|
1303
1303
|
packageCapabilities: {
|
|
1304
1304
|
updatePreferences: 1
|
|
@@ -9780,7 +9780,10 @@ Examples:
|
|
|
9780
9780
|
deepline auth register --wait no
|
|
9781
9781
|
deepline auth register --auth-scope folder --wait no
|
|
9782
9782
|
`
|
|
9783
|
-
).option(
|
|
9783
|
+
).option(
|
|
9784
|
+
"--org-name <name>",
|
|
9785
|
+
"Use this workspace, or create a separate one with this name"
|
|
9786
|
+
).option(
|
|
9784
9787
|
"--org-id <id>",
|
|
9785
9788
|
"Bind to this workspace directly, skipping the browser picker"
|
|
9786
9789
|
).option("--agent-name <name>", "Agent name to register").option("--wait <mode>", "Wait mode: auto, yes, or no", "auto").option("--no-wait", "Alias for --wait no").option(
|
|
@@ -10180,7 +10183,7 @@ async function handleUsage(options) {
|
|
|
10180
10183
|
`Balance: ${payload.balance ?? "(unknown)"}`,
|
|
10181
10184
|
`Last 30 days usage: ${last30Usage ?? "(unknown)"}`,
|
|
10182
10185
|
...Number.isFinite(temporaryHolds) && temporaryHolds > 0 ? [`Temporary holds: ${temporaryHolds}`] : [],
|
|
10183
|
-
`Monthly
|
|
10186
|
+
`Monthly usage cap: ${quota.enabled ? quota.monthly_credits_limit ?? "(unknown)" : "off"}`,
|
|
10184
10187
|
...options.runId && recent.run_id ? [
|
|
10185
10188
|
`Run spend: ${(payload.run ?? {}).spent_credits ?? "(unknown)"} Deepline Credits`
|
|
10186
10189
|
] : [],
|
|
@@ -10212,9 +10215,9 @@ async function handleLimit(options) {
|
|
|
10212
10215
|
"/api/v2/billing/limit"
|
|
10213
10216
|
);
|
|
10214
10217
|
const lines = payload.enabled ? [
|
|
10215
|
-
`Monthly
|
|
10216
|
-
"Enforcement:
|
|
10217
|
-
] : ["Monthly
|
|
10218
|
+
`Monthly usage cap: ${payload.monthly_credits_limit ?? "(unknown)"}`,
|
|
10219
|
+
"Enforcement: checked before new calls; in-flight work can exceed the cap."
|
|
10220
|
+
] : ["Monthly usage cap: off"];
|
|
10218
10221
|
printCommandEnvelope(
|
|
10219
10222
|
{
|
|
10220
10223
|
...payload,
|
|
@@ -10236,7 +10239,7 @@ async function handleSetLimit(credits, options) {
|
|
|
10236
10239
|
sections: [
|
|
10237
10240
|
{
|
|
10238
10241
|
title: "billing limit",
|
|
10239
|
-
lines: [`Monthly
|
|
10242
|
+
lines: [`Monthly usage cap set to ${credits} credits.`]
|
|
10240
10243
|
}
|
|
10241
10244
|
]
|
|
10242
10245
|
}
|
|
@@ -10256,7 +10259,7 @@ async function handleLimitOff(options) {
|
|
|
10256
10259
|
sections: [
|
|
10257
10260
|
{
|
|
10258
10261
|
title: "billing limit",
|
|
10259
|
-
lines: ["Monthly
|
|
10262
|
+
lines: ["Monthly usage cap is now off."]
|
|
10260
10263
|
}
|
|
10261
10264
|
]
|
|
10262
10265
|
}
|
|
@@ -11097,36 +11100,36 @@ Examples:
|
|
|
11097
11100
|
"--cursor <cursor>",
|
|
11098
11101
|
"Recent-call cursor from the previous response"
|
|
11099
11102
|
).option("--run-id <run_id>", "Show recent usage for one play run").option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleUsage);
|
|
11100
|
-
billing.command("limit").description("Show configured monthly
|
|
11103
|
+
billing.command("limit").description("Show configured monthly usage cap.").addHelpText(
|
|
11101
11104
|
"after",
|
|
11102
11105
|
`
|
|
11103
11106
|
Notes:
|
|
11104
|
-
Read-only. Shows whether monthly workspace
|
|
11105
|
-
|
|
11107
|
+
Read-only. Shows whether monthly workspace usage cap is enabled.
|
|
11108
|
+
New calls are checked against this usage cap, separately from wallet funding.
|
|
11106
11109
|
|
|
11107
11110
|
Examples:
|
|
11108
11111
|
deepline billing limit
|
|
11109
11112
|
deepline billing limit --json
|
|
11110
11113
|
`
|
|
11111
11114
|
).option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleLimit);
|
|
11112
|
-
billing.command("set-limit").description("Set monthly
|
|
11115
|
+
billing.command("set-limit").description("Set monthly usage cap.").addHelpText(
|
|
11113
11116
|
"after",
|
|
11114
11117
|
`
|
|
11115
11118
|
Notes:
|
|
11116
11119
|
Mutates workspace billing settings. The argument is a Deepline credit amount,
|
|
11117
|
-
not dollars and not provider credits.
|
|
11118
|
-
|
|
11120
|
+
not dollars and not provider credits. New calls are checked against the cap;
|
|
11121
|
+
in-flight work can still finish and exceed it. Buying credits does not reset it.
|
|
11119
11122
|
|
|
11120
11123
|
Examples:
|
|
11121
11124
|
deepline billing set-limit 500
|
|
11122
11125
|
deepline billing set-limit 500 --json
|
|
11123
11126
|
`
|
|
11124
11127
|
).argument("<credits>", "Monthly credits limit").option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleSetLimit);
|
|
11125
|
-
billing.command("off").description("Disable monthly
|
|
11128
|
+
billing.command("off").description("Disable monthly usage cap.").addHelpText(
|
|
11126
11129
|
"after",
|
|
11127
11130
|
`
|
|
11128
11131
|
Notes:
|
|
11129
|
-
Mutates workspace billing settings by removing monthly Deepline
|
|
11132
|
+
Mutates workspace billing settings by removing monthly Deepline usage cap.
|
|
11130
11133
|
|
|
11131
11134
|
Examples:
|
|
11132
11135
|
deepline billing off
|
|
@@ -16555,11 +16558,8 @@ function collectInlineSecretFindings(sourceCode) {
|
|
|
16555
16558
|
var MAX_PLAY_BUNDLE_BYTES = 30 * 1024 * 1024;
|
|
16556
16559
|
|
|
16557
16560
|
// ../plays/bundling/index.ts
|
|
16558
|
-
var
|
|
16559
|
-
var PLAY_ARTIFACT_CACHE_DIR = (0, import_node_path11.join)(
|
|
16560
|
-
(0, import_node_os7.tmpdir)(),
|
|
16561
|
-
`deepline-play-artifacts-v${PLAY_BUNDLE_CACHE_VERSION}`
|
|
16562
|
-
);
|
|
16561
|
+
var PLAY_BUNDLE_CACHE_NAMESPACE = "deepline-play-artifacts-docflow-jsdoc";
|
|
16562
|
+
var PLAY_ARTIFACT_CACHE_DIR = (0, import_node_path11.join)((0, import_node_os7.tmpdir)(), PLAY_BUNDLE_CACHE_NAMESPACE);
|
|
16563
16563
|
var NODE_BUILTIN_SET = new Set(
|
|
16564
16564
|
import_node_module.builtinModules.flatMap(
|
|
16565
16565
|
(name) => name.startsWith("node:") ? [name, name.slice(5)] : [name, `node:${name}`]
|
|
@@ -35399,6 +35399,28 @@ function monitorBatchScope(options, kind) {
|
|
|
35399
35399
|
function monitorBatchIdempotencyKey(kind, value) {
|
|
35400
35400
|
return value?.trim() || `monitor-batch-${kind}-${(0, import_node_crypto8.randomUUID)()}`;
|
|
35401
35401
|
}
|
|
35402
|
+
function legacyDryRunManifest(raw) {
|
|
35403
|
+
let parsed;
|
|
35404
|
+
try {
|
|
35405
|
+
parsed = JSON.parse(raw);
|
|
35406
|
+
} catch {
|
|
35407
|
+
return raw;
|
|
35408
|
+
}
|
|
35409
|
+
const object = asRecord2(parsed);
|
|
35410
|
+
if (object && asString(object.key) && asString(object.tool)) {
|
|
35411
|
+
return raw;
|
|
35412
|
+
}
|
|
35413
|
+
const isBatchDocument = Array.isArray(parsed) || object !== null && (Object.prototype.hasOwnProperty.call(object, "monitors") || object.kind === "batch");
|
|
35414
|
+
if (!isBatchDocument) return raw;
|
|
35415
|
+
const lint = lintMonitorBatchInput(parsed);
|
|
35416
|
+
if (!lint.normalized) {
|
|
35417
|
+
throw new MonitorsUsageError(
|
|
35418
|
+
lint.issues.filter((issue) => issue.severity === "error").map((issue) => `${issue.path || "batch"}: ${issue.message}`).join("; ")
|
|
35419
|
+
);
|
|
35420
|
+
}
|
|
35421
|
+
return `${lint.normalized.monitors.map((monitor) => JSON.stringify(monitor)).join("\n")}
|
|
35422
|
+
`;
|
|
35423
|
+
}
|
|
35402
35424
|
async function handleMonitorBatchDeploy(options) {
|
|
35403
35425
|
if (!options.file?.trim()) {
|
|
35404
35426
|
throw new MonitorsUsageError(
|
|
@@ -35421,6 +35443,9 @@ async function handleMonitorBatchDeploy(options) {
|
|
|
35421
35443
|
if (!manifestNdjson.trim()) {
|
|
35422
35444
|
throw new MonitorsUsageError("Monitor batch manifest is empty.");
|
|
35423
35445
|
}
|
|
35446
|
+
if (options.dryRun === true) {
|
|
35447
|
+
manifestNdjson = legacyDryRunManifest(manifestNdjson);
|
|
35448
|
+
}
|
|
35424
35449
|
const idempotencyKey = monitorBatchIdempotencyKey(
|
|
35425
35450
|
"deploy",
|
|
35426
35451
|
options.idempotencyKey
|
|
@@ -35450,9 +35475,10 @@ async function handleMonitorBatch(kind, options) {
|
|
|
35450
35475
|
`monitors batch ${kind} changes provider monitors asynchronously. Preview with --dry-run, then confirm with --yes.`
|
|
35451
35476
|
);
|
|
35452
35477
|
}
|
|
35453
|
-
|
|
35478
|
+
const scope = monitorBatchScope(options, kind);
|
|
35479
|
+
if (kind === "deactivate" && scope.kind === "target" && !options.reason?.trim()) {
|
|
35454
35480
|
throw new MonitorsUsageError(
|
|
35455
|
-
"monitors batch deactivate requires --reason (for example insufficient_balance or billing_failure)."
|
|
35481
|
+
"monitors batch deactivate --target requires --reason (for example insufficient_balance or billing_failure). Omit --reason with --keys for a customer-requested teardown."
|
|
35456
35482
|
);
|
|
35457
35483
|
}
|
|
35458
35484
|
const idempotencyKey = monitorBatchIdempotencyKey(
|
|
@@ -35461,7 +35487,7 @@ async function handleMonitorBatch(kind, options) {
|
|
|
35461
35487
|
);
|
|
35462
35488
|
const result = await new DeeplineClient().monitors.batch.submit({
|
|
35463
35489
|
kind,
|
|
35464
|
-
scope
|
|
35490
|
+
scope,
|
|
35465
35491
|
dryRun: options.dryRun === true,
|
|
35466
35492
|
...options.reason?.trim() ? { deactivationReason: options.reason.trim() } : {},
|
|
35467
35493
|
idempotencyKey
|
|
@@ -35666,7 +35692,10 @@ Examples:
|
|
|
35666
35692
|
batch.command("deactivate").description(
|
|
35667
35693
|
"Durably deactivate a selection through provider batch deletes."
|
|
35668
35694
|
)
|
|
35669
|
-
).
|
|
35695
|
+
).option(
|
|
35696
|
+
"--reason <reason>",
|
|
35697
|
+
"Declared policy reason; required with --target and omitted for a customer-requested --keys teardown"
|
|
35698
|
+
).option("--yes", "Confirm the asynchronous provider deactivation")
|
|
35670
35699
|
).action(
|
|
35671
35700
|
monitorsAction(
|
|
35672
35701
|
(options) => handleMonitorBatch("deactivate", options)
|
package/dist/cli/index.mjs
CHANGED
|
@@ -1271,7 +1271,7 @@ var SDK_RELEASE = {
|
|
|
1271
1271
|
// getters keep their established compatibility behavior.
|
|
1272
1272
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
1273
1273
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
1274
|
-
version: "0.3.
|
|
1274
|
+
version: "0.3.101",
|
|
1275
1275
|
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.",
|
|
1276
1276
|
packageCapabilities: {
|
|
1277
1277
|
updatePreferences: 1
|
|
@@ -9765,7 +9765,10 @@ Examples:
|
|
|
9765
9765
|
deepline auth register --wait no
|
|
9766
9766
|
deepline auth register --auth-scope folder --wait no
|
|
9767
9767
|
`
|
|
9768
|
-
).option(
|
|
9768
|
+
).option(
|
|
9769
|
+
"--org-name <name>",
|
|
9770
|
+
"Use this workspace, or create a separate one with this name"
|
|
9771
|
+
).option(
|
|
9769
9772
|
"--org-id <id>",
|
|
9770
9773
|
"Bind to this workspace directly, skipping the browser picker"
|
|
9771
9774
|
).option("--agent-name <name>", "Agent name to register").option("--wait <mode>", "Wait mode: auto, yes, or no", "auto").option("--no-wait", "Alias for --wait no").option(
|
|
@@ -10165,7 +10168,7 @@ async function handleUsage(options) {
|
|
|
10165
10168
|
`Balance: ${payload.balance ?? "(unknown)"}`,
|
|
10166
10169
|
`Last 30 days usage: ${last30Usage ?? "(unknown)"}`,
|
|
10167
10170
|
...Number.isFinite(temporaryHolds) && temporaryHolds > 0 ? [`Temporary holds: ${temporaryHolds}`] : [],
|
|
10168
|
-
`Monthly
|
|
10171
|
+
`Monthly usage cap: ${quota.enabled ? quota.monthly_credits_limit ?? "(unknown)" : "off"}`,
|
|
10169
10172
|
...options.runId && recent.run_id ? [
|
|
10170
10173
|
`Run spend: ${(payload.run ?? {}).spent_credits ?? "(unknown)"} Deepline Credits`
|
|
10171
10174
|
] : [],
|
|
@@ -10197,9 +10200,9 @@ async function handleLimit(options) {
|
|
|
10197
10200
|
"/api/v2/billing/limit"
|
|
10198
10201
|
);
|
|
10199
10202
|
const lines = payload.enabled ? [
|
|
10200
|
-
`Monthly
|
|
10201
|
-
"Enforcement:
|
|
10202
|
-
] : ["Monthly
|
|
10203
|
+
`Monthly usage cap: ${payload.monthly_credits_limit ?? "(unknown)"}`,
|
|
10204
|
+
"Enforcement: checked before new calls; in-flight work can exceed the cap."
|
|
10205
|
+
] : ["Monthly usage cap: off"];
|
|
10203
10206
|
printCommandEnvelope(
|
|
10204
10207
|
{
|
|
10205
10208
|
...payload,
|
|
@@ -10221,7 +10224,7 @@ async function handleSetLimit(credits, options) {
|
|
|
10221
10224
|
sections: [
|
|
10222
10225
|
{
|
|
10223
10226
|
title: "billing limit",
|
|
10224
|
-
lines: [`Monthly
|
|
10227
|
+
lines: [`Monthly usage cap set to ${credits} credits.`]
|
|
10225
10228
|
}
|
|
10226
10229
|
]
|
|
10227
10230
|
}
|
|
@@ -10241,7 +10244,7 @@ async function handleLimitOff(options) {
|
|
|
10241
10244
|
sections: [
|
|
10242
10245
|
{
|
|
10243
10246
|
title: "billing limit",
|
|
10244
|
-
lines: ["Monthly
|
|
10247
|
+
lines: ["Monthly usage cap is now off."]
|
|
10245
10248
|
}
|
|
10246
10249
|
]
|
|
10247
10250
|
}
|
|
@@ -11082,36 +11085,36 @@ Examples:
|
|
|
11082
11085
|
"--cursor <cursor>",
|
|
11083
11086
|
"Recent-call cursor from the previous response"
|
|
11084
11087
|
).option("--run-id <run_id>", "Show recent usage for one play run").option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleUsage);
|
|
11085
|
-
billing.command("limit").description("Show configured monthly
|
|
11088
|
+
billing.command("limit").description("Show configured monthly usage cap.").addHelpText(
|
|
11086
11089
|
"after",
|
|
11087
11090
|
`
|
|
11088
11091
|
Notes:
|
|
11089
|
-
Read-only. Shows whether monthly workspace
|
|
11090
|
-
|
|
11092
|
+
Read-only. Shows whether monthly workspace usage cap is enabled.
|
|
11093
|
+
New calls are checked against this usage cap, separately from wallet funding.
|
|
11091
11094
|
|
|
11092
11095
|
Examples:
|
|
11093
11096
|
deepline billing limit
|
|
11094
11097
|
deepline billing limit --json
|
|
11095
11098
|
`
|
|
11096
11099
|
).option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleLimit);
|
|
11097
|
-
billing.command("set-limit").description("Set monthly
|
|
11100
|
+
billing.command("set-limit").description("Set monthly usage cap.").addHelpText(
|
|
11098
11101
|
"after",
|
|
11099
11102
|
`
|
|
11100
11103
|
Notes:
|
|
11101
11104
|
Mutates workspace billing settings. The argument is a Deepline credit amount,
|
|
11102
|
-
not dollars and not provider credits.
|
|
11103
|
-
|
|
11105
|
+
not dollars and not provider credits. New calls are checked against the cap;
|
|
11106
|
+
in-flight work can still finish and exceed it. Buying credits does not reset it.
|
|
11104
11107
|
|
|
11105
11108
|
Examples:
|
|
11106
11109
|
deepline billing set-limit 500
|
|
11107
11110
|
deepline billing set-limit 500 --json
|
|
11108
11111
|
`
|
|
11109
11112
|
).argument("<credits>", "Monthly credits limit").option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleSetLimit);
|
|
11110
|
-
billing.command("off").description("Disable monthly
|
|
11113
|
+
billing.command("off").description("Disable monthly usage cap.").addHelpText(
|
|
11111
11114
|
"after",
|
|
11112
11115
|
`
|
|
11113
11116
|
Notes:
|
|
11114
|
-
Mutates workspace billing settings by removing monthly Deepline
|
|
11117
|
+
Mutates workspace billing settings by removing monthly Deepline usage cap.
|
|
11115
11118
|
|
|
11116
11119
|
Examples:
|
|
11117
11120
|
deepline billing off
|
|
@@ -16598,11 +16601,8 @@ function collectInlineSecretFindings(sourceCode) {
|
|
|
16598
16601
|
var MAX_PLAY_BUNDLE_BYTES = 30 * 1024 * 1024;
|
|
16599
16602
|
|
|
16600
16603
|
// ../plays/bundling/index.ts
|
|
16601
|
-
var
|
|
16602
|
-
var PLAY_ARTIFACT_CACHE_DIR = join7(
|
|
16603
|
-
tmpdir2(),
|
|
16604
|
-
`deepline-play-artifacts-v${PLAY_BUNDLE_CACHE_VERSION}`
|
|
16605
|
-
);
|
|
16604
|
+
var PLAY_BUNDLE_CACHE_NAMESPACE = "deepline-play-artifacts-docflow-jsdoc";
|
|
16605
|
+
var PLAY_ARTIFACT_CACHE_DIR = join7(tmpdir2(), PLAY_BUNDLE_CACHE_NAMESPACE);
|
|
16606
16606
|
var NODE_BUILTIN_SET = new Set(
|
|
16607
16607
|
builtinModules.flatMap(
|
|
16608
16608
|
(name) => name.startsWith("node:") ? [name, name.slice(5)] : [name, `node:${name}`]
|
|
@@ -35456,6 +35456,28 @@ function monitorBatchScope(options, kind) {
|
|
|
35456
35456
|
function monitorBatchIdempotencyKey(kind, value) {
|
|
35457
35457
|
return value?.trim() || `monitor-batch-${kind}-${randomUUID5()}`;
|
|
35458
35458
|
}
|
|
35459
|
+
function legacyDryRunManifest(raw) {
|
|
35460
|
+
let parsed;
|
|
35461
|
+
try {
|
|
35462
|
+
parsed = JSON.parse(raw);
|
|
35463
|
+
} catch {
|
|
35464
|
+
return raw;
|
|
35465
|
+
}
|
|
35466
|
+
const object = asRecord2(parsed);
|
|
35467
|
+
if (object && asString(object.key) && asString(object.tool)) {
|
|
35468
|
+
return raw;
|
|
35469
|
+
}
|
|
35470
|
+
const isBatchDocument = Array.isArray(parsed) || object !== null && (Object.prototype.hasOwnProperty.call(object, "monitors") || object.kind === "batch");
|
|
35471
|
+
if (!isBatchDocument) return raw;
|
|
35472
|
+
const lint = lintMonitorBatchInput(parsed);
|
|
35473
|
+
if (!lint.normalized) {
|
|
35474
|
+
throw new MonitorsUsageError(
|
|
35475
|
+
lint.issues.filter((issue) => issue.severity === "error").map((issue) => `${issue.path || "batch"}: ${issue.message}`).join("; ")
|
|
35476
|
+
);
|
|
35477
|
+
}
|
|
35478
|
+
return `${lint.normalized.monitors.map((monitor) => JSON.stringify(monitor)).join("\n")}
|
|
35479
|
+
`;
|
|
35480
|
+
}
|
|
35459
35481
|
async function handleMonitorBatchDeploy(options) {
|
|
35460
35482
|
if (!options.file?.trim()) {
|
|
35461
35483
|
throw new MonitorsUsageError(
|
|
@@ -35478,6 +35500,9 @@ async function handleMonitorBatchDeploy(options) {
|
|
|
35478
35500
|
if (!manifestNdjson.trim()) {
|
|
35479
35501
|
throw new MonitorsUsageError("Monitor batch manifest is empty.");
|
|
35480
35502
|
}
|
|
35503
|
+
if (options.dryRun === true) {
|
|
35504
|
+
manifestNdjson = legacyDryRunManifest(manifestNdjson);
|
|
35505
|
+
}
|
|
35481
35506
|
const idempotencyKey = monitorBatchIdempotencyKey(
|
|
35482
35507
|
"deploy",
|
|
35483
35508
|
options.idempotencyKey
|
|
@@ -35507,9 +35532,10 @@ async function handleMonitorBatch(kind, options) {
|
|
|
35507
35532
|
`monitors batch ${kind} changes provider monitors asynchronously. Preview with --dry-run, then confirm with --yes.`
|
|
35508
35533
|
);
|
|
35509
35534
|
}
|
|
35510
|
-
|
|
35535
|
+
const scope = monitorBatchScope(options, kind);
|
|
35536
|
+
if (kind === "deactivate" && scope.kind === "target" && !options.reason?.trim()) {
|
|
35511
35537
|
throw new MonitorsUsageError(
|
|
35512
|
-
"monitors batch deactivate requires --reason (for example insufficient_balance or billing_failure)."
|
|
35538
|
+
"monitors batch deactivate --target requires --reason (for example insufficient_balance or billing_failure). Omit --reason with --keys for a customer-requested teardown."
|
|
35513
35539
|
);
|
|
35514
35540
|
}
|
|
35515
35541
|
const idempotencyKey = monitorBatchIdempotencyKey(
|
|
@@ -35518,7 +35544,7 @@ async function handleMonitorBatch(kind, options) {
|
|
|
35518
35544
|
);
|
|
35519
35545
|
const result = await new DeeplineClient().monitors.batch.submit({
|
|
35520
35546
|
kind,
|
|
35521
|
-
scope
|
|
35547
|
+
scope,
|
|
35522
35548
|
dryRun: options.dryRun === true,
|
|
35523
35549
|
...options.reason?.trim() ? { deactivationReason: options.reason.trim() } : {},
|
|
35524
35550
|
idempotencyKey
|
|
@@ -35723,7 +35749,10 @@ Examples:
|
|
|
35723
35749
|
batch.command("deactivate").description(
|
|
35724
35750
|
"Durably deactivate a selection through provider batch deletes."
|
|
35725
35751
|
)
|
|
35726
|
-
).
|
|
35752
|
+
).option(
|
|
35753
|
+
"--reason <reason>",
|
|
35754
|
+
"Declared policy reason; required with --target and omitted for a customer-requested --keys teardown"
|
|
35755
|
+
).option("--yes", "Confirm the asynchronous provider deactivation")
|
|
35727
35756
|
).action(
|
|
35728
35757
|
monitorsAction(
|
|
35729
35758
|
(options) => handleMonitorBatch("deactivate", options)
|
package/dist/index.d.mts
CHANGED
|
@@ -3260,7 +3260,10 @@ type MonitorBatchExistingSubmitOptions = {
|
|
|
3260
3260
|
kind: 'audit' | 'deactivate' | 'reactivate' | 'repair';
|
|
3261
3261
|
scope: MonitorBatchScope;
|
|
3262
3262
|
dryRun?: boolean;
|
|
3263
|
-
/**
|
|
3263
|
+
/**
|
|
3264
|
+
* A declared policy reason for target deactivation. Omit it for an explicit
|
|
3265
|
+
* customer-owned key teardown; absent is the durable customer intent.
|
|
3266
|
+
*/
|
|
3264
3267
|
deactivationReason?: string;
|
|
3265
3268
|
/** Stable retry key. Reusing it joins the original durable operation. */
|
|
3266
3269
|
idempotencyKey: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -3260,7 +3260,10 @@ type MonitorBatchExistingSubmitOptions = {
|
|
|
3260
3260
|
kind: 'audit' | 'deactivate' | 'reactivate' | 'repair';
|
|
3261
3261
|
scope: MonitorBatchScope;
|
|
3262
3262
|
dryRun?: boolean;
|
|
3263
|
-
/**
|
|
3263
|
+
/**
|
|
3264
|
+
* A declared policy reason for target deactivation. Omit it for an explicit
|
|
3265
|
+
* customer-owned key teardown; absent is the durable customer intent.
|
|
3266
|
+
*/
|
|
3264
3267
|
deactivationReason?: string;
|
|
3265
3268
|
/** Stable retry key. Reusing it joins the original durable operation. */
|
|
3266
3269
|
idempotencyKey: string;
|
package/dist/index.js
CHANGED
|
@@ -860,7 +860,7 @@ var SDK_RELEASE = {
|
|
|
860
860
|
// getters keep their established compatibility behavior.
|
|
861
861
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
862
862
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
863
|
-
version: "0.3.
|
|
863
|
+
version: "0.3.101",
|
|
864
864
|
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.",
|
|
865
865
|
packageCapabilities: {
|
|
866
866
|
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.101",
|
|
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
|
|
@@ -1964,7 +1964,7 @@ function inferBindingIo(statement) {
|
|
|
1964
1964
|
ioConfidence: "inferred"
|
|
1965
1965
|
};
|
|
1966
1966
|
}
|
|
1967
|
-
var
|
|
1967
|
+
var JSDOC_BLOCK = /\/\*\*([\s\S]*?)\*\//g;
|
|
1968
1968
|
var BLOCK_EXPORT_HEADER = /^[A-Za-z_$][\w$-]*$/;
|
|
1969
1969
|
function cleanBlockBody(raw) {
|
|
1970
1970
|
return raw.split(/\r?\n/).map((line) => /^\s*\*/.test(line) ? line.replace(/^\s*\* ?/, "") : line).join("\n").trim();
|
|
@@ -2151,9 +2151,12 @@ function materializeDocflow(block) {
|
|
|
2151
2151
|
function parsePlayDocflowFile(sourceCode) {
|
|
2152
2152
|
const errors = [];
|
|
2153
2153
|
const rawBlocks = [];
|
|
2154
|
-
|
|
2155
|
-
for (const match of sourceCode.matchAll(
|
|
2156
|
-
|
|
2154
|
+
JSDOC_BLOCK.lastIndex = 0;
|
|
2155
|
+
for (const match of sourceCode.matchAll(JSDOC_BLOCK)) {
|
|
2156
|
+
const cleanedBody = cleanBlockBody(match[1]);
|
|
2157
|
+
const mermaid = /^@mermaid(?:[ \t]+|\r?\n|$)([\s\S]*)$/.exec(cleanedBody);
|
|
2158
|
+
if (!mermaid) continue;
|
|
2159
|
+
rawBlocks.push({ syntax: "mermaid", body: mermaid[1].trim() });
|
|
2157
2160
|
}
|
|
2158
2161
|
if (rawBlocks.length === 0) return { blocks: [], bindings: [], errors };
|
|
2159
2162
|
const rejectedNodeIds = /* @__PURE__ */ new Set();
|
|
@@ -2878,11 +2881,8 @@ function validatePlaySourceFilesHaveNoInlineSecrets(sourceFiles) {
|
|
|
2878
2881
|
var MAX_PLAY_BUNDLE_BYTES = 30 * 1024 * 1024;
|
|
2879
2882
|
|
|
2880
2883
|
// ../plays/bundling/index.ts
|
|
2881
|
-
var
|
|
2882
|
-
var PLAY_ARTIFACT_CACHE_DIR = join(
|
|
2883
|
-
tmpdir(),
|
|
2884
|
-
`deepline-play-artifacts-v${PLAY_BUNDLE_CACHE_VERSION}`
|
|
2885
|
-
);
|
|
2884
|
+
var PLAY_BUNDLE_CACHE_NAMESPACE = "deepline-play-artifacts-docflow-jsdoc";
|
|
2885
|
+
var PLAY_ARTIFACT_CACHE_DIR = join(tmpdir(), PLAY_BUNDLE_CACHE_NAMESPACE);
|
|
2886
2886
|
var PLAY_PROXY_NAMESPACE = "deepline-play-runtime-ref";
|
|
2887
2887
|
var SOURCE_EXTENSIONS = [
|
|
2888
2888
|
".ts",
|
|
@@ -4867,7 +4867,6 @@ async function discoverPackagedLocalFiles(entryFile) {
|
|
|
4867
4867
|
}
|
|
4868
4868
|
|
|
4869
4869
|
// src/plays/bundle-play-file.ts
|
|
4870
|
-
var PLAY_BUNDLE_CACHE_VERSION2 = 37;
|
|
4871
4870
|
var MODULE_DIR = dirname3(fileURLToPath(import.meta.url));
|
|
4872
4871
|
var SDK_PACKAGE_ROOT = resolve3(MODULE_DIR, "..", "..");
|
|
4873
4872
|
var SOURCE_REPO_ROOT = resolve3(SDK_PACKAGE_ROOT, "..", "..");
|
|
@@ -4917,10 +4916,7 @@ function createSdkPlayBundlingAdapter() {
|
|
|
4917
4916
|
return {
|
|
4918
4917
|
projectRoot: PROJECT_ROOT,
|
|
4919
4918
|
nodeModulesDir: HAS_PACKAGED_BUNDLING_SOURCES ? resolve3(SDK_PACKAGE_ROOT, "node_modules") : resolve3(PROJECT_ROOT, "node_modules"),
|
|
4920
|
-
cacheDir: join3(
|
|
4921
|
-
tmpdir2(),
|
|
4922
|
-
`deepline-play-artifacts-v${PLAY_BUNDLE_CACHE_VERSION2}`
|
|
4923
|
-
),
|
|
4919
|
+
cacheDir: join3(tmpdir2(), PLAY_BUNDLE_CACHE_NAMESPACE),
|
|
4924
4920
|
sdkSourceRoot: SDK_SOURCE_ROOT,
|
|
4925
4921
|
sdkPackageJson: SDK_PACKAGE_JSON,
|
|
4926
4922
|
sdkEntryFile: SDK_ENTRY_FILE,
|
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.101";
|
|
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.101";
|
|
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.101",
|
|
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.101",
|
|
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
|