deepline 0.3.392 → 0.3.394

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/bundling-sources/sdk/src/client.ts +156 -24
  2. package/dist/bundling-sources/sdk/src/compat.ts +9 -0
  3. package/dist/bundling-sources/sdk/src/http.ts +5 -1
  4. package/dist/bundling-sources/sdk/src/index.ts +5 -0
  5. package/dist/bundling-sources/sdk/src/plays/run-request.ts +182 -6
  6. package/dist/bundling-sources/sdk/src/release.ts +4 -1
  7. package/dist/bundling-sources/sdk/src/types.ts +13 -0
  8. package/dist/bundling-sources/shared_libs/integration-contracts/request-warnings.ts +64 -0
  9. package/dist/bundling-sources/shared_libs/play-data-plane/runtime-sheet-storage-contract.ts +315 -0
  10. package/dist/bundling-sources/shared_libs/play-runtime/async-operation.ts +41 -8
  11. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +895 -54
  12. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +41 -4
  13. package/dist/bundling-sources/shared_libs/play-runtime/durable-call-policy.ts +28 -0
  14. package/dist/bundling-sources/shared_libs/play-runtime/durable-invocation-fence.ts +36 -0
  15. package/dist/bundling-sources/shared_libs/play-runtime/freshness-receipt-execution.ts +251 -0
  16. package/dist/bundling-sources/shared_libs/play-runtime/map-execution-frame.ts +11 -3
  17. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/gateway-adapter.ts +1 -0
  18. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-semantics.ts +30 -1
  19. package/dist/bundling-sources/shared_libs/play-runtime/run-identity.ts +26 -0
  20. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +168 -10
  21. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +252 -10
  22. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +92 -58
  23. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-pool.ts +7 -1
  24. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +30 -7
  25. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +1161 -316
  26. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts +28 -15
  27. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +24 -3
  28. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +32 -0
  29. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +103 -23
  30. package/dist/bundling-sources/shared_libs/plays/core.ts +1 -1
  31. package/dist/bundling-sources/shared_libs/plays/dataset.ts +172 -79
  32. package/dist/bundling-sources/shared_libs/plays/static-pipeline.ts +173 -1
  33. package/dist/bundling-sources/shared_libs/plays/tool-result-types.ts +18 -0
  34. package/dist/cli/auth-IHKISLJQ.js +39 -0
  35. package/dist/cli/{auth-6JSA2ZCW.mjs → auth-OSXDAVCF.mjs} +4 -4
  36. package/dist/cli/{billing-Q5BLQHIU.js → billing-EKLYOXUY.js} +101 -74
  37. package/dist/cli/{billing-MRRO643H.mjs → billing-ZNNKX3UR.mjs} +32 -5
  38. package/dist/cli/{chunk-4SFPVW7A.js → chunk-2MDDA7A4.js} +26 -26
  39. package/dist/cli/{chunk-JOFPQGXW.js → chunk-354JCXA2.js} +50 -50
  40. package/dist/cli/{chunk-7E66A24V.mjs → chunk-3HU47EGZ.mjs} +71 -9
  41. package/dist/cli/{chunk-DSWSEHRX.mjs → chunk-3HWALOL2.mjs} +1 -1
  42. package/dist/cli/{chunk-T7OKJ2T6.js → chunk-4P27AXEA.js} +73 -63
  43. package/dist/cli/{chunk-24VEN5PQ.mjs → chunk-5BB2RGAX.mjs} +190 -18
  44. package/dist/cli/{chunk-JSLPHFP7.js → chunk-6YAUMG27.js} +3 -2
  45. package/dist/cli/{chunk-MU6M3URX.mjs → chunk-BP33SIZF.mjs} +1 -1
  46. package/dist/cli/{chunk-WMS5U6YB.js → chunk-CS6RAIVY.js} +20 -19
  47. package/dist/cli/{chunk-CVLM3WMJ.js → chunk-E23BQ5SC.js} +242 -183
  48. package/dist/cli/{chunk-2GAHHSLB.mjs → chunk-FJGW5GXU.mjs} +3 -2
  49. package/dist/cli/{chunk-YN6YA7ZZ.mjs → chunk-JHIJIHFB.mjs} +79 -20
  50. package/dist/cli/{chunk-Q6EOHNRH.mjs → chunk-JI2B4RZP.mjs} +119 -6
  51. package/dist/cli/{chunk-5O4B6AUN.js → chunk-KB4SDX5S.js} +71 -9
  52. package/dist/cli/{chunk-RV6ALZIX.js → chunk-KGNTKMRG.js} +32 -7
  53. package/dist/cli/{chunk-6DBOU7UH.js → chunk-KI635JN4.js} +176 -87
  54. package/dist/cli/{chunk-2FQG2HU4.js → chunk-KIUMEOM5.js} +8 -8
  55. package/dist/cli/{chunk-Y6VOGHF2.mjs → chunk-KZZC33PY.mjs} +0 -181
  56. package/dist/cli/{chunk-2Q3GEFL4.mjs → chunk-M57J2SK4.mjs} +2 -2
  57. package/dist/cli/{chunk-R3O2CZ4H.mjs → chunk-MFB2VKBO.mjs} +2 -2
  58. package/dist/cli/{chunk-QGKPTBRR.js → chunk-MH73HMPV.js} +3 -3
  59. package/dist/cli/{chunk-BB3FNYFY.js → chunk-MLPU5SMZ.js} +2 -2
  60. package/dist/cli/{chunk-2G7DXFHI.mjs → chunk-NR3DFKNF.mjs} +27 -2
  61. package/dist/cli/{chunk-EY7RFC6A.js → chunk-QIQBYKLB.js} +15 -15
  62. package/dist/cli/{chunk-RIV2GS5E.js → chunk-RBJYWRCF.js} +638 -466
  63. package/dist/cli/{chunk-3VN4FTE3.js → chunk-RDXFGPJU.js} +1 -182
  64. package/dist/cli/{chunk-YAZCDBXX.mjs → chunk-TJI2EN6K.mjs} +3 -2
  65. package/dist/cli/chunk-UBKA33KY.mjs +310 -0
  66. package/dist/cli/{chunk-PAIMOGCM.js → chunk-UHNDVD3P.js} +125 -12
  67. package/dist/cli/{chunk-4TCT77UF.js → chunk-URWF7NGQ.js} +6 -1
  68. package/dist/cli/{chunk-2QLML6G4.mjs → chunk-UXFSWG3Q.mjs} +4 -4
  69. package/dist/cli/{chunk-UCKJQG25.js → chunk-VK6FYZLP.js} +8 -8
  70. package/dist/cli/{chunk-ZTACINO5.mjs → chunk-X63FDZJZ.mjs} +13 -3
  71. package/dist/cli/chunk-XDVT3GOM.js +310 -0
  72. package/dist/cli/{chunk-A3APGZFP.mjs → chunk-XRQ2AQL7.mjs} +2 -2
  73. package/dist/cli/{chunk-3FV4GBRK.mjs → chunk-XXUDVEXK.mjs} +97 -8
  74. package/dist/cli/{chunk-PQSA443V.mjs → chunk-ZI2ZNDJK.mjs} +6 -1
  75. package/dist/cli/{chunk-HGYBEAQP.mjs → chunk-ZYBGA4AR.mjs} +3 -3
  76. package/dist/cli/command-docs.js +2 -2
  77. package/dist/cli/command-docs.mjs +1 -1
  78. package/dist/cli/{csv-E4QGUIGI.mjs → csv-5AXRB35H.mjs} +3 -3
  79. package/dist/cli/{csv-26U5T24Z.js → csv-LU7O75WE.js} +12 -12
  80. package/dist/cli/{db-JTRJIAQW.mjs → db-7XP5UWEW.mjs} +6 -5
  81. package/dist/cli/{db-QHBFLMVL.js → db-F7YTFKVM.js} +31 -30
  82. package/dist/cli/{describe-FDV2V74F.js → describe-FRH32RDV.js} +24 -23
  83. package/dist/cli/{describe-E3DE3ZK3.mjs → describe-K4ES5LIL.mjs} +17 -16
  84. package/dist/cli/{executions-B3GTNPRE.mjs → executions-IEHEHJUO.mjs} +6 -5
  85. package/dist/cli/{executions-VZYOGVQY.js → executions-RZV5XPT2.js} +8 -7
  86. package/dist/cli/{feedback-CR55FJA2.js → feedback-3P65QTX3.js} +7 -7
  87. package/dist/cli/{feedback-4CEBR3OV.mjs → feedback-FPUVZBAN.mjs} +3 -3
  88. package/dist/cli/{git-NM2PHHZ4.mjs → git-GLVVP7TY.mjs} +4 -4
  89. package/dist/cli/git-MFFAWVVX.js +23 -0
  90. package/dist/cli/index.js +100 -96
  91. package/dist/cli/index.mjs +47 -43
  92. package/dist/cli/{legacy-noops-A7MSW5ND.mjs → legacy-noops-3MOI6NBM.mjs} +4 -4
  93. package/dist/cli/{legacy-noops-ZUA4YFIH.js → legacy-noops-XKSGZR7Q.js} +7 -7
  94. package/dist/cli/{monitors-NVPRQYP3.mjs → monitors-FTBGNEFG.mjs} +6 -5
  95. package/dist/cli/{monitors-ZE3TLZ4H.js → monitors-NZ2DYNST.js} +87 -86
  96. package/dist/cli/{org-U7A6DV5D.js → org-MCKDQXIV.js} +66 -65
  97. package/dist/cli/{org-KUBILNQV.mjs → org-V2J5RBCN.mjs} +6 -5
  98. package/dist/cli/{play-HRDXQ4QE.mjs → play-AJFGME3B.mjs} +11 -10
  99. package/dist/cli/play-WLSN2EO2.js +158 -0
  100. package/dist/cli/{providers-VD6YTVQZ.js → providers-2JEZ2264.js} +9 -8
  101. package/dist/cli/{providers-OHIWI453.mjs → providers-I6RQJZFZ.mjs} +6 -5
  102. package/dist/cli/{quickstart-UBV2FONF.mjs → quickstart-BIDQDMO4.mjs} +3 -3
  103. package/dist/cli/{quickstart-ETTCWPA4.js → quickstart-GJ2RPDU3.js} +5 -5
  104. package/dist/cli/run-identity-G257GQED.js +25 -0
  105. package/dist/cli/run-identity-MRNCEGV2.mjs +25 -0
  106. package/dist/cli/search-5VN4YD4I.js +27 -0
  107. package/dist/cli/{search-F44IZRT7.mjs → search-ELRXFWG5.mjs} +7 -6
  108. package/dist/cli/{secrets-CAEMRORF.js → secrets-53IT6VXD.js} +15 -14
  109. package/dist/cli/{secrets-R6XOJZKU.mjs → secrets-SQXGZXIC.mjs} +6 -5
  110. package/dist/cli/{sessions-RLN6UQS3.mjs → sessions-2X5QF7SL.mjs} +4 -4
  111. package/dist/cli/{sessions-6GC7OFTT.js → sessions-CAV5M77Y.js} +5 -5
  112. package/dist/cli/{settings-DPNVUAV2.js → settings-532WNAZO.js} +76 -75
  113. package/dist/cli/{settings-KIPAMRPP.mjs → settings-7P67VGCJ.mjs} +9 -8
  114. package/dist/cli/{setup-DTL3L5SG.js → setup-6L2VSUWJ.js} +41 -41
  115. package/dist/cli/{setup-TU2F7PU5.mjs → setup-QGGBV2LE.mjs} +6 -6
  116. package/dist/cli/{skills-UV5MYJ46.mjs → skills-3FE62WBG.mjs} +4 -4
  117. package/dist/cli/skills-S6NPZAN7.js +28 -0
  118. package/dist/cli/tools-647RLXQS.js +41 -0
  119. package/dist/cli/{tools-QRRNDCQ7.mjs → tools-DMR25DEF.mjs} +10 -9
  120. package/dist/cli/{update-4426TF35.mjs → update-6RZMHJZP.mjs} +6 -6
  121. package/dist/cli/update-WVTSC3EM.js +28 -0
  122. package/dist/cli/{workflow-N4U5VLZ3.mjs → workflow-L2DQRE6R.mjs} +7 -6
  123. package/dist/cli/{workflow-HNLOVISB.js → workflow-TX4F2PIX.js} +17 -16
  124. package/dist/{client-e6Qh5ZIg.d.mts → client-BktIPdIj.d.mts} +153 -4
  125. package/dist/{client-Uxuy-xQ2.d.ts → client-C3O1Ipf3.d.ts} +153 -4
  126. package/dist/{compiler-manifest-CY2v8ab0.d.ts → compiler-manifest-DLxUY5kI.d.mts} +124 -10
  127. package/dist/{compiler-manifest-CY2v8ab0.d.mts → compiler-manifest-DLxUY5kI.d.ts} +124 -10
  128. package/dist/{index-BZ6uzZJl.d.ts → index-B_GM9E3q.d.ts} +1 -1
  129. package/dist/{index-B9fBZH1g.d.mts → index-SCb0NvDb.d.mts} +1 -1
  130. package/dist/index.d.mts +5 -5
  131. package/dist/index.d.ts +5 -5
  132. package/dist/index.js +120 -29
  133. package/dist/index.mjs +111 -20
  134. package/dist/install-integrity.json +94 -88
  135. package/dist/plays/bundle-play-file.d.mts +3 -3
  136. package/dist/plays/bundle-play-file.d.ts +3 -3
  137. package/dist/plays/bundle-play-file.mjs +2 -2
  138. package/dist/plays/run-request.d.mts +2 -2
  139. package/dist/plays/run-request.d.ts +2 -2
  140. package/dist/plays/run-request.js +5 -2
  141. package/dist/plays/run-request.mjs +4 -1
  142. package/dist/release.d.mts +4 -1
  143. package/dist/release.d.ts +4 -1
  144. package/dist/release.js +2 -2
  145. package/dist/release.mjs +1 -1
  146. package/package.json +1 -1
  147. package/dist/cli/auth-67TAELQL.js +0 -39
  148. package/dist/cli/git-I5JTK6YU.js +0 -23
  149. package/dist/cli/play-A2V7YDU7.js +0 -157
  150. package/dist/cli/search-WWXMBVPH.js +0 -26
  151. package/dist/cli/skills-SWOSEZLB.js +0 -28
  152. package/dist/cli/tools-IL2YCDQ6.js +0 -40
  153. package/dist/cli/update-BERDPEYR.js +0 -28
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
 
