deepline 0.3.89 → 0.3.90

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 (211) hide show
  1. package/contracts/install-commands.json +29 -0
  2. package/dist/bundling-sources/sdk/src/client.ts +120 -37
  3. package/dist/bundling-sources/sdk/src/index.ts +4 -0
  4. package/dist/bundling-sources/sdk/src/pagination.ts +25 -0
  5. package/dist/bundling-sources/sdk/src/plays/bundle-play-file.ts +1 -1
  6. package/dist/bundling-sources/sdk/src/release.ts +16 -9
  7. package/dist/bundling-sources/sdk/src/types.ts +23 -0
  8. package/dist/bundling-sources/shared_libs/monitors/analytics-public.ts +10 -0
  9. package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +3 -0
  10. package/dist/bundling-sources/shared_libs/monitors/inbound-queue.ts +4 -4
  11. package/dist/bundling-sources/shared_libs/monitors/inventory-reconciliation.ts +59 -0
  12. package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +7 -9
  13. package/dist/bundling-sources/shared_libs/monitors/package.json +7 -0
  14. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +44 -2
  15. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-consumer-health.ts +2 -2
  16. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-identity-claims.ts +2 -2
  17. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-public-aliases.ts +1 -1
  18. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-dead-letter.ts +245 -0
  19. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-message.ts +38 -0
  20. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue-ack-probe.ts +94 -0
  21. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue-delivery.ts +60 -0
  22. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue.ts +60 -0
  23. package/dist/bundling-sources/shared_libs/monitors/snitcher-install-validation.ts +1 -1
  24. package/dist/bundling-sources/shared_libs/monitors/snitcher-ip2company.ts +2 -2
  25. package/dist/bundling-sources/shared_libs/monitors/snitcher-radar.ts +1 -1
  26. package/dist/bundling-sources/shared_libs/monitors/tracking-provider-integrations.ts +1 -1
  27. package/dist/bundling-sources/shared_libs/observability/build-context.ts +13 -0
  28. package/dist/bundling-sources/shared_libs/observability/log-metadata.ts +160 -0
  29. package/dist/bundling-sources/shared_libs/observability/request-context.ts +68 -0
  30. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +654 -0
  31. package/dist/bundling-sources/shared_libs/observability/scheduled-work-manual.ts +35 -0
  32. package/dist/bundling-sources/shared_libs/observability/scheduled-work.ts +5 -0
  33. package/dist/bundling-sources/shared_libs/play-data-plane/neon-constants.ts +9 -0
  34. package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +272 -0
  35. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +45 -0
  36. package/dist/bundling-sources/shared_libs/play-runtime/async-operation.ts +66 -1
  37. package/dist/bundling-sources/shared_libs/play-runtime/async-play-invocation.ts +0 -1
  38. package/dist/bundling-sources/shared_libs/play-runtime/bounceban-batching.ts +137 -0
  39. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +779 -140
  40. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +46 -0
  41. package/dist/bundling-sources/shared_libs/play-runtime/daytona-payload-contract.ts +68 -0
  42. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +103 -0
  43. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +725 -0
  44. package/dist/bundling-sources/shared_libs/play-runtime/durable-call-cache.ts +29 -0
  45. package/dist/bundling-sources/shared_libs/play-runtime/execution-capabilities.ts +23 -0
  46. package/dist/bundling-sources/shared_libs/play-runtime/execution-gateway-invocation-fence.ts +442 -0
  47. package/dist/bundling-sources/shared_libs/play-runtime/execution-protocol.ts +3 -3
  48. package/dist/bundling-sources/shared_libs/play-runtime/fixture-behavior.ts +18 -0
  49. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +9 -0
  50. package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +1 -1
  51. package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +1 -1
  52. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/contracts.ts +66 -0
  53. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/job.ts +145 -0
  54. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/ports.ts +21 -0
  55. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/postgres-store.ts +170 -0
  56. package/dist/bundling-sources/shared_libs/play-runtime/internal-bootstrap-token.ts +1322 -0
  57. package/dist/bundling-sources/shared_libs/play-runtime/internal-step-ids.ts +2 -2
  58. package/dist/bundling-sources/shared_libs/play-runtime/lane-retirement-gate.ts +1 -1
  59. package/dist/bundling-sources/shared_libs/play-runtime/launch-source-policy.ts +112 -0
  60. package/dist/bundling-sources/shared_libs/play-runtime/map-execution-frame.ts +8 -0
  61. package/dist/bundling-sources/shared_libs/play-runtime/perf-trace.ts +127 -0
  62. package/dist/bundling-sources/shared_libs/play-runtime/play-artifact-runtime-contract.ts +5 -0
  63. package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +24 -1
  64. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/contracts.ts +56 -0
  65. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/index.ts +13 -0
  66. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/job.ts +41 -0
  67. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/ports.ts +17 -0
  68. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/postgres-adapter.ts +54 -0
  69. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/contracts.ts +114 -0
  70. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/engine-suspension.ts +108 -0
  71. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/index.ts +36 -0
  72. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/job.ts +97 -0
  73. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/ports.ts +104 -0
  74. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/postgres-fence-adapter.ts +263 -0
  75. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/worker-terminal-projection.ts +64 -0
  76. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/contracts.ts +29 -0
  77. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/gateway-adapter.ts +56 -0
  78. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/index.ts +15 -0
  79. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/job.ts +65 -0
  80. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/ports.ts +17 -0
  81. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/contracts.ts +42 -0
  82. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/index.ts +17 -0
  83. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/job.ts +142 -0
  84. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/ports.ts +42 -0
  85. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/postgres-adapter.ts +102 -0
  86. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/contracts.ts +60 -0
  87. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/index.ts +16 -0
  88. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/job.ts +78 -0
  89. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/ports.ts +54 -0
  90. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/postgres-adapter.ts +71 -0
  91. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +4 -0
  92. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +2 -0
  93. package/dist/bundling-sources/shared_libs/play-runtime/receipt-status.ts +5 -8
  94. package/dist/bundling-sources/shared_libs/play-runtime/run-failure.ts +3 -5
  95. package/dist/bundling-sources/shared_libs/play-runtime/run-identity.ts +168 -0
  96. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +72 -9
  97. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts +6 -12
  98. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +19 -0
  99. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/bundle.ts +0 -1
  100. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +14 -44
  101. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +57 -205
  102. package/dist/bundling-sources/shared_libs/play-runtime/runtime-authority.ts +201 -0
  103. package/dist/bundling-sources/shared_libs/play-runtime/runtime-env.ts +6 -0
  104. package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +67 -0
  105. package/dist/bundling-sources/shared_libs/play-runtime/runtime-release-environment.ts +2 -0
  106. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sandbox-contract.ts +68 -0
  107. package/dist/bundling-sources/shared_libs/play-runtime/runtime-scheduler-topology.ts +14 -2
  108. package/dist/bundling-sources/shared_libs/play-runtime/runtime-telemetry.ts +108 -0
  109. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +4 -0
  110. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +3 -0
  111. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +7 -0
  112. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-deadline-reconciliation.ts +88 -0
  113. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-deploy-task.ts +124 -0
  114. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-run-task.ts +68 -0
  115. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-pool.ts +193 -0
  116. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-queue-lifecycle.ts +269 -0
  117. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-queue-suffix.ts +73 -0
  118. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +6642 -0
  119. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-shared.ts +897 -0
  120. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-metrics.ts +120 -0
  121. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +76 -0
  122. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd.ts +476 -0
  123. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-heavy-request-admission.ts +47 -0
  124. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-progress-registry.ts +147 -0
  125. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/index.ts +27 -0
  126. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/lazy.ts +50 -0
  127. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/play-run-recovery.ts +98 -0
  128. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-budget-state.ts +260 -0
  129. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-pool.ts +1416 -0
  130. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +1255 -0
  131. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-state.ts +942 -0
  132. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +14636 -0
  133. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +888 -0
  134. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +355 -0
  135. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-terminal-transition.ts +46 -0
  136. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runner-push.ts +60 -0
  137. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-api-origin.ts +33 -0
  138. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-gateway-health.ts +64 -0
  139. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-capacity.ts +835 -0
  140. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-ledger-reconciliation.ts +1218 -0
  141. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-operation.ts +207 -0
  142. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-scheduler-schema.ts +10 -0
  143. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/scheduler-capacity.ts +123 -0
  144. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/scheduler-launch-read-observability.ts +78 -0
  145. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/submit-admission.ts +169 -0
  146. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/terminal-contract.ts +20 -0
  147. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-queue-metrics.ts +34 -0
  148. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-resource-metrics.ts +249 -0
  149. package/dist/bundling-sources/shared_libs/play-runtime/sheet-attempt-sql.ts +7 -0
  150. package/dist/bundling-sources/shared_libs/play-runtime/step-progress.ts +296 -0
  151. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/native-batch.ts +3 -3
  152. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/runtime-step-receipts-adapter.ts +20 -1
  153. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +60 -15
  154. package/dist/bundling-sources/shared_libs/play-runtime/tool-execution-outcome.ts +20 -0
  155. package/dist/bundling-sources/shared_libs/play-runtime/transient-service-error.ts +12 -0
  156. package/dist/bundling-sources/shared_libs/play-runtime/vercel-protection.ts +14 -1
  157. package/dist/bundling-sources/shared_libs/play-runtime/work-receipt-storage-contract.ts +165 -0
  158. package/dist/bundling-sources/shared_libs/play-runtime/work-receipts.ts +15 -23
  159. package/dist/bundling-sources/shared_libs/play-runtime/workflow-executor-auth.ts +169 -0
  160. package/dist/bundling-sources/shared_libs/play-runtime/zerobounce-batching.ts +122 -0
  161. package/dist/bundling-sources/shared_libs/plays/artifact-types.ts +2 -0
  162. package/dist/bundling-sources/shared_libs/plays/contracts.ts +2 -0
  163. package/dist/bundling-sources/shared_libs/plays/deployment-status.ts +1 -1
  164. package/dist/bundling-sources/shared_libs/plays/docflow.ts +1 -1
  165. package/dist/bundling-sources/shared_libs/plays/play-grep-search.ts +39 -0
  166. package/dist/bundling-sources/shared_libs/plays/share/copy.ts +271 -0
  167. package/dist/bundling-sources/shared_libs/plays/share/metrics.ts +140 -0
  168. package/dist/bundling-sources/shared_libs/plays/share/public-read-model.ts +86 -0
  169. package/dist/bundling-sources/shared_libs/plays/share/seo-quality.ts +181 -0
  170. package/dist/bundling-sources/shared_libs/plays/share/static-pipeline-summary.ts +658 -0
  171. package/dist/bundling-sources/shared_libs/plays/share/types.ts +197 -0
  172. package/dist/bundling-sources/shared_libs/plays/slack-hitl-timeout-error.ts +37 -0
  173. package/dist/bundling-sources/shared_libs/plays/static-pipeline.ts +6 -1
  174. package/dist/bundling-sources/shared_libs/plays/tool-result-types.ts +1 -1
  175. package/dist/bundling-sources/shared_libs/product-notifications/configuration.ts +7 -1
  176. package/dist/bundling-sources/shared_libs/product-notifications/default-policy.ts +3 -2
  177. package/dist/bundling-sources/shared_libs/product-notifications/overflow.ts +18 -0
  178. package/dist/bundling-sources/shared_libs/product-notifications/rolling-limit.ts +24 -0
  179. package/dist/bundling-sources/shared_libs/product-notifications/slack-delivery.ts +624 -0
  180. package/dist/bundling-sources/shared_libs/product-notifications/slack-payload.ts +140 -0
  181. package/dist/bundling-sources/shared_libs/product-notifications/slack-transport.ts +75 -0
  182. package/dist/bundling-sources/shared_libs/runtime-env.ts +6 -0
  183. package/dist/bundling-sources/shared_libs/security/email-blacklist.ts +42 -0
  184. package/dist/bundling-sources/shared_libs/security/header-safe-env.ts +10 -3
  185. package/dist/bundling-sources/shared_libs/security/slack-sanitize.ts +133 -0
  186. package/dist/cli/getting-started.d.mts +52 -0
  187. package/dist/cli/getting-started.d.ts +52 -0
  188. package/dist/cli/getting-started.js +65 -0
  189. package/dist/cli/getting-started.mjs +36 -0
  190. package/dist/cli/index.d.mts +9 -0
  191. package/dist/cli/index.d.ts +9 -0
  192. package/dist/cli/index.js +545 -264
  193. package/dist/cli/index.mjs +543 -271
  194. package/dist/{compiler-manifest-DsLbQaew.d.mts → compiler-manifest-BaJfE-5H.d.mts} +5 -3
  195. package/dist/{compiler-manifest-DsLbQaew.d.ts → compiler-manifest-BaJfE-5H.d.ts} +5 -3
  196. package/dist/index.d.mts +81 -148
  197. package/dist/index.d.ts +81 -148
  198. package/dist/index.js +83 -26
  199. package/dist/index.mjs +83 -26
  200. package/dist/install-integrity.json +130 -2
  201. package/dist/monitor-fleet-contract.d.mts +138 -0
  202. package/dist/monitor-fleet-contract.d.ts +138 -0
  203. package/dist/monitor-fleet-contract.js +404 -0
  204. package/dist/monitor-fleet-contract.mjs +367 -0
  205. package/dist/plays/bundle-play-file.d.mts +2 -2
  206. package/dist/plays/bundle-play-file.d.ts +2 -2
  207. package/dist/release.d.mts +255 -0
  208. package/dist/release.d.ts +255 -0
  209. package/dist/release.js +215 -0
  210. package/dist/release.mjs +188 -0
  211. package/package.json +21 -4
