deepline 0.3.107 → 0.3.109

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.
@@ -53,6 +53,10 @@ const SOURCE_EXTENSIONS = [
53
53
  '.json',
54
54
  ];
55
55
  const TEXT_IMPORT_EXTENSIONS = new Set(['.md', '.txt']);
56
+ const EXPLICIT_IMPORT_EXTENSIONS = new Set([
57
+ ...SOURCE_EXTENSIONS,
58
+ ...TEXT_IMPORT_EXTENSIONS,
59
+ ]);
56
60
 
57
61
  function isTextImportFile(filePath: string): boolean {
58
62
  return TEXT_IMPORT_EXTENSIONS.has(extname(filePath));
@@ -312,17 +316,20 @@ async function resolveLocalImport(
312
316
  const candidates: string[] = [base];
313
317
  const explicitExtension = extname(base).toLowerCase();
314
318
 
315
- if (!explicitExtension) {
319
+ if (['.js', '.jsx', '.mjs', '.cjs'].includes(explicitExtension)) {
320
+ const stem = base.slice(0, -explicitExtension.length);
316
321
  candidates.push(
317
- ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),
322
+ ...SOURCE_EXTENSIONS.map((extension) => `${stem}${extension}`),
318
323
  );
324
+ } else if (!EXPLICIT_IMPORT_EXTENSIONS.has(explicitExtension)) {
325
+ // Only a recognized extension means the author named the file exactly. A
326
+ // dotted name like `./child.play` or `./user.schema` resolves the way
327
+ // TypeScript resolves it: append source extensions, then try an index.
319
328
  candidates.push(
320
- ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`)),
329
+ ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),
321
330
  );
322
- } else if (['.js', '.jsx', '.mjs', '.cjs'].includes(explicitExtension)) {
323
- const stem = base.slice(0, -explicitExtension.length);
324
331
  candidates.push(
325
- ...SOURCE_EXTENSIONS.map((extension) => `${stem}${extension}`),
332
+ ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`)),
326
333
  );
327
334
  }
328
335
 
@@ -200,7 +200,7 @@ export const SDK_RELEASE = {
200
200
  // getters keep their established compatibility behavior.
201
201
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
202
202
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
203
- version: '0.3.107',
203
+ version: '0.3.109',
204
204
  updateSummary:
205
205
  'Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.',
206
206
  packageCapabilities: {
@@ -409,26 +409,26 @@ function absurdProjectionQuery(queueTable: string): string {
409
409
  FROM ${table}
410
410
  WHERE state = 'pending' AND available_at <= $1::timestamptz
411
411
  ORDER BY available_at, run_id
412
- LIMIT $3)
412
+ LIMIT $2)
413
413
  UNION ALL
414
414
  (SELECT 'delayed'::text, available_at
415
415
  FROM ${table}
416
416
  WHERE state = 'sleeping'
417
417
  ORDER BY available_at, run_id
418
- LIMIT $3)
418
+ LIMIT $2)
419
419
  UNION ALL
420
420
  (SELECT 'delayed'::text, available_at
421
421
  FROM ${table}
422
422
  WHERE state = 'pending' AND available_at > $1::timestamptz
423
423
  ORDER BY available_at, run_id
424
- LIMIT $3)
424
+ LIMIT $2)
425
425
  UNION ALL
426
426
  (SELECT 'in_flight'::text, coalesce(started_at, created_at)
427
427
  FROM ${table}
428
428
  WHERE state = 'running'
429
429
  AND (claim_expires_at IS NULL OR claim_expires_at > $1::timestamptz)
430
430
  ORDER BY available_at, run_id
431
- LIMIT $3)
431
+ LIMIT $2)
432
432
  UNION ALL
433
433
  (SELECT 'blocked'::text, coalesce(claim_expires_at, started_at, created_at)
434
434
  FROM ${table}
@@ -436,30 +436,30 @@ function absurdProjectionQuery(queueTable: string): string {
436
436
  AND claim_expires_at IS NOT NULL
437
437
  AND claim_expires_at <= $1::timestamptz
438
438
  ORDER BY claim_expires_at, run_id
439
- LIMIT $3)
439
+ LIMIT $2)
440
440
  UNION ALL
441
441
  (SELECT 'dead_lettered'::text, coalesce(failed_at, created_at)
442
442
  FROM ${table}
443
443
  WHERE state = 'failed'
444
444
  ORDER BY available_at, run_id
445
- LIMIT $3)
445
+ LIMIT $2)
446
446
  )
