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.
Files changed (65) hide show
  1. package/dist/bundling-sources/sdk/src/client.ts +2 -2
  2. package/dist/bundling-sources/sdk/src/monitor-fleet-contract.ts +1 -1
  3. package/dist/bundling-sources/sdk/src/plays/bundle-play-file.ts +1 -1
  4. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  5. package/dist/bundling-sources/shared_libs/integration-contracts/AGENTS.md +9 -0
  6. package/dist/bundling-sources/shared_libs/integration-contracts/README.md +3 -0
  7. package/dist/bundling-sources/shared_libs/integration-contracts/index.ts +2 -0
  8. package/dist/bundling-sources/shared_libs/monitors/analytics-install-guides.ts +77 -0
  9. package/dist/bundling-sources/shared_libs/monitors/billing/charges.ts +125 -0
  10. package/dist/bundling-sources/shared_libs/monitors/billing/policy-builders.ts +686 -0
  11. package/dist/bundling-sources/shared_libs/monitors/billing/pricing.ts +54 -0
  12. package/dist/bundling-sources/shared_libs/monitors/billing/public-pricing.ts +72 -0
  13. package/dist/bundling-sources/shared_libs/monitors/billing/session.ts +45 -0
  14. package/dist/bundling-sources/shared_libs/monitors/billing/state.ts +454 -0
  15. package/dist/bundling-sources/shared_libs/monitors/billing/tamradar.ts +260 -0
  16. package/dist/bundling-sources/shared_libs/monitors/billing/types.ts +215 -0
  17. package/dist/bundling-sources/shared_libs/monitors/callback-security.ts +333 -0
  18. package/dist/bundling-sources/shared_libs/monitors/cursor-page.ts +42 -0
  19. package/dist/bundling-sources/shared_libs/monitors/framework-managed-payload-fields.ts +71 -0
  20. package/dist/bundling-sources/shared_libs/monitors/generated/provider-monitor-callback-admission-targets.ts +16 -0
  21. package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +267 -0
  22. package/dist/bundling-sources/shared_libs/monitors/inbound-publish-key.ts +39 -0
  23. package/dist/bundling-sources/shared_libs/monitors/inbound-queue.ts +82 -0
  24. package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +473 -0
  25. package/dist/bundling-sources/shared_libs/monitors/org-monitor-limits.ts +1 -1
  26. package/dist/bundling-sources/shared_libs/monitors/package.json +29 -0
  27. package/dist/bundling-sources/shared_libs/monitors/provider-callback-verification.ts +1125 -0
  28. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-capability.ts +964 -0
  29. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-consumer-health.ts +56 -0
  30. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-errors.ts +131 -0
  31. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-identity-claims.ts +527 -0
  32. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-legacy-aliases.ts +16 -0
  33. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-priority-execution.ts +56 -0
  34. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-public-aliases.ts +28 -0
  35. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-runtime-read-eligibility.ts +38 -0
  36. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-status.ts +10 -0
  37. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-upstream-identity.ts +112 -0
  38. package/dist/bundling-sources/shared_libs/monitors/provider-webhook-monitor-runtime.ts +300 -0
  39. package/dist/bundling-sources/shared_libs/monitors/quickstart-prompts.ts +22 -0
  40. package/dist/bundling-sources/shared_libs/monitors/snitcher-install-validation.ts +93 -0
  41. package/dist/bundling-sources/shared_libs/monitors/snitcher-ip2company.ts +332 -0
  42. package/dist/bundling-sources/shared_libs/monitors/snitcher-radar.ts +221 -0
  43. package/dist/bundling-sources/shared_libs/monitors/starter-templates.ts +105 -0
  44. package/dist/bundling-sources/shared_libs/monitors/tracking-provider-guidance.ts +73 -0
  45. package/dist/bundling-sources/shared_libs/monitors/tracking-provider-integrations.ts +81 -0
  46. package/dist/bundling-sources/shared_libs/monitors/tsconfig.json +10 -0
  47. package/dist/bundling-sources/shared_libs/play-runtime/runtime-env.ts +6 -0
  48. package/dist/bundling-sources/shared_libs/play-runtime/tool-http-errors.ts +1 -1
  49. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +1 -1
  50. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +302 -0
  51. package/dist/bundling-sources/shared_libs/plays/email-status.ts +1 -1
  52. package/dist/bundling-sources/shared_libs/plays/tool-category-descriptions.ts +2 -2
  53. package/dist/bundling-sources/shared_libs/runtime-env.ts +6 -0
  54. package/dist/bundling-sources/shared_libs/security/header-safe-env.ts +28 -0
  55. package/dist/bundling-sources/shared_libs/security/secret-redaction.ts +267 -0
  56. package/dist/cli/index.js +25 -14
  57. package/dist/cli/index.mjs +25 -14
  58. package/dist/index.d.mts +1 -1
  59. package/dist/index.d.ts +1 -1
  60. package/dist/index.js +3 -3
  61. package/dist/index.mjs +3 -3
  62. package/dist/install-integrity.json +45 -2
  63. package/package.json +3 -1
  64. /package/dist/bundling-sources/shared_libs/{integrations/bettercontact-execution-policy.ts → integration-contracts/bettercontact/execution-policy.ts} +0 -0
  65. /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 import_commander4 = require("commander");
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.85",
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
- // ../../shared_libs/integrations/theirstack-execution-policy.ts
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
- // ../../shared_libs/integrations/bettercontact-execution-policy.ts
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
- // ../../shared_libs/billing/compute-pricing.ts
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
- Agents should pass --requested when the user asked them to submit the report.
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").option(
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 import_commander3 = require("commander");
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 import_commander3.Option(
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 import_commander3.Option(
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 import_commander4.Command();
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(
@@ -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 Command4 } from "commander";
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.85",
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
- // ../../shared_libs/integrations/theirstack-execution-policy.ts
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
- // ../../shared_libs/integrations/bettercontact-execution-policy.ts
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
- // ../../shared_libs/billing/compute-pricing.ts
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
- Agents should pass --requested when the user asked them to submit the report.
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").option(
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 Option2 } from "commander";
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 Option2(
41337
+ new Option3(
41327
41338
  "--compact",
41328
41339
  "Compatibility alias for the default compact view"
41329
41340
  ).hideHelp()
41330
41341
  ).addOption(
41331
- new Option2(
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 Command4();
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 shared_libs/monitors/monitor-fleet-limits.ts,
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 shared_libs/monitors/monitor-fleet-limits.ts,
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.85",
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
- // ../../shared_libs/integrations/theirstack-execution-policy.ts
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
- // ../../shared_libs/integrations/bettercontact-execution-policy.ts
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.85",
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
- // ../../shared_libs/integrations/theirstack-execution-policy.ts
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
- // ../../shared_libs/integrations/bettercontact-execution-policy.ts
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",