@@ -0,0 +1,29 @@
1
+ {
2
+ "skills": {
3
+ "index_path": "/.well-known/skills/index.json",
4
+ "default_agents": [
5
+ "codex",
6
+ "claude-code",
7
+ "cursor",
8
+ "gemini-cli",
9
+ "antigravity"
10
+ ],
11
+ "npx_binary": "npx",
12
+ "npx_add_args_template": [
13
+ "--yes",
14
+ "skills@1.5.15",
15
+ "add",
16
+ "{skills_source_url}",
17
+ "--agent",
18
+ "{agents}",
19
+ "--global",
20
+ "--yes",
21
+ "--skill",
22
+ "{skill_name}",
23
+ "--full-depth"
24
+ ]
25
+ },
26
+ "cli": {
27
+ "sdk_npm_global": "npm install -g deepline@latest"
28
+ }
29
+ }
@@ -1,3 +1,4 @@
1
+ import { iterateCursorPages } from './pagination.js';
1
2
  /**
2
3
  * The main API client for interacting with the Deepline platform.
3
4
  *
@@ -37,7 +38,10 @@ import { resolveConfig } from './config.js';
37
38
  import { DeeplineError } from './errors.js';
38
39
  import { HttpClient } from './http.js';
39
40
  import { PRODUCT_NOTIFICATION_SLACK_OAUTH_SCOPES } from '../../shared_libs/product-notifications/contract.js';
40
- import { normalizeProductNotificationEmail } from '../../shared_libs/product-notifications/configuration.js';
41
+ import {
42
+ DEFAULT_PRODUCT_NOTIFICATION_DELIVERY_TIMING,
43
+ normalizeProductNotificationEmail,
44
+ } from '../../shared_libs/product-notifications/configuration.js';
41
45
  import {
42
46
  type ProductNotificationConfigurationChange,
43
47
  type EffectiveProductNotificationDestination,
@@ -592,6 +596,35 @@ export type RunsListOptions = {
592
596
  offset?: number;
593
597
  };
594
598
 
599
+ /** One server page; legacy runs.list continues to return an array. */
600
+ export type RunsListPage = {
601
+ runs: PlayRunListItem[];
602
+ total?: number;
603
+ offset?: number;
604
+ limit?: number;
605
+ hasMore?: boolean;
606
+ };
607
+
608
+ export type PlaysListOptions = {
609
+ origin?: 'prebuilt' | 'owned';
610
+ grep?: string;
611
+ /**
612
+ * @deprecated Grep is always evaluated by the Convex full-text index.
613
+ * This retained option is ignored for source compatibility.
614
+ */
615
+ grepMode?: 'all' | 'any' | 'phrase';
616
+ categories?: string | string[];
617
+ includeToolCategories?: boolean;
618
+ includeArchived?: boolean;
619
+ includeCostEstimates?: boolean;
620
+ };
621
+
622
+ export type PlaysListPage = {
623
+ plays: PlayListItem[];
624
+ cursor: string | null;
625
+ hasMore: boolean;
626
+ };
627
+
595
628
  /** Options for `client.runs.get(...)`. */