447
447
  SELECT
448
- least(count(*) FILTER (WHERE bucket = 'ready'), $4) AS ready,
449
- least(count(*) FILTER (WHERE bucket = 'delayed'), $4) AS delayed,
450
- least(count(*) FILTER (WHERE bucket = 'in_flight'), $4) AS in_flight,
451
- least(count(*) FILTER (WHERE bucket = 'blocked'), $4) AS blocked,
452
- least(count(*) FILTER (WHERE bucket = 'dead_lettered'), $4) AS dead_lettered,
448
+ least(count(*) FILTER (WHERE bucket = 'ready'), $3) AS ready,
449
+ least(count(*) FILTER (WHERE bucket = 'delayed'), $3) AS delayed,
450
+ least(count(*) FILTER (WHERE bucket = 'in_flight'), $3) AS in_flight,
451
+ least(count(*) FILTER (WHERE bucket = 'blocked'), $3) AS blocked,
452
+ least(count(*) FILTER (WHERE bucket = 'dead_lettered'), $3) AS dead_lettered,
453
453
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'ready') AS oldest_ready_ms,
454
454
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'delayed') AS oldest_delayed_ms,
455
455
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'in_flight') AS oldest_in_flight_ms,
456
456
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'blocked') AS oldest_blocked_ms,
457
457
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'dead_lettered') AS oldest_dead_lettered_ms,
458
- count(*) FILTER (WHERE bucket = 'ready') > $4 AS ready_truncated,
459
- count(*) FILTER (WHERE bucket = 'delayed') > $4 AS delayed_truncated,
460
- count(*) FILTER (WHERE bucket = 'in_flight') > $4 AS in_flight_truncated,
461
- count(*) FILTER (WHERE bucket = 'blocked') > $4 AS blocked_truncated,
462
- count(*) FILTER (WHERE bucket = 'dead_lettered') > $4 AS dead_lettered_truncated,
458
+ count(*) FILTER (WHERE bucket = 'ready') > $3 AS ready_truncated,
459
+ count(*) FILTER (WHERE bucket = 'delayed') > $3 AS delayed_truncated,
460
+ count(*) FILTER (WHERE bucket = 'in_flight') > $3 AS in_flight_truncated,
461
+ count(*) FILTER (WHERE bucket = 'blocked') > $3 AS blocked_truncated,
462
+ count(*) FILTER (WHERE bucket = 'dead_lettered') > $3 AS dead_lettered_truncated,
463
463
  0::bigint AS admitted,
464
464
  0::bigint AS started,
465
465
  0::bigint AS completed,
@@ -493,34 +493,34 @@ function outboxProjectionQuery(schema: string): string {
493
493
  FROM ${table}
494
494
  WHERE delivered_at IS NULL AND failed_at IS NULL
495
495
  ORDER BY coalesce(next_attempt_at, created_at), created_at, event_id
496
- LIMIT $3
496
+ LIMIT $2
497
497
  ), dead_sample AS (
498
498
  SELECT 'dead_lettered'::text AS bucket, coalesce(failed_at, created_at) AS age_at
499
499
  FROM ${table}
500
500
  WHERE delivered_at IS NULL AND failed_at IS NOT NULL
501
501
  ORDER BY failed_at, event_id
502
- LIMIT $3
502
+ LIMIT $2
503
503
  ), sampled AS (
504
504
  SELECT * FROM pending_sample
505
505
  UNION ALL
506
506
  SELECT * FROM dead_sample
507
507
  )
508
508
  SELECT
