deepline 0.3.85 → 0.3.87
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 +2 -2
- package/dist/bundling-sources/sdk/src/monitor-fleet-contract.ts +1 -1
- package/dist/bundling-sources/sdk/src/plays/bundle-play-file.ts +1 -1
- package/dist/bundling-sources/sdk/src/release.ts +1 -1
- package/dist/bundling-sources/shared_libs/integration-contracts/AGENTS.md +9 -0
- package/dist/bundling-sources/shared_libs/integration-contracts/README.md +3 -0
- package/dist/bundling-sources/shared_libs/integration-contracts/index.ts +2 -0
- package/dist/bundling-sources/shared_libs/monitors/analytics-install-guides.ts +77 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/charges.ts +125 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/policy-builders.ts +686 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/pricing.ts +54 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/public-pricing.ts +72 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/session.ts +45 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/state.ts +454 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/tamradar.ts +260 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/types.ts +215 -0
- package/dist/bundling-sources/shared_libs/monitors/callback-security.ts +333 -0
- package/dist/bundling-sources/shared_libs/monitors/cursor-page.ts +42 -0
- package/dist/bundling-sources/shared_libs/monitors/framework-managed-payload-fields.ts +71 -0
- package/dist/bundling-sources/shared_libs/monitors/generated/provider-monitor-callback-admission-targets.ts +16 -0
- package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +267 -0
- package/dist/bundling-sources/shared_libs/monitors/inbound-publish-key.ts +39 -0
- package/dist/bundling-sources/shared_libs/monitors/inbound-queue.ts +82 -0
- package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +473 -0
- package/dist/bundling-sources/shared_libs/monitors/org-monitor-limits.ts +1 -1
- package/dist/bundling-sources/shared_libs/monitors/package.json +29 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-callback-verification.ts +1125 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-capability.ts +964 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-consumer-health.ts +56 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-errors.ts +131 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-identity-claims.ts +527 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-legacy-aliases.ts +16 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-priority-execution.ts +56 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-public-aliases.ts +28 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-runtime-read-eligibility.ts +38 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-status.ts +10 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-upstream-identity.ts +112 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-webhook-monitor-runtime.ts +300 -0
- package/dist/bundling-sources/shared_libs/monitors/quickstart-prompts.ts +22 -0
- package/dist/bundling-sources/shared_libs/monitors/snitcher-install-validation.ts +93 -0
- package/dist/bundling-sources/shared_libs/monitors/snitcher-ip2company.ts +332 -0
- package/dist/bundling-sources/shared_libs/monitors/snitcher-radar.ts +221 -0
- package/dist/bundling-sources/shared_libs/monitors/starter-templates.ts +105 -0
- package/dist/bundling-sources/shared_libs/monitors/tracking-provider-guidance.ts +73 -0
- package/dist/bundling-sources/shared_libs/monitors/tracking-provider-integrations.ts +81 -0
- package/dist/bundling-sources/shared_libs/monitors/tsconfig.json +10 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-env.ts +6 -0
- package/dist/bundling-sources/shared_libs/play-runtime/tool-http-errors.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +1 -1
- package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +302 -0
- package/dist/bundling-sources/shared_libs/plays/email-status.ts +1 -1
- package/dist/bundling-sources/shared_libs/plays/tool-category-descriptions.ts +2 -2
- package/dist/bundling-sources/shared_libs/runtime-env.ts +6 -0
- package/dist/bundling-sources/shared_libs/security/header-safe-env.ts +28 -0
- package/dist/bundling-sources/shared_libs/security/secret-redaction.ts +267 -0
- package/dist/cli/index.js +25 -14
- package/dist/cli/index.mjs +25 -14
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/index.mjs +3 -3
- package/dist/install-integrity.json +45 -2
- package/package.json +3 -1
- /package/dist/bundling-sources/shared_libs/{integrations/bettercontact-execution-policy.ts → integration-contracts/bettercontact/execution-policy.ts} +0 -0
- /package/dist/bundling-sources/shared_libs/{integrations/theirstack-execution-policy.ts → integration-contracts/theirstack/execution-policy.ts} +0 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
const REDACTED_VALUE = '[REDACTED]';
|
|
2
|
+
|
|
3
|
+
type SecretRedactionOptions = {
|
|
4
|
+
redactHighEntropy?: boolean;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
const SENSITIVE_KEY_PATTERNS = [
|
|
8
|
+
/^api[-_]?key$/i,
|
|
9
|
+
/^x[-_]?api[-_]?key$/i,
|
|
10
|
+
/secret/i,
|
|
11
|
+
/token/i,
|
|
12
|
+
/password/i,
|
|
13
|
+
/authorization/i,
|
|
14
|
+
/cookie/i,
|
|
15
|
+
/credential/i,
|
|
16
|
+
/private/i,
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const SAFE_IDENTIFIER_KEYS = new Set([
|
|
20
|
+
'artifactHash',
|
|
21
|
+
'artifactHashes',
|
|
22
|
+
'artifact_hash',
|
|
23
|
+
'artifact_hashes',
|
|
24
|
+
'graphHash',
|
|
25
|
+
'graph_hash',
|
|
26
|
+
'hash',
|
|
27
|
+
'idempotencyKey',
|
|
28
|
+
'idempotency_key',
|
|
29
|
+
'key',
|
|
30
|
+
'session',
|
|
31
|
+
'sessionId',
|
|
32
|
+
'session_id',
|
|
33
|
+
'sessionIds',
|
|
34
|
+
'session_ids',
|
|
35
|
+
'promptId',
|
|
36
|
+
'prompt_id',
|
|
37
|
+
'requestId',
|
|
38
|
+
'request_id',
|
|
39
|
+
'upload_id',
|
|
40
|
+
// Durable-call runtime identity fields. These are non-secret
|
|
41
|
+
// `ctx:<org>:call:tool:<tool>:<hash>` receipt/idempotency keys (and their
|
|
42
|
+
// `:force:<lease>` / `:ordered:<hash>` variants) surfaced on tool-result
|
|
43
|
+
// `_metadata.execution` and echoed provider idempotency metadata.
|
|
44
|
+
// Explicit-secret patterns below still redact real secrets that ever appear
|
|
45
|
+
// under these keys.
|
|
46
|
+
'receiptKey',
|
|
47
|
+
'receipt_key',
|
|
48
|
+
'attachedToReceiptKey',
|
|
49
|
+
'attached_to_receipt_key',
|
|
50
|
+
'durableCallReceiptKey',
|
|
51
|
+
'durable_call_receipt_key',
|
|
52
|
+
'providerIdempotencyKey',
|
|
53
|
+
'provider_idempotency_key',
|
|
54
|
+
'cacheKey',
|
|
55
|
+
'cache_key',
|
|
56
|
+
// Non-secret run-output identifiers.
|
|
57
|
+
'targetTable',
|
|
58
|
+
'target_table',
|
|
59
|
+
'tableNamespace',
|
|
60
|
+
'table_namespace',
|
|
61
|
+
'queryId',
|
|
62
|
+
'query_id',
|
|
63
|
+
'queryIds',
|
|
64
|
+
'query_ids',
|
|
65
|
+
'snowflakeQueryId',
|
|
66
|
+
'snowflake_query_id',
|
|
67
|
+
'snowflakeQueryIds',
|
|
68
|
+
'snowflake_query_ids',
|
|
69
|
+
]);
|
|
70
|
+
|
|
71
|
+
const EXPLICIT_SECRET_VALUE_PATTERNS = [
|
|
72
|
+
/\bnapi_[a-z0-9]{20,}\b/i,
|
|
73
|
+
/\bgh[opsu]_[A-Za-z0-9_]{20,}\b/,
|
|
74
|
+
/\bwhsec_[a-z0-9]+\b/i,
|
|
75
|
+
/\bsk-proj-[A-Za-z0-9_-]{20,}\b/,
|
|
76
|
+
/\bxox[baprs]-[A-Za-z0-9-]{20,}\b/i,
|
|
77
|
+
/\b(sk|rk)_(live|test)_[a-z0-9]+\b/i,
|
|
78
|
+
/\bpostgres(?:ql)?:\/\/[^\s'"]+/i,
|
|
79
|
+
/\bhttps?:\/\/[^/\s'"]+:[^@\s'"]+@[^/\s'"]+/i,
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
const HIGH_ENTROPY_VALUE_PATTERN = /\b[A-Za-z0-9+/=_-]{32,}\b/g;
|
|
83
|
+
// A public hostname can legitimately contain a generated label longer than the
|
|
84
|
+
// high-entropy threshold (for example, a per-run probe hostname). Preserve the
|
|
85
|
+
// complete hostname after known secret formats have already been checked.
|
|
86
|
+
const PUBLIC_DNS_NAME_PATTERN =
|
|
87
|
+
/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}\.?$/i;
|
|
88
|
+
const SENSITIVE_URL_PARAM_KEY_PATTERN =
|
|
89
|
+
/(?:api[-_]?key|x[-_]?api[-_]?key|token|access[-_]?token|refresh[-_]?token|secret|password|authorization|credential|signature|sig)/i;
|
|
90
|
+
const BEARER_SECRET_PATTERN = /\b(Bearer)\s+[A-Za-z0-9._~+/=-]{8,}/gi;
|
|
91
|
+
const ASSIGNMENT_SECRET_PATTERN =
|
|
92
|
+
/\b(access[-_]?token|refresh[-_]?token|token|x[-_\s]?api[-_\s]?key|api[-_\s]?key|apikey|password|secret|session)\b(\s*[:=]\s*)[^\s'",;)}\]]+/gi;
|
|
93
|
+
const AUTH_ASSIGNMENT_SECRET_PATTERN =
|
|
94
|
+
/\b(auth(?:orization)?)\b(\s*[:=]\s*)(?!Bearer\b)(?:[A-Za-z]+\s+)?[^\s'",;)}\]]+/gi;
|
|
95
|
+
const SENSITIVE_URL_PARAM_VALUE_PATTERN =
|
|
96
|
+
/([?&#](?:api[-_]?key|x[-_]?api[-_]?key|token|access[-_]?token|refresh[-_]?token|secret|password|authorization|credential|signature|sig)=)[^&#\s'"]+/gi;
|
|
97
|
+
|
|
98
|
+
function inspectStandalonePublicHttpUrl(
|
|
99
|
+
value: string,
|
|
100
|
+
): 'safe' | 'sensitive' | null {
|
|
101
|
+
const trimmed = value.trim();
|
|
102
|
+
if (!trimmed || /\s/.test(trimmed)) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
let url: URL;
|
|
107
|
+
try {
|
|
108
|
+
url = new URL(trimmed);
|
|
109
|
+
} catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
if (url.username || url.password) {
|
|
117
|
+
return 'sensitive';
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
for (const key of url.searchParams.keys()) {
|
|
121
|
+
if (SENSITIVE_URL_PARAM_KEY_PATTERN.test(key)) {
|
|
122
|
+
return 'sensitive';
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (url.hash && SENSITIVE_URL_PARAM_KEY_PATTERN.test(url.hash)) {
|
|
126
|
+
return 'sensitive';
|
|
127
|
+
}
|
|
128
|
+
return 'safe';
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function shouldRedactKey(key: string) {
|
|
132
|
+
if (SAFE_IDENTIFIER_KEYS.has(key)) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
return SENSITIVE_KEY_PATTERNS.some((pattern) => pattern.test(key));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function maybeRedactString(value: string, options: SecretRedactionOptions) {
|
|
139
|
+
if (EXPLICIT_SECRET_VALUE_PATTERNS.some((pattern) => pattern.test(value))) {
|
|
140
|
+
return REDACTED_VALUE;
|
|
141
|
+
}
|
|
142
|
+
const publicHttpUrl = inspectStandalonePublicHttpUrl(value);
|
|
143
|
+
if (publicHttpUrl === 'sensitive') {
|
|
144
|
+
return REDACTED_VALUE;
|
|
145
|
+
}
|
|
146
|
+
if (publicHttpUrl === 'safe') {
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
if (PUBLIC_DNS_NAME_PATTERN.test(value.trim())) {
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
152
|
+
const redacted = value
|
|
153
|
+
.replace(BEARER_SECRET_PATTERN, `$1 ${REDACTED_VALUE}`)
|
|
154
|
+
.replace(AUTH_ASSIGNMENT_SECRET_PATTERN, `$1$2${REDACTED_VALUE}`)
|
|
155
|
+
.replace(ASSIGNMENT_SECRET_PATTERN, `$1$2${REDACTED_VALUE}`)
|
|
156
|
+
.replace(SENSITIVE_URL_PARAM_VALUE_PATTERN, `$1${REDACTED_VALUE}`);
|
|
157
|
+
return options.redactHighEntropy === false
|
|
158
|
+
? redacted
|
|
159
|
+
: redacted.replace(HIGH_ENTROPY_VALUE_PATTERN, REDACTED_VALUE);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export function redactSecretsInValue<T>(
|
|
163
|
+
value: T,
|
|
164
|
+
parentKey?: string,
|
|
165
|
+
options: SecretRedactionOptions = {},
|
|
166
|
+
): T {
|
|
167
|
+
if (typeof value === 'string') {
|
|
168
|
+
if (EXPLICIT_SECRET_VALUE_PATTERNS.some((pattern) => pattern.test(value))) {
|
|
169
|
+
return REDACTED_VALUE as T;
|
|
170
|
+
}
|
|
171
|
+
if (parentKey && SAFE_IDENTIFIER_KEYS.has(parentKey)) {
|
|
172
|
+
return value as T;
|
|
173
|
+
}
|
|
174
|
+
if (parentKey && shouldRedactKey(parentKey)) {
|
|
175
|
+
return REDACTED_VALUE as T;
|
|
176
|
+
}
|
|
177
|
+
return maybeRedactString(value, options) as T;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (!value || typeof value !== 'object') return value;
|
|
181
|
+
|
|
182
|
+
type Container = unknown[] | Record<string, unknown>;
|
|
183
|
+
const root: Container = Array.isArray(value) ? [] : {};
|
|
184
|
+
const pending: Array<{
|
|
185
|
+
source: Container;
|
|
186
|
+
target: Container;
|
|
187
|
+
parentKey?: string;
|
|
188
|
+
}> = [{ source: value as Container, target: root, parentKey }];
|
|
189
|
+
|
|
190
|
+
const redactNestedValue = (
|
|
191
|
+
item: unknown,
|
|
192
|
+
itemParentKey: string | undefined,
|
|
193
|
+
): unknown => {
|
|
194
|
+
if (typeof item !== 'string') return item;
|
|
195
|
+
if (EXPLICIT_SECRET_VALUE_PATTERNS.some((pattern) => pattern.test(item))) {
|
|
196
|
+
return REDACTED_VALUE;
|
|
197
|
+
}
|
|
198
|
+
if (itemParentKey && SAFE_IDENTIFIER_KEYS.has(itemParentKey)) return item;
|
|
199
|
+
if (itemParentKey && shouldRedactKey(itemParentKey)) return REDACTED_VALUE;
|
|
200
|
+
return maybeRedactString(item, options);
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
while (pending.length > 0) {
|
|
204
|
+
const current = pending.pop();
|
|
205
|
+
if (!current) break;
|
|
206
|
+
const sourceIsArray = Array.isArray(current.source);
|
|
207
|
+
for (const [key, item] of Object.entries(current.source)) {
|
|
208
|
+
const itemParentKey = sourceIsArray ? current.parentKey : key;
|
|
209
|
+
if (!sourceIsArray && shouldRedactKey(key)) {
|
|
210
|
+
(current.target as Record<string, unknown>)[key] = REDACTED_VALUE;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (item && typeof item === 'object') {
|
|
214
|
+
const nestedTarget: Container = Array.isArray(item) ? [] : {};
|
|
215
|
+
(current.target as Record<string, unknown>)[key] = nestedTarget;
|
|
216
|
+
pending.push({
|
|
217
|
+
source: item as Container,
|
|
218
|
+
target: nestedTarget,
|
|
219
|
+
parentKey: itemParentKey,
|
|
220
|
+
});
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
(current.target as Record<string, unknown>)[key] = redactNestedValue(
|
|
224
|
+
item,
|
|
225
|
+
itemParentKey,
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return root as T;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Redaction for customer-authored inputs and outputs. Preserve arbitrary
|
|
235
|
+
* identifiers while still removing explicit credential formats, sensitive
|
|
236
|
+
* keys, authorization values, and credential-bearing URLs.
|
|
237
|
+
*/
|
|
238
|
+
export function redactSecretsInCustomerValue<T>(
|
|
239
|
+
value: T,
|
|
240
|
+
parentKey?: string,
|
|
241
|
+
): T {
|
|
242
|
+
return redactSecretsInValue(value, parentKey, { redactHighEntropy: false });
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export function redactSecretsInJsonText(
|
|
246
|
+
text: string,
|
|
247
|
+
options: SecretRedactionOptions = {},
|
|
248
|
+
) {
|
|
249
|
+
try {
|
|
250
|
+
const parsed = JSON.parse(text) as unknown;
|
|
251
|
+
return JSON.stringify(
|
|
252
|
+
redactSecretsInValue(parsed, undefined, options),
|
|
253
|
+
null,
|
|
254
|
+
2,
|
|
255
|
+
);
|
|
256
|
+
} catch {
|
|
257
|
+
let redacted = text;
|
|
258
|
+
for (const pattern of EXPLICIT_SECRET_VALUE_PATTERNS) {
|
|
259
|
+
redacted = redacted.replace(pattern, REDACTED_VALUE);
|
|
260
|
+
}
|
|
261
|
+
return maybeRedactString(redacted, options);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export function redactSecretsInCustomerJsonText(text: string) {
|
|
266
|
+
return redactSecretsInJsonText(text, { redactHighEntropy: false });
|
|
267
|
+
}
|
package/dist/cli/index.js
CHANGED
|
@@ -184,7 +184,7 @@ configureProxyFromEnv();
|
|
|
184
184
|
var import_promises11 = require("fs/promises");
|
|
185
185
|
var import_node_path29 = require("path");
|
|
186
186
|
var import_node_os18 = require("os");
|
|
187
|
-
var
|
|
187
|
+
var import_commander5 = require("commander");
|
|
188
188
|
|
|
189
189
|
// src/config.ts
|
|
190
190
|
var import_node_fs = require("fs");
|
|
@@ -1225,7 +1225,7 @@ var SDK_RELEASE = {
|
|
|
1225
1225
|
// available at toolResponse.rawV2 while toolResponse.raw and all declared
|
|
1226
1226
|
// getters keep their established compatibility behavior.
|
|
1227
1227
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
1228
|
-
version: "0.3.
|
|
1228
|
+
version: "0.3.87",
|
|
1229
1229
|
updateSummary: "Automatic CLI updates are now enabled by default. To opt out, run `deepline settings autoupdate off`; use `deepline settings autoupdate on` to re-enable updates or `deepline settings autoupdate pin <version>` to hold an exact release. This release also adds raw-v2 tool responses at toolResponse.rawV2 while preserving existing toolResponse.raw and declared getters.",
|
|
1230
1230
|
packageCapabilities: {
|
|
1231
1231
|
updatePreferences: 1
|
|
@@ -4353,7 +4353,7 @@ async function* observeRunEvents(options) {
|
|
|
4353
4353
|
}
|
|
4354
4354
|
}
|
|
4355
4355
|
|
|
4356
|
-
//
|
|
4356
|
+
// ../integration-contracts/theirstack/execution-policy.ts
|
|
4357
4357
|
var THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS = 135e3;
|
|
4358
4358
|
var THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS = 6e4 + THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS + 15e3;
|
|
4359
4359
|
var THEIRSTACK_COMPANY_SEARCH_CLIENT_TIMEOUT_MS = 21e4;
|
|
@@ -4407,7 +4407,7 @@ function resolveTheirstackClientTimeoutMs(endpointId, payload) {
|
|
|
4407
4407
|
return usesExtendedTheirstackJobSearchBudget(endpointId, payload) ? THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS : null;
|
|
4408
4408
|
}
|
|
4409
4409
|
|
|
4410
|
-
//
|
|
4410
|
+
// ../integration-contracts/bettercontact/execution-policy.ts
|
|
4411
4411
|
var BETTERCONTACT_LAUNCHER_CLIENT_TIMEOUT_MS = 12e4;
|
|
4412
4412
|
var BETTERCONTACT_LAUNCHER_TOOL_IDS = /* @__PURE__ */ new Set([
|
|
4413
4413
|
"bettercontact_enrich",
|
|
@@ -17008,7 +17008,7 @@ function resolveDaytonaSandboxComputeItem(input2) {
|
|
|
17008
17008
|
};
|
|
17009
17009
|
}
|
|
17010
17010
|
|
|
17011
|
-
//
|
|
17011
|
+
// ../billing/compute-pricing-contract.ts
|
|
17012
17012
|
var COMPUTE_BILLING_MARKUP_MULTIPLIER = 5;
|
|
17013
17013
|
var DEFAULT_USD_PER_CUSTOMER_CREDIT = 0.1;
|
|
17014
17014
|
var DEFAULT_PROVIDER_MARKUP_MULTIPLIER = 1.4;
|
|
@@ -30821,6 +30821,7 @@ function registerEnrichCommand(program) {
|
|
|
30821
30821
|
}
|
|
30822
30822
|
|
|
30823
30823
|
// src/cli/commands/feedback.ts
|
|
30824
|
+
var import_commander3 = require("commander");
|
|
30824
30825
|
var import_node_fs13 = require("fs");
|
|
30825
30826
|
async function handleFeedback(text, options) {
|
|
30826
30827
|
const message = resolveFeedbackText(text, options.file);
|
|
@@ -30830,7 +30831,8 @@ async function handleFeedback(text, options) {
|
|
|
30830
30831
|
requested: options.requested === true,
|
|
30831
30832
|
environment: collectLocalEnvInfo(),
|
|
30832
30833
|
...options.command ? { command: options.command } : {},
|
|
30833
|
-
...options.payload ? { payload: options.payload } : {}
|
|
30834
|
+
...options.payload ? { payload: options.payload } : {},
|
|
30835
|
+
...options.errorOutcome ? { error_outcome: options.errorOutcome } : {}
|
|
30834
30836
|
});
|
|
30835
30837
|
printCommandEnvelope(
|
|
30836
30838
|
{
|
|
@@ -30880,10 +30882,12 @@ function registerFeedbackCommands(program) {
|
|
|
30880
30882
|
Notes:
|
|
30881
30883
|
Sends the feedback text plus local CLI environment info to Deepline support.
|
|
30882
30884
|
Use --command and --payload to attach a reproducible command shape.
|
|
30883
|
-
|
|
30885
|
+
For error reports, use --error-outcome to record whether the error stopped the
|
|
30886
|
+
task or work continued. Agents should pass --requested when the user asked them
|
|
30887
|
+
to submit the report.
|
|
30884
30888
|
|
|
30885
30889
|
Examples:
|
|
30886
|
-
deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch"
|
|
30890
|
+
deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch" --error-outcome terminal
|
|
30887
30891
|
deepline feedback send "unexpected billing output" --payload '{"command":"billing usage"}' --json
|
|
30888
30892
|
`
|
|
30889
30893
|
);
|
|
@@ -30895,9 +30899,14 @@ Examples:
|
|
|
30895
30899
|
deepline feedback send --file incident.md --requested --json
|
|
30896
30900
|
cat incident.md | deepline feedback send --requested --json
|
|
30897
30901
|
deepline feedback send "tools search returned stale results" --requested --json
|
|
30898
|
-
deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch"
|
|
30902
|
+
deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch" --error-outcome terminal
|
|
30899
30903
|
`
|
|
30900
|
-
).argument("[text]", "Feedback text").option("--file <path>", "Read feedback text from a file, or - for stdin").option("--command <command>", "Command that reproduced the issue").option("--payload <payload>", "JSON or plain-text payload for the repro").
|
|
30904
|
+
).argument("[text]", "Feedback text").option("--file <path>", "Read feedback text from a file, or - for stdin").option("--command <command>", "Command that reproduced the issue").option("--payload <payload>", "JSON or plain-text payload for the repro").addOption(
|
|
30905
|
+
new import_commander3.Option(
|
|
30906
|
+
"--error-outcome <outcome>",
|
|
30907
|
+
"Error impact on the task: terminal or continued"
|
|
30908
|
+
).choices(["terminal", "continued"])
|
|
30909
|
+
).option(
|
|
30901
30910
|
"--requested",
|
|
30902
30911
|
"Mark the report as explicitly requested by the user"
|
|
30903
30912
|
).option("--json", "Emit JSON output").action(handleFeedback);
|
|
@@ -38363,6 +38372,8 @@ var SDK_SIDECAR_CRITICAL_PACKAGE_FILES = [
|
|
|
38363
38372
|
"dist/index.d.ts",
|
|
38364
38373
|
"dist/plays/bundle-play-file.mjs",
|
|
38365
38374
|
"dist/bundling-sources/shared_libs/observability/telemetry.ts",
|
|
38375
|
+
"dist/bundling-sources/shared_libs/integration-contracts/bettercontact/execution-policy.ts",
|
|
38376
|
+
"dist/bundling-sources/shared_libs/integration-contracts/theirstack/execution-policy.ts",
|
|
38366
38377
|
"dist/bundling-sources/shared_libs/play-runtime/backend.ts",
|
|
38367
38378
|
"dist/bundling-sources/shared_libs/plays/bundling/index.ts",
|
|
38368
38379
|
"dist/bundling-sources/shared_libs/product-notifications/contract.ts",
|
|
@@ -40137,7 +40148,7 @@ chooses the connected Slack channel or member and the events it receives.
|
|
|
40137
40148
|
}
|
|
40138
40149
|
|
|
40139
40150
|
// src/cli/commands/tools.ts
|
|
40140
|
-
var
|
|
40151
|
+
var import_commander4 = require("commander");
|
|
40141
40152
|
var import_node_fs25 = require("fs");
|
|
40142
40153
|
var import_node_os17 = require("os");
|
|
40143
40154
|
var import_node_path27 = require("path");
|
|
@@ -41194,12 +41205,12 @@ Examples:
|
|
|
41194
41205
|
"--examples-only",
|
|
41195
41206
|
"Only print runnable examples and sample payloads"
|
|
41196
41207
|
).option("--getters-only", "Only print extracted list/value getters").addOption(
|
|
41197
|
-
new
|
|
41208
|
+
new import_commander4.Option(
|
|
41198
41209
|
"--compact",
|
|
41199
41210
|
"Compatibility alias for the default compact view"
|
|
41200
41211
|
).hideHelp()
|
|
41201
41212
|
).addOption(
|
|
41202
|
-
new
|
|
41213
|
+
new import_commander4.Option(
|
|
41203
41214
|
"--contract-json",
|
|
41204
41215
|
"Compatibility alias for compact contract JSON"
|
|
41205
41216
|
).hideHelp()
|
|
@@ -43851,7 +43862,7 @@ async function main() {
|
|
|
43851
43862
|
if (printStartupPhase) {
|
|
43852
43863
|
progress?.phase("loading deepline cli");
|
|
43853
43864
|
}
|
|
43854
|
-
const program = new
|
|
43865
|
+
const program = new import_commander5.Command();
|
|
43855
43866
|
program.name("deepline").description(
|
|
43856
43867
|
"Deepline CLI \u2014 GTM enrichment tools, plays, and runs from your terminal."
|
|
43857
43868
|
).version(SDK_VERSION, "-v, --version", "Show version").exitOverride().showHelpAfterError().showSuggestionAfterError(true).addHelpText(
|
package/dist/cli/index.mjs
CHANGED
|
@@ -161,7 +161,7 @@ configureProxyFromEnv();
|
|
|
161
161
|
import { mkdtemp as mkdtemp2, rm as rm2, writeFile as writeFile6 } from "fs/promises";
|
|
162
162
|
import { join as join24 } from "path";
|
|
163
163
|
import { tmpdir as tmpdir6 } from "os";
|
|
164
|
-
import { Command as
|
|
164
|
+
import { Command as Command5 } from "commander";
|
|
165
165
|
|
|
166
166
|
// src/config.ts
|
|
167
167
|
import {
|
|
@@ -1210,7 +1210,7 @@ var SDK_RELEASE = {
|
|
|
1210
1210
|
// available at toolResponse.rawV2 while toolResponse.raw and all declared
|
|
1211
1211
|
// getters keep their established compatibility behavior.
|
|
1212
1212
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
1213
|
-
version: "0.3.
|
|
1213
|
+
version: "0.3.87",
|
|
1214
1214
|
updateSummary: "Automatic CLI updates are now enabled by default. To opt out, run `deepline settings autoupdate off`; use `deepline settings autoupdate on` to re-enable updates or `deepline settings autoupdate pin <version>` to hold an exact release. This release also adds raw-v2 tool responses at toolResponse.rawV2 while preserving existing toolResponse.raw and declared getters.",
|
|
1215
1215
|
packageCapabilities: {
|
|
1216
1216
|
updatePreferences: 1
|
|
@@ -4338,7 +4338,7 @@ async function* observeRunEvents(options) {
|
|
|
4338
4338
|
}
|
|
4339
4339
|
}
|
|
4340
4340
|
|
|
4341
|
-
//
|
|
4341
|
+
// ../integration-contracts/theirstack/execution-policy.ts
|
|
4342
4342
|
var THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS = 135e3;
|
|
4343
4343
|
var THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS = 6e4 + THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS + 15e3;
|
|
4344
4344
|
var THEIRSTACK_COMPANY_SEARCH_CLIENT_TIMEOUT_MS = 21e4;
|
|
@@ -4392,7 +4392,7 @@ function resolveTheirstackClientTimeoutMs(endpointId, payload) {
|
|
|
4392
4392
|
return usesExtendedTheirstackJobSearchBudget(endpointId, payload) ? THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS : null;
|
|
4393
4393
|
}
|
|
4394
4394
|
|
|
4395
|
-
//
|
|
4395
|
+
// ../integration-contracts/bettercontact/execution-policy.ts
|
|
4396
4396
|
var BETTERCONTACT_LAUNCHER_CLIENT_TIMEOUT_MS = 12e4;
|
|
4397
4397
|
var BETTERCONTACT_LAUNCHER_TOOL_IDS = /* @__PURE__ */ new Set([
|
|
4398
4398
|
"bettercontact_enrich",
|
|
@@ -17070,7 +17070,7 @@ function resolveDaytonaSandboxComputeItem(input2) {
|
|
|
17070
17070
|
};
|
|
17071
17071
|
}
|
|
17072
17072
|
|
|
17073
|
-
//
|
|
17073
|
+
// ../billing/compute-pricing-contract.ts
|
|
17074
17074
|
var COMPUTE_BILLING_MARKUP_MULTIPLIER = 5;
|
|
17075
17075
|
var DEFAULT_USD_PER_CUSTOMER_CREDIT = 0.1;
|
|
17076
17076
|
var DEFAULT_PROVIDER_MARKUP_MULTIPLIER = 1.4;
|
|
@@ -30883,6 +30883,7 @@ function registerEnrichCommand(program) {
|
|
|
30883
30883
|
}
|
|
30884
30884
|
|
|
30885
30885
|
// src/cli/commands/feedback.ts
|
|
30886
|
+
import { Option as Option2 } from "commander";
|
|
30886
30887
|
import { readFileSync as readFileSync9 } from "fs";
|
|
30887
30888
|
async function handleFeedback(text, options) {
|
|
30888
30889
|
const message = resolveFeedbackText(text, options.file);
|
|
@@ -30892,7 +30893,8 @@ async function handleFeedback(text, options) {
|
|
|
30892
30893
|
requested: options.requested === true,
|
|
30893
30894
|
environment: collectLocalEnvInfo(),
|
|
30894
30895
|
...options.command ? { command: options.command } : {},
|
|
30895
|
-
...options.payload ? { payload: options.payload } : {}
|
|
30896
|
+
...options.payload ? { payload: options.payload } : {},
|
|
30897
|
+
...options.errorOutcome ? { error_outcome: options.errorOutcome } : {}
|
|
30896
30898
|
});
|
|
30897
30899
|
printCommandEnvelope(
|
|
30898
30900
|
{
|
|
@@ -30942,10 +30944,12 @@ function registerFeedbackCommands(program) {
|
|
|
30942
30944
|
Notes:
|
|
30943
30945
|
Sends the feedback text plus local CLI environment info to Deepline support.
|
|
30944
30946
|
Use --command and --payload to attach a reproducible command shape.
|
|
30945
|
-
|
|
30947
|
+
For error reports, use --error-outcome to record whether the error stopped the
|
|
30948
|
+
task or work continued. Agents should pass --requested when the user asked them
|
|
30949
|
+
to submit the report.
|
|
30946
30950
|
|
|
30947
30951
|
Examples:
|
|
30948
|
-
deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch"
|
|
30952
|
+
deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch" --error-outcome terminal
|
|
30949
30953
|
deepline feedback send "unexpected billing output" --payload '{"command":"billing usage"}' --json
|
|
30950
30954
|
`
|
|
30951
30955
|
);
|
|
@@ -30957,9 +30961,14 @@ Examples:
|
|
|
30957
30961
|
deepline feedback send --file incident.md --requested --json
|
|
30958
30962
|
cat incident.md | deepline feedback send --requested --json
|
|
30959
30963
|
deepline feedback send "tools search returned stale results" --requested --json
|
|
30960
|
-
deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch"
|
|
30964
|
+
deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch" --error-outcome terminal
|
|
30961
30965
|
`
|
|
30962
|
-
).argument("[text]", "Feedback text").option("--file <path>", "Read feedback text from a file, or - for stdin").option("--command <command>", "Command that reproduced the issue").option("--payload <payload>", "JSON or plain-text payload for the repro").
|
|
30966
|
+
).argument("[text]", "Feedback text").option("--file <path>", "Read feedback text from a file, or - for stdin").option("--command <command>", "Command that reproduced the issue").option("--payload <payload>", "JSON or plain-text payload for the repro").addOption(
|
|
30967
|
+
new Option2(
|
|
30968
|
+
"--error-outcome <outcome>",
|
|
30969
|
+
"Error impact on the task: terminal or continued"
|
|
30970
|
+
).choices(["terminal", "continued"])
|
|
30971
|
+
).option(
|
|
30963
30972
|
"--requested",
|
|
30964
30973
|
"Mark the report as explicitly requested by the user"
|
|
30965
30974
|
).option("--json", "Emit JSON output").action(handleFeedback);
|
|
@@ -38480,6 +38489,8 @@ var SDK_SIDECAR_CRITICAL_PACKAGE_FILES = [
|
|
|
38480
38489
|
"dist/index.d.ts",
|
|
38481
38490
|
"dist/plays/bundle-play-file.mjs",
|
|
38482
38491
|
"dist/bundling-sources/shared_libs/observability/telemetry.ts",
|
|
38492
|
+
"dist/bundling-sources/shared_libs/integration-contracts/bettercontact/execution-policy.ts",
|
|
38493
|
+
"dist/bundling-sources/shared_libs/integration-contracts/theirstack/execution-policy.ts",
|
|
38483
38494
|
"dist/bundling-sources/shared_libs/play-runtime/backend.ts",
|
|
38484
38495
|
"dist/bundling-sources/shared_libs/plays/bundling/index.ts",
|
|
38485
38496
|
"dist/bundling-sources/shared_libs/product-notifications/contract.ts",
|
|
@@ -40254,7 +40265,7 @@ chooses the connected Slack channel or member and the events it receives.
|
|
|
40254
40265
|
}
|
|
40255
40266
|
|
|
40256
40267
|
// src/cli/commands/tools.ts
|
|
40257
|
-
import { Option as
|
|
40268
|
+
import { Option as Option3 } from "commander";
|
|
40258
40269
|
import {
|
|
40259
40270
|
chmodSync,
|
|
40260
40271
|
existsSync as existsSync19,
|
|
@@ -41323,12 +41334,12 @@ Examples:
|
|
|
41323
41334
|
"--examples-only",
|
|
41324
41335
|
"Only print runnable examples and sample payloads"
|
|
41325
41336
|
).option("--getters-only", "Only print extracted list/value getters").addOption(
|
|
41326
|
-
new
|
|
41337
|
+
new Option3(
|
|
41327
41338
|
"--compact",
|
|
41328
41339
|
"Compatibility alias for the default compact view"
|
|
41329
41340
|
).hideHelp()
|
|
41330
41341
|
).addOption(
|
|
41331
|
-
new
|
|
41342
|
+
new Option3(
|
|
41332
41343
|
"--contract-json",
|
|
41333
41344
|
"Compatibility alias for compact contract JSON"
|
|
41334
41345
|
).hideHelp()
|
|
@@ -43980,7 +43991,7 @@ async function main() {
|
|
|
43980
43991
|
if (printStartupPhase) {
|
|
43981
43992
|
progress?.phase("loading deepline cli");
|
|
43982
43993
|
}
|
|
43983
|
-
const program = new
|
|
43994
|
+
const program = new Command5();
|
|
43984
43995
|
program.name("deepline").description(
|
|
43985
43996
|
"Deepline CLI \u2014 GTM enrichment tools, plays, and runs from your terminal."
|
|
43986
43997
|
).version(SDK_VERSION, "-v, --version", "Show version").exitOverride().showHelpAfterError().showSuggestionAfterError(true).addHelpText(
|
package/dist/index.d.mts
CHANGED
|
@@ -1922,7 +1922,7 @@ declare function defineMonitor<TPayload extends MonitorPayload = MonitorPayload>
|
|
|
1922
1922
|
/**
|
|
1923
1923
|
* The fleet member ceiling, mirrored — deliberately a literal.
|
|
1924
1924
|
*
|
|
1925
|
-
* The canonical declaration is
|
|
1925
|
+
* The canonical declaration is packages/monitors/monitor-fleet-limits.ts,
|
|
1926
1926
|
* which the Convex commit mutation reads to size its transaction. This package
|
|
1927
1927
|
* cannot import it: the workspace-architecture ratchet forbids NEW shared_libs
|
|
1928
1928
|
* imports from packages absolutely (only relocations of pre-existing edges
|
package/dist/index.d.ts
CHANGED
|
@@ -1922,7 +1922,7 @@ declare function defineMonitor<TPayload extends MonitorPayload = MonitorPayload>
|
|
|
1922
1922
|
/**
|
|
1923
1923
|
* The fleet member ceiling, mirrored — deliberately a literal.
|
|
1924
1924
|
*
|
|
1925
|
-
* The canonical declaration is
|
|
1925
|
+
* The canonical declaration is packages/monitors/monitor-fleet-limits.ts,
|
|
1926
1926
|
* which the Convex commit mutation reads to size its transaction. This package
|
|
1927
1927
|
* cannot import it: the workspace-architecture ratchet forbids NEW shared_libs
|
|
1928
1928
|
* imports from packages absolutely (only relocations of pre-existing edges
|
package/dist/index.js
CHANGED
|
@@ -832,7 +832,7 @@ var SDK_RELEASE = {
|
|
|
832
832
|
// available at toolResponse.rawV2 while toolResponse.raw and all declared
|
|
833
833
|
// getters keep their established compatibility behavior.
|
|
834
834
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
835
|
-
version: "0.3.
|
|
835
|
+
version: "0.3.87",
|
|
836
836
|
updateSummary: "Automatic CLI updates are now enabled by default. To opt out, run `deepline settings autoupdate off`; use `deepline settings autoupdate on` to re-enable updates or `deepline settings autoupdate pin <version>` to hold an exact release. This release also adds raw-v2 tool responses at toolResponse.rawV2 while preserving existing toolResponse.raw and declared getters.",
|
|
837
837
|
packageCapabilities: {
|
|
838
838
|
updatePreferences: 1
|
|
@@ -3826,7 +3826,7 @@ async function* observeRunEvents(options) {
|
|
|
3826
3826
|
}
|
|
3827
3827
|
}
|
|
3828
3828
|
|
|
3829
|
-
//
|
|
3829
|
+
// ../integration-contracts/theirstack/execution-policy.ts
|
|
3830
3830
|
var THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS = 135e3;
|
|
3831
3831
|
var THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS = 6e4 + THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS + 15e3;
|
|
3832
3832
|
var THEIRSTACK_COMPANY_SEARCH_CLIENT_TIMEOUT_MS = 21e4;
|
|
@@ -3880,7 +3880,7 @@ function resolveTheirstackClientTimeoutMs(endpointId, payload) {
|
|
|
3880
3880
|
return usesExtendedTheirstackJobSearchBudget(endpointId, payload) ? THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS : null;
|
|
3881
3881
|
}
|
|
3882
3882
|
|
|
3883
|
-
//
|
|
3883
|
+
// ../integration-contracts/bettercontact/execution-policy.ts
|
|
3884
3884
|
var BETTERCONTACT_LAUNCHER_CLIENT_TIMEOUT_MS = 12e4;
|
|
3885
3885
|
var BETTERCONTACT_LAUNCHER_TOOL_IDS = /* @__PURE__ */ new Set([
|
|
3886
3886
|
"bettercontact_enrich",
|
package/dist/index.mjs
CHANGED
|
@@ -744,7 +744,7 @@ var SDK_RELEASE = {
|
|
|
744
744
|
// available at toolResponse.rawV2 while toolResponse.raw and all declared
|
|
745
745
|
// getters keep their established compatibility behavior.
|
|
746
746
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
747
|
-
version: "0.3.
|
|
747
|
+
version: "0.3.87",
|
|
748
748
|
updateSummary: "Automatic CLI updates are now enabled by default. To opt out, run `deepline settings autoupdate off`; use `deepline settings autoupdate on` to re-enable updates or `deepline settings autoupdate pin <version>` to hold an exact release. This release also adds raw-v2 tool responses at toolResponse.rawV2 while preserving existing toolResponse.raw and declared getters.",
|
|
749
749
|
packageCapabilities: {
|
|
750
750
|
updatePreferences: 1
|
|
@@ -3738,7 +3738,7 @@ async function* observeRunEvents(options) {
|
|
|
3738
3738
|
}
|
|
3739
3739
|
}
|
|
3740
3740
|
|
|
3741
|
-
//
|
|
3741
|
+
// ../integration-contracts/theirstack/execution-policy.ts
|
|
3742
3742
|
var THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS = 135e3;
|
|
3743
3743
|
var THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS = 6e4 + THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS + 15e3;
|
|
3744
3744
|
var THEIRSTACK_COMPANY_SEARCH_CLIENT_TIMEOUT_MS = 21e4;
|
|
@@ -3792,7 +3792,7 @@ function resolveTheirstackClientTimeoutMs(endpointId, payload) {
|
|
|
3792
3792
|
return usesExtendedTheirstackJobSearchBudget(endpointId, payload) ? THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS : null;
|
|
3793
3793
|
}
|
|
3794
3794
|
|
|
3795
|
-
//
|
|
3795
|
+
// ../integration-contracts/bettercontact/execution-policy.ts
|
|
3796
3796
|
var BETTERCONTACT_LAUNCHER_CLIENT_TIMEOUT_MS = 12e4;
|
|
3797
3797
|
var BETTERCONTACT_LAUNCHER_TOOL_IDS = /* @__PURE__ */ new Set([
|
|
3798
3798
|
"bettercontact_enrich",
|