@duckcodeailabs/dql-agent 1.6.30 → 1.6.32

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 (168) hide show
  1. package/dist/agent-run-engine.d.ts +52 -6
  2. package/dist/agent-run-engine.d.ts.map +1 -1
  3. package/dist/agent-run-engine.js +159 -79
  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 +72 -5
  7. package/dist/agent-run-gates.js.map +1 -1
  8. package/dist/agent-run-planner.d.ts.map +1 -1
  9. package/dist/agent-run-planner.js +13 -0
  10. package/dist/agent-run-planner.js.map +1 -1
  11. package/dist/answer-loop.d.ts +117 -8
  12. package/dist/answer-loop.d.ts.map +1 -1
  13. package/dist/answer-loop.js +1690 -1302
  14. package/dist/answer-loop.js.map +1 -1
  15. package/dist/answer-shape.d.ts +16 -0
  16. package/dist/answer-shape.d.ts.map +1 -0
  17. package/dist/answer-shape.js +85 -0
  18. package/dist/answer-shape.js.map +1 -0
  19. package/dist/cascade/budgets.d.ts +101 -0
  20. package/dist/cascade/budgets.d.ts.map +1 -0
  21. package/dist/cascade/budgets.js +184 -0
  22. package/dist/cascade/budgets.js.map +1 -0
  23. package/dist/cascade/cascade.d.ts +86 -0
  24. package/dist/cascade/cascade.d.ts.map +1 -0
  25. package/dist/cascade/cascade.js +115 -0
  26. package/dist/cascade/cascade.js.map +1 -0
  27. package/dist/cascade/route-policy.d.ts +14 -0
  28. package/dist/cascade/route-policy.d.ts.map +1 -0
  29. package/dist/cascade/route-policy.js +48 -0
  30. package/dist/cascade/route-policy.js.map +1 -0
  31. package/dist/cascade/triage.d.ts +20 -0
  32. package/dist/cascade/triage.d.ts.map +1 -0
  33. package/dist/cascade/triage.js +25 -0
  34. package/dist/cascade/triage.js.map +1 -0
  35. package/dist/conversation/rolling-summary.d.ts +13 -0
  36. package/dist/conversation/rolling-summary.d.ts.map +1 -0
  37. package/dist/conversation/rolling-summary.js +43 -0
  38. package/dist/conversation/rolling-summary.js.map +1 -0
  39. package/dist/conversation/session-store.d.ts +110 -0
  40. package/dist/conversation/session-store.d.ts.map +1 -0
  41. package/dist/conversation/session-store.js +387 -0
  42. package/dist/conversation/session-store.js.map +1 -0
  43. package/dist/conversation/snapshot.d.ts +59 -0
  44. package/dist/conversation/snapshot.d.ts.map +1 -0
  45. package/dist/conversation/snapshot.js +153 -0
  46. package/dist/conversation/snapshot.js.map +1 -0
  47. package/dist/conversation/working-state.d.ts +49 -0
  48. package/dist/conversation/working-state.d.ts.map +1 -0
  49. package/dist/conversation/working-state.js +249 -0
  50. package/dist/conversation/working-state.js.map +1 -0
  51. package/dist/embeddings/provider.d.ts +62 -0
  52. package/dist/embeddings/provider.d.ts.map +1 -1
  53. package/dist/embeddings/provider.js +98 -0
  54. package/dist/embeddings/provider.js.map +1 -1
  55. package/dist/grounding/context-ledger.d.ts +30 -0
  56. package/dist/grounding/context-ledger.d.ts.map +1 -0
  57. package/dist/grounding/context-ledger.js +54 -0
  58. package/dist/grounding/context-ledger.js.map +1 -0
  59. package/dist/grounding/regrounding.d.ts +24 -0
  60. package/dist/grounding/regrounding.d.ts.map +1 -0
  61. package/dist/grounding/regrounding.js +219 -0
  62. package/dist/grounding/regrounding.js.map +1 -0
  63. package/dist/grounding/value-index.d.ts +32 -0
  64. package/dist/grounding/value-index.d.ts.map +1 -0
  65. package/dist/grounding/value-index.js +67 -0
  66. package/dist/grounding/value-index.js.map +1 -0
  67. package/dist/index.d.ts +47 -16
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +104 -13
  70. package/dist/index.js.map +1 -1
  71. package/dist/intent-controller.d.ts +7 -0
  72. package/dist/intent-controller.d.ts.map +1 -1
  73. package/dist/intent-controller.js +22 -1
  74. package/dist/intent-controller.js.map +1 -1
  75. package/dist/kg/build.d.ts.map +1 -1
  76. package/dist/kg/build.js +44 -17
  77. package/dist/kg/build.js.map +1 -1
  78. package/dist/kg/sqlite-fts.d.ts +3 -1
  79. package/dist/kg/sqlite-fts.d.ts.map +1 -1
  80. package/dist/kg/sqlite-fts.js +16 -2
  81. package/dist/kg/sqlite-fts.js.map +1 -1
  82. package/dist/kg/types.d.ts +23 -1
  83. package/dist/kg/types.d.ts.map +1 -1
  84. package/dist/memory/fts-query.d.ts +7 -0
  85. package/dist/memory/fts-query.d.ts.map +1 -0
  86. package/dist/memory/fts-query.js +36 -0
  87. package/dist/memory/fts-query.js.map +1 -0
  88. package/dist/memory/sqlite-memory.d.ts.map +1 -1
  89. package/dist/memory/sqlite-memory.js +1 -30
  90. package/dist/memory/sqlite-memory.js.map +1 -1
  91. package/dist/metadata/analysis-planner.d.ts +23 -0
  92. package/dist/metadata/analysis-planner.d.ts.map +1 -1
  93. package/dist/metadata/analysis-planner.js +432 -2
  94. package/dist/metadata/analysis-planner.js.map +1 -1
  95. package/dist/metadata/block-fit.d.ts +24 -0
  96. package/dist/metadata/block-fit.d.ts.map +1 -0
  97. package/dist/metadata/block-fit.js +373 -0
  98. package/dist/metadata/block-fit.js.map +1 -0
  99. package/dist/metadata/catalog.d.ts +72 -3
  100. package/dist/metadata/catalog.d.ts.map +1 -1
  101. package/dist/metadata/catalog.js +1452 -72
  102. package/dist/metadata/catalog.js.map +1 -1
  103. package/dist/metadata/drafts.d.ts +25 -0
  104. package/dist/metadata/drafts.d.ts.map +1 -1
  105. package/dist/metadata/drafts.js +112 -2
  106. package/dist/metadata/drafts.js.map +1 -1
  107. package/dist/metadata/metric-match.d.ts +55 -6
  108. package/dist/metadata/metric-match.d.ts.map +1 -1
  109. package/dist/metadata/metric-match.js +158 -13
  110. package/dist/metadata/metric-match.js.map +1 -1
  111. package/dist/metadata/sql-context-validation.d.ts +13 -1
  112. package/dist/metadata/sql-context-validation.d.ts.map +1 -1
  113. package/dist/metadata/sql-context-validation.js +172 -19
  114. package/dist/metadata/sql-context-validation.js.map +1 -1
  115. package/dist/metadata/sql-retrieval.d.ts +3 -2
  116. package/dist/metadata/sql-retrieval.d.ts.map +1 -1
  117. package/dist/metadata/sql-retrieval.js +6 -4
  118. package/dist/metadata/sql-retrieval.js.map +1 -1
  119. package/dist/providers/claude.d.ts +2 -1
  120. package/dist/providers/claude.d.ts.map +1 -1
  121. package/dist/providers/claude.js +151 -28
  122. package/dist/providers/claude.js.map +1 -1
  123. package/dist/providers/gemini.d.ts.map +1 -1
  124. package/dist/providers/gemini.js +20 -0
  125. package/dist/providers/gemini.js.map +1 -1
  126. package/dist/providers/index.d.ts +3 -1
  127. package/dist/providers/index.d.ts.map +1 -1
  128. package/dist/providers/index.js +1 -0
  129. package/dist/providers/index.js.map +1 -1
  130. package/dist/providers/openai.d.ts +2 -1
  131. package/dist/providers/openai.d.ts.map +1 -1
  132. package/dist/providers/openai.js +156 -0
  133. package/dist/providers/openai.js.map +1 -1
  134. package/dist/providers/reasoning-effort.d.ts +46 -0
  135. package/dist/providers/reasoning-effort.d.ts.map +1 -0
  136. package/dist/providers/reasoning-effort.js +81 -0
  137. package/dist/providers/reasoning-effort.js.map +1 -0
  138. package/dist/providers/tool-output.d.ts +2 -0
  139. package/dist/providers/tool-output.d.ts.map +1 -0
  140. package/dist/providers/tool-output.js +22 -0
  141. package/dist/providers/tool-output.js.map +1 -0
  142. package/dist/providers/types.d.ts +29 -0
  143. package/dist/providers/types.d.ts.map +1 -1
  144. package/dist/providers/types.js.map +1 -1
  145. package/dist/semantic-bridge/compose.d.ts +89 -0
  146. package/dist/semantic-bridge/compose.d.ts.map +1 -0
  147. package/dist/semantic-bridge/compose.js +528 -0
  148. package/dist/semantic-bridge/compose.js.map +1 -0
  149. package/dist/semantic-bridge/member-select.d.ts +23 -0
  150. package/dist/semantic-bridge/member-select.d.ts.map +1 -0
  151. package/dist/semantic-bridge/member-select.js +106 -0
  152. package/dist/semantic-bridge/member-select.js.map +1 -0
  153. package/dist/skills/defaults.d.ts.map +1 -1
  154. package/dist/skills/defaults.js +5 -0
  155. package/dist/skills/defaults.js.map +1 -1
  156. package/dist/synthesize.d.ts +26 -0
  157. package/dist/synthesize.d.ts.map +1 -1
  158. package/dist/synthesize.js +72 -3
  159. package/dist/synthesize.js.map +1 -1
  160. package/dist/tools/registry.d.ts +15 -0
  161. package/dist/tools/registry.d.ts.map +1 -0
  162. package/dist/tools/registry.js +692 -0
  163. package/dist/tools/registry.js.map +1 -0
  164. package/dist/trust/stamp.d.ts +26 -0
  165. package/dist/trust/stamp.d.ts.map +1 -0
  166. package/dist/trust/stamp.js +33 -0
  167. package/dist/trust/stamp.js.map +1 -0
  168. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-policy.d.ts","sourceRoot":"","sources":["../../src/cascade/route-policy.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC;AAEzF,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,UAAU,GACV,UAAU,GACV,iBAAiB,GACjB,WAAW,GACX,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAC9F,MAAM,MAAM,sBAAsB,GAC9B,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,WAAW,CAAC;AAEhB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,oBAAoB,GAC7B,eAAe,CAmBjB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,sBAAsB,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAY/G"}
