deepline 0.3.336 → 0.3.338

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 (106) hide show
  1. package/dist/bundling-sources/sdk/src/agent-runtime.ts +21 -0
  2. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  3. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +2 -2
  4. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +18 -5
  5. package/dist/bundling-sources/shared_libs/product-notifications/catalog.ts +19 -8
  6. package/dist/bundling-sources/shared_libs/product-notifications/configuration-draft.ts +35 -0
  7. package/dist/bundling-sources/shared_libs/product-notifications/configuration.ts +52 -5
  8. package/dist/bundling-sources/shared_libs/product-notifications/default-policy.ts +3 -5
  9. package/dist/cli/auth-LVTYDMEL.js +31 -0
  10. package/dist/cli/{auth-M45QKCUL.mjs → auth-MTF2TRBC.mjs} +4 -4
  11. package/dist/cli/{billing-E7ADEFLX.mjs → billing-HXXPKDYV.mjs} +4 -4
  12. package/dist/cli/{billing-XCJVALTC.js → billing-OXEY6DAU.js} +71 -71
  13. package/dist/cli/{chunk-LOD6RKCD.js → chunk-5OHHWYOV.js} +45 -45
  14. package/dist/cli/{chunk-PWY5DNNP.mjs → chunk-6CEPAFCE.mjs} +4 -4
  15. package/dist/cli/{chunk-4WHJDGBC.js → chunk-7EQ3WFD2.js} +9 -9
  16. package/dist/cli/{chunk-GATWDGMB.mjs → chunk-7WL23HDH.mjs} +1 -1
  17. package/dist/cli/{chunk-LDMQDERZ.js → chunk-AHO5IXHM.js} +15 -15
  18. package/dist/cli/{chunk-I5XF4PWD.js → chunk-BYIWZOSA.js} +6 -6
  19. package/dist/cli/{chunk-B53RXFGP.mjs → chunk-CGVCELEC.mjs} +1 -1
  20. package/dist/cli/{chunk-Q2HYQOID.js → chunk-CVSUI4Z2.js} +48 -48
  21. package/dist/cli/{chunk-4S3G43M3.mjs → chunk-FBU4A2ZE.mjs} +2 -2
  22. package/dist/cli/{chunk-KZT7YX7R.js → chunk-FOODYFMR.js} +1 -1
  23. package/dist/cli/{chunk-ZXBVQAQW.js → chunk-FYR7GGUF.js} +225 -225
  24. package/dist/cli/{chunk-5S4FMN6T.js → chunk-HJEHCSFH.js} +8 -8
  25. package/dist/cli/{chunk-IT3AQZDG.mjs → chunk-ID5OGCLU.mjs} +3 -3
  26. package/dist/cli/{chunk-TGMDQIYJ.mjs → chunk-J47TX67H.mjs} +1 -1
  27. package/dist/cli/{chunk-NCPAHNXJ.js → chunk-KLAWLBSP.js} +60 -60
  28. package/dist/cli/{chunk-2CJUQWW2.js → chunk-KRZDVQZH.js} +70 -28
  29. package/dist/cli/{chunk-WWZJ6P22.mjs → chunk-MIHJFRGP.mjs} +2 -2
  30. package/dist/cli/{chunk-4NJCGGHK.mjs → chunk-N3EOKUQV.mjs} +54 -12
  31. package/dist/cli/{chunk-TV6BWFGU.mjs → chunk-NHTICK5G.mjs} +2 -2
  32. package/dist/cli/{chunk-EBIISKOH.js → chunk-NR5ILIKI.js} +2 -2
  33. package/dist/cli/{chunk-ZPLBQ24U.js → chunk-NUJIZBLA.js} +89 -76
  34. package/dist/cli/{chunk-JULF4SPK.mjs → chunk-OTJMWSIK.mjs} +5 -5
  35. package/dist/cli/{chunk-VOD4V4G4.mjs → chunk-SSRGN56V.mjs} +1 -1
  36. package/dist/cli/{chunk-VD45LDLL.mjs → chunk-UVGGJ2CV.mjs} +6 -6
  37. package/dist/cli/{chunk-JEE7AKWP.js → chunk-XWTEOTGL.js} +26 -26
  38. package/dist/cli/{chunk-IU3TFWPR.mjs → chunk-YMLGJ2B7.mjs} +14 -1
  39. package/dist/cli/{client-MUO4FRKO.mjs → client-LXBODS53.mjs} +3 -3
  40. package/dist/cli/client-V4OIXTP6.js +20 -0
  41. package/dist/cli/{csv-2RT3FVOD.mjs → csv-3346Z7MA.mjs} +3 -3
  42. package/dist/cli/{csv-NGNI7CWG.js → csv-5UMO4TMZ.js} +12 -12
  43. package/dist/cli/{db-KUKHLFYS.mjs → db-HVAQDN7U.mjs} +4 -4
  44. package/dist/cli/{db-7GKM6IUK.js → db-RBWIVEB3.js} +29 -29
  45. package/dist/cli/{describe-RDSWCQCO.js → describe-LAAOJYI2.js} +15 -15
  46. package/dist/cli/{describe-6MJ4B7NU.mjs → describe-OKSZOU3V.mjs} +8 -8
  47. package/dist/cli/{executions-E6NAUIUO.js → executions-5WENZ6MO.js} +6 -6
  48. package/dist/cli/{executions-C7NXL7QR.mjs → executions-T56YNXAC.mjs} +4 -4
  49. package/dist/cli/{feedback-D52ZWOTA.mjs → feedback-RU4EKJYX.mjs} +8 -3
  50. package/dist/cli/{feedback-K5MAECHI.js → feedback-YZILULGJ.js} +11 -6
  51. package/dist/cli/{git-YJLIAQJW.mjs → git-LX7NYWDT.mjs} +4 -4
  52. package/dist/cli/git-XASJHFDR.js +23 -0
  53. package/dist/cli/index.js +79 -79
  54. package/dist/cli/index.mjs +31 -31
  55. package/dist/cli/{legacy-noops-V3BNZ4BV.js → legacy-noops-K6W26TQA.js} +7 -7
  56. package/dist/cli/{legacy-noops-PK6JF4Y5.mjs → legacy-noops-SN44IUWD.mjs} +4 -4
  57. package/dist/cli/{monitors-ABKZDCOX.mjs → monitors-BQ5SXRDD.mjs} +4 -4
  58. package/dist/cli/{monitors-ZC6CFUHS.js → monitors-R4D7X7PL.js} +85 -85
  59. package/dist/cli/{org-RQGEMXS6.js → org-6GWQHHLF.js} +60 -60
  60. package/dist/cli/{org-JB46ECLU.mjs → org-RNR3CGVL.mjs} +4 -4
  61. package/dist/cli/play-2V2Y4P3P.js +153 -0
  62. package/dist/cli/{play-WANQPXLR.mjs → play-CPG4HFXR.mjs} +7 -7
  63. package/dist/cli/{providers-JRRQEOUN.js → providers-AP5NBYJF.js} +7 -7
  64. package/dist/cli/{providers-T4FBXHMX.mjs → providers-YEFPQW3K.mjs} +4 -4
  65. package/dist/cli/{quickstart-35VIDBJK.js → quickstart-5D6WSPKU.js} +5 -5
  66. package/dist/cli/{quickstart-KTT4JBZY.mjs → quickstart-IT43KYUN.mjs} +3 -3
  67. package/dist/cli/{search-DZ5I6Q5Z.mjs → search-BVTZBNF3.mjs} +5 -5
  68. package/dist/cli/search-O66KVPGA.js +26 -0
  69. package/dist/cli/{secrets-H6UBIMY7.mjs → secrets-7HG77SLP.mjs} +4 -4
  70. package/dist/cli/{secrets-4FZIXXPT.js → secrets-L6Q2JJNX.js} +13 -13
  71. package/dist/cli/{sessions-63S3OOVP.mjs → sessions-SSBDCVQN.mjs} +4 -4
  72. package/dist/cli/{sessions-RDM6DBHZ.js → sessions-TNXYON2R.js} +5 -5
  73. package/dist/cli/{settings-S4AHAT3J.js → settings-4FKK3LUF.js} +74 -74
  74. package/dist/cli/{settings-JQQVY5I5.mjs → settings-5L23COY7.mjs} +7 -7
  75. package/dist/cli/{setup-76X6E2IB.js → setup-EB5JLUFH.js} +41 -41
  76. package/dist/cli/{setup-W6U2T7HU.mjs → setup-GXXWJFRV.mjs} +6 -6
  77. package/dist/cli/{skills-ONHUMRAF.mjs → skills-ETEFVVPT.mjs} +4 -4
  78. package/dist/cli/skills-XFMWA4WX.js +28 -0
  79. package/dist/cli/tools-3TWNYKZY.js +40 -0
  80. package/dist/cli/{tools-JEC63YLX.mjs → tools-HDTU55RW.mjs} +6 -6
  81. package/dist/cli/update-AEBCM2LT.js +28 -0
  82. package/dist/cli/{update-3M5CUY4U.mjs → update-FR5QUV5I.mjs} +6 -6
  83. package/dist/cli/{workflow-SDT7YIQ7.mjs → workflow-BE77YVLP.mjs} +5 -5
  84. package/dist/cli/{workflow-PEU7CC4I.js → workflow-OFWWX4ZP.js} +15 -15
  85. package/dist/{client-PDAfbylh.d.mts → client-B-hjM1NX.d.mts} +18 -2
  86. package/dist/{client-DkoxT4wF.d.ts → client-txa3om01.d.ts} +18 -2
  87. package/dist/index.d.mts +2 -2
  88. package/dist/index.d.ts +2 -2
  89. package/dist/index.js +6 -6
  90. package/dist/index.mjs +3 -3
  91. package/dist/install-integrity.json +76 -76
  92. package/dist/plays/run-request.d.mts +1 -1
  93. package/dist/plays/run-request.d.ts +1 -1
  94. package/dist/release.d.mts +1 -1
  95. package/dist/release.d.ts +1 -1
  96. package/dist/release.js +2 -2
  97. package/dist/release.mjs +1 -1
  98. package/package.json +1 -1
  99. package/dist/cli/auth-6RQLNYNF.js +0 -31
  100. package/dist/cli/client-LNCVWDUS.js +0 -20
  101. package/dist/cli/git-E62XZHQW.js +0 -23
  102. package/dist/cli/play-TRKFECQV.js +0 -153
  103. package/dist/cli/search-KMMM4BRX.js +0 -26
  104. package/dist/cli/skills-HLLZUL4W.js +0 -28
  105. package/dist/cli/tools-YSUGUPYH.js +0 -40
  106. package/dist/cli/update-ASHUXHC5.js +0 -28