596
629
  export type RunsGetOptions = {
597
630
  /** Return the raw status payload instead of the compact package. */
@@ -732,11 +765,8 @@ export type PlaySecretCheck = {
732
765
  };
733
766
 
734
767
  /**
735
- * Public runs namespace exposed as `client.runs`.
736
- *
737
- * This namespace mirrors the canonical `/api/v2/runs` resource family and is
738
- * the preferred low-level surface for polling, streaming, stopping, reading
739
- * logs, and exporting durable dataset rows.
768
+ * `client.runs` mirrors `/api/v2/runs`: the preferred low-level surface for
769
+ * polling, streaming, stopping, reading logs, and exporting durable dataset rows.
740
770
  *
741
771
  * @sdkReference client 020 client.runs
742
772
  */
@@ -761,6 +791,8 @@ export type RunsNamespace = {
761
791
  }>;
762
792
  /** List runs for one play, optionally filtered by status. */
763
793
  list: (options: RunsListOptions) => Promise<PlayRunListItem[]>;
794
+ /** Read one run page with total, offset, limit and completeness metadata. */
795
+ listPage: (options: RunsListOptions) => Promise<RunsListPage>;
764
796
  /** Stream run events and return the latest/terminal run status. */
765
797
  tail: (runId: string, options?: RunsTailOptions) => Promise<PlayStatus>;
766
798
  /** Fetch persisted log lines for a run. */
@@ -1149,6 +1181,11 @@ export type MonitorsHealth = {
1149
1181
  };
1150
1182
  converged: number;
1151
1183
  needs_repair: number;
1184
+ /**
1185
+ * Unknown records without an upstream resource id. Use the exact inventory
1186
+ * reconciler to align them; ordinary repair never guesses an identity.
1187
+ */
1188
+ alignment_required: number;
1152
1189
  /** Observed active, but nothing delivered inside `silent_window_days`. */
1153
1190
  silent: number;
1154
1191
  silent_window_days: number;
@@ -1174,6 +1211,18 @@ export type MonitorsHealth = {
1174
1211
  next_attempt_at?: number;
1175
1212
  summary?: Record<string, unknown>;
1176
1213
  }>;
1214
+ /** Bounded sample explaining why normal audit did not settle the row. */
1215
+ unaudited_monitors: Array<{
1216
+ monitor_key: string;
1217
+ tool: string;
1218
+ observed: 'unknown' | null;
1219
+ observed_at: number | null;
1220
+ provider_resource_id: string | null;
1221
+ reason:
1222
+ | 'not_yet_audited'
1223
+ | 'missing_provider_resource_id'
1224
+ | 'provider_observation_unknown';
1225
+ }>;
1177
1226
  };