@@ -0,0 +1,48 @@
1
+ import { looksLikeComposeApp } from '../intent-controller.js';
2
+ export function selectCascadeRunRoute(request, decision) {
3
+ const mode = request.requestedMode ?? 'auto';
4
+ if (mode === 'research')
5
+ return 'research';
6
+ if (mode === 'sql')
7
+ return 'sql_cell';
8
+ if (mode === 'block')
9
+ return 'dql_block_draft';
10
+ if (mode === 'app')
11
+ return 'app_build';
12
+ if (decision.action === 'converse')
13
+ return 'conversation';
14
+ const question = request.question;
15
+ if (looksLikeDqlBlockRequest(question))
16
+ return 'dql_block_draft';
17
+ if (looksLikeSqlCellRequest(question))
18
+ return 'sql_cell';
19
+ if (looksLikeComposeApp(question))
20
+ return 'app_build';
21
+ if (decision.action === 'compose_app')
22
+ return 'app_build';
23
+ if (decision.action === 'investigate')
24
+ return 'research';
25
+ if (decision.action === 'clarify')
26
+ return 'clarify';
27
+ return 'generated_answer';
28
+ }
29
+ export function routeForCascadeAnswerTier(tier) {
30
+ switch (tier) {
31
+ case 'certified_block':
32
+ case 'business_context':
33
+ return 'certified_answer';
34
+ case 'semantic_metric':
35
+ case 'generated_sql':
36
+ case 'no_answer':
37
+ return 'generated_answer';
38
+ default:
39
+ return undefined;
40
+ }
41
+ }
42
+ function looksLikeSqlCellRequest(question) {
43
+ return /\b(sql|query|notebook cell|cell draft|write a select|generate a query)\b/i.test(question);
44
+ }
45
+ function looksLikeDqlBlockRequest(question) {
46
+ return /\b(dql block|block draft|draft block|create.*block|turn .* into .*block|promote .* block)\b/i.test(question);
47
+ }
48
+ //# sourceMappingURL=route-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-policy.js","sourceRoot":"","sources":["../../src/cascade/route-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAgC9D,MAAM,UAAU,qBAAqB,CACnC,OAA4B,EAC5B,QAA8B;IAE9B,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC;IAC7C,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC3C,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,iBAAiB,CAAC;IAC/C,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,WAAW,CAAC;IAEvC,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC;IAE1D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,wBAAwB,CAAC,QAAQ,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACjE,IAAI,uBAAuB,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC;IACzD,IAAI,mBAAmB,CAAC,QAAQ,CAAC;QAAE,OAAO,WAAW,CAAC;IAEtD,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,WAAW,CAAC;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,UAAU,CAAC;IACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEpD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAwC;IAChF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,iBAAiB,CAAC;QACvB,KAAK,kBAAkB;YACrB,OAAO,kBAAkB,CAAC;QAC5B,KAAK,iBAAiB,CAAC;QACvB,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,kBAAkB,CAAC;QAC5B;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAgB;IAC/C,OAAO,2EAA2E,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAgB;IAChD,OAAO,8FAA8F,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvH,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface CascadeMissingContext {
2
+ kind?: string;
3
+ severity?: string;
4
+ message?: string;
5
+ }
6
+ export interface CascadeRouteDecisionLike {
7
+ route?: string;
8
+ missingContext?: CascadeMissingContext[];
9
+ }
10
+ export interface CascadeClarifyInput {
11
+ intent?: string;
12
+ routeDecision?: CascadeRouteDecisionLike;
13
+ hasSemanticMetricMatch?: boolean;
14
+ schemaContextCount?: number;
15
+ allowedRelationCount?: number;
16
+ sourceBlockSqlCount?: number;
17
+ metadataObjectCount?: number;
18
+ }
19
+ export declare function shouldClarifyBeforeGeneration(input: CascadeClarifyInput): boolean;
20
+ //# sourceMappingURL=triage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/cascade/triage.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAgBjF"}
@@ -0,0 +1,25 @@
1
+ export function shouldClarifyBeforeGeneration(input) {
2
+ if (input.hasSemanticMetricMatch)
3
+ return false;
4
+ const routeClarify = input.routeDecision?.route === 'clarify';
5
+ const intentClarify = input.intent === 'clarify';
6
+ if (!routeClarify && !intentClarify)
7
+ return false;
8
+ const missing = input.routeDecision?.missingContext ?? [];
9
+ if (missing.some(isActionableBlockingMissingContext))
10
+ return true;
11
+ const hasUsableContext = (input.schemaContextCount ?? 0) > 0 ||
12
+ (input.allowedRelationCount ?? 0) > 0 ||
13
+ (input.sourceBlockSqlCount ?? 0) > 0 ||
14
+ (input.metadataObjectCount ?? 0) > 0;
15
+ return !hasUsableContext;
16
+ }
17
+ function isActionableBlockingMissingContext(item) {
18
+ if (item.severity !== 'blocking')
19
+ return false;
20
+ if (item.kind !== 'metadata')
21
+ return true;
22
+ const message = item.message ?? '';
23
+ return !/^No certified block, semantic metric, dbt model, or runtime schema matched strongly enough to answer safely\./i.test(message);
24
+ }
25
+ //# sourceMappingURL=triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/cascade/triage.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,6BAA6B,CAAC,KAA0B;IACtE,IAAI,KAAK,CAAC,sBAAsB;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,EAAE,KAAK,KAAK,SAAS,CAAC;IAC9D,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;IACjD,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IAElD,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,cAAc,IAAI,EAAE,CAAC;IAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC;QAAE,OAAO,IAAI,CAAC;IAElE,MAAM,gBAAgB,GACpB,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC,GAAG,CAAC;QACnC,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,CAAC;QACrC,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,CAAC;QACpC,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEvC,OAAO,CAAC,gBAAgB,CAAC;AAC3B,CAAC;AAED,SAAS,kCAAkC,CAAC,IAA2B;IACrE,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,OAAO,CAAC,gHAAgH,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzI,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Deterministic rolling summary: turns older than the recent verbatim window are
3
+ * compacted into a bounded structured excerpt (one line per turn, oldest lines
4
+ * dropped beyond the cap). Incremental and idempotent via the thread's
5
+ * `summaryTurnSeq` cursor. An optional LLM compaction can layer on later; this
6
+ * deterministic form is always the fallback and never blocks.
7
+ */
8
+ import type { ConversationTurn } from './session-store.js';
9
+ export declare function updateRollingSummary(input: {
10
+ previousSummary?: string;
11
+ compactedTurns: ConversationTurn[];
12
+ }): string | undefined;
13
+ //# sourceMappingURL=rolling-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolling-summary.d.ts","sourceRoot":"","sources":["../../src/conversation/rolling-summary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK3D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,gBAAgB,EAAE,CAAC;CACpC,GAAG,MAAM,GAAG,SAAS,CAerB"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Deterministic rolling summary: turns older than the recent verbatim window are
3
+ * compacted into a bounded structured excerpt (one line per turn, oldest lines
4
+ * dropped beyond the cap). Incremental and idempotent via the thread's
5
+ * `summaryTurnSeq` cursor. An optional LLM compaction can layer on later; this
6
+ * deterministic form is always the fallback and never blocks.
7
+ */
8
+ const MAX_SUMMARY_CHARS = 600;
9
+ const MAX_LINE_CHARS = 200;
10
+ export function updateRollingSummary(input) {
11
+ const newLines = input.compactedTurns.map(summarizeTurn).filter(Boolean);
12
+ const lines = [
13
+ ...(input.previousSummary ? input.previousSummary.split('\n') : []),
14
+ ...newLines,
15
+ ].filter(Boolean);
16
+ // Keep the newest lines; drop the oldest beyond the budget.
17
+ const kept = [];
18
+ let total = 0;
19
+ for (const line of lines.reverse()) {
20
+ if (total + line.length + 1 > MAX_SUMMARY_CHARS)
21
+ break;
22
+ kept.unshift(line);
23
+ total += line.length + 1;
24
+ }
25
+ return kept.length > 0 ? kept.join('\n') : undefined;
26
+ }
27
+ function summarizeTurn(turn) {
28
+ const columns = turn.result?.columns?.slice(0, 5).join(', ');
29
+ const values = turn.result?.dimensionValues
30
+ ? Object.entries(turn.result.dimensionValues)
31
+ .slice(0, 3)
32
+ .map(([key, list]) => `${key}: ${list.slice(0, 3).join(', ')}`)
33
+ .join('; ')
34
+ : '';
35
+ const line = [
36
+ `Q: ${turn.question}`,
37
+ turn.answerSummary ? `A: ${turn.answerSummary}` : '',
38
+ columns ? `cols: ${columns}` : '',
39
+ values ? `vals: ${values}` : '',
40
+ ].filter(Boolean).join(' | ');
41
+ return line.length > MAX_LINE_CHARS ? `${line.slice(0, MAX_LINE_CHARS - 1)}…` : line;
42
+ }
43
+ //# sourceMappingURL=rolling-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolling-summary.js","sourceRoot":"","sources":["../../src/conversation/rolling-summary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,UAAU,oBAAoB,CAAC,KAGpC;IACC,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,QAAQ;KACZ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,4DAA4D;IAC5D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,iBAAiB;YAAE,MAAM;QACvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnB,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,IAAsB;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe;QACzC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;aACxC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;aAC9D,IAAI,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,IAAI,GAAG;QACX,MAAM,IAAI,CAAC,QAAQ,EAAE;QACrB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;QACpD,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;QACjC,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;KAChC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACvF,CAAC"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Server-side conversation session store: threads + ordered turns, persisted in
3
+ * `.dql/cache/agent-conversations.sqlite` so multi-turn context survives page
4
+ * refreshes and process restarts.
5
+ *
6
+ * This is the SESSION layer — auto-captured, compactable, per-thread. It is
7
+ * strictly separate from the governed durable memory (`MemoryStore`): raw chat
8
+ * is never a correctness signal and never enters `agent_memory` except through
9
+ * an explicit promotion action. Modeled on `memory/sqlite-memory.ts`
10
+ * (better-sqlite3, WAL, FTS5 porter).
11
+ */
12
+ import type { AgentDqlArtifactReference } from '../answer-loop.js';
13
+ import type { CascadeAnswerResult } from '../cascade/cascade.js';
14
+ export interface ConversationThread {
15
+ id: string;
16
+ surface: string;
17
+ title?: string;
18
+ notebookPath?: string;
19
+ /** Opaque working-state JSON — owned/typed by conversation/working-state.ts. */
20
+ workingState: Record<string, unknown>;
21
+ rollingSummary?: string;
22
+ /** Highest turn seq already folded into rollingSummary (compaction cursor). */
23
+ summaryTurnSeq: number;
24
+ archived: boolean;
25
+ createdAt: string;
26
+ updatedAt: string;
27
+ }
28
+ export interface ConversationTurnResult {
29
+ columns?: string[];
30
+ rowsSample?: unknown[][];
31
+ dimensionValues?: Record<string, string[]>;
32
+ measureColumns?: string[];
33
+ rowCount?: number;
34
+ }
35
+ export interface ConversationTurnInput {
36
+ question: string;
37
+ answerSummary?: string;
38
+ answerText?: string;
39
+ route?: string;
40
+ trustLabel?: string;
41
+ certification?: string;
42
+ sourceCertifiedBlock?: string;
43
+ contextPackId?: string;
44
+ sql?: string;
45
+ dqlArtifact?: AgentDqlArtifactReference;
46
+ cascade?: CascadeAnswerResult;
47
+ result?: ConversationTurnResult;
48
+ /** The turn's answer contract / requested shape, for working-state reduction. */
49
+ contract?: Record<string, unknown>;
50
+ }
51
+ export interface ConversationTurn extends ConversationTurnInput {
52
+ id: string;
53
+ threadId: string;
54
+ seq: number;
55
+ createdAt: string;
56
+ }
57
+ export interface ConversationTurnSearchOptions {
58
+ query: string;
59
+ threadId?: string;
60
+ limit?: number;
61
+ }
62
+ export declare function defaultConversationPath(projectRoot: string): string;
63
+ export declare class ConversationStore {
64
+ private db;
65
+ constructor(dbPath: string);
66
+ private initSchema;
67
+ private ensureColumn;
68
+ createThread(input?: {
69
+ surface?: string;
70
+ title?: string;
71
+ notebookPath?: string;
72
+ }): ConversationThread;
73
+ getThread(id: string): ConversationThread | null;
74
+ listThreads(options?: {
75
+ limit?: number;
76
+ includeArchived?: boolean;
77
+ }): ConversationThread[];
78
+ archiveThread(id: string): void;
79
+ /**
80
+ * Append a turn to a thread (assigns the next seq, dual-writes the FTS index,
81
+ * bumps the thread, and sets the thread title from the first question).
82
+ */
83
+ appendTurn(threadId: string, input: ConversationTurnInput): ConversationTurn;
84
+ recentTurns(threadId: string, limit?: number): ConversationTurn[];
85
+ /**
86
+ * Which cascade tiers have answered recently, across all threads. Powers a
87
+ * tier-distribution surface so you can see the governance ladder shift upward
88
+ * (more certified/semantic answers) as usage compounds.
89
+ */
90
+ tierDistribution(options?: {
91
+ limit?: number;
92
+ }): {
93
+ total: number;
94
+ byRouteTier: Record<string, number>;
95
+ byTerminalLane: Record<string, number>;
96
+ };
97
+ /** Turns older than the compaction cursor and outside the recent window (for rolling summary). */
98
+ turnsForCompaction(threadId: string, afterSeq: number, beforeSeq: number): ConversationTurn[];
99
+ updateThreadState(threadId: string, input: {
100
+ workingState?: Record<string, unknown>;
101
+ rollingSummary?: string;
102
+ summaryTurnSeq?: number;
103
+ }): void;
104
+ /** FTS keyword search over turns; hybrid embedding re-ranking layers on top (P5). */
105
+ searchTurns(options: ConversationTurnSearchOptions): ConversationTurn[];
106
+ /** Housekeeping: hard-delete archived threads (and their turns) older than the cutoff. */
107
+ pruneThreads(olderThanDays: number): number;
108
+ close(): void;
109
+ }
110
+ //# sourceMappingURL=session-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/conversation/session-store.ts"],"names":[],"mappings":"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"}