5
+ var _chunkGEJDBXXMjs = require('./cli/chunk-GEJDBXXM.js');
5
6
 
6
7
 
7
8
 
@@ -12,27 +13,28 @@
12
13
 
13
14
 
14
15
 
15
- var _chunk3VN4FTE3js = require('./cli/chunk-3VN4FTE3.js');
16
16
 
17
+ var _chunkRDXFGPJUjs = require('./cli/chunk-RDXFGPJU.js');
17
18
 
18
19
 
19
- var _chunkGEJDBXXMjs = require('./cli/chunk-GEJDBXXM.js');
20
+ var _chunkKB4SDX5Sjs = require('./cli/chunk-KB4SDX5S.js');
20
21
 
21
22
 
22
- var _chunk5O4B6AUNjs = require('./cli/chunk-5O4B6AUN.js');
23
23
 
24
24
 
25
25
 
26
26
 
27
27
 
28
28
 
29
+ var _chunkE23BQ5SCjs = require('./cli/chunk-E23BQ5SC.js');
29
30
 
30
31
 
31
- var _chunkCVLM3WMJjs = require('./cli/chunk-CVLM3WMJ.js');
32
+ var _chunkS6R3OX7Bjs = require('./cli/chunk-S6R3OX7B.js');
33
+ require('./cli/chunk-UHNDVD3P.js');
32
34
 
