deepline 0.3.353 → 0.3.354

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 (95) hide show
  1. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  2. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +3 -1
  3. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts +54 -40
  4. package/dist/cli/auth-6UTAYZYH.js +31 -0
  5. package/dist/cli/{auth-FVIZVTCB.mjs → auth-WLFZLPVL.mjs} +4 -4
  6. package/dist/cli/{billing-NWL7KQPZ.js → billing-7MEEEXP4.js} +73 -73
  7. package/dist/cli/{billing-PYTYGWPG.mjs → billing-V3C4NWJ5.mjs} +4 -4
  8. package/dist/cli/{chunk-2UWRFDI4.js → chunk-2OPNMVYN.js} +60 -60
  9. package/dist/cli/{chunk-ZCCXX55K.js → chunk-2XBK5U34.js} +45 -45
  10. package/dist/cli/{chunk-Z6LVVOOJ.js → chunk-3BA35GCA.js} +15 -15
  11. package/dist/cli/{chunk-55XOA2VW.js → chunk-3GRDLU4K.js} +8 -8
  12. package/dist/cli/{chunk-NPU4SMKT.js → chunk-3NL4REIK.js} +9 -9
  13. package/dist/cli/{chunk-XI5IMY45.js → chunk-427S6HR2.js} +2 -2
  14. package/dist/cli/{chunk-HU4SUDWU.js → chunk-5MSRAFIT.js} +224 -224
  15. package/dist/cli/{chunk-EDEO7NG4.js → chunk-B6SRSDBH.js} +1 -1
  16. package/dist/cli/{chunk-VALAAQQM.js → chunk-C4YFKD7B.js} +48 -48
  17. package/dist/cli/{chunk-BVHUTDCW.mjs → chunk-D454FGPP.mjs} +5 -5
  18. package/dist/cli/{chunk-IVGFLYQ6.mjs → chunk-EKWPCKO6.mjs} +1 -1
  19. package/dist/cli/{chunk-CXMSK2VV.mjs → chunk-F75TFBVN.mjs} +2 -2
  20. package/dist/cli/{chunk-DY253DRK.mjs → chunk-GOKAXPGN.mjs} +2 -2
  21. package/dist/cli/{chunk-CQQ5N4YO.mjs → chunk-GVXFIFI3.mjs} +2 -2
  22. package/dist/cli/{chunk-RRDCBCRI.mjs → chunk-HEN4YY2R.mjs} +1 -1
  23. package/dist/cli/{chunk-M4UPRX3M.js → chunk-IH23RQXJ.js} +8 -8
  24. package/dist/cli/{chunk-37F4EUJA.mjs → chunk-JJEJHAGS.mjs} +6 -6
  25. package/dist/cli/{chunk-NZNUDZDW.mjs → chunk-JXXX7TZZ.mjs} +2 -2
  26. package/dist/cli/{chunk-NFEQHNDQ.js → chunk-NGXUDPUI.js} +26 -26
  27. package/dist/cli/{chunk-D477W2OQ.mjs → chunk-NV6NBSPH.mjs} +4 -4
  28. package/dist/cli/{chunk-GFLHAA2O.mjs → chunk-OSVY4AVM.mjs} +1 -1
  29. package/dist/cli/{chunk-LLI4RITH.mjs → chunk-PRBOPYT2.mjs} +3 -3
  30. package/dist/cli/{chunk-JHPVZR6F.js → chunk-QFD3VXQS.js} +4 -4
  31. package/dist/cli/{chunk-R2T4HQ64.js → chunk-RQJORG4F.js} +6 -6
  32. package/dist/cli/{chunk-ZDEO3EGW.mjs → chunk-XAXLATYC.mjs} +1 -1
  33. package/dist/cli/{chunk-U3FUXTIB.mjs → chunk-YK2XGEY3.mjs} +1 -1
  34. package/dist/cli/client-5BVCEKM5.js +20 -0
  35. package/dist/cli/{client-IH7I5D7T.mjs → client-TIVZM7GK.mjs} +3 -3
  36. package/dist/cli/{csv-G5WXNCLQ.mjs → csv-E62E67L3.mjs} +3 -3
  37. package/dist/cli/{csv-TJIWKUCX.js → csv-VAH6JJHI.js} +12 -12
  38. package/dist/cli/{db-EBHV2MGE.mjs → db-7MCHARO3.mjs} +4 -4
  39. package/dist/cli/{db-3DCS2JXS.js → db-FKDG7M3X.js} +29 -29
  40. package/dist/cli/{describe-5XKBPWD7.js → describe-3WPU75JN.js} +15 -15
  41. package/dist/cli/{describe-QUOLGZKH.mjs → describe-ZSCT6QLG.mjs} +8 -8
  42. package/dist/cli/{executions-EERWIJ5I.mjs → executions-NCSDSHIX.mjs} +4 -4
  43. package/dist/cli/{executions-NYIOENKH.js → executions-UBJJ55LI.js} +6 -6
  44. package/dist/cli/{feedback-4RYJJCYL.mjs → feedback-RE2TLLSM.mjs} +3 -3
  45. package/dist/cli/{feedback-Z2I5MQYZ.js → feedback-UBKR7RHE.js} +7 -7
  46. package/dist/cli/git-44MZ22NK.js +23 -0
  47. package/dist/cli/{git-EMU7AKX3.mjs → git-AQNH4NAK.mjs} +4 -4
  48. package/dist/cli/index.js +79 -79
  49. package/dist/cli/index.mjs +31 -31
  50. package/dist/cli/{legacy-noops-BEUYYRSU.js → legacy-noops-C7UKYNEP.js} +7 -7
  51. package/dist/cli/{legacy-noops-HHLNM523.mjs → legacy-noops-ZNMQTD2K.mjs} +4 -4
  52. package/dist/cli/{monitors-BVJSHUV4.mjs → monitors-CUXMXMGC.mjs} +4 -4
  53. package/dist/cli/{monitors-KQXLMPZ4.js → monitors-NC3UXIDA.js} +85 -85
  54. package/dist/cli/{org-HRYNVOUH.js → org-DHAXJFQ2.js} +60 -60
  55. package/dist/cli/{org-KSROOKSJ.mjs → org-IIW7IEJ7.mjs} +4 -4
  56. package/dist/cli/{play-PGFW6PFE.mjs → play-4MMSBBJP.mjs} +7 -7
  57. package/dist/cli/play-D46UW6OL.js +153 -0
  58. package/dist/cli/{providers-BJM725CV.js → providers-OLCJYWZM.js} +7 -7
  59. package/dist/cli/{providers-EUKJK6ZE.mjs → providers-YX7CS6XU.mjs} +4 -4
  60. package/dist/cli/{quickstart-72JYHUJC.mjs → quickstart-EEXIL4UP.mjs} +3 -3
  61. package/dist/cli/{quickstart-FEERYTYY.js → quickstart-ZVB2X32N.js} +5 -5
  62. package/dist/cli/search-QH2DTRZK.js +26 -0
  63. package/dist/cli/{search-LUAIOM56.mjs → search-U3OEMJVA.mjs} +5 -5
  64. package/dist/cli/{secrets-YYFRYS2Z.mjs → secrets-DQBMEYHR.mjs} +4 -4
  65. package/dist/cli/{secrets-J65QCH57.js → secrets-Q5WQHPIH.js} +13 -13
  66. package/dist/cli/{sessions-WBA67YYT.mjs → sessions-EUUOJ42J.mjs} +4 -4
  67. package/dist/cli/{sessions-FWUUEK6V.js → sessions-RH7HXUZT.js} +5 -5
  68. package/dist/cli/{settings-RUMTSUE5.mjs → settings-3YYNL5RL.mjs} +7 -7
  69. package/dist/cli/{settings-I7AZ4JVI.js → settings-M4ODWSAR.js} +74 -74
  70. package/dist/cli/{setup-BHRRNT5C.mjs → setup-377NYJFE.mjs} +6 -6
  71. package/dist/cli/{setup-R3IUFNDP.js → setup-UIM7ARVP.js} +41 -41
  72. package/dist/cli/skills-K4SF37HO.js +28 -0
  73. package/dist/cli/{skills-EKD5O7GQ.mjs → skills-S4XLO4XM.mjs} +4 -4
  74. package/dist/cli/tools-BK5GMDP4.js +40 -0
  75. package/dist/cli/{tools-L5OA2343.mjs → tools-VECGJHSR.mjs} +6 -6
  76. package/dist/cli/{update-UUHL6FER.mjs → update-EXH5POHP.mjs} +6 -6
  77. package/dist/cli/update-U5B3IFKL.js +28 -0
  78. package/dist/cli/{workflow-V24VHOQT.mjs → workflow-5BLDGBNS.mjs} +5 -5
  79. package/dist/cli/{workflow-7NBSG5OT.js → workflow-YQTJKRZ3.js} +15 -15
  80. package/dist/index.js +6 -6
  81. package/dist/index.mjs +3 -3
  82. package/dist/install-integrity.json +74 -74
  83. package/dist/release.d.mts +1 -1
  84. package/dist/release.d.ts +1 -1
  85. package/dist/release.js +2 -2
  86. package/dist/release.mjs +1 -1
  87. package/package.json +1 -1
  88. package/dist/cli/auth-GJZ3S4QH.js +0 -31
  89. package/dist/cli/client-Z6BCEGFA.js +0 -20
  90. package/dist/cli/git-QYQ5ZFIG.js +0 -23
  91. package/dist/cli/play-CRHUA45Q.js +0 -153
  92. package/dist/cli/search-X25S2U54.js +0 -26
  93. package/dist/cli/skills-OOZ5SDVB.js +0 -28
  94. package/dist/cli/tools-MYH33NTL.js +0 -40
  95. package/dist/cli/update-EWNPE3NF.js +0 -28
