@duckcodeailabs/dql-agent 1.14.2 → 1.14.4

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 (196) hide show
  1. package/dist/agent-run-engine.d.ts +239 -4
  2. package/dist/agent-run-engine.d.ts.map +1 -1
  3. package/dist/agent-run-engine.js +2924 -85
  4. package/dist/agent-run-engine.js.map +1 -1
  5. package/dist/agent-run-gates.d.ts.map +1 -1
  6. package/dist/agent-run-gates.js +51 -3
  7. package/dist/agent-run-gates.js.map +1 -1
  8. package/dist/agent-run-planner.d.ts +6 -0
  9. package/dist/agent-run-planner.d.ts.map +1 -1
  10. package/dist/agent-run-planner.js +2 -0
  11. package/dist/agent-run-planner.js.map +1 -1
  12. package/dist/agent-run-store.d.ts.map +1 -1
  13. package/dist/agent-run-store.js +591 -11
  14. package/dist/agent-run-store.js.map +1 -1
  15. package/dist/agentic/analyst-loop.d.ts +9 -1
  16. package/dist/agentic/analyst-loop.d.ts.map +1 -1
  17. package/dist/agentic/analyst-loop.js +204 -4
  18. package/dist/agentic/analyst-loop.js.map +1 -1
  19. package/dist/agentic/assumptions.d.ts +1 -1
  20. package/dist/agentic/assumptions.d.ts.map +1 -1
  21. package/dist/agentic/assumptions.js.map +1 -1
  22. package/dist/agentic/ledger-tools.d.ts.map +1 -1
  23. package/dist/agentic/ledger-tools.js +8 -1
  24. package/dist/agentic/ledger-tools.js.map +1 -1
  25. package/dist/agentic/orchestrator-policy.d.ts +3 -1
  26. package/dist/agentic/orchestrator-policy.d.ts.map +1 -1
  27. package/dist/agentic/orchestrator-policy.js +1 -1
  28. package/dist/agentic/orchestrator-policy.js.map +1 -1
  29. package/dist/agentic/research-agent.d.ts.map +1 -1
  30. package/dist/agentic/research-agent.js +10 -1
  31. package/dist/agentic/research-agent.js.map +1 -1
  32. package/dist/agentic/sql-authorization.d.ts +8 -0
  33. package/dist/agentic/sql-authorization.d.ts.map +1 -1
  34. package/dist/agentic/sql-authorization.js +3 -0
  35. package/dist/agentic/sql-authorization.js.map +1 -1
  36. package/dist/agentic/tool-loop.d.ts +13 -1
  37. package/dist/agentic/tool-loop.d.ts.map +1 -1
  38. package/dist/agentic/tool-loop.js +441 -32
  39. package/dist/agentic/tool-loop.js.map +1 -1
  40. package/dist/analytical-compatibility.d.ts.map +1 -1
  41. package/dist/analytical-compatibility.js +8 -1
  42. package/dist/analytical-compatibility.js.map +1 -1
  43. package/dist/analytical-failure-repair.d.ts.map +1 -1
  44. package/dist/analytical-failure-repair.js +6 -2
  45. package/dist/analytical-failure-repair.js.map +1 -1
  46. package/dist/analytical-frame.d.ts +42 -1
  47. package/dist/analytical-frame.d.ts.map +1 -1
  48. package/dist/analytical-frame.js +490 -26
  49. package/dist/analytical-frame.js.map +1 -1
  50. package/dist/analytical-orchestration.d.ts +1259 -9
  51. package/dist/analytical-orchestration.d.ts.map +1 -1
  52. package/dist/analytical-orchestration.js +970 -84
  53. package/dist/analytical-orchestration.js.map +1 -1
  54. package/dist/answer-loop.d.ts +230 -10
  55. package/dist/answer-loop.d.ts.map +1 -1
  56. package/dist/answer-loop.js +1182 -85
  57. package/dist/answer-loop.js.map +1 -1
  58. package/dist/answer-shape.d.ts +27 -0
  59. package/dist/answer-shape.d.ts.map +1 -1
  60. package/dist/answer-shape.js +55 -0
  61. package/dist/answer-shape.js.map +1 -1
  62. package/dist/ask-observability/index.d.ts +11 -0
  63. package/dist/ask-observability/index.d.ts.map +1 -0
  64. package/dist/ask-observability/index.js +7 -0
  65. package/dist/ask-observability/index.js.map +1 -0
  66. package/dist/ask-observability/instrumentation.d.ts +35 -0
  67. package/dist/ask-observability/instrumentation.d.ts.map +1 -0
  68. package/dist/ask-observability/instrumentation.js +523 -0
  69. package/dist/ask-observability/instrumentation.js.map +1 -0
  70. package/dist/ask-observability/observer.d.ts +62 -0
  71. package/dist/ask-observability/observer.d.ts.map +1 -0
  72. package/dist/ask-observability/observer.js +537 -0
  73. package/dist/ask-observability/observer.js.map +1 -0
  74. package/dist/ask-observability/portable.d.ts +98 -0
  75. package/dist/ask-observability/portable.d.ts.map +1 -0
  76. package/dist/ask-observability/portable.js +1089 -0
  77. package/dist/ask-observability/portable.js.map +1 -0
  78. package/dist/ask-observability/store.d.ts +130 -0
  79. package/dist/ask-observability/store.d.ts.map +1 -0
  80. package/dist/ask-observability/store.js +1114 -0
  81. package/dist/ask-observability/store.js.map +1 -0
  82. package/dist/ask-observability/types.d.ts +380 -0
  83. package/dist/ask-observability/types.d.ts.map +1 -0
  84. package/dist/ask-observability/types.js +2 -0
  85. package/dist/ask-observability/types.js.map +1 -0
  86. package/dist/ask-observability/utils.d.ts +21 -0
  87. package/dist/ask-observability/utils.d.ts.map +1 -0
  88. package/dist/ask-observability/utils.js +102 -0
  89. package/dist/ask-observability/utils.js.map +1 -0
  90. package/dist/ask-runtime/ask-agent-runtime-v2.d.ts +850 -0
  91. package/dist/ask-runtime/ask-agent-runtime-v2.d.ts.map +1 -0
  92. package/dist/ask-runtime/ask-agent-runtime-v2.js +1716 -0
  93. package/dist/ask-runtime/ask-agent-runtime-v2.js.map +1 -0
  94. package/dist/ask-runtime/ask-analyst-runtime.d.ts +95 -0
  95. package/dist/ask-runtime/ask-analyst-runtime.d.ts.map +1 -0
  96. package/dist/ask-runtime/ask-analyst-runtime.js +8280 -0
  97. package/dist/ask-runtime/ask-analyst-runtime.js.map +1 -0
  98. package/dist/conversation/session-store.d.ts +31 -0
  99. package/dist/conversation/session-store.d.ts.map +1 -1
  100. package/dist/conversation/session-store.js +38 -0
  101. package/dist/conversation/session-store.js.map +1 -1
  102. package/dist/conversation/snapshot.d.ts +4 -1
  103. package/dist/conversation/snapshot.d.ts.map +1 -1
  104. package/dist/conversation/snapshot.js +85 -3
  105. package/dist/conversation/snapshot.js.map +1 -1
  106. package/dist/conversation/turn-trust.d.ts.map +1 -1
  107. package/dist/conversation/turn-trust.js +2 -0
  108. package/dist/conversation/turn-trust.js.map +1 -1
  109. package/dist/embeddings/provider.d.ts +1 -0
  110. package/dist/embeddings/provider.d.ts.map +1 -1
  111. package/dist/embeddings/provider.js +18 -0
  112. package/dist/embeddings/provider.js.map +1 -1
  113. package/dist/generated-analytical-proposal.d.ts +37 -1
  114. package/dist/generated-analytical-proposal.d.ts.map +1 -1
  115. package/dist/generated-analytical-proposal.js +246 -3
  116. package/dist/generated-analytical-proposal.js.map +1 -1
  117. package/dist/governed-relational-compiler.d.ts +15 -0
  118. package/dist/governed-relational-compiler.d.ts.map +1 -1
  119. package/dist/governed-relational-compiler.js +99 -1
  120. package/dist/governed-relational-compiler.js.map +1 -1
  121. package/dist/index.d.ts +21 -12
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +14 -7
  124. package/dist/index.js.map +1 -1
  125. package/dist/intent-controller.d.ts +87 -1
  126. package/dist/intent-controller.d.ts.map +1 -1
  127. package/dist/intent-controller.js +2 -2
  128. package/dist/intent-controller.js.map +1 -1
  129. package/dist/kg/build.js +32 -2
  130. package/dist/kg/build.js.map +1 -1
  131. package/dist/meaning-resolution.d.ts +207 -6
  132. package/dist/meaning-resolution.d.ts.map +1 -1
  133. package/dist/meaning-resolution.js +439 -53
  134. package/dist/meaning-resolution.js.map +1 -1
  135. package/dist/metadata/analysis-planner.d.ts.map +1 -1
  136. package/dist/metadata/analysis-planner.js +78 -7
  137. package/dist/metadata/analysis-planner.js.map +1 -1
  138. package/dist/metadata/catalog.d.ts +14 -0
  139. package/dist/metadata/catalog.d.ts.map +1 -1
  140. package/dist/metadata/catalog.js +29 -2
  141. package/dist/metadata/catalog.js.map +1 -1
  142. package/dist/metadata/meaning-evidence.d.ts +28 -2
  143. package/dist/metadata/meaning-evidence.d.ts.map +1 -1
  144. package/dist/metadata/meaning-evidence.js +373 -16
  145. package/dist/metadata/meaning-evidence.js.map +1 -1
  146. package/dist/plan-execution-adapter.d.ts +9 -1
  147. package/dist/plan-execution-adapter.d.ts.map +1 -1
  148. package/dist/plan-execution-adapter.js +93 -13
  149. package/dist/plan-execution-adapter.js.map +1 -1
  150. package/dist/provider-egress.d.ts +28 -11
  151. package/dist/provider-egress.d.ts.map +1 -1
  152. package/dist/provider-egress.js +72 -22
  153. package/dist/provider-egress.js.map +1 -1
  154. package/dist/providers/claude.d.ts +2 -2
  155. package/dist/providers/claude.d.ts.map +1 -1
  156. package/dist/providers/claude.js +201 -37
  157. package/dist/providers/claude.js.map +1 -1
  158. package/dist/providers/dispatch.d.ts +27 -1
  159. package/dist/providers/dispatch.d.ts.map +1 -1
  160. package/dist/providers/dispatch.js +63 -1
  161. package/dist/providers/dispatch.js.map +1 -1
  162. package/dist/providers/gemini.js +10 -10
  163. package/dist/providers/gemini.js.map +1 -1
  164. package/dist/providers/index.d.ts +2 -2
  165. package/dist/providers/index.d.ts.map +1 -1
  166. package/dist/providers/index.js +1 -1
  167. package/dist/providers/index.js.map +1 -1
  168. package/dist/providers/ollama.js +15 -15
  169. package/dist/providers/ollama.js.map +1 -1
  170. package/dist/providers/openai.d.ts +2 -2
  171. package/dist/providers/openai.d.ts.map +1 -1
  172. package/dist/providers/openai.js +213 -43
  173. package/dist/providers/openai.js.map +1 -1
  174. package/dist/providers/types.d.ts +131 -1
  175. package/dist/providers/types.d.ts.map +1 -1
  176. package/dist/providers/types.js.map +1 -1
  177. package/dist/relationship-proof.d.ts +81 -0
  178. package/dist/relationship-proof.d.ts.map +1 -1
  179. package/dist/relationship-proof.js +228 -4
  180. package/dist/relationship-proof.js.map +1 -1
  181. package/dist/requirement-clauses.d.ts +23 -0
  182. package/dist/requirement-clauses.d.ts.map +1 -0
  183. package/dist/requirement-clauses.js +70 -0
  184. package/dist/requirement-clauses.js.map +1 -0
  185. package/dist/resolved-analytical-plan.d.ts +18 -4
  186. package/dist/resolved-analytical-plan.d.ts.map +1 -1
  187. package/dist/resolved-analytical-plan.js +953 -50
  188. package/dist/resolved-analytical-plan.js.map +1 -1
  189. package/dist/router.d.ts +118 -2
  190. package/dist/router.d.ts.map +1 -1
  191. package/dist/router.js +2481 -232
  192. package/dist/router.js.map +1 -1
  193. package/dist/semantic-bridge/compose.d.ts.map +1 -1
  194. package/dist/semantic-bridge/compose.js +23 -4
  195. package/dist/semantic-bridge/compose.js.map +1 -1
  196. package/package.json +4 -4
