deepline 0.3.21 → 0.3.23

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.
@@ -1033,6 +1033,28 @@ export type TargetBillingStatusResult = {
1033
1033
  as_of: string | null;
1034
1034
  };
1035
1035
 
1036
+ export type TargetAutoRechargeResult = {
1037
+ org_id: string;
1038
+ enabled: boolean;
1039
+ available: boolean;
1040
+ reason: string | null;
1041
+ threshold_credits: number | null;
1042
+ refill_to_credits: number | null;
1043
+ rolling_limit_cents: null;
1044
+ };
1045
+
1046
+ export type TargetAutoRechargeUpdateOptions =
1047
+ | {
1048
+ enabled: false;
1049
+ idempotencyKey: string;
1050
+ }
1051
+ | {
1052
+ enabled: true;
1053
+ thresholdCredits: number;
1054
+ refillToCredits: number;
1055
+ idempotencyKey: string;
1056
+ };
1057
+
1036
1058
  export type TargetBillingMutationResult = {
1037
1059
  data: Record<string, unknown>;
1038
1060
  operation: TargetBillingOperation;
@@ -1158,6 +1180,13 @@ export type BillingNamespace = {
1158
1180
  targetPlans: () => Promise<TargetBillingPlansResult>;
1159
1181
  /** Normalized target billing state. */
1160
1182
  targetStatus: () => Promise<TargetBillingStatusResult>;
1183
+ /** Read and manage the Metronome-backed automatic recharge configuration. */
1184
+ autoRecharge: {
1185
+ get: () => Promise<TargetAutoRechargeResult>;
1186
+ update: (
1187
+ options: TargetAutoRechargeUpdateOptions,
1188
+ ) => Promise<TargetAutoRechargeResult>;
1189
+ };
1161
1190
  /** Buy Deepline credits through a payment-gated Metronome commit. */
1162
1191
  purchaseCredits: (options: {
1163
1192
  credits: number;
@@ -1750,6 +1779,10 @@ export class DeeplineClient {
1750
1779
  },
1751
1780
  targetPlans: () => this.getTargetBillingPlans(),
1752
1781
  targetStatus: () => this.getTargetBillingStatus(),
1782
+ autoRecharge: {
1783
+ get: () => this.getTargetAutoRecharge(),
1784
+ update: (options) => this.updateTargetAutoRecharge(options),
1785
+ },
1753
1786
  purchaseCredits: (options) => this.purchaseTargetBillingCredits(options),
1754
1787
  transitionPlan: (options) => this.transitionTargetBillingPlan(options),
1755
1788
  portalSession: () => this.createTargetBillingPortalSession(),
@@ -4537,6 +4570,37 @@ export class DeeplineClient {
4537
4570
  return this.http.get<TargetBillingStatusResult>('/api/v2/billing/status');
4538
4571
  }
4539
4572
 
4573
+ /** Read the canonical Metronome automatic recharge configuration. */
4574
+ async getTargetAutoRecharge(): Promise<TargetAutoRechargeResult> {
4575
+ return this.http.get<TargetAutoRechargeResult>(
4576
+ '/api/v2/billing/auto-recharge',
4577
+ );
4578
+ }
4579
+
4580
+ /** Update automatic recharge and return the server-verified configuration. */
4581
+ async updateTargetAutoRecharge(
4582
+ options: TargetAutoRechargeUpdateOptions,
4583
+ ): Promise<TargetAutoRechargeResult> {
4584
+ const idempotencyKey = requireTargetBillingIdempotencyKey(
4585
+ options.idempotencyKey,
4586
+ );
4587
+ const response = await this.http.put<{
4588
+ data: TargetAutoRechargeResult;
4589
+ request_id?: string;
4590
+ }>(
4591
+ '/api/v2/billing/auto-recharge',
4592
+ options.enabled
4593
+ ? {
4594
+ enabled: true,
4595
+ threshold_credits: options.thresholdCredits,
4596
+ refill_to_credits: options.refillToCredits,
4597
+ }
4598
+ : { enabled: false },
4599
+ { 'Idempotency-Key': idempotencyKey },
4600
+ );
4601
+ return response.data;
4602
+ }
4603
+
4540
4604
  /**
4541
4605
  * Purchase target-billing credits through the durable commercial operation
4542
4606
  * flow. The caller supplies an idempotency key for safe retries.
@@ -192,7 +192,7 @@ export const SDK_RELEASE = {
192
192
  // 0.3.0 introduces raw-v2: complete scrubbed provider responses are
193
193
  // available at toolResponse.rawV2 while toolResponse.raw and all declared
194
194
  // getters keep their established compatibility behavior.
195
- version: '0.3.21',
195
+ version: '0.3.23',
196
196
  updateSummary:
197
197
  'New raw-v2 tool responses preserve complete scrubbed provider envelopes at toolResponse.rawV2, including JSON:API included resources, links, cursors, and totals. Existing toolResponse.raw and declared getters keep working unchanged.',
198
198
  contracts: {
@@ -1308,6 +1308,11 @@ export interface PlayCheckResult {
1308
1308
  * `1 trigger · 2 tools · 1 dataset · 14 columns`.
1309
1309
  */
1310
1310
  summary?: string;
1311
+ /**
1312
+ * Feature-gated validation paths that were enabled for this exact cloud
1313
+ * check. Present as an empty array when no feature gate affected the result.
1314
+ */
1315
+ featureFlags?: PlayCheckFeatureFlag[];
1311
1316
  artifactHash?: string | null;
1312
1317
  graphHash?: string | null;
1313
1318
  /** SHA-256 of the exact source bytes checked by Deepline. */
@@ -1341,6 +1346,14 @@ export interface PlayCheckResult {
1341
1346
  };
1342
1347
  }
1343
1348
 
1349
+ /** An enabled server-side feature flag that affected a Play check. */
1350
+ export interface PlayCheckFeatureFlag {
1351
+ id: string;
1352
+ label: string;
1353
+ enabled: true;
1354
+ reason: string;
1355
+ }
1356
+
1344
1357
  /**
1345
1358
  * One exported play's check result inside a multi-play file. Carries the same
1346
1359
  * per-play fields as {@link PlayCheckResult}, unprefixed and unaggregated, so a
@@ -1360,6 +1373,7 @@ export interface PlayCheckExportResult {
1360
1373
  graphHash?: string | null;
1361
1374
  sourceHash?: string | null;
1362
1375
  summary?: string;
1376
+ featureFlags?: PlayCheckFeatureFlag[];
1363
1377
  recognized?: PlayCheckRecognizedSummary;
1364
1378
  triggers?: PlayCheckTriggersSummary | null;
1365
1379
  }
package/dist/cli/index.js CHANGED
@@ -196,11 +196,11 @@ var import_node_os = require("os");
196
196
  var import_node_path = require("path");
197
197
 
198
198
  // ../shared_libs/tool-execution-error.ts
199
- var DEEPLINE_ERROR_BRAND = /* @__PURE__ */ Symbol.for("deepline.error.v1");
200
- var TOOL_EXECUTION_ERROR_BRAND = /* @__PURE__ */ Symbol.for(
199
+ var DEEPLINE_ERROR_BRAND = Symbol.for("deepline.error.v1");
200
+ var TOOL_EXECUTION_ERROR_BRAND = Symbol.for(
201
201
  "deepline.tool-execution-error.v1"
202
202
  );
203
- var PROVIDER_TRANSIENT_ERROR_BRAND = /* @__PURE__ */ Symbol.for(
203
+ var PROVIDER_TRANSIENT_ERROR_BRAND = Symbol.for(
204
204
  "deepline.provider-transient-error.v1"
205
205
  );
206
206
  var LEGACY_TOOL_EXECUTION_ERROR_SCHEMA_VERSION = 0;
@@ -1047,7 +1047,7 @@ var SDK_RELEASE = {
1047
1047
  // 0.3.0 introduces raw-v2: complete scrubbed provider responses are
1048
1048
  // available at toolResponse.rawV2 while toolResponse.raw and all declared
1049
1049
  // getters keep their established compatibility behavior.
1050
- version: "0.3.21",
1050
+ version: "0.3.23",
1051
1051
  updateSummary: "New raw-v2 tool responses preserve complete scrubbed provider envelopes at toolResponse.rawV2, including JSON:API included resources, links, cursors, and totals. Existing toolResponse.raw and declared getters keep working unchanged.",
1052
1052
  contracts: {
1053
1053
  api: {
@@ -1503,8 +1503,8 @@ var MAX_RUNTIME_TEST_POLICY_MS = 10 * 6e4;
1503
1503
  // src/http.ts
1504
1504
  var MAX_DIAGNOSTIC_HEADER_LENGTH = 120;
1505
1505
  var COWORK_NETWORK_HINT = "Claude Cowork appears to be running Deepline in a network-restricted sandbox. In Claude Desktop, open Settings > Capabilities, turn on Allow network egress, and set Domain allowlist to All domains for the Cowork session.";
1506
- var REQUEST_TIMEOUT_MARKER = /* @__PURE__ */ Symbol("deeplineRequestTimeout");
1507
- var REQUEST_ABORT_MARKER = /* @__PURE__ */ Symbol("deeplineRequestAbort");
1506
+ var REQUEST_TIMEOUT_MARKER = Symbol("deeplineRequestTimeout");
1507
+ var REQUEST_ABORT_MARKER = Symbol("deeplineRequestAbort");
1508
1508
  function normalizeRequestAbortError(error, input2) {
1509
1509
  const normalized = error instanceof Error ? error : new Error(String(error));
1510
1510
  const tagged = normalized;
@@ -1562,7 +1562,6 @@ var HttpClient = class {
1562
1562
  constructor(config) {
1563
1563
  this.config = config;
1564
1564
  }
1565
- config;
1566
1565
  cleanDiagnosticHeader(value) {
1567
1566
  const normalized = String(value ?? "").replace(/[\u0000-\u001f\u007f]/g, " ").trim().slice(0, MAX_DIAGNOSTIC_HEADER_LENGTH);
1568
1567
  return normalized || null;
@@ -2394,6 +2393,7 @@ var RUNNER_TERMINAL_PUSH_MAX_BODY_BYTES = 16 * 1024 * 1024;
2394
2393
  var RUNTIME_RECEIPT_GATEWAY_BATCH_MAX_BYTES = 12 * 1024 * 1024;
2395
2394
  var RUNTIME_RECEIPT_WRITER_TARGET_BATCH_BYTES = 4 * 1024 * 1024;
2396
2395
  var RUNNER_POST_TERMINAL_DIAGNOSTIC_MAX_BYTES = 64 * 1024;
2396
+ var JSON_SIZE_LIMIT_REACHED = Symbol("JSON_SIZE_LIMIT_REACHED");
2397
2397
 
2398
2398
  // ../shared_libs/play-runtime/ledger-safe-payload.ts
2399
2399
  var ledgerIngressRedactor = createSecretRedactionContext();
@@ -2409,7 +2409,7 @@ var DOCFLOW_NODE_IO_LIMITS = {
2409
2409
  maxErrorBytes: 512
2410
2410
  };
2411
2411
  var utf8Encoder = new TextEncoder();
2412
- var PLAY_DATASET_BRAND = /* @__PURE__ */ Symbol.for("deepline.play.dataset");
2412
+ var PLAY_DATASET_BRAND = Symbol.for("deepline.play.dataset");
2413
2413
  function ledgerSafeDocflowPreviewKey(key) {
2414
2414
  if (!key.startsWith("$")) return key;
2415
2415
  const stripped = key.replace(/^\$+/, "");
@@ -3668,7 +3668,6 @@ var RunObserveTransportUnavailableError = class extends Error {
3668
3668
  this.reason = reason;
3669
3669
  this.name = "RunObserveTransportUnavailableError";
3670
3670
  }
3671
- reason;
3672
3671
  };
3673
3672
  var OBSERVE_BOOTSTRAP_TIMEOUT_MS = 1e4;
3674
3673
  var OBSERVE_RECONNECT_NOTICE_MS = 1e4;
@@ -4648,6 +4647,10 @@ var DeeplineClient = class {
4648
4647
  },
4649
4648
  targetPlans: () => this.getTargetBillingPlans(),
4650
4649
  targetStatus: () => this.getTargetBillingStatus(),
4650
+ autoRecharge: {
4651
+ get: () => this.getTargetAutoRecharge(),
4652
+ update: (options2) => this.updateTargetAutoRecharge(options2)
4653
+ },
4651
4654
  purchaseCredits: (options2) => this.purchaseTargetBillingCredits(options2),
4652
4655
  transitionPlan: (options2) => this.transitionTargetBillingPlan(options2),
4653
4656
  portalSession: () => this.createTargetBillingPortalSession()
@@ -6733,6 +6736,28 @@ var DeeplineClient = class {
6733
6736
  async getTargetBillingStatus() {
6734
6737
  return this.http.get("/api/v2/billing/status");
6735
6738
  }
6739
+ /** Read the canonical Metronome automatic recharge configuration. */
6740
+ async getTargetAutoRecharge() {
6741
+ return this.http.get(
6742
+ "/api/v2/billing/auto-recharge"
6743
+ );
6744
+ }
6745
+ /** Update automatic recharge and return the server-verified configuration. */
6746
+ async updateTargetAutoRecharge(options) {
6747
+ const idempotencyKey = requireTargetBillingIdempotencyKey(
6748
+ options.idempotencyKey
6749
+ );
6750
+ const response = await this.http.put(
6751
+ "/api/v2/billing/auto-recharge",
6752
+ options.enabled ? {
6753
+ enabled: true,
6754
+ threshold_credits: options.thresholdCredits,
6755
+ refill_to_credits: options.refillToCredits
6756
+ } : { enabled: false },
6757
+ { "Idempotency-Key": idempotencyKey }
6758
+ );
6759
+ return response.data;
6760
+ }
6736
6761
  /**
6737
6762
  * Purchase target-billing credits through the durable commercial operation
6738
6763
  * flow. The caller supplies an idempotency key for safe retries.
@@ -9465,6 +9490,96 @@ async function handleTargetStatus(options) {
9465
9490
  { json: options.json }
9466
9491
  );
9467
9492
  }
9493
+ async function handleAutoRechargeStatus(options) {
9494
+ const payload = await new DeeplineClient().billing.autoRecharge.get();
9495
+ const state = payload.available ? payload.enabled ? "on" : "off" : "unavailable";
9496
+ const lines = [
9497
+ `State: ${state}`,
9498
+ ...payload.threshold_credits !== null ? [`Threshold: ${payload.threshold_credits} credits`] : [],
9499
+ ...payload.refill_to_credits !== null ? [`Refill balance to: ${payload.refill_to_credits} credits`] : []
9500
+ ];
9501
+ printCommandEnvelope(
9502
+ {
9503
+ ok: true,
9504
+ ...payload,
9505
+ render: { sections: [{ title: "automatic recharge", lines }] }
9506
+ },
9507
+ { json: options.json }
9508
+ );
9509
+ }
9510
+ async function handleAutoRechargeSet(options) {
9511
+ const thresholdCredits = parseTopUpCredits(options.thresholdCredits);
9512
+ const refillToCredits = parseTopUpCredits(options.refillToCredits);
9513
+ if (thresholdCredits === null || refillToCredits === null || refillToCredits <= thresholdCredits) {
9514
+ reportBillingFailure(
9515
+ {
9516
+ exitCode: 2,
9517
+ code: "INVALID_AUTO_RECHARGE_CONFIGURATION",
9518
+ message: "--threshold-credits and --refill-to-credits must be positive whole credits, and refill-to must be greater."
9519
+ },
9520
+ options
9521
+ );
9522
+ return;
9523
+ }
9524
+ const idempotencyKey = targetBillingIdempotencyKey(options.idempotencyKey);
9525
+ if (options.dryRun) {
9526
+ printCommandEnvelope(
9527
+ {
9528
+ ok: true,
9529
+ dry_run: true,
9530
+ idempotency_key: idempotencyKey,
9531
+ planned_request: {
9532
+ method: "PUT",
9533
+ path: "/api/v2/billing/auto-recharge",
9534
+ body: {
9535
+ enabled: true,
9536
+ threshold_credits: thresholdCredits,
9537
+ refill_to_credits: refillToCredits
9538
+ }
9539
+ }
9540
+ },
9541
+ { json: options.json }
9542
+ );
9543
+ return;
9544
+ }
9545
+ const payload = await new DeeplineClient().billing.autoRecharge.update({
9546
+ enabled: true,
9547
+ thresholdCredits,
9548
+ refillToCredits,
9549
+ idempotencyKey
9550
+ });
9551
+ printCommandEnvelope(
9552
+ { ok: true, idempotency_key: idempotencyKey, ...payload },
9553
+ { json: options.json }
9554
+ );
9555
+ }
9556
+ async function handleAutoRechargeOff(options) {
9557
+ const idempotencyKey = targetBillingIdempotencyKey(options.idempotencyKey);
9558
+ if (options.dryRun) {
9559
+ printCommandEnvelope(
9560
+ {
9561
+ ok: true,
9562
+ dry_run: true,
9563
+ idempotency_key: idempotencyKey,
9564
+ planned_request: {
9565
+ method: "PUT",
9566
+ path: "/api/v2/billing/auto-recharge",
9567
+ body: { enabled: false }
9568
+ }
9569
+ },
9570
+ { json: options.json }
9571
+ );
9572
+ return;
9573
+ }
9574
+ const payload = await new DeeplineClient().billing.autoRecharge.update({
9575
+ enabled: false,
9576
+ idempotencyKey
9577
+ });
9578
+ printCommandEnvelope(
9579
+ { ok: true, idempotency_key: idempotencyKey, ...payload },
9580
+ { json: options.json }
9581
+ );
9582
+ }
9468
9583
  async function handleBuyCredits(creditsRaw, options) {
9469
9584
  const credits = parseTopUpCredits(creditsRaw);
9470
9585
  if (credits === null) {
@@ -9726,6 +9841,31 @@ Examples:
9726
9841
  ).option("--dry-run", "Print the planned top-up without charging").option("--compact", "Keep only high-signal fields in JSON output").option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleTopUp);
9727
9842
  billing.command("buy").description("Buy credits through the target billing contract.").argument("<credits>", "Positive integer Deepline credit amount").option("--idempotency-key <key>", "Stable retry key").option("--json", "Emit JSON output").action(handleBuyCredits);
9728
9843
  billing.command("status").description("Show normalized target billing state.").option("--json", "Emit JSON output").action(handleTargetStatus);
9844
+ billing.command("auto-recharge").description("Inspect and manage automatic Deepline credit recharge.").addHelpText(
9845
+ "after",
9846
+ `
9847
+ Examples:
9848
+ deepline billing auto-recharge status --json
9849
+ deepline billing auto-recharge set --threshold-credits 1000 --refill-to-credits 3500 --dry-run --json
9850
+ deepline billing auto-recharge off --dry-run --json
9851
+ `
9852
+ ).addCommand(
9853
+ new import_commander.Command("status").description("Show the canonical automatic recharge configuration.").option("--json", "Emit JSON output").action(handleAutoRechargeStatus)
9854
+ ).addCommand(
9855
+ new import_commander.Command("set").description(
9856
+ "Enable automatic recharge with a threshold and refill target."
9857
+ ).requiredOption(
9858
+ "--threshold-credits <credits>",
9859
+ "Recharge when the balance reaches this amount"
9860
+ ).requiredOption(
9861
+ "--refill-to-credits <credits>",
9862
+ "Recharge the balance to this amount"
9863
+ ).option("--idempotency-key <key>", "Stable retry key").option("--dry-run", "Print the planned update without applying it").option("--json", "Emit JSON output").action(handleAutoRechargeSet)
9864
+ ).addCommand(
9865
+ new import_commander.Command("off").description(
9866
+ "Disable automatic recharge without clearing saved amounts."
9867
+ ).option("--idempotency-key <key>", "Stable retry key").option("--dry-run", "Print the planned update without applying it").option("--json", "Emit JSON output").action(handleAutoRechargeOff)
9868
+ );
9729
9869
  billing.command("change-plan").description("Start or change the target billing plan.").argument("<plan_sku>", "payg-v1, builder-v1, or team-v1").option("--idempotency-key <key>", "Stable retry key").option("--json", "Emit JSON output").action(handleTargetPlan);
9730
9870
  billing.command("cancel-plan").description("Cancel a target subscription at period end, or undo it.").option("--undo", "Undo a pending period-end cancellation").option("--idempotency-key <key>", "Stable retry key").option("--json", "Emit JSON output").action(handleTargetPlanCancellation);
9731
9871
  billing.command("portal").description("Open the Stripe-hosted billing recovery portal.").option("--no-open", "Print the URL without opening a browser").option("--json", "Emit JSON output").action(handleTargetPortal);
@@ -11493,7 +11633,6 @@ var PlayBootstrapError = class extends Error {
11493
11633
  super(message);
11494
11634
  this.exitCode = exitCode;
11495
11635
  }
11496
- exitCode;
11497
11636
  };
11498
11637
  var PlayBootstrapUsageError = class extends PlayBootstrapError {
11499
11638
  constructor(message) {
@@ -13335,11 +13474,11 @@ var TypeBoxError = class extends Error {
13335
13474
  };
13336
13475
 
13337
13476
  // ../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs
13338
- var TransformKind = /* @__PURE__ */ Symbol.for("TypeBox.Transform");
13339
- var ReadonlyKind = /* @__PURE__ */ Symbol.for("TypeBox.Readonly");
13340
- var OptionalKind = /* @__PURE__ */ Symbol.for("TypeBox.Optional");
13341
- var Hint = /* @__PURE__ */ Symbol.for("TypeBox.Hint");
13342
- var Kind = /* @__PURE__ */ Symbol.for("TypeBox.Kind");
13477
+ var TransformKind = Symbol.for("TypeBox.Transform");
13478
+ var ReadonlyKind = Symbol.for("TypeBox.Readonly");
13479
+ var OptionalKind = Symbol.for("TypeBox.Optional");
13480
+ var Hint = Symbol.for("TypeBox.Hint");
13481
+ var Kind = Symbol.for("TypeBox.Kind");
13343
13482
 
13344
13483
  // ../node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs
13345
13484
  function IsReadonly(value) {
@@ -18004,7 +18143,6 @@ var CliProgress = class {
18004
18143
  constructor(enabled) {
18005
18144
  this.enabled = enabled;
18006
18145
  }
18007
- enabled;
18008
18146
  lastMessage = null;
18009
18147
  interactive = Boolean(process.stderr.isTTY);
18010
18148
  grey = "\x1B[90m";
@@ -23658,6 +23796,10 @@ function printPlayCheckOutcome(outcome, target, prefix) {
23658
23796
  console.error(
23659
23797
  `\u2717 ${prefix}${playName} failed ${playCheckFailureStage(outcome)}`
23660
23798
  );
23799
+ printPlayCheckFeatureFlags(
23800
+ result.featureFlags,
23801
+ (line) => console.error(line)
23802
+ );
23661
23803
  const { unstructuredErrors } = partitionMirroredErrors(
23662
23804
  result.errors,
23663
23805
  result.issues
@@ -23677,6 +23819,7 @@ function printPlayCheckOutcome(outcome, target, prefix) {
23677
23819
  console.log(
23678
23820
  summary ? `\u2713 ${prefix}${playName} valid \u2014 ${summary}` : `\u2713 ${prefix}${playName} passed ${result.limits ? "cloud" : "local"} play check`
23679
23821
  );
23822
+ printPlayCheckFeatureFlags(result.featureFlags, (line) => console.log(line));
23680
23823
  if (result.artifactHash) {
23681
23824
  console.log(` artifact: ${result.artifactHash.slice(0, 12)}`);
23682
23825
  }
@@ -23698,6 +23841,11 @@ function printPlayCheckOutcome(outcome, target, prefix) {
23698
23841
  );
23699
23842
  printToolGetterHints(result.toolGetterHints);
23700
23843
  }
23844
+ function printPlayCheckFeatureFlags(flags, write) {
23845
+ for (const flag of flags ?? []) {
23846
+ write(` feature flag enabled: ${flag.label} \u2014 ${flag.reason}`);
23847
+ }
23848
+ }
23701
23849
  function printPlayCheckOutcomes(outcomes, target) {
23702
23850
  if (outcomes.length === 1) {
23703
23851
  printPlayCheckOutcome(outcomes[0], target, "");
@@ -42397,6 +42545,9 @@ async function main() {
42397
42545
  program.name("deepline").description(
42398
42546
  "Deepline CLI \u2014 GTM enrichment tools, plays, and runs from your terminal."
42399
42547
  ).version(SDK_VERSION, "-v, --version", "Show version").exitOverride().showHelpAfterError().showSuggestionAfterError(true).addHelpText(
42548
+ "beforeAll",
42549
+ "for agents: ensure you are using the /deepline-gtm skill\n"
42550
+ ).addHelpText(
42400
42551
  "after",
42401
42552
  `
42402
42553
  Common commands:
@@ -182,11 +182,11 @@ import { homedir } from "os";
182
182
  import { dirname, isAbsolute, join, resolve } from "path";
183
183
 
184
184
  // ../shared_libs/tool-execution-error.ts
185
- var DEEPLINE_ERROR_BRAND = /* @__PURE__ */ Symbol.for("deepline.error.v1");
186
- var TOOL_EXECUTION_ERROR_BRAND = /* @__PURE__ */ Symbol.for(
185
+ var DEEPLINE_ERROR_BRAND = Symbol.for("deepline.error.v1");
186
+ var TOOL_EXECUTION_ERROR_BRAND = Symbol.for(
187
187
  "deepline.tool-execution-error.v1"
188
188
  );
189
- var PROVIDER_TRANSIENT_ERROR_BRAND = /* @__PURE__ */ Symbol.for(
189
+ var PROVIDER_TRANSIENT_ERROR_BRAND = Symbol.for(
190
190
  "deepline.provider-transient-error.v1"
191
191
  );
192
192
  var LEGACY_TOOL_EXECUTION_ERROR_SCHEMA_VERSION = 0;
@@ -1033,7 +1033,7 @@ var SDK_RELEASE = {
1033
1033
  // 0.3.0 introduces raw-v2: complete scrubbed provider responses are
1034
1034
  // available at toolResponse.rawV2 while toolResponse.raw and all declared
1035
1035
  // getters keep their established compatibility behavior.
1036
- version: "0.3.21",
1036
+ version: "0.3.23",
1037
1037
  updateSummary: "New raw-v2 tool responses preserve complete scrubbed provider envelopes at toolResponse.rawV2, including JSON:API included resources, links, cursors, and totals. Existing toolResponse.raw and declared getters keep working unchanged.",
1038
1038
  contracts: {
1039
1039
  api: {
@@ -1489,8 +1489,8 @@ var MAX_RUNTIME_TEST_POLICY_MS = 10 * 6e4;
1489
1489
  // src/http.ts
1490
1490
  var MAX_DIAGNOSTIC_HEADER_LENGTH = 120;
1491
1491
  var COWORK_NETWORK_HINT = "Claude Cowork appears to be running Deepline in a network-restricted sandbox. In Claude Desktop, open Settings > Capabilities, turn on Allow network egress, and set Domain allowlist to All domains for the Cowork session.";
1492
- var REQUEST_TIMEOUT_MARKER = /* @__PURE__ */ Symbol("deeplineRequestTimeout");
1493
- var REQUEST_ABORT_MARKER = /* @__PURE__ */ Symbol("deeplineRequestAbort");
1492
+ var REQUEST_TIMEOUT_MARKER = Symbol("deeplineRequestTimeout");
1493
+ var REQUEST_ABORT_MARKER = Symbol("deeplineRequestAbort");
1494
1494
  function normalizeRequestAbortError(error, input2) {
1495
1495
  const normalized = error instanceof Error ? error : new Error(String(error));
1496
1496
  const tagged = normalized;
@@ -1548,7 +1548,6 @@ var HttpClient = class {
1548
1548
  constructor(config) {
1549
1549
  this.config = config;
1550
1550
  }
1551
- config;
1552
1551
  cleanDiagnosticHeader(value) {
1553
1552
  const normalized = String(value ?? "").replace(/[\u0000-\u001f\u007f]/g, " ").trim().slice(0, MAX_DIAGNOSTIC_HEADER_LENGTH);
1554
1553
  return normalized || null;
@@ -2380,6 +2379,7 @@ var RUNNER_TERMINAL_PUSH_MAX_BODY_BYTES = 16 * 1024 * 1024;
2380
2379
  var RUNTIME_RECEIPT_GATEWAY_BATCH_MAX_BYTES = 12 * 1024 * 1024;
2381
2380
  var RUNTIME_RECEIPT_WRITER_TARGET_BATCH_BYTES = 4 * 1024 * 1024;
2382
2381
  var RUNNER_POST_TERMINAL_DIAGNOSTIC_MAX_BYTES = 64 * 1024;
2382
+ var JSON_SIZE_LIMIT_REACHED = Symbol("JSON_SIZE_LIMIT_REACHED");
2383
2383
 
2384
2384
  // ../shared_libs/play-runtime/ledger-safe-payload.ts
2385
2385
  var ledgerIngressRedactor = createSecretRedactionContext();
@@ -2395,7 +2395,7 @@ var DOCFLOW_NODE_IO_LIMITS = {
2395
2395
  maxErrorBytes: 512
2396
2396
  };
2397
2397
  var utf8Encoder = new TextEncoder();
2398
- var PLAY_DATASET_BRAND = /* @__PURE__ */ Symbol.for("deepline.play.dataset");
2398
+ var PLAY_DATASET_BRAND = Symbol.for("deepline.play.dataset");
2399
2399
  function ledgerSafeDocflowPreviewKey(key) {
2400
2400
  if (!key.startsWith("$")) return key;
2401
2401
  const stripped = key.replace(/^\$+/, "");
@@ -3654,7 +3654,6 @@ var RunObserveTransportUnavailableError = class extends Error {
3654
3654
  this.reason = reason;
3655
3655
  this.name = "RunObserveTransportUnavailableError";
3656
3656
  }
3657
- reason;
3658
3657
  };
3659
3658
  var OBSERVE_BOOTSTRAP_TIMEOUT_MS = 1e4;
3660
3659
  var OBSERVE_RECONNECT_NOTICE_MS = 1e4;
@@ -4634,6 +4633,10 @@ var DeeplineClient = class {
4634
4633
  },
4635
4634
  targetPlans: () => this.getTargetBillingPlans(),
4636
4635
  targetStatus: () => this.getTargetBillingStatus(),
4636
+ autoRecharge: {
4637
+ get: () => this.getTargetAutoRecharge(),
4638
+ update: (options2) => this.updateTargetAutoRecharge(options2)
4639
+ },
4637
4640
  purchaseCredits: (options2) => this.purchaseTargetBillingCredits(options2),
4638
4641
  transitionPlan: (options2) => this.transitionTargetBillingPlan(options2),
4639
4642
  portalSession: () => this.createTargetBillingPortalSession()
@@ -6719,6 +6722,28 @@ var DeeplineClient = class {
6719
6722
  async getTargetBillingStatus() {
6720
6723
  return this.http.get("/api/v2/billing/status");
6721
6724
  }
6725
+ /** Read the canonical Metronome automatic recharge configuration. */
6726
+ async getTargetAutoRecharge() {
6727
+ return this.http.get(
6728
+ "/api/v2/billing/auto-recharge"
6729
+ );
6730
+ }
6731
+ /** Update automatic recharge and return the server-verified configuration. */
6732
+ async updateTargetAutoRecharge(options) {
6733
+ const idempotencyKey = requireTargetBillingIdempotencyKey(
6734
+ options.idempotencyKey
6735
+ );
6736
+ const response = await this.http.put(
6737
+ "/api/v2/billing/auto-recharge",
6738
+ options.enabled ? {
6739
+ enabled: true,
6740
+ threshold_credits: options.thresholdCredits,
6741
+ refill_to_credits: options.refillToCredits
6742
+ } : { enabled: false },
6743
+ { "Idempotency-Key": idempotencyKey }
6744
+ );
6745
+ return response.data;
6746
+ }
6722
6747
  /**
6723
6748
  * Purchase target-billing credits through the durable commercial operation
6724
6749
  * flow. The caller supplies an idempotency key for safe retries.
@@ -9463,6 +9488,96 @@ async function handleTargetStatus(options) {
9463
9488
  { json: options.json }
9464
9489
  );
9465
9490
  }
9491
+ async function handleAutoRechargeStatus(options) {
9492
+ const payload = await new DeeplineClient().billing.autoRecharge.get();
9493
+ const state = payload.available ? payload.enabled ? "on" : "off" : "unavailable";
9494
+ const lines = [
9495
+ `State: ${state}`,
9496
+ ...payload.threshold_credits !== null ? [`Threshold: ${payload.threshold_credits} credits`] : [],
9497
+ ...payload.refill_to_credits !== null ? [`Refill balance to: ${payload.refill_to_credits} credits`] : []
9498
+ ];
9499
+ printCommandEnvelope(
9500
+ {
9501
+ ok: true,
9502
+ ...payload,
9503
+ render: { sections: [{ title: "automatic recharge", lines }] }
9504
+ },
9505
+ { json: options.json }
9506
+ );
9507
+ }
9508
+ async function handleAutoRechargeSet(options) {
9509
+ const thresholdCredits = parseTopUpCredits(options.thresholdCredits);
9510
+ const refillToCredits = parseTopUpCredits(options.refillToCredits);
9511
+ if (thresholdCredits === null || refillToCredits === null || refillToCredits <= thresholdCredits) {
9512
+ reportBillingFailure(
9513
+ {
9514
+ exitCode: 2,
9515
+ code: "INVALID_AUTO_RECHARGE_CONFIGURATION",
9516
+ message: "--threshold-credits and --refill-to-credits must be positive whole credits, and refill-to must be greater."
9517
+ },
9518
+ options
9519
+ );
9520
+ return;
9521
+ }
9522
+ const idempotencyKey = targetBillingIdempotencyKey(options.idempotencyKey);
9523
+ if (options.dryRun) {
9524
+ printCommandEnvelope(
9525
+ {
9526
+ ok: true,
9527
+ dry_run: true,
9528
+ idempotency_key: idempotencyKey,
9529
+ planned_request: {
9530
+ method: "PUT",
9531
+ path: "/api/v2/billing/auto-recharge",
9532
+ body: {
9533
+ enabled: true,
9534
+ threshold_credits: thresholdCredits,
9535
+ refill_to_credits: refillToCredits
9536
+ }
9537
+ }
9538
+ },
9539
+ { json: options.json }
9540
+ );
9541
+ return;
9542
+ }
9543
+ const payload = await new DeeplineClient().billing.autoRecharge.update({
9544
+ enabled: true,
9545
+ thresholdCredits,
9546
+ refillToCredits,
9547
+ idempotencyKey
9548
+ });
9549
+ printCommandEnvelope(
9550
+ { ok: true, idempotency_key: idempotencyKey, ...payload },
9551
+ { json: options.json }
9552
+ );
9553
+ }
9554
+ async function handleAutoRechargeOff(options) {
9555
+ const idempotencyKey = targetBillingIdempotencyKey(options.idempotencyKey);
9556
+ if (options.dryRun) {
9557
+ printCommandEnvelope(
9558
+ {
9559
+ ok: true,
9560
+ dry_run: true,
9561
+ idempotency_key: idempotencyKey,
9562
+ planned_request: {
9563
+ method: "PUT",
9564
+ path: "/api/v2/billing/auto-recharge",
9565
+ body: { enabled: false }
9566
+ }
9567
+ },
9568
+ { json: options.json }
9569
+ );
9570
+ return;
9571
+ }
9572
+ const payload = await new DeeplineClient().billing.autoRecharge.update({
9573
+ enabled: false,
9574
+ idempotencyKey
9575
+ });
9576
+ printCommandEnvelope(
9577
+ { ok: true, idempotency_key: idempotencyKey, ...payload },
9578
+ { json: options.json }
9579
+ );
9580
+ }
9466
9581
  async function handleBuyCredits(creditsRaw, options) {
9467
9582
  const credits = parseTopUpCredits(creditsRaw);
9468
9583
  if (credits === null) {
@@ -9724,6 +9839,31 @@ Examples:
9724
9839
  ).option("--dry-run", "Print the planned top-up without charging").option("--compact", "Keep only high-signal fields in JSON output").option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleTopUp);
9725
9840
  billing.command("buy").description("Buy credits through the target billing contract.").argument("<credits>", "Positive integer Deepline credit amount").option("--idempotency-key <key>", "Stable retry key").option("--json", "Emit JSON output").action(handleBuyCredits);
9726
9841
  billing.command("status").description("Show normalized target billing state.").option("--json", "Emit JSON output").action(handleTargetStatus);
9842
+ billing.command("auto-recharge").description("Inspect and manage automatic Deepline credit recharge.").addHelpText(
9843
+ "after",
9844
+ `
9845
+ Examples:
9846
+ deepline billing auto-recharge status --json
9847
+ deepline billing auto-recharge set --threshold-credits 1000 --refill-to-credits 3500 --dry-run --json
9848
+ deepline billing auto-recharge off --dry-run --json
9849
+ `
9850
+ ).addCommand(
9851
+ new Command("status").description("Show the canonical automatic recharge configuration.").option("--json", "Emit JSON output").action(handleAutoRechargeStatus)
9852
+ ).addCommand(
9853
+ new Command("set").description(
9854
+ "Enable automatic recharge with a threshold and refill target."
9855
+ ).requiredOption(
9856
+ "--threshold-credits <credits>",
9857
+ "Recharge when the balance reaches this amount"
9858
+ ).requiredOption(
9859
+ "--refill-to-credits <credits>",
9860
+ "Recharge the balance to this amount"
9861
+ ).option("--idempotency-key <key>", "Stable retry key").option("--dry-run", "Print the planned update without applying it").option("--json", "Emit JSON output").action(handleAutoRechargeSet)
9862
+ ).addCommand(
9863
+ new Command("off").description(
9864
+ "Disable automatic recharge without clearing saved amounts."
9865
+ ).option("--idempotency-key <key>", "Stable retry key").option("--dry-run", "Print the planned update without applying it").option("--json", "Emit JSON output").action(handleAutoRechargeOff)
9866
+ );
9727
9867
  billing.command("change-plan").description("Start or change the target billing plan.").argument("<plan_sku>", "payg-v1, builder-v1, or team-v1").option("--idempotency-key <key>", "Stable retry key").option("--json", "Emit JSON output").action(handleTargetPlan);
9728
9868
  billing.command("cancel-plan").description("Cancel a target subscription at period end, or undo it.").option("--undo", "Undo a pending period-end cancellation").option("--idempotency-key <key>", "Stable retry key").option("--json", "Emit JSON output").action(handleTargetPlanCancellation);
9729
9869
  billing.command("portal").description("Open the Stripe-hosted billing recovery portal.").option("--no-open", "Print the URL without opening a browser").option("--json", "Emit JSON output").action(handleTargetPortal);
@@ -11537,7 +11677,6 @@ var PlayBootstrapError = class extends Error {
11537
11677
  super(message);
11538
11678
  this.exitCode = exitCode;
11539
11679
  }
11540
- exitCode;
11541
11680
  };
11542
11681
  var PlayBootstrapUsageError = class extends PlayBootstrapError {
11543
11682
  constructor(message) {
@@ -13391,11 +13530,11 @@ var TypeBoxError = class extends Error {
13391
13530
  };
13392
13531
 
13393
13532
  // ../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs
13394
- var TransformKind = /* @__PURE__ */ Symbol.for("TypeBox.Transform");
13395
- var ReadonlyKind = /* @__PURE__ */ Symbol.for("TypeBox.Readonly");
13396
- var OptionalKind = /* @__PURE__ */ Symbol.for("TypeBox.Optional");
13397
- var Hint = /* @__PURE__ */ Symbol.for("TypeBox.Hint");
13398
- var Kind = /* @__PURE__ */ Symbol.for("TypeBox.Kind");
13533
+ var TransformKind = Symbol.for("TypeBox.Transform");
13534
+ var ReadonlyKind = Symbol.for("TypeBox.Readonly");
13535
+ var OptionalKind = Symbol.for("TypeBox.Optional");
13536
+ var Hint = Symbol.for("TypeBox.Hint");
13537
+ var Kind = Symbol.for("TypeBox.Kind");
13399
13538
 
13400
13539
  // ../node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs
13401
13540
  function IsReadonly(value) {
@@ -18067,7 +18206,6 @@ var CliProgress = class {
18067
18206
  constructor(enabled) {
18068
18207
  this.enabled = enabled;
18069
18208
  }
18070
- enabled;
18071
18209
  lastMessage = null;
18072
18210
  interactive = Boolean(process.stderr.isTTY);
18073
18211
  grey = "\x1B[90m";
@@ -23721,6 +23859,10 @@ function printPlayCheckOutcome(outcome, target, prefix) {
23721
23859
  console.error(
23722
23860
  `\u2717 ${prefix}${playName} failed ${playCheckFailureStage(outcome)}`
23723
23861
  );
23862
+ printPlayCheckFeatureFlags(
23863
+ result.featureFlags,
23864
+ (line) => console.error(line)
23865
+ );
23724
23866
  const { unstructuredErrors } = partitionMirroredErrors(
23725
23867
  result.errors,
23726
23868
  result.issues
@@ -23740,6 +23882,7 @@ function printPlayCheckOutcome(outcome, target, prefix) {
23740
23882
  console.log(
23741
23883
  summary ? `\u2713 ${prefix}${playName} valid \u2014 ${summary}` : `\u2713 ${prefix}${playName} passed ${result.limits ? "cloud" : "local"} play check`
23742
23884
  );
23885
+ printPlayCheckFeatureFlags(result.featureFlags, (line) => console.log(line));
23743
23886
  if (result.artifactHash) {
23744
23887
  console.log(` artifact: ${result.artifactHash.slice(0, 12)}`);
23745
23888
  }
@@ -23761,6 +23904,11 @@ function printPlayCheckOutcome(outcome, target, prefix) {
23761
23904
  );
23762
23905
  printToolGetterHints(result.toolGetterHints);
23763
23906
  }
23907
+ function printPlayCheckFeatureFlags(flags, write) {
23908
+ for (const flag of flags ?? []) {
23909
+ write(` feature flag enabled: ${flag.label} \u2014 ${flag.reason}`);
23910
+ }
23911
+ }
23764
23912
  function printPlayCheckOutcomes(outcomes, target) {
23765
23913
  if (outcomes.length === 1) {
23766
23914
  printPlayCheckOutcome(outcomes[0], target, "");
@@ -42502,6 +42650,9 @@ async function main() {
42502
42650
  program.name("deepline").description(
42503
42651
  "Deepline CLI \u2014 GTM enrichment tools, plays, and runs from your terminal."
42504
42652
  ).version(SDK_VERSION, "-v, --version", "Show version").exitOverride().showHelpAfterError().showSuggestionAfterError(true).addHelpText(
42653
+ "beforeAll",
42654
+ "for agents: ensure you are using the /deepline-gtm skill\n"
42655
+ ).addHelpText(
42505
42656
  "after",
42506
42657
  `
42507
42658
  Common commands:
package/dist/index.d.mts CHANGED
@@ -1413,6 +1413,11 @@ interface PlayCheckResult {
1413
1413
  * `1 trigger · 2 tools · 1 dataset · 14 columns`.
1414
1414
  */
1415
1415
  summary?: string;
1416
+ /**
1417
+ * Feature-gated validation paths that were enabled for this exact cloud
1418
+ * check. Present as an empty array when no feature gate affected the result.
1419
+ */
1420
+ featureFlags?: PlayCheckFeatureFlag[];
1416
1421
  artifactHash?: string | null;
1417
1422
  graphHash?: string | null;
1418
1423
  /** SHA-256 of the exact source bytes checked by Deepline. */
@@ -1445,6 +1450,13 @@ interface PlayCheckResult {
1445
1450
  };
1446
1451
  };
1447
1452
  }
1453
+ /** An enabled server-side feature flag that affected a Play check. */
1454
+ interface PlayCheckFeatureFlag {
1455
+ id: string;
1456
+ label: string;
1457
+ enabled: true;
1458
+ reason: string;
1459
+ }
1448
1460
  /**
1449
1461
  * One exported play's check result inside a multi-play file. Carries the same
1450
1462
  * per-play fields as {@link PlayCheckResult}, unprefixed and unaggregated, so a
@@ -1464,6 +1476,7 @@ interface PlayCheckExportResult {
1464
1476
  graphHash?: string | null;
1465
1477
  sourceHash?: string | null;
1466
1478
  summary?: string;
1479
+ featureFlags?: PlayCheckFeatureFlag[];
1467
1480
  recognized?: PlayCheckRecognizedSummary;
1468
1481
  triggers?: PlayCheckTriggersSummary | null;
1469
1482
  }
@@ -2498,6 +2511,24 @@ type TargetBillingStatusResult = {
2498
2511
  pending_plan_sku: string | null;
2499
2512
  as_of: string | null;
2500
2513
  };
2514
+ type TargetAutoRechargeResult = {
2515
+ org_id: string;
2516
+ enabled: boolean;
2517
+ available: boolean;
2518
+ reason: string | null;
2519
+ threshold_credits: number | null;
2520
+ refill_to_credits: number | null;
2521
+ rolling_limit_cents: null;
2522
+ };
2523
+ type TargetAutoRechargeUpdateOptions = {
2524
+ enabled: false;
2525
+ idempotencyKey: string;
2526
+ } | {
2527
+ enabled: true;
2528
+ thresholdCredits: number;
2529
+ refillToCredits: number;
2530
+ idempotencyKey: string;
2531
+ };
2501
2532
  type TargetBillingMutationResult = {
2502
2533
  data: Record<string, unknown>;
2503
2534
  operation: TargetBillingOperation;
@@ -2617,6 +2648,11 @@ type BillingNamespace = {
2617
2648
  targetPlans: () => Promise<TargetBillingPlansResult>;
2618
2649
  /** Normalized target billing state. */
2619
2650
  targetStatus: () => Promise<TargetBillingStatusResult>;
2651
+ /** Read and manage the Metronome-backed automatic recharge configuration. */
2652
+ autoRecharge: {
2653
+ get: () => Promise<TargetAutoRechargeResult>;
2654
+ update: (options: TargetAutoRechargeUpdateOptions) => Promise<TargetAutoRechargeResult>;
2655
+ };
2620
2656
  /** Buy Deepline credits through a payment-gated Metronome commit. */
2621
2657
  purchaseCredits: (options: {
2622
2658
  credits: number;
@@ -3662,6 +3698,10 @@ declare class DeeplineClient {
3662
3698
  getTargetBillingPlans(): Promise<TargetBillingPlansResult>;
3663
3699
  /** Read the workspace's normalized target plan, payment, and balance state. */
3664
3700
  getTargetBillingStatus(): Promise<TargetBillingStatusResult>;
3701
+ /** Read the canonical Metronome automatic recharge configuration. */
3702
+ getTargetAutoRecharge(): Promise<TargetAutoRechargeResult>;
3703
+ /** Update automatic recharge and return the server-verified configuration. */
3704
+ updateTargetAutoRecharge(options: TargetAutoRechargeUpdateOptions): Promise<TargetAutoRechargeResult>;
3665
3705
  /**
3666
3706
  * Purchase target-billing credits through the durable commercial operation
3667
3707
  * flow. The caller supplies an idempotency key for safe retries.
package/dist/index.d.ts CHANGED
@@ -1413,6 +1413,11 @@ interface PlayCheckResult {
1413
1413
  * `1 trigger · 2 tools · 1 dataset · 14 columns`.
1414
1414
  */
1415
1415
  summary?: string;
1416
+ /**
1417
+ * Feature-gated validation paths that were enabled for this exact cloud
1418
+ * check. Present as an empty array when no feature gate affected the result.
1419
+ */
1420
+ featureFlags?: PlayCheckFeatureFlag[];
1416
1421
  artifactHash?: string | null;
1417
1422
  graphHash?: string | null;
1418
1423
  /** SHA-256 of the exact source bytes checked by Deepline. */
@@ -1445,6 +1450,13 @@ interface PlayCheckResult {
1445
1450
  };
1446
1451
  };
1447
1452
  }
1453
+ /** An enabled server-side feature flag that affected a Play check. */
1454
+ interface PlayCheckFeatureFlag {
1455
+ id: string;
1456
+ label: string;
1457
+ enabled: true;
1458
+ reason: string;
1459
+ }
1448
1460
  /**
1449
1461
  * One exported play's check result inside a multi-play file. Carries the same
1450
1462
  * per-play fields as {@link PlayCheckResult}, unprefixed and unaggregated, so a
@@ -1464,6 +1476,7 @@ interface PlayCheckExportResult {
1464
1476
  graphHash?: string | null;
1465
1477
  sourceHash?: string | null;
1466
1478
  summary?: string;
1479
+ featureFlags?: PlayCheckFeatureFlag[];
1467
1480
  recognized?: PlayCheckRecognizedSummary;
1468
1481
  triggers?: PlayCheckTriggersSummary | null;
1469
1482
  }
@@ -2498,6 +2511,24 @@ type TargetBillingStatusResult = {
2498
2511
  pending_plan_sku: string | null;
2499
2512
  as_of: string | null;
2500
2513
  };
2514
+ type TargetAutoRechargeResult = {
2515
+ org_id: string;
2516
+ enabled: boolean;
2517
+ available: boolean;
2518
+ reason: string | null;
2519
+ threshold_credits: number | null;
2520
+ refill_to_credits: number | null;
2521
+ rolling_limit_cents: null;
2522
+ };
2523
+ type TargetAutoRechargeUpdateOptions = {
2524
+ enabled: false;
2525
+ idempotencyKey: string;
2526
+ } | {
2527
+ enabled: true;
2528
+ thresholdCredits: number;
2529
+ refillToCredits: number;
2530
+ idempotencyKey: string;
2531
+ };
2501
2532
  type TargetBillingMutationResult = {
2502
2533
  data: Record<string, unknown>;
2503
2534
  operation: TargetBillingOperation;
@@ -2617,6 +2648,11 @@ type BillingNamespace = {
2617
2648
  targetPlans: () => Promise<TargetBillingPlansResult>;
2618
2649
  /** Normalized target billing state. */
2619
2650
  targetStatus: () => Promise<TargetBillingStatusResult>;
2651
+ /** Read and manage the Metronome-backed automatic recharge configuration. */
2652
+ autoRecharge: {
2653
+ get: () => Promise<TargetAutoRechargeResult>;
2654
+ update: (options: TargetAutoRechargeUpdateOptions) => Promise<TargetAutoRechargeResult>;
2655
+ };
2620
2656
  /** Buy Deepline credits through a payment-gated Metronome commit. */
2621
2657
  purchaseCredits: (options: {
2622
2658
  credits: number;
@@ -3662,6 +3698,10 @@ declare class DeeplineClient {
3662
3698
  getTargetBillingPlans(): Promise<TargetBillingPlansResult>;
3663
3699
  /** Read the workspace's normalized target plan, payment, and balance state. */
3664
3700
  getTargetBillingStatus(): Promise<TargetBillingStatusResult>;
3701
+ /** Read the canonical Metronome automatic recharge configuration. */
3702
+ getTargetAutoRecharge(): Promise<TargetAutoRechargeResult>;
3703
+ /** Update automatic recharge and return the server-verified configuration. */
3704
+ updateTargetAutoRecharge(options: TargetAutoRechargeUpdateOptions): Promise<TargetAutoRechargeResult>;
3665
3705
  /**
3666
3706
  * Purchase target-billing credits through the durable commercial operation
3667
3707
  * flow. The caller supplies an idempotency key for safe retries.
package/dist/index.js CHANGED
@@ -89,11 +89,11 @@ var import_node_os = require("os");
89
89
  var import_node_path = require("path");
90
90
 
91
91
  // ../shared_libs/tool-execution-error.ts
92
- var DEEPLINE_ERROR_BRAND = /* @__PURE__ */ Symbol.for("deepline.error.v1");
93
- var TOOL_EXECUTION_ERROR_BRAND = /* @__PURE__ */ Symbol.for(
92
+ var DEEPLINE_ERROR_BRAND = Symbol.for("deepline.error.v1");
93
+ var TOOL_EXECUTION_ERROR_BRAND = Symbol.for(
94
94
  "deepline.tool-execution-error.v1"
95
95
  );
96
- var PROVIDER_TRANSIENT_ERROR_BRAND = /* @__PURE__ */ Symbol.for(
96
+ var PROVIDER_TRANSIENT_ERROR_BRAND = Symbol.for(
97
97
  "deepline.provider-transient-error.v1"
98
98
  );
99
99
  var LEGACY_TOOL_EXECUTION_ERROR_SCHEMA_VERSION = 0;
@@ -783,7 +783,7 @@ var SDK_RELEASE = {
783
783
  // 0.3.0 introduces raw-v2: complete scrubbed provider responses are
784
784
  // available at toolResponse.rawV2 while toolResponse.raw and all declared
785
785
  // getters keep their established compatibility behavior.
786
- version: "0.3.21",
786
+ version: "0.3.23",
787
787
  updateSummary: "New raw-v2 tool responses preserve complete scrubbed provider envelopes at toolResponse.rawV2, including JSON:API included resources, links, cursors, and totals. Existing toolResponse.raw and declared getters keep working unchanged.",
788
788
  contracts: {
789
789
  api: {
@@ -1239,8 +1239,8 @@ var MAX_RUNTIME_TEST_POLICY_MS = 10 * 6e4;
1239
1239
  // src/http.ts
1240
1240
  var MAX_DIAGNOSTIC_HEADER_LENGTH = 120;
1241
1241
  var COWORK_NETWORK_HINT = "Claude Cowork appears to be running Deepline in a network-restricted sandbox. In Claude Desktop, open Settings > Capabilities, turn on Allow network egress, and set Domain allowlist to All domains for the Cowork session.";
1242
- var REQUEST_TIMEOUT_MARKER = /* @__PURE__ */ Symbol("deeplineRequestTimeout");
1243
- var REQUEST_ABORT_MARKER = /* @__PURE__ */ Symbol("deeplineRequestAbort");
1242
+ var REQUEST_TIMEOUT_MARKER = Symbol("deeplineRequestTimeout");
1243
+ var REQUEST_ABORT_MARKER = Symbol("deeplineRequestAbort");
1244
1244
  function normalizeRequestAbortError(error, input) {
1245
1245
  const normalized = error instanceof Error ? error : new Error(String(error));
1246
1246
  const tagged = normalized;
@@ -1298,7 +1298,6 @@ var HttpClient = class {
1298
1298
  constructor(config) {
1299
1299
  this.config = config;
1300
1300
  }
1301
- config;
1302
1301
  cleanDiagnosticHeader(value) {
1303
1302
  const normalized = String(value ?? "").replace(/[\u0000-\u001f\u007f]/g, " ").trim().slice(0, MAX_DIAGNOSTIC_HEADER_LENGTH);
1304
1303
  return normalized || null;
@@ -2105,6 +2104,7 @@ var RUNNER_TERMINAL_PUSH_MAX_BODY_BYTES = 16 * 1024 * 1024;
2105
2104
  var RUNTIME_RECEIPT_GATEWAY_BATCH_MAX_BYTES = 12 * 1024 * 1024;
2106
2105
  var RUNTIME_RECEIPT_WRITER_TARGET_BATCH_BYTES = 4 * 1024 * 1024;
2107
2106
  var RUNNER_POST_TERMINAL_DIAGNOSTIC_MAX_BYTES = 64 * 1024;
2107
+ var JSON_SIZE_LIMIT_REACHED = Symbol("JSON_SIZE_LIMIT_REACHED");
2108
2108
 
2109
2109
  // ../shared_libs/play-runtime/ledger-safe-payload.ts
2110
2110
  var ledgerIngressRedactor = createSecretRedactionContext();
@@ -2120,7 +2120,7 @@ var DOCFLOW_NODE_IO_LIMITS = {
2120
2120
  maxErrorBytes: 512
2121
2121
  };
2122
2122
  var utf8Encoder = new TextEncoder();
2123
- var PLAY_DATASET_BRAND = /* @__PURE__ */ Symbol.for("deepline.play.dataset");
2123
+ var PLAY_DATASET_BRAND = Symbol.for("deepline.play.dataset");
2124
2124
  function ledgerSafeDocflowPreviewKey(key) {
2125
2125
  if (!key.startsWith("$")) return key;
2126
2126
  const stripped = key.replace(/^\$+/, "");
@@ -3379,7 +3379,6 @@ var RunObserveTransportUnavailableError = class extends Error {
3379
3379
  this.reason = reason;
3380
3380
  this.name = "RunObserveTransportUnavailableError";
3381
3381
  }
3382
- reason;
3383
3382
  };
3384
3383
  var OBSERVE_BOOTSTRAP_TIMEOUT_MS = 1e4;
3385
3384
  var OBSERVE_RECONNECT_NOTICE_MS = 1e4;
@@ -4359,6 +4358,10 @@ var DeeplineClient = class {
4359
4358
  },
4360
4359
  targetPlans: () => this.getTargetBillingPlans(),
4361
4360
  targetStatus: () => this.getTargetBillingStatus(),
4361
+ autoRecharge: {
4362
+ get: () => this.getTargetAutoRecharge(),
4363
+ update: (options2) => this.updateTargetAutoRecharge(options2)
4364
+ },
4362
4365
  purchaseCredits: (options2) => this.purchaseTargetBillingCredits(options2),
4363
4366
  transitionPlan: (options2) => this.transitionTargetBillingPlan(options2),
4364
4367
  portalSession: () => this.createTargetBillingPortalSession()
@@ -6444,6 +6447,28 @@ var DeeplineClient = class {
6444
6447
  async getTargetBillingStatus() {
6445
6448
  return this.http.get("/api/v2/billing/status");
6446
6449
  }
6450
+ /** Read the canonical Metronome automatic recharge configuration. */
6451
+ async getTargetAutoRecharge() {
6452
+ return this.http.get(
6453
+ "/api/v2/billing/auto-recharge"
6454
+ );
6455
+ }
6456
+ /** Update automatic recharge and return the server-verified configuration. */
6457
+ async updateTargetAutoRecharge(options) {
6458
+ const idempotencyKey = requireTargetBillingIdempotencyKey(
6459
+ options.idempotencyKey
6460
+ );
6461
+ const response = await this.http.put(
6462
+ "/api/v2/billing/auto-recharge",
6463
+ options.enabled ? {
6464
+ enabled: true,
6465
+ threshold_credits: options.thresholdCredits,
6466
+ refill_to_credits: options.refillToCredits
6467
+ } : { enabled: false },
6468
+ { "Idempotency-Key": idempotencyKey }
6469
+ );
6470
+ return response.data;
6471
+ }
6447
6472
  /**
6448
6473
  * Purchase target-billing credits through the durable commercial operation
6449
6474
  * flow. The caller supplies an idempotency key for safe retries.
@@ -6964,8 +6989,8 @@ function isDeeplineExtractorTarget(value) {
6964
6989
  }
6965
6990
 
6966
6991
  // ../shared_libs/plays/dataset.ts
6967
- var PLAY_DATASET_BRAND2 = /* @__PURE__ */ Symbol.for("deepline.play.dataset");
6968
- var NODE_INSPECT_CUSTOM = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom");
6992
+ var PLAY_DATASET_BRAND2 = Symbol.for("deepline.play.dataset");
6993
+ var NODE_INSPECT_CUSTOM = Symbol.for("nodejs.util.inspect.custom");
6969
6994
  var residentRowsByDataset = /* @__PURE__ */ new WeakMap();
6970
6995
  var DEFAULT_MATERIALIZE_LIMIT = 1e4;
6971
6996
  var PLAY_DATASET_EXECUTION_PAGE_BYTES = 64 * 1024 * 1024;
@@ -7490,6 +7515,7 @@ function listNameFromDeclaredPath(path) {
7490
7515
  }
7491
7516
 
7492
7517
  // ../shared_libs/play-runtime/tool-result.ts
7518
+ var SERIALIZED_TOOL_LIST_ROWS = Symbol("deepline.serialized_tool_list_rows");
7493
7519
  var DESCRIPTOR_SUFFIX = /_(status|type|score|count|id|verified|valid|confidence|quality|source)$/i;
7494
7520
  var COMPANY_SCOPED = /company/i;
7495
7521
  var TARGET_FALLBACK_KEYS = {
@@ -8284,9 +8310,6 @@ var DeeplineConditionalStepResolver = class _DeeplineConditionalStepResolver {
8284
8310
  this.run = run;
8285
8311
  this.elseValue = elseValue;
8286
8312
  }
8287
- when;
8288
- run;
8289
- elseValue;
8290
8313
  kind = "conditional";
8291
8314
  else(value) {
8292
8315
  return new _DeeplineConditionalStepResolver(this.when, this.run, value);
@@ -8298,9 +8321,6 @@ var DeeplineStepProgram = class _DeeplineStepProgram {
8298
8321
  this.returnResolver = returnResolver;
8299
8322
  this.continueOnProviderUnavailable = continueOnProviderUnavailable;
8300
8323
  }
8301
- steps;
8302
- returnResolver;
8303
- continueOnProviderUnavailable;
8304
8324
  kind = "steps";
8305
8325
  step(name, resolver, options) {
8306
8326
  if (!name.trim()) {
@@ -8349,13 +8369,12 @@ function steps(options = {}) {
8349
8369
  function runIf(predicate, resolver) {
8350
8370
  return new DeeplineConditionalStepResolver(predicate, resolver, null);
8351
8371
  }
8352
- var PLAY_METADATA_SYMBOL = /* @__PURE__ */ Symbol.for("deepline.play.metadata");
8372
+ var PLAY_METADATA_SYMBOL = Symbol.for("deepline.play.metadata");
8353
8373
  var DeeplinePlayJobImpl = class {
8354
8374
  constructor(client, runId) {
8355
8375
  this.client = client;
8356
8376
  this.id = runId;
8357
8377
  }
8358
- client;
8359
8378
  id;
8360
8379
  async status() {
8361
8380
  return this.client.getPlayStatus(this.id);
package/dist/index.mjs CHANGED
@@ -12,11 +12,11 @@ import { homedir } from "os";
12
12
  import { dirname, isAbsolute, join, resolve } from "path";
13
13
 
14
14
  // ../shared_libs/tool-execution-error.ts
15
- var DEEPLINE_ERROR_BRAND = /* @__PURE__ */ Symbol.for("deepline.error.v1");
16
- var TOOL_EXECUTION_ERROR_BRAND = /* @__PURE__ */ Symbol.for(
15
+ var DEEPLINE_ERROR_BRAND = Symbol.for("deepline.error.v1");
16
+ var TOOL_EXECUTION_ERROR_BRAND = Symbol.for(
17
17
  "deepline.tool-execution-error.v1"
18
18
  );
19
- var PROVIDER_TRANSIENT_ERROR_BRAND = /* @__PURE__ */ Symbol.for(
19
+ var PROVIDER_TRANSIENT_ERROR_BRAND = Symbol.for(
20
20
  "deepline.provider-transient-error.v1"
21
21
  );
22
22
  var LEGACY_TOOL_EXECUTION_ERROR_SCHEMA_VERSION = 0;
@@ -706,7 +706,7 @@ var SDK_RELEASE = {
706
706
  // 0.3.0 introduces raw-v2: complete scrubbed provider responses are
707
707
  // available at toolResponse.rawV2 while toolResponse.raw and all declared
708
708
  // getters keep their established compatibility behavior.
709
- version: "0.3.21",
709
+ version: "0.3.23",
710
710
  updateSummary: "New raw-v2 tool responses preserve complete scrubbed provider envelopes at toolResponse.rawV2, including JSON:API included resources, links, cursors, and totals. Existing toolResponse.raw and declared getters keep working unchanged.",
711
711
  contracts: {
712
712
  api: {
@@ -1162,8 +1162,8 @@ var MAX_RUNTIME_TEST_POLICY_MS = 10 * 6e4;
1162
1162
  // src/http.ts
1163
1163
  var MAX_DIAGNOSTIC_HEADER_LENGTH = 120;
1164
1164
  var COWORK_NETWORK_HINT = "Claude Cowork appears to be running Deepline in a network-restricted sandbox. In Claude Desktop, open Settings > Capabilities, turn on Allow network egress, and set Domain allowlist to All domains for the Cowork session.";
1165
- var REQUEST_TIMEOUT_MARKER = /* @__PURE__ */ Symbol("deeplineRequestTimeout");
1166
- var REQUEST_ABORT_MARKER = /* @__PURE__ */ Symbol("deeplineRequestAbort");
1165
+ var REQUEST_TIMEOUT_MARKER = Symbol("deeplineRequestTimeout");
1166
+ var REQUEST_ABORT_MARKER = Symbol("deeplineRequestAbort");
1167
1167
  function normalizeRequestAbortError(error, input) {
1168
1168
  const normalized = error instanceof Error ? error : new Error(String(error));
1169
1169
  const tagged = normalized;
@@ -1221,7 +1221,6 @@ var HttpClient = class {
1221
1221
  constructor(config) {
1222
1222
  this.config = config;
1223
1223
  }
1224
- config;
1225
1224
  cleanDiagnosticHeader(value) {
1226
1225
  const normalized = String(value ?? "").replace(/[\u0000-\u001f\u007f]/g, " ").trim().slice(0, MAX_DIAGNOSTIC_HEADER_LENGTH);
1227
1226
  return normalized || null;
@@ -2028,6 +2027,7 @@ var RUNNER_TERMINAL_PUSH_MAX_BODY_BYTES = 16 * 1024 * 1024;
2028
2027
  var RUNTIME_RECEIPT_GATEWAY_BATCH_MAX_BYTES = 12 * 1024 * 1024;
2029
2028
  var RUNTIME_RECEIPT_WRITER_TARGET_BATCH_BYTES = 4 * 1024 * 1024;
2030
2029
  var RUNNER_POST_TERMINAL_DIAGNOSTIC_MAX_BYTES = 64 * 1024;
2030
+ var JSON_SIZE_LIMIT_REACHED = Symbol("JSON_SIZE_LIMIT_REACHED");
2031
2031
 
2032
2032
  // ../shared_libs/play-runtime/ledger-safe-payload.ts
2033
2033
  var ledgerIngressRedactor = createSecretRedactionContext();
@@ -2043,7 +2043,7 @@ var DOCFLOW_NODE_IO_LIMITS = {
2043
2043
  maxErrorBytes: 512
2044
2044
  };
2045
2045
  var utf8Encoder = new TextEncoder();
2046
- var PLAY_DATASET_BRAND = /* @__PURE__ */ Symbol.for("deepline.play.dataset");
2046
+ var PLAY_DATASET_BRAND = Symbol.for("deepline.play.dataset");
2047
2047
  function ledgerSafeDocflowPreviewKey(key) {
2048
2048
  if (!key.startsWith("$")) return key;
2049
2049
  const stripped = key.replace(/^\$+/, "");
@@ -3302,7 +3302,6 @@ var RunObserveTransportUnavailableError = class extends Error {
3302
3302
  this.reason = reason;
3303
3303
  this.name = "RunObserveTransportUnavailableError";
3304
3304
  }
3305
- reason;
3306
3305
  };
3307
3306
  var OBSERVE_BOOTSTRAP_TIMEOUT_MS = 1e4;
3308
3307
  var OBSERVE_RECONNECT_NOTICE_MS = 1e4;
@@ -4282,6 +4281,10 @@ var DeeplineClient = class {
4282
4281
  },
4283
4282
  targetPlans: () => this.getTargetBillingPlans(),
4284
4283
  targetStatus: () => this.getTargetBillingStatus(),
4284
+ autoRecharge: {
4285
+ get: () => this.getTargetAutoRecharge(),
4286
+ update: (options2) => this.updateTargetAutoRecharge(options2)
4287
+ },
4285
4288
  purchaseCredits: (options2) => this.purchaseTargetBillingCredits(options2),
4286
4289
  transitionPlan: (options2) => this.transitionTargetBillingPlan(options2),
4287
4290
  portalSession: () => this.createTargetBillingPortalSession()
@@ -6367,6 +6370,28 @@ var DeeplineClient = class {
6367
6370
  async getTargetBillingStatus() {
6368
6371
  return this.http.get("/api/v2/billing/status");
6369
6372
  }
6373
+ /** Read the canonical Metronome automatic recharge configuration. */
6374
+ async getTargetAutoRecharge() {
6375
+ return this.http.get(
6376
+ "/api/v2/billing/auto-recharge"
6377
+ );
6378
+ }
6379
+ /** Update automatic recharge and return the server-verified configuration. */
6380
+ async updateTargetAutoRecharge(options) {
6381
+ const idempotencyKey = requireTargetBillingIdempotencyKey(
6382
+ options.idempotencyKey
6383
+ );
6384
+ const response = await this.http.put(
6385
+ "/api/v2/billing/auto-recharge",
6386
+ options.enabled ? {
6387
+ enabled: true,
6388
+ threshold_credits: options.thresholdCredits,
6389
+ refill_to_credits: options.refillToCredits
6390
+ } : { enabled: false },
6391
+ { "Idempotency-Key": idempotencyKey }
6392
+ );
6393
+ return response.data;
6394
+ }
6370
6395
  /**
6371
6396
  * Purchase target-billing credits through the durable commercial operation
6372
6397
  * flow. The caller supplies an idempotency key for safe retries.
@@ -6887,8 +6912,8 @@ function isDeeplineExtractorTarget(value) {
6887
6912
  }
6888
6913
 
6889
6914
  // ../shared_libs/plays/dataset.ts
6890
- var PLAY_DATASET_BRAND2 = /* @__PURE__ */ Symbol.for("deepline.play.dataset");
6891
- var NODE_INSPECT_CUSTOM = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom");
6915
+ var PLAY_DATASET_BRAND2 = Symbol.for("deepline.play.dataset");
6916
+ var NODE_INSPECT_CUSTOM = Symbol.for("nodejs.util.inspect.custom");
6892
6917
  var residentRowsByDataset = /* @__PURE__ */ new WeakMap();
6893
6918
  var DEFAULT_MATERIALIZE_LIMIT = 1e4;
6894
6919
  var PLAY_DATASET_EXECUTION_PAGE_BYTES = 64 * 1024 * 1024;
@@ -7413,6 +7438,7 @@ function listNameFromDeclaredPath(path) {
7413
7438
  }
7414
7439
 
7415
7440
  // ../shared_libs/play-runtime/tool-result.ts
7441
+ var SERIALIZED_TOOL_LIST_ROWS = Symbol("deepline.serialized_tool_list_rows");
7416
7442
  var DESCRIPTOR_SUFFIX = /_(status|type|score|count|id|verified|valid|confidence|quality|source)$/i;
7417
7443
  var COMPANY_SCOPED = /company/i;
7418
7444
  var TARGET_FALLBACK_KEYS = {
@@ -8207,9 +8233,6 @@ var DeeplineConditionalStepResolver = class _DeeplineConditionalStepResolver {
8207
8233
  this.run = run;
8208
8234
  this.elseValue = elseValue;
8209
8235
  }
8210
- when;
8211
- run;
8212
- elseValue;
8213
8236
  kind = "conditional";
8214
8237
  else(value) {
8215
8238
  return new _DeeplineConditionalStepResolver(this.when, this.run, value);
@@ -8221,9 +8244,6 @@ var DeeplineStepProgram = class _DeeplineStepProgram {
8221
8244
  this.returnResolver = returnResolver;
8222
8245
  this.continueOnProviderUnavailable = continueOnProviderUnavailable;
8223
8246
  }
8224
- steps;
8225
- returnResolver;
8226
- continueOnProviderUnavailable;
8227
8247
  kind = "steps";
8228
8248
  step(name, resolver, options) {
8229
8249
  if (!name.trim()) {
@@ -8272,13 +8292,12 @@ function steps(options = {}) {
8272
8292
  function runIf(predicate, resolver) {
8273
8293
  return new DeeplineConditionalStepResolver(predicate, resolver, null);
8274
8294
  }
8275
- var PLAY_METADATA_SYMBOL = /* @__PURE__ */ Symbol.for("deepline.play.metadata");
8295
+ var PLAY_METADATA_SYMBOL = Symbol.for("deepline.play.metadata");
8276
8296
  var DeeplinePlayJobImpl = class {
8277
8297
  constructor(client, runId) {
8278
8298
  this.client = client;
8279
8299
  this.id = runId;
8280
8300
  }
8281
- client;
8282
8301
  id;
8283
8302
  async status() {
8284
8303
  return this.client.getPlayStatus(this.id);
@@ -61,6 +61,13 @@ var PLAY_BACKEND_DESCRIPTORS = {
61
61
  };
62
62
 
63
63
  // ../shared_libs/tool-execution-error.ts
64
+ var DEEPLINE_ERROR_BRAND = Symbol.for("deepline.error.v1");
65
+ var TOOL_EXECUTION_ERROR_BRAND = Symbol.for(
66
+ "deepline.tool-execution-error.v1"
67
+ );
68
+ var PROVIDER_TRANSIENT_ERROR_BRAND = Symbol.for(
69
+ "deepline.provider-transient-error.v1"
70
+ );
64
71
  var TOOL_EXECUTION_ERROR_SCHEMA_VERSION = 1;
65
72
 
66
73
  // ../shared_libs/plays/artifact-contract-version.ts
@@ -264,11 +271,11 @@ var TypeBoxError = class extends Error {
264
271
  };
265
272
 
266
273
  // ../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs
267
- var TransformKind = /* @__PURE__ */ Symbol.for("TypeBox.Transform");
268
- var ReadonlyKind = /* @__PURE__ */ Symbol.for("TypeBox.Readonly");
269
- var OptionalKind = /* @__PURE__ */ Symbol.for("TypeBox.Optional");
270
- var Hint = /* @__PURE__ */ Symbol.for("TypeBox.Hint");
271
- var Kind = /* @__PURE__ */ Symbol.for("TypeBox.Kind");
274
+ var TransformKind = Symbol.for("TypeBox.Transform");
275
+ var ReadonlyKind = Symbol.for("TypeBox.Readonly");
276
+ var OptionalKind = Symbol.for("TypeBox.Optional");
277
+ var Hint = Symbol.for("TypeBox.Hint");
278
+ var Kind = Symbol.for("TypeBox.Kind");
272
279
 
273
280
  // ../node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs
274
281
  function IsReadonly(value) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.3.21",
3
+ "version": "0.3.23",
4
4
  "description": "GTM data CLI and TypeScript SDK for coding agents",
5
5
  "license": "MIT",
6
6
  "homepage": "https://code.deepline.com",