@@ -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.353',
203
+ version: '0.3.354',
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: {
@@ -20633,7 +20633,9 @@ async function dispatchRunLedgerOutboxBatchWithScope(
20633
20633
  for (const row of result.rows)
20634
20634
  prefix[row.ordinal - 1]!.payload = row.payload;
20635
20635
  } catch (error) {
20636
- await client.query('ROLLBACK');
20636
+ // A query timeout may already have closed this connection. Keep
20637
+ // the delivery failure for retry classification and diagnostics.
20638
+ await client.query('ROLLBACK').catch(() => undefined);
20637
20639
  throw error;
20638
20640
  }
20639
20641
  });
@@ -86,7 +86,7 @@ const RUNTIME_EVENT_LOG_POSITION_EXPRESSION = `jsonb_set(
86
86
  // Migration readiness tracks this projection body independently of scheduler
87
87
  // wire and schema versions. Bump when a changed trigger must be reinstalled.
88
88
  export const RUNTIME_EVENT_SEARCH_OUTBOX_PROJECTION_MARKER =
89
- 'runtime-event-search-origin-batches-new-run-cutover-fresh-origin';
89
+ 'runtime-event-search-origin-batch-fields-once';
90
90
  /** Trusted trigger-authored state; absent on already-projected legacy rows. */
91
91
  export const RUNTIME_EVENT_DEFERRED_PROJECTION_FIELD =
92
92
  '_runtimeSearchProjectionPending';
@@ -2027,23 +2027,28 @@ export async function attachRuntimeEventSearchTriggers(
2027
2027
  await client.query(`
