@memberjunction/core-entities-server 6.2.0-edge.6 → 6.2.0-edge.7

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 (159) hide show
  1. package/README.md +155 -100
  2. package/dist/custom/MJAIAgentExampleEntityServer.server.d.ts +2 -0
  3. package/dist/custom/MJAIAgentExampleEntityServer.server.d.ts.map +1 -1
  4. package/dist/custom/MJAIAgentExampleEntityServer.server.js +8 -5
  5. package/dist/custom/MJAIAgentExampleEntityServer.server.js.map +1 -1
  6. package/dist/custom/MJAIAgentNoteEntityServer.server.d.ts +2 -0
  7. package/dist/custom/MJAIAgentNoteEntityServer.server.d.ts.map +1 -1
  8. package/dist/custom/MJAIAgentNoteEntityServer.server.js +8 -5
  9. package/dist/custom/MJAIAgentNoteEntityServer.server.js.map +1 -1
  10. package/dist/custom/MJAIAgentRelationshipEntityServer.server.d.ts +17 -0
  11. package/dist/custom/MJAIAgentRelationshipEntityServer.server.d.ts.map +1 -0
  12. package/dist/custom/MJAIAgentRelationshipEntityServer.server.js +71 -0
  13. package/dist/custom/MJAIAgentRelationshipEntityServer.server.js.map +1 -0
  14. package/dist/custom/MJAIAgentSessionEntityServer.server.d.ts +8 -22
  15. package/dist/custom/MJAIAgentSessionEntityServer.server.d.ts.map +1 -1
  16. package/dist/custom/MJAIAgentSessionEntityServer.server.js +24 -1
  17. package/dist/custom/MJAIAgentSessionEntityServer.server.js.map +1 -1
  18. package/dist/custom/MJAIAgentUserPolicyEntityServer.server.d.ts +23 -0
  19. package/dist/custom/MJAIAgentUserPolicyEntityServer.server.d.ts.map +1 -0
  20. package/dist/custom/MJAIAgentUserPolicyEntityServer.server.js +53 -0
  21. package/dist/custom/MJAIAgentUserPolicyEntityServer.server.js.map +1 -0
  22. package/dist/custom/MJAIPromptEntityServer.server.d.ts.map +1 -1
  23. package/dist/custom/MJAIPromptEntityServer.server.js +2 -1
  24. package/dist/custom/MJAIPromptEntityServer.server.js.map +1 -1
  25. package/dist/custom/MJBrandKitEntityServer.server.d.ts +14 -0
  26. package/dist/custom/MJBrandKitEntityServer.server.d.ts.map +1 -0
  27. package/dist/custom/MJBrandKitEntityServer.server.js +75 -0
  28. package/dist/custom/MJBrandKitEntityServer.server.js.map +1 -0
  29. package/dist/custom/MJCompanyIntegrationEntityServer.server.d.ts.map +1 -1
  30. package/dist/custom/MJCompanyIntegrationEntityServer.server.js +1 -0
  31. package/dist/custom/MJCompanyIntegrationEntityServer.server.js.map +1 -1
  32. package/dist/custom/MJComponentEntityServer.server.d.ts +2 -0
  33. package/dist/custom/MJComponentEntityServer.server.d.ts.map +1 -1
  34. package/dist/custom/MJComponentEntityServer.server.js +5 -1
  35. package/dist/custom/MJComponentEntityServer.server.js.map +1 -1
  36. package/dist/custom/MJEntityDocumentEntityServer.server.d.ts.map +1 -1
  37. package/dist/custom/MJEntityDocumentEntityServer.server.js +1 -0
  38. package/dist/custom/MJEntityDocumentEntityServer.server.js.map +1 -1
  39. package/dist/custom/MJListDetailEntityServer.server.d.ts.map +1 -1
  40. package/dist/custom/MJListDetailEntityServer.server.js +1 -0
  41. package/dist/custom/MJListDetailEntityServer.server.js.map +1 -1
  42. package/dist/custom/MJQueryEntityServer.server.d.ts +177 -47
  43. package/dist/custom/MJQueryEntityServer.server.d.ts.map +1 -1
  44. package/dist/custom/MJQueryEntityServer.server.js +465 -162
  45. package/dist/custom/MJQueryEntityServer.server.js.map +1 -1
  46. package/dist/custom/MJQuerySQLEntityServer.server.d.ts +15 -18
  47. package/dist/custom/MJQuerySQLEntityServer.server.d.ts.map +1 -1
  48. package/dist/custom/MJQuerySQLEntityServer.server.js +34 -42
  49. package/dist/custom/MJQuerySQLEntityServer.server.js.map +1 -1
  50. package/dist/custom/MJTagEntityServer.server.d.ts +2 -0
  51. package/dist/custom/MJTagEntityServer.server.d.ts.map +1 -1
  52. package/dist/custom/MJTagEntityServer.server.js +13 -7
  53. package/dist/custom/MJTagEntityServer.server.js.map +1 -1
  54. package/dist/custom/MJUserRoutineEntityServer.server.d.ts.map +1 -1
  55. package/dist/custom/MJUserRoutineEntityServer.server.js +8 -1
  56. package/dist/custom/MJUserRoutineEntityServer.server.js.map +1 -1
  57. package/dist/custom/query-extraction/childRowWriter.d.ts +77 -0
  58. package/dist/custom/query-extraction/childRowWriter.d.ts.map +1 -0
  59. package/dist/custom/query-extraction/childRowWriter.js +277 -0
  60. package/dist/custom/query-extraction/childRowWriter.js.map +1 -0
  61. package/dist/custom/query-extraction/compositionTargets.d.ts +40 -0
  62. package/dist/custom/query-extraction/compositionTargets.d.ts.map +1 -0
  63. package/dist/custom/query-extraction/compositionTargets.js +99 -0
  64. package/dist/custom/query-extraction/compositionTargets.js.map +1 -0
  65. package/dist/custom/query-extraction/declared.d.ts +79 -0
  66. package/dist/custom/query-extraction/declared.d.ts.map +1 -0
  67. package/dist/custom/query-extraction/declared.js +91 -0
  68. package/dist/custom/query-extraction/declared.js.map +1 -0
  69. package/dist/custom/query-extraction/describeFacts.d.ts +40 -0
  70. package/dist/custom/query-extraction/describeFacts.d.ts.map +1 -0
  71. package/dist/custom/query-extraction/describeFacts.js +225 -0
  72. package/dist/custom/query-extraction/describeFacts.js.map +1 -0
  73. package/dist/custom/query-extraction/descriptionPass.d.ts +23 -0
  74. package/dist/custom/query-extraction/descriptionPass.d.ts.map +1 -0
  75. package/dist/custom/query-extraction/descriptionPass.js +95 -0
  76. package/dist/custom/query-extraction/descriptionPass.js.map +1 -0
  77. package/dist/custom/query-extraction/extractQuery.d.ts +25 -0
  78. package/dist/custom/query-extraction/extractQuery.d.ts.map +1 -0
  79. package/dist/custom/query-extraction/extractQuery.js +146 -0
  80. package/dist/custom/query-extraction/extractQuery.js.map +1 -0
  81. package/dist/custom/query-extraction/extractionTypes.d.ts +133 -0
  82. package/dist/custom/query-extraction/extractionTypes.d.ts.map +1 -0
  83. package/dist/custom/query-extraction/extractionTypes.js +2 -0
  84. package/dist/custom/query-extraction/extractionTypes.js.map +1 -0
  85. package/dist/custom/query-extraction/index.d.ts +16 -0
  86. package/dist/custom/query-extraction/index.d.ts.map +1 -1
  87. package/dist/custom/query-extraction/index.js +11 -1
  88. package/dist/custom/query-extraction/index.js.map +1 -1
  89. package/dist/custom/query-extraction/pipeline.d.ts +6 -2
  90. package/dist/custom/query-extraction/pipeline.d.ts.map +1 -1
  91. package/dist/custom/query-extraction/pipeline.js +21 -14
  92. package/dist/custom/query-extraction/pipeline.js.map +1 -1
  93. package/dist/custom/query-extraction/resolve.d.ts +7 -2
  94. package/dist/custom/query-extraction/resolve.d.ts.map +1 -1
  95. package/dist/custom/query-extraction/resolve.js +17 -14
  96. package/dist/custom/query-extraction/resolve.js.map +1 -1
  97. package/dist/custom/query-extraction/sourceBinding.d.ts +57 -0
  98. package/dist/custom/query-extraction/sourceBinding.d.ts.map +1 -0
  99. package/dist/custom/query-extraction/sourceBinding.js +104 -0
  100. package/dist/custom/query-extraction/sourceBinding.js.map +1 -0
  101. package/dist/custom/query-extraction/sync.d.ts +27 -3
  102. package/dist/custom/query-extraction/sync.d.ts.map +1 -1
  103. package/dist/custom/query-extraction/sync.js +69 -44
  104. package/dist/custom/query-extraction/sync.js.map +1 -1
  105. package/dist/custom/query-extraction/templateFacts.d.ts +62 -0
  106. package/dist/custom/query-extraction/templateFacts.d.ts.map +1 -0
  107. package/dist/custom/query-extraction/templateFacts.js +229 -0
  108. package/dist/custom/query-extraction/templateFacts.js.map +1 -0
  109. package/dist/custom/query-extraction/types.d.ts +4 -0
  110. package/dist/custom/query-extraction/types.d.ts.map +1 -1
  111. package/dist/custom/query-refresh/QueryExtractionService.d.ts +54 -0
  112. package/dist/custom/query-refresh/QueryExtractionService.d.ts.map +1 -0
  113. package/dist/custom/query-refresh/QueryExtractionService.js +207 -0
  114. package/dist/custom/query-refresh/QueryExtractionService.js.map +1 -0
  115. package/dist/custom/query-refresh/QueryRefreshExtractionServerOperation.d.ts +28 -0
  116. package/dist/custom/query-refresh/QueryRefreshExtractionServerOperation.d.ts.map +1 -0
  117. package/dist/custom/query-refresh/QueryRefreshExtractionServerOperation.js +106 -0
  118. package/dist/custom/query-refresh/QueryRefreshExtractionServerOperation.js.map +1 -0
  119. package/dist/custom/query-refresh/index.d.ts +14 -0
  120. package/dist/custom/query-refresh/index.d.ts.map +1 -0
  121. package/dist/custom/query-refresh/index.js +10 -0
  122. package/dist/custom/query-refresh/index.js.map +1 -0
  123. package/dist/custom/query-refresh/queryRebind.d.ts +33 -0
  124. package/dist/custom/query-refresh/queryRebind.d.ts.map +1 -0
  125. package/dist/custom/query-refresh/queryRebind.js +85 -0
  126. package/dist/custom/query-refresh/queryRebind.js.map +1 -0
  127. package/dist/custom/query-refresh/refreshAuthorization.d.ts +29 -0
  128. package/dist/custom/query-refresh/refreshAuthorization.d.ts.map +1 -0
  129. package/dist/custom/query-refresh/refreshAuthorization.js +66 -0
  130. package/dist/custom/query-refresh/refreshAuthorization.js.map +1 -0
  131. package/dist/custom/query-refresh/refreshFormat.d.ts +16 -0
  132. package/dist/custom/query-refresh/refreshFormat.d.ts.map +1 -0
  133. package/dist/custom/query-refresh/refreshFormat.js +67 -0
  134. package/dist/custom/query-refresh/refreshFormat.js.map +1 -0
  135. package/dist/custom/query-refresh/refreshOrder.d.ts +25 -0
  136. package/dist/custom/query-refresh/refreshOrder.d.ts.map +1 -0
  137. package/dist/custom/query-refresh/refreshOrder.js +95 -0
  138. package/dist/custom/query-refresh/refreshOrder.js.map +1 -0
  139. package/dist/custom/query-refresh/refreshSelection.d.ts +15 -0
  140. package/dist/custom/query-refresh/refreshSelection.d.ts.map +1 -0
  141. package/dist/custom/query-refresh/refreshSelection.js +99 -0
  142. package/dist/custom/query-refresh/refreshSelection.js.map +1 -0
  143. package/dist/custom/query-refresh/refreshTypes.d.ts +81 -0
  144. package/dist/custom/query-refresh/refreshTypes.d.ts.map +1 -0
  145. package/dist/custom/query-refresh/refreshTypes.js +5 -0
  146. package/dist/custom/query-refresh/refreshTypes.js.map +1 -0
  147. package/dist/custom/util.d.ts +8 -0
  148. package/dist/custom/util.d.ts.map +1 -1
  149. package/dist/custom/util.js +18 -1
  150. package/dist/custom/util.js.map +1 -1
  151. package/dist/engines/QueryEngineServer.d.ts +4 -1
  152. package/dist/engines/QueryEngineServer.d.ts.map +1 -1
  153. package/dist/engines/QueryEngineServer.js +10 -7
  154. package/dist/engines/QueryEngineServer.js.map +1 -1
  155. package/dist/index.d.ts +4 -0
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +4 -0
  158. package/dist/index.js.map +1 -1
  159. package/package.json +30 -30