33
35
 
34
- var _chunkS6R3OX7Bjs = require('./cli/chunk-S6R3OX7B.js');
35
- require('./cli/chunk-PAIMOGCM.js');
36
+
37
+ var _chunkXDVT3GOMjs = require('./cli/chunk-XDVT3GOM.js');
36
38
 
37
39
 
38
40
 
@@ -62,7 +64,7 @@ var _chunkIF75RD6Ujs = require('./cli/chunk-IF75RD6U.js');
62
64
 
63
65
 
64
66
 
65
- var _chunkWMS5U6YBjs = require('./cli/chunk-WMS5U6YB.js');
67
+ var _chunkCS6RAIVYjs = require('./cli/chunk-CS6RAIVY.js');
66
68
  require('./cli/chunk-XNYIZMNQ.js');
67
69
 
68
70
 
@@ -72,7 +74,7 @@ require('./cli/chunk-XNYIZMNQ.js');
72
74
 
73
75
 
74
76
  var _chunk7P5AA3SNjs = require('./cli/chunk-7P5AA3SN.js');
75
- require('./cli/chunk-JSLPHFP7.js');
77
+ require('./cli/chunk-6YAUMG27.js');
76
78
  require('./cli/chunk-OG64RBAC.js');
77
79
  require('./cli/chunk-COGTRVWW.js');
78
80
 
@@ -80,6 +82,54 @@ require('./cli/chunk-COGTRVWW.js');
80
82
  var PLAY_DATASET_BRAND = Symbol.for("deepline.play.dataset");
81
83
  var NODE_INSPECT_CUSTOM = Symbol.for("nodejs.util.inspect.custom");
82
84
  var residentRowsByDataset = /* @__PURE__ */ new WeakMap();
85
+ var sourceRowIdentityByRow = /* @__PURE__ */ new WeakMap();
86
+ var sourceRowIdentitiesByRows = /* @__PURE__ */ new WeakMap();
87
+ var sourceOccurrencesByDataset = /* @__PURE__ */ new WeakMap();
88
+ function setPlayDatasetSourceRowIdentity(row, identity) {
89
+ if (row && typeof row === "object") sourceRowIdentityByRow.set(row, identity);
90
+ return row;
91
+ }
92
+ function getPlayDatasetSourceRowIdentity(row) {
93
+ return row && typeof row === "object" ? sourceRowIdentityByRow.get(row) : void 0;
94
+ }
95
+ function getPlayDatasetSourceRowIdentityAt(rows, index) {
96
+ const identities = sourceRowIdentitiesByRows.get(rows);
97
+ return identities ? identities[index] : getPlayDatasetSourceRowIdentity(rows[index]);
98
+ }
99
+ function copySourceOccurrenceToMappedValue(identity, mapped) {
100
+ if (!identity || !mapped || typeof mapped !== "object") return mapped;
101
+ const prototype = Object.getPrototypeOf(mapped);
102
+ const occurrence = Array.isArray(mapped) ? Object.defineProperties([], Object.getOwnPropertyDescriptors(mapped)) : prototype === Object.prototype || prototype === null ? Object.create(prototype, Object.getOwnPropertyDescriptors(mapped)) : mapped;
103
+ return setPlayDatasetSourceRowIdentity(occurrence, identity);
104
+ }
105
+ async function* iterateSourceOccurrences(input) {
106
+ if (isPlayDataset(input)) {
107
+ const occurrences = sourceOccurrencesByDataset.get(input);
108
+ if (occurrences) {
109
+ yield* occurrences();
110
+ return;
111
+ }
112
+ for await (const row of input)
113
+ yield { row, sourceIdentity: getPlayDatasetSourceRowIdentity(row) };
114
+ return;
115
+ }
116
+ if (Array.isArray(input)) {
117
+ for (let index = 0; index < input.length; index += 1) {
118
+ yield {
119
+ row: input[index],
120
+ sourceIdentity: getPlayDatasetSourceRowIdentityAt(input, index)
121
+ };
122
+ }
123
+ return;
124
+ }
125
+ if (input != null && typeof input === "object" && Symbol.asyncIterator in input) {
126
+ for await (const row of input)
127
+ yield { row, sourceIdentity: getPlayDatasetSourceRowIdentity(row) };
128
+ return;
129
+ }
130
+ for (const row of input)
131
+ yield { row, sourceIdentity: getPlayDatasetSourceRowIdentity(row) };
132
+ }
83
133
  var DEFAULT_MATERIALIZE_LIMIT = 1e4;
84
134
  var PLAY_DATASET_EXECUTION_PAGE_BYTES = 64 * 1024 * 1024;
85
135
  var DATASET_UTF8_ENCODER = new TextEncoder();
@@ -272,7 +322,7 @@ function transformDatasetId(input) {
272
322
  }