2028
2028
  CREATE OR REPLACE FUNCTION ${schema}.project_origin_log_batch(observation ${schema}.outbox, item jsonb, run_org text, play text, compact_logs boolean, canonical_events boolean, at_time timestamptz, doc jsonb, closed boolean)
2029
2029
  RETURNS text[] LANGUAGE plpgsql SECURITY DEFINER SET search_path = pg_catalog AS $function$
2030
- DECLARE fresh text[]; mismatches bigint;
2030
+ DECLARE fresh text[]; mismatches bigint; expected_ids text[]; existing_identities jsonb;
2031
+ batch_lines jsonb := item->'lines';
2032
+ batch_ids jsonb := item->'lineIds';
2033
+ batch_contexts jsonb := item->'lineContexts';
2034
+ batch_metadata jsonb := item->'lineMetadata';
2035
+ batch_event jsonb := item - 'lines' - 'lineContexts' - 'lineIds' - 'lineMetadata';
2031
2036
  BEGIN
2032
- IF jsonb_typeof(item->'lineIds') IS DISTINCT FROM 'array'
2033
- OR jsonb_array_length(item->'lineIds') <> jsonb_array_length(item->'lines')
2034
- OR EXISTS (SELECT 1 FROM jsonb_array_elements(item->'lineIds') id WHERE jsonb_typeof(id) <> 'string' OR (id #>> '{}') !~ '^[A-Za-z0-9:_-]{1,128}$')
2035
- OR (SELECT count(DISTINCT id) FROM jsonb_array_elements(item->'lineIds') id) <> jsonb_array_length(item->'lineIds') THEN
2037
+ IF jsonb_typeof(batch_ids) IS DISTINCT FROM 'array'
2038
+ OR jsonb_array_length(batch_ids) <> jsonb_array_length(batch_lines)
2039
+ OR EXISTS (SELECT 1 FROM jsonb_array_elements(batch_ids) id WHERE jsonb_typeof(id) <> 'string' OR (id #>> '{}') !~ '^[A-Za-z0-9:_-]{1,128}$')
2040
+ OR (SELECT count(DISTINCT id) FROM jsonb_array_elements(batch_ids) id) <> jsonb_array_length(batch_ids) THEN
2036
2041
  RAISE EXCEPTION 'Origin log identities must be distinct bounded strings aligned with lines';
2037
2042
  END IF;
2038
- IF EXISTS (SELECT 1 FROM jsonb_array_elements(item->'lines') line WHERE jsonb_typeof(line) <> 'string') THEN
2043
+ IF EXISTS (SELECT 1 FROM jsonb_array_elements(batch_lines) line WHERE jsonb_typeof(line) <> 'string') THEN
2039
2044
  RAISE EXCEPTION 'Search projection requires log line strings';
2040
2045
  END IF;
2041
2046
  IF item ? 'lineContexts' AND EXISTS (
2042
- SELECT 1 FROM jsonb_array_elements(item->'lineContexts') ctx
2047
+ SELECT 1 FROM jsonb_array_elements(batch_contexts) ctx
2043
2048
  WHERE jsonb_typeof(ctx) NOT IN ('object', 'null')
2044
2049
  ) THEN RAISE EXCEPTION 'Search projection log context must be an object'; END IF;
2045
2050
  IF item ? 'lineContexts' AND EXISTS (
2046
- SELECT 1 FROM jsonb_array_elements(item->'lineContexts') ctx
2051
+ SELECT 1 FROM jsonb_array_elements(batch_contexts) ctx
2047
2052
  WHERE jsonb_typeof(ctx) = 'object' AND (
2048
2053
  (SELECT count(*) FROM jsonb_object_keys(ctx)) > 8 OR octet_length(ctx::text) > 2064
2049
2054
  OR EXISTS (SELECT 1 FROM jsonb_each(ctx) field WHERE
@@ -2053,28 +2058,31 @@ export async function attachRuntimeEventSearchTriggers(
2053
2058
  OR (jsonb_typeof(field.value) = 'number' AND octet_length(field.value #>> '{}') > 32))
2054
2059
  )
2055
2060
  ) THEN RAISE EXCEPTION 'Search projection log context has an unsupported key or value'; END IF;
2061
+ -- Generic plans cannot fold item field extraction or removal. Cache the
2062
+ -- aligned arrays and event header once: rebuilding a multi-megabyte item
2063
+ -- per line makes retained terminal envelopes quadratic even on replay.
2056
2064
  WITH entries AS MATERIALIZED (
2057
2065
  SELECT value #>> '{}' AS body, ordinality AS ordinal,
2058
- 'log-origin:' || observation.run_id || ':' || (item->'lineIds'->>(ordinality-1)::int) AS eid,
2059
- NULLIF(item->'lineContexts'->(ordinality-1)::int, 'null'::jsonb) AS ctx,
2060
- ${schema}.run_log_metadata(value #>> '{}', item->'lineMetadata'->(ordinality-1)::int, at_time) AS metadata
2061
- FROM jsonb_array_elements(item->'lines') WITH ORDINALITY
2066
+ 'log-origin:' || observation.run_id || ':' || (batch_ids->>(ordinality-1)::int) AS eid,
2067
+ NULLIF(batch_contexts->(ordinality-1)::int, 'null'::jsonb) AS ctx,
2068
+ ${schema}.run_log_metadata(value #>> '{}', batch_metadata->(ordinality-1)::int, at_time) AS metadata
2069
+ FROM jsonb_array_elements(batch_lines) WITH ORDINALITY
2062
2070
  ), inserted AS (
2063
2071
  INSERT INTO runtime_observability.events (
2064
2072
  runtime_scope, org_id, event_id, event_seq, event_payload, occurred_at,
2065
2073
  run_id, play_name, kind, level, message, log_body, source_digest, log_text_digest, search_doc
2066
2074
  ) SELECT ${quoteLiteral(scope)}, run_org, eid,
2067
2075
  CASE WHEN canonical_events THEN nextval('runtime_observability.runtime_event_order_seq') END,
2068
- CASE WHEN canonical_events THEN jsonb_strip_nulls((item - 'lines' - 'lineContexts' - 'lineIds' - 'lineMetadata') || jsonb_build_object(
2076
+ CASE WHEN canonical_events THEN jsonb_strip_nulls(batch_event || jsonb_build_object(
2069
2077
  'type', ${RUN_EVENT_KIND_SQL_LITERAL.logAppended}, 'runId', observation.run_id,
2070
2078
  'occurredAt', metadata->'occurredAt', 'level', metadata->'level', 'stepId', metadata->'stepId', 'lineOrdinal', ordinal,
2071
- 'entryId', item->'lineIds'->(ordinal-1)::int, 'context', ctx)) END,
2079
+ 'entryId', batch_ids->(ordinal-1)::int, 'context', ctx)) END,
2072
2080
  to_timestamp((metadata->>'occurredAt')::double precision / 1000), observation.run_id, play, ${RUN_EVENT_KIND_SQL_LITERAL.logAppended}, metadata->>'level',
2073
2081
  CASE WHEN compact_logs THEN NULL ELSE left(body, 2048) END, body,
2074
2082
  CASE WHEN ctx IS NULL THEN encode(sha256(convert_to(body,'UTF8')),'hex')
2075
2083
  ELSE encode(sha256(convert_to(jsonb_build_array(body,ctx)::text,'UTF8')),'hex') END,
2076
2084
  encode(sha256(convert_to(btrim(body),'UTF8')),'hex'),
2077
- doc || (metadata - 'occurredAt') || jsonb_strip_nulls(jsonb_build_object('entryId', item->'lineIds'->(ordinal-1)::int, 'context', ctx))
2085
+ doc || (metadata - 'occurredAt') || jsonb_strip_nulls(jsonb_build_object('entryId', batch_ids->(ordinal-1)::int, 'context', ctx))
2078
2086
  FROM entries WHERE NOT closed ORDER BY ordinal
2079
2087
  ON CONFLICT (runtime_scope, org_id, event_id) DO NOTHING RETURNING event_id
2080
2088
  ) SELECT coalesce(array_agg(inserted.event_id ORDER BY entries.ordinal), ARRAY[]::text[])
@@ -2082,27 +2090,31 @@ export async function attachRuntimeEventSearchTriggers(
2082
2090
  -- The INSERT already proves the content of every fresh identity. Only
2083
2091
  -- retries or a concurrent uniqueness winner need a journal read-back.
2084
2092
  -- This fast path serves both inline and background origin projection.
2085
- IF cardinality(fresh) = jsonb_array_length(item->'lines') THEN
2093
+ IF cardinality(fresh) = jsonb_array_length(batch_lines) THEN
2086
2094
  RETURN fresh;
2087
2095
  END IF;
2088
2096
  -- A new READ COMMITTED statement sees a concurrent uniqueness winner.
2089
- -- Tombstones retain digest/identity: retry never restores an expired body.
2090
- SELECT count(*) INTO mismatches
2091
- FROM jsonb_array_elements(item->'lines') WITH ORDINALITY AS entries(body, ordinal)
2092
- -- Keep each replay proof on the journal primary key. An unrestricted
2093
- -- join can hash the whole shared org history for a small JSON batch.
2094
- LEFT JOIN LATERAL (
2095
- SELECT event.run_id, event.kind, event.source_digest
2097
+ -- Resolve the whole key set once. A per-line LATERAL lookup can choose
2098
+ -- a non-leading event_id index scan when scope/org statistics are skewed,
2099
+ -- re-reading the same history for every ID even though the PK is unique.
2100
+ SELECT array_agg('log-origin:' || observation.run_id || ':' || (id #>> '{}') ORDER BY ordinal)
2101
+ INTO expected_ids FROM jsonb_array_elements(batch_ids) WITH ORDINALITY AS ids(id, ordinal);
2102
+ SELECT jsonb_object_agg(event.event_id, jsonb_build_object(
2103
+ 'runId', event.run_id, 'kind', event.kind, 'digest', event.source_digest))
2104
+ INTO existing_identities
2096
2105
  FROM runtime_observability.events event
2097
- WHERE event.runtime_scope = ${quoteLiteral(scope)} AND event.org_id = run_org
2098
- AND event.event_id = 'log-origin:' || observation.run_id || ':' || (item->'lineIds'->>(ordinal-1)::int)
2099
- -- The primary key admits one row; retain a parameterized point lookup.
2100
- LIMIT 1
2101
- ) event ON true
2102
- WHERE event.run_id IS DISTINCT FROM observation.run_id OR event.kind IS DISTINCT FROM ${RUN_EVENT_KIND_SQL_LITERAL.logAppended}
2103
- OR event.source_digest IS DISTINCT FROM CASE WHEN NULLIF(item->'lineContexts'->(ordinal-1)::int, 'null'::jsonb) IS NULL
2106
+ WHERE event.runtime_scope = ${quoteLiteral(scope)} AND event.org_id = run_org
2107
+ AND event.event_id = ANY(expected_ids);
2108
+ -- JSON key lookups preserve one proof per identity without a join whose
2109
+ -- generic plan can multiply the two variable-size sets. Tombstones keep
2110
+ -- their digest/identity: retry never restores an expired body.
2111
+ SELECT count(*) INTO mismatches
2112
+ FROM jsonb_array_elements(batch_lines) WITH ORDINALITY AS entries(body, ordinal)
2113
+ WHERE existing_identities->expected_ids[ordinal]->>'runId' IS DISTINCT FROM observation.run_id
2114
+ OR existing_identities->expected_ids[ordinal]->>'kind' IS DISTINCT FROM ${RUN_EVENT_KIND_SQL_LITERAL.logAppended}
2115
+ OR existing_identities->expected_ids[ordinal]->>'digest' IS DISTINCT FROM CASE WHEN NULLIF(batch_contexts->(ordinal-1)::int, 'null'::jsonb) IS NULL
2104
2116
  THEN encode(sha256(convert_to(body #>> '{}','UTF8')),'hex')
2105
- ELSE encode(sha256(convert_to(jsonb_build_array(body #>> '{}',item->'lineContexts'->(ordinal-1)::int)::text,'UTF8')),'hex') END;
2117
+ ELSE encode(sha256(convert_to(jsonb_build_array(body #>> '{}',batch_contexts->(ordinal-1)::int)::text,'UTF8')),'hex') END;
2106
2118
  IF mismatches > 0 THEN
2107
2119
  RAISE EXCEPTION 'Origin log identity changed its content or ingress is closed after terminal acceptance';
2108
2120
  END IF;
@@ -2119,7 +2131,7 @@ export async function attachRuntimeEventSearchTriggers(
2119
2131
  log_channel text; log_position bigint; matched_event_id text; matched_doc jsonb;
2120
2132
  legacy_position_prefix text; position_event_ids text[];
2121
2133
  log_alias jsonb; position_alias jsonb; envelope_attempt jsonb;
2122
- line_count bigint; fresh_event_ids text[] := ARRAY[]::text[];
2134
+ line_count bigint; fresh_event_ids text[] := ARRAY[]::text[]; fresh_positions jsonb;
2123
2135
  recent_log_keys jsonb := '{}'::jsonb; dedupe_key text;
2124
2136
  terminal_overlap_counts jsonb := '{}'::jsonb;
2125
2137
  recent_log_keys_loaded boolean := false; recent_log_attempt text;
@@ -2769,16 +2781,18 @@ export async function attachRuntimeEventSearchTriggers(
2769
2781
  DO UPDATE SET last_seq = runtime_observability.run_log_cursors.last_seq + EXCLUDED.last_seq,
2770
2782
  updated_at = clock_timestamp()
2771
2783
  RETURNING last_seq INTO assigned_seq;
2772
- -- Bound sequence assignment before joining the variable-size ID list.
2773
- -- Shared-journal history from other runs is never a candidate.
2784
+ -- Build ordinal lookup once. Generic plans estimate a run and unnest
2785
+ -- as tiny, then compare every inserted line against the entire ID list
2786
+ -- in a nested loop. Fresh IDs came only from this transaction's inserts
2787
+ -- for this scope/org/run, so the primary-key set is the complete target.
2788
+ SELECT jsonb_object_agg(fresh.event_id, fresh.ordinality)
2789
+ INTO fresh_positions
2790
+ FROM unnest(fresh_event_ids) WITH ORDINALITY AS fresh(event_id, ordinality);
2774
2791
  UPDATE runtime_observability.events AS event
2775
- SET log_seq = assigned_seq - line_count + fresh.ordinality
2776
- FROM unnest(fresh_event_ids) WITH ORDINALITY AS fresh(event_id, ordinality)
2792
+ SET log_seq = assigned_seq - line_count + (fresh_positions->>event.event_id)::bigint
2777
2793
  WHERE event.runtime_scope = ${quoteLiteral(scope)}
2778
2794
  AND event.org_id = run_org
2779
- AND event.run_id = observation.run_id
2780
- AND event.event_id = ANY(fresh_event_ids)
2781
- AND event.event_id = fresh.event_id;
2795
+ AND event.event_id = ANY(fresh_event_ids);
2782
2796
  END IF;
2783
2797
  RETURN;
2784
2798
  END
@@ -0,0 +1,31 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+ var _chunkC4YFKD7Bjs = require('./chunk-C4YFKD7B.js');
13
+ require('./chunk-RQJORG4F.js');
14
+ require('./chunk-QFD3VXQS.js');
15
+ require('./chunk-XNYIZMNQ.js');
16
+ require('./chunk-B6SRSDBH.js');
17
+ require('./chunk-7P5AA3SN.js');
18
+ require('./chunk-OG64RBAC.js');
19
+ require('./chunk-COGTRVWW.js');
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+ exports.EXIT_WORKSPACE_MISMATCH = _chunkC4YFKD7Bjs.EXIT_WORKSPACE_MISMATCH; exports.clearPendingClaim = _chunkC4YFKD7Bjs.clearPendingClaim; exports.clearSatisfiedPendingClaim = _chunkC4YFKD7Bjs.clearSatisfiedPendingClaim; exports.handleRegister = _chunkC4YFKD7Bjs.handleRegister; exports.handleStatus = _chunkC4YFKD7Bjs.handleStatus; exports.handleWait = _chunkC4YFKD7Bjs.handleWait; exports.readPendingAuthClaim = _chunkC4YFKD7Bjs.readPendingAuthClaim; exports.registerAuthCommands = _chunkC4YFKD7Bjs.registerAuthCommands; exports.reportSetupCompleted = _chunkC4YFKD7Bjs.reportSetupCompleted; exports.resolvePendingAuthClaimForResume = _chunkC4YFKD7Bjs.resolvePendingAuthClaimForResume;
@@ -9,11 +9,11 @@ import {
9
9
  registerAuthCommands,
10
10
  reportSetupCompleted,
11
11
  resolvePendingAuthClaimForResume
12
- } from "./chunk-CQQ5N4YO.mjs";
13
- import "./chunk-ZDEO3EGW.mjs";
14
- import "./chunk-U3FUXTIB.mjs";
12
+ } from "./chunk-GVXFIFI3.mjs";
13
+ import "./chunk-XAXLATYC.mjs";
14
+ import "./chunk-YK2XGEY3.mjs";
15
15
  import "./chunk-DLIRSHV6.mjs";
16
- import "./chunk-RRDCBCRI.mjs";
16
+ import "./chunk-HEN4YY2R.mjs";
17
17
  import "./chunk-NXGCO4JB.mjs";
18
18
  import "./chunk-WZYKRD7T.mjs";
19
19
  import "./chunk-KRD6H754.mjs";