@@ -29,6 +29,27 @@ export function normalizeAgentRuntime(
29
29
  return EXPLICIT_AGENT_RUNTIMES.has(explicit) ? explicit : null;
30
30
  }
31
31
 
32
+ /** Variables agents set to tell the commands they run their session ID. */
33
+ const AGENT_SESSION_ID_VARIABLES = [
34
+ 'CLAUDE_CODE_SESSION_ID',
35
+ 'CODEX_SESSION_ID',
36
+ 'CODEX_THREAD_ID',
37
+ ];
38
+
39
+ /**
40
+ * The ID of the agent session this process was launched from, or null outside
41
+ * one. Every command that needs the session ID reads it here.
42
+ */
43
+ export function agentSessionIdFromEnvironment(
44
+ env: NodeJS.ProcessEnv = process.env,
45
+ ): string | null {
46
+ for (const variable of AGENT_SESSION_ID_VARIABLES) {
47
+ const sessionId = env[variable]?.trim();
48
+ if (sessionId) return sessionId;
49
+ }
50
+ return null;
51
+ }
52
+
32
53
  export function isCoworkLikeSandbox(): boolean {
33
54
  const pluginMode = truthyEnv('DEEPLINE_PLUGIN_MODE');
34
55
  const claudeRemote = truthyEnv('CLAUDE_CODE_REMOTE');
@@ -200,7 +200,7 @@ export const SDK_RELEASE = {
200
200
  // getters keep their established compatibility behavior.
201
201
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
202
202
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
203
- version: '0.3.336',
203
+ version: '0.3.338',
204
204
  updateSummary:
205
205
  'Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.',
206
206
  packageCapabilities: {
@@ -111,8 +111,8 @@
111
111
  "id": "github.convex-data-sync-to-snowflake",
112
112
  "name": "Convex Data Sync to Snowflake",
113
113
  "scheduler": "github_actions",
114
- "cadence": "17,47 * * * *",
115
- "timezone": "UTC",
114
+ "cadence": "17,47 9-23 * * 1-5; 17 1-7/2 * * 1-5; 17 1-23/2 * * 0,6",
115
+ "timezone": "America/New_York",
116
116
  "source": ".github/workflows/convex-data-sync-to-snowflake.yml",
117
117
  "locator": "schedule:",
118
118
  "owner": "data-platform",
@@ -18303,7 +18303,7 @@ async function claimPostgresSchedulerOutboxPrefix(
18303
18303
  );
18304
18304
  // Search is locally indexed and acknowledged; it has no remote ingress
18305
18305
  // receipt to freeze. Preserve causal ordering/due/lease checks, but admit
18306
- // its full prefix instead of inheriting lifecycle's singleton transport.
18306
+ // its full prefix. Lifecycle ingress prefixes require receiver support.
18307
18307
  const ingressPrefixSql =
18308
18308
  input.searchOnly === true
18309
18309
  ? 'true'
@@ -21072,8 +21072,14 @@ async function dispatchRunLedgerOutboxBatchWithScope(
21072
21072
  authorityScope.authority?.runtimeApi.invalidateExecutorToken?.();
21073
21073
  authorityScope.authority = null;
21074
21074
  await releasePendingContinuation();
21075
- if (input.signal?.aborted) {
21076
- // The caller's latency budget expired; this is not a delivery failure.
21075
+ if (
21076
+ input.signal?.aborted ||
21077
+ (error instanceof RunLedgerProjectionLeaseLostError &&
21078
+ error.reason === 'head_lease_owner_mismatch')
21079
+ ) {
21080
+ // A skipped busy Run during prefix widening or a transferred head is a
21081
+ // handoff, not a failed delivery. The owner fence also protects a newer
21082
+ // cancellation lease. Caller deadline expiry uses the same handoff.
21077
21083
  // Release the lease (fenced to this owner) without charging a
21078
21084
  // projection attempt or scheduling backoff, and wake the durable
21079
21085
  // projector. If the append already reached the ledger, the projector's
@@ -21116,14 +21122,21 @@ async function dispatchRunLedgerOutboxBatchWithScope(
21116
21122
  } catch {
21117
21123
  // Observation must never affect durable delivery.
21118
21124
  }
21125
+ // A replaced owner still has the undelivered fact. Report the handoff
21126
+ // even when this owner's fenced release cannot update that row.
21127
+ const handedOff =
21128
+ error instanceof RunLedgerProjectionLeaseLostError &&
21129
+ error.reason === 'head_lease_owner_mismatch'
21130
+ ? eventIds
21131
+ : released;
21119
21132
  return {
21120
21133
  attempted: events.length,
21121
21134
  projected: 0,
21122
21135
  eventIds: [],
21123
21136
  failed: 0,
21124
21137
  failedEventIds: [],
21125
- retrying: released.length,
21126
- retryingEventIds: released,
21138
+ retrying: handedOff.length,
21139
+ retryingEventIds: handedOff,
21127
21140
  };
21128
21141
  }
21129
21142
  if (error instanceof DeferredRuntimeProjectionInputError) {
@@ -113,10 +113,8 @@ type NotificationTypeRegistration = NotificationTypeDefinition & {
113
113
  catalog?: ProductNotificationTypeCatalogMetadata;
114
114
  rule?: ProductNotificationRuleDefinition;
115
115
  /**
116
- * A platform-emitted rule with no catalog entry: never listed, never
117
- * accepted by a workspace mutation, regardless of caller. Distinct from an
118
- * inert catalog-less type (e.g. one with no producer yet) because a shadow
119
- * type still ships a `rule.default` and fires for every workspace.
116
+ * A platform-owned rule. Marketing permits enabled-only overrides;
117
+ * internal reporting rules stay hidden and cannot be configured.
120
118
  */
121
119
  shadow?: true;
122
120
  };
@@ -656,7 +654,14 @@ const PRODUCT_NOTIFICATION_TYPE_REGISTRY = [
656
654
  allowedTriggers: ['threshold_crossing'],
657
655
  // Credit purchase thank-you: fires for every workspace once a purchase
658
656
  // reaches 500 credits. Not configurable — see the `shadow` field.
659
- catalog: undefined,
657
+ catalog: {
658
+ name: 'Credit purchase thank-you',
659
+ category: 'credits',
660
+ description:
661
+ 'Email workspace owners for each credit purchase of at least 500 credits.',
662
+ allowMultiple: false,
663
+ editor: { kind: 'none' },
664
+ },
660
665
  shadow: true,
661
666
  rule: {
662
667
  default: { ruleKey: 'default.credits_purchased', groupKey: 'shadow' },
@@ -710,7 +715,13 @@ const PRODUCT_NOTIFICATION_TYPE_REGISTRY = [
710
715
  allowedTriggers: ['each_match'],
711
716
  // Plan welcome: fires for every workspace on plan purchase. Not
712
717
  // configurable — see the `shadow` field.
713
- catalog: undefined,
718
+ catalog: {
719
+ name: 'Plan welcome',
720
+ category: 'credits',
721
+ description: 'Email workspace owners when purchasing a paid plan.',
722
+ allowMultiple: false,
723
+ editor: { kind: 'none' },
724
+ },
714
725
  shadow: true,
715
726
  rule: {
716
727
  default: { ruleKey: 'default.plan_purchased', groupKey: 'shadow' },
@@ -992,8 +1003,8 @@ export const PRODUCT_NOTIFICATION_TYPE_CATALOG: readonly ProductNotificationType
992
1003
 
993
1004
  /**
994
1005
  * Platform-owned notification types with a default rule that fires for every
995
- * workspace but is never listed or user-editable. A workspace mutation must
996
- * reject any of these ids outright, not merely omit them from a listing.
1006
+ * workspace. Marketing rules permit enabled-only workspace overrides;
1007
+ * internal reporting rules remain hidden.
997
1008
  */
998
1009
  export const PRODUCT_NOTIFICATION_SHADOW_TYPES: ReadonlySet<string> = new Set(
999
1010
  PRODUCT_NOTIFICATION_TYPE_REGISTRY.filter(
@@ -10,6 +10,7 @@ import type {
10
10
  ProductNotificationGroupDraft,
11
11
  } from './configuration';
12
12
  import { productNotificationValuesEqual } from './configuration';
13
+ import { PRODUCT_NOTIFICATION_SHADOW_TYPES } from './catalog';
13
14
  import { normalizeProductNotificationEmailList } from './configuration';
14
15
  export {
15
16
  createProductNotificationRule,
@@ -190,6 +191,40 @@ export function buildProductNotificationGroupOperations(
190
191
  throw new Error('Every rule must belong to the saved group.');
191
192
  }
192
193
  }
194
+ if (draft.group.groupKey === 'shadow') {
195
+ if (
196
+ draft.group.configMode === 'disable_default' ||
197
+ draft.rules.some((rule) => rule.configMode === 'disable_default') ||
198
+ draft.destinations.some(
199
+ (destination) => destination.configMode === 'disable_default',
200
+ )
201
+ ) {
202
+ throw new Error(
203
+ 'Marketing permits visible toggles only, not removal of defaults.',
204
+ );
205
+ }
206
+
207
+ const original = getProductNotificationGroupDraft(saved, 'shadow');
208
+ const fixed = (value: ProductNotificationGroupDraft) => ({
209
+ group: { ...comparableGroup(value.group), enabled: true },
210
+ destinations: value.destinations.map(comparableDestination),
211
+ rules: value.rules.map((rule) => ({
212
+ ...comparableRule(rule),
213
+ enabled: true,
214
+ })),
215
+ });
216
+ if (!productNotificationValuesEqual(fixed(original), fixed(draft))) {
217
+ throw new Error('Marketing permits notification and group toggles only.');
218
+ }
219
+ } else if (
220
+ draft.rules.some((rule) =>
221
+ PRODUCT_NOTIFICATION_SHADOW_TYPES.has(rule.notificationType),
222
+ )
223
+ ) {
224
+ throw new Error(
225
+ 'Marketing notifications cannot be configured in other groups.',
226
+ );
227
+ }
193
228
  const operations: ProductNotificationConfigurationOperation[] = [];
194
229
  const savedGroup = saved.groups.find(
195
230
  (group) => group.groupKey === draft.group.groupKey,
@@ -342,8 +342,38 @@ function overlayDefaults<
342
342
  `${input.label} ${key} must use its own key as defaultKey.`,
343
343
  );
344
344
  }
345
- if (value.configMode === 'disable_default') {
346
- effective.delete(key);
345
+ if (
346
+ value.configMode === 'disable_default' ||
347
+ (value.enabled === false &&
348
+ (input.keyName === 'destinationKey' ||
349
+ (input.keyName === 'ruleKey' && value.groupKey !== 'shadow')))
350
+ ) {
351
+ const marketingDefault = input.defaults.find(
352
+ (defaultValue) =>
353
+ defaultValue[input.keyName] === key &&
354
+ defaultValue.groupKey === 'shadow',
355
+ );
356
+ if (marketingDefault) {
357
+ // Keep opt-outs visible; recipient opt-outs pause the group switch.
358
+ effective.set(
359
+ key,
360
+ input.keyName === 'destinationKey'
361
+ ? input.fromDefault(marketingDefault, input.defaultVersion)
362
+ : input.fromWorkspace({
363
+ ...value,
364
+ ...marketingDefault,
365
+ enabled: false,
366
+ configMode: 'replace_default',
367
+ ...(input.keyName === 'ruleKey'
368
+ ? { conditionGeneration: value.conditionGeneration }
369
+ : {}),
370
+ }),
371
+ );
372
+ } else if (value.configMode === 'disable_default') {
373
+ effective.delete(key);
374
+ } else {
375
+ effective.set(key, input.fromWorkspace(value));
376
+ }
347
377
  } else {
348
378
  effective.set(key, input.fromWorkspace(value));
349
379
  }
@@ -388,7 +418,10 @@ export function resolveEffectiveProductNotificationConfiguration(input: {
388
418
  );
389
419
  const replacedDefaultGroupKeys = new Set(
390
420
  input.groups
391
- .filter((group) => group.configMode === 'replace_default')
421
+ .filter(
422
+ (group) =>
423
+ group.configMode === 'replace_default' && group.groupKey !== 'shadow',
424
+ )
392
425
  .map((group) => group.groupKey),
393
426
  );
394
427
  for (const destination of input.policy.destinations) {
@@ -427,7 +460,11 @@ export function resolveEffectiveProductNotificationConfiguration(input: {
427
460
  }),
428
461
  fromWorkspace: (value) => ({
429
462
  groupKey: value.groupKey,
430
- name: value.name,
463
+ name:
464
+ value.groupKey === 'shadow'
465
+ ? (input.policy.groups.find((group) => group.groupKey === 'shadow')
466
+ ?.name ?? value.name)
467
+ : value.name,
431
468
  enabled: value.enabled,
432
469
  deliveryTiming: normalizeProductNotificationDeliveryTiming(
433
470
  value.deliveryTiming,
@@ -437,7 +474,17 @@ export function resolveEffectiveProductNotificationConfiguration(input: {
437
474
  defaultKey: value.defaultKey,
438
475
  version: value.version,
439
476
  }),
440
- });
477
+ }).map((group) =>
478
+ group.groupKey === 'shadow' &&
479
+ input.destinations.some(
480
+ (destination) =>
481
+ (destination.configMode === 'disable_default' ||
482
+ destination.enabled === false) &&
483
+ defaultDestinationGroups.get(destination.destinationKey) === 'shadow',
484
+ )
485
+ ? { ...group, enabled: false }
486
+ : group,
487
+ );
441
488
  const groupKeys = new Set(groups.map((group) => group.groupKey));
442
489
 
443
490
  const destinations = overlayDefaults<
@@ -29,12 +29,10 @@ export const CURRENT_PRODUCT_NOTIFICATION_DEFAULT_POLICY = {
29
29
  deliveryTiming: DEFAULT_PRODUCT_NOTIFICATION_DELIVERY_TIMING,
30
30
  },
31
31
  {
32
- // Holds shadow (platform-owned, unconfigurable) rules. Kept in its own
33
- // group so a customer save of the "default" group's rules never diffs
34
- // against — and so never implicitly disables — a shadow rule it can't
35
- // see. See PRODUCT_NOTIFICATION_SHADOW_TYPES.
32
+ // Keep the stable key for existing stored overrides. Marketing allows
33
+ // enabled overrides only; definitions and destinations stay code-owned.
36
34
  groupKey: 'shadow',
37
- name: 'Platform notifications',
35
+ name: 'Marketing',
38
36
  enabled: true,
39
37
  deliveryTiming: DEFAULT_PRODUCT_NOTIFICATION_DELIVERY_TIMING,
40
38
  },
@@ -0,0 +1,31 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+ var _chunkCVSUI4Z2js = require('./chunk-CVSUI4Z2.js');
13
+ require('./chunk-BYIWZOSA.js');
14
+ require('./chunk-NUJIZBLA.js');
15
+ require('./chunk-XNYIZMNQ.js');
16
+ require('./chunk-FOODYFMR.js');
17
+ require('./chunk-7P5AA3SN.js');
18
+ require('./chunk-OG64RBAC.js');
19
+ require('./chunk-COGTRVWW.js');
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+ exports.EXIT_WORKSPACE_MISMATCH = _chunkCVSUI4Z2js.EXIT_WORKSPACE_MISMATCH; exports.clearPendingClaim = _chunkCVSUI4Z2js.clearPendingClaim; exports.clearSatisfiedPendingClaim = _chunkCVSUI4Z2js.clearSatisfiedPendingClaim; exports.handleRegister = _chunkCVSUI4Z2js.handleRegister; exports.handleStatus = _chunkCVSUI4Z2js.handleStatus; exports.handleWait = _chunkCVSUI4Z2js.handleWait; exports.readPendingAuthClaim = _chunkCVSUI4Z2js.readPendingAuthClaim; exports.registerAuthCommands = _chunkCVSUI4Z2js.registerAuthCommands; exports.reportSetupCompleted = _chunkCVSUI4Z2js.reportSetupCompleted; exports.resolvePendingAuthClaimForResume = _chunkCVSUI4Z2js.resolvePendingAuthClaimForResume;
@@ -9,11 +9,11 @@ import {
9
9
  registerAuthCommands,
10
10
  reportSetupCompleted,
11
11
  resolvePendingAuthClaimForResume
12
- } from "./chunk-4S3G43M3.mjs";
13
- import "./chunk-TGMDQIYJ.mjs";
14
- import "./chunk-IU3TFWPR.mjs";
12
+ } from "./chunk-FBU4A2ZE.mjs";
13
+ import "./chunk-J47TX67H.mjs";
14
+ import "./chunk-YMLGJ2B7.mjs";
15
15
  import "./chunk-DLIRSHV6.mjs";
16
- import "./chunk-B53RXFGP.mjs";
16
+ import "./chunk-CGVCELEC.mjs";
17
17
  import "./chunk-NXGCO4JB.mjs";
18
18
  import "./chunk-WZYKRD7T.mjs";
19
19
  import "./chunk-KRD6H754.mjs";
@@ -2,7 +2,7 @@ import {
2
2
  DeeplineClient,
3
3
  iterateCursorPages,
4
4
  requireBillingIdempotencyKey
5
- } from "./chunk-VOD4V4G4.mjs";
5
+ } from "./chunk-SSRGN56V.mjs";
6
6
  import "./chunk-CBVIJSHF.mjs";
7
7
  import {
8
8
  createTimestampedName,
@@ -10,13 +10,13 @@ import {
10
10
  openInBrowser,
11
11
  printCommandEnvelope,
12
12
  shouldEmitJson
13
- } from "./chunk-TGMDQIYJ.mjs";
13
+ } from "./chunk-J47TX67H.mjs";
14
14
  import {
15
15
  AuthError,
16
16
  ConfigError
17
- } from "./chunk-IU3TFWPR.mjs";
17
+ } from "./chunk-YMLGJ2B7.mjs";
18
18
  import "./chunk-DLIRSHV6.mjs";
19
- import "./chunk-B53RXFGP.mjs";
19
+ import "./chunk-CGVCELEC.mjs";
20
20
  import "./chunk-6IKARAYD.mjs";
21
21
  import {
22
22
  DeeplineError