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.
- package/contracts/install-commands.json +29 -0
- package/dist/bundling-sources/sdk/src/client.ts +120 -37
- package/dist/bundling-sources/sdk/src/index.ts +4 -0
- package/dist/bundling-sources/sdk/src/pagination.ts +25 -0
- package/dist/bundling-sources/sdk/src/plays/bundle-play-file.ts +1 -1
- package/dist/bundling-sources/sdk/src/release.ts +16 -9
- package/dist/bundling-sources/sdk/src/types.ts +23 -0
- package/dist/bundling-sources/shared_libs/monitors/analytics-public.ts +10 -0
- package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +3 -0
- package/dist/bundling-sources/shared_libs/monitors/inbound-queue.ts +4 -4
- package/dist/bundling-sources/shared_libs/monitors/inventory-reconciliation.ts +59 -0
- package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +7 -9
- package/dist/bundling-sources/shared_libs/monitors/package.json +7 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +44 -2
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-consumer-health.ts +2 -2
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-identity-claims.ts +2 -2
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-public-aliases.ts +1 -1
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-dead-letter.ts +245 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-message.ts +38 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue-ack-probe.ts +94 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue-delivery.ts +60 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue.ts +60 -0
- package/dist/bundling-sources/shared_libs/monitors/snitcher-install-validation.ts +1 -1
- package/dist/bundling-sources/shared_libs/monitors/snitcher-ip2company.ts +2 -2
- package/dist/bundling-sources/shared_libs/monitors/snitcher-radar.ts +1 -1
- package/dist/bundling-sources/shared_libs/monitors/tracking-provider-integrations.ts +1 -1
- package/dist/bundling-sources/shared_libs/observability/build-context.ts +13 -0
- package/dist/bundling-sources/shared_libs/observability/log-metadata.ts +160 -0
- package/dist/bundling-sources/shared_libs/observability/request-context.ts +68 -0
- package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +654 -0
- package/dist/bundling-sources/shared_libs/observability/scheduled-work-manual.ts +35 -0
- package/dist/bundling-sources/shared_libs/observability/scheduled-work.ts +5 -0
- package/dist/bundling-sources/shared_libs/play-data-plane/neon-constants.ts +9 -0
- package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +272 -0
- package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +45 -0
- package/dist/bundling-sources/shared_libs/play-runtime/async-operation.ts +66 -1
- package/dist/bundling-sources/shared_libs/play-runtime/async-play-invocation.ts +0 -1
- package/dist/bundling-sources/shared_libs/play-runtime/bounceban-batching.ts +137 -0
- package/dist/bundling-sources/shared_libs/play-runtime/context.ts +779 -140
- package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +46 -0
- package/dist/bundling-sources/shared_libs/play-runtime/daytona-payload-contract.ts +68 -0
- package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +103 -0
- package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +725 -0
- package/dist/bundling-sources/shared_libs/play-runtime/durable-call-cache.ts +29 -0
- package/dist/bundling-sources/shared_libs/play-runtime/execution-capabilities.ts +23 -0
- package/dist/bundling-sources/shared_libs/play-runtime/execution-gateway-invocation-fence.ts +442 -0
- package/dist/bundling-sources/shared_libs/play-runtime/execution-protocol.ts +3 -3
- package/dist/bundling-sources/shared_libs/play-runtime/fixture-behavior.ts +18 -0
- package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +9 -0
- package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/contracts.ts +66 -0
- package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/job.ts +145 -0
- package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/ports.ts +21 -0
- package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/postgres-store.ts +170 -0
- package/dist/bundling-sources/shared_libs/play-runtime/internal-bootstrap-token.ts +1322 -0
- package/dist/bundling-sources/shared_libs/play-runtime/internal-step-ids.ts +2 -2
- package/dist/bundling-sources/shared_libs/play-runtime/lane-retirement-gate.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/launch-source-policy.ts +112 -0
- package/dist/bundling-sources/shared_libs/play-runtime/map-execution-frame.ts +8 -0
- package/dist/bundling-sources/shared_libs/play-runtime/perf-trace.ts +127 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-artifact-runtime-contract.ts +5 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +24 -1
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/contracts.ts +56 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/index.ts +13 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/job.ts +41 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/ports.ts +17 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/postgres-adapter.ts +54 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/contracts.ts +114 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/engine-suspension.ts +108 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/index.ts +36 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/job.ts +97 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/ports.ts +104 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/postgres-fence-adapter.ts +263 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/worker-terminal-projection.ts +64 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/contracts.ts +29 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/gateway-adapter.ts +56 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/index.ts +15 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/job.ts +65 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/ports.ts +17 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/contracts.ts +42 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/index.ts +17 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/job.ts +142 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/ports.ts +42 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/postgres-adapter.ts +102 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/contracts.ts +60 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/index.ts +16 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/job.ts +78 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/ports.ts +54 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/postgres-adapter.ts +71 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +4 -0
- package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +2 -0
- package/dist/bundling-sources/shared_libs/play-runtime/receipt-status.ts +5 -8
- package/dist/bundling-sources/shared_libs/play-runtime/run-failure.ts +3 -5
- package/dist/bundling-sources/shared_libs/play-runtime/run-identity.ts +168 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +72 -9
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts +6 -12
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +19 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/bundle.ts +0 -1
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +14 -44
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +57 -205
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-authority.ts +201 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-env.ts +6 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +67 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-release-environment.ts +2 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-sandbox-contract.ts +68 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-scheduler-topology.ts +14 -2
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-telemetry.ts +108 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +4 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +3 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +7 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-deadline-reconciliation.ts +88 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-deploy-task.ts +124 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-run-task.ts +68 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-pool.ts +193 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-queue-lifecycle.ts +269 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-queue-suffix.ts +73 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +6642 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-shared.ts +897 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-metrics.ts +120 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +76 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd.ts +476 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-heavy-request-admission.ts +47 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-progress-registry.ts +147 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/index.ts +27 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/lazy.ts +50 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/play-run-recovery.ts +98 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-budget-state.ts +260 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-pool.ts +1416 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +1255 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-state.ts +942 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +14636 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +888 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +355 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-terminal-transition.ts +46 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runner-push.ts +60 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-api-origin.ts +33 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-gateway-health.ts +64 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-capacity.ts +835 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-ledger-reconciliation.ts +1218 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-operation.ts +207 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-scheduler-schema.ts +10 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/scheduler-capacity.ts +123 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/scheduler-launch-read-observability.ts +78 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/submit-admission.ts +169 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/terminal-contract.ts +20 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-queue-metrics.ts +34 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-resource-metrics.ts +249 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sheet-attempt-sql.ts +7 -0
- package/dist/bundling-sources/shared_libs/play-runtime/step-progress.ts +296 -0
- package/dist/bundling-sources/shared_libs/play-runtime/tool-call/native-batch.ts +3 -3
- package/dist/bundling-sources/shared_libs/play-runtime/tool-call/runtime-step-receipts-adapter.ts +20 -1
- package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +60 -15
- package/dist/bundling-sources/shared_libs/play-runtime/tool-execution-outcome.ts +20 -0
- package/dist/bundling-sources/shared_libs/play-runtime/transient-service-error.ts +12 -0
- package/dist/bundling-sources/shared_libs/play-runtime/vercel-protection.ts +14 -1
- package/dist/bundling-sources/shared_libs/play-runtime/work-receipt-storage-contract.ts +165 -0
- package/dist/bundling-sources/shared_libs/play-runtime/work-receipts.ts +15 -23
- package/dist/bundling-sources/shared_libs/play-runtime/workflow-executor-auth.ts +169 -0
- package/dist/bundling-sources/shared_libs/play-runtime/zerobounce-batching.ts +122 -0
- package/dist/bundling-sources/shared_libs/plays/artifact-types.ts +2 -0
- package/dist/bundling-sources/shared_libs/plays/contracts.ts +2 -0
- package/dist/bundling-sources/shared_libs/plays/deployment-status.ts +1 -1
- package/dist/bundling-sources/shared_libs/plays/docflow.ts +1 -1
- package/dist/bundling-sources/shared_libs/plays/play-grep-search.ts +39 -0
- package/dist/bundling-sources/shared_libs/plays/share/copy.ts +271 -0
- package/dist/bundling-sources/shared_libs/plays/share/metrics.ts +140 -0
- package/dist/bundling-sources/shared_libs/plays/share/public-read-model.ts +86 -0
- package/dist/bundling-sources/shared_libs/plays/share/seo-quality.ts +181 -0
- package/dist/bundling-sources/shared_libs/plays/share/static-pipeline-summary.ts +658 -0
- package/dist/bundling-sources/shared_libs/plays/share/types.ts +197 -0
- package/dist/bundling-sources/shared_libs/plays/slack-hitl-timeout-error.ts +37 -0
- package/dist/bundling-sources/shared_libs/plays/static-pipeline.ts +6 -1
- package/dist/bundling-sources/shared_libs/plays/tool-result-types.ts +1 -1
- package/dist/bundling-sources/shared_libs/product-notifications/configuration.ts +7 -1
- package/dist/bundling-sources/shared_libs/product-notifications/default-policy.ts +3 -2
- package/dist/bundling-sources/shared_libs/product-notifications/overflow.ts +18 -0
- package/dist/bundling-sources/shared_libs/product-notifications/rolling-limit.ts +24 -0
- package/dist/bundling-sources/shared_libs/product-notifications/slack-delivery.ts +624 -0
- package/dist/bundling-sources/shared_libs/product-notifications/slack-payload.ts +140 -0
- package/dist/bundling-sources/shared_libs/product-notifications/slack-transport.ts +75 -0
- package/dist/bundling-sources/shared_libs/runtime-env.ts +6 -0
- package/dist/bundling-sources/shared_libs/security/email-blacklist.ts +42 -0
- package/dist/bundling-sources/shared_libs/security/header-safe-env.ts +10 -3
- package/dist/bundling-sources/shared_libs/security/slack-sanitize.ts +133 -0
- package/dist/cli/getting-started.d.mts +52 -0
- package/dist/cli/getting-started.d.ts +52 -0
- package/dist/cli/getting-started.js +65 -0
- package/dist/cli/getting-started.mjs +36 -0
- package/dist/cli/index.d.mts +9 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.js +545 -264
- package/dist/cli/index.mjs +543 -271
- package/dist/{compiler-manifest-DsLbQaew.d.mts → compiler-manifest-BaJfE-5H.d.mts} +5 -3
- package/dist/{compiler-manifest-DsLbQaew.d.ts → compiler-manifest-BaJfE-5H.d.ts} +5 -3
- package/dist/index.d.mts +81 -148
- package/dist/index.d.ts +81 -148
- package/dist/index.js +83 -26
- package/dist/index.mjs +83 -26
- package/dist/install-integrity.json +130 -2
- package/dist/monitor-fleet-contract.d.mts +138 -0
- package/dist/monitor-fleet-contract.d.ts +138 -0
- package/dist/monitor-fleet-contract.js +404 -0
- package/dist/monitor-fleet-contract.mjs +367 -0
- package/dist/plays/bundle-play-file.d.mts +2 -2
- package/dist/plays/bundle-play-file.d.ts +2 -2
- package/dist/release.d.mts +255 -0
- package/dist/release.d.ts +255 -0
- package/dist/release.js +215 -0
- package/dist/release.mjs +188 -0
- 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 {
|
|
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
|
-
*
|
|
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<
|
|
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
|
|
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
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
|
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
|
|
212
|
-
//
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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 '
|
|
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 '
|
|
13
|
-
import type { SignalRadarInboundMessage } from '
|
|
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 '
|
|
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
|
-
//
|
|
20
|
+
// the shared Slack delivery contract).
|
|
21
21
|
// - Environments: ALL (dev + preview + prod). The two channels declare
|
|
22
|
-
// `requiredEnv: 'all'` in
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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"
|