@@ -1,20 +1,49 @@
1
1
  import { EntitySaveOptions, SimpleEmbeddingResult } from "@memberjunction/core";
2
2
  import { MJQueryEntityExtended } from "@memberjunction/core-entities";
3
+ import type { DeclaredQueryChildren, QueryExtractionOverride, QueryExtractionResult, ChildRowWriteSummary } from "./query-extraction/index.js";
3
4
  /**
4
- * Server-side query entity with embedding generation, SQL extraction pipeline,
5
- * and dialect auto-conversion. Extends `MJQueryEntityExtended` which provides
6
- * child-relationship getters and business logic available on both client and server.
5
+ * Server-side query entity with embedding generation, SQL extraction, and dialect auto-conversion.
6
+ * Extends `MJQueryEntityExtended`, which provides the child-relationship getters and business
7
+ * logic available on both client and server.
8
+ *
9
+ * **Extraction.** A save of a new query, of a query whose SQL changed, or with
10
+ * {@link ExtractionOverride} `Force`, establishes the query's facts (`ComputeQueryExtraction`):
11
+ * its parameters, compositions and the entities it reads from MJ's parser, and its output fields
12
+ * from the database server's description of each render. Save-time rule errors and repeated
13
+ * output names refuse a new or edited query, with the reasons in the save's result. Once the save
14
+ * of the query row succeeds, the child rows are brought in line with the facts as the system user,
15
+ * keeping what people authored (`WriteExtractedChildRows`), and the query's `UsesTemplate`,
16
+ * `ExtractedSQLHash`, `ExtractionStatus` and `ExtractionMessage` record the run. Empty
17
+ * descriptions are then filled by an LLM after the save's transaction commits, unless the save
18
+ * skips AI actions.
7
19
  */