509
- least(count(*) FILTER (WHERE bucket = 'ready'), $4) AS ready,
510
- least(count(*) FILTER (WHERE bucket = 'delayed'), $4) AS delayed,
511
- least(count(*) FILTER (WHERE bucket = 'in_flight'), $4) AS in_flight,
512
- least(count(*) FILTER (WHERE bucket = 'blocked'), $4) AS blocked,
513
- least(count(*) FILTER (WHERE bucket = 'dead_lettered'), $4) AS dead_lettered,
509
+ least(count(*) FILTER (WHERE bucket = 'ready'), $3) AS ready,
510
+ least(count(*) FILTER (WHERE bucket = 'delayed'), $3) AS delayed,
511
+ least(count(*) FILTER (WHERE bucket = 'in_flight'), $3) AS in_flight,
512
+ least(count(*) FILTER (WHERE bucket = 'blocked'), $3) AS blocked,
513
+ least(count(*) FILTER (WHERE bucket = 'dead_lettered'), $3) AS dead_lettered,
514
514
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'ready') AS oldest_ready_ms,
515
515
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'delayed') AS oldest_delayed_ms,
516
516
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'in_flight') AS oldest_in_flight_ms,
517
517
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'blocked') AS oldest_blocked_ms,
518
518
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'dead_lettered') AS oldest_dead_lettered_ms,
519
- count(*) FILTER (WHERE bucket <> 'dead_lettered') > $4 AS ready_truncated,
520
- count(*) FILTER (WHERE bucket <> 'dead_lettered') > $4 AS delayed_truncated,
521
- count(*) FILTER (WHERE bucket <> 'dead_lettered') > $4 AS in_flight_truncated,
522
- count(*) FILTER (WHERE bucket <> 'dead_lettered') > $4 AS blocked_truncated,
523
- count(*) FILTER (WHERE bucket = 'dead_lettered') > $4 AS dead_lettered_truncated,
519
+ count(*) FILTER (WHERE bucket <> 'dead_lettered') > $3 AS ready_truncated,
520
+ count(*) FILTER (WHERE bucket <> 'dead_lettered') > $3 AS delayed_truncated,
521
+ count(*) FILTER (WHERE bucket <> 'dead_lettered') > $3 AS in_flight_truncated,
522
+ count(*) FILTER (WHERE bucket <> 'dead_lettered') > $3 AS blocked_truncated,
523
+ count(*) FILTER (WHERE bucket = 'dead_lettered') > $3 AS dead_lettered_truncated,
524
524
  0::bigint AS admitted,
525
525
  0::bigint AS started,
526
526
  0::bigint AS completed,
@@ -556,23 +556,23 @@ function cleanupProjectionQuery(schema: string): string {
556
556
  FROM ${table}
557
557
  WHERE status <> 'deleted'
558
558
  ORDER BY available_at, created_at, provider, sandbox_id
559
- LIMIT $3
559
+ LIMIT $2
560
560
  )
561
561
  SELECT
562
- least(count(*) FILTER (WHERE bucket = 'ready'), $4) AS ready,
563
- least(count(*) FILTER (WHERE bucket = 'delayed'), $4) AS delayed,
564
- least(count(*) FILTER (WHERE bucket = 'in_flight'), $4) AS in_flight,
565
- least(count(*) FILTER (WHERE bucket = 'blocked'), $4) AS blocked,
562
+ least(count(*) FILTER (WHERE bucket = 'ready'), $3) AS ready,
563
+ least(count(*) FILTER (WHERE bucket = 'delayed'), $3) AS delayed,
564
+ least(count(*) FILTER (WHERE bucket = 'in_flight'), $3) AS in_flight,
565
+ least(count(*) FILTER (WHERE bucket = 'blocked'), $3) AS blocked,
566
566
  0::bigint AS dead_lettered,
567
567
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'ready') AS oldest_ready_ms,
568
568
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'delayed') AS oldest_delayed_ms,
569
569
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'in_flight') AS oldest_in_flight_ms,
570
570
  max(${intervalExpr('age_at')}) FILTER (WHERE bucket = 'blocked') AS oldest_blocked_ms,
571
571
  NULL::bigint AS oldest_dead_lettered_ms,
572
- count(*) > $4 AS ready_truncated,
573
- count(*) > $4 AS delayed_truncated,
574
- count(*) > $4 AS in_flight_truncated,
575
- count(*) > $4 AS blocked_truncated,
572
+ count(*) > $3 AS ready_truncated,
573
+ count(*) > $3 AS delayed_truncated,
574
+ count(*) > $3 AS in_flight_truncated,
575
+ count(*) > $3 AS blocked_truncated,
576
576
  false AS dead_lettered_truncated,
577
577
  0::bigint AS admitted,
578
578
  0::bigint AS started,