1178
1227
 
1179
1228
  /** One bounded audit pass, from `POST /api/v2/monitors/audit`. */
@@ -1316,6 +1365,8 @@ export type MonitorsNamespace = {
1316
1365
 
1317
1366
  /** One credit grant pool reported by the billing subscription status endpoint. */
1318
1367
  export type BillingCreditPool = {
1368
+ /** Stable grant identity; optional when talking to an older server. */
1369
+ grant_id?: string;
1319
1370
  pool: string;
1320
1371
  credits_remaining: number;
1321
1372
  credits_granted: number;
@@ -1400,10 +1451,10 @@ export type TargetBillingOperation = {
1400
1451
  };
1401
1452
 
1402
1453
  export type TargetBillingPlan = {
1403
- sku: 'payg-v1' | 'builder-v1' | 'team-v1';
1454
+ sku: 'payg-v1' | 'builder-v1' | 'growth-v1' | 'growth-canary-v1' | 'team-v1';
1404
1455
  name: string;
1405
1456
  recurring_price_usd: number;
1406
- interval: 'month';
1457
+ interval: 'month' | 'year';
1407
1458
  included_credits: number;
1408
1459
  purchased_credit_price_usd: number;
1409
1460
  };
@@ -2190,6 +2241,7 @@ export class DeeplineClient {
2190
2241
  this.runs = {
2191
2242
  get: (runId, options) => this.getRunStatus(runId, options),
2192
2243
  list: (options) => this.listRuns(options),
2244
+ listPage: (options) => this.listRunsPage(options),
2193
2245
  tail: (runId, options) => this.tailRun(runId, options),
2194
2246
  logs: (runId, options) => this.getRunLogs(runId, options),
2195
2247
  input: (runId) => this.getRunInput(runId),
@@ -3870,6 +3922,11 @@ export class DeeplineClient {
3870
3922
  * ```
3871
3923
  */
3872
3924
  async listRuns(options: RunsListOptions): Promise<PlayRunListItem[]> {
3925
+ return (await this.listRunsPage(options)).runs;
3926
+ }
3927
+
3928
+ /** Read one run page without discarding server pagination metadata. */
3929
+ async listRunsPage(options: RunsListOptions): Promise<RunsListPage> {
3873
3930
  const playName = options.play?.trim();
3874
3931
  const params = new URLSearchParams();
3875
3932
  if (playName) {
@@ -3901,10 +3958,10 @@ export class DeeplineClient {
3901
3958
  throw new Error('runs.list requires options.play or options.status.');
3902
3959
  }
3903
3960
  params.set('compact', 'true');
3904
- const response = await this.http.get<{ runs: PlayRunListItem[] }>(
3961
+ const response = await this.http.get<RunsListPage>(
3905
3962
  `/api/v2/runs?${params.toString()}`,
3906
3963
  );
3907
- return response.runs ?? [];
3964
+ return { ...response, runs: response.runs ?? [] };
3908
3965
  }
3909
3966
 
3910
3967
  /**
@@ -4395,20 +4452,46 @@ export class DeeplineClient {
4395
4452
  }
4396
4453
 
4397
4454
  /**
4398
- * List callable plays visible to the workspace.
4455
+ * List one page of callable plays; grep retains exhaustive matching results.
4456
+ * Use listPlaysPage to retain pagination metadata.
4399
4457
  *
4400
4458
  * Pass `origin: "prebuilt"` for Deepline-managed prebuilts or
4401
4459
  * `origin: "owned"` for org-owned plays.
4402
4460
  */
4403
- async listPlays(options?: {
4404
- origin?: 'prebuilt' | 'owned';
4405
- grep?: string;
4406
- grepMode?: 'all' | 'any' | 'phrase';
4407
- categories?: string | string[];
4408
- includeToolCategories?: boolean;
4409
- includeArchived?: boolean;
4410
- }): Promise<PlayListItem[]> {
4461
+ async listPlays(options?: PlaysListOptions): Promise<PlayListItem[]> {
4462
+ if (!options?.grep?.trim()) {
4463
+ return (await this.requestPlaysPage(options, false)).plays;
4464
+ }
4465
+ const plays: PlayListItem[] = [];
4466
+ for await (const items of iterateCursorPages(async (cursor) => {
4467
+ const page = await this.listPlaysPage({ ...options, cursor });
4468
+ return { items: page.plays, cursor: page.cursor, hasMore: page.hasMore };
4469
+ })) {
4470
+ plays.push(...items);
4471
+ }
4472
+ return plays;
4473
+ }
4474
+
4475
+ /** Read one bounded inventory page; cursor continues the same filters. */
4476
+ async listPlaysPage(
4477
+ options?: PlaysListOptions & {
4478
+ limit?: number;
4479
+ cursor?: string | null;
4480
+ },
4481
+ ): Promise<PlaysListPage> {
4482
+ return this.requestPlaysPage(options);
4483
+ }
4484
+
4485
+ private async requestPlaysPage(
4486
+ options?: PlaysListOptions & {
4487
+ limit?: number;
4488
+ cursor?: string | null;
4489
+ },
4490
+ paginateInventory = true,
4491
+ ): Promise<PlaysListPage> {
4411
4492
  const params = new URLSearchParams();
4493
+ if (paginateInventory && !options?.grep?.trim())
4494
+ params.set('inventory_paginated', '1');
4412
4495
  if (options?.origin) params.set('origin', options.origin);
4413
4496
  if (options?.categories) {
4414
4497
  params.set(
@@ -4422,32 +4505,32 @@ export class DeeplineClient {
4422
4505
  params.set('include_tool_categories', '1');
4423
4506
  }
4424
4507
  if (options?.includeArchived) params.set('include_archived', '1');
4508
+ if (options?.includeCostEstimates) {
4509
+ params.set('include_cost_estimates', '1');
4510
+ }
4425
4511
  if (options?.grep?.trim()) {
4426
4512
  params.set('grep', options.grep.trim());
4427
- params.set('grep_mode', options.grepMode ?? 'all');
4428
- params.set('grep_paginated', '1');
4429
4513
  params.set('limit', '60');
4430
4514
  }
4431
- type PlayListResponse = {
4515
+ if (options?.limit !== undefined) {
4516
+ if (!Number.isSafeInteger(options.limit) || options.limit < 1) {
4517
+ throw new Error('Play page limit must be a positive integer');
4518
+ }
4519
+ params.set('limit', String(options.limit));
4520
+ }
4521
+ if (options?.cursor) params.set('cursor', options.cursor);
4522
+ const suffix = params.size ? `?${params.toString()}` : '';
4523
+ const response = await this.http.get<{
4432
4524
  plays?: PlayListItem[];
4433
4525
  cursor?: string | null;
4434
4526
  hasMore?: boolean;
4435
4527
  pagination?: { cursor?: string | null; hasMore?: boolean };
4528
+ }>(`/api/v2/plays${suffix}`);
4529
+ return {
4530
+ plays: response.plays ?? [],
4531
+ cursor: response.pagination?.cursor ?? response.cursor ?? null,
4532
+ hasMore: Boolean(response.pagination?.hasMore ?? response.hasMore),
4436
4533
  };
4437
- const plays: PlayListItem[] = [];
4438
- let cursor: string | null = null;
4439
- let hasMore = true;
4440
- do {
4441
- if (cursor) params.set('cursor', cursor);
4442
- const suffix = params.toString() ? `?${params.toString()}` : '';
4443
- const response = await this.http.get<PlayListResponse>(
4444
- `/api/v2/plays${suffix}`,
4445
- );
4446
- plays.push(...(response.plays ?? []));
4447
- cursor = response.pagination?.cursor ?? response.cursor ?? null;
4448
- hasMore = Boolean(response.pagination?.hasMore ?? response.hasMore);
4449
- } while (Boolean(options?.grep?.trim()) && hasMore && cursor);
4450
- return plays;
4451
4534
  }
4452
4535
 
4453
4536
  /** Set whether an org-owned Play sorts before unpinned Plays. */
@@ -4637,7 +4720,7 @@ export class DeeplineClient {
4637
4720
  groupKey,
4638
4721
  name,
4639
4722
  enabled: true,
4640
- deliveryTiming: { mode: 'immediate' },
4723
+ deliveryTiming: DEFAULT_PRODUCT_NOTIFICATION_DELIVERY_TIMING,
4641
4724
  source: 'workspace',
4642
4725
  configMode: 'custom',
4643
4726
  version: 0,
@@ -101,6 +101,9 @@ export type {
101
101
  PlaySheetRow,
102
102
  PlaySheetRowsResult,
103
103
  RunsListOptions,
104
+ RunsListPage,
105
+ PlaysListOptions,
106
+ PlaysListPage,
104
107
  RunsLogsOptions,
105
108
  RunsLogsResult,
106
109
  RunsNamespace,
@@ -234,6 +237,7 @@ export type {
234
237
  PublishPlayVersionRequest,
235
238
  PublishPlayVersionResult,
236
239
  StartPlayRunRequest,
240
+ PlayCostEstimate,
237
241
  PlayListItem,
238
242
  CustomerDbQueryResult,
239
243
  DeeplineToolCategory,
@@ -0,0 +1,25 @@
1
+ /** Walk bounded cursor pages without reporting a partial result as complete. */
2
+ export async function* iterateCursorPages<T>(
3
+ fetchPage: (cursor: string | null) => Promise<{
4
+ items: T[];
5
+ hasMore: boolean;
6
+ cursor: string | null;
7
+ }>,
8
+ ): AsyncGenerator<T[]> {
9
+ let cursor: string | null = null;
10
+ const seen = new Set<string>();
11
+ for (;;) {
12
+ const page = await fetchPage(cursor);
13
+ if (page.hasMore) {
14
+ if (!page.cursor || seen.has(page.cursor)) {
15
+ throw new Error(
16
+ 'Pagination reported more results without an advancing cursor',
17
+ );
18
+ }
19
+ seen.add(page.cursor);
20
+ }
21
+ yield page.items;
22
+ if (!page.hasMore) return;
23
+ cursor = page.cursor;
24
+ }
25
+ }
@@ -89,7 +89,7 @@ let hasWarnedAboutNonDevelopmentBundling = false;
89
89
  * Tool-aware validation belongs to the Deepline API after upload:
90
90
  * `compilePlayManifest` / server preflight runs the cloud typechecker inside
91
91
  * the app deployment, where the generated catalog is a normal build artifact.
92
- * Do not import `src/lib/plays/cloud-tool-typecheck` or any generated app
92
+ * Do not import `apps/deepline-api/src/lib/plays/cloud-tool-typecheck` or any generated app
93
93
  * catalog from this SDK adapter.
94
94
  */
95
95
  function warnAboutNonDevelopmentBundling(filePath: string): void {
@@ -23,12 +23,12 @@ import { CURRENT_PLAY_ARTIFACT_CONTRACT_VERSION } from '../../shared_libs/plays/
23
23
  * Everything else derives from these values:
24
24
  *
25
25
  * - `packages/sdk/src/version.ts` re-exports `SDK_VERSION` and `SDK_API_CONTRACT`.
26
- * - `src/lib/sdk/release-policy.ts` re-exports `SDK_RELEASE_POLICY`.
26
+ * - `apps/deepline-api/src/lib/sdk/release-policy.ts` re-exports `SDK_RELEASE_POLICY`.
27
27
  * - `packages/sdk/package.json` `version` is stamped from `SDK_RELEASE.version` by
28
28
  * `scripts/sync-sdk-package-version.ts`, which runs as part of
29
29
  * `bun run sdk:build`.
30
30
  * - `contracts/sdk-api.manifest.json` is regenerated at build time from
31
- * `src/lib/sdk/api-routes.ts` and the apiContract here; the matching
31
+ * `apps/deepline-api/src/lib/sdk/api-routes.ts` and the apiContract here; the matching
32
32
  * `contracts/sdk-api.manifest.hash` is an ignored local/CI audit artifact.
33
33
  *
34
34
  * Any drift between release source and derived release locations is a
@@ -199,21 +199,28 @@ export const SDK_RELEASE = {
199
199
  // available at toolResponse.rawV2 while toolResponse.raw and all declared
200
200
  // getters keep their established compatibility behavior.
201
201
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
202
- version: '0.3.89',
202
+ // 0.3.90 is the first deliberately versioned SDK release for API v3. Play
203
+ // grep hard-cuts to the single Convex full-text index; it does not retain a
204
+ // registry/scanner reader for any SDK/API major.
205
+ version: '0.3.90',
203
206
  updateSummary:
204
- '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.',
207
+ 'Play grep now uses one source-only Convex full-text index. It no longer scans the registry, pages through the complete indexed match set, and rejects retired grep modes. 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.',
205
208
  packageCapabilities: {
206
209
  updatePreferences: 1,
207
210
  },
208
211
  contracts: {
209
212
  api: {
210
213
  name: 'sdk-http-api',
211
- // API v2 is append-only. A breaking public request/response change needs
212
- // v3 and an explicit v2 support-window decision, never a patch release.
213
- currentMajor: 2,
214
- supportedMajors: [2],
215
- // Accepted only to bridge SDKs released before X-Deepline-API-Major.
214
+ // API v3 hard-cuts Play grep to the canonical Convex index. API v2 stays
215
+ // admitted for the explicit SDK support window, but it selects neither a
216
+ // registry scanner nor another grep reader: every accepted grep request
217
+ // uses the same indexed query and retired flags fail at the API boundary.
218
+ currentMajor: 3,
219
+ supportedMajors: [3, 2],
220
+ // The first wire id is emitted by the current SDK. Remaining ids are
221
+ // accepted only while the API v2 support window is open.
216
222
  legacyWireIds: [
223
+ '2026-09-play-grep-convex-index-hard-cutover',
217
224
  '2026-07-admin-cli-local-cutover',
218
225
  '2026-07-native-monitor-launch-hard-cutover',
219
226
  ],
@@ -1183,6 +1183,28 @@ export interface PlayDefinitionDetail {
1183
1183
  currentPublishedVersion?: number | null;
1184
1184
  }
1185
1185
 
1186
+ export type PlayCostEstimate =
1187
+ | {
1188
+ status: 'available';
1189
+ source: 'observed' | 'static';
1190
+ unit: 'row' | 'run';
1191
+ lowCredits: number;
1192
+ highCredits: number;
1193
+ sampleRunCount: number;
1194
+ basedOnRunId: string | null;
1195
+ modelVersion: string;
1196
+ }
1197
+ | {
1198
+ status: 'unavailable';
1199
+ reason:
1200
+ | 'ambiguous_output_unit'
1201
+ | 'unbounded_loop'
1202
+ | 'unresolved_tool'
1203
+ | 'mixed_run_and_row_costs';
1204
+ message: string;
1205
+ modelVersion: string;
1206
+ };
1207
+
1186
1208
  export interface PlayListItem {
1187
1209
  playKey?: string;
1188
1210
  reference?: string;
@@ -1212,6 +1234,7 @@ export interface PlayListItem {
1212
1234
  liveRevision?: PlayRevisionSummary | null;
1213
1235
  aliases?: string[];
1214
1236
  triggerStatus?: PlayTriggerStatus;
1237
+ costEstimate?: PlayCostEstimate;
1215
1238
  }
1216
1239
 
1217
1240
  /** Additive live trigger state shared by list, get, and describe. */
@@ -0,0 +1,10 @@
1
+ /** Public Deepline Analytics identifiers. */
2
+ export const ANALYTICS_INTEGRATION_SLUG = 'deepline-analytics';
3
+ export const ANALYTICS_PUBLIC_PROVIDER = 'deepline_analytics';
4
+ export const ANALYTICS_PUBLIC_TOOL = 'deepline.analytics';
5
+ /** Snitcher Radar's `namespace` setting; exposed as the browser global. */
6
+ export const DEEPLINE_ANALYTICS_BROWSER_OBJECT = 'DeeplineAnalytics';
7
+
8
+ export function isAnalyticsIntegrationSlug(value: string) {
9
+ return value === ANALYTICS_INTEGRATION_SLUG;
10
+ }
@@ -137,6 +137,9 @@ export function monitorErrorNextAction(payload: MonitorErrorPayload): string {
137
137
  ? `Wait ${retryAfterMs} ms, then retry the same read or check once.`
138
138
  : 'Wait for Customer DB provisioning, then retry the same read or check once.';
139
139
  }
140
+ if (code === 'monitor_control_plane_unavailable') {
141
+ return 'Wait briefly, then rerun the same monitor read. No monitor state was changed.';
142
+ }
140
143
  if (code === 'provider_monitor_identity_backfill_in_progress') {
141
144
  return typeof retryAfterSeconds === 'number'
142
145
  ? `Wait ${retryAfterSeconds} seconds, then retry the same monitor lifecycle request once. No upstream monitor was created.`
@@ -4,13 +4,13 @@ import {
4
4
  recordSignalRadarDeadLetter as recordSignalRadarDeadLetterCore,
5
5
  type InboundFailureClass,
6
6
  type InboundPgClient,
7
- } from '@/lib/signal-radars/inbound-dead-letter';
7
+ } from '@deepline/monitors/signal-radars/inbound-dead-letter';
8
8
  import {
9
9
  send as sendSignalRadarInbound,
10
10
  SIGNAL_RADAR_INBOUND_TOPIC as SIGNAL_RADAR_INBOUND_TOPIC_VALUE,
11
11
  type SignalRadarInboundSendOptions,
12
- } from '@/lib/signal-radars/inbound-queue';
13
- import type { SignalRadarInboundMessage } from '@/lib/signal-radars/inbound-message';
12
+ } from '@deepline/monitors/signal-radars/inbound-queue';
13
+ import type { SignalRadarInboundMessage } from '@deepline/monitors/signal-radars/inbound-message';
14
14
 
15
15
  // Public inbound-queue surface used by the thin provider-callback receiver.
16
16
  // Re-exports the topic + producer and adds the Neon-free publish key helper and
@@ -78,5 +78,5 @@ export async function recordSignalRadarDeadLetter(
78
78
  });
79
79
  }
80
80
 
81
- export type { SignalRadarInboundMessage } from '@/lib/signal-radars/inbound-message';
81
+ export type { SignalRadarInboundMessage } from '@deepline/monitors/signal-radars/inbound-message';
82
82
  export { headersToObject };
@@ -0,0 +1,59 @@
1
+ /** Shared inventory rules. Job progress and missing evidence are not monitor states. */
2
+ export type InventoryRadar = {
3
+ id: string;
4
+ status: 'active' | 'inactive' | 'unknown';
5
+ };
6
+ export type InventoryDecision = {
7
+ verdict: 'converged' | 'desynced' | 'unknown';
8
+ reason: string;
9
+ radarId?: string;
10
+ };
11
+
12
+ /** Call only after BOTH inventories completed. Absence is otherwise unknown. */
13
+ export function compareMonitorInventory(input: {
14
+ desired: 'active' | 'inactive';
15
+ resourceId: string | null;
16
+ exact: InventoryRadar[];
17
+ marker: InventoryRadar[];
18
+ candidateOwnerCount: number;
19
+ }): InventoryDecision {
20
+ const { desired, resourceId, exact, marker, candidateOwnerCount } = input;
21
+ if (exact.length > 1 || candidateOwnerCount > (resourceId ? 1 : 0)) {
22
+ return { verdict: 'unknown', reason: 'ambiguous_tamradar_binding' };
23
+ }
24
+ if (!resourceId) {
25
+ if (marker.length > 1)
26
+ return { verdict: 'unknown', reason: 'ambiguous_tamradar_binding' };
27
+ if (marker.length === 1)
28
+ return {
29
+ verdict: 'desynced',
30
+ reason: 'adoptable_tamradar_radar',
31
+ radarId: marker[0]!.id,
32
+ };
33
+ }
34
+ const radar = exact[0];
35
+ if (!radar) {
36
+ if (!resourceId) {
37
+ // A complete account list proves that no stamped counterpart exists; it
38
+ // cannot prove which resource an unbound historical row used to own.
39
+ // Creation or adoption is a separate, explicit operator operation.
40
+ return { verdict: 'unknown', reason: 'missing_tamradar_binding' };
41
+ }
42
+ return desired === 'inactive'
43
+ ? { verdict: 'converged', reason: 'in_sync' }
44
+ : { verdict: 'desynced', reason: 'missing_tamradar_radar' };
45
+ }
46
+ if (radar.status === 'unknown')
47
+ return {
48
+ verdict: 'unknown',
49
+ reason: 'unknown_tamradar_state',
50
+ radarId: radar.id,
51
+ };
52
+ return radar.status === desired
53
+ ? { verdict: 'converged', reason: 'in_sync', radarId: radar.id }
54
+ : {
55
+ verdict: 'desynced',
56
+ reason: 'tamradar_state_differs',
57
+ radarId: radar.id,
58
+ };
59
+ }
@@ -1,7 +1,7 @@
1
1
  // Internal Slack notifications for monitor / triggered-play lifecycle + activity.
2
2
  //
3
3
  // These are thin, best-effort helpers (mirroring
4
- // `src/lib/plays/team-notifications.ts`) that build a Slack payload via
4
+ // `apps/deepline-api/src/lib/plays/team-notifications.ts`) that build a Slack payload via
5
5
  // `buildSlackActivityPayload` and dispatch it through `sendSlackEventSafe` on
6
6
  // one of two internal channels:
7
7
  //
@@ -17,19 +17,17 @@
17
17
  // (we set `bypassInternalActorBlock`), BUT synthetic `@deepline.local`
18
18
  // dev-bootstrap test orgs are always suppressed (see
19
19
  // `shouldSuppressMonitorActor` + the transport-level guard in
20
- // `slack-events.ts`).
20
+ // the shared Slack delivery contract).
21
21
  // - Environments: ALL (dev + preview + prod). The two channels declare
22
- // `requiredEnv: 'all'` in `slack-events.ts`, so they post in local dev too.
22
+ // `requiredEnv: 'all'` in the delivery contract, so they post in local dev too.
23
23
  // - Spend: NEVER include provider spend. These payloads carry only keys,
24
24
  // counts, and trigger metadata — no provider-cost fields.
25
25
 
26
26
  import { after } from 'next/server';
27
- import {
28
- buildSlackActivityPayload,
29
- isSyntheticActorEmail,
30
- sendSlackEventSafe,
31
- } from '@/lib/slack-events';
32
- import { getRuntimeEnv } from '@/lib/runtime-env';
27
+ import { sendSlackEventSafe } from '../product-notifications/slack-delivery';
28
+ import { isSyntheticActorEmail } from '@deepline/auth/synthetic-identity';
29
+ import { buildSlackActivityPayload } from '../product-notifications/slack-payload';
30
+ import { getRuntimeEnv } from '../play-runtime/runtime-env';
33
31
 
34
32
  /**
35
33
  * Schedule a best-effort Slack dispatch WITHOUT blocking the caller. The
@@ -5,6 +5,7 @@
5
5
  "type": "module",
6
6
  "exports": {
7
7
  "./billing/*": "./billing/*.ts",
8
+ "./signal-radars/*": "./signal-radars/*.ts",
8
9
  "./*.js": "./*.ts",
9
10
  "./*": "./*.ts"
10
11
  },
@@ -13,9 +14,15 @@
13
14
  "typecheck": "tsc -p tsconfig.json --noEmit"
14
15
  },
15
16
  "dependencies": {
17
+ "@deepline/auth": "workspace:*",
16
18
  "@deepline/billing": "workspace:*",
19
+ "@deepline/convex-client": "workspace:*",
17
20
  "@deepline/ingestion-v2": "workspace:*",
21
+ "@deepline/play-runtime": "workspace:*",
18
22
  "@deepline/plays": "workspace:*",
23
+ "@deepline/product-notifications": "workspace:*",
24
+ "@vercel/oidc": "^3.0.5",
25
+ "@vercel/queue": "^0.4.0",
19
26
  "next": "16.3.0-canary.60",
20
27
  "pg": "^8.19.0",
21
28
  "react": "19.2.5"