8
20
  export declare class MJQueryEntityServer extends MJQueryEntityExtended {
9
- /** Optional caller-provided parameter sample values. When set, these override
10
- * LLM-generated sampleValues during the extraction pipeline. Use this to pass
11
- * tested/validated values from the calling system.
12
- * Keys are parameter names, values are the tested sample values. */
21
+ /** Optional caller-provided parameter sample values. When set, these are used as the sample of a
22
+ * parameter extraction adds, and in the renders that are described. Use this to pass tested,
23
+ * validated values from the calling system. Keys are parameter names. */
13
24
  ParameterHints?: Map<string, string>;
25
+ /**
26
+ * What the next save does about extraction: `Auto` (the default) extracts when the query is new
27
+ * or its SQL changed; `Skip` does not extract, so the save-time rules are not applied and the
28
+ * child rows, the Extraction columns and `UsesTemplate` stay as they are (for bulk loaders and
29
+ * fixtures that write those themselves); `Force` extracts even when the SQL did not change.
30
+ * Reset to `Auto` after each save.
31
+ */
32
+ ExtractionOverride: QueryExtractionOverride;
33
+ /** The SQL a re-extraction reads instead of the cached platform variant (set by {@link RerunExtraction}). */
34
+ private platformSQLOverride;
35
+ /** The facts an explicit refresh already established, which its save writes instead of extracting again. */
36
+ private presetExtraction;
37
+ /** Whether the running save is an explicit refresh ({@link ApplyRefreshAsync}). */
38
+ private refreshing;
39
+ /** What the last save's child-row writes changed; `null` when it wrote none. */
40
+ private lastWriteSummary;
14
41
  /**
15
42
  * Simple proxy to local helper method for embeddings. Needed for BaseEntity sub-classes that want to use embeddings built into BaseEntity
16
43
  */
17
44
  protected EmbedTextLocal(textToEmbed: string): Promise<SimpleEmbeddingResult>;
45
+ /** A stored vector from a model other than the default local one is re-embedded on save. */
46
+ protected IsEmbeddingStale(embeddingModelID: string | null): Promise<boolean>;
18
47
  /**
19
48
  * Generates an embedding from composite text (Name + UserQuestion + Description) for richer semantic search.
20
49
  * Stores the vector in EmbeddingVector (JSON) and EmbeddingVectorBinary (float32 bytes, base64), and the
@@ -24,11 +53,79 @@ export declare class MJQueryEntityServer extends MJQueryEntityExtended {
24
53
  * embedder error — all three columns are cleared, so a query whose text changed never keeps a vector
25
54
  * computed from its old text. An embedder error is logged and does not fail the save; the query simply
26
55
  * has no semantic match until its next successful embedding.
56
+ *
57
+ * Does nothing when {@link SkipEmbeddings} is set (a bulk load computes them later), so the stored
58
+ * vector is left as it is.
59
+ *
60
+ * @param textChanged - false when the text is unchanged and only the stored vector's model is stale:
61
+ * a failed embed then keeps the existing vector, which still matches the text.
27
62
  */
28
- protected GenerateCompositeEmbedding(): Promise<void>;
63
+ protected GenerateCompositeEmbedding(textChanged?: boolean): Promise<void>;
29
64
  /** Clears the stored vector (both forms) and the model it was computed with. */
30
65
  private clearEmbedding;
66
+ /** Re-embeds when the embedded text changed, or when the stored vector came from a model other than the default local one. */
67
+ private refreshEmbeddingAsync;
31
68
  Save(options?: EntitySaveOptions): Promise<boolean>;
69
+ /** Whether this object saves through a network (client) provider rather than to a database. */
70
+ private get savesOverNetwork();
71
+ /**
72
+ * The save: facts first (a refusal writes nothing), then the query row (a graph save with any
73
+ * declared children), then the child rows extraction derives, then the approval fingerprint.
74
+ */
75
+ private saveWithExtractionAsync;
76
+ private get hasSQL();
77
+ /**
78
+ * Whether this save extracts, and under which rules: a new or edited query extracts under the
79
+ * save-time rules; a save that writes declared child rows, or a `Force` override, re-extracts an
80
+ * unchanged query under the refresh rules, so the facts of rows it writes are corrected again.
81
+ */
82
+ private planExtraction;
83
+ /**
84
+ * Sets the columns a save records about the SQL before the row is written. `UsesTemplate` is a
85
+ * lexical fact and follows every SQL change; it is never changed by a failed extraction. A save
86
+ * with {@link ExtractionOverride} `Skip` leaves it as the caller set it, like the other
87
+ * extraction results.
88
+ */
89
+ private applyRunColumns;
90
+ /**
91
+ * Gives each field row this save declares the facts extraction established for it, before the
92
+ * graph is written. Facts follow the SQL and the database server whatever a caller declares, so
93
+ * a declaration that carries facts (types, nullability, sequence, source) for another platform is
94
+ * corrected before it is written instead of being written and then corrected, and a new declared
95
+ * row, which may declare only its name and annotations, gets the facts its columns require.
96
+ */
97
+ private applyFactsToDeclaredFields;
98
+ /** Whether the SQL holds a template tag outside comments, read by the lexer. */
99
+ private lexicalUsesTemplate;
100
+ /** The save's result entry for a refused save, carrying the reasons. */
101
+ private refusalResult;
102
+ /**
103
+ * The declared-rows-win hook, run before the save writes anything.
104
+ *
105
+ * A caller can save a query together with child rows it declares, through the `Parameters`,
106
+ * `Fields` and `Entities` collections. When a NEW declared row has the key of a stored row with a
107
+ * different ID whose `DetectionMethod` is not `Manual` (a row extraction created), the stored row
108
+ * is deleted inside the same graph save, before the declared row is inserted. The declared row
109
+ * keeps the ID the caller gave it, which is what makes a metadata file that names its child IDs
110
+ * converge instead of colliding with rows extraction wrote earlier. A stored `Manual` row is never
111
+ * deleted here; a declared row that collides with one fails the save on the database's own
112
+ * uniqueness rule where there is one.
113
+ *
114
+ * Extraction then runs after `super.Save()`, sees the declared rows already written, and treats
115
+ * them like any stored row: their facts are corrected from the SQL, their authored annotations
116
+ * kept.
117
+ *
118
+ * @param options - The save's options. A `ReplayOnly` save, or one that skips related
119
+ * collections, writes no declared rows, so nothing is declared.
120
+ * @returns The keys of the child rows this save declares.
121
+ */
122
+ protected PrepareDeclaredChildrenAsync(options?: EntitySaveOptions): Promise<DeclaredQueryChildren>;
123
+ /**
124
+ * Reads the stored child rows from the database (never a cache, which inside a transaction can
125
+ * miss rows written earlier in it) and queues the extraction-created rows each new declared row
126
+ * replaces for deletion in the graph save.
127
+ */
128
+ private queueReplacedRowDeletionsAsync;
32
129
  /**
33
130
  * Stores the fingerprint of the definition just approved: this row's SQL, template flag and
34
131
  * external source, with its dialect and parameter rows read back from the database. Until this
@@ -39,55 +136,92 @@ export declare class MJQueryEntityServer extends MJQueryEntityExtended {
39
136
  private loadDefinitionRowsAsync;
40
137
  Delete(options?: EntitySaveOptions): Promise<boolean>;
41
138
  /**
42
- * Returns the database platform of the connected database.
43
- * Uses the DB_PLATFORM env var (same source as MJServer's provider selection).
139
+ * The platform the query is extracted for: the platform of the provider this entity saves
140
+ * through, so two providers on different platforms in one process each extract for their own.
44
141
  */
45
- private get currentPlatform();
142
+ private get extractionPlatform();
143
+ /** The provider as extraction reads and writes through it; `null` when it cannot read views and create entity objects. */
144
+ private get extractionProvider();
46
145
  /**
47
- * Resolves the SQL to use for extraction based on the current database platform.
48
- *
49
- * Resolution order:
50
- * 1. MJ: Query SQLs record matching the current platform's dialect → use that SQL
51
- * 2. Base Query.SQL field → fall back if no dialect variant exists
52
- *
53
- * After resolution, validates the SQL is compatible with the current platform's
54
- * dialect by attempting a parse. Logs a warning if the SQL appears to be for a
55
- * different dialect (e.g., T-SQL bracket identifiers on a PostgreSQL database).
146
+ * The user derived child rows are read and written as: the system user, once the caller's save
147
+ * of the query is authorized (the rows mirror SQL the caller was allowed to change, like CodeGen
148
+ * output). The caller when no system user is loaded.
56
149
  */
57
- private resolveExtractionSQL;
150
+ private get extractionUser();
151
+ /** The SQL extraction reads: a re-extraction's override, else the query's SQL for the platform. */
152
+ private get extractionSQL();
153
+ /** Establishes the query's facts (nothing is written); an explicit refresh's facts when it already has them. */
154
+ private computeExtractionAsync;
58
155
  /**
59
- * Best-effort dialect validation: attempts to parse the SQL with the current platform's
60
- * dialect. If parsing throws, logs a warning — the SQL may be for a different dialect.
61
- *
62
- * This is a heuristic, not a guarantee: node-sql-parser is permissive on many
63
- * dialect-specific functions (ISNULL, GETDATE pass in both dialects), so a passing
64
- * parse does not prove the SQL is correct for this dialect. But a failing parse is a
65
- * strong signal of incompatibility.
156
+ * The queries the SQL composes, read on this save's provider with every cache bypassed, so a
157
+ * target saved earlier in the same transaction (one metadata push creating both queries) is
158
+ * found before the shared query cache hears of it. Nothing is read for SQL that composes
159
+ * nothing, or on a provider that cannot run views.
160
+ */
161
+ private readCompositionTargetsAsync;
162
+ /** Loads QueryEngine when this process has not yet (a CLI or sync context); compositions resolve against it. */
163
+ private ensureQueryEngineLoadedAsync;
164
+ /**
165
+ * The parameter rows extraction knows before it runs: the stored rows, read from the database
166
+ * (never the cache), overlaid by the rows this save declares.
66
167
  */
67
- private validateDialectCompatibility;
168
+ private knownParametersAsync;
169
+ private storedParametersAsync;
68
170
  /**
69
- * Builds the QuerySyncContext from this entity instance for use by the extraction pipeline.
70
- * Resolves the SQL to the appropriate dialect variant for the connected database.
171
+ * Writes the derived child rows as the system user, inside the caller's transaction when there
172
+ * is one, then queues the description pass. A failed write is recorded on the query
173
+ * (`ExtractionStatus` `Error`) rather than failing a save whose row is already written.
71
174
  */
72
- private buildSyncContext;
175
+ private writeExtractionAsync;
176
+ /** An entity's name from the saving provider's catalog, for reporting; the ID when it is not there. */
177
+ private entityNameOf;
178
+ private recordWriteFailureAsync;
179
+ /** The post-commit token of the caller's transaction, captured before the save writes anything. */
180
+ private capturePostCommitToken;
73
181
  /**
74
- * Re-runs the extraction pipeline on this query. Called by MJQuerySQLEntityServer
75
- * when a dialect variant matching the current platform is saved — this handles
76
- * the timing issue where the parent Query is saved before its QuerySQL children
77
- * exist in the cache.
182
+ * Queues the LLM description pass to run after the caller's transaction commits, when some row
183
+ * has no description and the save does not skip AI actions. No LLM call is made inside the
184
+ * transaction. A save-triggered extraction that changed no child row does not queue it: the
185
+ * rows are as the last run left them, so a repeated save (a re-push of unchanged metadata) does
186
+ * not call the LLM again, and a pass that failed is not retried, and recorded, on every save.
187
+ * An explicit refresh that asks for the pass always queues it.
188
+ */
189
+ private queueDescriptionPass;
190
+ /**
191
+ * Re-extracts this query: a save with {@link ExtractionOverride} `Force`. Called by
192
+ * `MJQuerySQLEntityServer` when a dialect variant for the current platform is saved.
78
193
  *
79
- * @param skipAIEnrichment Skip the LLM enrichment stage, as `SkipEntityAIActions` does for Save.
194
+ * @param skipAIEnrichment Skip the description pass, as `SkipEntityAIActions` does for a save.
195
+ * @param platformSQL The SQL to extract from (the variant just saved), instead of the cached
196
+ * platform variant, which inside a transaction may not hold it yet.
197
+ */
198
+ RerunExtraction(skipAIEnrichment?: boolean, platformSQL?: string): Promise<void>;
199
+ /**
200
+ * Establishes this saved query's facts under the refresh rules (a save-time rule error is
201
+ * recorded, never a refusal), as the save would, and writes nothing. The facts are read on the
202
+ * provider this entity was loaded with, for its platform.
80
203
  */
81
- RerunExtraction(skipAIEnrichment?: boolean): Promise<void>;
204
+ ComputeRefreshExtractionAsync(): Promise<QueryExtractionResult>;
82
205
  /**
83
- * Runs the extraction pipeline and saves the UsesTemplate flag.
84
- * On error, sets UsesTemplate=false and attempts to save so the query remains usable.
206
+ * The child-row changes `extraction` would make, worked out against the rows stored now and
207
+ * read as this entity's context user. Nothing is written.
208
+ */
209
+ PreviewRefreshAsync(extraction: QueryExtractionResult, entityName?: (entityID: string) => string): Promise<ChildRowWriteSummary>;
210
+ /**
211
+ * Writes `extraction` (from {@link ComputeRefreshExtractionAsync}): a save with
212
+ * {@link ExtractionOverride} `Force` that records the run on the query and brings the child
213
+ * rows in line with the facts. Unlike a save-triggered extraction, the child rows are written
214
+ * as this entity's context user, so each write is checked against that user's permissions, and
215
+ * a failed write fails the refresh instead of being recorded on the query. SQL, dialect
216
+ * variants and the embedding are never written.
85
217
  *
86
- * @param skipAIEnrichment Skip the LLM enrichment stage (the save asked to skip AI actions).
218
+ * @param withAI Queue the LLM description pass for rows still without a description.
219
+ * @returns What the child-row writes changed.
220
+ * @throws Error when the save or a child-row write fails; the caller's transaction should be rolled back.
87
221
  */
88
- private extractAndSyncDataAsync;
222
+ ApplyRefreshAsync(extraction: QueryExtractionResult, withAI: boolean): Promise<ChildRowWriteSummary | null>;
89
223
  /**
90
- * Cleans up all extraction data when SQL is empty, then saves the updated UsesTemplate flag.
224
+ * Cleans up all extraction data when SQL is empty.
91
225
  */
92
226
  private cleanupEmptyQueryAsync;
93
227
  /**
@@ -103,9 +237,5 @@ export declare class MJQueryEntityServer extends MJQueryEntityExtended {
103
237
  * Creates or updates a QuerySQL record for the given dialect.
104
238
  */
105
239
  private upsertQuerySQLRecord;
106
- /**
107
- * Removes all QuerySQL records for this query. Called during cleanup operations.
108
- */
109
- private removeAllQuerySQLRecordsAsync;
110
240
  }