@@ -658,7 +658,7 @@ export async function readRuntimeQueueHealthFromClient(
658
658
  for (const queueName of queueNames) {
659
659
  const result = await client.query<CountRow>(
660
660
  absurdProjectionQuery(`r_${queueName}`),
661
- [now, now, sampleLimit + 1, sampleLimit],
661
+ [now, sampleLimit + 1, sampleLimit],
662
662
  );
663
663
  projections.push(
664
664
  projectionFromRow({
@@ -673,13 +673,11 @@ export async function readRuntimeQueueHealthFromClient(
673
673
  }
674
674
  const [outbox, cleanup] = await Promise.all([
675
675
  client.query<CountRow>(outboxProjectionQuery(schema), [
676
- now,
677
676
  now,
678
677
  sampleLimit + 1,
679
678
  sampleLimit,
680
679
  ]),
681
680
  client.query<CountRow>(cleanupProjectionQuery(schema), [
682
- now,
683
681
  now,
684
682
  sampleLimit + 1,
685
683
  sampleLimit,
@@ -78,6 +78,10 @@ const SOURCE_EXTENSIONS = [
78
78
  ];
79
79
  const PLAY_SOURCE_FILE_PATTERN = /\.play\.(?:[cm]?[jt]sx?)$/i;
80
80
  const TEXT_IMPORT_EXTENSIONS = new Set(['.md', '.txt']);
81
+ const EXPLICIT_IMPORT_EXTENSIONS = new Set([
82
+ ...SOURCE_EXTENSIONS,
83
+ ...TEXT_IMPORT_EXTENSIONS,
84
+ ]);
81
85
  const NODE_BUILTIN_SET = new Set(
82
86
  builtinModules.flatMap((name) =>
83
87
  name.startsWith('node:') ? [name, name.slice(5)] : [name, `node:${name}`],
@@ -1888,17 +1892,20 @@ async function resolveLocalImport(
1888
1892
  const candidates: string[] = [base];
1889
1893
  const explicitExtension = extname(base).toLowerCase();
1890
1894
 
1891
- if (!explicitExtension) {
1895
+ if (['.js', '.jsx', '.mjs', '.cjs'].includes(explicitExtension)) {
1896
+ const stem = base.slice(0, -explicitExtension.length);
1892
1897
  candidates.push(
1893
- ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),
1898
+ ...SOURCE_EXTENSIONS.map((extension) => `${stem}${extension}`),
1894
1899
  );
1900
+ } else if (!EXPLICIT_IMPORT_EXTENSIONS.has(explicitExtension)) {
1901
+ // Only a recognized extension means the author named the file exactly. A
1902
+ // dotted name like `./child.play` or `./user.schema` resolves the way
1903
+ // TypeScript resolves it: append source extensions, then try an index.
1895
1904
  candidates.push(
1896
- ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`)),
1905
+ ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),
1897
1906
  );
1898
- } else if (['.js', '.jsx', '.mjs', '.cjs'].includes(explicitExtension)) {
1899
- const stem = base.slice(0, -explicitExtension.length);
1900
1907
  candidates.push(
1901
- ...SOURCE_EXTENSIONS.map((extension) => `${stem}${extension}`),
1908
+ ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`)),
1902
1909
  );
1903
1910
  }
1904
1911
 
@@ -42,6 +42,10 @@ const SOURCE_EXTENSIONS = [
42
42
  '.json',
43
43
  ];
44
44
  const TEXT_IMPORT_EXTENSIONS = new Set(['.md', '.txt']);
45
+ const EXPLICIT_IMPORT_EXTENSIONS = new Set([
46
+ ...SOURCE_EXTENSIONS,
47
+ ...TEXT_IMPORT_EXTENSIONS,
48
+ ]);
45
49
 
46
50
  function isTextImportFile(filePath: string): boolean {
47
51
  return TEXT_IMPORT_EXTENSIONS.has(extname(filePath));
@@ -223,17 +227,20 @@ async function resolveLocalImport(
223
227
  const candidates: string[] = [base];
224
228
  const explicitExtension = extname(base).toLowerCase();
225
229
 
226
- if (!explicitExtension) {
230
+ if (['.js', '.jsx', '.mjs', '.cjs'].includes(explicitExtension)) {
231
+ const stem = base.slice(0, -explicitExtension.length);
227
232
  candidates.push(
228
- ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),
233
+ ...SOURCE_EXTENSIONS.map((extension) => `${stem}${extension}`),
229
234
  );
235
+ } else if (!EXPLICIT_IMPORT_EXTENSIONS.has(explicitExtension)) {
236
+ // Only a recognized extension means the author named the file exactly. A
237
+ // dotted name like `./child.play` or `./user.schema` resolves the way
238
+ // TypeScript resolves it: append source extensions, then try an index.
230
239
  candidates.push(
231
- ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`)),
240
+ ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),
232
241
  );
233
- } else if (['.js', '.jsx', '.mjs', '.cjs'].includes(explicitExtension)) {
234
- const stem = base.slice(0, -explicitExtension.length);
235
242
  candidates.push(
236
- ...SOURCE_EXTENSIONS.map((extension) => `${stem}${extension}`),
243
+ ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`)),
237
244
  );
238
245
  }
239
246
 
package/dist/cli/index.js CHANGED
@@ -1298,7 +1298,7 @@ var SDK_RELEASE = {
1298
1298
  // getters keep their established compatibility behavior.
1299
1299
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
1300
1300
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
1301
- version: "0.3.107",
1301
+ version: "0.3.109",
1302
1302
  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.",
1303
1303
  packageCapabilities: {
1304
1304
  updatePreferences: 1
@@ -16576,6 +16576,22 @@ var MAX_PLAY_BUNDLE_BYTES = 30 * 1024 * 1024;
16576
16576
  // ../plays/bundling/index.ts
16577
16577
  var PLAY_BUNDLE_CACHE_NAMESPACE = "deepline-play-artifacts-docflow-jsdoc";
16578
16578
  var PLAY_ARTIFACT_CACHE_DIR = (0, import_node_path11.join)((0, import_node_os7.tmpdir)(), PLAY_BUNDLE_CACHE_NAMESPACE);
16579
+ var SOURCE_EXTENSIONS = [
16580
+ ".ts",
16581
+ ".tsx",
16582
+ ".mts",
16583
+ ".cts",
16584
+ ".js",
16585
+ ".jsx",
16586
+ ".mjs",
16587
+ ".cjs",
16588
+ ".json"
16589
+ ];
16590
+ var TEXT_IMPORT_EXTENSIONS = /* @__PURE__ */ new Set([".md", ".txt"]);
16591
+ var EXPLICIT_IMPORT_EXTENSIONS = /* @__PURE__ */ new Set([
16592
+ ...SOURCE_EXTENSIONS,
16593
+ ...TEXT_IMPORT_EXTENSIONS
16594
+ ]);
16579
16595
  var NODE_BUILTIN_SET = new Set(
16580
16596
  import_node_module.builtinModules.flatMap(
16581
16597
  (name) => name.startsWith("node:") ? [name, name.slice(5)] : [name, `node:${name}`]
@@ -17177,6 +17193,22 @@ function resolveEnabledExecutionProfile(override) {
17177
17193
  var import_node_crypto5 = require("crypto");
17178
17194
  var import_promises4 = require("fs/promises");
17179
17195
  var import_node_path12 = require("path");
17196
+ var SOURCE_EXTENSIONS2 = [
17197
+ ".ts",
17198
+ ".tsx",
17199
+ ".mts",
17200
+ ".cts",
17201
+ ".js",
17202
+ ".jsx",
17203
+ ".mjs",
17204
+ ".cjs",
17205
+ ".json"
17206
+ ];
17207
+ var TEXT_IMPORT_EXTENSIONS2 = /* @__PURE__ */ new Set([".md", ".txt"]);
17208
+ var EXPLICIT_IMPORT_EXTENSIONS2 = /* @__PURE__ */ new Set([
17209
+ ...SOURCE_EXTENSIONS2,
17210
+ ...TEXT_IMPORT_EXTENSIONS2
17211
+ ]);
17180
17212
 
17181
17213
  // src/plays/bundle-play-file.ts
17182
17214
  var import_meta = {};
@@ -1271,7 +1271,7 @@ var SDK_RELEASE = {
1271
1271
  // getters keep their established compatibility behavior.
1272
1272
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
1273
1273
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
1274
- version: "0.3.107",
1274
+ version: "0.3.109",
1275
1275
  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.",
1276
1276
  packageCapabilities: {
1277
1277
  updatePreferences: 1
@@ -16619,6 +16619,22 @@ var MAX_PLAY_BUNDLE_BYTES = 30 * 1024 * 1024;
16619
16619
  // ../plays/bundling/index.ts
16620
16620
  var PLAY_BUNDLE_CACHE_NAMESPACE = "deepline-play-artifacts-docflow-jsdoc";
16621
16621
  var PLAY_ARTIFACT_CACHE_DIR = join7(tmpdir2(), PLAY_BUNDLE_CACHE_NAMESPACE);
16622
+ var SOURCE_EXTENSIONS = [
16623
+ ".ts",
16624
+ ".tsx",
16625
+ ".mts",
16626
+ ".cts",
16627
+ ".js",
16628
+ ".jsx",
16629
+ ".mjs",
16630
+ ".cjs",
16631
+ ".json"
16632
+ ];
16633
+ var TEXT_IMPORT_EXTENSIONS = /* @__PURE__ */ new Set([".md", ".txt"]);
16634
+ var EXPLICIT_IMPORT_EXTENSIONS = /* @__PURE__ */ new Set([
16635
+ ...SOURCE_EXTENSIONS,
16636
+ ...TEXT_IMPORT_EXTENSIONS
16637
+ ]);
16622
16638
  var NODE_BUILTIN_SET = new Set(
16623
16639
  builtinModules.flatMap(
16624
16640
  (name) => name.startsWith("node:") ? [name, name.slice(5)] : [name, `node:${name}`]
@@ -17228,6 +17244,22 @@ import {
17228
17244
  relative as relative3,
17229
17245
  resolve as resolve9
17230
17246
  } from "path";
17247
+ var SOURCE_EXTENSIONS2 = [
17248
+ ".ts",
17249
+ ".tsx",
17250
+ ".mts",
17251
+ ".cts",
17252
+ ".js",
17253
+ ".jsx",
17254
+ ".mjs",
17255
+ ".cjs",
17256
+ ".json"
17257
+ ];
17258
+ var TEXT_IMPORT_EXTENSIONS2 = /* @__PURE__ */ new Set([".md", ".txt"]);
17259
+ var EXPLICIT_IMPORT_EXTENSIONS2 = /* @__PURE__ */ new Set([
17260
+ ...SOURCE_EXTENSIONS2,
17261
+ ...TEXT_IMPORT_EXTENSIONS2
17262
+ ]);
17231
17263
 
17232
17264
  // src/plays/bundle-play-file.ts
17233
17265
  var MODULE_DIR = dirname9(fileURLToPath(import.meta.url));
package/dist/index.js CHANGED
@@ -860,7 +860,7 @@ var SDK_RELEASE = {
860
860
  // getters keep their established compatibility behavior.
861
861
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
862
862
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
863
- version: "0.3.107",
863
+ version: "0.3.109",
864
864
  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.",
865
865
  packageCapabilities: {
866
866
  updatePreferences: 1
package/dist/index.mjs CHANGED
@@ -768,7 +768,7 @@ var SDK_RELEASE = {
768
768
  // getters keep their established compatibility behavior.
769
769
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
770
770
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
771
- version: "0.3.107",
771
+ version: "0.3.109",
772
772
  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.",
773
773
  packageCapabilities: {
774
774
  updatePreferences: 1
@@ -2897,6 +2897,10 @@ var SOURCE_EXTENSIONS = [
2897
2897
  ];
2898
2898
  var PLAY_SOURCE_FILE_PATTERN = /\.play\.(?:[cm]?[jt]sx?)$/i;
2899
2899
  var TEXT_IMPORT_EXTENSIONS = /* @__PURE__ */ new Set([".md", ".txt"]);
2900
+ var EXPLICIT_IMPORT_EXTENSIONS = /* @__PURE__ */ new Set([
2901
+ ...SOURCE_EXTENSIONS,
2902
+ ...TEXT_IMPORT_EXTENSIONS
2903
+ ]);
2900
2904
  var NODE_BUILTIN_SET = new Set(
2901
2905
  builtinModules.flatMap(
2902
2906
  (name) => name.startsWith("node:") ? [name, name.slice(5)] : [name, `node:${name}`]
@@ -3933,17 +3937,17 @@ async function resolveLocalImport(fromFile, specifier) {
3933
3937
  const base = isAbsolute(specifier) ? resolve(specifier) : resolve(dirname(fromFile), specifier);
3934
3938
  const candidates = [base];
3935
3939
  const explicitExtension = extname(base).toLowerCase();
3936
- if (!explicitExtension) {
3940
+ if ([".js", ".jsx", ".mjs", ".cjs"].includes(explicitExtension)) {
3941
+ const stem = base.slice(0, -explicitExtension.length);
3937
3942
  candidates.push(
3938
- ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`)
3943
+ ...SOURCE_EXTENSIONS.map((extension) => `${stem}${extension}`)
3939
3944
  );
3945
+ } else if (!EXPLICIT_IMPORT_EXTENSIONS.has(explicitExtension)) {
3940
3946
  candidates.push(
3941
- ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`))
3947
+ ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`)
3942
3948
  );
3943
- } else if ([".js", ".jsx", ".mjs", ".cjs"].includes(explicitExtension)) {
3944
- const stem = base.slice(0, -explicitExtension.length);
3945
3949
  candidates.push(
3946
- ...SOURCE_EXTENSIONS.map((extension) => `${stem}${extension}`)
3950
+ ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`))
3947
3951
  );
3948
3952
  }
3949
3953
  for (const candidate of candidates) {
@@ -4547,6 +4551,10 @@ var SOURCE_EXTENSIONS2 = [
4547
4551
  ".json"
4548
4552
  ];
4549
4553
  var TEXT_IMPORT_EXTENSIONS2 = /* @__PURE__ */ new Set([".md", ".txt"]);
4554
+ var EXPLICIT_IMPORT_EXTENSIONS2 = /* @__PURE__ */ new Set([
4555
+ ...SOURCE_EXTENSIONS2,
4556
+ ...TEXT_IMPORT_EXTENSIONS2
4557
+ ]);
4550
4558
  function isTextImportFile2(filePath) {
4551
4559
  return TEXT_IMPORT_EXTENSIONS2.has(extname2(filePath));
4552
4560
  }
@@ -4760,17 +4768,17 @@ async function resolveLocalImport2(fromFile, specifier) {
4760
4768
  const base = isAbsolute2(specifier) ? resolve2(specifier) : resolve2(dirname2(fromFile), specifier);
4761
4769
  const candidates = [base];
4762
4770
  const explicitExtension = extname2(base).toLowerCase();
4763
- if (!explicitExtension) {
4771
+ if ([".js", ".jsx", ".mjs", ".cjs"].includes(explicitExtension)) {
4772
+ const stem = base.slice(0, -explicitExtension.length);
4764
4773
  candidates.push(
4765
- ...SOURCE_EXTENSIONS2.map((extension) => `${base}${extension}`)
4774
+ ...SOURCE_EXTENSIONS2.map((extension) => `${stem}${extension}`)
4766
4775
  );
4776
+ } else if (!EXPLICIT_IMPORT_EXTENSIONS2.has(explicitExtension)) {
4767
4777
  candidates.push(
4768
- ...SOURCE_EXTENSIONS2.map((extension) => join2(base, `index${extension}`))
4778
+ ...SOURCE_EXTENSIONS2.map((extension) => `${base}${extension}`)
4769
4779
  );
4770
- } else if ([".js", ".jsx", ".mjs", ".cjs"].includes(explicitExtension)) {
4771
- const stem = base.slice(0, -explicitExtension.length);
4772
4780
  candidates.push(
4773
- ...SOURCE_EXTENSIONS2.map((extension) => `${stem}${extension}`)
4781
+ ...SOURCE_EXTENSIONS2.map((extension) => join2(base, `index${extension}`))
4774
4782
  );
4775
4783
  }
4776
4784
  for (const candidate of candidates) {
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.107";
152
+ readonly version: "0.3.109";
153
153
  readonly 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.";
154
154
  readonly packageCapabilities: {
155
155
  readonly updatePreferences: 1;
package/dist/release.d.ts CHANGED
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.107";
152
+ readonly version: "0.3.109";
153
153
  readonly 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.";
154
154
  readonly packageCapabilities: {
155
155
  readonly updatePreferences: 1;
package/dist/release.js CHANGED
@@ -74,7 +74,7 @@ var SDK_RELEASE = {
74
74
  // getters keep their established compatibility behavior.
75
75
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
76
76
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
77
- version: "0.3.107",
77
+ version: "0.3.109",
78
78
  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.",
79
79
  packageCapabilities: {
80
80
  updatePreferences: 1
package/dist/release.mjs CHANGED
@@ -48,7 +48,7 @@ var SDK_RELEASE = {
48
48
  // getters keep their established compatibility behavior.
49
49
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
50
50
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
51
- version: "0.3.107",
51
+ version: "0.3.109",
52
52
  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.",
53
53
  packageCapabilities: {
54
54
  updatePreferences: 1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.3.107",
3
+ "version": "0.3.109",
4
4
  "description": "GTM data CLI and TypeScript SDK for coding agents",
5
5
  "license": "MIT",
6
6
  "homepage": "https://code.deepline.com",