@@ -37,6 +37,35 @@ export interface ProviderDispatchEvent {
37
37
  * approximation.
38
38
  */
39
39
  export type ProviderDispatchObserver = (event: ProviderDispatchEvent) => Record<string, unknown>;
40
+ /** Content-free completion observation for one already-admitted physical send. */
41
+ export interface ProviderDispatchCompletionEvent {
42
+ provider: ProviderName;
43
+ operation: ProviderDispatchOperation;
44
+ attemptIndex: number;
45
+ model?: string;
46
+ outcome: 'ok' | 'error' | 'cancelled';
47
+ /**
48
+ * The physical boundary which just settled. A successful transport/process
49
+ * observation is deliberately not a successful provider result: parsers and
50
+ * stream consumers can still fail afterwards. Existing providers that do
51
+ * not report this field retain the historical final-result interpretation.
52
+ */
53
+ settlement?: 'transport' | 'process' | 'result';
54
+ httpStatus?: number;
55
+ /** Runtime-only classification input. Observers must never persist this raw value. */
56
+ error?: unknown;
57
+ }
58
+ export type ProviderDispatchCompletionObserver = (event: ProviderDispatchCompletionEvent) => void;
59
+ /** A send that was refused before an HTTP request was admitted. */
60
+ export interface ProviderDispatchRejectionEvent {
61
+ provider: ProviderName;
62
+ operation: ProviderDispatchOperation;
63
+ attemptIndex: number;
64
+ model?: string;
65
+ /** Runtime-only classification input; trace observers persist only its typed diagnostic. */
66
+ error: unknown;
67
+ }
68
+ export type ProviderDispatchRejectionObserver = (event: ProviderDispatchRejectionEvent) => void;
40
69
  export interface ProviderRunOptions {
41
70
  /** Optional model override; otherwise the provider picks a sane default. */
42
71
  model?: string;
@@ -56,6 +85,36 @@ export interface ProviderRunOptions {
56
85
  maxProviderDispatches?: number;
57
86
  /** Server-owned hook invoked immediately before every provider HTTP body send. */
58
87
  onProviderDispatch?: ProviderDispatchObserver;
88
+ /** Server-owned hook invoked when that same physical HTTP send settles. */
89
+ onProviderDispatchComplete?: ProviderDispatchCompletionObserver;
90
+ /** Server-owned hook invoked when admission rejects a would-be physical send. */
91
+ onProviderDispatchRejected?: ProviderDispatchRejectionObserver;
92
+ /**
93
+ * Server-owned lifecycle label for the physical send. Providers must carry
94
+ * this through untouched; the local runtime is the only authority that maps
95
+ * it to an egress receipt and a trace span. It exists so an immutable
96
+ * exploratory-plan correction cannot be miscounted as a second generation.
97
+ */
98
+ dispatchPhase?: import('@duckcodeailabs/dql-core').ProviderDispatchPhaseV1;
99
+ /**
100
+ * Server-owned sub-phase for the bounded analytical planner. It exists only
101
+ * to distinguish one initial proposal from one verifier-directed targeted
102
+ * revision at the local egress ledger; providers cannot use it to select a
103
+ * route or request another planner loop.
104
+ */
105
+ analyticalPlanningKind?: 'initial' | 'targeted_revision';
106
+ /**
107
+ * Server-owned egress purpose paired with {@link dispatchPhase}. Ordinary
108
+ * Ask generation remains content-free; the only normal Ask repair purpose is
109
+ * `repair_sql` and it has no result-row permission.
110
+ */
111
+ egressPurpose?: import('@duckcodeailabs/dql-core').ProviderEgressPurpose;
112
+ /**
113
+ * Server-owned lineage marker for one same-provider transient transport
114
+ * retry. Providers carry it through to the local ledger; callers cannot use
115
+ * it to reopen planning or route selection.
116
+ */
117
+ retryOfAttemptIndex?: number;
59
118
  }
60
119
  export interface AgentToolDefinition {
61
120
  name: string;
@@ -63,6 +122,43 @@ export interface AgentToolDefinition {
63
122
  inputSchema: Record<string, unknown>;
64
123
  run(args: unknown): Promise<unknown>;
65
124
  }
125
+ /**
126
+ * A server-owned update to an in-flight tool conversation.
127
+ *
128
+ * Native tool transports obtain this immediately before every provider send;
129
+ * text transports append the same instruction after every observation. It
130
+ * lets a bounded controller narrow discovery to the next safe action without
131
+ * making a second, hidden planner call or trusting a provider to remember a
132
+ * stale tool list.
133
+ */
134
+ export interface ProviderCurrentToolPolicy {
135
+ /** Canonical tools the provider may request on its next turn. */
136
+ allowedToolNames: readonly string[];
137
+ /** Safe, provider-visible explanation of why the set changed. */
138
+ instruction?: string;
139
+ /**
140
+ * At a physical-send reserve, one of these tools may be the final action.
141
+ * This is intentionally separate from `allowedToolNames`: ordinary tools
142
+ * must never use the last controller turn as a discovery escape hatch.
143
+ */
144
+ terminalActionToolNames?: readonly string[];
145
+ }
146
+ /**
147
+ * Host-owned phase decision for one concrete provider send.
148
+ *
149
+ * A native tool provider can issue several HTTP requests from one logical
150
+ * `generateWithTools` call. The outer Ask runtime is the only component that
151
+ * knows whether its state has advanced from discovery/execution to the one
152
+ * required, post-result `finish_answer` control. This callback lets that
153
+ * runtime classify each physical send at the transport boundary without
154
+ * serializing mutable state to a provider or granting a provider a lifecycle
155
+ * capability.
156
+ */
157
+ export type ProviderPhysicalDispatchPhaseResolver = (input: {
158
+ operation: ProviderDispatchOperation;
159
+ attemptIndex: number;
160
+ requestedPhase?: import('@duckcodeailabs/dql-core').ProviderDispatchPhaseV1;
161
+ }) => import('@duckcodeailabs/dql-core').ProviderDispatchPhaseV1 | undefined;
66
162
  export interface ProviderToolLoopOptions extends ProviderRunOptions {
67
163
  /** Hard cap for provider-visible tool calls in this turn. Default 8. */
68
164
  maxToolCalls?: number;
@@ -82,6 +178,9 @@ export interface ProviderToolLoopOptions extends ProviderRunOptions {
82
178
  allowedResultRowTools?: Record<string, number>;
83
179
  resultRowBudgetGroupByTool?: Record<string, string>;
84
180
  cumulativeResultRowBudgets?: Record<string, number>;
181
+ /** Additional shape caps for bounded local Ask V2 row egress. */
182
+ maxResultColumns?: number;
183
+ maxResultCells?: number;
85
184
  onPayload?: (event: {
86
185
  toolName: string;
87
186
  output: unknown;
@@ -92,7 +191,38 @@ export interface ProviderToolLoopOptions extends ProviderRunOptions {
92
191
  budgetExhausted: boolean;
93
192
  }) => void;
94
193
  };
194
+ /**
195
+ * Optional live tool policy owned by the host runtime. The callback is
196
+ * process-local and is never serialized to a provider. It is evaluated at
197
+ * each transport turn so native and text protocols receive the same current
198
+ * allowed-tool set and safe progress instruction.
199
+ */
200
+ getCurrentToolPolicy?: () => ProviderCurrentToolPolicy | undefined;
201
+ /**
202
+ * Process-local physical-send phase resolver. Only the local Ask runtime
203
+ * installs this. Providers carry it to the wrapper unchanged and may never
204
+ * use it to choose a route, tool, or egress purpose.
205
+ */
206
+ resolvePhysicalDispatchPhase?: ProviderPhysicalDispatchPhaseResolver;
207
+ }
208
+ /**
209
+ * Typed native-tool-loop stop. Native transports normally return final prose,
210
+ * but a live Ask V2 policy must distinguish a physical controller/tool budget
211
+ * stop from an answer. The result deliberately contains no provider payload
212
+ * beyond the already-sanitized final text.
213
+ */
214
+ export interface NativeToolLoopStop {
215
+ version: 1;
216
+ /**
217
+ * A typed controller stop. Deadline stops deliberately remain distinct from
218
+ * a tool budget: callers can preserve an already validated result and show
219
+ * the actual run-boundary recovery action.
220
+ */
221
+ kind: 'tool_budget_exhausted' | 'provider_dispatch_budget_exhausted' | 'invalid_tool_response' | 'run_soft_target_exceeded' | 'run_deadline_insufficient';
222
+ text: string;
223
+ toolCalls: number;
95
224
  }
225
+ export type NativeToolLoopResult = string | NativeToolLoopStop;
96
226
  export interface AgentProvider {
97
227
  readonly name: ProviderName;
98
228
  /**
@@ -105,7 +235,7 @@ export interface AgentProvider {
105
235
  * call supplied tools, append their observations, and resolve with the final
106
236
  * assistant text. Callers must keep a one-shot generate() fallback.
107
237
  */
108
- generateWithTools?(messages: AgentMessage[], tools: AgentToolDefinition[], options?: ProviderToolLoopOptions): Promise<string>;
238
+ generateWithTools?(messages: AgentMessage[], tools: AgentToolDefinition[], options?: ProviderToolLoopOptions): Promise<NativeToolLoopResult>;
109
239
  /**
110
240
  * Optional token streaming. Calls `onDelta` with each text chunk as it arrives
111
241
  * and resolves with the full concatenated text. Providers that omit this fall
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAqHH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAuB,EACvB,QAAwB,EACxB,OAA2B,EAC3B,OAAgC;IAEhC,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmQH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAuB,EACvB,QAAwB,EACxB,OAA2B,EAC3B,OAAgC;IAEhC,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,4 +1,43 @@
1
1
  import type { MetricCapabilityContract, ResolvedRelationshipProofV1 } from '@duckcodeailabs/dql-core';
2
+ import type { AgentEvidenceCandidate } from './meaning-resolution.js';
3
+ /**
4
+ * The immutable, snapshot-bound safety authority for a governed physical
5
+ * relationship. This is deliberately separate from a capability path ID:
6
+ * the path identifies the edge the compiler may use, while this receipt pins
7
+ * the certification and warehouse-validation facts that made that edge safe
8
+ * when the plan froze.
9
+ *
10
+ * This lives beside the local resolved plan rather than the cross-surface
11
+ * semantic proof contract because it describes DQL's local physical registry,
12
+ * not an adapter-native semantic path. Old persisted plans remain readable;
13
+ * a newly compiled cross-entity governed plan must carry this authority.
14
+ */
15
+ export interface GovernedRelationshipSafetyProofV1 {
16
+ version: 1;
17
+ relationshipPathId: string;
18
+ relationshipId: string;
19
+ from: string;
20
+ to: string;
21
+ keys: Array<{
22
+ from: string;
23
+ to: string;
24
+ }>;
25
+ status: 'certified';
26
+ cardinality: 'one_to_one' | 'one_to_many' | 'many_to_one';
27
+ fanout: 'safe';
28
+ staleCertification: false;
29
+ automaticJoinAllowed: true;
30
+ certificationFingerprint: string;
31
+ validation: {
32
+ status: 'passed';
33
+ checkedAt: string;
34
+ queryFingerprint: string;
35
+ proofFingerprint: string;
36
+ };
37
+ evidenceExpiresAt?: string;
38
+ snapshotId: string;
39
+ authorityFingerprint: string;
40
+ }
2
41
  /** Build the sole normalized relationship authority for already selected dimensions. */
3
42
  export declare function buildResolvedRelationshipProofsV1(input: {
4
43
  capability: MetricCapabilityContract;
@@ -8,6 +47,48 @@ export declare function buildResolvedRelationshipProofsV1(input: {
8
47
  executionId: string;
9
48
  snapshotId: string;
10
49
  }): ResolvedRelationshipProofV1[];
50
+ /**
51
+ * Return true only for a cross-model dimension whose capability preserves the
52
+ * exact adapter-native spelling and a non-empty entity path. A leaf name,
53
+ * broad result grain, or DQL relationship is not semantic compiler proof.
54
+ *
55
+ * Own-model dimensions use the primary entity and do not require a
56
+ * relationship proof; callers can handle that case separately.
57
+ */
58
+ export declare function semanticDimensionUsesExactAdapterGrouping(capability: MetricCapabilityContract, dimension: MetricCapabilityContract['dimensions'][number]): boolean;
59
+ /**
60
+ * Return true only when a cross-entity governed capability dimension carries
61
+ * a concrete relationship path that is backed by the *same snapshot's*
62
+ * certified, fresh, automatic, fanout-safe proof records.
63
+ *
64
+ * `resultGrainIds` is intentionally not authority here. It can describe the
65
+ * shape an adapter hopes to return, but cannot prove that the governed DQL
66
+ * compiler has an approved graph from the selected metric entity to the
67
+ * selected dimension. Likewise, a friendly relationship ID without its
68
+ * structured safety record is retrieval evidence, not a join authorization.
69
+ */
70
+ export declare function governedCapabilityDimensionHasFreshAutomaticRelationshipProofV1(input: {
71
+ capability: MetricCapabilityContract;
72
+ dimension: MetricCapabilityContract['dimensions'][number];
73
+ candidates: readonly AgentEvidenceCandidate[];
74
+ /** Captured by the caller when deterministic tests need a stable clock. */
75
+ now?: number;
76
+ }): boolean;
77
+ /**
78
+ * Capture the precise snapshot safety records used by each selected
79
+ * cross-entity governed dimension. The caller persists these in the frozen
80
+ * plan so a registry cannot be silently restamped after planning.
81
+ */
82
+ export declare function buildGovernedRelationshipSafetyProofsV1(input: {
83
+ capability: MetricCapabilityContract;
84
+ dimensions: readonly MetricCapabilityContract['dimensions'][number][];
85
+ candidates: readonly AgentEvidenceCandidate[];
86
+ snapshotId: string;
87
+ /** Captured by the caller when deterministic tests need a stable clock. */
88
+ now?: number;
89
+ }): GovernedRelationshipSafetyProofV1[];
90
+ /** Reject a mutated persisted plan proof before it can authorize SQL. */
91
+ export declare function governedRelationshipSafetyProofIsSelfConsistentV1(proof: GovernedRelationshipSafetyProofV1): boolean;
11
92
  export declare function resolvedRelationshipProofMatches(input: {
12
93
  proof: ResolvedRelationshipProofV1;
13
94
  capability: MetricCapabilityContract;
@@ -1 +1 @@
1
- {"version":3,"file":"relationship-proof.d.ts","sourceRoot":"","sources":["../src/relationship-proof.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EACxB,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAElC,wFAAwF;AACxF,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,UAAU,EAAE,wBAAwB,CAAC;IACrC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,wBAAwB,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,2BAA2B,EAAE,CAwChC;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IACtD,KAAK,EAAE,2BAA2B,CAAC;IACnC,UAAU,EAAE,wBAAwB,CAAC;IACrC,KAAK,EAAE,wBAAwB,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAYV"}
1
+ {"version":3,"file":"relationship-proof.d.ts","sourceRoot":"","sources":["../src/relationship-proof.ts"],"names":[],"mappings":"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"}
@@ -14,11 +14,16 @@ export function buildResolvedRelationshipProofsV1(input) {
14
14
  const nativeGroupingPath = dimension.nativeGroupingPath === undefined
15
15
  ? undefined
16
16
  : [...dimension.nativeGroupingPath];
17
- const kind = relationshipPathIds.length > 0
18
- ? 'dql_relationship_path'
19
- : input.route === 'semantic' && Boolean(input.adapterId)
20
- && Boolean(nativeGroupingReference) && nativeGroupingPath !== undefined
17
+ // A semantic adapter cannot consume a generic DQL relationship ID.
18
+ // Cross-model semantic execution is authorized only by the exact
19
+ // MetricFlow-native group-by frozen on this metric capability. Keep
20
+ // generic relationship paths for relational/exploratory routes only.
21
+ const kind = input.route === 'semantic'
22
+ ? semanticDimensionUsesExactAdapterGrouping(input.capability, dimension)
21
23
  ? 'semantic_native_grouping'
24
+ : undefined
25
+ : relationshipPathIds.length > 0
26
+ ? 'dql_relationship_path'
22
27
  : undefined;
23
28
  if (!kind)
24
29
  return [];
@@ -42,6 +47,190 @@ export function buildResolvedRelationshipProofsV1(input) {
42
47
  })
43
48
  .sort((left, right) => left.dimensionId.localeCompare(right.dimensionId));
44
49
  }
50
+ /**
51
+ * Return true only for a cross-model dimension whose capability preserves the
52
+ * exact adapter-native spelling and a non-empty entity path. A leaf name,
53
+ * broad result grain, or DQL relationship is not semantic compiler proof.
54
+ *
55
+ * Own-model dimensions use the primary entity and do not require a
56
+ * relationship proof; callers can handle that case separately.
57
+ */
58
+ export function semanticDimensionUsesExactAdapterGrouping(capability, dimension) {
59
+ if (dimension.entityId === capability.primaryEntityId)
60
+ return false;
61
+ if (!capability.executionCapabilities.some((execution) => execution.route === 'semantic' && Boolean(execution.adapterId?.trim())))
62
+ return false;
63
+ const nativeGroupingReference = dimension.nativeGroupingReference?.trim();
64
+ const nativeGroupingPath = dimension.nativeGroupingPath?.map((part) => part.trim()).filter(Boolean) ?? [];
65
+ if (!nativeGroupingReference || nativeGroupingPath.length === 0)
66
+ return false;
67
+ const leaf = semanticDimensionLeaf(dimension.dimensionId);
68
+ return Boolean(leaf) && nativeGroupingReference === [...nativeGroupingPath, leaf].join('__');
69
+ }
70
+ /**
71
+ * Return true only when a cross-entity governed capability dimension carries
72
+ * a concrete relationship path that is backed by the *same snapshot's*
73
+ * certified, fresh, automatic, fanout-safe proof records.
74
+ *
75
+ * `resultGrainIds` is intentionally not authority here. It can describe the
76
+ * shape an adapter hopes to return, but cannot prove that the governed DQL
77
+ * compiler has an approved graph from the selected metric entity to the
78
+ * selected dimension. Likewise, a friendly relationship ID without its
79
+ * structured safety record is retrieval evidence, not a join authorization.
80
+ */
81
+ export function governedCapabilityDimensionHasFreshAutomaticRelationshipProofV1(input) {
82
+ const { capability, dimension } = input;
83
+ if (dimension.entityId === capability.primaryEntityId)
84
+ return true;
85
+ return governedCapabilityDimensionSafetyProofsV1(input) !== undefined;
86
+ }
87
+ /**
88
+ * Capture the precise snapshot safety records used by each selected
89
+ * cross-entity governed dimension. The caller persists these in the frozen
90
+ * plan so a registry cannot be silently restamped after planning.
91
+ */
92
+ export function buildGovernedRelationshipSafetyProofsV1(input) {
93
+ const proofs = input.dimensions.flatMap((dimension) => {
94
+ if (dimension.entityId === input.capability.primaryEntityId)
95
+ return [];
96
+ return governedCapabilityDimensionSafetyProofsV1({
97
+ capability: input.capability,
98
+ dimension,
99
+ candidates: input.candidates,
100
+ ...(input.now === undefined ? {} : { now: input.now }),
101
+ snapshotId: input.snapshotId,
102
+ }) ?? [];
103
+ });
104
+ return [...new Map(proofs.map((proof) => [proof.authorityFingerprint, proof])).values()]
105
+ .sort((left, right) => left.relationshipPathId.localeCompare(right.relationshipPathId)
106
+ || left.relationshipId.localeCompare(right.relationshipId));
107
+ }
108
+ function governedCapabilityDimensionSafetyProofsV1(input) {
109
+ const { capability, dimension } = input;
110
+ if (dimension.entityId === capability.primaryEntityId)
111
+ return [];
112
+ const pathIds = new Map((dimension.relationshipPathIds ?? [])
113
+ .map((pathId) => [normalizeRelationshipIdentity(pathId), pathId.trim()])
114
+ .filter(([normalized, original]) => Boolean(normalized && original)));
115
+ if (pathIds.size === 0)
116
+ return undefined;
117
+ const proofsByPathId = new Map();
118
+ for (const candidate of input.candidates) {
119
+ if (candidate.eligible === false)
120
+ continue;
121
+ const referenced = new Set((candidate.relationshipEvidence ?? [])
122
+ .map(normalizeRelationshipIdentity)
123
+ .filter(Boolean));
124
+ if (referenced.size === 0)
125
+ continue;
126
+ for (const safety of candidate.relationshipSafety ?? []) {
127
+ if (!relationshipSafetyAllowsFreshAutomaticGovernedProof(safety, input.now))
128
+ continue;
129
+ const identities = relationshipSafetyIdentities(safety);
130
+ // A safety object detached from the carrier's relationship evidence is
131
+ // not snapshot authority. This mirrors the router's join gate and
132
+ // prevents a neighboring, unrelated proof from satisfying a path ID.
133
+ if (!identities.some((identity) => referenced.has(identity)))
134
+ continue;
135
+ for (const pathId of pathIds.keys()) {
136
+ if (identities.includes(pathId))
137
+ proofsByPathId.set(pathId, safety);
138
+ }
139
+ }
140
+ }
141
+ if (proofsByPathId.size !== pathIds.size)
142
+ return undefined;
143
+ // A collection of individually safe proofs still must describe an actual
144
+ // graph from the selected metric entity to this exact cross-entity field.
145
+ // Do not infer a traversal from names, result grain, or shared leaves.
146
+ const adjacency = new Map();
147
+ const connect = (left, right) => {
148
+ if (!adjacency.has(left))
149
+ adjacency.set(left, new Set());
150
+ if (!adjacency.has(right))
151
+ adjacency.set(right, new Set());
152
+ adjacency.get(left).add(right);
153
+ adjacency.get(right).add(left);
154
+ };
155
+ for (const proof of proofsByPathId.values()) {
156
+ const from = normalizeRelationshipIdentity(proof.from ?? '');
157
+ const to = normalizeRelationshipIdentity(proof.to ?? '');
158
+ if (!from || !to)
159
+ return undefined;
160
+ connect(from, to);
161
+ }
162
+ const source = normalizeRelationshipIdentity(capability.primaryEntityId);
163
+ const target = normalizeRelationshipIdentity(dimension.entityId);
164
+ if (!source || !target)
165
+ return undefined;
166
+ const pending = [source];
167
+ const seen = new Set(pending);
168
+ while (pending.length > 0) {
169
+ const current = pending.shift();
170
+ if (current === target) {
171
+ return [...proofsByPathId.entries()]
172
+ .map(([normalizedPathId, safety]) => governedRelationshipSafetyProof({
173
+ relationshipPathId: pathIds.get(normalizedPathId),
174
+ safety,
175
+ ...(input.snapshotId ? { snapshotId: input.snapshotId } : {}),
176
+ }));
177
+ }
178
+ for (const next of adjacency.get(current) ?? []) {
179
+ if (seen.has(next))
180
+ continue;
181
+ seen.add(next);
182
+ pending.push(next);
183
+ }
184
+ }
185
+ return undefined;
186
+ }
187
+ function governedRelationshipSafetyProof(input) {
188
+ const validation = input.safety.validation;
189
+ // Callers reach this only after `relationshipSafetyAllowsFreshAutomatic…`.
190
+ // Keep the explicit assertions here so an independent future caller cannot
191
+ // accidentally serialize a partial safety record into a frozen plan.
192
+ if (!relationshipSafetyAllowsFreshAutomaticGovernedProof(input.safety)
193
+ || !validation
194
+ || !input.safety.from
195
+ || !input.safety.to
196
+ || !input.safety.certificationFingerprint
197
+ || !validation.checkedAt
198
+ || !validation.queryFingerprint
199
+ || !validation.proofFingerprint
200
+ || !['one_to_one', 'one_to_many', 'many_to_one'].includes(input.safety.cardinality ?? '')) {
201
+ throw new Error('Cannot serialize an invalid governed relationship safety proof.');
202
+ }
203
+ const body = {
204
+ version: 1,
205
+ relationshipPathId: input.relationshipPathId,
206
+ relationshipId: input.safety.id,
207
+ from: input.safety.from,
208
+ to: input.safety.to,
209
+ keys: [...input.safety.keys]
210
+ .map((key) => ({ from: key.from, to: key.to }))
211
+ .sort((left, right) => `${left.from}:${left.to}`.localeCompare(`${right.from}:${right.to}`)),
212
+ status: 'certified',
213
+ cardinality: input.safety.cardinality,
214
+ fanout: 'safe',
215
+ staleCertification: false,
216
+ automaticJoinAllowed: true,
217
+ certificationFingerprint: input.safety.certificationFingerprint,
218
+ validation: {
219
+ status: 'passed',
220
+ checkedAt: validation.checkedAt,
221
+ queryFingerprint: validation.queryFingerprint,
222
+ proofFingerprint: validation.proofFingerprint,
223
+ },
224
+ ...(input.safety.evidenceExpiresAt ? { evidenceExpiresAt: input.safety.evidenceExpiresAt } : {}),
225
+ snapshotId: input.snapshotId ?? 'snapshot-unavailable',
226
+ };
227
+ return { ...body, authorityFingerprint: fingerprint(body) };
228
+ }
229
+ /** Reject a mutated persisted plan proof before it can authorize SQL. */
230
+ export function governedRelationshipSafetyProofIsSelfConsistentV1(proof) {
231
+ const { authorityFingerprint, ...body } = proof;
232
+ return fingerprint(body) === authorityFingerprint;
233
+ }
45
234
  export function resolvedRelationshipProofMatches(input) {
46
235
  const expected = buildResolvedRelationshipProofsV1({
47
236
  capability: input.capability,
@@ -58,6 +247,41 @@ export function resolvedRelationshipProofMatches(input) {
58
247
  function fingerprint(value) {
59
248
  return createHash('sha256').update(stableStringify(value)).digest('hex');
60
249
  }
250
+ function relationshipSafetyAllowsFreshAutomaticGovernedProof(safety, now = Date.now()) {
251
+ const validation = safety.validation;
252
+ const checkedAt = Date.parse(validation?.checkedAt ?? '');
253
+ const expiresAt = safety.evidenceExpiresAt === undefined
254
+ ? undefined
255
+ : Date.parse(safety.evidenceExpiresAt);
256
+ return safety.status === 'certified'
257
+ && safety.staleCertification === false
258
+ && safety.automaticJoinAllowed === true
259
+ && safety.fanout === 'safe'
260
+ && ['one_to_one', 'one_to_many', 'many_to_one'].includes(safety.cardinality ?? '')
261
+ && Boolean(safety.from?.trim() && safety.to?.trim())
262
+ && Boolean(safety.certificationFingerprint?.trim())
263
+ && Boolean(validation)
264
+ && validation?.status === 'passed'
265
+ && Boolean(validation?.queryFingerprint?.trim())
266
+ && Boolean(validation?.proofFingerprint?.trim())
267
+ && Number.isFinite(checkedAt)
268
+ && (expiresAt === undefined || Number.isFinite(expiresAt) && expiresAt > now)
269
+ && safety.keys.length > 0
270
+ && safety.keys.every((key) => Boolean(key.from.trim() && key.to.trim()));
271
+ }
272
+ function relationshipSafetyIdentities(safety) {
273
+ return uniqueSorted([safety.id, ...(safety.aliases ?? [])]
274
+ .map(normalizeRelationshipIdentity)
275
+ .filter(Boolean));
276
+ }
277
+ function normalizeRelationshipIdentity(value) {
278
+ return value.trim().toLowerCase();
279
+ }
280
+ function semanticDimensionLeaf(dimensionId) {
281
+ const local = dimensionId.split(':').at(-1)?.trim();
282
+ const leaf = local?.split('.').at(-1)?.trim();
283
+ return leaf || undefined;
284
+ }
61
285
  function stableStringify(value) {
62
286
  if (Array.isArray(value))
63
287
  return `[${value.map(stableStringify).join(',')}]`;
@@ -1 +1 @@
1
- {"version":3,"file":"relationship-proof.js","sourceRoot":"","sources":["../src/relationship-proof.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relationship-proof.js","sourceRoot":"","sources":["../src/relationship-proof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The single grammar for time-window clauses.
3
+ *
4
+ * Three question parsers each carried their own relative-time regexes, every
5
+ * one requiring the determiner to sit adjacent to the time noun — so "last
6
+ * month" parsed and "last two months" did not, anywhere. The phrase then
7
+ * degraded to a bare `month` grouping while its count was misread as a row
8
+ * limit, and the answer silently changed meaning.
9
+ *
10
+ * This module is the one producer of the typed window. Its accepted forms
11
+ * deliberately MIRROR `resolvePlanTimeRange` (resolved-analytical-plan.ts) —
12
+ * the already-written resolver of "last N units" into UTC bounds — so the
13
+ * producer and the resolver cannot drift: everything parsed here resolves
14
+ * there, via the canonical digits `expression`.
15
+ */
16
+ import type { AnalyticalTimeWindowV1 } from './analytical-orchestration.js';
17
+ /**
18
+ * Parse a relative or named time window from free text. Returns undefined
19
+ * when the question carries no bounded period — a bare grain ("by month") is
20
+ * a grouping, not a window, and stays out of this clause on purpose.
21
+ */
22
+ export declare function parseAnalyticalTimeWindow(question: string): AnalyticalTimeWindowV1 | undefined;
23
+ //# sourceMappingURL=requirement-clauses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirement-clauses.d.ts","sourceRoot":"","sources":["../src/requirement-clauses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAS5E;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CA8C9F"}