273
323
  function createTransformedPlayDataset(source, transform, options) {
274
324
  const sourceLabel = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _5 => _5.sourceLabel]), () => ( `${_nullishCoalesce(_nullishCoalesce(source.sourceLabel, () => ( source.tableNamespace)), () => ( source.datasetId))}.${transform.kind}`));
275
- const iterate = async function* () {
325
+ const iterateOccurrences = async function* () {
276
326
  if (transform.kind === "slice") {
277
327
  const bounds = normalizeSliceBounds({
278
328
  start: transform.start,
@@ -280,10 +330,10 @@ function createTransformedPlayDataset(source, transform, options) {
280
330
  count: await source.count()
281
331
  });
282
332
  let index = 0;
283
- for await (const row of source) {
333
+ for await (const occurrence of iterateSourceOccurrences(source)) {
284
334
  if (index >= bounds.end) break;
285
335
  if (index >= bounds.start) {
286
- yield row;
336
+ yield occurrence;
287
337
  }
288
338
  index += 1;
289
339
  }
@@ -291,25 +341,39 @@ function createTransformedPlayDataset(source, transform, options) {
291
341
  }
292
342
  let inputIndex = 0;
293
343
  let outputIndex = 0;
294
- for await (const row of source) {
344
+ for await (const { row, sourceIdentity } of iterateSourceOccurrences(
345
+ source
346
+ )) {
295
347
  if (transform.kind === "filter") {
296
348
  if (await transform.predicate(row, inputIndex)) {
297
- yield row;
349
+ yield { row, sourceIdentity };
298
350
  outputIndex += 1;
299
351
  }
300
352
  } else {
301
- yield await transform.mapper(row, outputIndex);
353
+ yield {
354
+ row: copySourceOccurrenceToMappedValue(
355
+ sourceIdentity,
356
+ await transform.mapper(row, outputIndex)
357
+ ),
358
+ sourceIdentity
359
+ };
302
360
  outputIndex += 1;
303
361
  }
304
362
  inputIndex += 1;
305
363
  }
306
364
  };
365
+ const iterate = async function* () {
366
+ for await (const { row } of iterateOccurrences()) yield row;
367
+ };
307
368
  const collect = async (limit) => {
308
369
  const rows = [];
370
+ const identities = [];
371
+ sourceRowIdentitiesByRows.set(rows, identities);
309
372
  const boundedLimit = limit === void 0 ? void 0 : Math.max(0, Math.floor(limit));
310
373
  if (boundedLimit === 0) return rows;
311
- for await (const row of iterate()) {
374
+ for await (const { row, sourceIdentity } of iterateOccurrences()) {
312
375
  rows.push(row);
376
+ identities.push(sourceIdentity);
313
377
  if (boundedLimit !== void 0 && rows.length >= boundedLimit) break;
314
378
  }
315
379
  return rows;
@@ -331,7 +395,7 @@ function createTransformedPlayDataset(source, transform, options) {
331
395
  }
332
396
  return total;
333
397
  };
334
- return createDeferredPlayDataset({
398
+ const dataset = createDeferredPlayDataset({
335
399
  datasetKind: source.datasetKind,
336
400
  datasetId: transformDatasetId({
337
401
  source,
@@ -355,6 +419,11 @@ function createTransformedPlayDataset(source, transform, options) {
355
419
  })
356
420
  }
357
421
  });
422
+ sourceOccurrencesByDataset.set(
423
+ dataset,
424
+ iterateOccurrences
425
+ );
426
+ return dataset;
358
427
  }
359
428
  function createDeferredPlayDataset(input) {
360
429
  if (input.residentRows && input.knownCount !== null && input.residentRows.length !== (_nullishCoalesce(input.knownCount, () => ( input.count)))) {
@@ -669,7 +738,10 @@ function toV2RawToolOutputPathPreservingProviderData(path) {
669
738
  return rawPath ? `toolResponse.raw.${rawPath}` : "toolResponse.raw";
670
739
  }
671
740
  function candidateResultPaths(path) {
741
+ const normalized = String(path || "").trim().replace(/^\./, "");
742
+ const providerPath = normalized.startsWith("result.data.") ? `toolResponse.raw.${normalized.slice("result.data.".length)}` : normalized === "result.data" ? "toolResponse.raw" : "";
672
743
  const candidates = [
744
+ providerPath,
673
745
  normalizeResultPath(path),
674
746
  toV2RawToolOutputPathPreservingProviderData(path)
675
747
  ];
@@ -725,8 +797,27 @@ function acceptedTargetValue(target, value) {
725
797
  if (target && STRING_CONTACT_TARGETS.has(target) && typeof value === "boolean") {
726
798
  return void 0;
727
799
  }
800
+ if (target === "email") return _nullishCoalesce(emailTargetValue(value), () => ( void 0));
728
801
  return isMeaningfulValue(value) ? value : void 0;
729
802
  }
803
+ function emailTargetValue(value) {
804
+ if (typeof value === "string") {
805
+ const email = value.trim();
806
+ return /^[^\s@*]+@[^\s@*]+\.[^\s@*]+$/.test(email) ? email : null;
807
+ }
808
+ if (Array.isArray(value)) {
809
+ for (const entry of value) {
810
+ const email = emailTargetValue(entry);
811
+ if (email) return email;
812
+ }
813
+ } else if (isRecord(value)) {
814
+ for (const key of ["email", "email_address", "address", "value"]) {
815
+ const email = emailTargetValue(value[key]);
816
+ if (email) return email;
817
+ }
818
+ }
819
+ return null;
820
+ }
730
821
  function getFirstMeaningfulValueAtPath(root, path, target) {
731
822
  for (const entry of valuesAtSegments(root, parsePath(path))) {
732
823
  const value = acceptedTargetValue(target, entry.value);
@@ -820,7 +911,7 @@ function buildEmailStatusTarget(result, descriptor) {
820
911
  if (!firstPath) return null;
821
912
  return {
822
913
  path: firstPath,
823
- value: _chunk3VN4FTE3js.buildEmailStatus.call(void 0, { config, values })
914
+ value: _chunkRDXFGPJUjs.buildEmailStatus.call(void 0, { config, values })
824
915
  };
825
916
  }
826
917
  function findFirstTargetByKey(result, target, depth = 0, path = []) {
@@ -896,7 +987,7 @@ function normalizeJobChangeStatus(value) {
896
987
  if (["false", "no", "same", "no_change"].includes(normalized))
897
988
  return "no_change";
898
989
  if (["left", "left_company"].includes(normalized)) return "left_company";
899
- if (_chunk3VN4FTE3js.JOB_CHANGE_STATUS_VALUES.includes(normalized)) {
990
+ if (_chunkRDXFGPJUjs.JOB_CHANGE_STATUS_VALUES.includes(normalized)) {
900
991
  return normalized;
901
992
  }
902
993
  return "unknown";
@@ -1185,7 +1276,7 @@ function buildListAccessors(resolved, lists, toolId, executionDiscriminator) {
1185
1276
  metadata.path,
1186
1277
  datasetDiscriminator
1187
1278
  ),
1188
- datasetId: `tool-list:${_chunk3VN4FTE3js.sha256Hex.call(void 0,
1279
+ datasetId: `tool-list:${_chunkXDVT3GOMjs.sha256Hex.call(void 0,
1189
1280
  `${toolId}:${metadata.path}:${datasetDiscriminator}`
1190
1281
  )}`
1191
1282
  });
@@ -1206,7 +1297,7 @@ function buildListAccessors(resolved, lists, toolId, executionDiscriminator) {
1206
1297
  }
1207
1298
  function listRowsFingerprint(rows) {
1208
1299
  try {
1209
- return _chunk3VN4FTE3js.sha256Hex.call(void 0,
1300
+ return _chunkXDVT3GOMjs.sha256Hex.call(void 0,
1210
1301
  JSON.stringify(
1211
1302
  {
1212
1303
  count: rows.length,
@@ -1216,23 +1307,23 @@ function listRowsFingerprint(rows) {
1216
1307
  )
1217
1308
  ).slice(0, 12);
1218
1309
  } catch (e) {
1219
- return _chunk3VN4FTE3js.sha256Hex.call(void 0, String(rows.length)).slice(0, 12);
1310
+ return _chunkXDVT3GOMjs.sha256Hex.call(void 0, String(rows.length)).slice(0, 12);
1220
1311
  }
1221
1312
  }
1222
1313
  function listTableNamespace(toolId, name, path, discriminator) {
1223
- const raw = `${toolId}_${name || path || "rows"}_${_chunk3VN4FTE3js.sha256Hex.call(void 0, discriminator).slice(0, 10)}`;
1314
+ const raw = `${toolId}_${name || path || "rows"}_${_chunkXDVT3GOMjs.sha256Hex.call(void 0, discriminator).slice(0, 10)}`;
1224
1315
  try {
1225
- return _chunk3VN4FTE3js.normalizeTableNamespace.call(void 0, raw);
1316
+ return _chunkXDVT3GOMjs.normalizeTableNamespace.call(void 0, raw);
1226
1317
  } catch (e2) {
1227
- const hash = _chunk3VN4FTE3js.sha256Hex.call(void 0, raw).slice(0, 10);
1318
+ const hash = _chunkXDVT3GOMjs.sha256Hex.call(void 0, raw).slice(0, 10);
1228
1319
  const leaf = name || path.split(".").filter(Boolean).at(-1) || "rows";
1229
1320
  let prefix = "rows";
1230
1321
  try {
1231
- prefix = _chunk3VN4FTE3js.normalizeTableNamespace.call(void 0, leaf).slice(0, 52) || "rows";
1322
+ prefix = _chunkXDVT3GOMjs.normalizeTableNamespace.call(void 0, leaf).slice(0, 52) || "rows";
1232
1323
  } catch (e3) {
1233
1324
  prefix = "rows";
1234
1325
  }
1235
- return _chunk3VN4FTE3js.normalizeTableNamespace.call(void 0, `${prefix}_${hash}`);
1326
+ return _chunkXDVT3GOMjs.normalizeTableNamespace.call(void 0, `${prefix}_${hash}`);
1236
1327
  }
1237
1328
  }
1238
1329
  function createToolExecuteResult(input) {
@@ -1613,7 +1704,7 @@ var DeeplineContext = class {
1613
1704
  * @param options - Optional SDK client configuration.
1614
1705
  */
1615
1706
  constructor(options) {
1616
- this.client = new (0, _chunkCVLM3WMJjs.DeeplineClient)(options);
1707
+ this.client = new (0, _chunkE23BQ5SCjs.DeeplineClient)(options);
1617
1708
  }
1618
1709
  /**
1619
1710
  * Tool operations namespace.
@@ -2098,7 +2189,7 @@ function definePlay(nameOrConfig, maybeFn, maybeBindings) {
2098
2189
  writable: false
2099
2190
  });
2100
2191
  const handle = createNamedPlayHandle(
2101
- () => new (0, _chunkCVLM3WMJjs.DeeplineClient)(),
2192
+ () => new (0, _chunkE23BQ5SCjs.DeeplineClient)(),
2102
2193
  name
2103
2194
  );
2104
2195
  for (const key of [
@@ -2258,4 +2349,4 @@ var DEEPLINE_TOOL_CATEGORIES = [
2258
2349
 
2259
2350
 
2260
2351
 
2261
- exports.AuthError = _chunkWMS5U6YBjs.AuthError; exports.ConfigError = _chunkWMS5U6YBjs.ConfigError; exports.CtxFetchHttpError = _chunk5O4B6AUNjs.CtxFetchHttpError; exports.CustomerDbQueryOutcomeUnknownError = _chunkWMS5U6YBjs.CustomerDbQueryOutcomeUnknownError; exports.DEEPLINE_EXTRACTOR_TARGETS = _chunk3VN4FTE3js.DEEPLINE_EXTRACTOR_TARGETS; exports.DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS = _chunk3VN4FTE3js.DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS; exports.DEEPLINE_TOOL_CATEGORIES = DEEPLINE_TOOL_CATEGORIES; exports.Deepline = Deepline; exports.DeeplineClient = _chunkCVLM3WMJjs.DeeplineClient; exports.DeeplineContext = DeeplineContext; exports.DeeplineError = _chunk7P5AA3SNjs.DeeplineError; exports.JOB_CHANGE_STATUS_VALUES = _chunk3VN4FTE3js.JOB_CHANGE_STATUS_VALUES; exports.MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG = _chunkC374C22Yjs.MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG; exports.MONITOR_FLEET_AUTHORING_CONTRACT_EDITION = _chunkC374C22Yjs.MONITOR_FLEET_AUTHORING_CONTRACT_EDITION; exports.MONITOR_FLEET_DOCUMENTATION = _chunkC374C22Yjs.MONITOR_FLEET_DOCUMENTATION; exports.MONITOR_FLEET_FRONTIER_MAX_ROWS = _chunkC374C22Yjs.MONITOR_FLEET_FRONTIER_MAX_ROWS; exports.MONITOR_FLEET_MAX_MEMBERS = _chunkC374C22Yjs.MONITOR_FLEET_MAX_MEMBERS; exports.MONITOR_JOB_PHASES = _chunkCVLM3WMJjs.MONITOR_JOB_PHASES; exports.MONITOR_JOB_RECONCILIATION_STATES = _chunkCVLM3WMJjs.MONITOR_JOB_RECONCILIATION_STATES; exports.MONITOR_JOB_STATES = _chunkCVLM3WMJjs.MONITOR_JOB_STATES; exports.PHONE_STATUS_VALUES = _chunk3VN4FTE3js.PHONE_STATUS_VALUES; exports.PROD_URL = _chunkWMS5U6YBjs.PROD_URL; exports.ProviderTransientError = _chunk7P5AA3SNjs.ProviderTransientError; exports.RateLimitError = _chunkWMS5U6YBjs.RateLimitError; exports.RunEventQueryInputError = _chunkCVLM3WMJjs.RunEventQueryInputError; exports.RunObserveTransportUnavailableError = RunObserveTransportUnavailableError; exports.SDK_API_CONTRACT = _chunkWMS5U6YBjs.SDK_API_CONTRACT; exports.SDK_VERSION = _chunkWMS5U6YBjs.SDK_VERSION; exports.ToolExecutionError = _chunk7P5AA3SNjs.ToolExecutionError; exports.ToolRateLimitError = _chunkWMS5U6YBjs.ToolRateLimitError; exports.admitMonitorFleetAuthoringContract = _chunkC374C22Yjs.admitMonitorFleetAuthoringContract; exports.defineInput = defineInput; exports.defineMonitor = defineMonitor; exports.defineMonitorFleet = _chunkC374C22Yjs.defineMonitorFleet; exports.definePlay = definePlay; exports.defineWorkflow = defineWorkflow; exports.extractSummaryFields = _chunk3VN4FTE3js.extractSummaryFields; exports.fleetColumn = _chunkC374C22Yjs.fleetColumn; exports.fleetKey = _chunkC374C22Yjs.fleetKey; exports.getDefinedPlayMetadata = getDefinedPlayMetadata; exports.getProviderUnavailableReason = _chunk7P5AA3SNjs.getProviderUnavailableReason; exports.isDeeplineExtractorTarget = _chunk3VN4FTE3js.isDeeplineExtractorTarget; exports.isProviderUnavailable = _chunk7P5AA3SNjs.isProviderUnavailable; exports.isProviderWaterfallUnavailableError = _chunk7P5AA3SNjs.isProviderWaterfallUnavailableError; exports.isStopAllPlayRunsDryRunResult = _chunkCVLM3WMJjs.isStopAllPlayRunsDryRunResult; exports.lintMonitorBatchInput = _chunkIF75RD6Ujs.lintMonitorBatchInput; exports.lintMonitorFleetInput = _chunkC374C22Yjs.lintMonitorFleetInput; exports.lintMonitorSpecTemplate = _chunkIF75RD6Ujs.lintMonitorSpecTemplate; exports.pinLocalPlayImports = _chunkGEJDBXXMjs.pinLocalPlayImports; exports.planCustomerDbQuery = _chunkCVLM3WMJjs.planCustomerDbQuery; exports.planLocalPlayExecution = _chunkGEJDBXXMjs.planLocalPlayExecution; exports.readList = readList; exports.renderMonitorSpecTemplate = _chunkIF75RD6Ujs.renderMonitorSpecTemplate; exports.resolveConfig = _chunkWMS5U6YBjs.resolveConfig; exports.runIf = runIf; exports.steps = steps; exports.tryConvertToList = _chunk3VN4FTE3js.tryConvertToList; exports.validateMonitorFleetDefinition = _chunkC374C22Yjs.validateMonitorFleetDefinition; exports.writeCsvOutputFile = _chunk3VN4FTE3js.writeCsvOutputFile; exports.writeJsonOutputFile = _chunk3VN4FTE3js.writeJsonOutputFile;
2352
+ exports.AuthError = _chunkCS6RAIVYjs.AuthError; exports.ConfigError = _chunkCS6RAIVYjs.ConfigError; exports.CtxFetchHttpError = _chunkKB4SDX5Sjs.CtxFetchHttpError; exports.CustomerDbQueryOutcomeUnknownError = _chunkCS6RAIVYjs.CustomerDbQueryOutcomeUnknownError; exports.DEEPLINE_EXTRACTOR_TARGETS = _chunkRDXFGPJUjs.DEEPLINE_EXTRACTOR_TARGETS; exports.DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS = _chunkRDXFGPJUjs.DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS; exports.DEEPLINE_TOOL_CATEGORIES = DEEPLINE_TOOL_CATEGORIES; exports.Deepline = Deepline; exports.DeeplineClient = _chunkE23BQ5SCjs.DeeplineClient; exports.DeeplineContext = DeeplineContext; exports.DeeplineError = _chunk7P5AA3SNjs.DeeplineError; exports.JOB_CHANGE_STATUS_VALUES = _chunkRDXFGPJUjs.JOB_CHANGE_STATUS_VALUES; exports.MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG = _chunkC374C22Yjs.MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG; exports.MONITOR_FLEET_AUTHORING_CONTRACT_EDITION = _chunkC374C22Yjs.MONITOR_FLEET_AUTHORING_CONTRACT_EDITION; exports.MONITOR_FLEET_DOCUMENTATION = _chunkC374C22Yjs.MONITOR_FLEET_DOCUMENTATION; exports.MONITOR_FLEET_FRONTIER_MAX_ROWS = _chunkC374C22Yjs.MONITOR_FLEET_FRONTIER_MAX_ROWS; exports.MONITOR_FLEET_MAX_MEMBERS = _chunkC374C22Yjs.MONITOR_FLEET_MAX_MEMBERS; exports.MONITOR_JOB_PHASES = _chunkE23BQ5SCjs.MONITOR_JOB_PHASES; exports.MONITOR_JOB_RECONCILIATION_STATES = _chunkE23BQ5SCjs.MONITOR_JOB_RECONCILIATION_STATES; exports.MONITOR_JOB_STATES = _chunkE23BQ5SCjs.MONITOR_JOB_STATES; exports.PHONE_STATUS_VALUES = _chunkRDXFGPJUjs.PHONE_STATUS_VALUES; exports.PROD_URL = _chunkCS6RAIVYjs.PROD_URL; exports.ProviderTransientError = _chunk7P5AA3SNjs.ProviderTransientError; exports.RateLimitError = _chunkCS6RAIVYjs.RateLimitError; exports.RunEventQueryInputError = _chunkE23BQ5SCjs.RunEventQueryInputError; exports.RunObserveTransportUnavailableError = RunObserveTransportUnavailableError; exports.SDK_API_CONTRACT = _chunkCS6RAIVYjs.SDK_API_CONTRACT; exports.SDK_VERSION = _chunkCS6RAIVYjs.SDK_VERSION; exports.ToolExecutionError = _chunk7P5AA3SNjs.ToolExecutionError; exports.ToolRateLimitError = _chunkCS6RAIVYjs.ToolRateLimitError; exports.admitMonitorFleetAuthoringContract = _chunkC374C22Yjs.admitMonitorFleetAuthoringContract; exports.defineInput = defineInput; exports.defineMonitor = defineMonitor; exports.defineMonitorFleet = _chunkC374C22Yjs.defineMonitorFleet; exports.definePlay = definePlay; exports.defineWorkflow = defineWorkflow; exports.extractSummaryFields = _chunkRDXFGPJUjs.extractSummaryFields; exports.fleetColumn = _chunkC374C22Yjs.fleetColumn; exports.fleetKey = _chunkC374C22Yjs.fleetKey; exports.getDefinedPlayMetadata = getDefinedPlayMetadata; exports.getProviderUnavailableReason = _chunk7P5AA3SNjs.getProviderUnavailableReason; exports.isDeeplineExtractorTarget = _chunkRDXFGPJUjs.isDeeplineExtractorTarget; exports.isProviderUnavailable = _chunk7P5AA3SNjs.isProviderUnavailable; exports.isProviderWaterfallUnavailableError = _chunk7P5AA3SNjs.isProviderWaterfallUnavailableError; exports.isStopAllPlayRunsDryRunResult = _chunkE23BQ5SCjs.isStopAllPlayRunsDryRunResult; exports.lintMonitorBatchInput = _chunkIF75RD6Ujs.lintMonitorBatchInput; exports.lintMonitorFleetInput = _chunkC374C22Yjs.lintMonitorFleetInput; exports.lintMonitorSpecTemplate = _chunkIF75RD6Ujs.lintMonitorSpecTemplate; exports.pinLocalPlayImports = _chunkGEJDBXXMjs.pinLocalPlayImports; exports.planCustomerDbQuery = _chunkE23BQ5SCjs.planCustomerDbQuery; exports.planLocalPlayExecution = _chunkGEJDBXXMjs.planLocalPlayExecution; exports.readList = readList; exports.renderMonitorSpecTemplate = _chunkIF75RD6Ujs.renderMonitorSpecTemplate; exports.resolveConfig = _chunkCS6RAIVYjs.resolveConfig; exports.runIf = runIf; exports.steps = steps; exports.tryConvertToList = _chunkRDXFGPJUjs.tryConvertToList; exports.validateMonitorFleetDefinition = _chunkC374C22Yjs.validateMonitorFleetDefinition; exports.writeCsvOutputFile = _chunkRDXFGPJUjs.writeCsvOutputFile; exports.writeJsonOutputFile = _chunkRDXFGPJUjs.writeJsonOutputFile;
package/dist/index.mjs CHANGED
@@ -1,4 +1,8 @@
1
1
  import "./cli/chunk-EXMLR72R.mjs";
2
+ import {
3
+ pinLocalPlayImports,
4
+ planLocalPlayExecution
5
+ } from "./cli/chunk-ERFN2QY4.mjs";
2
6
  import {
3
7
  DEEPLINE_EXTRACTOR_TARGETS,
4
8
  DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS,
@@ -7,19 +11,13 @@ import {
7
11
  buildEmailStatus,
8
12
  extractSummaryFields,
9
13
  isDeeplineExtractorTarget,
10
- normalizeTableNamespace,
11
- sha256Hex,
12
14
  tryConvertToList,
13
15
  writeCsvOutputFile,
14
16
  writeJsonOutputFile
15
- } from "./cli/chunk-Y6VOGHF2.mjs";
16
- import {
17
- pinLocalPlayImports,
18
- planLocalPlayExecution
19
- } from "./cli/chunk-ERFN2QY4.mjs";
17
+ } from "./cli/chunk-KZZC33PY.mjs";
20
18
  import {
21
19
  CtxFetchHttpError
22
- } from "./cli/chunk-7E66A24V.mjs";
20
+ } from "./cli/chunk-3HU47EGZ.mjs";
23
21
  import {
24
22
  DeeplineClient,
25
23
  MONITOR_JOB_PHASES,
@@ -28,11 +26,15 @@ import {
28
26
  RunEventQueryInputError,
29
27
  isStopAllPlayRunsDryRunResult,
30
28
  planCustomerDbQuery
31
- } from "./cli/chunk-YN6YA7ZZ.mjs";
29
+ } from "./cli/chunk-JHIJIHFB.mjs";
32
30
  import {
33
31
  legacyRawFromToolResponseRawV2
34
32
  } from "./cli/chunk-6IKARAYD.mjs";
35
- import "./cli/chunk-Q6EOHNRH.mjs";
33
+ import "./cli/chunk-JI2B4RZP.mjs";
34
+ import {
35
+ normalizeTableNamespace,
36
+ sha256Hex
37
+ } from "./cli/chunk-UBKA33KY.mjs";
36
38
  import {
37
39
  MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG,
38
40
  MONITOR_FLEET_AUTHORING_CONTRACT_EDITION,
@@ -62,7 +64,7 @@ import {
62
64
  SDK_VERSION,
63
65
  ToolRateLimitError,
64
66
  resolveConfig
65
- } from "./cli/chunk-2GAHHSLB.mjs";
67
+ } from "./cli/chunk-FJGW5GXU.mjs";
66
68
  import "./cli/chunk-DLIRSHV6.mjs";
67
69
  import {
68
70
  DeeplineError,
@@ -72,7 +74,7 @@ import {
72
74
  isProviderUnavailable,
73
75
  isProviderWaterfallUnavailableError
74
76
  } from "./cli/chunk-NXGCO4JB.mjs";
75
- import "./cli/chunk-YAZCDBXX.mjs";
77
+ import "./cli/chunk-TJI2EN6K.mjs";
76
78
  import "./cli/chunk-WZYKRD7T.mjs";
77
79
  import "./cli/chunk-KRD6H754.mjs";
78
80
 
@@ -80,6 +82,54 @@ import "./cli/chunk-KRD6H754.mjs";
80
82
  var PLAY_DATASET_BRAND = Symbol.for("deepline.play.dataset");
81
83
  var NODE_INSPECT_CUSTOM = Symbol.for("nodejs.util.inspect.custom");
82
84
  var residentRowsByDataset = /* @__PURE__ */ new WeakMap();
85
+ var sourceRowIdentityByRow = /* @__PURE__ */ new WeakMap();
86
+ var sourceRowIdentitiesByRows = /* @__PURE__ */ new WeakMap();
87
+ var sourceOccurrencesByDataset = /* @__PURE__ */ new WeakMap();
88
+ function setPlayDatasetSourceRowIdentity(row, identity) {
89
+ if (row && typeof row === "object") sourceRowIdentityByRow.set(row, identity);
90
+ return row;
91
+ }
92
+ function getPlayDatasetSourceRowIdentity(row) {
93
+ return row && typeof row === "object" ? sourceRowIdentityByRow.get(row) : void 0;
94
+ }
95
+ function getPlayDatasetSourceRowIdentityAt(rows, index) {
96
+ const identities = sourceRowIdentitiesByRows.get(rows);
97
+ return identities ? identities[index] : getPlayDatasetSourceRowIdentity(rows[index]);
98
+ }
99
+ function copySourceOccurrenceToMappedValue(identity, mapped) {
100
+ if (!identity || !mapped || typeof mapped !== "object") return mapped;
101
+ const prototype = Object.getPrototypeOf(mapped);
102
+ const occurrence = Array.isArray(mapped) ? Object.defineProperties([], Object.getOwnPropertyDescriptors(mapped)) : prototype === Object.prototype || prototype === null ? Object.create(prototype, Object.getOwnPropertyDescriptors(mapped)) : mapped;
103
+ return setPlayDatasetSourceRowIdentity(occurrence, identity);
104
+ }
105
+ async function* iterateSourceOccurrences(input) {
106
+ if (isPlayDataset(input)) {
107
+ const occurrences = sourceOccurrencesByDataset.get(input);
108
+ if (occurrences) {
109
+ yield* occurrences();
110
+ return;
111
+ }
112
+ for await (const row of input)
113
+ yield { row, sourceIdentity: getPlayDatasetSourceRowIdentity(row) };
114
+ return;
115
+ }
116
+ if (Array.isArray(input)) {
117
+ for (let index = 0; index < input.length; index += 1) {
118
+ yield {
119
+ row: input[index],
120
+ sourceIdentity: getPlayDatasetSourceRowIdentityAt(input, index)
121
+ };
122
+ }
123
+ return;
124
+ }
125
+ if (input != null && typeof input === "object" && Symbol.asyncIterator in input) {
126
+ for await (const row of input)
127
+ yield { row, sourceIdentity: getPlayDatasetSourceRowIdentity(row) };
128
+ return;
129
+ }
130
+ for (const row of input)
131
+ yield { row, sourceIdentity: getPlayDatasetSourceRowIdentity(row) };
132
+ }
83
133
  var DEFAULT_MATERIALIZE_LIMIT = 1e4;
84
134
  var PLAY_DATASET_EXECUTION_PAGE_BYTES = 64 * 1024 * 1024;
85
135
  var DATASET_UTF8_ENCODER = new TextEncoder();
@@ -272,7 +322,7 @@ function transformDatasetId(input) {
272
322
  }
273
323
  function createTransformedPlayDataset(source, transform, options) {
274
324
  const sourceLabel = options?.sourceLabel ?? `${source.sourceLabel ?? source.tableNamespace ?? source.datasetId}.${transform.kind}`;
275
- const iterate = async function* () {
325
+ const iterateOccurrences = async function* () {
276
326
  if (transform.kind === "slice") {
277
327
  const bounds = normalizeSliceBounds({
278
328
  start: transform.start,
@@ -280,10 +330,10 @@ function createTransformedPlayDataset(source, transform, options) {
280
330
  count: await source.count()
281
331
  });
282
332
  let index = 0;
283
- for await (const row of source) {
333
+ for await (const occurrence of iterateSourceOccurrences(source)) {
284
334
  if (index >= bounds.end) break;
285
335
  if (index >= bounds.start) {
286
- yield row;
336
+ yield occurrence;
287
337
  }
288
338
  index += 1;
289
339
  }
@@ -291,25 +341,39 @@ function createTransformedPlayDataset(source, transform, options) {
291
341
  }
292
342
  let inputIndex = 0;
293
343
  let outputIndex = 0;
294
- for await (const row of source) {
344
+ for await (const { row, sourceIdentity } of iterateSourceOccurrences(
345
+ source
346
+ )) {
295
347
  if (transform.kind === "filter") {
296
348
  if (await transform.predicate(row, inputIndex)) {
297
- yield row;
349
+ yield { row, sourceIdentity };
298
350
  outputIndex += 1;
299
351
  }
300
352
  } else {
301
- yield await transform.mapper(row, outputIndex);
353
+ yield {
354
+ row: copySourceOccurrenceToMappedValue(
355
+ sourceIdentity,
356
+ await transform.mapper(row, outputIndex)
357
+ ),
358
+ sourceIdentity
359
+ };
302
360
  outputIndex += 1;
303
361
  }
304
362
  inputIndex += 1;
305
363
  }
306
364
  };
365
+ const iterate = async function* () {
366
+ for await (const { row } of iterateOccurrences()) yield row;
367
+ };
307
368
  const collect = async (limit) => {
308
369
  const rows = [];
370
+ const identities = [];
371
+ sourceRowIdentitiesByRows.set(rows, identities);
309
372
  const boundedLimit = limit === void 0 ? void 0 : Math.max(0, Math.floor(limit));
310
373
  if (boundedLimit === 0) return rows;
311
- for await (const row of iterate()) {
374
+ for await (const { row, sourceIdentity } of iterateOccurrences()) {
312
375
  rows.push(row);
376
+ identities.push(sourceIdentity);
313
377
  if (boundedLimit !== void 0 && rows.length >= boundedLimit) break;
314
378
  }
315
379
  return rows;
@@ -331,7 +395,7 @@ function createTransformedPlayDataset(source, transform, options) {
331
395
  }
332
396
  return total;
333
397
  };
334
- return createDeferredPlayDataset({
398
+ const dataset = createDeferredPlayDataset({
335
399
  datasetKind: source.datasetKind,
336
400
  datasetId: transformDatasetId({
337
401
  source,
@@ -355,6 +419,11 @@ function createTransformedPlayDataset(source, transform, options) {
355
419
  })
356
420
  }
357
421
  });
422
+ sourceOccurrencesByDataset.set(
423
+ dataset,
424
+ iterateOccurrences
425
+ );
426
+ return dataset;
358
427
  }
359
428
  function createDeferredPlayDataset(input) {
360
429
  if (input.residentRows && input.knownCount !== null && input.residentRows.length !== (input.knownCount ?? input.count)) {
@@ -669,7 +738,10 @@ function toV2RawToolOutputPathPreservingProviderData(path) {
669
738
  return rawPath ? `toolResponse.raw.${rawPath}` : "toolResponse.raw";
670
739
  }
671
740
  function candidateResultPaths(path) {
741
+ const normalized = String(path || "").trim().replace(/^\./, "");
742
+ const providerPath = normalized.startsWith("result.data.") ? `toolResponse.raw.${normalized.slice("result.data.".length)}` : normalized === "result.data" ? "toolResponse.raw" : "";
672
743
  const candidates = [
744
+ providerPath,
673
745
  normalizeResultPath(path),
674
746
  toV2RawToolOutputPathPreservingProviderData(path)
675
747
  ];
@@ -725,8 +797,27 @@ function acceptedTargetValue(target, value) {
725
797
  if (target && STRING_CONTACT_TARGETS.has(target) && typeof value === "boolean") {
726
798
  return void 0;
727
799
  }
800
+ if (target === "email") return emailTargetValue(value) ?? void 0;
728
801
  return isMeaningfulValue(value) ? value : void 0;
729
802
  }
803
+ function emailTargetValue(value) {
804
+ if (typeof value === "string") {
805
+ const email = value.trim();
806
+ return /^[^\s@*]+@[^\s@*]+\.[^\s@*]+$/.test(email) ? email : null;
807
+ }
808
+ if (Array.isArray(value)) {
809
+ for (const entry of value) {
810
+ const email = emailTargetValue(entry);
811
+ if (email) return email;
812
+ }
813
+ } else if (isRecord(value)) {
814
+ for (const key of ["email", "email_address", "address", "value"]) {
815
+ const email = emailTargetValue(value[key]);
816
+ if (email) return email;
817
+ }
818
+ }
819
+ return null;
820
+ }
730
821
  function getFirstMeaningfulValueAtPath(root, path, target) {
731
822
  for (const entry of valuesAtSegments(root, parsePath(path))) {
732
823
  const value = acceptedTargetValue(target, entry.value);