111
241
  //# sourceMappingURL=MJQueryEntityServer.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MJQueryEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJQueryEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,iBAAiB,EAGjB,qBAAqB,EAExB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIH,qBAAqB,EAIxB,MAAM,+BAA+B,CAAC;AAcvC;;;;GAIG;AACH,qBACa,mBAAoB,SAAQ,qBAAqB;IAC1D;;;yEAGqE;IAC9D,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAI5C;;OAEG;cACsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI5F;;;;;;;;;OASG;cACa,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3D,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAQP,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuDlE;;;;OAIG;YACW,6BAA6B;IAW3C,gFAAgF;YAClE,uBAAuB;IActB,MAAM,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBpE;;;OAGG;IACH,OAAO,KAAK,eAAe,GAE1B;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;;;;;;;OAQG;IACH,OAAO,CAAC,4BAA4B;IAgBpC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;;;;;OAOG;IACU,eAAe,CAAC,gBAAgB,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;;;;OAKG;YACW,uBAAuB;IAsBrC;;OAEG;YACW,sBAAsB;IAmBpC;;;OAGG;YACW,wBAAwB;IAiCtC;;OAEG;YACW,sBAAsB;IA4BpC;;OAEG;YACW,oBAAoB;IA4BlC;;OAEG;YACW,6BAA6B;CAgB9C"}
1
+ {"version":3,"file":"MJQueryEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJQueryEntityServer.server.ts"],"names":[],"mappings":"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"}