deepline 0.3.272 → 0.3.274

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.
@@ -1953,7 +1953,7 @@ configureProxyFromEnv();
1953
1953
  import { mkdtemp as mkdtemp4, rm as rm4, writeFile as writeFile7 } from "fs/promises";
1954
1954
  import { join as join29 } from "path";
1955
1955
  import { tmpdir as tmpdir7 } from "os";
1956
- import { Command as Command6 } from "commander";
1956
+ import { Command as Command7 } from "commander";
1957
1957
 
1958
1958
  // ../plays/trigger-config-route.ts
1959
1959
  function playTriggerConfigPath(playName) {
@@ -3507,7 +3507,7 @@ var SDK_RELEASE = {
3507
3507
  // getters keep their established compatibility behavior.
3508
3508
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
3509
3509
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
3510
- version: "0.3.272",
3510
+ version: "0.3.274",
3511
3511
  updateSummary: "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.",
3512
3512
  packageCapabilities: {
3513
3513
  updatePreferences: 1
@@ -7290,7 +7290,7 @@ var DeeplineClient = class _DeeplineClient {
7290
7290
  }
7291
7291
  playRunCommand(play) {
7292
7292
  const target = play.reference || play.name;
7293
- return `deepline plays run ${target}${playInputExampleArgs(play.inputSchema)} --watch`;
7293
+ return `deepline plays run ${target}${playInputExampleArgs(play.inputSchema)}`;
7294
7294
  }
7295
7295
  starterPlayPath(play) {
7296
7296
  const target = play.reference || play.name;
@@ -7851,7 +7851,7 @@ var DeeplineClient = class _DeeplineClient {
7851
7851
  * Convenience wrapper around {@link registerPlayArtifact} plus
7852
7852
  * {@link startPlayRun}. This is the canonical file-backed path used by wrappers.
7853
7853
  * The returned id can be passed to {@link getPlayStatus} to retrieve the same
7854
- * durable `{ result }` object that the CLI prints after `--watch` completes.
7854
+ * durable `{ result }` object that the CLI prints after `plays run` completes.
7855
7855
  *
7856
7856
  * @param code - Source string fallback; the bundled artifact should be passed in `options.artifact`
7857
7857
  * @param csvPath - Path to input CSV file, or `null`
@@ -7972,7 +7972,7 @@ var DeeplineClient = class _DeeplineClient {
7972
7972
  * Get the current status of a play execution.
7973
7973
  *
7974
7974
  * Internal/advanced primitive. Public callers should usually prefer
7975
- * {@link runPlay}, {@link PlayJob.get}, or `deepline plays run --watch`.
7975
+ * {@link runPlay}, {@link PlayJob.get}, or `deepline plays run`.
7976
7976
  *
7977
7977
  * @param workflowId - Play-run id from {@link startPlayRun}
7978
7978
  * @returns Current status with progress logs and partial results
@@ -8363,7 +8363,7 @@ var DeeplineClient = class _DeeplineClient {
8363
8363
  );
8364
8364
  return { ...response, runs: response.runs ?? [] };
8365
8365
  }
8366
- /** Read batches rather than silently truncating a long key list. */
8366
+ /** Read retained tool results without executing tools, preserving supplied key order and batching 100 keys per request. Obtain keys from exported evidence or execution metadata; each key must be nonempty, at most 2,048 characters and contain no CR, LF or NUL. Missing/expired results have an explicit per-key error. */
8367
8367
  async getRunReceipts(runId, options) {
8368
8368
  if (!options.keys.length || options.keys.some(
8369
8369
  (key) => typeof key !== "string" || !key.trim() || key.length > 2048 || /[\r\n\0]/.test(key)
@@ -8419,7 +8419,7 @@ var DeeplineClient = class _DeeplineClient {
8419
8419
  );
8420
8420
  }
8421
8421
  /**
8422
- * Fetch persisted logs for a run using the public runs resource model.
8422
+ * Read a run's retained text tail (default 200), full retained stream (`all`), or terminal failure window (`failed`, at most 20). These are existing reads; sampling and retention loss cannot be recovered. See [run logs and events](run-events.md) for structured search and payload retrieval.
8423
8423
  *
8424
8424
  * This is the SDK equivalent of:
8425
8425
  *
@@ -8498,7 +8498,7 @@ var DeeplineClient = class _DeeplineClient {
8498
8498
  ...probe.logsTruncated ? { logsTruncated: true } : {}
8499
8499
  };
8500
8500
  }
8501
- /** Search bounded, structured runtime history without requiring a run id. */
8501
+ /** Read structured history across the active organization without requiring a run ID. Defaults to the last hour, newest first; use the returned cursor and exact time bounds to continue. See [run logs and events](run-events.md) for all kinds, indexed fields, payloads and SDK/API response types. */
8502
8502
  async searchRunEvents(options = {}) {
8503
8503
  const now = Date.now();
8504
8504
  const params = new URLSearchParams({
@@ -14911,7 +14911,7 @@ import {
14911
14911
  } from "fs/promises";
14912
14912
  import { homedir as homedir6, tmpdir as tmpdir5 } from "os";
14913
14913
  import { basename as basename4, dirname as dirname11, extname as extname3, join as join15, resolve as resolve14 } from "path";
14914
- import { Option as Option3 } from "commander";
14914
+ import { Option as Option4 } from "commander";
14915
14915
 
14916
14916
  // ../plays/settings-contract.ts
14917
14917
  import { z } from "zod";
@@ -15689,6 +15689,244 @@ function registerPlayTriggerConfigCommands(plays) {
15689
15689
  // src/cli/commands/play.ts
15690
15690
  import { createHash as createHash4, randomUUID as randomUUID4 } from "crypto";
15691
15691
 
15692
+ // src/cli/run-logs-help.ts
15693
+ var EVENT_DETAILS = {
15694
+ "run.created": {
15695
+ emittedBy: "Run admission",
15696
+ payloadFields: ["status", "playName", "runtimeBackend"]
15697
+ },
15698
+ "run.started": {
15699
+ emittedBy: "Execution coordinator",
15700
+ payloadFields: ["playName", "runtimeBackend"]
15701
+ },
15702
+ "run.waiting": {
15703
+ emittedBy: "Durable wait handling",
15704
+ payloadFields: ["waitKind", "waitUntil"]
15705
+ },
15706
+ "run.resumed": { emittedBy: "Durable wait handling", payloadFields: [] },
15707
+ "run.completed": {
15708
+ emittedBy: "Run finalization",
15709
+ payloadFields: ["result", "resultSummary", "terminalWorkCounterSegment"]
15710
+ },
15711
+ "run.failed": {
15712
+ emittedBy: "Run finalization",
15713
+ payloadFields: [
15714
+ "error",
15715
+ "result",
15716
+ "resultSummary",
15717
+ "terminalWorkCounterSegment"
15718
+ ]
15719
+ },
15720
+ "run.cancelled": {
15721
+ emittedBy: "Run cancellation",
15722
+ payloadFields: ["error", "result"]
15723
+ },
15724
+ "step.started": {
15725
+ emittedBy: "Managed step execution",
15726
+ payloadFields: ["stepId", "label", "kind", "artifactTableNamespace"]
15727
+ },
15728
+ "step.progress": {
15729
+ emittedBy: "Managed step execution",
15730
+ payloadFields: ["stepId", "label", "kind", "status", "progress"]
15731
+ },
15732
+ "step.completed": {
15733
+ emittedBy: "Managed step execution",
15734
+ payloadFields: ["stepId", "label", "kind", "artifactTableNamespace"]
15735
+ },
15736
+ "step.failed": {
15737
+ emittedBy: "Managed step execution",
15738
+ payloadFields: [
15739
+ "stepId",
15740
+ "label",
15741
+ "kind",
15742
+ "error",
15743
+ "artifactTableNamespace"
15744
+ ]
15745
+ },
15746
+ "step.skipped": {
15747
+ emittedBy: "Managed step execution",
15748
+ payloadFields: ["stepId", "label", "kind", "artifactTableNamespace"]
15749
+ },
15750
+ "log.appended": {
15751
+ emittedBy: "ctx.log and runtime/coordinator messages",
15752
+ payloadFields: [
15753
+ "lines",
15754
+ "lineContexts",
15755
+ "producerAttempt",
15756
+ "channelOffset",
15757
+ "logsTruncated"
15758
+ ]
15759
+ },
15760
+ "dataset.lifecycle": {
15761
+ emittedBy: "Managed dataset storage",
15762
+ payloadFields: [
15763
+ "datasetId",
15764
+ "path",
15765
+ "tableNamespace",
15766
+ "phase",
15767
+ "persistedRows",
15768
+ "succeededRows",
15769
+ "failedRows",
15770
+ "complete",
15771
+ "bornFrom"
15772
+ ]
15773
+ },
15774
+ "activity.observed": {
15775
+ emittedBy: "Managed provider/dataset/runner activity",
15776
+ payloadFields: ["observation"]
15777
+ },
15778
+ "work.counters": {
15779
+ emittedBy: "Runtime work accounting",
15780
+ payloadFields: [
15781
+ "attempt",
15782
+ "invocationSeq",
15783
+ "segmentId",
15784
+ "logicalCalls",
15785
+ "providerRequests",
15786
+ "provider429s",
15787
+ "final"
15788
+ ]
15789
+ }
15790
+ };
15791
+ var RUN_LOGS_KIND_HELP = [
15792
+ ...Object.entries(RUN_EVENT_KIND_CATALOG).map(([kind, descriptor]) => ({
15793
+ kind,
15794
+ description: descriptor.description,
15795
+ ...EVENT_DETAILS[kind]
15796
+ })),
15797
+ ...Object.entries(RUN_RECEIPT_SEARCH_KIND_CATALOG).map(
15798
+ ([kind, descriptor]) => ({
15799
+ kind,
15800
+ description: descriptor.description,
15801
+ emittedBy: "Durable work receipt settlement",
15802
+ payloadFields: ["status", "output", "error", "errorPayload"]
15803
+ })
15804
+ ),
15805
+ {
15806
+ kind: RUN_EVENT_SEARCH_FALLBACK_KIND,
15807
+ description: "Fallback for an observation without a recognized event type.",
15808
+ emittedBy: "Event indexing",
15809
+ payloadFields: []
15810
+ }
15811
+ ];
15812
+ var SECTIONS = [
15813
+ {
15814
+ title: "Choose the read",
15815
+ paragraphs: [
15816
+ "These commands read existing evidence; they do not start a run or execute a provider. Replace <run-id>, <play-name> and other angle-bracket values with identifiers returned by the CLI.",
15817
+ "Text logs: runs logs <run-id> returns the last 200 retained lines by default. --out writes the full retained stream to a local file. --log-level filters text severity; debug includes all retained levels. --failed reads only a terminal-failed run\u2019s last 20 retained lines and reports retention limitations.",
15818
+ "Event search: omit the run ID, or add any of --since, --until, --play, --kind, --where, --payloads, --cursor, --runtime-namespace or --runtime-backend. A supplied run ID then narrows the search. --limit and --json alone do not switch a run\u2019s text logs to event search. Text-only flags --out, --failed and --log-level cannot be combined with event search.",
15819
+ "Current status and returned output selectors: runs get <run-id> --json. Live observation: runs watch <run-id>. Dataset rows: runs export <run-id> --dataset <returned-selector> --out rows.csv. A referenced tool response: runs receipt <run-id> --key <returned-receipt-key> --json. Read each command\u2019s --help for its options."
15820
+ ],
15821
+ commands: [
15822
+ "deepline runs logs <run-id> --json",
15823
+ "deepline runs logs <run-id> --out run.log --json",
15824
+ "deepline runs logs --kind run.failed --json",
15825
+ "deepline runs logs --kind step.failed --payloads --json",
15826
+ "deepline runs logs --kind receipt.failed --payloads --json"
15827
+ ]
15828
+ },
15829
+ {
15830
+ title: "Search window and pagination",
15831
+ paragraphs: [
15832
+ "Search defaults to the last hour, newest first. Use explicit ISO UTC --since and --until values for reproducible queries; the maximum lookback is seven days. Default page size is 100 events; --limit accepts 1\u2013200. With --payloads, default and maximum are 10 events, with 16 MiB total payload data.",
15833
+ "JSON returns events[], returnedCount, since, until, nextCursor and next.logs. Run the returned next.logs command to continue with the same filters and UTC window; nextCursor is opaque. A bounded page or an empty result does not establish whole-run coverage or application health."
15834
+ ],
15835
+ commands: [
15836
+ "deepline runs logs <run-id> --kind log.appended --json",
15837
+ "deepline runs logs --play <play-name> --since <UTC-start> --until <UTC-end> --json"
15838
+ ]
15839
+ },
15840
+ {
15841
+ title: "Fields you can filter with --where",
15842
+ paragraphs: [
15843
+ "Identity strings: orgId, runId, playName, runtimeScope. These come from authenticated execution state; filters only narrow your authorized organization/runtime. Preview reads require the existing runtime credential and an authorized --runtime-namespace; --runtime-backend selects daytona or modal.",
15844
+ "Event string: kind. Optional strings: source, stepId, stepKind, status, datasetId, phase, provider, operation. Optional positive integer: producerAttempt. These fields exist only when recorded; inspect a returned event before filtering on an optional field.",
15845
+ 'stepId/stepKind describe recorded step work; datasetId/phase describe dataset lifecycle (registered, available, failed). provider/operation appear on typed provider activity.observed events, not every receipt or provider call. status is the recorded status or activity state when present: run.completed and step.completed do not imply status == "completed". Select lifecycle outcomes with --kind.',
15846
+ "context.<key> matches an authored flat scalar log field: string, number or boolean. Context cannot override event identity. Missing fields do not match. --where supports only $.field == literal predicates joined with &&, at most eight predicates and 512 bytes. No OR, ranges, wildcards, nested payload paths or text search. Time uses --since/--until; level and message are not --where fields.",
15847
+ 'Wrap the entire predicate in single shell quotes so $ and && reach the CLI unchanged. Inside it, strings use double quotes; numbers and booleans are unquoted. Types must match: 2 differs from "2", false differs from "false". Examples use illustrative recorded values; use your own step IDs, dataset IDs, provider/operation names and authored context. The context examples assume ctx.log recorded companyId: "acme_123", attempt: 2 and cached: false.'
15848
+ ],
15849
+ commands: [
15850
+ "# Failed retained work with its stored error/result",
15851
+ `deepline runs logs --kind receipt.failed --where '$.status == "failed"' --payloads --json`,
15852
+ "# Failure details for one named step",
15853
+ `deepline runs logs --kind step.failed --where '$.stepId == "company-lookup"' --payloads --json`,
15854
+ "# Typed provider observations matching both fields",
15855
+ `deepline runs logs --kind activity.observed --where '$.provider == "apollo" && $.operation == "company_lookup"' --json`,
15856
+ "# Failed lifecycle transitions for one dataset",
15857
+ `deepline runs logs --kind dataset.lifecycle --where '$.datasetId == "companies" && $.phase == "failed"' --payloads --json`,
15858
+ "# Authored string context on log lines",
15859
+ `deepline runs logs --kind log.appended --where '$.context.companyId == "acme_123"' --json`,
15860
+ "# Authored number and boolean context, both required to match",
15861
+ "deepline runs logs --kind log.appended --where '$.context.attempt == 2 && $.context.cached == false' --json",
15862
+ "# Known producer identity within one run",
15863
+ `deepline runs logs <run-id> --where '$.source == "worker" && $.producerAttempt == 1' --json`
15864
+ ]
15865
+ },
15866
+ {
15867
+ title: "What you get back",
15868
+ paragraphs: [
15869
+ "Search events include eventId, occurredAt, ingestedAt, kind, runId, playName, level and message. The CLI puts indexed fields directly on each events[] entry; SDK/API responses keep them under searchDoc. Log search message is a preview (up to 2,048 characters); use text logs or --out for full retained lines.",
15870
+ "--payloads adds eventPayload for stored canonical events: lifecycle, step details/errors, activity observations, dataset transitions and work counters. Receipt matches instead hydrate payload with status, output, error and errorPayload. An event without a receipt does not promise a tool response; retained payloads may be unavailable. Neither --where nor event search indexes request/response bodies.",
15871
+ "Search does not expose a receipt key or storage reference. To retrieve a specific retained tool response with runs receipt, use the receipt key returned in the run\u2019s exported evidence or tool execution metadata. For full row data, follow runs get output/export actions; dataset.lifecycle contains metadata, not all dataset rows.",
15872
+ "The catalog lists known searchable kinds, including receipt outcomes and the runtime.event fallback. Use the exact dotted name with --kind. Future stored kinds can also be queried; this list is not a CLI validation allowlist. Events are observations, not a count of billed provider calls.",
15873
+ "Catalog payload fields are possible producer fields, not required fields or --where paths. Canonical eventPayload uses type for the dotted event kind; its kind field, when present on a step, becomes indexed stepKind. Indexed log entries describe individual lines rather than reproducing the original lines batch.",
15874
+ "Canonical event envelopes carry runId, type, occurredAt (producer milliseconds), source, optional seq and optional producer-owned payload. Search occurredAt/ingestedAt are UTC timestamp strings. source identifies the recorded producer; producerAttempt is present only when known.",
15875
+ "activity.observed stores observation with activityId, stepId, target, state and observedAt. Targets describe provider, dataset, lease, runner, step or capacity work. State kinds are active, queued, waiting, retrying, scheduled, completed or failed; retry/wait detail stays in the payload. work.counters contains aggregate logicalCalls, providerRequests and provider429s, not per-call responses."
15876
+ ],
15877
+ commands: []
15878
+ }
15879
+ ];
15880
+ var RETENTION = [
15881
+ "Event/log/receipt search shares the PlanetScale index. New runs marked runEventStore=planet_scale retain accepted event/log history in PlanetScale; Convex keeps current run/control state and eligible saved-Play rollup facts. Older unmarked runs retain their existing readers. No backfill is implied.",
15882
+ "Search retention is seven days; receipt payload retention is independent. Logs reflect accepted, retained lines: runtime sampling and truncation can omit original console output. Read returned retention/sampling warnings; an export contains the full retained stream, not suppressed lines."
15883
+ ];
15884
+ function wrapParagraph(text, indent2 = 2) {
15885
+ const lines = [];
15886
+ const padding = " ".repeat(indent2);
15887
+ let line = padding;
15888
+ for (const word of text.split(" ")) {
15889
+ if (line.length + word.length > 80 && line.trim()) {
15890
+ lines.push(line.trimEnd());
15891
+ line = padding;
15892
+ }
15893
+ line += `${word} `;
15894
+ }
15895
+ lines.push(line.trimEnd());
15896
+ return lines.join("\n");
15897
+ }
15898
+ function renderRunLogsHelp() {
15899
+ const section = ({
15900
+ title,
15901
+ paragraphs,
15902
+ commands
15903
+ }) => [
15904
+ `${title}:`,
15905
+ ...paragraphs.flatMap((paragraph) => [wrapParagraph(paragraph), ""]),
15906
+ ...commands.length ? [" Common commands:", ...commands.map((command) => ` ${command}`)] : [],
15907
+ ""
15908
+ ];
15909
+ return [
15910
+ "",
15911
+ ...section(SECTIONS[0]),
15912
+ "Known --kind values (complete catalog):",
15913
+ ...RUN_LOGS_KIND_HELP.flatMap(
15914
+ ({ kind, description, emittedBy, payloadFields }) => [
15915
+ ` ${kind}`,
15916
+ wrapParagraph(description, 4),
15917
+ wrapParagraph(
15918
+ `Recorded by: ${emittedBy}. Payload fields: ${kind === RUN_EVENT_SEARCH_FALLBACK_KIND ? "producer-specific fields; inspect the returned payload" : payloadFields.join(", ") || "event envelope only"}.`,
15919
+ 4
15920
+ )
15921
+ ]
15922
+ ),
15923
+ "",
15924
+ ...SECTIONS.slice(1).flatMap(section),
15925
+ "Storage and retention:",
15926
+ ...RETENTION.flatMap((paragraph) => [wrapParagraph(paragraph), ""])
15927
+ ].join("\n");
15928
+ }
15929
+
15692
15930
  // ../play-runtime/run-execution-state.ts
15693
15931
  function assertNeverState(value, what) {
15694
15932
  throw new Error(`Unhandled ${what}: ${JSON.stringify(value)}`);
@@ -16514,6 +16752,7 @@ import {
16514
16752
  relative as relative5,
16515
16753
  resolve as resolve13
16516
16754
  } from "path";
16755
+ import { Option as Option3 } from "commander";
16517
16756
 
16518
16757
  // src/cli/commands/plays/bootstrap.ts
16519
16758
  import {
@@ -16874,7 +17113,7 @@ Example: deepline plays bootstrap people-email --from csv:data/leads.csv --using
16874
17113
  `Unknown plays bootstrap template: ${rawTemplate}
16875
17114
  Supported templates: ${formatPlayBootstrapTemplates()}|${MONITOR_BOOTSTRAP_TEMPLATE}` + (looksLikePlayReference ? `
16876
17115
 
16877
- "${rawTemplate}" looks like an existing play reference or file, not a bootstrap template. Do not run plays bootstrap on prebuilt/<play-name>. Use "deepline plays run ${rawTemplate} --input '{...}' --watch" to run it directly, "deepline plays describe ${rawTemplate} --json" to inspect its contract, or "deepline plays get ${rawTemplate} --source --out scratchpad.play.ts" to clone/edit it.` : "")
17116
+ "${rawTemplate}" looks like an existing play reference or file, not a bootstrap template. Do not run plays bootstrap on prebuilt/<play-name>. Use "deepline plays run ${rawTemplate} --input '{...}'" to run it directly, "deepline plays describe ${rawTemplate} --json" to inspect its contract, or "deepline plays get ${rawTemplate} --source --out scratchpad.play.ts" to clone/edit it.` : "")
16878
17117
  );
16879
17118
  }
16880
17119
  return rawTemplate;
@@ -17643,7 +17882,7 @@ function playUsesMapBackedRuntime(play) {
17643
17882
  }
17644
17883
  function assertComposablePlayRoute(input2) {
17645
17884
  if (!input2.playRef || !playUsesMapBackedRuntime(input2.play)) return;
17646
- const runCommand2 = input2.play?.runCommand?.trim() || `deepline plays run ${input2.playRef} --input '{...}' --watch`;
17885
+ const runCommand2 = input2.play?.runCommand?.trim() || `deepline plays run ${input2.playRef} --input '{...}'`;
17647
17886
  throw new PlayBootstrapValidationError(
17648
17887
  `Cannot use ${input2.stageLabel} play:${input2.playRef} in plays bootstrap composition: the selected play is dataset-backed/direct-run-only. Child plays that use ctx.dataset() own durable table state and must be run directly, exported, or validated as their own play instead of wrapped with ctx.runPlay. Run it directly first: ${runCommand2}`
17649
17888
  );
@@ -17685,14 +17924,14 @@ function generatePlaySourceRowsBlock(input2) {
17685
17924
  sourcePlay: input2.sourcePlay
17686
17925
  })) {
17687
17926
  const sourcePlay = input2.sourcePlay;
17688
- const runCommand2 = sourcePlay?.runCommand?.trim() || `deepline plays run ${input2.source.value} --input '{...}' --watch`;
17927
+ const runCommand2 = sourcePlay?.runCommand?.trim() || `deepline plays run ${input2.source.value} --input '{...}'`;
17689
17928
  return `// Source play ${input2.source.value} is dataset-backed/direct-run-only, so this generated play is stage 2.
17690
17929
  // Stage 1:
17691
17930
  // ${runCommand2}
17692
17931
  // Stage 2:
17693
17932
  // deepline runs export <stage-1-run-id> --dataset 'result.rows' --out source-export.csv
17694
17933
  // Stage 3:
17695
- // deepline plays run <this-file.play.ts> --input '{"sourceCsv":"source-export.csv","limit":${input2.sourcePlay ? "5" : "5"}}' --watch
17934
+ // deepline plays run <this-file.play.ts> --input '{"sourceCsv":"source-export.csv","limit":${input2.sourcePlay ? "5" : "5"}}'
17696
17935
  const sourceDataset = await ctx.csv<${input2.collectionType}>(input.sourceCsv ?? './source-export.csv');
17697
17936
  const ${input2.collection}: ${input2.collectionType}[] = await sourceDataset.peek(limit);`;
17698
17937
  }
@@ -18172,7 +18411,7 @@ Notes:
18172
18411
  Examples:
18173
18412
  deepline plays bootstrap people-email --from csv:data/leads.csv --using play:prebuilt/name-and-domain-to-email-waterfall --limit 5 --out email-flow.play.ts
18174
18413
  deepline plays check email-flow.play.ts
18175
- deepline plays run email-flow.play.ts --input '{"limit":5}' --watch
18414
+ deepline plays run email-flow.play.ts --input '{"limit":5}'
18176
18415
 
18177
18416
  deepline plays bootstrap people-email --from provider:dropleads_search_people --using providers:hunter_email_finder,leadmagic_email_finder --limit 5 --out prospecting.play.ts
18178
18417
  deepline plays bootstrap company-people-email --from provider:crustdata_companydb_search --people play:prebuilt/company-to-contact --email play:prebuilt/name-and-domain-to-email-waterfall --limit 5 --out account-contacts.play.ts
@@ -28126,7 +28365,7 @@ function buildPlayReferenceNotFoundMessage(input2) {
28126
28365
  lines.push("", ` ${suggestion.reference}`);
28127
28366
  if (input2.command === "run") {
28128
28367
  lines.push(
28129
- ` deepline plays run ${suggestion.reference} --input '{...}' --watch`
28368
+ ` deepline plays run ${suggestion.reference} --input '{...}'`
28130
28369
  );
28131
28370
  } else if (input2.command === "get") {
28132
28371
  lines.push(` deepline plays get ${suggestion.reference} --json`);
@@ -31450,7 +31689,9 @@ function buildOrdinaryPlayRunCommand(options, resolvedRevisionId) {
31450
31689
  }
31451
31690
  if (options.open) parts.push("--open");
31452
31691
  if (options.fullJson) parts.push("--full");
31453
- if (options.jsonOutput && options.emitLogs) parts.push("--logs");
31692
+ if (options.jsonOutput && options.emitLogs) {
31693
+ parts.push("--log-level", "debug");
31694
+ }
31454
31695
  if (options.jsonOutput) parts.push("--json");
31455
31696
  return parts.join(" ");
31456
31697
  }
@@ -32534,7 +32775,7 @@ function parsePlayRunOptions(args) {
32534
32775
  }
32535
32776
  if (arg === "--tail") {
32536
32777
  throw new Error(
32537
- "--tail is removed for `plays run`; use `--watch` to stream completion output."
32778
+ "--tail is removed for `plays run`; run waits and streams completion output by default."
32538
32779
  );
32539
32780
  }
32540
32781
  continue;
@@ -35164,7 +35405,7 @@ async function handlePlayList(args) {
35164
35405
  ` cost estimate: ${formatPlayCostEstimate(play.costEstimate)}`
35165
35406
  );
35166
35407
  }
35167
- lines.push(` run: deepline plays run ${reference} --watch`);
35408
+ lines.push(` run: deepline plays run ${reference}`);
35168
35409
  }
35169
35410
  if (page.hasMore) {
35170
35411
  lines.push("List truncated \u2014 more plays are available.");
@@ -35986,7 +36227,6 @@ Run and retrieve results:
35986
36227
  2. Start and follow a new run: deepline plays run workflow.play.ts --csv contacts.csv
35987
36228
  This example requires input.csv. Use the selected Play's actual input fields.
35988
36229
  Run waits and shows progress by default; --no-wait returns immediately.
35989
- --watch and --wait are redundant compatibility aliases for the default.
35990
36230
  3. Read its overview: deepline runs get <run-id> --json
35991
36231
  4. Export complete rows: deepline runs export <run-id> --dataset <returned-selector> --out results.csv
35992
36232
  If disconnected, attach to the SAME run with deepline runs tail <run-id>.
@@ -36075,8 +36315,7 @@ Notes:
36075
36315
  Named plays run the live saved revision.
36076
36316
  File args accept local paths; the CLI stages files before submit.
36077
36317
  By default, run waits for completion and prints logs, previews, stats, and
36078
- next commands. --watch and --wait are accepted compatibility aliases for the
36079
- default behavior. Use --no-wait only when you intentionally want
36318
+ next commands. Use --no-wait only when you intentionally want
36080
36319
  a fire-and-forget run id.
36081
36320
  --run-id-file writes the durable run id to a versioned JSON file as soon as
36082
36321
  the server accepts the run. The destination must not already exist.
@@ -36146,12 +36385,29 @@ Examples:
36146
36385
  ).option(
36147
36386
  "--fixture-behavior <json>",
36148
36387
  "Internal/testing: fixture response behavior JSON object or @file path"
36149
- ).option("--watch", "Compatibility alias; run waits by default").option("--wait", "Compatibility alias; run waits by default").option("--no-wait", "Start the run and return immediately").option(
36388
+ ).addOption(
36389
+ new Option3(
36390
+ "--watch",
36391
+ "Compatibility alias; run waits by default"
36392
+ ).hideHelp()
36393
+ ).addOption(
36394
+ new Option3(
36395
+ "--wait",
36396
+ "Compatibility alias; run waits by default"
36397
+ ).hideHelp()
36398
+ ).option("--no-wait", "Start the run and return immediately").option(
36150
36399
  "--run-id-file <path>",
36151
36400
  "Atomically write the accepted run id to a new JSON file"
36152
- ).option("--logs", "Compatibility alias for --log-level debug").option(
36153
- "--debug [value]",
36154
- "Compatibility alias for --log-level debug when bare; --debug <value> remains legacy Play input.debug"
36401
+ ).addOption(
36402
+ new Option3(
36403
+ "--logs",
36404
+ "Compatibility alias for --log-level debug"
36405
+ ).hideHelp()
36406
+ ).addOption(
36407
+ new Option3(
36408
+ "--debug [value]",
36409
+ "Compatibility alias for --log-level debug when bare; --debug <value> remains legacy Play input.debug"
36410
+ ).hideHelp()
36155
36411
  ).option(
36156
36412
  "--log-level <level>",
36157
36413
  "Minimum live log severity: debug, info (default), warn, or error"
@@ -36833,9 +37089,8 @@ Notes:
36833
37089
  logs for persisted log history. In human output, --compact prints
36834
37090
  deduplicated step transitions and progress. --json emits one terminal
36835
37091
  package. --jsonl emits canonical watched events as JSON Lines and ends with
36836
- the same compact package shape as runs get --json. The tail command remains
36837
- an alias. --log-level
36838
- filters the rendered customer-safe runtime log lines; debug includes runtime
37092
+ the same compact package shape as runs get --json. --log-level filters the
37093
+ rendered customer-safe runtime log lines; debug includes runtime
36839
37094
  and receipt diagnostics and writes them to stderr alongside JSON output.
36840
37095
 
36841
37096
  Examples:
@@ -36851,7 +37106,17 @@ Examples:
36851
37106
  ).option(
36852
37107
  "--compact",
36853
37108
  "Show deduplicated human step transitions and progress"
36854
- ).option("--logs", "Compatibility alias for --log-level debug").option("--debug", "Compatibility alias for --log-level debug").option(
37109
+ ).addOption(
37110
+ new Option3(
37111
+ "--logs",
37112
+ "Compatibility alias for --log-level debug"
37113
+ ).hideHelp()
37114
+ ).addOption(
37115
+ new Option3(
37116
+ "--debug",
37117
+ "Compatibility alias for --log-level debug"
37118
+ ).hideHelp()
37119
+ ).option(
36855
37120
  "--log-level <level>",
36856
37121
  "Minimum severity: debug, info (default), warn, or error"
36857
37122
  ).action(async (runId, options) => {
@@ -36867,51 +37132,31 @@ Examples:
36867
37132
  });
36868
37133
  runs.command("logs [runId]").description(
36869
37134
  "Fetch one run\u2019s logs or search recent runtime events across runs."
36870
- ).addHelpText(
36871
- "after",
36872
- `
36873
- Notes:
36874
- Prints a bounded recent log preview by default. Use --out to write the full
36875
- retained stream to a local file. Use --log-level to filter by severity;
36876
- default debug preserves the complete historical stream.
36877
-
36878
- Search flags read the org-scoped event index (last hour by default, at most
36879
- seven days). Org, run, Play, runtime scope and known attempt identity are
36880
- attached automatically. --where accepts equality joined with && for orgId,
36881
- runId, playName, runtimeScope, producerAttempt, kind, status, source, stepId,
36882
- stepKind, datasetId, phase, provider, operation, and scalar context.<key>.
36883
- Filters only narrow the authenticated org/runtime scope. Provider and
36884
- operation come from typed provider activity observations; this does not
36885
- index request/response bodies or promise one event per provider call. --payloads
36886
- includes full result data in this command, capped at ten events and 16 MiB.
36887
-
36888
- Event, log, and receipt search share one PlanetScale index. For runs marked
36889
- runEventStore=planet_scale, PlanetScale owns full event/log history; Convex
36890
- keeps the live run snapshot, admission fence, and eligible saved-Play rollup
36891
- facts. Marked-run log bodies are not copied into Convex. Unmarked legacy runs
36892
- keep their existing Convex event history and Run Log Stream.
36893
- Known --kind values: ${RUN_EVENT_SEARCH_KIND_VALUES.join(", ")}.
36894
-
36895
- Examples:
36896
- deepline runs logs play/my-play/run/20260501t000000-000
36897
- deepline runs logs play/my-play/run/20260501t000000-000 --limit 500
36898
- deepline runs logs play/my-play/run/20260501t000000-000 --failed --json
36899
- deepline runs logs play/my-play/run/20260501t000000-000 --log-level error
36900
- deepline runs logs play/my-play/run/20260501t000000-000 --out run.log --log-level debug --json
36901
- deepline runs logs --since 2026-09-29T00:00:00Z --kind step.failed --json
36902
- deepline runs logs --kind activity.observed --where '$.provider == "apollo" && $.operation == "company_lookup"' --json
36903
- deepline runs logs --play my-play --where '$.context.companyId == "acme_123"' --json
36904
- deepline runs logs --where '$.status == "failed"' --payloads --play my-play --json
36905
- `
36906
- ).option("--limit <count>", "Maximum log lines or search events to print").option("--out <path>", "Write the full retained log stream to a file").option("--failed", "Show the bounded terminal-failure log window").option(
37135
+ ).addHelpText("after", renderRunLogsHelp()).option(
37136
+ "--limit <count>",
37137
+ "Text tail: default 200; search: default 100, max 200 (10 with --payloads)"
37138
+ ).option("--out <path>", "Write the full retained log stream to a file").option("--failed", "Show the bounded terminal-failure log window").option(
36907
37139
  "--log-level <level>",
36908
37140
  "Minimum severity: debug (default), info, warn, or error"
36909
- ).option("--logs", "Compatibility alias for --log-level debug").option("--debug", "Compatibility alias for --log-level debug").option("--json", "Emit JSON output. Also automatic when stdout is piped").option("--since <timestamp>", "Search events since this UTC timestamp").option("--until <timestamp>", "Search events before this UTC timestamp").option("--play <name>", "Filter events by Play name").option("--kind <kind>", "Filter events by kind").option(
37141
+ ).addOption(
37142
+ new Option3(
37143
+ "--logs",
37144
+ "Compatibility alias for --log-level debug"
37145
+ ).hideHelp()
37146
+ ).addOption(
37147
+ new Option3(
37148
+ "--debug",
37149
+ "Compatibility alias for --log-level debug"
37150
+ ).hideHelp()
37151
+ ).option("--json", "Emit JSON output. Also automatic when stdout is piped").option("--since <timestamp>", "Search events since this UTC timestamp").option("--until <timestamp>", "Search events before this UTC timestamp").option("--play <name>", "Filter events by Play name").option(
37152
+ "--kind <kind>",
37153
+ "Search one exact event kind; complete catalog below"
37154
+ ).option(
36910
37155
  "--where <jsonpath>",
36911
- 'Bound JSONPath equality over event fields (for example $.provider == "apollo" && $.operation == "company_lookup")'
37156
+ "Search indexed fields with == and &&; field types and availability below"
36912
37157
  ).option(
36913
37158
  "--payloads",
36914
- "Include full stored payloads (up to 10 events and 16 MiB)"
37159
+ "Search with canonical eventPayload or receipt payload; max 10 events, 16 MiB"
36915
37160
  ).option("--cursor <token>", "Continue a bounded event search").option(
36916
37161
  "--runtime-namespace <name>",
36917
37162
  "Search an explicitly authorized Preview namespace"
@@ -37235,11 +37480,11 @@ async function handlePlaySharePublish(args) {
37235
37480
  ok: false,
37236
37481
  code: "NO_SUCCESSFUL_RUN",
37237
37482
  message,
37238
- next: `deepline plays run ${name} --wait`
37483
+ next: `deepline plays run ${name}`
37239
37484
  });
37240
37485
  } else {
37241
37486
  console.error(message);
37242
- console.error(` deepline plays run ${name} --wait`);
37487
+ console.error(` deepline plays run ${name}`);
37243
37488
  }
37244
37489
  return 7;
37245
37490
  }
@@ -42225,7 +42470,7 @@ function registerEnrichCommand(program) {
42225
42470
  "--open",
42226
42471
  "Open the generated play page in a browser after the run starts."
42227
42472
  ).addOption(
42228
- new Option3(
42473
+ new Option4(
42229
42474
  "--no-open [legacy-value]",
42230
42475
  "Removed legacy option"
42231
42476
  ).hideHelp()
@@ -42615,7 +42860,7 @@ function registerExecutionsCommands(program) {
42615
42860
  }
42616
42861
 
42617
42862
  // src/cli/commands/feedback.ts
42618
- import { Option as Option4 } from "commander";
42863
+ import { Option as Option5 } from "commander";
42619
42864
  import { readFileSync as readFileSync10 } from "fs";
42620
42865
  async function handleFeedback(text, options) {
42621
42866
  const message = resolveFeedbackText(text, options.file);
@@ -42681,7 +42926,7 @@ Notes:
42681
42926
  to submit the report.
42682
42927
 
42683
42928
  Examples:
42684
- deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch" --error-outcome terminal
42929
+ deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts" --error-outcome terminal
42685
42930
  deepline feedback send "unexpected billing output" --payload '{"command":"billing usage"}' --json
42686
42931
  `
42687
42932
  );
@@ -42693,10 +42938,10 @@ Examples:
42693
42938
  deepline feedback send --file incident.md --requested --json
42694
42939
  cat incident.md | deepline feedback send --requested --json
42695
42940
  deepline feedback send "tools search returned stale results" --requested --json
42696
- deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts --watch" --error-outcome terminal
42941
+ deepline feedback send "plays run failed after upload" --command "deepline plays run my.play.ts" --error-outcome terminal
42697
42942
  `
42698
42943
  ).argument("[text]", "Feedback text").option("--file <path>", "Read feedback text from a file, or - for stdin").option("--command <command>", "Command that reproduced the issue").option("--payload <payload>", "JSON or plain-text payload for the repro").addOption(
42699
- new Option4(
42944
+ new Option5(
42700
42945
  "--error-outcome <outcome>",
42701
42946
  "Error impact on the task: terminal or continued"
42702
42947
  ).choices(["terminal", "continued"])
@@ -54001,7 +54246,7 @@ Examples:
54001
54246
  }
54002
54247
 
54003
54248
  // src/cli/commands/tools.ts
54004
- import { Option as Option5 } from "commander";
54249
+ import { Option as Option6 } from "commander";
54005
54250
  import {
54006
54251
  chmodSync,
54007
54252
  existsSync as existsSync20,
@@ -55031,7 +55276,7 @@ function isMissingToolMetadataError(error) {
55031
55276
  function playAliasToolErrorMessage(toolId, play) {
55032
55277
  const playName = play.reference ?? play.name;
55033
55278
  return `${toolId} is a play, not a tool.
55034
- Use: deepline plays run ${playName} --input '{...}' --watch
55279
+ Use: deepline plays run ${playName} --input '{...}'
55035
55280
  Inspect its schema with: deepline plays describe ${playName} --json`;
55036
55281
  }
55037
55282
  function printPlayAliasToolError(toolId, play) {
@@ -55063,11 +55308,11 @@ function playRunCommandForTool(tool, toolId, input2) {
55063
55308
  const playReference = playReferenceForTool(tool);
55064
55309
  if (!playReference) return playSearchCommandForToolId(toolId);
55065
55310
  const inputArg = input2 === void 0 ? "'{...}'" : `'${JSON.stringify(input2)}'`;
55066
- return `deepline plays run ${playReference} --input ${inputArg} --watch`;
55311
+ return `deepline plays run ${playReference} --input ${inputArg}`;
55067
55312
  }
55068
55313
  function playLikeToolExecuteErrorMessage(toolId, tool) {
55069
55314
  const playReference = tool ? playReferenceForTool(tool) : null;
55070
- const nextStep = playReference ? `Use: deepline plays run ${playReference} --input '{...}' --watch` : `Find the maintained workflow with: ${playSearchCommandForToolId(toolId)}`;
55315
+ const nextStep = playReference ? `Use: deepline plays run ${playReference} --input '{...}'` : `Find the maintained workflow with: ${playSearchCommandForToolId(toolId)}`;
55071
55316
  return [
55072
55317
  `${toolId} is a workflow/play entry, not an atomic provider tool.`,
55073
55318
  nextStep,
@@ -55243,12 +55488,12 @@ Examples:
55243
55488
  "--examples-only",
55244
55489
  "Only print runnable examples and sample payloads"
55245
55490
  ).option("--getters-only", "Only print extracted list/value getters").addOption(
55246
- new Option5(
55491
+ new Option6(
55247
55492
  "--compact",
55248
55493
  "Compatibility alias for the default compact view"
55249
55494
  ).hideHelp()
55250
55495
  ).addOption(
55251
- new Option5(
55496
+ new Option6(
55252
55497
  "--contract-json",
55253
55498
  "Compatibility alias for compact contract JSON"
55254
55499
  ).hideHelp()
@@ -58263,7 +58508,7 @@ async function main() {
58263
58508
  if (printStartupPhase) {
58264
58509
  progress?.phase("loading deepline cli");
58265
58510
  }
58266
- const program = new Command6();
58511
+ const program = new Command7();
58267
58512
  program.name("deepline").description(
58268
58513
  "Deepline CLI \u2014 GTM enrichment tools, plays, and runs from your terminal."
58269
58514
  ).version(SDK_VERSION, "-v, --version", "Show version").exitOverride().showHelpAfterError().showSuggestionAfterError(true).addHelpText(