@kaelio/ktx 0.4.1 → 0.5.0

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 (2064) hide show
  1. package/assets/python/kaelio_ktx-0.5.0-py3-none-any.whl +0 -0
  2. package/assets/python/manifest.json +4 -4
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/admin-reindex.d.ts +4 -1
  5. package/dist/admin-reindex.js +6 -3
  6. package/dist/admin-reindex.test.js +1 -1
  7. package/dist/admin.js +2 -1
  8. package/dist/clack.d.ts +0 -3
  9. package/dist/clack.js +1 -1
  10. package/dist/claude-code-prompt-caching.d.ts +1 -1
  11. package/dist/cli-program-telemetry.test.js +89 -0
  12. package/dist/cli-program.d.ts +5 -1
  13. package/dist/cli-program.js +74 -8
  14. package/dist/cli-program.test.js +25 -3
  15. package/dist/cli-runtime.d.ts +0 -1
  16. package/dist/cli-runtime.js +2 -2
  17. package/dist/command-schemas.d.ts +2 -2
  18. package/dist/commands/mcp-commands.test.js +1 -1
  19. package/dist/commands/sql-commands.test.js +1 -1
  20. package/dist/commands/status-commands.js +10 -1
  21. package/dist/connection.d.ts +5 -2
  22. package/dist/connection.js +75 -5
  23. package/dist/connection.test.js +22 -1
  24. package/dist/connectors/bigquery/connector.d.ts +146 -0
  25. package/dist/connectors/bigquery/connector.js +391 -0
  26. package/dist/connectors/bigquery/connector.test.js +363 -0
  27. package/dist/connectors/bigquery/dialect.d.ts +29 -0
  28. package/dist/connectors/bigquery/live-database-introspection.d.ts +10 -0
  29. package/dist/connectors/bigquery/live-database-introspection.js +24 -0
  30. package/dist/connectors/clickhouse/connector.d.ts +116 -0
  31. package/dist/connectors/clickhouse/connector.js +405 -0
  32. package/dist/connectors/clickhouse/connector.test.js +342 -0
  33. package/dist/connectors/clickhouse/dialect.d.ts +33 -0
  34. package/dist/connectors/clickhouse/live-database-introspection.d.ts +11 -0
  35. package/dist/connectors/clickhouse/live-database-introspection.js +25 -0
  36. package/dist/connectors/mysql/connector.d.ts +119 -0
  37. package/dist/connectors/mysql/connector.js +436 -0
  38. package/dist/connectors/mysql/connector.test.js +365 -0
  39. package/dist/connectors/mysql/dialect.d.ts +29 -0
  40. package/dist/connectors/mysql/live-database-introspection.d.ts +11 -0
  41. package/dist/connectors/mysql/live-database-introspection.js +25 -0
  42. package/dist/connectors/postgres/connector.d.ts +141 -0
  43. package/dist/connectors/postgres/connector.js +511 -0
  44. package/dist/connectors/postgres/connector.test.js +391 -0
  45. package/dist/connectors/postgres/dialect.d.ts +29 -0
  46. package/dist/connectors/postgres/historic-sql-query-client.d.ts +14 -0
  47. package/dist/connectors/postgres/live-database-introspection.d.ts +11 -0
  48. package/dist/connectors/postgres/live-database-introspection.js +25 -0
  49. package/dist/connectors/snowflake/connector.d.ts +138 -0
  50. package/dist/connectors/snowflake/connector.js +554 -0
  51. package/dist/connectors/snowflake/connector.test.js +462 -0
  52. package/dist/connectors/snowflake/dialect.d.ts +29 -0
  53. package/dist/connectors/snowflake/historic-sql-query-client.d.ts +13 -0
  54. package/dist/connectors/snowflake/historic-sql-query-client.js +20 -0
  55. package/dist/connectors/snowflake/identifiers.d.ts +2 -0
  56. package/dist/connectors/snowflake/identifiers.js +10 -0
  57. package/dist/connectors/snowflake/identifiers.test.js +12 -0
  58. package/dist/connectors/snowflake/live-database-introspection.d.ts +12 -0
  59. package/dist/connectors/snowflake/live-database-introspection.js +26 -0
  60. package/dist/connectors/snowflake/sdk-logger.d.ts +10 -0
  61. package/dist/connectors/snowflake/sdk-logger.js +29 -0
  62. package/dist/connectors/snowflake/sdk-logger.test.js +47 -0
  63. package/dist/connectors/sqlite/connector.d.ts +61 -0
  64. package/dist/connectors/sqlite/connector.js +260 -0
  65. package/dist/connectors/sqlite/connector.test.js +207 -0
  66. package/dist/connectors/sqlite/dialect.d.ts +29 -0
  67. package/dist/connectors/sqlite/live-database-introspection.d.ts +8 -0
  68. package/dist/connectors/sqlite/live-database-introspection.js +24 -0
  69. package/dist/connectors/sqlserver/connector.d.ts +139 -0
  70. package/dist/connectors/sqlserver/connector.js +534 -0
  71. package/dist/connectors/sqlserver/connector.test.js +313 -0
  72. package/dist/connectors/sqlserver/dialect.d.ts +30 -0
  73. package/dist/connectors/sqlserver/live-database-introspection.d.ts +11 -0
  74. package/dist/connectors/sqlserver/live-database-introspection.js +25 -0
  75. package/dist/context/connections/bigquery-identifiers.d.ts +2 -0
  76. package/dist/context/connections/bigquery-identifiers.js +15 -0
  77. package/dist/context/connections/bigquery-identifiers.test.js +13 -0
  78. package/dist/context/connections/dialects.d.ts +10 -0
  79. package/dist/context/connections/notion-config.d.ts +44 -0
  80. package/dist/context/connections/notion-config.js +134 -0
  81. package/dist/context/connections/query-executor.d.ts +19 -0
  82. package/dist/context/connections/sqlite-query-executor.d.ts +4 -0
  83. package/dist/context/connections/sqlite-query-executor.js +74 -0
  84. package/dist/context/core/config-reference.d.ts +3 -0
  85. package/dist/context/core/config-reference.js +30 -0
  86. package/dist/context/core/config.d.ts +26 -0
  87. package/dist/context/core/redaction.d.ts +5 -0
  88. package/dist/context/core/redaction.js +40 -0
  89. package/dist/context/core/session-worktree.service.d.ts +31 -0
  90. package/dist/context/daemon/semantic-layer-compute.d.ts +84 -0
  91. package/dist/context/daemon/semantic-layer-compute.js +194 -0
  92. package/dist/context/daemon/semantic-layer-compute.test.js +305 -0
  93. package/dist/context/index-sync/reindex.d.ts +3 -0
  94. package/dist/context/index-sync/reindex.js +144 -0
  95. package/dist/context/index-sync/reindex.test.js +139 -0
  96. package/dist/context/index-sync/types.d.ts +29 -0
  97. package/dist/context/ingest/action-identity.d.ts +3 -0
  98. package/dist/context/ingest/adapters/dbt/parse.d.ts +7 -0
  99. package/dist/context/ingest/adapters/dbt/parse.js +24 -0
  100. package/dist/context/ingest/adapters/dbt-descriptions/parse-schema.d.ts +65 -0
  101. package/dist/context/ingest/adapters/dbt-descriptions/parse-schema.js +426 -0
  102. package/dist/context/ingest/adapters/historic-sql/bigquery-query-history-reader.js +187 -0
  103. package/dist/context/ingest/adapters/historic-sql/connection-dialect.d.ts +8 -0
  104. package/dist/context/ingest/adapters/historic-sql/connection-dialect.js +30 -0
  105. package/dist/context/ingest/adapters/historic-sql/evidence.d.ts +77 -0
  106. package/dist/context/ingest/adapters/historic-sql/evidence.js +34 -0
  107. package/dist/context/ingest/adapters/historic-sql/local-ingest-acceptance.test.js +235 -0
  108. package/dist/context/ingest/adapters/historic-sql/pattern-inputs.d.ts +21 -0
  109. package/dist/context/ingest/adapters/historic-sql/pattern-inputs.js +68 -0
  110. package/dist/context/ingest/adapters/historic-sql/projection.d.ts +24 -0
  111. package/dist/context/ingest/adapters/historic-sql/skill-schemas.d.ts +37 -0
  112. package/dist/context/ingest/adapters/historic-sql/skill-schemas.js +25 -0
  113. package/dist/context/ingest/adapters/historic-sql/stage-unified.d.ts +13 -0
  114. package/dist/context/ingest/adapters/historic-sql/types.d.ts +183 -0
  115. package/dist/context/ingest/adapters/live-database/daemon-introspection.d.ts +21 -0
  116. package/dist/context/ingest/adapters/live-database/daemon-introspection.js +198 -0
  117. package/dist/context/ingest/adapters/live-database/daemon-introspection.test.js +241 -0
  118. package/dist/context/ingest/adapters/live-database/live-database.adapter.js +25 -0
  119. package/dist/context/ingest/adapters/live-database/live-database.adapter.test.js +105 -0
  120. package/dist/context/ingest/adapters/live-database/manifest.d.ts +66 -0
  121. package/dist/context/ingest/adapters/live-database/stage.d.ts +13 -0
  122. package/dist/context/ingest/adapters/live-database/stage.js +106 -0
  123. package/dist/context/ingest/adapters/live-database/types.d.ts +12 -0
  124. package/dist/context/ingest/adapters/looker/factory.d.ts +23 -0
  125. package/dist/context/ingest/adapters/looker/factory.js +23 -0
  126. package/dist/context/ingest/adapters/looker/fetch.d.ts +31 -0
  127. package/dist/context/ingest/adapters/looker/local-looker.adapter.d.ts +9 -0
  128. package/dist/context/ingest/adapters/looker/local-looker.adapter.js +35 -0
  129. package/dist/context/ingest/adapters/looker/local-runtime-store.d.ts +50 -0
  130. package/dist/context/ingest/adapters/looker/mapping.d.ts +132 -0
  131. package/dist/context/ingest/adapters/looker/mapping.js +310 -0
  132. package/dist/context/ingest/adapters/looker/reconcile.d.ts +1 -0
  133. package/dist/context/ingest/adapters/looker/reconcile.js +8 -0
  134. package/dist/context/ingest/adapters/looker/reconcile.test.js +12 -0
  135. package/dist/context/ingest/adapters/looker/scope.d.ts +7 -0
  136. package/dist/context/ingest/adapters/looker/scope.js +57 -0
  137. package/dist/context/ingest/adapters/looker/tools/looker-query-to-sl.tool.d.ts +107 -0
  138. package/dist/context/ingest/adapters/looker/tools/looker-query-to-sl.tool.js +237 -0
  139. package/dist/context/ingest/adapters/looker/types.d.ts +439 -0
  140. package/dist/context/ingest/adapters/looker/types.js +199 -0
  141. package/dist/context/ingest/adapters/looker/types.test.js +261 -0
  142. package/dist/context/ingest/adapters/lookml/fetch-report.d.ts +17 -0
  143. package/dist/context/ingest/adapters/lookml/fetch-report.js +100 -0
  144. package/dist/context/ingest/adapters/lookml/pull-config.d.ts +38 -0
  145. package/dist/context/ingest/adapters/lookml/pull-config.js +26 -0
  146. package/dist/context/ingest/adapters/metabase/client-port.d.ts +167 -0
  147. package/dist/context/ingest/adapters/metabase/client.d.ts +116 -0
  148. package/dist/context/ingest/adapters/metabase/client.js +673 -0
  149. package/dist/context/ingest/adapters/metabase/fanout-planner.d.ts +18 -0
  150. package/dist/context/ingest/adapters/metabase/local-metabase.adapter.d.ts +14 -0
  151. package/dist/context/ingest/adapters/metabase/local-metabase.adapter.js +41 -0
  152. package/dist/context/ingest/adapters/metabase/local-source-state-store.d.ts +43 -0
  153. package/dist/context/ingest/adapters/metabase/local-source-state-store.js +176 -0
  154. package/dist/context/ingest/adapters/metabase/local-source-state-store.test.js +99 -0
  155. package/dist/context/ingest/adapters/metabase/mapping.d.ts +102 -0
  156. package/dist/context/ingest/adapters/metabase/mapping.js +225 -0
  157. package/dist/context/ingest/adapters/metabase/serialize-card.d.ts +56 -0
  158. package/dist/context/ingest/adapters/metabase/serialize-card.js +68 -0
  159. package/dist/context/ingest/adapters/metabase/source-state-port.d.ts +24 -0
  160. package/dist/context/ingest/adapters/metabase/types.d.ts +143 -0
  161. package/dist/context/ingest/adapters/metabase/types.js +107 -0
  162. package/dist/context/ingest/adapters/metricflow/deep-parse.d.ts +78 -0
  163. package/dist/context/ingest/adapters/metricflow/deep-parse.js +461 -0
  164. package/dist/context/ingest/adapters/metricflow/import-semantic-models.d.ts +30 -0
  165. package/dist/context/ingest/adapters/metricflow/import-semantic-models.js +136 -0
  166. package/dist/context/ingest/adapters/metricflow/parse.d.ts +43 -0
  167. package/dist/context/ingest/adapters/metricflow/pull-config.d.ts +38 -0
  168. package/dist/context/ingest/adapters/metricflow/pull-config.js +24 -0
  169. package/dist/context/ingest/adapters/metricflow/semantic-models.d.ts +37 -0
  170. package/dist/context/ingest/adapters/metricflow/semantic-models.js +283 -0
  171. package/dist/context/ingest/adapters/metricflow/semantic-models.test.js +204 -0
  172. package/dist/context/ingest/adapters/notion/chunk.d.ts +5 -0
  173. package/dist/context/ingest/adapters/notion/chunk.js +138 -0
  174. package/dist/context/ingest/adapters/notion/cluster.d.ts +11 -0
  175. package/dist/context/ingest/adapters/notion/cluster.js +83 -0
  176. package/dist/context/ingest/adapters/notion/normalize.d.ts +11 -0
  177. package/dist/context/ingest/adapters/notion/normalize.js +166 -0
  178. package/dist/context/ingest/adapters/notion/notion-client.d.ts +75 -0
  179. package/dist/context/ingest/adapters/notion/notion-client.js +108 -0
  180. package/dist/context/ingest/artifact-gates.d.ts +26 -0
  181. package/dist/context/ingest/context-candidates/candidate-dedup.service.d.ts +27 -0
  182. package/dist/context/ingest/context-candidates/candidate-dedup.service.js +234 -0
  183. package/dist/context/ingest/context-candidates/context-candidate-carryforward.service.d.ts +31 -0
  184. package/dist/context/ingest/context-candidates/context-candidate-carryforward.service.js +131 -0
  185. package/dist/context/ingest/context-candidates/curator-pagination.service.d.ts +64 -0
  186. package/dist/context/ingest/context-candidates/curator-pagination.service.js +240 -0
  187. package/dist/context/ingest/context-candidates/types.d.ts +93 -0
  188. package/dist/context/ingest/context-evidence/context-evidence-index.service.d.ts +53 -0
  189. package/dist/context/ingest/context-evidence/context-evidence-index.service.js +303 -0
  190. package/dist/context/ingest/context-evidence/sqlite-context-evidence-store.d.ts +90 -0
  191. package/dist/context/ingest/context-evidence/sqlite-context-evidence-store.js +1025 -0
  192. package/dist/context/ingest/dbt-shared/project-vars.d.ts +14 -0
  193. package/dist/context/ingest/dbt-shared/project-vars.js +88 -0
  194. package/dist/context/ingest/dbt-shared/schema-files.d.ts +4 -0
  195. package/dist/context/ingest/dbt-shared/schema-files.js +63 -0
  196. package/dist/context/ingest/final-gate-repair.d.ts +29 -0
  197. package/dist/context/ingest/finalization-scope.d.ts +22 -0
  198. package/dist/context/ingest/ingest-bundle.runner.isolated-diff.test.js +1928 -0
  199. package/dist/context/ingest/ingest-bundle.runner.js +2247 -0
  200. package/dist/context/ingest/ingest-bundle.runner.test.js +1899 -0
  201. package/dist/context/ingest/ingest-runtime-assets.test.js +89 -0
  202. package/dist/context/ingest/ingest-trace.d.ts +25 -0
  203. package/dist/context/ingest/ingest-trace.js +74 -0
  204. package/dist/context/ingest/isolated-diff/git-patch.d.ts +17 -0
  205. package/dist/context/ingest/isolated-diff/git-patch.js +79 -0
  206. package/dist/context/ingest/isolated-diff/patch-integrator.d.ts +59 -0
  207. package/dist/context/ingest/isolated-diff/patch-integrator.test.js +369 -0
  208. package/dist/context/ingest/isolated-diff/textual-conflict-resolver.d.ts +23 -0
  209. package/dist/context/ingest/isolated-diff/work-unit-executor.test.js +137 -0
  210. package/dist/context/ingest/local-adapters.d.ts +35 -0
  211. package/dist/context/ingest/local-adapters.js +242 -0
  212. package/dist/context/ingest/local-adapters.test.js +612 -0
  213. package/dist/context/ingest/local-bundle-ingest.test.js +794 -0
  214. package/dist/context/ingest/local-bundle-runtime.d.ts +35 -0
  215. package/dist/context/ingest/local-bundle-runtime.js +636 -0
  216. package/dist/context/ingest/local-bundle-runtime.test.js +240 -0
  217. package/dist/context/ingest/local-ingest.d.ts +82 -0
  218. package/dist/context/ingest/local-ingest.js +297 -0
  219. package/dist/context/ingest/local-mapping-reconcile.d.ts +2 -0
  220. package/dist/context/ingest/local-mapping-reconcile.js +27 -0
  221. package/dist/context/ingest/local-mapping-reconcile.test.js +61 -0
  222. package/dist/context/ingest/local-metabase-ingest.test.js +227 -0
  223. package/dist/context/ingest/local-stage-ingest.d.ts +56 -0
  224. package/dist/context/ingest/local-stage-ingest.js +290 -0
  225. package/dist/context/ingest/local-stage-ingest.test.js +581 -0
  226. package/dist/context/ingest/memory-flow/events.d.ts +10 -0
  227. package/dist/context/ingest/memory-flow/events.js +197 -0
  228. package/dist/context/ingest/memory-flow/interaction.d.ts +11 -0
  229. package/dist/context/ingest/memory-flow/interaction.js +317 -0
  230. package/dist/context/ingest/memory-flow/schema.d.ts +18 -0
  231. package/dist/context/ingest/memory-flow/schema.js +174 -0
  232. package/dist/context/ingest/memory-flow/visuals.d.ts +25 -0
  233. package/dist/context/ingest/memory-flow/visuals.js +46 -0
  234. package/dist/context/ingest/page-triage/page-triage.service.d.ts +84 -0
  235. package/dist/context/ingest/page-triage/page-triage.service.js +318 -0
  236. package/dist/context/ingest/ports.d.ts +328 -0
  237. package/dist/context/ingest/raw-sources-paths.d.ts +6 -0
  238. package/dist/context/ingest/raw-sources-paths.js +18 -0
  239. package/dist/context/ingest/repo-fetch.d.ts +41 -0
  240. package/dist/context/ingest/repo-fetch.js +138 -0
  241. package/dist/context/ingest/report-snapshot.d.ts +2 -0
  242. package/dist/context/ingest/report-snapshot.js +212 -0
  243. package/dist/context/ingest/reports.d.ts +120 -0
  244. package/dist/context/ingest/reports.js +30 -0
  245. package/dist/context/ingest/semantic-layer-target-policy.d.ts +14 -0
  246. package/dist/context/ingest/semantic-layer-target-policy.js +28 -0
  247. package/dist/context/ingest/stages/build-reconcile-context.d.ts +61 -0
  248. package/dist/context/ingest/stages/build-wu-context.d.ts +27 -0
  249. package/dist/context/ingest/stages/build-wu-context.js +87 -0
  250. package/dist/context/ingest/stages/stage-3-work-units.d.ts +49 -0
  251. package/dist/context/ingest/stages/stage-3-work-units.js +108 -0
  252. package/dist/context/ingest/stages/stage-3-work-units.test.js +175 -0
  253. package/dist/context/ingest/stages/stage-4-reconciliation.d.ts +28 -0
  254. package/dist/context/ingest/stages/stage-index.types.d.ts +51 -0
  255. package/dist/context/ingest/stages/validate-wu-sources.d.ts +10 -0
  256. package/dist/context/ingest/tools/tool-call-logger.d.ts +33 -0
  257. package/dist/context/ingest/tools/verification-ledger.tool.d.ts +14 -0
  258. package/dist/context/ingest/tools/warehouse-verification/create-warehouse-verification-tools.d.ts +9 -0
  259. package/dist/context/ingest/tools/warehouse-verification/discover-data.tool.d.ts +36 -0
  260. package/dist/context/ingest/tools/warehouse-verification/discover-data.tool.js +94 -0
  261. package/dist/context/ingest/tools/warehouse-verification/entity-details.tool.d.ts +43 -0
  262. package/dist/context/ingest/tools/warehouse-verification/entity-details.tool.js +137 -0
  263. package/dist/context/ingest/tools/warehouse-verification/entity-details.tool.test.js +146 -0
  264. package/dist/context/ingest/tools/warehouse-verification/sql-execution.tool.d.ts +31 -0
  265. package/dist/context/ingest/tools/warehouse-verification/sql-execution.tool.js +84 -0
  266. package/dist/context/ingest/types.d.ts +203 -0
  267. package/dist/context/ingest/wiki-body-refs.d.ts +26 -0
  268. package/dist/context/ingest/wiki-body-refs.js +112 -0
  269. package/dist/context/ingest/wiki-sl-ref-repair.d.ts +19 -0
  270. package/dist/context/llm/ai-sdk-runtime.d.ts +24 -0
  271. package/dist/context/llm/ai-sdk-runtime.js +133 -0
  272. package/dist/context/llm/ai-sdk-runtime.test.js +308 -0
  273. package/dist/context/llm/claude-code-env.d.ts +3 -0
  274. package/dist/context/llm/claude-code-env.js +22 -0
  275. package/dist/context/llm/claude-code-runtime.d.ts +37 -0
  276. package/dist/context/llm/claude-code-runtime.js +281 -0
  277. package/dist/context/llm/claude-code-runtime.test.js +434 -0
  278. package/dist/context/llm/debug-request-recorder.d.ts +45 -0
  279. package/dist/context/llm/debug-request-recorder.js +80 -0
  280. package/dist/context/llm/embedding-port.d.ts +17 -0
  281. package/dist/context/llm/embedding-port.test.js +34 -0
  282. package/dist/context/llm/local-config.d.ts +24 -0
  283. package/dist/context/llm/local-config.js +136 -0
  284. package/dist/context/llm/local-config.test.js +164 -0
  285. package/dist/context/llm/runtime-port.d.ts +60 -0
  286. package/dist/context/llm/runtime-tools.d.ts +9 -0
  287. package/dist/context/llm/runtime-tools.js +65 -0
  288. package/dist/context/mcp/context-tools.d.ts +12 -0
  289. package/dist/context/mcp/context-tools.js +602 -0
  290. package/dist/context/mcp/local-project-ports.d.ts +16 -0
  291. package/dist/context/mcp/local-project-ports.js +202 -0
  292. package/dist/context/mcp/local-project-ports.test.js +689 -0
  293. package/dist/context/mcp/server.d.ts +8 -0
  294. package/dist/context/mcp/server.js +29 -0
  295. package/dist/context/mcp/server.test.js +902 -0
  296. package/dist/context/mcp/types.d.ts +169 -0
  297. package/dist/context/memory/capture-signals.d.ts +9 -0
  298. package/dist/context/memory/capture-signals.js +104 -0
  299. package/dist/context/memory/local-memory.d.ts +24 -0
  300. package/dist/context/memory/local-memory.js +418 -0
  301. package/dist/context/memory/local-memory.test.js +173 -0
  302. package/dist/context/memory/memory-agent.service.d.ts +60 -0
  303. package/dist/context/memory/memory-agent.service.ingest.test.js +355 -0
  304. package/dist/context/memory/memory-agent.service.js +540 -0
  305. package/dist/context/memory/memory-agent.service.test.js +413 -0
  306. package/dist/context/memory/memory-runs.d.ts +55 -0
  307. package/dist/context/memory/memory-runtime-assets.test.js +162 -0
  308. package/dist/context/memory/types.d.ts +145 -0
  309. package/dist/context/project/config.d.ts +478 -0
  310. package/dist/context/project/config.js +325 -0
  311. package/dist/context/project/config.test.js +467 -0
  312. package/dist/context/project/driver-schemas.d.ts +105 -0
  313. package/dist/context/project/driver-schemas.js +184 -0
  314. package/dist/context/project/driver-schemas.test.js +125 -0
  315. package/dist/context/project/local-git-file-store.d.ts +24 -0
  316. package/dist/context/project/local-git-file-store.test.js +71 -0
  317. package/dist/context/project/mappings-yaml-schema.d.ts +61 -0
  318. package/dist/context/project/mappings-yaml-schema.js +111 -0
  319. package/dist/context/project/project.d.ts +30 -0
  320. package/dist/context/project/project.js +94 -0
  321. package/dist/context/project/setup-config.d.ts +13 -0
  322. package/dist/context/project/setup-config.js +80 -0
  323. package/dist/context/prompts/prompt.service.d.ts +28 -0
  324. package/dist/context/prompts/prompt.service.js +84 -0
  325. package/dist/context/scan/credentials.d.ts +10 -0
  326. package/dist/context/scan/credentials.js +41 -0
  327. package/dist/context/scan/credentials.test.js +162 -0
  328. package/dist/context/scan/data-dictionary.d.ts +26 -0
  329. package/dist/context/scan/data-dictionary.js +67 -0
  330. package/dist/context/scan/description-generation.d.ts +148 -0
  331. package/dist/context/scan/description-generation.js +760 -0
  332. package/dist/context/scan/description-generation.test.js +693 -0
  333. package/dist/context/scan/embedding-text.d.ts +22 -0
  334. package/dist/context/scan/enabled-tables.d.ts +16 -0
  335. package/dist/context/scan/enabled-tables.js +62 -0
  336. package/dist/context/scan/enrichment-state.d.ts +47 -0
  337. package/dist/context/scan/enrichment-state.js +44 -0
  338. package/dist/context/scan/enrichment-types.d.ts +103 -0
  339. package/dist/context/scan/entity-details.d.ts +58 -0
  340. package/dist/context/scan/entity-details.test.js +234 -0
  341. package/dist/context/scan/local-enrichment-artifacts.d.ts +32 -0
  342. package/dist/context/scan/local-enrichment-artifacts.js +275 -0
  343. package/dist/context/scan/local-enrichment-artifacts.test.js +771 -0
  344. package/dist/context/scan/local-enrichment.d.ts +46 -0
  345. package/dist/context/scan/local-enrichment.js +467 -0
  346. package/dist/context/scan/local-enrichment.test.js +765 -0
  347. package/dist/context/scan/local-scan.d.ts +62 -0
  348. package/dist/context/scan/local-scan.js +449 -0
  349. package/dist/context/scan/local-scan.test.js +1663 -0
  350. package/dist/context/scan/local-structural-artifacts.d.ts +10 -0
  351. package/dist/context/scan/local-structural-artifacts.test.js +144 -0
  352. package/dist/context/scan/relationship-benchmarks.d.ts +148 -0
  353. package/dist/context/scan/relationship-budget.d.ts +21 -0
  354. package/dist/context/scan/relationship-budget.js +35 -0
  355. package/dist/context/scan/relationship-candidates.d.ts +50 -0
  356. package/dist/context/scan/relationship-candidates.js +557 -0
  357. package/dist/context/scan/relationship-composite-candidates.d.ts +67 -0
  358. package/dist/context/scan/relationship-diagnostics.d.ts +96 -0
  359. package/dist/context/scan/relationship-diagnostics.js +225 -0
  360. package/dist/context/scan/relationship-discovery.d.ts +27 -0
  361. package/dist/context/scan/relationship-discovery.js +248 -0
  362. package/dist/context/scan/relationship-graph-resolver.d.ts +49 -0
  363. package/dist/context/scan/relationship-llm-proposal.d.ts +26 -0
  364. package/dist/context/scan/relationship-llm-proposal.js +191 -0
  365. package/dist/context/scan/relationship-name-similarity.d.ts +15 -0
  366. package/dist/context/scan/relationship-name-similarity.js +124 -0
  367. package/dist/context/scan/relationship-profiling.d.ts +57 -0
  368. package/dist/context/scan/relationship-profiling.js +334 -0
  369. package/dist/context/scan/relationship-profiling.test.js +392 -0
  370. package/dist/context/scan/relationship-scoring.d.ts +34 -0
  371. package/dist/context/scan/relationship-scoring.js +98 -0
  372. package/dist/context/scan/relationship-validation.d.ts +46 -0
  373. package/dist/context/scan/relationship-validation.js +240 -0
  374. package/dist/context/scan/relationship-validation.test.js +455 -0
  375. package/dist/context/scan/table-ref.d.ts +26 -0
  376. package/dist/context/scan/table-ref.js +36 -0
  377. package/dist/context/scan/table-ref.test.js +53 -0
  378. package/dist/context/scan/type-normalization.d.ts +10 -0
  379. package/dist/context/scan/type-normalization.js +24 -0
  380. package/dist/context/scan/types.d.ts +328 -0
  381. package/dist/context/scan/warehouse-catalog.d.ts +69 -0
  382. package/dist/context/scan/warehouse-catalog.js +311 -0
  383. package/dist/context/scan/warehouse-catalog.test.js +158 -0
  384. package/dist/context/search/backend-conformance.test-utils.test.js +408 -0
  385. package/dist/context/search/discover.d.ts +31 -0
  386. package/dist/context/search/discover.js +341 -0
  387. package/dist/context/search/discover.test.js +197 -0
  388. package/dist/context/search/pglite-owner-process.d.ts +20 -0
  389. package/dist/context/search/pglite-owner-process.js +82 -0
  390. package/dist/context/search/pglite-owner-process.test.js +273 -0
  391. package/dist/context/search/pglite-runtime-boundary.test.js +40 -0
  392. package/dist/context/search/pglite-spike.test.js +249 -0
  393. package/dist/context/search/types.d.ts +73 -0
  394. package/dist/context/skills/skills-registry.service.d.ts +35 -0
  395. package/dist/context/skills/skills-registry.service.js +215 -0
  396. package/dist/context/sl/dictionary-search.d.ts +43 -0
  397. package/dist/context/sl/dictionary-search.test.js +204 -0
  398. package/dist/context/sl/local-query.d.ts +19 -0
  399. package/dist/context/sl/local-query.test.js +283 -0
  400. package/dist/context/sl/local-sl.d.ts +62 -0
  401. package/dist/context/sl/local-sl.js +485 -0
  402. package/dist/context/sl/local-sl.test.js +334 -0
  403. package/dist/context/sl/pglite-sl-search-prototype.d.ts +16 -0
  404. package/dist/context/sl/pglite-sl-search-prototype.js +433 -0
  405. package/dist/context/sl/pglite-sl-search-prototype.test.js +240 -0
  406. package/dist/context/sl/semantic-layer.service.d.ts +220 -0
  407. package/dist/context/sl/semantic-layer.service.js +1354 -0
  408. package/dist/context/sl/semantic-layer.service.test.js +1107 -0
  409. package/dist/context/sl/sl-dictionary-profile.d.ts +9 -0
  410. package/dist/context/sl/sl-dictionary-profile.js +80 -0
  411. package/dist/context/sl/sl-dictionary-profile.test.js +88 -0
  412. package/dist/context/sl/sl-search.service.d.ts +19 -0
  413. package/dist/context/sl/sl-search.service.js +158 -0
  414. package/dist/context/sl/sl-validator.port.d.ts +8 -0
  415. package/dist/context/sl/tools/base-semantic-layer.tool.d.ts +46 -0
  416. package/dist/context/sl/tools/base-semantic-layer.tool.js +91 -0
  417. package/dist/context/sl/tools/sl-discover.tool.d.ts +52 -0
  418. package/dist/context/sl/tools/sl-discover.tool.test.js +72 -0
  419. package/dist/context/sl/tools/sl-edit-source.tool.d.ts +33 -0
  420. package/dist/context/sl/tools/sl-edit-source.tool.js +179 -0
  421. package/dist/context/sl/tools/sl-edit-source.tool.test.js +184 -0
  422. package/dist/context/sl/tools/sl-read-source.tool.d.ts +23 -0
  423. package/dist/context/sl/tools/sl-read-source.tool.session.test.js +55 -0
  424. package/dist/context/sl/tools/sl-rollback.tool.d.ts +25 -0
  425. package/dist/context/sl/tools/sl-rollback.tool.js +64 -0
  426. package/dist/context/sl/tools/sl-rollback.tool.test.js +57 -0
  427. package/dist/context/sl/tools/sl-validate.tool.d.ts +24 -0
  428. package/dist/context/sl/tools/sl-validate.tool.js +101 -0
  429. package/dist/context/sl/tools/sl-validate.tool.test.js +54 -0
  430. package/dist/context/sl/tools/sl-warehouse-validation.d.ts +32 -0
  431. package/dist/context/sl/tools/sl-warehouse-validation.js +246 -0
  432. package/dist/context/sl/tools/sl-write-source.tool.d.ts +422 -0
  433. package/dist/context/sl/tools/sl-write-source.tool.js +321 -0
  434. package/dist/context/sl/tools/sl-write-source.tool.test.js +307 -0
  435. package/dist/context/sl/types.d.ts +141 -0
  436. package/dist/context/sql-analysis/ports.d.ts +34 -0
  437. package/dist/context/tools/base-tool.d.ts +85 -0
  438. package/dist/context/tools/base-tool.js +94 -0
  439. package/dist/context/tools/context-candidate-mark.tool.d.ts +41 -0
  440. package/dist/context/tools/context-candidate-write.tool.d.ts +64 -0
  441. package/dist/context/tools/context-candidate-write.tool.js +140 -0
  442. package/dist/context/tools/context-evidence-search.tool.d.ts +57 -0
  443. package/dist/context/tools/context-evidence-search.tool.js +97 -0
  444. package/dist/context/tools/context-evidence-tool-store.d.ts +113 -0
  445. package/dist/context/tools/context-evidence-tools.test.js +486 -0
  446. package/dist/context/tools/tool-session.d.ts +55 -0
  447. package/dist/context/tools/touched-sl-sources.d.ts +13 -0
  448. package/dist/context/tools/touched-sl-sources.js +48 -0
  449. package/dist/context/wiki/keys.d.ts +10 -0
  450. package/dist/context/wiki/keys.js +26 -0
  451. package/dist/context/wiki/knowledge-wiki.service.d.ts +79 -0
  452. package/dist/context/wiki/knowledge-wiki.service.js +370 -0
  453. package/dist/context/wiki/knowledge-wiki.service.test.js +205 -0
  454. package/dist/context/wiki/local-knowledge.d.ts +58 -0
  455. package/dist/context/wiki/local-knowledge.js +290 -0
  456. package/dist/context/wiki/local-knowledge.test.js +270 -0
  457. package/dist/context/wiki/ports.d.ts +68 -0
  458. package/dist/context/wiki/tools/wiki-list-tags.tool.d.ts +16 -0
  459. package/dist/context/wiki/tools/wiki-list-tags.tool.js +34 -0
  460. package/dist/context/wiki/tools/wiki-read.tool.d.ts +28 -0
  461. package/dist/context/wiki/tools/wiki-read.tool.js +59 -0
  462. package/dist/context/wiki/tools/wiki-read.tool.test.js +66 -0
  463. package/dist/context/wiki/tools/wiki-remove.tool.d.ts +28 -0
  464. package/dist/context/wiki/tools/wiki-remove.tool.js +86 -0
  465. package/dist/context/wiki/tools/wiki-remove.tool.test.js +95 -0
  466. package/dist/context/wiki/tools/wiki-search.tool.d.ts +50 -0
  467. package/dist/context/wiki/tools/wiki-search.tool.js +54 -0
  468. package/dist/context/wiki/tools/wiki-write.tool.d.ts +80 -0
  469. package/dist/context/wiki/tools/wiki-write.tool.js +211 -0
  470. package/dist/context/wiki/tools/wiki-write.tool.test.js +264 -0
  471. package/dist/context/wiki/types.d.ts +45 -0
  472. package/dist/context/wiki/wiki-ref-validation.d.ts +17 -0
  473. package/dist/context-build-view.d.ts +4 -0
  474. package/dist/context-build-view.js +7 -2
  475. package/dist/context-build-view.test.js +1 -4
  476. package/dist/database-tree-picker.d.ts +36 -3
  477. package/dist/database-tree-picker.js +78 -3
  478. package/dist/database-tree-picker.test.js +82 -29
  479. package/dist/demo-assets.d.ts +7 -0
  480. package/dist/demo-assets.js +18 -0
  481. package/dist/demo-assets.test.js +27 -1
  482. package/dist/demo-metrics.d.ts +5 -1
  483. package/dist/demo-metrics.js +4 -0
  484. package/dist/doctor.d.ts +2 -1
  485. package/dist/doctor.js +13 -3
  486. package/dist/doctor.test.js +4 -11
  487. package/dist/embedding-resolution.d.ts +3 -2
  488. package/dist/embedding-resolution.js +2 -2
  489. package/dist/embedding-resolution.test.js +1 -1
  490. package/dist/index.test.js +8 -10
  491. package/dist/ingest-depth.d.ts +1 -1
  492. package/dist/ingest-query-executor.d.ts +2 -2
  493. package/dist/ingest-query-executor.test.js +1 -1
  494. package/dist/ingest-report-file.d.ts +1 -1
  495. package/dist/ingest-report-file.js +1 -1
  496. package/dist/ingest.d.ts +5 -3
  497. package/dist/ingest.js +13 -5
  498. package/dist/ingest.test-utils.d.ts +9 -2
  499. package/dist/ingest.test-utils.js +7 -3
  500. package/dist/ingest.test.js +52 -18
  501. package/dist/io/logger.d.ts +1 -0
  502. package/dist/io/logger.js +1 -0
  503. package/dist/knowledge.d.ts +2 -2
  504. package/dist/knowledge.js +29 -3
  505. package/dist/knowledge.test.js +17 -3
  506. package/dist/llm/model-health.d.ts +19 -0
  507. package/dist/llm/model-provider.d.ts +21 -0
  508. package/dist/llm/model-provider.js +150 -0
  509. package/dist/llm/types.d.ts +106 -0
  510. package/dist/local-adapters.d.ts +4 -3
  511. package/dist/local-adapters.js +43 -59
  512. package/dist/local-adapters.test.js +35 -31
  513. package/dist/local-scan-connectors.d.ts +2 -2
  514. package/dist/local-scan-connectors.js +38 -21
  515. package/dist/local-scan-connectors.test.js +2 -2
  516. package/dist/managed-local-embeddings.d.ts +1 -1
  517. package/dist/managed-mcp-daemon.d.ts +1 -0
  518. package/dist/managed-python-command.d.ts +5 -2
  519. package/dist/managed-python-command.js +7 -1
  520. package/dist/managed-python-daemon.d.ts +6 -2
  521. package/dist/managed-python-http.d.ts +8 -4
  522. package/dist/managed-python-http.js +5 -3
  523. package/dist/managed-python-runtime.d.ts +6 -2
  524. package/dist/managed-python-runtime.js +3 -0
  525. package/dist/mcp-http-server.d.ts +5 -2
  526. package/dist/mcp-http-server.js +5 -2
  527. package/dist/mcp-server-factory.d.ts +1 -1
  528. package/dist/mcp-server-factory.js +15 -7
  529. package/dist/mcp-server-factory.test.js +142 -0
  530. package/dist/mcp-stdio-server.d.ts +2 -2
  531. package/dist/mcp-stdio-server.js +4 -3
  532. package/dist/memory-flow-hud.d.ts +1 -1
  533. package/dist/memory-flow-interactive.d.ts +2 -1
  534. package/dist/memory-flow-interactive.js +4 -1
  535. package/dist/memory-flow-tui.d.ts +5 -2
  536. package/dist/memory-flow-tui.js +4 -1
  537. package/dist/next-steps.d.ts +2 -1
  538. package/dist/next-steps.js +3 -1
  539. package/dist/notion-page-picker.d.ts +7 -2
  540. package/dist/notion-page-picker.js +6 -2
  541. package/dist/print-command-tree.js +2 -8
  542. package/dist/prompt-navigation.d.ts +1 -0
  543. package/dist/prompt-navigation.js +1 -0
  544. package/dist/public-ingest.d.ts +2 -2
  545. package/dist/public-ingest.js +82 -15
  546. package/dist/public-ingest.test.js +83 -7
  547. package/dist/runtime-requirements.d.ts +2 -1
  548. package/dist/runtime-requirements.js +7 -0
  549. package/dist/runtime-requirements.test.js +13 -2
  550. package/dist/scan.d.ts +5 -1
  551. package/dist/scan.js +48 -5
  552. package/dist/scan.test.js +148 -9
  553. package/dist/setup-agents.d.ts +7 -3
  554. package/dist/setup-agents.js +9 -3
  555. package/dist/setup-agents.test.js +2 -2
  556. package/dist/setup-context.d.ts +8 -4
  557. package/dist/setup-context.js +15 -8
  558. package/dist/setup-context.test.js +4 -3
  559. package/dist/setup-database-context-depth.d.ts +2 -1
  560. package/dist/setup-database-context-depth.js +2 -1
  561. package/dist/setup-databases.d.ts +11 -2
  562. package/dist/setup-databases.js +349 -155
  563. package/dist/setup-databases.test.js +300 -82
  564. package/dist/setup-demo-tour.d.ts +8 -3
  565. package/dist/setup-demo-tour.js +10 -4
  566. package/dist/setup-embeddings.d.ts +3 -1
  567. package/dist/setup-embeddings.js +5 -3
  568. package/dist/setup-embeddings.test.js +3 -1
  569. package/dist/setup-interrupt.d.ts +1 -0
  570. package/dist/setup-models.d.ts +12 -9
  571. package/dist/setup-models.js +16 -9
  572. package/dist/setup-models.test.js +44 -39
  573. package/dist/setup-project.d.ts +5 -3
  574. package/dist/setup-project.js +3 -1
  575. package/dist/setup-project.test.js +1 -21
  576. package/dist/setup-prompts.d.ts +16 -0
  577. package/dist/setup-prompts.js +39 -1
  578. package/dist/setup-prompts.test.js +38 -0
  579. package/dist/setup-ready-menu.d.ts +2 -1
  580. package/dist/setup-runtime.d.ts +1 -1
  581. package/dist/setup-runtime.js +2 -1
  582. package/dist/setup-runtime.test.js +2 -1
  583. package/dist/setup-sources-notion.test.js +4 -2
  584. package/dist/setup-sources.d.ts +9 -3
  585. package/dist/setup-sources.js +31 -7
  586. package/dist/setup-sources.test.js +28 -2
  587. package/dist/setup.d.ts +1 -1
  588. package/dist/setup.js +56 -3
  589. package/dist/setup.test.js +37 -6
  590. package/dist/sl.d.ts +8 -12
  591. package/dist/sl.js +75 -4
  592. package/dist/sl.test.js +35 -2
  593. package/dist/source-mapping.d.ts +3 -2
  594. package/dist/source-mapping.js +13 -3
  595. package/dist/sql.d.ts +4 -3
  596. package/dist/sql.js +60 -8
  597. package/dist/sql.test.js +30 -3
  598. package/dist/standalone-smoke.test.js +1 -1
  599. package/dist/status-project.d.ts +56 -6
  600. package/dist/status-project.js +472 -81
  601. package/dist/status-project.test.js +502 -0
  602. package/dist/telemetry/command-hook.d.ts +28 -0
  603. package/dist/telemetry/command-hook.js +27 -0
  604. package/dist/telemetry/command-hook.test.js +31 -0
  605. package/dist/telemetry/demo-detect.d.ts +2 -0
  606. package/dist/telemetry/demo-detect.js +9 -0
  607. package/dist/telemetry/demo-detect.test.js +22 -0
  608. package/dist/telemetry/emitter.d.ts +20 -0
  609. package/dist/telemetry/emitter.js +74 -0
  610. package/dist/telemetry/emitter.test.js +103 -0
  611. package/dist/telemetry/events.d.ts +466 -0
  612. package/dist/telemetry/events.js +347 -0
  613. package/dist/telemetry/events.snapshot.test.js +135 -0
  614. package/dist/telemetry/events.test.js +136 -0
  615. package/dist/telemetry/identity.d.ts +33 -0
  616. package/dist/telemetry/identity.js +105 -0
  617. package/dist/telemetry/identity.test.js +148 -0
  618. package/dist/telemetry/index.d.ts +27 -0
  619. package/dist/telemetry/index.js +93 -0
  620. package/dist/telemetry/project-snapshot.d.ts +15 -0
  621. package/dist/telemetry/project-snapshot.js +55 -0
  622. package/dist/telemetry/project-snapshot.test.js +71 -0
  623. package/dist/telemetry/schema-writer.d.ts +15 -0
  624. package/dist/telemetry/schema-writer.js +45 -0
  625. package/dist/telemetry/schema-writer.test.js +23 -0
  626. package/dist/telemetry/scrubber.d.ts +1 -0
  627. package/dist/telemetry/scrubber.js +22 -0
  628. package/dist/telemetry/scrubber.test.js +21 -0
  629. package/dist/text-ingest.d.ts +4 -2
  630. package/dist/text-ingest.js +2 -2
  631. package/dist/tree-picker-state.d.ts +6 -0
  632. package/dist/tree-picker-state.js +6 -0
  633. package/dist/tree-picker-tui.d.ts +8 -0
  634. package/dist/tree-picker-tui.js +6 -0
  635. package/dist/viz-fallback.d.ts +1 -0
  636. package/dist/viz-fallback.js +1 -0
  637. package/package.json +39 -16
  638. package/assets/python/kaelio_ktx-0.4.1-py3-none-any.whl +0 -0
  639. package/dist/cli-project.d.ts +0 -12
  640. package/dist/cli-project.js +0 -8
  641. package/dist/cli-project.test.js +0 -22
  642. package/node_modules/@ktx/connector-bigquery/dist/connector.d.ts +0 -141
  643. package/node_modules/@ktx/connector-bigquery/dist/connector.js +0 -371
  644. package/node_modules/@ktx/connector-bigquery/dist/connector.test.js +0 -247
  645. package/node_modules/@ktx/connector-bigquery/dist/dialect.d.ts +0 -29
  646. package/node_modules/@ktx/connector-bigquery/dist/index.d.ts +0 -3
  647. package/node_modules/@ktx/connector-bigquery/dist/index.js +0 -3
  648. package/node_modules/@ktx/connector-bigquery/dist/live-database-introspection.d.ts +0 -10
  649. package/node_modules/@ktx/connector-bigquery/dist/live-database-introspection.js +0 -20
  650. package/node_modules/@ktx/connector-bigquery/dist/package-exports.test.js +0 -10
  651. package/node_modules/@ktx/connector-bigquery/package.json +0 -20
  652. package/node_modules/@ktx/connector-clickhouse/dist/connector.d.ts +0 -113
  653. package/node_modules/@ktx/connector-clickhouse/dist/connector.js +0 -345
  654. package/node_modules/@ktx/connector-clickhouse/dist/connector.test.js +0 -228
  655. package/node_modules/@ktx/connector-clickhouse/dist/dialect.d.ts +0 -33
  656. package/node_modules/@ktx/connector-clickhouse/dist/index.d.ts +0 -3
  657. package/node_modules/@ktx/connector-clickhouse/dist/index.js +0 -3
  658. package/node_modules/@ktx/connector-clickhouse/dist/live-database-introspection.d.ts +0 -11
  659. package/node_modules/@ktx/connector-clickhouse/dist/live-database-introspection.js +0 -21
  660. package/node_modules/@ktx/connector-clickhouse/dist/package-exports.test.js +0 -10
  661. package/node_modules/@ktx/connector-clickhouse/package.json +0 -20
  662. package/node_modules/@ktx/connector-mysql/dist/connector.d.ts +0 -116
  663. package/node_modules/@ktx/connector-mysql/dist/connector.js +0 -385
  664. package/node_modules/@ktx/connector-mysql/dist/connector.test.js +0 -218
  665. package/node_modules/@ktx/connector-mysql/dist/dialect.d.ts +0 -29
  666. package/node_modules/@ktx/connector-mysql/dist/index.d.ts +0 -3
  667. package/node_modules/@ktx/connector-mysql/dist/index.js +0 -3
  668. package/node_modules/@ktx/connector-mysql/dist/live-database-introspection.d.ts +0 -11
  669. package/node_modules/@ktx/connector-mysql/dist/live-database-introspection.js +0 -21
  670. package/node_modules/@ktx/connector-mysql/dist/package-exports.test.js +0 -11
  671. package/node_modules/@ktx/connector-mysql/package.json +0 -20
  672. package/node_modules/@ktx/connector-postgres/dist/connector.d.ts +0 -140
  673. package/node_modules/@ktx/connector-postgres/dist/connector.js +0 -497
  674. package/node_modules/@ktx/connector-postgres/dist/connector.test.js +0 -336
  675. package/node_modules/@ktx/connector-postgres/dist/dialect.d.ts +0 -29
  676. package/node_modules/@ktx/connector-postgres/dist/historic-sql-query-client.d.ts +0 -14
  677. package/node_modules/@ktx/connector-postgres/dist/index.d.ts +0 -4
  678. package/node_modules/@ktx/connector-postgres/dist/index.js +0 -4
  679. package/node_modules/@ktx/connector-postgres/dist/live-database-introspection.d.ts +0 -11
  680. package/node_modules/@ktx/connector-postgres/dist/live-database-introspection.js +0 -21
  681. package/node_modules/@ktx/connector-postgres/dist/package-exports.test.js +0 -12
  682. package/node_modules/@ktx/connector-postgres/package.json +0 -20
  683. package/node_modules/@ktx/connector-snowflake/dist/connector.d.ts +0 -129
  684. package/node_modules/@ktx/connector-snowflake/dist/connector.js +0 -517
  685. package/node_modules/@ktx/connector-snowflake/dist/connector.test.js +0 -210
  686. package/node_modules/@ktx/connector-snowflake/dist/dialect.d.ts +0 -29
  687. package/node_modules/@ktx/connector-snowflake/dist/index.d.ts +0 -3
  688. package/node_modules/@ktx/connector-snowflake/dist/index.js +0 -3
  689. package/node_modules/@ktx/connector-snowflake/dist/live-database-introspection.d.ts +0 -11
  690. package/node_modules/@ktx/connector-snowflake/dist/live-database-introspection.js +0 -21
  691. package/node_modules/@ktx/connector-snowflake/dist/package-exports.test.js +0 -10
  692. package/node_modules/@ktx/connector-snowflake/package.json +0 -20
  693. package/node_modules/@ktx/connector-sqlite/dist/connector.d.ts +0 -59
  694. package/node_modules/@ktx/connector-sqlite/dist/connector.js +0 -251
  695. package/node_modules/@ktx/connector-sqlite/dist/connector.test.js +0 -196
  696. package/node_modules/@ktx/connector-sqlite/dist/dialect.d.ts +0 -29
  697. package/node_modules/@ktx/connector-sqlite/dist/index.d.ts +0 -3
  698. package/node_modules/@ktx/connector-sqlite/dist/index.js +0 -3
  699. package/node_modules/@ktx/connector-sqlite/dist/live-database-introspection.d.ts +0 -8
  700. package/node_modules/@ktx/connector-sqlite/dist/live-database-introspection.js +0 -20
  701. package/node_modules/@ktx/connector-sqlite/dist/package-exports.test.js +0 -11
  702. package/node_modules/@ktx/connector-sqlite/package.json +0 -20
  703. package/node_modules/@ktx/connector-sqlserver/dist/connector.d.ts +0 -137
  704. package/node_modules/@ktx/connector-sqlserver/dist/connector.js +0 -503
  705. package/node_modules/@ktx/connector-sqlserver/dist/connector.test.js +0 -269
  706. package/node_modules/@ktx/connector-sqlserver/dist/dialect.d.ts +0 -30
  707. package/node_modules/@ktx/connector-sqlserver/dist/index.d.ts +0 -3
  708. package/node_modules/@ktx/connector-sqlserver/dist/index.js +0 -3
  709. package/node_modules/@ktx/connector-sqlserver/dist/live-database-introspection.d.ts +0 -11
  710. package/node_modules/@ktx/connector-sqlserver/dist/live-database-introspection.js +0 -21
  711. package/node_modules/@ktx/connector-sqlserver/dist/package-exports.test.js +0 -10
  712. package/node_modules/@ktx/connector-sqlserver/package.json +0 -20
  713. package/node_modules/@ktx/context/dist/agent/agent-runner.service.d.ts +0 -18
  714. package/node_modules/@ktx/context/dist/agent/agent-runner.service.js +0 -10
  715. package/node_modules/@ktx/context/dist/agent/agent-runner.service.test.js +0 -308
  716. package/node_modules/@ktx/context/dist/agent/index.d.ts +0 -2
  717. package/node_modules/@ktx/context/dist/agent/index.js +0 -1
  718. package/node_modules/@ktx/context/dist/connections/dialects.d.ts +0 -9
  719. package/node_modules/@ktx/context/dist/connections/index.d.ts +0 -11
  720. package/node_modules/@ktx/context/dist/connections/index.js +0 -9
  721. package/node_modules/@ktx/context/dist/connections/notion-config.d.ts +0 -41
  722. package/node_modules/@ktx/context/dist/connections/notion-config.js +0 -132
  723. package/node_modules/@ktx/context/dist/connections/query-executor.d.ts +0 -19
  724. package/node_modules/@ktx/context/dist/connections/sqlite-query-executor.d.ts +0 -3
  725. package/node_modules/@ktx/context/dist/connections/sqlite-query-executor.js +0 -73
  726. package/node_modules/@ktx/context/dist/core/config-reference.d.ts +0 -2
  727. package/node_modules/@ktx/context/dist/core/config-reference.js +0 -29
  728. package/node_modules/@ktx/context/dist/core/config.d.ts +0 -25
  729. package/node_modules/@ktx/context/dist/core/index.d.ts +0 -10
  730. package/node_modules/@ktx/context/dist/core/index.js +0 -5
  731. package/node_modules/@ktx/context/dist/core/redaction.d.ts +0 -4
  732. package/node_modules/@ktx/context/dist/core/redaction.js +0 -39
  733. package/node_modules/@ktx/context/dist/core/session-worktree.service.d.ts +0 -38
  734. package/node_modules/@ktx/context/dist/daemon/index.d.ts +0 -1
  735. package/node_modules/@ktx/context/dist/daemon/index.js +0 -1
  736. package/node_modules/@ktx/context/dist/daemon/semantic-layer-compute.d.ts +0 -80
  737. package/node_modules/@ktx/context/dist/daemon/semantic-layer-compute.js +0 -191
  738. package/node_modules/@ktx/context/dist/daemon/semantic-layer-compute.test.js +0 -301
  739. package/node_modules/@ktx/context/dist/index-sync/index.d.ts +0 -2
  740. package/node_modules/@ktx/context/dist/index-sync/index.js +0 -1
  741. package/node_modules/@ktx/context/dist/index-sync/reindex.d.ts +0 -20
  742. package/node_modules/@ktx/context/dist/index-sync/reindex.js +0 -141
  743. package/node_modules/@ktx/context/dist/index-sync/reindex.test.js +0 -139
  744. package/node_modules/@ktx/context/dist/index-sync/types.d.ts +0 -29
  745. package/node_modules/@ktx/context/dist/index.d.ts +0 -22
  746. package/node_modules/@ktx/context/dist/index.js +0 -19
  747. package/node_modules/@ktx/context/dist/index.test.js +0 -10
  748. package/node_modules/@ktx/context/dist/ingest/action-identity.d.ts +0 -3
  749. package/node_modules/@ktx/context/dist/ingest/adapters/dbt/parse.d.ts +0 -6
  750. package/node_modules/@ktx/context/dist/ingest/adapters/dbt/parse.js +0 -23
  751. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/match-tables.d.ts +0 -27
  752. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/match-tables.js +0 -80
  753. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/match-tables.test.js +0 -59
  754. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/merge-semantic-model-tables.d.ts +0 -3
  755. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/merge-semantic-model-tables.js +0 -28
  756. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/merge-semantic-model-tables.test.js +0 -55
  757. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/parse-schema.d.ts +0 -65
  758. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/parse-schema.js +0 -432
  759. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-description-updates.d.ts +0 -13
  760. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-description-updates.js +0 -46
  761. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-description-updates.test.js +0 -88
  762. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-metadata-updates.d.ts +0 -9
  763. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-metadata-updates.js +0 -57
  764. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-metadata-updates.test.js +0 -68
  765. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-relationship-updates.d.ts +0 -12
  766. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-relationship-updates.js +0 -34
  767. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-relationship-updates.test.js +0 -56
  768. package/node_modules/@ktx/context/dist/ingest/adapters/dbt-extraction-golden-parity.test.js +0 -392
  769. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/bigquery-query-history-reader.js +0 -199
  770. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/evidence.d.ts +0 -77
  771. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/evidence.js +0 -32
  772. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/local-ingest-acceptance.test.js +0 -235
  773. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/pattern-inputs.d.ts +0 -21
  774. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/pattern-inputs.js +0 -66
  775. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/projection.d.ts +0 -24
  776. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/skill-schemas.d.ts +0 -37
  777. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/skill-schemas.js +0 -24
  778. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/stage-unified.d.ts +0 -13
  779. package/node_modules/@ktx/context/dist/ingest/adapters/historic-sql/types.d.ts +0 -184
  780. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/daemon-introspection.d.ts +0 -20
  781. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/daemon-introspection.js +0 -190
  782. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/daemon-introspection.test.js +0 -236
  783. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/extracted-schema.d.ts +0 -29
  784. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/extracted-schema.js +0 -28
  785. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/extracted-schema.test.js +0 -129
  786. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/live-database.adapter.js +0 -24
  787. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/live-database.adapter.test.js +0 -55
  788. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/manifest.d.ts +0 -65
  789. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/stage.d.ts +0 -12
  790. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/stage.js +0 -105
  791. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/structural-sync.d.ts +0 -89
  792. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/structural-sync.js +0 -335
  793. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/structural-sync.test.js +0 -416
  794. package/node_modules/@ktx/context/dist/ingest/adapters/live-database/types.d.ts +0 -8
  795. package/node_modules/@ktx/context/dist/ingest/adapters/looker/factory.d.ts +0 -21
  796. package/node_modules/@ktx/context/dist/ingest/adapters/looker/factory.js +0 -22
  797. package/node_modules/@ktx/context/dist/ingest/adapters/looker/fetch.d.ts +0 -31
  798. package/node_modules/@ktx/context/dist/ingest/adapters/looker/local-looker.adapter.d.ts +0 -11
  799. package/node_modules/@ktx/context/dist/ingest/adapters/looker/local-looker.adapter.js +0 -45
  800. package/node_modules/@ktx/context/dist/ingest/adapters/looker/local-runtime-store.d.ts +0 -50
  801. package/node_modules/@ktx/context/dist/ingest/adapters/looker/mapping.d.ts +0 -126
  802. package/node_modules/@ktx/context/dist/ingest/adapters/looker/mapping.js +0 -303
  803. package/node_modules/@ktx/context/dist/ingest/adapters/looker/reconcile.d.ts +0 -2
  804. package/node_modules/@ktx/context/dist/ingest/adapters/looker/reconcile.js +0 -20
  805. package/node_modules/@ktx/context/dist/ingest/adapters/looker/reconcile.test.js +0 -22
  806. package/node_modules/@ktx/context/dist/ingest/adapters/looker/scope.d.ts +0 -6
  807. package/node_modules/@ktx/context/dist/ingest/adapters/looker/scope.js +0 -55
  808. package/node_modules/@ktx/context/dist/ingest/adapters/looker/tools/looker-query-to-sl.tool.d.ts +0 -107
  809. package/node_modules/@ktx/context/dist/ingest/adapters/looker/tools/looker-query-to-sl.tool.js +0 -236
  810. package/node_modules/@ktx/context/dist/ingest/adapters/looker/types.d.ts +0 -438
  811. package/node_modules/@ktx/context/dist/ingest/adapters/looker/types.js +0 -198
  812. package/node_modules/@ktx/context/dist/ingest/adapters/looker/types.test.js +0 -260
  813. package/node_modules/@ktx/context/dist/ingest/adapters/lookml/fetch-report.d.ts +0 -15
  814. package/node_modules/@ktx/context/dist/ingest/adapters/lookml/fetch-report.js +0 -98
  815. package/node_modules/@ktx/context/dist/ingest/adapters/lookml/pull-config.d.ts +0 -37
  816. package/node_modules/@ktx/context/dist/ingest/adapters/lookml/pull-config.js +0 -26
  817. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/client-port.d.ts +0 -167
  818. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/client.d.ts +0 -114
  819. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/client.js +0 -671
  820. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/fanout-planner.d.ts +0 -17
  821. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/local-metabase.adapter.d.ts +0 -13
  822. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/local-metabase.adapter.js +0 -41
  823. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/local-source-state-store.d.ts +0 -43
  824. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/local-source-state-store.js +0 -176
  825. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/local-source-state-store.test.js +0 -99
  826. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/mapping.d.ts +0 -92
  827. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/mapping.js +0 -220
  828. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/serialize-card.d.ts +0 -53
  829. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/serialize-card.js +0 -67
  830. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/source-state-port.d.ts +0 -23
  831. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/types.d.ts +0 -142
  832. package/node_modules/@ktx/context/dist/ingest/adapters/metabase/types.js +0 -106
  833. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/deep-parse.d.ts +0 -77
  834. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/deep-parse.js +0 -460
  835. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/import-semantic-models.d.ts +0 -29
  836. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/import-semantic-models.js +0 -136
  837. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/parse.d.ts +0 -42
  838. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/pull-config.d.ts +0 -37
  839. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/pull-config.js +0 -24
  840. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/semantic-models.d.ts +0 -39
  841. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/semantic-models.js +0 -278
  842. package/node_modules/@ktx/context/dist/ingest/adapters/metricflow/semantic-models.test.js +0 -204
  843. package/node_modules/@ktx/context/dist/ingest/adapters/notion/chunk.d.ts +0 -4
  844. package/node_modules/@ktx/context/dist/ingest/adapters/notion/chunk.js +0 -137
  845. package/node_modules/@ktx/context/dist/ingest/adapters/notion/cluster.d.ts +0 -10
  846. package/node_modules/@ktx/context/dist/ingest/adapters/notion/cluster.js +0 -82
  847. package/node_modules/@ktx/context/dist/ingest/adapters/notion/normalize.d.ts +0 -10
  848. package/node_modules/@ktx/context/dist/ingest/adapters/notion/normalize.js +0 -165
  849. package/node_modules/@ktx/context/dist/ingest/adapters/notion/notion-client.d.ts +0 -74
  850. package/node_modules/@ktx/context/dist/ingest/adapters/notion/notion-client.js +0 -107
  851. package/node_modules/@ktx/context/dist/ingest/artifact-gates.d.ts +0 -25
  852. package/node_modules/@ktx/context/dist/ingest/context-candidates/candidate-dedup.service.d.ts +0 -27
  853. package/node_modules/@ktx/context/dist/ingest/context-candidates/candidate-dedup.service.js +0 -234
  854. package/node_modules/@ktx/context/dist/ingest/context-candidates/context-candidate-carryforward.service.d.ts +0 -31
  855. package/node_modules/@ktx/context/dist/ingest/context-candidates/context-candidate-carryforward.service.js +0 -131
  856. package/node_modules/@ktx/context/dist/ingest/context-candidates/curator-pagination.service.d.ts +0 -64
  857. package/node_modules/@ktx/context/dist/ingest/context-candidates/curator-pagination.service.js +0 -240
  858. package/node_modules/@ktx/context/dist/ingest/context-candidates/index.d.ts +0 -9
  859. package/node_modules/@ktx/context/dist/ingest/context-candidates/index.js +0 -4
  860. package/node_modules/@ktx/context/dist/ingest/context-candidates/types.d.ts +0 -103
  861. package/node_modules/@ktx/context/dist/ingest/context-evidence/context-evidence-index.service.d.ts +0 -53
  862. package/node_modules/@ktx/context/dist/ingest/context-evidence/context-evidence-index.service.js +0 -303
  863. package/node_modules/@ktx/context/dist/ingest/context-evidence/index.d.ts +0 -5
  864. package/node_modules/@ktx/context/dist/ingest/context-evidence/index.js +0 -2
  865. package/node_modules/@ktx/context/dist/ingest/context-evidence/sqlite-context-evidence-store.d.ts +0 -89
  866. package/node_modules/@ktx/context/dist/ingest/context-evidence/sqlite-context-evidence-store.js +0 -1025
  867. package/node_modules/@ktx/context/dist/ingest/dbt-shared/project-vars.d.ts +0 -12
  868. package/node_modules/@ktx/context/dist/ingest/dbt-shared/project-vars.js +0 -86
  869. package/node_modules/@ktx/context/dist/ingest/dbt-shared/schema-files.d.ts +0 -3
  870. package/node_modules/@ktx/context/dist/ingest/dbt-shared/schema-files.js +0 -62
  871. package/node_modules/@ktx/context/dist/ingest/final-gate-repair.d.ts +0 -29
  872. package/node_modules/@ktx/context/dist/ingest/finalization-scope.d.ts +0 -22
  873. package/node_modules/@ktx/context/dist/ingest/index.d.ts +0 -154
  874. package/node_modules/@ktx/context/dist/ingest/index.js +0 -99
  875. package/node_modules/@ktx/context/dist/ingest/ingest-bundle.runner.isolated-diff.test.js +0 -1927
  876. package/node_modules/@ktx/context/dist/ingest/ingest-bundle.runner.js +0 -2247
  877. package/node_modules/@ktx/context/dist/ingest/ingest-bundle.runner.test.js +0 -1899
  878. package/node_modules/@ktx/context/dist/ingest/ingest-runtime-assets.test.js +0 -89
  879. package/node_modules/@ktx/context/dist/ingest/ingest-trace.d.ts +0 -50
  880. package/node_modules/@ktx/context/dist/ingest/ingest-trace.js +0 -88
  881. package/node_modules/@ktx/context/dist/ingest/isolated-diff/git-patch.d.ts +0 -16
  882. package/node_modules/@ktx/context/dist/ingest/isolated-diff/git-patch.js +0 -78
  883. package/node_modules/@ktx/context/dist/ingest/isolated-diff/patch-integrator.d.ts +0 -58
  884. package/node_modules/@ktx/context/dist/ingest/isolated-diff/patch-integrator.test.js +0 -369
  885. package/node_modules/@ktx/context/dist/ingest/isolated-diff/textual-conflict-resolver.d.ts +0 -23
  886. package/node_modules/@ktx/context/dist/ingest/isolated-diff/work-unit-executor.test.js +0 -137
  887. package/node_modules/@ktx/context/dist/ingest/local-adapters.d.ts +0 -35
  888. package/node_modules/@ktx/context/dist/ingest/local-adapters.js +0 -247
  889. package/node_modules/@ktx/context/dist/ingest/local-adapters.test.js +0 -625
  890. package/node_modules/@ktx/context/dist/ingest/local-bundle-ingest.test.js +0 -794
  891. package/node_modules/@ktx/context/dist/ingest/local-bundle-runtime.d.ts +0 -34
  892. package/node_modules/@ktx/context/dist/ingest/local-bundle-runtime.js +0 -601
  893. package/node_modules/@ktx/context/dist/ingest/local-bundle-runtime.test.js +0 -225
  894. package/node_modules/@ktx/context/dist/ingest/local-ingest.d.ts +0 -87
  895. package/node_modules/@ktx/context/dist/ingest/local-ingest.js +0 -297
  896. package/node_modules/@ktx/context/dist/ingest/local-mapping-reconcile.d.ts +0 -2
  897. package/node_modules/@ktx/context/dist/ingest/local-mapping-reconcile.js +0 -26
  898. package/node_modules/@ktx/context/dist/ingest/local-mapping-reconcile.test.js +0 -61
  899. package/node_modules/@ktx/context/dist/ingest/local-metabase-ingest.test.js +0 -227
  900. package/node_modules/@ktx/context/dist/ingest/local-stage-ingest.d.ts +0 -53
  901. package/node_modules/@ktx/context/dist/ingest/local-stage-ingest.js +0 -290
  902. package/node_modules/@ktx/context/dist/ingest/local-stage-ingest.test.js +0 -581
  903. package/node_modules/@ktx/context/dist/ingest/memory-flow/events.d.ts +0 -9
  904. package/node_modules/@ktx/context/dist/ingest/memory-flow/events.js +0 -196
  905. package/node_modules/@ktx/context/dist/ingest/memory-flow/index.d.ts +0 -6
  906. package/node_modules/@ktx/context/dist/ingest/memory-flow/index.js +0 -4
  907. package/node_modules/@ktx/context/dist/ingest/memory-flow/interaction.d.ts +0 -9
  908. package/node_modules/@ktx/context/dist/ingest/memory-flow/interaction.js +0 -315
  909. package/node_modules/@ktx/context/dist/ingest/memory-flow/package-export.test.d.ts +0 -1
  910. package/node_modules/@ktx/context/dist/ingest/memory-flow/package-export.test.js +0 -9
  911. package/node_modules/@ktx/context/dist/ingest/memory-flow/schema.d.ts +0 -208
  912. package/node_modules/@ktx/context/dist/ingest/memory-flow/schema.js +0 -172
  913. package/node_modules/@ktx/context/dist/ingest/memory-flow/visuals.d.ts +0 -20
  914. package/node_modules/@ktx/context/dist/ingest/memory-flow/visuals.js +0 -44
  915. package/node_modules/@ktx/context/dist/ingest/metabase-mapping.d.ts +0 -2
  916. package/node_modules/@ktx/context/dist/ingest/metabase-mapping.js +0 -1
  917. package/node_modules/@ktx/context/dist/ingest/page-triage/index.d.ts +0 -2
  918. package/node_modules/@ktx/context/dist/ingest/page-triage/index.js +0 -1
  919. package/node_modules/@ktx/context/dist/ingest/page-triage/page-triage.service.d.ts +0 -84
  920. package/node_modules/@ktx/context/dist/ingest/page-triage/page-triage.service.js +0 -318
  921. package/node_modules/@ktx/context/dist/ingest/ports.d.ts +0 -323
  922. package/node_modules/@ktx/context/dist/ingest/raw-sources-paths.d.ts +0 -4
  923. package/node_modules/@ktx/context/dist/ingest/raw-sources-paths.js +0 -16
  924. package/node_modules/@ktx/context/dist/ingest/repo-fetch.d.ts +0 -34
  925. package/node_modules/@ktx/context/dist/ingest/repo-fetch.js +0 -132
  926. package/node_modules/@ktx/context/dist/ingest/report-snapshot.d.ts +0 -298
  927. package/node_modules/@ktx/context/dist/ingest/report-snapshot.js +0 -212
  928. package/node_modules/@ktx/context/dist/ingest/reports.d.ts +0 -120
  929. package/node_modules/@ktx/context/dist/ingest/reports.js +0 -37
  930. package/node_modules/@ktx/context/dist/ingest/semantic-layer-target-policy.d.ts +0 -11
  931. package/node_modules/@ktx/context/dist/ingest/semantic-layer-target-policy.js +0 -26
  932. package/node_modules/@ktx/context/dist/ingest/stages/build-reconcile-context.d.ts +0 -61
  933. package/node_modules/@ktx/context/dist/ingest/stages/build-wu-context.d.ts +0 -27
  934. package/node_modules/@ktx/context/dist/ingest/stages/build-wu-context.js +0 -87
  935. package/node_modules/@ktx/context/dist/ingest/stages/stage-3-work-units.d.ts +0 -48
  936. package/node_modules/@ktx/context/dist/ingest/stages/stage-3-work-units.js +0 -108
  937. package/node_modules/@ktx/context/dist/ingest/stages/stage-3-work-units.test.js +0 -175
  938. package/node_modules/@ktx/context/dist/ingest/stages/stage-4-reconciliation.d.ts +0 -28
  939. package/node_modules/@ktx/context/dist/ingest/stages/stage-index.types.d.ts +0 -50
  940. package/node_modules/@ktx/context/dist/ingest/stages/validate-wu-sources.d.ts +0 -9
  941. package/node_modules/@ktx/context/dist/ingest/tools/tool-call-logger.d.ts +0 -33
  942. package/node_modules/@ktx/context/dist/ingest/tools/verification-ledger.tool.d.ts +0 -14
  943. package/node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/discover-data.tool.d.ts +0 -36
  944. package/node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/discover-data.tool.js +0 -94
  945. package/node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/entity-details.tool.d.ts +0 -43
  946. package/node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/entity-details.tool.js +0 -137
  947. package/node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/entity-details.tool.test.js +0 -146
  948. package/node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/index.d.ts +0 -9
  949. package/node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/sql-execution.tool.d.ts +0 -31
  950. package/node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/sql-execution.tool.js +0 -84
  951. package/node_modules/@ktx/context/dist/ingest/types.d.ts +0 -201
  952. package/node_modules/@ktx/context/dist/ingest/wiki-body-refs.d.ts +0 -24
  953. package/node_modules/@ktx/context/dist/ingest/wiki-body-refs.js +0 -111
  954. package/node_modules/@ktx/context/dist/ingest/wiki-sl-ref-repair.d.ts +0 -19
  955. package/node_modules/@ktx/context/dist/llm/ai-sdk-runtime.d.ts +0 -23
  956. package/node_modules/@ktx/context/dist/llm/ai-sdk-runtime.js +0 -133
  957. package/node_modules/@ktx/context/dist/llm/claude-code-env.d.ts +0 -2
  958. package/node_modules/@ktx/context/dist/llm/claude-code-env.js +0 -21
  959. package/node_modules/@ktx/context/dist/llm/claude-code-runtime.d.ts +0 -36
  960. package/node_modules/@ktx/context/dist/llm/claude-code-runtime.js +0 -269
  961. package/node_modules/@ktx/context/dist/llm/claude-code-runtime.test.js +0 -428
  962. package/node_modules/@ktx/context/dist/llm/debug-request-recorder.d.ts +0 -44
  963. package/node_modules/@ktx/context/dist/llm/debug-request-recorder.js +0 -79
  964. package/node_modules/@ktx/context/dist/llm/embedding-port.d.ts +0 -17
  965. package/node_modules/@ktx/context/dist/llm/embedding-port.test.js +0 -34
  966. package/node_modules/@ktx/context/dist/llm/generation.d.ts +0 -8
  967. package/node_modules/@ktx/context/dist/llm/generation.js +0 -6
  968. package/node_modules/@ktx/context/dist/llm/index.d.ts +0 -13
  969. package/node_modules/@ktx/context/dist/llm/index.js +0 -10
  970. package/node_modules/@ktx/context/dist/llm/local-config.d.ts +0 -20
  971. package/node_modules/@ktx/context/dist/llm/local-config.js +0 -133
  972. package/node_modules/@ktx/context/dist/llm/local-config.test.js +0 -164
  973. package/node_modules/@ktx/context/dist/llm/runtime-port.d.ts +0 -59
  974. package/node_modules/@ktx/context/dist/llm/runtime-tools.d.ts +0 -10
  975. package/node_modules/@ktx/context/dist/llm/runtime-tools.js +0 -68
  976. package/node_modules/@ktx/context/dist/mcp/context-tools.d.ts +0 -9
  977. package/node_modules/@ktx/context/dist/mcp/context-tools.js +0 -553
  978. package/node_modules/@ktx/context/dist/mcp/index.d.ts +0 -5
  979. package/node_modules/@ktx/context/dist/mcp/index.js +0 -3
  980. package/node_modules/@ktx/context/dist/mcp/local-project-ports.d.ts +0 -16
  981. package/node_modules/@ktx/context/dist/mcp/local-project-ports.js +0 -201
  982. package/node_modules/@ktx/context/dist/mcp/local-project-ports.test.js +0 -689
  983. package/node_modules/@ktx/context/dist/mcp/server.d.ts +0 -7
  984. package/node_modules/@ktx/context/dist/mcp/server.js +0 -24
  985. package/node_modules/@ktx/context/dist/mcp/server.test.js +0 -858
  986. package/node_modules/@ktx/context/dist/mcp/types.d.ts +0 -158
  987. package/node_modules/@ktx/context/dist/memory/capture-signals.d.ts +0 -8
  988. package/node_modules/@ktx/context/dist/memory/capture-signals.js +0 -103
  989. package/node_modules/@ktx/context/dist/memory/index.d.ts +0 -6
  990. package/node_modules/@ktx/context/dist/memory/index.js +0 -5
  991. package/node_modules/@ktx/context/dist/memory/local-memory.d.ts +0 -22
  992. package/node_modules/@ktx/context/dist/memory/local-memory.js +0 -391
  993. package/node_modules/@ktx/context/dist/memory/local-memory.test.js +0 -159
  994. package/node_modules/@ktx/context/dist/memory/memory-agent.service.d.ts +0 -59
  995. package/node_modules/@ktx/context/dist/memory/memory-agent.service.ingest.test.js +0 -355
  996. package/node_modules/@ktx/context/dist/memory/memory-agent.service.js +0 -539
  997. package/node_modules/@ktx/context/dist/memory/memory-agent.service.test.js +0 -413
  998. package/node_modules/@ktx/context/dist/memory/memory-runs.d.ts +0 -54
  999. package/node_modules/@ktx/context/dist/memory/memory-runtime-assets.test.js +0 -162
  1000. package/node_modules/@ktx/context/dist/memory/types.d.ts +0 -133
  1001. package/node_modules/@ktx/context/dist/package-exports.test.d.ts +0 -1
  1002. package/node_modules/@ktx/context/dist/package-exports.test.js +0 -248
  1003. package/node_modules/@ktx/context/dist/project/config.d.ts +0 -579
  1004. package/node_modules/@ktx/context/dist/project/config.js +0 -331
  1005. package/node_modules/@ktx/context/dist/project/config.test.js +0 -464
  1006. package/node_modules/@ktx/context/dist/project/driver-schemas.d.ts +0 -106
  1007. package/node_modules/@ktx/context/dist/project/driver-schemas.js +0 -184
  1008. package/node_modules/@ktx/context/dist/project/driver-schemas.test.js +0 -125
  1009. package/node_modules/@ktx/context/dist/project/index.d.ts +0 -12
  1010. package/node_modules/@ktx/context/dist/project/index.js +0 -6
  1011. package/node_modules/@ktx/context/dist/project/local-git-file-store.d.ts +0 -23
  1012. package/node_modules/@ktx/context/dist/project/local-git-file-store.test.js +0 -71
  1013. package/node_modules/@ktx/context/dist/project/mappings-yaml-schema.d.ts +0 -58
  1014. package/node_modules/@ktx/context/dist/project/mappings-yaml-schema.js +0 -109
  1015. package/node_modules/@ktx/context/dist/project/project.d.ts +0 -29
  1016. package/node_modules/@ktx/context/dist/project/project.js +0 -93
  1017. package/node_modules/@ktx/context/dist/project/setup-config.d.ts +0 -12
  1018. package/node_modules/@ktx/context/dist/project/setup-config.js +0 -79
  1019. package/node_modules/@ktx/context/dist/prompts/index.d.ts +0 -2
  1020. package/node_modules/@ktx/context/dist/prompts/index.js +0 -1
  1021. package/node_modules/@ktx/context/dist/prompts/prompt.service.d.ts +0 -28
  1022. package/node_modules/@ktx/context/dist/prompts/prompt.service.js +0 -84
  1023. package/node_modules/@ktx/context/dist/scan/credentials.d.ts +0 -8
  1024. package/node_modules/@ktx/context/dist/scan/credentials.js +0 -38
  1025. package/node_modules/@ktx/context/dist/scan/credentials.test.js +0 -161
  1026. package/node_modules/@ktx/context/dist/scan/data-dictionary.d.ts +0 -22
  1027. package/node_modules/@ktx/context/dist/scan/data-dictionary.js +0 -66
  1028. package/node_modules/@ktx/context/dist/scan/description-generation.d.ts +0 -122
  1029. package/node_modules/@ktx/context/dist/scan/description-generation.js +0 -556
  1030. package/node_modules/@ktx/context/dist/scan/description-generation.test.js +0 -587
  1031. package/node_modules/@ktx/context/dist/scan/embedding-text.d.ts +0 -21
  1032. package/node_modules/@ktx/context/dist/scan/enabled-tables.d.ts +0 -3
  1033. package/node_modules/@ktx/context/dist/scan/enabled-tables.js +0 -15
  1034. package/node_modules/@ktx/context/dist/scan/enrichment-state.d.ts +0 -48
  1035. package/node_modules/@ktx/context/dist/scan/enrichment-state.js +0 -44
  1036. package/node_modules/@ktx/context/dist/scan/enrichment-types.d.ts +0 -104
  1037. package/node_modules/@ktx/context/dist/scan/entity-details.d.ts +0 -57
  1038. package/node_modules/@ktx/context/dist/scan/entity-details.test.js +0 -234
  1039. package/node_modules/@ktx/context/dist/scan/index.d.ts +0 -72
  1040. package/node_modules/@ktx/context/dist/scan/index.js +0 -37
  1041. package/node_modules/@ktx/context/dist/scan/local-enrichment-artifacts.d.ts +0 -32
  1042. package/node_modules/@ktx/context/dist/scan/local-enrichment-artifacts.js +0 -274
  1043. package/node_modules/@ktx/context/dist/scan/local-enrichment-artifacts.test.js +0 -767
  1044. package/node_modules/@ktx/context/dist/scan/local-enrichment.d.ts +0 -45
  1045. package/node_modules/@ktx/context/dist/scan/local-enrichment.js +0 -478
  1046. package/node_modules/@ktx/context/dist/scan/local-enrichment.test.js +0 -773
  1047. package/node_modules/@ktx/context/dist/scan/local-scan.d.ts +0 -68
  1048. package/node_modules/@ktx/context/dist/scan/local-scan.js +0 -415
  1049. package/node_modules/@ktx/context/dist/scan/local-scan.test.js +0 -1398
  1050. package/node_modules/@ktx/context/dist/scan/local-structural-artifacts.d.ts +0 -10
  1051. package/node_modules/@ktx/context/dist/scan/local-structural-artifacts.test.js +0 -144
  1052. package/node_modules/@ktx/context/dist/scan/orchestrator.d.ts +0 -44
  1053. package/node_modules/@ktx/context/dist/scan/orchestrator.js +0 -186
  1054. package/node_modules/@ktx/context/dist/scan/orchestrator.test.d.ts +0 -1
  1055. package/node_modules/@ktx/context/dist/scan/orchestrator.test.js +0 -335
  1056. package/node_modules/@ktx/context/dist/scan/relationship-artifacts.d.ts +0 -20
  1057. package/node_modules/@ktx/context/dist/scan/relationship-artifacts.js +0 -45
  1058. package/node_modules/@ktx/context/dist/scan/relationship-artifacts.test.d.ts +0 -1
  1059. package/node_modules/@ktx/context/dist/scan/relationship-artifacts.test.js +0 -268
  1060. package/node_modules/@ktx/context/dist/scan/relationship-benchmarks.d.ts +0 -148
  1061. package/node_modules/@ktx/context/dist/scan/relationship-budget.d.ts +0 -19
  1062. package/node_modules/@ktx/context/dist/scan/relationship-budget.js +0 -34
  1063. package/node_modules/@ktx/context/dist/scan/relationship-candidates.d.ts +0 -49
  1064. package/node_modules/@ktx/context/dist/scan/relationship-candidates.js +0 -556
  1065. package/node_modules/@ktx/context/dist/scan/relationship-composite-candidates.d.ts +0 -66
  1066. package/node_modules/@ktx/context/dist/scan/relationship-diagnostics.d.ts +0 -94
  1067. package/node_modules/@ktx/context/dist/scan/relationship-diagnostics.js +0 -224
  1068. package/node_modules/@ktx/context/dist/scan/relationship-discovery.d.ts +0 -27
  1069. package/node_modules/@ktx/context/dist/scan/relationship-discovery.js +0 -247
  1070. package/node_modules/@ktx/context/dist/scan/relationship-feedback-calibration.d.ts +0 -70
  1071. package/node_modules/@ktx/context/dist/scan/relationship-feedback-calibration.js +0 -170
  1072. package/node_modules/@ktx/context/dist/scan/relationship-feedback-calibration.test.d.ts +0 -1
  1073. package/node_modules/@ktx/context/dist/scan/relationship-feedback-calibration.test.js +0 -175
  1074. package/node_modules/@ktx/context/dist/scan/relationship-feedback-export.d.ts +0 -54
  1075. package/node_modules/@ktx/context/dist/scan/relationship-feedback-export.js +0 -96
  1076. package/node_modules/@ktx/context/dist/scan/relationship-feedback-export.test.d.ts +0 -1
  1077. package/node_modules/@ktx/context/dist/scan/relationship-feedback-export.test.js +0 -241
  1078. package/node_modules/@ktx/context/dist/scan/relationship-graph-resolver.d.ts +0 -48
  1079. package/node_modules/@ktx/context/dist/scan/relationship-llm-proposal.d.ts +0 -25
  1080. package/node_modules/@ktx/context/dist/scan/relationship-llm-proposal.js +0 -193
  1081. package/node_modules/@ktx/context/dist/scan/relationship-name-similarity.d.ts +0 -13
  1082. package/node_modules/@ktx/context/dist/scan/relationship-name-similarity.js +0 -123
  1083. package/node_modules/@ktx/context/dist/scan/relationship-profiling.d.ts +0 -55
  1084. package/node_modules/@ktx/context/dist/scan/relationship-profiling.js +0 -321
  1085. package/node_modules/@ktx/context/dist/scan/relationship-profiling.test.js +0 -313
  1086. package/node_modules/@ktx/context/dist/scan/relationship-review-apply.d.ts +0 -34
  1087. package/node_modules/@ktx/context/dist/scan/relationship-review-apply.js +0 -152
  1088. package/node_modules/@ktx/context/dist/scan/relationship-review-apply.test.d.ts +0 -1
  1089. package/node_modules/@ktx/context/dist/scan/relationship-review-apply.test.js +0 -321
  1090. package/node_modules/@ktx/context/dist/scan/relationship-review-decisions.d.ts +0 -46
  1091. package/node_modules/@ktx/context/dist/scan/relationship-review-decisions.js +0 -92
  1092. package/node_modules/@ktx/context/dist/scan/relationship-review-decisions.test.d.ts +0 -1
  1093. package/node_modules/@ktx/context/dist/scan/relationship-review-decisions.test.js +0 -312
  1094. package/node_modules/@ktx/context/dist/scan/relationship-scoring.d.ts +0 -29
  1095. package/node_modules/@ktx/context/dist/scan/relationship-scoring.js +0 -95
  1096. package/node_modules/@ktx/context/dist/scan/relationship-threshold-advice.d.ts +0 -60
  1097. package/node_modules/@ktx/context/dist/scan/relationship-threshold-advice.js +0 -190
  1098. package/node_modules/@ktx/context/dist/scan/relationship-threshold-advice.test.d.ts +0 -1
  1099. package/node_modules/@ktx/context/dist/scan/relationship-threshold-advice.test.js +0 -205
  1100. package/node_modules/@ktx/context/dist/scan/relationship-validation.d.ts +0 -44
  1101. package/node_modules/@ktx/context/dist/scan/relationship-validation.js +0 -240
  1102. package/node_modules/@ktx/context/dist/scan/relationship-validation.test.js +0 -450
  1103. package/node_modules/@ktx/context/dist/scan/type-normalization.d.ts +0 -8
  1104. package/node_modules/@ktx/context/dist/scan/type-normalization.js +0 -23
  1105. package/node_modules/@ktx/context/dist/scan/types.d.ts +0 -309
  1106. package/node_modules/@ktx/context/dist/scan/warehouse-catalog.d.ts +0 -69
  1107. package/node_modules/@ktx/context/dist/scan/warehouse-catalog.js +0 -311
  1108. package/node_modules/@ktx/context/dist/scan/warehouse-catalog.test.js +0 -158
  1109. package/node_modules/@ktx/context/dist/search/backend-conformance.test.d.ts +0 -1
  1110. package/node_modules/@ktx/context/dist/search/backend-conformance.test.js +0 -408
  1111. package/node_modules/@ktx/context/dist/search/discover.d.ts +0 -30
  1112. package/node_modules/@ktx/context/dist/search/discover.js +0 -340
  1113. package/node_modules/@ktx/context/dist/search/discover.test.js +0 -197
  1114. package/node_modules/@ktx/context/dist/search/index.d.ts +0 -8
  1115. package/node_modules/@ktx/context/dist/search/index.js +0 -5
  1116. package/node_modules/@ktx/context/dist/search/pglite-owner-process.d.ts +0 -27
  1117. package/node_modules/@ktx/context/dist/search/pglite-owner-process.js +0 -89
  1118. package/node_modules/@ktx/context/dist/search/pglite-owner-process.test.js +0 -286
  1119. package/node_modules/@ktx/context/dist/search/pglite-runtime-boundary.test.js +0 -48
  1120. package/node_modules/@ktx/context/dist/search/pglite-spike.test.js +0 -249
  1121. package/node_modules/@ktx/context/dist/search/types.d.ts +0 -73
  1122. package/node_modules/@ktx/context/dist/skills/index.d.ts +0 -2
  1123. package/node_modules/@ktx/context/dist/skills/index.js +0 -1
  1124. package/node_modules/@ktx/context/dist/skills/skills-registry.service.d.ts +0 -35
  1125. package/node_modules/@ktx/context/dist/skills/skills-registry.service.js +0 -215
  1126. package/node_modules/@ktx/context/dist/sl/dictionary-search.d.ts +0 -42
  1127. package/node_modules/@ktx/context/dist/sl/dictionary-search.test.js +0 -204
  1128. package/node_modules/@ktx/context/dist/sl/index.d.ts +0 -15
  1129. package/node_modules/@ktx/context/dist/sl/index.js +0 -10
  1130. package/node_modules/@ktx/context/dist/sl/local-query.d.ts +0 -19
  1131. package/node_modules/@ktx/context/dist/sl/local-query.test.js +0 -283
  1132. package/node_modules/@ktx/context/dist/sl/local-sl.d.ts +0 -60
  1133. package/node_modules/@ktx/context/dist/sl/local-sl.js +0 -484
  1134. package/node_modules/@ktx/context/dist/sl/local-sl.test.js +0 -334
  1135. package/node_modules/@ktx/context/dist/sl/pglite-sl-search-prototype.d.ts +0 -16
  1136. package/node_modules/@ktx/context/dist/sl/pglite-sl-search-prototype.js +0 -433
  1137. package/node_modules/@ktx/context/dist/sl/pglite-sl-search-prototype.test.js +0 -240
  1138. package/node_modules/@ktx/context/dist/sl/semantic-layer.service.d.ts +0 -214
  1139. package/node_modules/@ktx/context/dist/sl/semantic-layer.service.js +0 -1334
  1140. package/node_modules/@ktx/context/dist/sl/semantic-layer.service.test.js +0 -1084
  1141. package/node_modules/@ktx/context/dist/sl/sl-dictionary-profile.d.ts +0 -9
  1142. package/node_modules/@ktx/context/dist/sl/sl-dictionary-profile.js +0 -80
  1143. package/node_modules/@ktx/context/dist/sl/sl-dictionary-profile.test.js +0 -88
  1144. package/node_modules/@ktx/context/dist/sl/sl-search.service.d.ts +0 -18
  1145. package/node_modules/@ktx/context/dist/sl/sl-search.service.js +0 -158
  1146. package/node_modules/@ktx/context/dist/sl/sl-validator.port.d.ts +0 -7
  1147. package/node_modules/@ktx/context/dist/sl/tools/base-semantic-layer.tool.d.ts +0 -45
  1148. package/node_modules/@ktx/context/dist/sl/tools/base-semantic-layer.tool.js +0 -91
  1149. package/node_modules/@ktx/context/dist/sl/tools/index.d.ts +0 -11
  1150. package/node_modules/@ktx/context/dist/sl/tools/index.js +0 -8
  1151. package/node_modules/@ktx/context/dist/sl/tools/sl-discover.tool.d.ts +0 -52
  1152. package/node_modules/@ktx/context/dist/sl/tools/sl-discover.tool.test.js +0 -72
  1153. package/node_modules/@ktx/context/dist/sl/tools/sl-edit-source.tool.d.ts +0 -33
  1154. package/node_modules/@ktx/context/dist/sl/tools/sl-edit-source.tool.js +0 -177
  1155. package/node_modules/@ktx/context/dist/sl/tools/sl-edit-source.tool.test.js +0 -184
  1156. package/node_modules/@ktx/context/dist/sl/tools/sl-read-source.tool.d.ts +0 -23
  1157. package/node_modules/@ktx/context/dist/sl/tools/sl-read-source.tool.session.test.js +0 -55
  1158. package/node_modules/@ktx/context/dist/sl/tools/sl-rollback.tool.d.ts +0 -25
  1159. package/node_modules/@ktx/context/dist/sl/tools/sl-rollback.tool.js +0 -63
  1160. package/node_modules/@ktx/context/dist/sl/tools/sl-rollback.tool.test.js +0 -57
  1161. package/node_modules/@ktx/context/dist/sl/tools/sl-validate.tool.d.ts +0 -23
  1162. package/node_modules/@ktx/context/dist/sl/tools/sl-validate.tool.js +0 -100
  1163. package/node_modules/@ktx/context/dist/sl/tools/sl-validate.tool.test.js +0 -54
  1164. package/node_modules/@ktx/context/dist/sl/tools/sl-warehouse-validation.d.ts +0 -29
  1165. package/node_modules/@ktx/context/dist/sl/tools/sl-warehouse-validation.js +0 -245
  1166. package/node_modules/@ktx/context/dist/sl/tools/sl-write-source.tool.d.ts +0 -422
  1167. package/node_modules/@ktx/context/dist/sl/tools/sl-write-source.tool.js +0 -319
  1168. package/node_modules/@ktx/context/dist/sl/tools/sl-write-source.tool.test.js +0 -307
  1169. package/node_modules/@ktx/context/dist/sl/types.d.ts +0 -147
  1170. package/node_modules/@ktx/context/dist/sql-analysis/index.d.ts +0 -3
  1171. package/node_modules/@ktx/context/dist/sql-analysis/index.js +0 -1
  1172. package/node_modules/@ktx/context/dist/sql-analysis/ports.d.ts +0 -33
  1173. package/node_modules/@ktx/context/dist/tools/base-tool.d.ts +0 -85
  1174. package/node_modules/@ktx/context/dist/tools/base-tool.js +0 -94
  1175. package/node_modules/@ktx/context/dist/tools/context-candidate-mark.tool.d.ts +0 -41
  1176. package/node_modules/@ktx/context/dist/tools/context-candidate-write.tool.d.ts +0 -64
  1177. package/node_modules/@ktx/context/dist/tools/context-candidate-write.tool.js +0 -140
  1178. package/node_modules/@ktx/context/dist/tools/context-evidence-search.tool.d.ts +0 -57
  1179. package/node_modules/@ktx/context/dist/tools/context-evidence-search.tool.js +0 -92
  1180. package/node_modules/@ktx/context/dist/tools/context-evidence-tool-store.d.ts +0 -112
  1181. package/node_modules/@ktx/context/dist/tools/context-evidence-tools.test.js +0 -486
  1182. package/node_modules/@ktx/context/dist/tools/index.d.ts +0 -19
  1183. package/node_modules/@ktx/context/dist/tools/index.js +0 -12
  1184. package/node_modules/@ktx/context/dist/tools/tool-session.d.ts +0 -54
  1185. package/node_modules/@ktx/context/dist/tools/touched-sl-sources.d.ts +0 -12
  1186. package/node_modules/@ktx/context/dist/tools/touched-sl-sources.js +0 -47
  1187. package/node_modules/@ktx/context/dist/wiki/index.d.ts +0 -9
  1188. package/node_modules/@ktx/context/dist/wiki/index.js +0 -6
  1189. package/node_modules/@ktx/context/dist/wiki/keys.d.ts +0 -11
  1190. package/node_modules/@ktx/context/dist/wiki/keys.js +0 -26
  1191. package/node_modules/@ktx/context/dist/wiki/knowledge-wiki.service.d.ts +0 -77
  1192. package/node_modules/@ktx/context/dist/wiki/knowledge-wiki.service.js +0 -357
  1193. package/node_modules/@ktx/context/dist/wiki/knowledge-wiki.service.test.js +0 -190
  1194. package/node_modules/@ktx/context/dist/wiki/local-knowledge.d.ts +0 -55
  1195. package/node_modules/@ktx/context/dist/wiki/local-knowledge.js +0 -289
  1196. package/node_modules/@ktx/context/dist/wiki/local-knowledge.test.js +0 -270
  1197. package/node_modules/@ktx/context/dist/wiki/ports.d.ts +0 -70
  1198. package/node_modules/@ktx/context/dist/wiki/tools/index.d.ts +0 -5
  1199. package/node_modules/@ktx/context/dist/wiki/tools/index.js +0 -5
  1200. package/node_modules/@ktx/context/dist/wiki/tools/wiki-list-tags.tool.d.ts +0 -16
  1201. package/node_modules/@ktx/context/dist/wiki/tools/wiki-list-tags.tool.js +0 -34
  1202. package/node_modules/@ktx/context/dist/wiki/tools/wiki-read.tool.d.ts +0 -28
  1203. package/node_modules/@ktx/context/dist/wiki/tools/wiki-read.tool.js +0 -59
  1204. package/node_modules/@ktx/context/dist/wiki/tools/wiki-read.tool.test.js +0 -66
  1205. package/node_modules/@ktx/context/dist/wiki/tools/wiki-remove.tool.d.ts +0 -28
  1206. package/node_modules/@ktx/context/dist/wiki/tools/wiki-remove.tool.js +0 -85
  1207. package/node_modules/@ktx/context/dist/wiki/tools/wiki-remove.tool.test.js +0 -95
  1208. package/node_modules/@ktx/context/dist/wiki/tools/wiki-search.tool.d.ts +0 -49
  1209. package/node_modules/@ktx/context/dist/wiki/tools/wiki-search.tool.js +0 -51
  1210. package/node_modules/@ktx/context/dist/wiki/tools/wiki-write.tool.d.ts +0 -80
  1211. package/node_modules/@ktx/context/dist/wiki/tools/wiki-write.tool.js +0 -210
  1212. package/node_modules/@ktx/context/dist/wiki/tools/wiki-write.tool.test.js +0 -264
  1213. package/node_modules/@ktx/context/dist/wiki/types.d.ts +0 -50
  1214. package/node_modules/@ktx/context/dist/wiki/wiki-ref-validation.d.ts +0 -17
  1215. package/node_modules/@ktx/context/package.json +0 -122
  1216. package/node_modules/@ktx/llm/dist/index.d.ts +0 -11
  1217. package/node_modules/@ktx/llm/dist/index.js +0 -6
  1218. package/node_modules/@ktx/llm/dist/model-health.d.ts +0 -18
  1219. package/node_modules/@ktx/llm/dist/model-provider.d.ts +0 -22
  1220. package/node_modules/@ktx/llm/dist/model-provider.js +0 -150
  1221. package/node_modules/@ktx/llm/dist/package-exports.test.d.ts +0 -1
  1222. package/node_modules/@ktx/llm/dist/package-exports.test.js +0 -17
  1223. package/node_modules/@ktx/llm/dist/types.d.ts +0 -105
  1224. package/node_modules/@ktx/llm/package.json +0 -20
  1225. /package/dist/{cli-project.test.d.ts → cli-program-telemetry.test.d.ts} +0 -0
  1226. /package/{node_modules/@ktx/connector-bigquery/dist → dist/connectors/bigquery}/connector.test.d.ts +0 -0
  1227. /package/{node_modules/@ktx/connector-bigquery/dist → dist/connectors/bigquery}/dialect.js +0 -0
  1228. /package/{node_modules/@ktx/connector-bigquery/dist → dist/connectors/bigquery}/dialect.test.d.ts +0 -0
  1229. /package/{node_modules/@ktx/connector-bigquery/dist → dist/connectors/bigquery}/dialect.test.js +0 -0
  1230. /package/{node_modules/@ktx/connector-clickhouse/dist → dist/connectors/clickhouse}/connector.test.d.ts +0 -0
  1231. /package/{node_modules/@ktx/connector-clickhouse/dist → dist/connectors/clickhouse}/dialect.js +0 -0
  1232. /package/{node_modules/@ktx/connector-clickhouse/dist → dist/connectors/clickhouse}/dialect.test.d.ts +0 -0
  1233. /package/{node_modules/@ktx/connector-clickhouse/dist → dist/connectors/clickhouse}/dialect.test.js +0 -0
  1234. /package/{node_modules/@ktx/connector-mysql/dist → dist/connectors/mysql}/connector.test.d.ts +0 -0
  1235. /package/{node_modules/@ktx/connector-mysql/dist → dist/connectors/mysql}/dialect.js +0 -0
  1236. /package/{node_modules/@ktx/connector-mysql/dist → dist/connectors/mysql}/dialect.test.d.ts +0 -0
  1237. /package/{node_modules/@ktx/connector-mysql/dist → dist/connectors/mysql}/dialect.test.js +0 -0
  1238. /package/{node_modules/@ktx/connector-postgres/dist → dist/connectors/postgres}/connector.test.d.ts +0 -0
  1239. /package/{node_modules/@ktx/connector-postgres/dist → dist/connectors/postgres}/dialect.js +0 -0
  1240. /package/{node_modules/@ktx/connector-postgres/dist → dist/connectors/postgres}/dialect.test.d.ts +0 -0
  1241. /package/{node_modules/@ktx/connector-postgres/dist → dist/connectors/postgres}/dialect.test.js +0 -0
  1242. /package/{node_modules/@ktx/connector-postgres/dist → dist/connectors/postgres}/historic-sql-query-client.js +0 -0
  1243. /package/{node_modules/@ktx/connector-postgres/dist → dist/connectors/postgres}/historic-sql-query-client.test.d.ts +0 -0
  1244. /package/{node_modules/@ktx/connector-postgres/dist → dist/connectors/postgres}/historic-sql-query-client.test.js +0 -0
  1245. /package/{node_modules/@ktx/connector-snowflake/dist → dist/connectors/snowflake}/connector.test.d.ts +0 -0
  1246. /package/{node_modules/@ktx/connector-snowflake/dist → dist/connectors/snowflake}/dialect.js +0 -0
  1247. /package/{node_modules/@ktx/connector-snowflake/dist → dist/connectors/snowflake}/dialect.test.d.ts +0 -0
  1248. /package/{node_modules/@ktx/connector-snowflake/dist → dist/connectors/snowflake}/dialect.test.js +0 -0
  1249. /package/{node_modules/@ktx/connector-bigquery/dist/package-exports.test.d.ts → dist/connectors/snowflake/identifiers.test.d.ts} +0 -0
  1250. /package/{node_modules/@ktx/connector-clickhouse/dist/package-exports.test.d.ts → dist/connectors/snowflake/sdk-logger.test.d.ts} +0 -0
  1251. /package/{node_modules/@ktx/connector-sqlite/dist → dist/connectors/sqlite}/connector.test.d.ts +0 -0
  1252. /package/{node_modules/@ktx/connector-sqlite/dist → dist/connectors/sqlite}/dialect.js +0 -0
  1253. /package/{node_modules/@ktx/connector-sqlite/dist → dist/connectors/sqlite}/dialect.test.d.ts +0 -0
  1254. /package/{node_modules/@ktx/connector-sqlite/dist → dist/connectors/sqlite}/dialect.test.js +0 -0
  1255. /package/{node_modules/@ktx/connector-sqlserver/dist → dist/connectors/sqlserver}/connector.test.d.ts +0 -0
  1256. /package/{node_modules/@ktx/connector-sqlserver/dist → dist/connectors/sqlserver}/dialect.js +0 -0
  1257. /package/{node_modules/@ktx/connector-sqlserver/dist → dist/connectors/sqlserver}/dialect.test.d.ts +0 -0
  1258. /package/{node_modules/@ktx/connector-sqlserver/dist → dist/connectors/sqlserver}/dialect.test.js +0 -0
  1259. /package/{node_modules/@ktx/connector-mysql/dist/package-exports.test.d.ts → dist/context/connections/bigquery-identifiers.test.d.ts} +0 -0
  1260. /package/{node_modules/@ktx/context/dist → dist/context}/connections/connection-type.d.ts +0 -0
  1261. /package/{node_modules/@ktx/context/dist → dist/context}/connections/connection-type.js +0 -0
  1262. /package/{node_modules/@ktx/context/dist → dist/context}/connections/dialects.js +0 -0
  1263. /package/{node_modules/@ktx/context/dist → dist/context}/connections/dialects.test.d.ts +0 -0
  1264. /package/{node_modules/@ktx/context/dist → dist/context}/connections/dialects.test.js +0 -0
  1265. /package/{node_modules/@ktx/context/dist → dist/context}/connections/local-query-executor.d.ts +0 -0
  1266. /package/{node_modules/@ktx/context/dist → dist/context}/connections/local-query-executor.js +0 -0
  1267. /package/{node_modules/@ktx/context/dist → dist/context}/connections/local-query-executor.test.d.ts +0 -0
  1268. /package/{node_modules/@ktx/context/dist → dist/context}/connections/local-query-executor.test.js +0 -0
  1269. /package/{node_modules/@ktx/context/dist → dist/context}/connections/local-warehouse-descriptor.d.ts +0 -0
  1270. /package/{node_modules/@ktx/context/dist → dist/context}/connections/local-warehouse-descriptor.js +0 -0
  1271. /package/{node_modules/@ktx/context/dist → dist/context}/connections/local-warehouse-descriptor.test.d.ts +0 -0
  1272. /package/{node_modules/@ktx/context/dist → dist/context}/connections/local-warehouse-descriptor.test.js +0 -0
  1273. /package/{node_modules/@ktx/context/dist → dist/context}/connections/notion-config.test.d.ts +0 -0
  1274. /package/{node_modules/@ktx/context/dist → dist/context}/connections/notion-config.test.js +0 -0
  1275. /package/{node_modules/@ktx/context/dist → dist/context}/connections/postgres-query-executor.d.ts +0 -0
  1276. /package/{node_modules/@ktx/context/dist → dist/context}/connections/postgres-query-executor.js +0 -0
  1277. /package/{node_modules/@ktx/context/dist → dist/context}/connections/postgres-query-executor.test.d.ts +0 -0
  1278. /package/{node_modules/@ktx/context/dist → dist/context}/connections/postgres-query-executor.test.js +0 -0
  1279. /package/{node_modules/@ktx/context/dist → dist/context}/connections/query-executor.js +0 -0
  1280. /package/{node_modules/@ktx/context/dist → dist/context}/connections/read-only-sql.d.ts +0 -0
  1281. /package/{node_modules/@ktx/context/dist → dist/context}/connections/read-only-sql.js +0 -0
  1282. /package/{node_modules/@ktx/context/dist → dist/context}/connections/read-only-sql.test.d.ts +0 -0
  1283. /package/{node_modules/@ktx/context/dist → dist/context}/connections/read-only-sql.test.js +0 -0
  1284. /package/{node_modules/@ktx/context/dist → dist/context}/connections/sqlite-query-executor.test.d.ts +0 -0
  1285. /package/{node_modules/@ktx/context/dist → dist/context}/connections/sqlite-query-executor.test.js +0 -0
  1286. /package/{node_modules/@ktx/context/dist → dist/context}/core/config-reference.test.d.ts +0 -0
  1287. /package/{node_modules/@ktx/context/dist → dist/context}/core/config-reference.test.js +0 -0
  1288. /package/{node_modules/@ktx/context/dist → dist/context}/core/config.js +0 -0
  1289. /package/{node_modules/@ktx/context/dist → dist/context}/core/embedding.d.ts +0 -0
  1290. /package/{node_modules/@ktx/context/dist → dist/context}/core/embedding.js +0 -0
  1291. /package/{node_modules/@ktx/context/dist → dist/context}/core/file-store.d.ts +0 -0
  1292. /package/{node_modules/@ktx/context/dist → dist/context}/core/file-store.js +0 -0
  1293. /package/{node_modules/@ktx/context/dist → dist/context}/core/git-env.d.ts +0 -0
  1294. /package/{node_modules/@ktx/context/dist → dist/context}/core/git-env.js +0 -0
  1295. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.assert-worktree-clean.test.d.ts +0 -0
  1296. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.assert-worktree-clean.test.js +0 -0
  1297. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.d.ts +0 -0
  1298. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.delete-directories.test.d.ts +0 -0
  1299. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.delete-directories.test.js +0 -0
  1300. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.js +0 -0
  1301. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.patch.test.d.ts +0 -0
  1302. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.patch.test.js +0 -0
  1303. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.reset-hard.test.d.ts +0 -0
  1304. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.reset-hard.test.js +0 -0
  1305. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.test.d.ts +0 -0
  1306. /package/{node_modules/@ktx/context/dist → dist/context}/core/git.service.test.js +0 -0
  1307. /package/{node_modules/@ktx/context/dist → dist/context}/core/session-worktree.service.js +0 -0
  1308. /package/{node_modules/@ktx/context/dist → dist/context}/core/session-worktree.service.test.d.ts +0 -0
  1309. /package/{node_modules/@ktx/context/dist → dist/context}/core/session-worktree.service.test.js +0 -0
  1310. /package/{node_modules/@ktx/context/dist → dist/context}/daemon/semantic-layer-compute.test.d.ts +0 -0
  1311. /package/{node_modules/@ktx/context/dist → dist/context}/index-sync/reindex.test.d.ts +0 -0
  1312. /package/{node_modules/@ktx/context/dist → dist/context}/index-sync/types.js +0 -0
  1313. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/action-identity.js +0 -0
  1314. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/action-identity.test.d.ts +0 -0
  1315. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/action-identity.test.js +0 -0
  1316. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/chunk.d.ts +0 -0
  1317. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/chunk.js +0 -0
  1318. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/chunk.test.d.ts +0 -0
  1319. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/chunk.test.js +0 -0
  1320. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/dbt.adapter.d.ts +0 -0
  1321. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/dbt.adapter.js +0 -0
  1322. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/dbt.adapter.test.d.ts +0 -0
  1323. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/dbt.adapter.test.js +0 -0
  1324. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/detect.d.ts +0 -0
  1325. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/detect.js +0 -0
  1326. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/fetch.d.ts +0 -0
  1327. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/fetch.js +0 -0
  1328. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/fetch.test.d.ts +0 -0
  1329. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/fetch.test.js +0 -0
  1330. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/parse.test.d.ts +0 -0
  1331. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt/parse.test.js +0 -0
  1332. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt-descriptions/parse-schema.test.d.ts +0 -0
  1333. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/dbt-descriptions/parse-schema.test.js +0 -0
  1334. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/fake/fake.adapter.d.ts +0 -0
  1335. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/fake/fake.adapter.js +0 -0
  1336. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/bigquery-query-history-reader.d.ts +0 -0
  1337. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/bigquery-query-history-reader.test.d.ts +0 -0
  1338. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/bigquery-query-history-reader.test.js +0 -0
  1339. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/buckets.d.ts +0 -0
  1340. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/buckets.js +0 -0
  1341. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/buckets.test.d.ts +0 -0
  1342. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/buckets.test.js +0 -0
  1343. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/chunk-unified.d.ts +0 -0
  1344. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/chunk-unified.js +0 -0
  1345. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/chunk-unified.test.d.ts +0 -0
  1346. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/chunk-unified.test.js +0 -0
  1347. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/detect.d.ts +0 -0
  1348. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/detect.js +0 -0
  1349. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/detect.test.d.ts +0 -0
  1350. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/detect.test.js +0 -0
  1351. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/errors.d.ts +0 -0
  1352. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/errors.js +0 -0
  1353. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/evidence-tool.d.ts +0 -0
  1354. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/evidence-tool.js +0 -0
  1355. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/evidence-tool.test.d.ts +0 -0
  1356. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/evidence-tool.test.js +0 -0
  1357. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/evidence.test.d.ts +0 -0
  1358. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/evidence.test.js +0 -0
  1359. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/historic-sql.adapter.d.ts +0 -0
  1360. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/historic-sql.adapter.js +0 -0
  1361. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/historic-sql.adapter.test.d.ts +0 -0
  1362. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/historic-sql.adapter.test.js +0 -0
  1363. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/local-ingest-acceptance.test.d.ts +0 -0
  1364. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/pattern-inputs.test.d.ts +0 -0
  1365. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/pattern-inputs.test.js +0 -0
  1366. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/postgres-pgss-reader.d.ts +0 -0
  1367. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/postgres-pgss-reader.js +0 -0
  1368. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/postgres-pgss-reader.test.d.ts +0 -0
  1369. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/postgres-pgss-reader.test.js +0 -0
  1370. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/projection.js +0 -0
  1371. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/projection.test.d.ts +0 -0
  1372. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/projection.test.js +0 -0
  1373. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/redaction.d.ts +0 -0
  1374. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/redaction.js +0 -0
  1375. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/redaction.test.d.ts +0 -0
  1376. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/redaction.test.js +0 -0
  1377. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/skill-schemas.test.d.ts +0 -0
  1378. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/skill-schemas.test.js +0 -0
  1379. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/snowflake-query-history-reader.d.ts +0 -0
  1380. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/snowflake-query-history-reader.js +0 -0
  1381. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/snowflake-query-history-reader.test.d.ts +0 -0
  1382. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/snowflake-query-history-reader.test.js +0 -0
  1383. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/stage-unified.js +0 -0
  1384. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/stage-unified.test.d.ts +0 -0
  1385. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/stage-unified.test.js +0 -0
  1386. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/types.js +0 -0
  1387. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/types.test.d.ts +0 -0
  1388. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/historic-sql/types.test.js +0 -0
  1389. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/chunk.d.ts +0 -0
  1390. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/chunk.js +0 -0
  1391. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/chunk.test.d.ts +0 -0
  1392. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/chunk.test.js +0 -0
  1393. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/daemon-introspection.test.d.ts +0 -0
  1394. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/live-database.adapter.d.ts +0 -0
  1395. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/live-database.adapter.test.d.ts +0 -0
  1396. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/manifest.js +0 -0
  1397. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/manifest.test.d.ts +0 -0
  1398. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/manifest.test.js +0 -0
  1399. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/stage.test.d.ts +0 -0
  1400. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/stage.test.js +0 -0
  1401. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/live-database/types.js +0 -0
  1402. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/chunk.d.ts +0 -0
  1403. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/chunk.js +0 -0
  1404. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/chunk.test.d.ts +0 -0
  1405. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/chunk.test.js +0 -0
  1406. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/client-boundary.test.d.ts +0 -0
  1407. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/client-boundary.test.js +0 -0
  1408. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/client.d.ts +0 -0
  1409. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/client.js +0 -0
  1410. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/client.test.d.ts +0 -0
  1411. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/client.test.js +0 -0
  1412. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/daemon-table-identifier-parser.d.ts +0 -0
  1413. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/daemon-table-identifier-parser.js +0 -0
  1414. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/daemon-table-identifier-parser.test.d.ts +0 -0
  1415. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/daemon-table-identifier-parser.test.js +0 -0
  1416. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/detect.d.ts +0 -0
  1417. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/detect.js +0 -0
  1418. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/detect.test.d.ts +0 -0
  1419. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/detect.test.js +0 -0
  1420. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/evidence-documents.d.ts +0 -0
  1421. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/evidence-documents.js +0 -0
  1422. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/evidence-documents.test.d.ts +0 -0
  1423. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/evidence-documents.test.js +0 -0
  1424. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/factory.test.d.ts +0 -0
  1425. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/factory.test.js +0 -0
  1426. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/fetch-report.d.ts +0 -0
  1427. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/fetch-report.js +0 -0
  1428. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/fetch-report.test.d.ts +0 -0
  1429. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/fetch-report.test.js +0 -0
  1430. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/fetch.js +0 -0
  1431. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/fetch.test.d.ts +0 -0
  1432. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/fetch.test.js +0 -0
  1433. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/local-runtime-store.js +0 -0
  1434. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/local-runtime-store.test.d.ts +0 -0
  1435. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/local-runtime-store.test.js +0 -0
  1436. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/looker.adapter.d.ts +0 -0
  1437. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/looker.adapter.js +0 -0
  1438. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/looker.adapter.test.d.ts +0 -0
  1439. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/looker.adapter.test.js +0 -0
  1440. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/mapping.test.d.ts +0 -0
  1441. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/mapping.test.js +0 -0
  1442. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/reconcile.test.d.ts +0 -0
  1443. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/scope.test.d.ts +0 -0
  1444. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/scope.test.js +0 -0
  1445. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/target-connections.d.ts +0 -0
  1446. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/target-connections.js +0 -0
  1447. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/target-connections.test.d.ts +0 -0
  1448. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/target-connections.test.js +0 -0
  1449. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/tools/looker-query-to-sl.tool.test.d.ts +0 -0
  1450. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/tools/looker-query-to-sl.tool.test.js +0 -0
  1451. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/looker/types.test.d.ts +0 -0
  1452. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/chunk.d.ts +0 -0
  1453. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/chunk.js +0 -0
  1454. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/chunk.test.d.ts +0 -0
  1455. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/chunk.test.js +0 -0
  1456. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/detect.d.ts +0 -0
  1457. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/detect.js +0 -0
  1458. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/detect.test.d.ts +0 -0
  1459. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/detect.test.js +0 -0
  1460. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/fetch-report.test.d.ts +0 -0
  1461. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/fetch-report.test.js +0 -0
  1462. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/fetch.d.ts +0 -0
  1463. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/fetch.js +0 -0
  1464. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/fetch.test.d.ts +0 -0
  1465. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/fetch.test.js +0 -0
  1466. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/graph.d.ts +0 -0
  1467. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/graph.js +0 -0
  1468. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/graph.test.d.ts +0 -0
  1469. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/graph.test.js +0 -0
  1470. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/lookml.adapter.d.ts +0 -0
  1471. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/lookml.adapter.js +0 -0
  1472. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/lookml.adapter.test.d.ts +0 -0
  1473. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/lookml.adapter.test.js +0 -0
  1474. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/parse.d.ts +0 -0
  1475. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/parse.js +0 -0
  1476. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/parse.test.d.ts +0 -0
  1477. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/parse.test.js +0 -0
  1478. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/pull-config.test.d.ts +0 -0
  1479. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/lookml/pull-config.test.js +0 -0
  1480. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/card-references.d.ts +0 -0
  1481. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/card-references.js +0 -0
  1482. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/card-references.test.d.ts +0 -0
  1483. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/card-references.test.js +0 -0
  1484. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/chunk.d.ts +0 -0
  1485. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/chunk.js +0 -0
  1486. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/chunk.test.d.ts +0 -0
  1487. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/chunk.test.js +0 -0
  1488. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/client-boundary.test.d.ts +0 -0
  1489. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/client-boundary.test.js +0 -0
  1490. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/client-port.js +0 -0
  1491. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/client-port.test.d.ts +0 -0
  1492. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/client-port.test.js +0 -0
  1493. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/client.test.d.ts +0 -0
  1494. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/client.test.js +0 -0
  1495. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/detect.d.ts +0 -0
  1496. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/detect.js +0 -0
  1497. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/detect.test.d.ts +0 -0
  1498. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/detect.test.js +0 -0
  1499. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fanout-planner.js +0 -0
  1500. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fanout-planner.test.d.ts +0 -0
  1501. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fanout-planner.test.js +0 -0
  1502. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fetch-scope.d.ts +0 -0
  1503. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fetch-scope.js +0 -0
  1504. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fetch-scope.test.d.ts +0 -0
  1505. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fetch-scope.test.js +0 -0
  1506. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fetch.d.ts +0 -0
  1507. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fetch.js +0 -0
  1508. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fetch.test.d.ts +0 -0
  1509. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/fetch.test.js +0 -0
  1510. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/local-metabase.adapter.test.d.ts +0 -0
  1511. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/local-metabase.adapter.test.js +0 -0
  1512. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/local-source-state-store.test.d.ts +0 -0
  1513. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/mapping.test.d.ts +0 -0
  1514. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/mapping.test.js +0 -0
  1515. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/metabase.adapter.d.ts +0 -0
  1516. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/metabase.adapter.js +0 -0
  1517. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/metabase.adapter.test.d.ts +0 -0
  1518. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/metabase.adapter.test.js +0 -0
  1519. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/serialize-card.test.d.ts +0 -0
  1520. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/serialize-card.test.js +0 -0
  1521. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/source-state-port.js +0 -0
  1522. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/types.test.d.ts +0 -0
  1523. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metabase/types.test.js +0 -0
  1524. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/chunk.d.ts +0 -0
  1525. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/chunk.js +0 -0
  1526. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/chunk.test.d.ts +0 -0
  1527. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/chunk.test.js +0 -0
  1528. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/deep-parse.test.d.ts +0 -0
  1529. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/deep-parse.test.js +0 -0
  1530. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/detect.d.ts +0 -0
  1531. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/detect.js +0 -0
  1532. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/detect.test.d.ts +0 -0
  1533. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/detect.test.js +0 -0
  1534. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/fetch.d.ts +0 -0
  1535. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/fetch.js +0 -0
  1536. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/fetch.test.d.ts +0 -0
  1537. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/fetch.test.js +0 -0
  1538. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/graph.d.ts +0 -0
  1539. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/graph.js +0 -0
  1540. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/graph.test.d.ts +0 -0
  1541. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/graph.test.js +0 -0
  1542. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/import-semantic-models.test.d.ts +0 -0
  1543. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/import-semantic-models.test.js +0 -0
  1544. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/metricflow.adapter.d.ts +0 -0
  1545. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/metricflow.adapter.js +0 -0
  1546. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/metricflow.adapter.test.d.ts +0 -0
  1547. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/metricflow.adapter.test.js +0 -0
  1548. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/parse.js +0 -0
  1549. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/parse.test.d.ts +0 -0
  1550. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/parse.test.js +0 -0
  1551. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/projection-config.d.ts +0 -0
  1552. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/projection-config.js +0 -0
  1553. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/pull-config.test.d.ts +0 -0
  1554. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/pull-config.test.js +0 -0
  1555. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/metricflow/semantic-models.test.d.ts +0 -0
  1556. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/cluster.test.d.ts +0 -0
  1557. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/cluster.test.js +0 -0
  1558. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/detect.d.ts +0 -0
  1559. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/detect.js +0 -0
  1560. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/fetch.d.ts +0 -0
  1561. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/fetch.js +0 -0
  1562. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/fetch.test.d.ts +0 -0
  1563. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/fetch.test.js +0 -0
  1564. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/local-state-store.d.ts +0 -0
  1565. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/local-state-store.js +0 -0
  1566. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/local-state-store.test.d.ts +0 -0
  1567. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/local-state-store.test.js +0 -0
  1568. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/normalize.test.d.ts +0 -0
  1569. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/normalize.test.js +0 -0
  1570. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/notion-client.test.d.ts +0 -0
  1571. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/notion-client.test.js +0 -0
  1572. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/notion.adapter.d.ts +0 -0
  1573. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/notion.adapter.js +0 -0
  1574. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/notion.adapter.test.d.ts +0 -0
  1575. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/notion.adapter.test.js +0 -0
  1576. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/pull-config.d.ts +0 -0
  1577. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/pull-config.js +0 -0
  1578. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/types.d.ts +0 -0
  1579. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/adapters/notion/types.js +0 -0
  1580. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/artifact-gates.js +0 -0
  1581. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/artifact-gates.test.d.ts +0 -0
  1582. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/artifact-gates.test.js +0 -0
  1583. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/canonical-pins.d.ts +0 -0
  1584. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/canonical-pins.js +0 -0
  1585. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/canonical-pins.test.d.ts +0 -0
  1586. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/canonical-pins.test.js +0 -0
  1587. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/clustering/kmeans.d.ts +0 -0
  1588. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/clustering/kmeans.js +0 -0
  1589. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/clustering/kmeans.test.d.ts +0 -0
  1590. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/clustering/kmeans.test.js +0 -0
  1591. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/candidate-dedup.service.test.d.ts +0 -0
  1592. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/candidate-dedup.service.test.js +0 -0
  1593. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/context-candidate-carryforward.service.test.d.ts +0 -0
  1594. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/context-candidate-carryforward.service.test.js +0 -0
  1595. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/curator-pagination.service.test.d.ts +0 -0
  1596. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/curator-pagination.service.test.js +0 -0
  1597. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/embedding-text.d.ts +0 -0
  1598. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/embedding-text.js +0 -0
  1599. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/embedding-text.test.d.ts +0 -0
  1600. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/embedding-text.test.js +0 -0
  1601. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/store.d.ts +0 -0
  1602. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/store.js +0 -0
  1603. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/store.test.d.ts +0 -0
  1604. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/store.test.js +0 -0
  1605. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-candidates/types.js +0 -0
  1606. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/context-evidence-index.service.test.d.ts +0 -0
  1607. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/context-evidence-index.service.test.js +0 -0
  1608. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/sqlite-context-evidence-store.test.d.ts +0 -0
  1609. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/sqlite-context-evidence-store.test.js +0 -0
  1610. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/store.d.ts +0 -0
  1611. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/store.js +0 -0
  1612. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/store.test.d.ts +0 -0
  1613. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/store.test.js +0 -0
  1614. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/types.d.ts +0 -0
  1615. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/context-evidence/types.js +0 -0
  1616. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/dbt-shared/project-vars.test.d.ts +0 -0
  1617. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/dbt-shared/project-vars.test.js +0 -0
  1618. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/dbt-shared/schema-files.test.d.ts +0 -0
  1619. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/dbt-shared/schema-files.test.js +0 -0
  1620. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/diff-set.service.d.ts +0 -0
  1621. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/diff-set.service.js +0 -0
  1622. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/diff-set.service.test.d.ts +0 -0
  1623. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/diff-set.service.test.js +0 -0
  1624. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/final-gate-repair.js +0 -0
  1625. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/final-gate-repair.test.d.ts +0 -0
  1626. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/final-gate-repair.test.js +0 -0
  1627. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/finalization-scope.js +0 -0
  1628. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/finalization-scope.test.d.ts +0 -0
  1629. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/finalization-scope.test.js +0 -0
  1630. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/git-env.d.ts +0 -0
  1631. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/git-env.js +0 -0
  1632. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ingest-bundle.runner.d.ts +0 -0
  1633. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ingest-bundle.runner.isolated-diff.test.d.ts +0 -0
  1634. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ingest-bundle.runner.test.d.ts +0 -0
  1635. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ingest-prompts.test.d.ts +0 -0
  1636. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ingest-prompts.test.js +0 -0
  1637. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ingest-runtime-assets.test.d.ts +0 -0
  1638. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ingest-trace.test.d.ts +0 -0
  1639. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ingest-trace.test.js +0 -0
  1640. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/git-patch.test.d.ts +0 -0
  1641. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/git-patch.test.js +0 -0
  1642. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/patch-integrator.js +0 -0
  1643. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/patch-integrator.test.d.ts +0 -0
  1644. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/textual-conflict-resolver.js +0 -0
  1645. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/textual-conflict-resolver.test.d.ts +0 -0
  1646. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/textual-conflict-resolver.test.js +0 -0
  1647. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/work-unit-executor.d.ts +0 -0
  1648. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/work-unit-executor.js +0 -0
  1649. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/isolated-diff/work-unit-executor.test.d.ts +0 -0
  1650. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/local-adapters.test.d.ts +0 -0
  1651. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/local-bundle-ingest.test.d.ts +0 -0
  1652. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/local-bundle-runtime.test.d.ts +0 -0
  1653. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/local-embedding-provider.integration.test.d.ts +0 -0
  1654. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/local-embedding-provider.integration.test.js +0 -0
  1655. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/local-mapping-reconcile.test.d.ts +0 -0
  1656. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/local-metabase-ingest.test.d.ts +0 -0
  1657. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/local-stage-ingest.test.d.ts +0 -0
  1658. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/acceptance-fixtures.d.ts +0 -0
  1659. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/acceptance-fixtures.js +0 -0
  1660. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/acceptance.test.d.ts +0 -0
  1661. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/acceptance.test.js +0 -0
  1662. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/events.test.d.ts +0 -0
  1663. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/events.test.js +0 -0
  1664. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/interaction.test.d.ts +0 -0
  1665. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/interaction.test.js +0 -0
  1666. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/interactive-render.d.ts +0 -0
  1667. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/interactive-render.js +0 -0
  1668. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/interactive-render.test.d.ts +0 -0
  1669. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/interactive-render.test.js +0 -0
  1670. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/known-errors.d.ts +0 -0
  1671. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/known-errors.js +0 -0
  1672. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/live-buffer.d.ts +0 -0
  1673. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/live-buffer.js +0 -0
  1674. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/live-buffer.test.d.ts +0 -0
  1675. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/live-buffer.test.js +0 -0
  1676. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/render.d.ts +0 -0
  1677. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/render.js +0 -0
  1678. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/render.test.d.ts +0 -0
  1679. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/render.test.js +0 -0
  1680. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/schema.test.d.ts +0 -0
  1681. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/schema.test.js +0 -0
  1682. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/summary.d.ts +0 -0
  1683. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/summary.js +0 -0
  1684. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/summary.test.d.ts +0 -0
  1685. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/summary.test.js +0 -0
  1686. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/types.d.ts +0 -0
  1687. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/types.js +0 -0
  1688. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/view-model.d.ts +0 -0
  1689. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/view-model.js +0 -0
  1690. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/view-model.test.d.ts +0 -0
  1691. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/view-model.test.js +0 -0
  1692. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/visuals.test.d.ts +0 -0
  1693. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/memory-flow/visuals.test.js +0 -0
  1694. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/page-triage/page-triage.service.test.d.ts +0 -0
  1695. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/page-triage/page-triage.service.test.js +0 -0
  1696. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/parsed-target-table.d.ts +0 -0
  1697. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/parsed-target-table.js +0 -0
  1698. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/ports.js +0 -0
  1699. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/raw-sources-paths.test.d.ts +0 -0
  1700. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/raw-sources-paths.test.js +0 -0
  1701. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/repo-fetch.test.d.ts +0 -0
  1702. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/repo-fetch.test.js +0 -0
  1703. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/report-snapshot.test.d.ts +0 -0
  1704. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/report-snapshot.test.js +0 -0
  1705. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/semantic-layer-target-policy.test.d.ts +0 -0
  1706. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/semantic-layer-target-policy.test.js +0 -0
  1707. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/source-adapter-registry.d.ts +0 -0
  1708. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/source-adapter-registry.js +0 -0
  1709. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/source-adapter-registry.test.d.ts +0 -0
  1710. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/source-adapter-registry.test.js +0 -0
  1711. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/sqlite-bundle-ingest-store.d.ts +0 -0
  1712. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/sqlite-bundle-ingest-store.js +0 -0
  1713. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/sqlite-bundle-ingest-store.test.d.ts +0 -0
  1714. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/sqlite-bundle-ingest-store.test.js +0 -0
  1715. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/sqlite-local-ingest-store.d.ts +0 -0
  1716. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/sqlite-local-ingest-store.js +0 -0
  1717. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/sqlite-local-ingest-store.test.d.ts +0 -0
  1718. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/sqlite-local-ingest-store.test.js +0 -0
  1719. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/build-reconcile-context.context-candidates.test.d.ts +0 -0
  1720. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/build-reconcile-context.context-candidates.test.js +0 -0
  1721. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/build-reconcile-context.js +0 -0
  1722. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/build-reconcile-context.test.d.ts +0 -0
  1723. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/build-reconcile-context.test.js +0 -0
  1724. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/build-wu-context.test.d.ts +0 -0
  1725. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/build-wu-context.test.js +0 -0
  1726. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-1-stage-raw-files.d.ts +0 -0
  1727. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-1-stage-raw-files.js +0 -0
  1728. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-1-stage-raw-files.test.d.ts +0 -0
  1729. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-1-stage-raw-files.test.js +0 -0
  1730. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-3-work-units.test.d.ts +0 -0
  1731. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-4-reconciliation.js +0 -0
  1732. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-4-reconciliation.test.d.ts +0 -0
  1733. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-4-reconciliation.test.js +0 -0
  1734. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/stage-index.types.js +0 -0
  1735. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/validate-wu-sources.js +0 -0
  1736. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/validate-wu-sources.test.d.ts +0 -0
  1737. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/stages/validate-wu-sources.test.js +0 -0
  1738. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-artifact-resolution.tool.d.ts +0 -0
  1739. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-artifact-resolution.tool.js +0 -0
  1740. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-conflict-resolution.tool.d.ts +0 -0
  1741. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-conflict-resolution.tool.js +0 -0
  1742. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-eviction-decision.tool.d.ts +0 -0
  1743. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-eviction-decision.tool.js +0 -0
  1744. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-reconciliation-records.tool.test.d.ts +0 -0
  1745. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-reconciliation-records.tool.test.js +0 -0
  1746. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-unmapped-fallback.tool.d.ts +0 -0
  1747. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/emit-unmapped-fallback.tool.js +0 -0
  1748. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/eviction-list.tool.d.ts +0 -0
  1749. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/eviction-list.tool.js +0 -0
  1750. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/eviction-list.tool.test.d.ts +0 -0
  1751. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/eviction-list.tool.test.js +0 -0
  1752. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/read-raw-file.tool.d.ts +0 -0
  1753. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/read-raw-file.tool.js +0 -0
  1754. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/read-raw-file.tool.test.d.ts +0 -0
  1755. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/read-raw-file.tool.test.js +0 -0
  1756. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/read-raw-span.tool.d.ts +0 -0
  1757. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/read-raw-span.tool.js +0 -0
  1758. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/read-raw-span.tool.test.d.ts +0 -0
  1759. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/read-raw-span.tool.test.js +0 -0
  1760. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/stage-diff.tool.d.ts +0 -0
  1761. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/stage-diff.tool.js +0 -0
  1762. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/stage-diff.tool.test.d.ts +0 -0
  1763. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/stage-diff.tool.test.js +0 -0
  1764. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/stage-list.tool.d.ts +0 -0
  1765. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/stage-list.tool.js +0 -0
  1766. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/stage-list.tool.test.d.ts +0 -0
  1767. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/stage-list.tool.test.js +0 -0
  1768. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/tool-call-logger.js +0 -0
  1769. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/tool-transcript-summary.d.ts +0 -0
  1770. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/tool-transcript-summary.js +0 -0
  1771. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/tool-transcript-summary.test.d.ts +0 -0
  1772. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/tool-transcript-summary.test.js +0 -0
  1773. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/verification-ledger.tool.js +0 -0
  1774. /package/{node_modules/@ktx/context/dist/ingest/tools/warehouse-verification/index.js → dist/context/ingest/tools/warehouse-verification/create-warehouse-verification-tools.js} +0 -0
  1775. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/warehouse-verification/discover-data.tool.test.d.ts +0 -0
  1776. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/warehouse-verification/discover-data.tool.test.js +0 -0
  1777. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/warehouse-verification/entity-details.tool.test.d.ts +0 -0
  1778. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/warehouse-verification/sql-execution.tool.test.d.ts +0 -0
  1779. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/tools/warehouse-verification/sql-execution.tool.test.js +0 -0
  1780. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/types.js +0 -0
  1781. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/wiki-body-refs.test.d.ts +0 -0
  1782. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/wiki-body-refs.test.js +0 -0
  1783. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/wiki-sl-ref-repair.js +0 -0
  1784. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/wiki-sl-ref-repair.test.d.ts +0 -0
  1785. /package/{node_modules/@ktx/context/dist → dist/context}/ingest/wiki-sl-ref-repair.test.js +0 -0
  1786. /package/{node_modules/@ktx/connector-postgres/dist/package-exports.test.d.ts → dist/context/llm/ai-sdk-runtime.test.d.ts} +0 -0
  1787. /package/{node_modules/@ktx/context/dist → dist/context}/llm/claude-code-env.test.d.ts +0 -0
  1788. /package/{node_modules/@ktx/context/dist → dist/context}/llm/claude-code-env.test.js +0 -0
  1789. /package/{node_modules/@ktx/context/dist → dist/context}/llm/claude-code-models.d.ts +0 -0
  1790. /package/{node_modules/@ktx/context/dist → dist/context}/llm/claude-code-models.js +0 -0
  1791. /package/{node_modules/@ktx/context/dist → dist/context}/llm/claude-code-models.test.d.ts +0 -0
  1792. /package/{node_modules/@ktx/context/dist → dist/context}/llm/claude-code-models.test.js +0 -0
  1793. /package/{node_modules/@ktx/context/dist → dist/context}/llm/claude-code-runtime.test.d.ts +0 -0
  1794. /package/{node_modules/@ktx/context/dist → dist/context}/llm/debug-request-recorder.test.d.ts +0 -0
  1795. /package/{node_modules/@ktx/context/dist → dist/context}/llm/debug-request-recorder.test.js +0 -0
  1796. /package/{node_modules/@ktx/context/dist → dist/context}/llm/embedding-port.js +0 -0
  1797. /package/{node_modules/@ktx/context/dist → dist/context}/llm/embedding-port.test.d.ts +0 -0
  1798. /package/{node_modules/@ktx/context/dist → dist/context}/llm/local-config.test.d.ts +0 -0
  1799. /package/{node_modules/@ktx/context/dist → dist/context}/llm/runtime-local-config.test.d.ts +0 -0
  1800. /package/{node_modules/@ktx/context/dist → dist/context}/llm/runtime-local-config.test.js +0 -0
  1801. /package/{node_modules/@ktx/context/dist → dist/context}/llm/runtime-port.js +0 -0
  1802. /package/{node_modules/@ktx/context/dist → dist/context}/llm/runtime-tools.test.d.ts +0 -0
  1803. /package/{node_modules/@ktx/context/dist → dist/context}/llm/runtime-tools.test.js +0 -0
  1804. /package/{node_modules/@ktx/context/dist → dist/context}/mcp/local-project-ports.test.d.ts +0 -0
  1805. /package/{node_modules/@ktx/context/dist → dist/context}/mcp/server.test.d.ts +0 -0
  1806. /package/{node_modules/@ktx/context/dist → dist/context}/mcp/types.js +0 -0
  1807. /package/{node_modules/@ktx/context/dist → dist/context}/memory/local-memory-runs.d.ts +0 -0
  1808. /package/{node_modules/@ktx/context/dist → dist/context}/memory/local-memory-runs.js +0 -0
  1809. /package/{node_modules/@ktx/context/dist → dist/context}/memory/local-memory.test.d.ts +0 -0
  1810. /package/{node_modules/@ktx/context/dist → dist/context}/memory/memory-agent.service.ingest.test.d.ts +0 -0
  1811. /package/{node_modules/@ktx/context/dist → dist/context}/memory/memory-agent.service.test.d.ts +0 -0
  1812. /package/{node_modules/@ktx/context/dist → dist/context}/memory/memory-runs.js +0 -0
  1813. /package/{node_modules/@ktx/context/dist → dist/context}/memory/memory-runs.test.d.ts +0 -0
  1814. /package/{node_modules/@ktx/context/dist → dist/context}/memory/memory-runs.test.js +0 -0
  1815. /package/{node_modules/@ktx/context/dist → dist/context}/memory/memory-runtime-assets.test.d.ts +0 -0
  1816. /package/{node_modules/@ktx/context/dist → dist/context}/memory/types.js +0 -0
  1817. /package/{node_modules/@ktx/context/dist → dist/context}/project/config.test.d.ts +0 -0
  1818. /package/{node_modules/@ktx/context/dist → dist/context}/project/driver-schemas.test.d.ts +0 -0
  1819. /package/{node_modules/@ktx/context/dist → dist/context}/project/local-git-file-store.js +0 -0
  1820. /package/{node_modules/@ktx/context/dist → dist/context}/project/local-git-file-store.test.d.ts +0 -0
  1821. /package/{node_modules/@ktx/context/dist → dist/context}/project/local-state-db.d.ts +0 -0
  1822. /package/{node_modules/@ktx/context/dist → dist/context}/project/local-state-db.js +0 -0
  1823. /package/{node_modules/@ktx/context/dist → dist/context}/project/mappings-yaml-schema.test.d.ts +0 -0
  1824. /package/{node_modules/@ktx/context/dist → dist/context}/project/mappings-yaml-schema.test.js +0 -0
  1825. /package/{node_modules/@ktx/context/dist → dist/context}/project/project.test.d.ts +0 -0
  1826. /package/{node_modules/@ktx/context/dist → dist/context}/project/project.test.js +0 -0
  1827. /package/{node_modules/@ktx/context/dist → dist/context}/project/setup-config.test.d.ts +0 -0
  1828. /package/{node_modules/@ktx/context/dist → dist/context}/project/setup-config.test.js +0 -0
  1829. /package/{node_modules/@ktx/context/dist → dist/context}/prompts/prompt.service.test.d.ts +0 -0
  1830. /package/{node_modules/@ktx/context/dist → dist/context}/prompts/prompt.service.test.js +0 -0
  1831. /package/{node_modules/@ktx/context/dist → dist/context}/scan/credentials.test.d.ts +0 -0
  1832. /package/{node_modules/@ktx/context/dist → dist/context}/scan/data-dictionary.test.d.ts +0 -0
  1833. /package/{node_modules/@ktx/context/dist → dist/context}/scan/data-dictionary.test.js +0 -0
  1834. /package/{node_modules/@ktx/context/dist → dist/context}/scan/description-generation.test.d.ts +0 -0
  1835. /package/{node_modules/@ktx/context/dist → dist/context}/scan/embedding-text.js +0 -0
  1836. /package/{node_modules/@ktx/context/dist → dist/context}/scan/embedding-text.test.d.ts +0 -0
  1837. /package/{node_modules/@ktx/context/dist → dist/context}/scan/embedding-text.test.js +0 -0
  1838. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-state.test.d.ts +0 -0
  1839. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-state.test.js +0 -0
  1840. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-summary.d.ts +0 -0
  1841. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-summary.js +0 -0
  1842. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-summary.test.d.ts +0 -0
  1843. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-summary.test.js +0 -0
  1844. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-types.js +0 -0
  1845. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-types.test.d.ts +0 -0
  1846. /package/{node_modules/@ktx/context/dist → dist/context}/scan/enrichment-types.test.js +0 -0
  1847. /package/{node_modules/@ktx/context/dist → dist/context}/scan/entity-details.js +0 -0
  1848. /package/{node_modules/@ktx/context/dist → dist/context}/scan/entity-details.test.d.ts +0 -0
  1849. /package/{node_modules/@ktx/context/dist → dist/context}/scan/local-enrichment-artifacts.test.d.ts +0 -0
  1850. /package/{node_modules/@ktx/context/dist → dist/context}/scan/local-enrichment.test.d.ts +0 -0
  1851. /package/{node_modules/@ktx/context/dist → dist/context}/scan/local-scan.test.d.ts +0 -0
  1852. /package/{node_modules/@ktx/context/dist → dist/context}/scan/local-structural-artifacts.js +0 -0
  1853. /package/{node_modules/@ktx/context/dist → dist/context}/scan/local-structural-artifacts.test.d.ts +0 -0
  1854. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-benchmark-report.d.ts +0 -0
  1855. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-benchmark-report.js +0 -0
  1856. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-benchmark-report.test.d.ts +0 -0
  1857. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-benchmark-report.test.js +0 -0
  1858. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-benchmarks.js +0 -0
  1859. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-benchmarks.test.d.ts +0 -0
  1860. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-benchmarks.test.js +0 -0
  1861. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-budget.test.d.ts +0 -0
  1862. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-budget.test.js +0 -0
  1863. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-candidates.test.d.ts +0 -0
  1864. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-candidates.test.js +0 -0
  1865. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-composite-candidates.js +0 -0
  1866. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-composite-candidates.test.d.ts +0 -0
  1867. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-composite-candidates.test.js +0 -0
  1868. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-diagnostics.test.d.ts +0 -0
  1869. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-diagnostics.test.js +0 -0
  1870. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-discovery.test.d.ts +0 -0
  1871. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-discovery.test.js +0 -0
  1872. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-formal-metadata.d.ts +0 -0
  1873. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-formal-metadata.js +0 -0
  1874. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-formal-metadata.test.d.ts +0 -0
  1875. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-formal-metadata.test.js +0 -0
  1876. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-graph-resolver.js +0 -0
  1877. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-graph-resolver.test.d.ts +0 -0
  1878. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-graph-resolver.test.js +0 -0
  1879. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-llm-proposal.test.d.ts +0 -0
  1880. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-llm-proposal.test.js +0 -0
  1881. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-locality.d.ts +0 -0
  1882. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-locality.js +0 -0
  1883. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-locality.test.d.ts +0 -0
  1884. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-locality.test.js +0 -0
  1885. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-name-similarity.test.d.ts +0 -0
  1886. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-name-similarity.test.js +0 -0
  1887. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-profiling.test.d.ts +0 -0
  1888. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-scoring.test.d.ts +0 -0
  1889. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-scoring.test.js +0 -0
  1890. /package/{node_modules/@ktx/context/dist → dist/context}/scan/relationship-validation.test.d.ts +0 -0
  1891. /package/{node_modules/@ktx/context/dist → dist/context}/scan/sqlite-local-enrichment-state-store.d.ts +0 -0
  1892. /package/{node_modules/@ktx/context/dist → dist/context}/scan/sqlite-local-enrichment-state-store.js +0 -0
  1893. /package/{node_modules/@ktx/connector-snowflake/dist/package-exports.test.d.ts → dist/context/scan/table-ref.test.d.ts} +0 -0
  1894. /package/{node_modules/@ktx/context/dist → dist/context}/scan/type-normalization.test.d.ts +0 -0
  1895. /package/{node_modules/@ktx/context/dist → dist/context}/scan/type-normalization.test.js +0 -0
  1896. /package/{node_modules/@ktx/context/dist → dist/context}/scan/types.js +0 -0
  1897. /package/{node_modules/@ktx/context/dist → dist/context}/scan/types.test.d.ts +0 -0
  1898. /package/{node_modules/@ktx/context/dist → dist/context}/scan/types.test.js +0 -0
  1899. /package/{node_modules/@ktx/context/dist → dist/context}/scan/warehouse-catalog.test.d.ts +0 -0
  1900. /package/{node_modules/@ktx/context/dist/search/backend-conformance.d.ts → dist/context/search/backend-conformance.test-utils.d.ts} +0 -0
  1901. /package/{node_modules/@ktx/context/dist/search/backend-conformance.js → dist/context/search/backend-conformance.test-utils.js} +0 -0
  1902. /package/{node_modules/@ktx/connector-sqlite/dist/package-exports.test.d.ts → dist/context/search/backend-conformance.test-utils.test.d.ts} +0 -0
  1903. /package/{node_modules/@ktx/context/dist → dist/context}/search/discover.test.d.ts +0 -0
  1904. /package/{node_modules/@ktx/context/dist → dist/context}/search/hybrid-search-core.d.ts +0 -0
  1905. /package/{node_modules/@ktx/context/dist → dist/context}/search/hybrid-search-core.js +0 -0
  1906. /package/{node_modules/@ktx/context/dist → dist/context}/search/hybrid-search-core.test.d.ts +0 -0
  1907. /package/{node_modules/@ktx/context/dist → dist/context}/search/hybrid-search-core.test.js +0 -0
  1908. /package/{node_modules/@ktx/context/dist → dist/context}/search/pglite-owner-process.test.d.ts +0 -0
  1909. /package/{node_modules/@ktx/context/dist → dist/context}/search/pglite-runtime-boundary.test.d.ts +0 -0
  1910. /package/{node_modules/@ktx/context/dist → dist/context}/search/pglite-spike.test.d.ts +0 -0
  1911. /package/{node_modules/@ktx/context/dist → dist/context}/search/query.d.ts +0 -0
  1912. /package/{node_modules/@ktx/context/dist → dist/context}/search/query.js +0 -0
  1913. /package/{node_modules/@ktx/context/dist → dist/context}/search/query.test.d.ts +0 -0
  1914. /package/{node_modules/@ktx/context/dist → dist/context}/search/query.test.js +0 -0
  1915. /package/{node_modules/@ktx/context/dist → dist/context}/search/rrf.d.ts +0 -0
  1916. /package/{node_modules/@ktx/context/dist → dist/context}/search/rrf.js +0 -0
  1917. /package/{node_modules/@ktx/context/dist → dist/context}/search/rrf.test.d.ts +0 -0
  1918. /package/{node_modules/@ktx/context/dist → dist/context}/search/rrf.test.js +0 -0
  1919. /package/{node_modules/@ktx/context/dist → dist/context}/search/types.js +0 -0
  1920. /package/{node_modules/@ktx/context/dist → dist/context}/skills/skills-registry.service.test.d.ts +0 -0
  1921. /package/{node_modules/@ktx/context/dist → dist/context}/skills/skills-registry.service.test.js +0 -0
  1922. /package/{node_modules/@ktx/context/dist → dist/context}/sl/description-normalization.d.ts +0 -0
  1923. /package/{node_modules/@ktx/context/dist → dist/context}/sl/description-normalization.js +0 -0
  1924. /package/{node_modules/@ktx/context/dist → dist/context}/sl/descriptions.d.ts +0 -0
  1925. /package/{node_modules/@ktx/context/dist → dist/context}/sl/descriptions.js +0 -0
  1926. /package/{node_modules/@ktx/context/dist → dist/context}/sl/dictionary-search.js +0 -0
  1927. /package/{node_modules/@ktx/context/dist → dist/context}/sl/dictionary-search.test.d.ts +0 -0
  1928. /package/{node_modules/@ktx/context/dist → dist/context}/sl/local-query.js +0 -0
  1929. /package/{node_modules/@ktx/context/dist → dist/context}/sl/local-query.test.d.ts +0 -0
  1930. /package/{node_modules/@ktx/context/dist → dist/context}/sl/local-sl.test.d.ts +0 -0
  1931. /package/{node_modules/@ktx/context/dist → dist/context}/sl/pglite-sl-search-prototype.test.d.ts +0 -0
  1932. /package/{node_modules/@ktx/context/dist → dist/context}/sl/ports.d.ts +0 -0
  1933. /package/{node_modules/@ktx/context/dist → dist/context}/sl/ports.js +0 -0
  1934. /package/{node_modules/@ktx/context/dist → dist/context}/sl/schemas.contract.test.d.ts +0 -0
  1935. /package/{node_modules/@ktx/context/dist → dist/context}/sl/schemas.contract.test.js +0 -0
  1936. /package/{node_modules/@ktx/context/dist → dist/context}/sl/schemas.d.ts +0 -0
  1937. /package/{node_modules/@ktx/context/dist → dist/context}/sl/schemas.js +0 -0
  1938. /package/{node_modules/@ktx/context/dist → dist/context}/sl/semantic-layer.service.test.d.ts +0 -0
  1939. /package/{node_modules/@ktx/context/dist → dist/context}/sl/sl-dictionary-profile.test.d.ts +0 -0
  1940. /package/{node_modules/@ktx/context/dist → dist/context}/sl/sl-search.service.test.d.ts +0 -0
  1941. /package/{node_modules/@ktx/context/dist → dist/context}/sl/sl-search.service.test.js +0 -0
  1942. /package/{node_modules/@ktx/context/dist → dist/context}/sl/sl-validator.port.js +0 -0
  1943. /package/{node_modules/@ktx/context/dist → dist/context}/sl/sqlite-sl-sources-index.d.ts +0 -0
  1944. /package/{node_modules/@ktx/context/dist → dist/context}/sl/sqlite-sl-sources-index.js +0 -0
  1945. /package/{node_modules/@ktx/context/dist → dist/context}/sl/sqlite-sl-sources-index.test.d.ts +0 -0
  1946. /package/{node_modules/@ktx/context/dist → dist/context}/sl/sqlite-sl-sources-index.test.js +0 -0
  1947. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/connection-id-schema.d.ts +0 -0
  1948. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/connection-id-schema.js +0 -0
  1949. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/connection-id-schema.test.d.ts +0 -0
  1950. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/connection-id-schema.test.js +0 -0
  1951. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-discover.tool.js +0 -0
  1952. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-discover.tool.test.d.ts +0 -0
  1953. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-edit-source.tool.test.d.ts +0 -0
  1954. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-read-source.tool.js +0 -0
  1955. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-read-source.tool.session.test.d.ts +0 -0
  1956. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-rollback.tool.test.d.ts +0 -0
  1957. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-validate.tool.test.d.ts +0 -0
  1958. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-warehouse-validation.test.d.ts +0 -0
  1959. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-warehouse-validation.test.js +0 -0
  1960. /package/{node_modules/@ktx/context/dist → dist/context}/sl/tools/sl-write-source.tool.test.d.ts +0 -0
  1961. /package/{node_modules/@ktx/context/dist → dist/context}/sl/types.js +0 -0
  1962. /package/{node_modules/@ktx/context/dist → dist/context}/sql-analysis/http-sql-analysis-port.d.ts +0 -0
  1963. /package/{node_modules/@ktx/context/dist → dist/context}/sql-analysis/http-sql-analysis-port.js +0 -0
  1964. /package/{node_modules/@ktx/context/dist → dist/context}/sql-analysis/http-sql-analysis-port.test.d.ts +0 -0
  1965. /package/{node_modules/@ktx/context/dist → dist/context}/sql-analysis/http-sql-analysis-port.test.js +0 -0
  1966. /package/{node_modules/@ktx/context/dist → dist/context}/sql-analysis/ports.js +0 -0
  1967. /package/{node_modules/@ktx/context/dist → dist/context}/test/make-local-git-repo.d.ts +0 -0
  1968. /package/{node_modules/@ktx/context/dist → dist/context}/test/make-local-git-repo.js +0 -0
  1969. /package/{node_modules/@ktx/context/dist → dist/context}/tools/action-raw-paths.d.ts +0 -0
  1970. /package/{node_modules/@ktx/context/dist → dist/context}/tools/action-raw-paths.js +0 -0
  1971. /package/{node_modules/@ktx/context/dist → dist/context}/tools/action-target-connection.d.ts +0 -0
  1972. /package/{node_modules/@ktx/context/dist → dist/context}/tools/action-target-connection.js +0 -0
  1973. /package/{node_modules/@ktx/context/dist → dist/context}/tools/authors.d.ts +0 -0
  1974. /package/{node_modules/@ktx/context/dist → dist/context}/tools/authors.js +0 -0
  1975. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-candidate-mark.tool.js +0 -0
  1976. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-evidence-ids.d.ts +0 -0
  1977. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-evidence-ids.js +0 -0
  1978. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-evidence-neighbors.tool.d.ts +0 -0
  1979. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-evidence-neighbors.tool.js +0 -0
  1980. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-evidence-read.tool.d.ts +0 -0
  1981. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-evidence-read.tool.js +0 -0
  1982. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-evidence-tool-store.js +0 -0
  1983. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-evidence-tools.test.d.ts +0 -0
  1984. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-ingest-metadata.d.ts +0 -0
  1985. /package/{node_modules/@ktx/context/dist → dist/context}/tools/context-ingest-metadata.js +0 -0
  1986. /package/{node_modules/@ktx/context/dist → dist/context}/tools/sql-edit-replacer.d.ts +0 -0
  1987. /package/{node_modules/@ktx/context/dist → dist/context}/tools/sql-edit-replacer.js +0 -0
  1988. /package/{node_modules/@ktx/context/dist → dist/context}/tools/tool-session.js +0 -0
  1989. /package/{node_modules/@ktx/context/dist → dist/context}/tools/touched-sl-sources.test.d.ts +0 -0
  1990. /package/{node_modules/@ktx/context/dist → dist/context}/tools/touched-sl-sources.test.js +0 -0
  1991. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/knowledge-search-text.d.ts +0 -0
  1992. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/knowledge-search-text.js +0 -0
  1993. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/knowledge-wiki.service.test.d.ts +0 -0
  1994. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/local-knowledge.test.d.ts +0 -0
  1995. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/ports.js +0 -0
  1996. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/sqlite-knowledge-index.d.ts +0 -0
  1997. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/sqlite-knowledge-index.js +0 -0
  1998. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/sqlite-knowledge-index.test.d.ts +0 -0
  1999. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/sqlite-knowledge-index.test.js +0 -0
  2000. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/tools/wiki-list-tags.tool.test.d.ts +0 -0
  2001. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/tools/wiki-list-tags.tool.test.js +0 -0
  2002. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/tools/wiki-read.tool.test.d.ts +0 -0
  2003. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/tools/wiki-remove.tool.test.d.ts +0 -0
  2004. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/tools/wiki-search.tool.test.d.ts +0 -0
  2005. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/tools/wiki-search.tool.test.js +0 -0
  2006. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/tools/wiki-write.tool.test.d.ts +0 -0
  2007. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/types.js +0 -0
  2008. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/wiki-ref-validation.js +0 -0
  2009. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/wiki-ref-validation.test.d.ts +0 -0
  2010. /package/{node_modules/@ktx/context/dist → dist/context}/wiki/wiki-ref-validation.test.js +0 -0
  2011. /package/{node_modules/@ktx/llm/dist → dist/llm}/embedding-health.d.ts +0 -0
  2012. /package/{node_modules/@ktx/llm/dist → dist/llm}/embedding-health.js +0 -0
  2013. /package/{node_modules/@ktx/llm/dist → dist/llm}/embedding-health.test.d.ts +0 -0
  2014. /package/{node_modules/@ktx/llm/dist → dist/llm}/embedding-health.test.js +0 -0
  2015. /package/{node_modules/@ktx/llm/dist → dist/llm}/embedding-provider.d.ts +0 -0
  2016. /package/{node_modules/@ktx/llm/dist → dist/llm}/embedding-provider.js +0 -0
  2017. /package/{node_modules/@ktx/llm/dist → dist/llm}/embedding-provider.test.d.ts +0 -0
  2018. /package/{node_modules/@ktx/llm/dist → dist/llm}/embedding-provider.test.js +0 -0
  2019. /package/{node_modules/@ktx/llm/dist → dist/llm}/message-builder.d.ts +0 -0
  2020. /package/{node_modules/@ktx/llm/dist → dist/llm}/message-builder.js +0 -0
  2021. /package/{node_modules/@ktx/llm/dist → dist/llm}/message-builder.test.d.ts +0 -0
  2022. /package/{node_modules/@ktx/llm/dist → dist/llm}/message-builder.test.js +0 -0
  2023. /package/{node_modules/@ktx/llm/dist → dist/llm}/model-health.js +0 -0
  2024. /package/{node_modules/@ktx/llm/dist → dist/llm}/model-health.test.d.ts +0 -0
  2025. /package/{node_modules/@ktx/llm/dist → dist/llm}/model-health.test.js +0 -0
  2026. /package/{node_modules/@ktx/llm/dist → dist/llm}/model-provider.test.d.ts +0 -0
  2027. /package/{node_modules/@ktx/llm/dist → dist/llm}/model-provider.test.js +0 -0
  2028. /package/{node_modules/@ktx/llm/dist → dist/llm}/repair.d.ts +0 -0
  2029. /package/{node_modules/@ktx/llm/dist → dist/llm}/repair.js +0 -0
  2030. /package/{node_modules/@ktx/llm/dist → dist/llm}/repair.test.d.ts +0 -0
  2031. /package/{node_modules/@ktx/llm/dist → dist/llm}/repair.test.js +0 -0
  2032. /package/{node_modules/@ktx/llm/dist → dist/llm}/types.js +0 -0
  2033. /package/{node_modules/@ktx/connector-sqlserver/dist/package-exports.test.d.ts → dist/mcp-server-factory.test.d.ts} +0 -0
  2034. /package/{node_modules/@ktx/context → dist}/prompts/memory_agent_backfill.md +0 -0
  2035. /package/{node_modules/@ktx/context → dist}/prompts/memory_agent_bundle_ingest_reconcile.md +0 -0
  2036. /package/{node_modules/@ktx/context → dist}/prompts/memory_agent_bundle_ingest_work_unit.md +0 -0
  2037. /package/{node_modules/@ktx/context → dist}/prompts/memory_agent_external_ingest.md +0 -0
  2038. /package/{node_modules/@ktx/context → dist}/prompts/memory_agent_research.md +0 -0
  2039. /package/{node_modules/@ktx/context → dist}/prompts/skills/light_extraction.md +0 -0
  2040. /package/{node_modules/@ktx/context → dist}/prompts/skills/page_triage_classifier.md +0 -0
  2041. /package/{node_modules/@ktx/context → dist}/skills/_shared/identifier-verification.md +0 -0
  2042. /package/{node_modules/@ktx/context → dist}/skills/dbt_ingest/SKILL.md +0 -0
  2043. /package/{node_modules/@ktx/context → dist}/skills/historic_sql_patterns/SKILL.md +0 -0
  2044. /package/{node_modules/@ktx/context → dist}/skills/historic_sql_table_digest/SKILL.md +0 -0
  2045. /package/{node_modules/@ktx/context → dist}/skills/ingest_triage/SKILL.md +0 -0
  2046. /package/{node_modules/@ktx/context → dist}/skills/live_database_ingest/SKILL.md +0 -0
  2047. /package/{node_modules/@ktx/context → dist}/skills/looker_ingest/SKILL.md +0 -0
  2048. /package/{node_modules/@ktx/context → dist}/skills/lookml_ingest/SKILL.md +0 -0
  2049. /package/{node_modules/@ktx/context → dist}/skills/metabase_ingest/SKILL.md +0 -0
  2050. /package/{node_modules/@ktx/context → dist}/skills/metricflow_ingest/SKILL.md +0 -0
  2051. /package/{node_modules/@ktx/context → dist}/skills/notion_synthesize/SKILL.md +0 -0
  2052. /package/{node_modules/@ktx/context → dist}/skills/sl/SKILL.md +0 -0
  2053. /package/{node_modules/@ktx/context → dist}/skills/sl_capture/SKILL.md +0 -0
  2054. /package/{node_modules/@ktx/context → dist}/skills/wiki_capture/SKILL.md +0 -0
  2055. /package/{node_modules/@ktx/context/dist/agent/agent-runner.service.test.d.ts → dist/status-project.test.d.ts} +0 -0
  2056. /package/{node_modules/@ktx/context/dist/index.test.d.ts → dist/telemetry/command-hook.test.d.ts} +0 -0
  2057. /package/{node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/match-tables.test.d.ts → dist/telemetry/demo-detect.test.d.ts} +0 -0
  2058. /package/{node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/merge-semantic-model-tables.test.d.ts → dist/telemetry/emitter.test.d.ts} +0 -0
  2059. /package/{node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-description-updates.test.d.ts → dist/telemetry/events.snapshot.test.d.ts} +0 -0
  2060. /package/{node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-metadata-updates.test.d.ts → dist/telemetry/events.test.d.ts} +0 -0
  2061. /package/{node_modules/@ktx/context/dist/ingest/adapters/dbt-descriptions/to-relationship-updates.test.d.ts → dist/telemetry/identity.test.d.ts} +0 -0
  2062. /package/{node_modules/@ktx/context/dist/ingest/adapters/dbt-extraction-golden-parity.test.d.ts → dist/telemetry/project-snapshot.test.d.ts} +0 -0
  2063. /package/{node_modules/@ktx/context/dist/ingest/adapters/live-database/extracted-schema.test.d.ts → dist/telemetry/schema-writer.test.d.ts} +0 -0
  2064. /package/{node_modules/@ktx/context/dist/ingest/adapters/live-database/structural-sync.test.d.ts → dist/telemetry/scrubber.test.d.ts} +0 -0
@@ -0,0 +1,1928 @@
1
+ import { mkdir, mkdtemp, readFile, readdir, rm, writeFile } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { describe, expect, it, vi } from 'vitest';
5
+ import { GitService } from '../../context/core/git.service.js';
6
+ import { SessionWorktreeService } from '../../context/core/session-worktree.service.js';
7
+ import { LocalGitFileStore } from '../project/local-git-file-store.js';
8
+ import { addTouchedSlSource } from '../../context/tools/touched-sl-sources.js';
9
+ import { IngestBundleRunner } from './ingest-bundle.runner.js';
10
+ async function makeRealGitRuntime() {
11
+ const homeDir = await mkdtemp(join(tmpdir(), 'ktx-isolated-runner-'));
12
+ const configDir = join(homeDir, 'config');
13
+ const git = new GitService({
14
+ storage: { configDir, homeDir },
15
+ git: {
16
+ userName: 'System User',
17
+ userEmail: 'system@example.com',
18
+ bootstrapMessage: 'init',
19
+ bootstrapAuthor: 'system',
20
+ bootstrapAuthorEmail: 'system@example.com',
21
+ },
22
+ });
23
+ await git.onModuleInit();
24
+ const configService = new LocalGitFileStore({ rootDir: configDir, git });
25
+ const sessionWorktreeService = new SessionWorktreeService({
26
+ coreConfig: {
27
+ storage: { configDir, homeDir },
28
+ git: {
29
+ userName: 'System User',
30
+ userEmail: 'system@example.com',
31
+ bootstrapMessage: 'init',
32
+ bootstrapAuthor: 'system',
33
+ bootstrapAuthorEmail: 'system@example.com',
34
+ },
35
+ },
36
+ gitService: git,
37
+ configService,
38
+ });
39
+ return { homeDir, configDir, git, configService, sessionWorktreeService };
40
+ }
41
+ function rootOfConfig(configService, fallback) {
42
+ const rootDir = configService.rootDir;
43
+ return typeof rootDir === 'string' ? rootDir : fallback;
44
+ }
45
+ async function loadSourcesFromRoot(root) {
46
+ const raw = await readFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'utf-8').catch(() => '');
47
+ const hasCents = raw.includes('total_contract_arr_cents');
48
+ const hasDollars = raw.includes('total_contract_arr');
49
+ return {
50
+ sources: hasCents || hasDollars
51
+ ? [
52
+ {
53
+ name: 'mart_account_segments',
54
+ grain: ['account_id'],
55
+ columns: [{ name: 'account_id', type: 'string' }],
56
+ joins: [],
57
+ measures: [{ name: hasCents ? 'total_contract_arr_cents' : 'total_contract_arr', expr: 'sum(contract_arr)' }],
58
+ table: 'analytics.mart_account_segments',
59
+ },
60
+ ]
61
+ : [],
62
+ loadErrors: [],
63
+ };
64
+ }
65
+ async function listGlobalWikiPageKeys(root) {
66
+ const dir = join(root, 'wiki/global');
67
+ const entries = await readdir(dir).catch(() => []);
68
+ return entries
69
+ .filter((entry) => entry.endsWith('.md'))
70
+ .map((entry) => entry.slice(0, -'.md'.length))
71
+ .sort();
72
+ }
73
+ function frontmatterList(yaml, key) {
74
+ const pattern = new RegExp(`(?:^|\\n)${key}:\\n((?: - .+\\n?)*)`);
75
+ return (pattern
76
+ .exec(yaml)?.[1]
77
+ ?.split('\n')
78
+ .map((line) => line.trim().replace(/^- /, ''))
79
+ .filter(Boolean) ?? []);
80
+ }
81
+ function legacyFallbackSettingKey() {
82
+ return ['sharedWorktree', 'SourceKeys'].join('');
83
+ }
84
+ function legacySharedTraceEvent() {
85
+ return ['shared', 'worktree', 'path', 'enabled'].join('_');
86
+ }
87
+ function makeWikiService(root) {
88
+ return {
89
+ listPageKeys: vi.fn(async (scope) => (scope === 'GLOBAL' ? listGlobalWikiPageKeys(root) : [])),
90
+ readPage: vi.fn(async (_scope, _scopeId, key) => {
91
+ const path = join(root, 'wiki/global', `${key}.md`);
92
+ const raw = await readFile(path, 'utf-8').catch(() => null);
93
+ if (!raw) {
94
+ return null;
95
+ }
96
+ const [, yaml = '', content = ''] = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(raw) ?? [];
97
+ return {
98
+ pageKey: key,
99
+ frontmatter: {
100
+ summary: key,
101
+ usage_mode: 'auto',
102
+ refs: frontmatterList(yaml, 'refs'),
103
+ sl_refs: frontmatterList(yaml, 'sl_refs'),
104
+ },
105
+ content: content.trim(),
106
+ };
107
+ }),
108
+ writePage: vi.fn(async (_scope, _scopeId, key, frontmatter, content) => {
109
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
110
+ const refs = (frontmatter.refs ?? []).map((ref) => ` - ${ref}`).join('\n');
111
+ const slRefs = (frontmatter.sl_refs ?? []).map((ref) => ` - ${ref}`).join('\n');
112
+ await writeFile(join(root, 'wiki/global', `${key}.md`), [
113
+ '---',
114
+ `summary: ${frontmatter.summary ?? key}`,
115
+ `usage_mode: ${frontmatter.usage_mode ?? 'auto'}`,
116
+ 'refs:',
117
+ refs,
118
+ 'sl_refs:',
119
+ slRefs,
120
+ '---',
121
+ '',
122
+ content,
123
+ '',
124
+ ].join('\n'));
125
+ }),
126
+ syncFromCommit: vi.fn(),
127
+ };
128
+ }
129
+ function makeDeps(runtime, sourceKey = 'metabase', settings = {}) {
130
+ const adapter = {
131
+ source: sourceKey,
132
+ skillNames: [],
133
+ detect: vi.fn().mockResolvedValue(true),
134
+ chunk: vi.fn().mockResolvedValue({
135
+ workUnits: [
136
+ { unitKey: 'card-wiki', rawFiles: ['cards/wiki.json'], peerFileIndex: [], dependencyPaths: [] },
137
+ { unitKey: 'card-source', rawFiles: ['cards/source.json'], peerFileIndex: [], dependencyPaths: [] },
138
+ ],
139
+ }),
140
+ };
141
+ const wikiService = makeWikiService(runtime.configDir);
142
+ const semanticLayerService = {
143
+ loadAllSources: vi.fn(async () => loadSourcesFromRoot(runtime.configDir)),
144
+ listFilesForConnection: vi.fn().mockResolvedValue(['mart_account_segments.yaml']),
145
+ };
146
+ semanticLayerService.forWorktree = vi.fn((workdir) => ({
147
+ ...semanticLayerService,
148
+ loadAllSources: vi.fn(async () => loadSourcesFromRoot(workdir)),
149
+ listFilesForConnection: vi.fn().mockResolvedValue(['mart_account_segments.yaml']),
150
+ }));
151
+ const deps = {
152
+ runs: { create: vi.fn().mockResolvedValue({ id: 'run-1' }), markCompleted: vi.fn(), markFailed: vi.fn() },
153
+ provenance: {
154
+ insertMany: vi.fn(),
155
+ findLatestHashesForCompletedSyncs: vi.fn().mockResolvedValue(new Map()),
156
+ findLatestArtifactsForRawPaths: vi.fn().mockResolvedValue(new Map()),
157
+ },
158
+ reports: { create: vi.fn().mockResolvedValue({ id: 'report-1' }), findByJobId: vi.fn().mockResolvedValue(null), markSuperseded: vi.fn() },
159
+ canonicalPins: { listPins: vi.fn().mockResolvedValue([]) },
160
+ registry: { get: vi.fn().mockReturnValue(adapter), register: vi.fn(), has: vi.fn(), list: vi.fn() },
161
+ diffSetService: {
162
+ compute: vi.fn().mockResolvedValue({ added: ['cards/wiki.json', 'cards/source.json'], modified: [], deleted: [], unchanged: [] }),
163
+ },
164
+ sessionWorktreeService: runtime.sessionWorktreeService,
165
+ agentRunner: { runLoop: vi.fn() },
166
+ gitService: runtime.git,
167
+ lockingService: { withLock: vi.fn(async (_key, fn) => fn()) },
168
+ storage: {
169
+ homeDir: join(runtime.configDir, '.ktx'),
170
+ systemGitAuthor: { name: 'KTX Test', email: 'system@ktx.local' },
171
+ resolveUploadDir: (id) => join(runtime.homeDir, 'upload', id),
172
+ resolvePullDir: (id) => join(runtime.homeDir, 'pull', id),
173
+ resolveTranscriptDir: (id) => join(runtime.configDir, '.ktx/ingest-transcripts', id),
174
+ resolveTracePath: (id) => join(runtime.configDir, '.ktx/ingest-traces', id, 'trace.jsonl'),
175
+ },
176
+ settings: {
177
+ memoryIngestionModel: 'test',
178
+ probeRowCount: 1,
179
+ ingestTraceLevel: 'trace',
180
+ ...settings,
181
+ },
182
+ skillsRegistry: {
183
+ listSkills: vi.fn().mockResolvedValue([]),
184
+ getSkill: vi.fn().mockResolvedValue(null),
185
+ buildSkillsPrompt: vi.fn().mockReturnValue(''),
186
+ stripFrontmatter: vi.fn((body) => body),
187
+ },
188
+ promptService: { loadPrompt: vi.fn().mockResolvedValue('base') },
189
+ wikiService: { ...wikiService, forWorktree: vi.fn((workdir) => makeWikiService(workdir)) },
190
+ knowledgeIndex: { listPagesForUser: vi.fn().mockResolvedValue([]) },
191
+ knowledgeSlRefs: { syncFromWiki: vi.fn() },
192
+ semanticLayerService,
193
+ slSearchService: { indexSources: vi.fn() },
194
+ slSourcesRepository: {},
195
+ slValidator: { validateSingleSource: vi.fn().mockResolvedValue({ errors: [], warnings: [] }) },
196
+ connections: { listEnabledConnections: vi.fn().mockResolvedValue([]), getConnectionById: vi.fn() },
197
+ toolsetFactory: { createIngestWuToolset: vi.fn(() => ({ toRuntimeTools: vi.fn(() => ({})) })) },
198
+ commitMessages: { enqueueForExternalCommit: vi.fn() },
199
+ embedding: { maxBatchSize: 64, computeEmbedding: vi.fn(), computeEmbeddingsBulk: vi.fn() },
200
+ };
201
+ return { deps, adapter };
202
+ }
203
+ async function mockStageRawFiles(runner, runtime, hashes, sourceKey = 'metabase') {
204
+ runner.resolveStagedDir = vi.fn().mockResolvedValue(join(runtime.homeDir, 'stage'));
205
+ runner.stageRawFilesStage1 = vi.fn(async ({ worktreeRoot }) => {
206
+ const rawDir = join(worktreeRoot, 'raw-sources/warehouse', sourceKey, 's');
207
+ await mkdir(rawDir, { recursive: true });
208
+ for (const [rawPath] of hashes) {
209
+ await mkdir(join(rawDir, rawPath.split('/').slice(0, -1).join('/')), { recursive: true });
210
+ await writeFile(join(rawDir, rawPath), '{}');
211
+ }
212
+ return { currentHashes: new Map(hashes), rawDirInWorktree: `raw-sources/warehouse/${sourceKey}/s` };
213
+ });
214
+ }
215
+ describe('IngestBundleRunner isolated diff path', () => {
216
+ it('routes an unlisted direct-writing source through isolated diffs by default', async () => {
217
+ const runtime = await makeRealGitRuntime();
218
+ try {
219
+ const sourceKey = 'custom-direct-source';
220
+ const { deps, adapter } = makeDeps(runtime, sourceKey);
221
+ adapter.chunk.mockResolvedValue({
222
+ workUnits: [
223
+ {
224
+ unitKey: 'custom-wiki',
225
+ rawFiles: ['custom/page.json'],
226
+ peerFileIndex: [],
227
+ dependencyPaths: [],
228
+ },
229
+ ],
230
+ });
231
+ let currentSession = null;
232
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
233
+ currentSession = toolSession;
234
+ return { toRuntimeTools: vi.fn(() => ({})) };
235
+ });
236
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
237
+ if (params.telemetryTags.operationName !== 'ingest-bundle-wu') {
238
+ return { stopReason: 'natural' };
239
+ }
240
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
241
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
242
+ await writeFile(join(root, 'wiki/global/custom-isolated.md'), '---\nsummary: Custom isolated write\nusage_mode: auto\n---\n\nCustom isolated write.\n', 'utf-8');
243
+ currentSession.actions.push({
244
+ target: 'wiki',
245
+ type: 'created',
246
+ key: 'custom-isolated',
247
+ detail: 'Custom isolated write',
248
+ rawPaths: ['custom/page.json'],
249
+ });
250
+ await currentSession.gitService.commitFiles(['wiki/global/custom-isolated.md'], 'custom wiki', 'KTX Test', 'system@ktx.local');
251
+ return { stopReason: 'natural' };
252
+ });
253
+ const runner = new IngestBundleRunner(deps);
254
+ await mockStageRawFiles(runner, runtime, [['custom/page.json', 'h1']], sourceKey);
255
+ await expect(runner.run({
256
+ jobId: 'job-custom-default',
257
+ connectionId: 'warehouse',
258
+ sourceKey,
259
+ trigger: 'upload',
260
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
261
+ })).resolves.toMatchObject({
262
+ jobId: 'job-custom-default',
263
+ failedWorkUnits: [],
264
+ workUnitCount: 1,
265
+ });
266
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-custom-default/trace.jsonl'), 'utf-8');
267
+ expect(trace).toContain('isolated_diff_enabled');
268
+ expect(trace).toContain('work_unit_child_created');
269
+ expect(trace).not.toContain(legacySharedTraceEvent());
270
+ const reportCreate = vi.mocked(deps.reports.create).mock.calls.at(-1)?.[0];
271
+ const reportBody = reportCreate?.body;
272
+ expect(reportBody?.isolatedDiff).toMatchObject({
273
+ enabled: true,
274
+ acceptedPatches: 1,
275
+ });
276
+ }
277
+ finally {
278
+ await rm(runtime.homeDir, { recursive: true, force: true });
279
+ }
280
+ });
281
+ it('does not support shared-worktree fallback settings', async () => {
282
+ const runtime = await makeRealGitRuntime();
283
+ try {
284
+ const sourceKey = 'legacy-source';
285
+ const staleSettings = {
286
+ [legacyFallbackSettingKey()]: ['legacy-source'],
287
+ };
288
+ const { deps, adapter } = makeDeps(runtime, sourceKey, staleSettings);
289
+ adapter.chunk.mockResolvedValue({
290
+ workUnits: [
291
+ {
292
+ unitKey: 'legacy-wiki',
293
+ rawFiles: ['legacy/page.json'],
294
+ peerFileIndex: [],
295
+ dependencyPaths: [],
296
+ },
297
+ ],
298
+ });
299
+ let currentSession = null;
300
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
301
+ currentSession = toolSession;
302
+ return { toRuntimeTools: vi.fn(() => ({})) };
303
+ });
304
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
305
+ if (params.telemetryTags.operationName !== 'ingest-bundle-wu') {
306
+ return { stopReason: 'natural' };
307
+ }
308
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
309
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
310
+ await writeFile(join(root, 'wiki/global/legacy-isolated.md'), '---\nsummary: Legacy isolated write\nusage_mode: auto\n---\n\nLegacy isolated write.\n', 'utf-8');
311
+ currentSession.actions.push({
312
+ target: 'wiki',
313
+ type: 'created',
314
+ key: 'legacy-isolated',
315
+ detail: 'Legacy isolated write',
316
+ rawPaths: ['legacy/page.json'],
317
+ });
318
+ await currentSession.gitService.commitFiles(['wiki/global/legacy-isolated.md'], 'legacy isolated wiki', 'KTX Test', 'system@ktx.local');
319
+ return { stopReason: 'natural' };
320
+ });
321
+ const runner = new IngestBundleRunner(deps);
322
+ await mockStageRawFiles(runner, runtime, [['legacy/page.json', 'h1']], sourceKey);
323
+ await expect(runner.run({
324
+ jobId: 'job-legacy-isolated',
325
+ connectionId: 'warehouse',
326
+ sourceKey,
327
+ trigger: 'upload',
328
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
329
+ })).resolves.toMatchObject({
330
+ jobId: 'job-legacy-isolated',
331
+ failedWorkUnits: [],
332
+ workUnitCount: 1,
333
+ });
334
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-legacy-isolated/trace.jsonl'), 'utf-8');
335
+ expect(trace).toContain('isolated_diff_enabled');
336
+ expect(trace).toContain('work_unit_child_created');
337
+ expect(trace).not.toContain(legacySharedTraceEvent());
338
+ const reportCreate = vi.mocked(deps.reports.create).mock.calls.at(-1)?.[0];
339
+ const reportBody = reportCreate?.body;
340
+ expect(reportBody?.isolatedDiff).toMatchObject({
341
+ enabled: true,
342
+ acceptedPatches: 1,
343
+ });
344
+ }
345
+ finally {
346
+ await rm(runtime.homeDir, { recursive: true, force: true });
347
+ }
348
+ });
349
+ it('does not integrate failed isolated WorkUnit patches', async () => {
350
+ const runtime = await makeRealGitRuntime();
351
+ try {
352
+ const { deps, adapter } = makeDeps(runtime, 'fake');
353
+ adapter.chunk.mockResolvedValue({
354
+ workUnits: [
355
+ { unitKey: 'wu-good', rawFiles: ['good.raw'], peerFileIndex: [], dependencyPaths: [] },
356
+ { unitKey: 'wu-bad', rawFiles: ['bad.raw'], peerFileIndex: [], dependencyPaths: [] },
357
+ ],
358
+ });
359
+ deps.diffSetService.compute = vi.fn().mockResolvedValue({
360
+ added: ['good.raw', 'bad.raw'],
361
+ modified: [],
362
+ deleted: [],
363
+ unchanged: [],
364
+ });
365
+ deps.slValidator.validateSingleSource = vi.fn(async (_validationDeps, _connectionId, sourceName) => ({
366
+ errors: sourceName === 'bad' ? [{ message: 'bad source rejected' }] : [],
367
+ warnings: [],
368
+ }));
369
+ let currentSession = null;
370
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
371
+ currentSession = toolSession;
372
+ return { toRuntimeTools: vi.fn(() => ({})) };
373
+ });
374
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
375
+ if (params.telemetryTags.operationName !== 'ingest-bundle-wu') {
376
+ return { stopReason: 'natural' };
377
+ }
378
+ const unitKey = params.telemetryTags.unitKey;
379
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
380
+ await mkdir(join(root, 'semantic-layer/warehouse'), { recursive: true });
381
+ if (unitKey === 'wu-good') {
382
+ await writeFile(join(root, 'semantic-layer/warehouse/good.yaml'), 'name: good\n', 'utf-8');
383
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'good');
384
+ currentSession.actions.push({
385
+ target: 'sl',
386
+ type: 'created',
387
+ key: 'good',
388
+ detail: 'good source',
389
+ targetConnectionId: 'warehouse',
390
+ rawPaths: ['good.raw'],
391
+ });
392
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/good.yaml'], 'test: add good source', 'KTX Test', 'system@ktx.local');
393
+ }
394
+ if (unitKey === 'wu-bad') {
395
+ await writeFile(join(root, 'semantic-layer/warehouse/bad.yaml'), 'name: bad\n', 'utf-8');
396
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'bad');
397
+ currentSession.actions.push({
398
+ target: 'sl',
399
+ type: 'created',
400
+ key: 'bad',
401
+ detail: 'bad source',
402
+ targetConnectionId: 'warehouse',
403
+ rawPaths: ['bad.raw'],
404
+ });
405
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/bad.yaml'], 'test: add bad source', 'KTX Test', 'system@ktx.local');
406
+ }
407
+ return { stopReason: 'natural' };
408
+ });
409
+ const runner = new IngestBundleRunner(deps);
410
+ await mockStageRawFiles(runner, runtime, [
411
+ ['good.raw', 'good-hash'],
412
+ ['bad.raw', 'bad-hash'],
413
+ ], 'fake');
414
+ const result = await runner.run({
415
+ jobId: 'job-failed-wu-isolated',
416
+ connectionId: 'warehouse',
417
+ sourceKey: 'fake',
418
+ trigger: 'upload',
419
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
420
+ });
421
+ expect(result.failedWorkUnits).toEqual(['wu-bad']);
422
+ await expect(readFile(join(runtime.configDir, 'semantic-layer/warehouse/good.yaml'), 'utf-8')).resolves.toContain('good');
423
+ await expect(readFile(join(runtime.configDir, 'semantic-layer/warehouse/bad.yaml'), 'utf-8')).rejects.toThrow();
424
+ const reportCreate = vi.mocked(deps.reports.create).mock.calls.at(-1)?.[0];
425
+ const reportBody = reportCreate?.body;
426
+ expect(reportBody.failedWorkUnits).toEqual(['wu-bad']);
427
+ expect(reportBody.isolatedDiff).toMatchObject({ enabled: true, acceptedPatches: 1 });
428
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-failed-wu-isolated/trace.jsonl'), 'utf-8');
429
+ expect(trace).toContain('work_unit_failed_before_patch');
430
+ expect(trace).toContain('patch_accepted');
431
+ expect(trace).not.toContain(legacySharedTraceEvent());
432
+ }
433
+ finally {
434
+ await rm(runtime.homeDir, { recursive: true, force: true });
435
+ }
436
+ });
437
+ it.each(['notion', 'lookml', 'looker', 'dbt', 'metricflow'])('routes %s direct writes through isolated child worktrees', async (sourceKey) => {
438
+ const runtime = await makeRealGitRuntime();
439
+ try {
440
+ const { deps, adapter } = makeDeps(runtime, sourceKey);
441
+ adapter.chunk.mockResolvedValue({
442
+ workUnits: [
443
+ {
444
+ unitKey: `${sourceKey}-wiki`,
445
+ rawFiles: [`${sourceKey}/page.json`],
446
+ peerFileIndex: [],
447
+ dependencyPaths: [],
448
+ },
449
+ ],
450
+ });
451
+ let currentSession = null;
452
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
453
+ currentSession = toolSession;
454
+ return { toRuntimeTools: vi.fn(() => ({})) };
455
+ });
456
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
457
+ if (params.telemetryTags.operationName !== 'ingest-bundle-wu') {
458
+ return { stopReason: 'natural' };
459
+ }
460
+ expect(params.telemetryTags).toMatchObject({
461
+ operationName: 'ingest-bundle-wu',
462
+ source: sourceKey,
463
+ unitKey: `${sourceKey}-wiki`,
464
+ });
465
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
466
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
467
+ await writeFile(join(root, 'wiki/global', `${sourceKey}-isolated.md`), `---\nsummary: ${sourceKey} isolated write\nusage_mode: auto\n---\n\nIsolated ${sourceKey} write.\n`, 'utf-8');
468
+ currentSession.actions.push({
469
+ target: 'wiki',
470
+ type: 'created',
471
+ key: `${sourceKey}-isolated`,
472
+ detail: `${sourceKey} isolated write`,
473
+ rawPaths: [`${sourceKey}/page.json`],
474
+ });
475
+ await currentSession.gitService.commitFiles([`wiki/global/${sourceKey}-isolated.md`], `${sourceKey} wiki`, 'KTX Test', 'system@ktx.local');
476
+ return { stopReason: 'natural' };
477
+ });
478
+ const runner = new IngestBundleRunner(deps);
479
+ await mockStageRawFiles(runner, runtime, [[`${sourceKey}/page.json`, 'h1']], sourceKey);
480
+ await expect(runner.run({
481
+ jobId: `job-${sourceKey}`,
482
+ connectionId: 'warehouse',
483
+ sourceKey,
484
+ trigger: 'upload',
485
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
486
+ })).resolves.toMatchObject({
487
+ jobId: `job-${sourceKey}`,
488
+ failedWorkUnits: [],
489
+ workUnitCount: 1,
490
+ });
491
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces', `job-${sourceKey}`, 'trace.jsonl'), 'utf-8');
492
+ expect(trace).toContain('isolated_diff_enabled');
493
+ expect(trace).toContain('work_unit_child_created');
494
+ expect(trace).toContain('work_unit_patch_collected');
495
+ expect(trace).toContain('patch_apply_started');
496
+ expect(trace).not.toContain(legacySharedTraceEvent());
497
+ const reportCreate = vi.mocked(deps.reports.create).mock.calls.at(-1)?.[0];
498
+ const reportBody = reportCreate?.body;
499
+ expect(reportBody?.isolatedDiff).toMatchObject({
500
+ enabled: true,
501
+ acceptedPatches: 1,
502
+ });
503
+ }
504
+ finally {
505
+ await rm(runtime.homeDir, { recursive: true, force: true });
506
+ }
507
+ });
508
+ it('rejects the Metabase stale-measure wiki body regression before squash', async () => {
509
+ const runtime = await makeRealGitRuntime();
510
+ try {
511
+ const { deps, adapter } = makeDeps(runtime);
512
+ adapter.project = vi.fn(async ({ workdir }) => {
513
+ await mkdir(join(workdir, 'semantic-layer/warehouse'), { recursive: true });
514
+ await writeFile(join(workdir, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr_cents\n expr: sum(contract_arr)\n');
515
+ return {
516
+ warnings: [],
517
+ errors: [],
518
+ touchedSources: [{ connectionId: 'warehouse', sourceName: 'mart_account_segments' }],
519
+ changedWikiPageKeys: [],
520
+ };
521
+ });
522
+ let currentSession = null;
523
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
524
+ currentSession = toolSession;
525
+ return { toRuntimeTools: vi.fn(() => ({})) };
526
+ });
527
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
528
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
529
+ if (params.telemetryTags.unitKey === 'card-wiki') {
530
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
531
+ await writeFile(join(root, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\nsl_refs:\n - mart_account_segments\n---\n\nARR is `mart_account_segments.total_contract_arr_cents`.\n');
532
+ currentSession.actions.push({ target: 'wiki', type: 'created', key: 'account-segments', detail: 'Account segments' });
533
+ await currentSession.gitService.commitFiles(['wiki/global/account-segments.md'], 'wu wiki', 'KTX Test', 'system@ktx.local');
534
+ }
535
+ if (params.telemetryTags.unitKey === 'card-source') {
536
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
537
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'mart_account_segments');
538
+ currentSession.actions.push({
539
+ target: 'sl',
540
+ type: 'updated',
541
+ key: 'mart_account_segments',
542
+ detail: 'Dollar measure',
543
+ targetConnectionId: 'warehouse',
544
+ });
545
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml'], 'wu source', 'KTX Test', 'system@ktx.local');
546
+ }
547
+ return { stopReason: 'natural' };
548
+ });
549
+ const runner = new IngestBundleRunner(deps);
550
+ await mockStageRawFiles(runner, runtime, [
551
+ ['cards/wiki.json', 'h1'],
552
+ ['cards/source.json', 'h2'],
553
+ ]);
554
+ await expect(runner.run({ jobId: 'job-1', connectionId: 'warehouse', sourceKey: 'metabase', trigger: 'upload', bundleRef: { kind: 'upload', uploadId: 'upload' } })).rejects.toThrow(/total_contract_arr_cents/);
555
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-1/trace.jsonl'), 'utf-8');
556
+ expect(trace).toContain('input_snapshot');
557
+ expect(trace).toContain('isolated_diff_enabled');
558
+ expect(trace).toContain('work_unit_child_created');
559
+ expect(trace).toContain('work_unit_patch_collected');
560
+ expect(trace).toContain('patch_apply_started');
561
+ expect(trace).toContain('final_artifact_gates_failed');
562
+ expect(trace).toContain('ingest_failed');
563
+ }
564
+ finally {
565
+ await rm(runtime.homeDir, { recursive: true, force: true });
566
+ }
567
+ });
568
+ it('rejects unchanged wiki body refs made stale by isolated semantic-layer changes', async () => {
569
+ const runtime = await makeRealGitRuntime();
570
+ try {
571
+ await mkdir(join(runtime.configDir, 'semantic-layer/warehouse'), { recursive: true });
572
+ await mkdir(join(runtime.configDir, 'wiki/global'), { recursive: true });
573
+ await writeFile(join(runtime.configDir, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr_cents\n expr: sum(contract_arr)\n');
574
+ await writeFile(join(runtime.configDir, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\n---\n\nExisting ARR uses `mart_account_segments.total_contract_arr_cents`.\n');
575
+ await runtime.git.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml', 'wiki/global/account-segments.md'], 'seed existing wiki body ref', 'KTX Test', 'system@ktx.local');
576
+ const preRunHead = await runtime.git.revParseHead();
577
+ const { deps, adapter } = makeDeps(runtime);
578
+ adapter.chunk.mockResolvedValue({
579
+ workUnits: [{ unitKey: 'source-only', rawFiles: ['cards/source.json'], peerFileIndex: [], dependencyPaths: [] }],
580
+ });
581
+ let currentSession = null;
582
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
583
+ currentSession = toolSession;
584
+ return { toRuntimeTools: vi.fn(() => ({})) };
585
+ });
586
+ deps.agentRunner.runLoop = vi.fn(async () => {
587
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
588
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
589
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'mart_account_segments');
590
+ currentSession.actions.push({
591
+ target: 'sl',
592
+ type: 'updated',
593
+ key: 'mart_account_segments',
594
+ detail: 'Rename ARR measure',
595
+ targetConnectionId: 'warehouse',
596
+ rawPaths: ['cards/source.json'],
597
+ });
598
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml'], 'wu source rename', 'KTX Test', 'system@ktx.local');
599
+ return { stopReason: 'natural' };
600
+ });
601
+ const runner = new IngestBundleRunner(deps);
602
+ await mockStageRawFiles(runner, runtime, [['cards/source.json', 'h1']]);
603
+ await expect(runner.run({
604
+ jobId: 'job-existing-body-stale',
605
+ connectionId: 'warehouse',
606
+ sourceKey: 'metabase',
607
+ trigger: 'upload',
608
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
609
+ })).rejects.toThrow(/total_contract_arr_cents/);
610
+ expect(await runtime.git.revParseHead()).toBe(preRunHead);
611
+ const events = (await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-existing-body-stale/trace.jsonl'), 'utf-8'))
612
+ .trim()
613
+ .split('\n')
614
+ .map((line) => JSON.parse(line));
615
+ expect(events.map((event) => event.event)).toEqual(expect.arrayContaining([
616
+ 'final_artifact_gates_started',
617
+ 'final_artifact_gates_failed',
618
+ 'ingest_failed',
619
+ 'failure_report_created',
620
+ ]));
621
+ expect(events.map((event) => event.event)).not.toContain('squash_finished');
622
+ const gateFailure = events.find((event) => event.event === 'final_artifact_gates_failed');
623
+ expect(gateFailure).toMatchObject({
624
+ data: {
625
+ wikiReferenceGateScope: {
626
+ global: true,
627
+ reasons: expect.arrayContaining(['semantic_layer_changed']),
628
+ pageKeysValidated: expect.arrayContaining(['account-segments']),
629
+ },
630
+ actionOrigins: expect.arrayContaining([
631
+ expect.objectContaining({
632
+ source: 'work_unit_action',
633
+ unitKey: 'source-only',
634
+ unitRawFiles: ['cards/source.json'],
635
+ action: expect.objectContaining({
636
+ target: 'sl',
637
+ type: 'updated',
638
+ key: 'mart_account_segments',
639
+ rawPaths: ['cards/source.json'],
640
+ targetConnectionId: 'warehouse',
641
+ }),
642
+ }),
643
+ ]),
644
+ },
645
+ error: { message: expect.stringContaining('total_contract_arr_cents') },
646
+ });
647
+ const failureReport = deps.reports.create.mock.calls
648
+ .map((call) => call[0])
649
+ .find((report) => report.body.status === 'failed');
650
+ expect(failureReport.body.failure).toMatchObject({
651
+ phase: 'final_gates',
652
+ message: expect.stringContaining('total_contract_arr_cents'),
653
+ details: expect.objectContaining({
654
+ wikiReferenceGateScope: expect.objectContaining({
655
+ global: true,
656
+ reasons: expect.arrayContaining(['semantic_layer_changed']),
657
+ pageKeysValidated: expect.arrayContaining(['account-segments']),
658
+ }),
659
+ touchedSlSources: expect.arrayContaining([
660
+ expect.objectContaining({ connectionId: 'warehouse', sourceName: 'mart_account_segments' }),
661
+ ]),
662
+ actionOrigins: expect.arrayContaining([
663
+ expect.objectContaining({
664
+ source: 'work_unit_action',
665
+ unitKey: 'source-only',
666
+ action: expect.objectContaining({
667
+ target: 'sl',
668
+ type: 'updated',
669
+ key: 'mart_account_segments',
670
+ rawPaths: ['cards/source.json'],
671
+ targetConnectionId: 'warehouse',
672
+ }),
673
+ }),
674
+ ]),
675
+ }),
676
+ });
677
+ expect(failureReport.body.workUnits).toEqual(expect.arrayContaining([
678
+ expect.objectContaining({
679
+ unitKey: 'source-only',
680
+ actions: expect.arrayContaining([
681
+ expect.objectContaining({
682
+ target: 'sl',
683
+ type: 'updated',
684
+ key: 'mart_account_segments',
685
+ rawPaths: ['cards/source.json'],
686
+ }),
687
+ ]),
688
+ }),
689
+ ]));
690
+ }
691
+ finally {
692
+ await rm(runtime.homeDir, { recursive: true, force: true });
693
+ }
694
+ });
695
+ it('accepts two isolated work units that edit different wiki pages', async () => {
696
+ const runtime = await makeRealGitRuntime();
697
+ try {
698
+ const { deps, adapter } = makeDeps(runtime);
699
+ adapter.chunk.mockResolvedValue({
700
+ workUnits: [
701
+ { unitKey: 'page-a', rawFiles: ['pages/a.json'], peerFileIndex: [], dependencyPaths: [] },
702
+ { unitKey: 'page-b', rawFiles: ['pages/b.json'], peerFileIndex: [], dependencyPaths: [] },
703
+ ],
704
+ });
705
+ let currentSession = null;
706
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
707
+ currentSession = toolSession;
708
+ return { toRuntimeTools: vi.fn(() => ({})) };
709
+ });
710
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
711
+ const unitKey = params.telemetryTags.unitKey;
712
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
713
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
714
+ await writeFile(join(root, `wiki/global/${unitKey}.md`), `---\nsummary: ${unitKey}\nusage_mode: auto\n---\n\n${unitKey}\n`);
715
+ currentSession.actions.push({ target: 'wiki', type: 'created', key: unitKey, detail: unitKey });
716
+ await currentSession.gitService.commitFiles([`wiki/global/${unitKey}.md`], `wu ${unitKey}`, 'KTX Test', 'system@ktx.local');
717
+ return { stopReason: 'natural' };
718
+ });
719
+ const runner = new IngestBundleRunner(deps);
720
+ await mockStageRawFiles(runner, runtime, [
721
+ ['pages/a.json', 'h1'],
722
+ ['pages/b.json', 'h2'],
723
+ ]);
724
+ const result = await runner.run({ jobId: 'job-clean', connectionId: 'warehouse', sourceKey: 'metabase', trigger: 'upload', bundleRef: { kind: 'upload', uploadId: 'upload' } });
725
+ expect(result.failedWorkUnits).toEqual([]);
726
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-clean/trace.jsonl'), 'utf-8');
727
+ expect(trace.match(/patch_accepted/g)).toHaveLength(2);
728
+ expect(trace).toContain('ingest_finished');
729
+ }
730
+ finally {
731
+ await rm(runtime.homeDir, { recursive: true, force: true });
732
+ }
733
+ });
734
+ it('classifies same-source patch application failure as a textual conflict', async () => {
735
+ const runtime = await makeRealGitRuntime();
736
+ try {
737
+ const { deps, adapter } = makeDeps(runtime);
738
+ adapter.chunk.mockResolvedValue({
739
+ workUnits: [
740
+ { unitKey: 'orders-a', rawFiles: ['orders/a.json'], peerFileIndex: [], dependencyPaths: [] },
741
+ { unitKey: 'orders-b', rawFiles: ['orders/b.json'], peerFileIndex: [], dependencyPaths: [] },
742
+ ],
743
+ });
744
+ let currentSession = null;
745
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
746
+ currentSession = toolSession;
747
+ return { toRuntimeTools: vi.fn(() => ({})) };
748
+ });
749
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
750
+ if (params.telemetryTags.operationName === 'ingest-isolated-diff-textual-resolver') {
751
+ return { stopReason: 'natural' };
752
+ }
753
+ const suffix = params.telemetryTags.unitKey === 'orders-a' ? 'a' : 'b';
754
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
755
+ await mkdir(join(root, 'semantic-layer/warehouse'), { recursive: true });
756
+ await writeFile(join(root, 'semantic-layer/warehouse/orders.yaml'), `name: orders\ngrain: [id]\ncolumns: [{name: id, type: string}]\njoins: []\nmeasures:\n - name: order_count_${suffix}\n expr: count(*)\n`);
757
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'orders');
758
+ currentSession.actions.push({ target: 'sl', type: 'updated', key: 'orders', detail: suffix, targetConnectionId: 'warehouse' });
759
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/orders.yaml'], `wu ${suffix}`, 'KTX Test', 'system@ktx.local');
760
+ return { stopReason: 'natural' };
761
+ });
762
+ const runner = new IngestBundleRunner(deps);
763
+ await mockStageRawFiles(runner, runtime, [
764
+ ['orders/a.json', 'h1'],
765
+ ['orders/b.json', 'h2'],
766
+ ]);
767
+ await expect(runner.run({ jobId: 'job-text-conflict', connectionId: 'warehouse', sourceKey: 'metabase', trigger: 'upload', bundleRef: { kind: 'upload', uploadId: 'upload' } })).rejects.toThrow(/isolated diff textual conflict/);
768
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-text-conflict/trace.jsonl'), 'utf-8');
769
+ expect(trace).toContain('patch_textual_conflict');
770
+ expect(trace).toContain('textual_conflict_resolver_failed');
771
+ }
772
+ finally {
773
+ await rm(runtime.homeDir, { recursive: true, force: true });
774
+ }
775
+ });
776
+ it('makes deterministic projection visible to child worktrees before WorkUnit synthesis', async () => {
777
+ const runtime = await makeRealGitRuntime();
778
+ try {
779
+ const { deps, adapter } = makeDeps(runtime);
780
+ adapter.chunk.mockResolvedValue({
781
+ workUnits: [{ unitKey: 'wiki-projected', rawFiles: ['projected/wiki.json'], peerFileIndex: [], dependencyPaths: [] }],
782
+ });
783
+ adapter.project = vi.fn(async ({ workdir }) => {
784
+ await mkdir(join(workdir, 'semantic-layer/warehouse'), { recursive: true });
785
+ await writeFile(join(workdir, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
786
+ return {
787
+ warnings: [],
788
+ errors: [],
789
+ touchedSources: [{ connectionId: 'warehouse', sourceName: 'mart_account_segments' }],
790
+ changedWikiPageKeys: [],
791
+ };
792
+ });
793
+ let currentSession = null;
794
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
795
+ currentSession = toolSession;
796
+ return { toRuntimeTools: vi.fn(() => ({})) };
797
+ });
798
+ deps.agentRunner.runLoop = vi.fn(async () => {
799
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
800
+ await expect(readFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'utf-8')).resolves.toContain('total_contract_arr');
801
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
802
+ await writeFile(join(root, 'wiki/global/projected-orders.md'), '---\nsummary: Projected orders\nusage_mode: auto\nsl_refs:\n - mart_account_segments\n---\n\nARR `mart_account_segments.total_contract_arr`.\n');
803
+ currentSession.actions.push({ target: 'wiki', type: 'created', key: 'projected-orders', detail: 'Projected orders' });
804
+ await currentSession.gitService.commitFiles(['wiki/global/projected-orders.md'], 'wu projected wiki', 'KTX Test', 'system@ktx.local');
805
+ return { stopReason: 'natural' };
806
+ });
807
+ const runner = new IngestBundleRunner(deps);
808
+ await mockStageRawFiles(runner, runtime, [['projected/wiki.json', 'h1']]);
809
+ const result = await runner.run({ jobId: 'job-projection', connectionId: 'warehouse', sourceKey: 'metabase', trigger: 'upload', bundleRef: { kind: 'upload', uploadId: 'upload' } });
810
+ expect(result.failedWorkUnits).toEqual([]);
811
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-projection/trace.jsonl'), 'utf-8');
812
+ expect(trace).toContain('deterministic_projection_finished');
813
+ expect(trace).toContain('deterministic_projection_committed');
814
+ }
815
+ finally {
816
+ await rm(runtime.homeDir, { recursive: true, force: true });
817
+ }
818
+ });
819
+ it('rejects Notion-style changed wiki pages with invalid sl_refs', async () => {
820
+ const runtime = await makeRealGitRuntime();
821
+ try {
822
+ const { deps, adapter } = makeDeps(runtime);
823
+ adapter.chunk.mockResolvedValue({
824
+ workUnits: [{ unitKey: 'notion-page', rawFiles: ['pages/notion.json'], peerFileIndex: [], dependencyPaths: [] }],
825
+ });
826
+ let currentSession = null;
827
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
828
+ currentSession = toolSession;
829
+ return { toRuntimeTools: vi.fn(() => ({})) };
830
+ });
831
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
832
+ if (params.telemetryTags.operationName === 'ingest-isolated-diff-gate-repair') {
833
+ return { stopReason: 'natural' };
834
+ }
835
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
836
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
837
+ await writeFile(join(root, 'wiki/global/notion-page.md'), '---\nsummary: Notion page\nusage_mode: auto\nsl_refs:\n - missing_source\n---\n\nBody\n');
838
+ currentSession.actions.push({ target: 'wiki', type: 'created', key: 'notion-page', detail: 'Notion page' });
839
+ await currentSession.gitService.commitFiles(['wiki/global/notion-page.md'], 'wu notion', 'KTX Test', 'system@ktx.local');
840
+ return { stopReason: 'natural' };
841
+ });
842
+ const runner = new IngestBundleRunner(deps);
843
+ await mockStageRawFiles(runner, runtime, [['pages/notion.json', 'h1']]);
844
+ await expect(runner.run({ jobId: 'job-invalid-slrefs', connectionId: 'warehouse', sourceKey: 'metabase', trigger: 'upload', bundleRef: { kind: 'upload', uploadId: 'upload' } })).rejects.toThrow(/gate repair completed without editing an allowed path/);
845
+ }
846
+ finally {
847
+ await rm(runtime.homeDir, { recursive: true, force: true });
848
+ }
849
+ });
850
+ it('runs final artifact gates after reconciliation mutates the integration tree', async () => {
851
+ const runtime = await makeRealGitRuntime();
852
+ try {
853
+ const { deps, adapter } = makeDeps(runtime);
854
+ adapter.chunk.mockResolvedValue({
855
+ workUnits: [{ unitKey: 'card-source', rawFiles: ['cards/source.json'], peerFileIndex: [], dependencyPaths: [] }],
856
+ });
857
+ let currentSession = null;
858
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
859
+ currentSession = toolSession;
860
+ return { toRuntimeTools: vi.fn(() => ({})) };
861
+ });
862
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
863
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
864
+ if (params.telemetryTags.operationName === 'ingest-bundle-wu') {
865
+ await mkdir(join(root, 'semantic-layer/warehouse'), { recursive: true });
866
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
867
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'mart_account_segments');
868
+ currentSession.actions.push({
869
+ target: 'sl',
870
+ type: 'created',
871
+ key: 'mart_account_segments',
872
+ detail: 'Source with renamed ARR measure',
873
+ targetConnectionId: 'warehouse',
874
+ rawPaths: ['cards/source.json'],
875
+ });
876
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml'], 'wu source', 'KTX Test', 'system@ktx.local');
877
+ }
878
+ else {
879
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
880
+ await writeFile(join(root, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\nsl_refs:\n - mart_account_segments\n---\n\nReconcile wrote stale ARR `mart_account_segments.total_contract_arr_cents`.\n');
881
+ currentSession.actions.push({
882
+ target: 'wiki',
883
+ type: 'created',
884
+ key: 'account-segments',
885
+ detail: 'Stale reconcile wiki page',
886
+ rawPaths: ['cards/source.json'],
887
+ });
888
+ await currentSession.gitService.commitFiles(['wiki/global/account-segments.md'], 'reconcile wiki', 'KTX Test', 'system@ktx.local');
889
+ }
890
+ return { stopReason: 'natural' };
891
+ });
892
+ const runner = new IngestBundleRunner(deps);
893
+ await mockStageRawFiles(runner, runtime, [['cards/source.json', 'h1']]);
894
+ await expect(runner.run({
895
+ jobId: 'job-reconcile-stale',
896
+ connectionId: 'warehouse',
897
+ sourceKey: 'metabase',
898
+ trigger: 'upload',
899
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
900
+ })).rejects.toThrow(/total_contract_arr_cents/);
901
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-reconcile-stale/trace.jsonl'), 'utf-8');
902
+ expect(trace).toContain('reconciliation_finished');
903
+ expect(trace).toContain('final_artifact_gates_failed');
904
+ expect(trace).toContain('ingest_failed');
905
+ expect(await runtime.git.revParseHead()).not.toContain('reconcile wiki');
906
+ }
907
+ finally {
908
+ await rm(runtime.homeDir, { recursive: true, force: true });
909
+ }
910
+ });
911
+ it('stores a failure report and postmortem trace for final gate failures', async () => {
912
+ const runtime = await makeRealGitRuntime();
913
+ try {
914
+ const { deps, adapter } = makeDeps(runtime);
915
+ const createdReports = [];
916
+ deps.reports.create = vi.fn(async (args) => {
917
+ createdReports.push(args);
918
+ return { id: `report-${createdReports.length}` };
919
+ });
920
+ adapter.chunk.mockResolvedValue({
921
+ workUnits: [
922
+ { unitKey: 'card-wiki', rawFiles: ['cards/wiki.json'], peerFileIndex: [], dependencyPaths: [] },
923
+ { unitKey: 'card-source', rawFiles: ['cards/source.json'], peerFileIndex: [], dependencyPaths: [] },
924
+ ],
925
+ });
926
+ let currentSession = null;
927
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
928
+ currentSession = toolSession;
929
+ return { toRuntimeTools: vi.fn(() => ({})) };
930
+ });
931
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
932
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
933
+ if (params.telemetryTags.unitKey === 'card-wiki') {
934
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
935
+ await writeFile(join(root, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\n---\n\nARR is `mart_account_segments.total_contract_arr_cents`.\n');
936
+ currentSession.actions.push({
937
+ target: 'wiki',
938
+ type: 'created',
939
+ key: 'account-segments',
940
+ detail: 'Account segments',
941
+ rawPaths: ['cards/wiki.json'],
942
+ });
943
+ await currentSession.gitService.commitFiles(['wiki/global/account-segments.md'], 'wu wiki', 'KTX Test', 'system@ktx.local');
944
+ }
945
+ if (params.telemetryTags.unitKey === 'card-source') {
946
+ await mkdir(join(root, 'semantic-layer/warehouse'), { recursive: true });
947
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
948
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'mart_account_segments');
949
+ currentSession.actions.push({
950
+ target: 'sl',
951
+ type: 'created',
952
+ key: 'mart_account_segments',
953
+ detail: 'Dollar measure',
954
+ targetConnectionId: 'warehouse',
955
+ rawPaths: ['cards/source.json'],
956
+ });
957
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml'], 'wu source', 'KTX Test', 'system@ktx.local');
958
+ }
959
+ return { stopReason: 'natural' };
960
+ });
961
+ const runner = new IngestBundleRunner(deps);
962
+ await mockStageRawFiles(runner, runtime, [
963
+ ['cards/wiki.json', 'h1'],
964
+ ['cards/source.json', 'h2'],
965
+ ]);
966
+ await expect(runner.run({
967
+ jobId: 'job-trace-failure',
968
+ connectionId: 'warehouse',
969
+ sourceKey: 'metabase',
970
+ trigger: 'upload',
971
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
972
+ })).rejects.toThrow(/total_contract_arr_cents/);
973
+ const failureReport = createdReports.find((report) => report.body.status === 'failed');
974
+ expect(failureReport.body.tracePath).toContain('job-trace-failure/trace.jsonl');
975
+ expect(failureReport.body.failure).toMatchObject({ phase: 'final_gates' });
976
+ const events = (await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-trace-failure/trace.jsonl'), 'utf-8'))
977
+ .trim()
978
+ .split('\n')
979
+ .map((line) => JSON.parse(line));
980
+ expect(events.map((event) => event.event)).toEqual(expect.arrayContaining([
981
+ 'ingest_started',
982
+ 'input_snapshot',
983
+ 'work_units_planned',
984
+ 'isolated_diff_enabled',
985
+ 'work_unit_child_created',
986
+ 'work_unit_patch_collected',
987
+ 'patch_apply_started',
988
+ 'patch_accepted',
989
+ 'reconciliation_finished',
990
+ 'final_artifact_gates_failed',
991
+ 'ingest_failed',
992
+ 'failure_report_created',
993
+ ]));
994
+ const failed = events.find((event) => event.event === 'ingest_failed');
995
+ expect(failed).toMatchObject({
996
+ runId: 'run-1',
997
+ syncId: expect.any(String),
998
+ data: { phase: 'final_gates', tracePath: expect.stringContaining('trace.jsonl') },
999
+ error: { message: expect.stringContaining('total_contract_arr_cents') },
1000
+ });
1001
+ }
1002
+ finally {
1003
+ await rm(runtime.homeDir, { recursive: true, force: true });
1004
+ }
1005
+ });
1006
+ it('rejects invalid provenance raw paths before squash reaches main', async () => {
1007
+ const runtime = await makeRealGitRuntime();
1008
+ try {
1009
+ const { deps, adapter } = makeDeps(runtime);
1010
+ const createdReports = [];
1011
+ deps.reports.create = vi.fn(async (args) => {
1012
+ createdReports.push(args);
1013
+ return { id: `report-${createdReports.length}` };
1014
+ });
1015
+ adapter.chunk.mockResolvedValue({
1016
+ workUnits: [
1017
+ {
1018
+ unitKey: 'card-valid-artifacts',
1019
+ rawFiles: ['cards/source.json'],
1020
+ peerFileIndex: [],
1021
+ dependencyPaths: [],
1022
+ },
1023
+ ],
1024
+ });
1025
+ let currentSession = null;
1026
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1027
+ currentSession = toolSession;
1028
+ return { toRuntimeTools: vi.fn(() => ({})) };
1029
+ });
1030
+ deps.agentRunner.runLoop = vi.fn(async () => {
1031
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1032
+ await mkdir(join(root, 'semantic-layer/warehouse'), { recursive: true });
1033
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
1034
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
1035
+ await writeFile(join(root, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\nsl_refs:\n - mart_account_segments\n---\n\nARR is `mart_account_segments.total_contract_arr`.\n');
1036
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'mart_account_segments');
1037
+ currentSession.actions.push({
1038
+ target: 'sl',
1039
+ type: 'created',
1040
+ key: 'mart_account_segments',
1041
+ detail: 'Valid source',
1042
+ targetConnectionId: 'warehouse',
1043
+ rawPaths: ['cards/source.json'],
1044
+ });
1045
+ currentSession.actions.push({
1046
+ target: 'wiki',
1047
+ type: 'created',
1048
+ key: 'account-segments',
1049
+ detail: 'Valid wiki with invalid provenance raw path',
1050
+ rawPaths: ['cards/missing.json'],
1051
+ });
1052
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml', 'wiki/global/account-segments.md'], 'valid artifacts with invalid provenance', 'KTX Test', 'system@ktx.local');
1053
+ return { stopReason: 'natural' };
1054
+ });
1055
+ const runner = new IngestBundleRunner(deps);
1056
+ await mockStageRawFiles(runner, runtime, [['cards/source.json', 'h1']]);
1057
+ const preRunHead = await runtime.git.revParseHead();
1058
+ await expect(runner.run({
1059
+ jobId: 'job-invalid-provenance',
1060
+ connectionId: 'warehouse',
1061
+ sourceKey: 'metabase',
1062
+ trigger: 'upload',
1063
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1064
+ })).rejects.toThrow(/provenance row references raw path outside this snapshot: cards\/missing\.json/);
1065
+ expect(await runtime.git.revParseHead()).toBe(preRunHead);
1066
+ expect(deps.provenance.insertMany).not.toHaveBeenCalled();
1067
+ const failureReport = createdReports.find((report) => report.body.status === 'failed');
1068
+ expect(failureReport.body.tracePath).toContain('job-invalid-provenance/trace.jsonl');
1069
+ expect(failureReport.body.failure).toMatchObject({
1070
+ phase: 'provenance_validation',
1071
+ message: expect.stringContaining('cards/missing.json'),
1072
+ });
1073
+ expect(failureReport.body.failure.details).toMatchObject({
1074
+ invalidRawPaths: ['cards/missing.json'],
1075
+ currentRawPaths: ['cards/source.json'],
1076
+ invalidRows: expect.arrayContaining([
1077
+ expect.objectContaining({
1078
+ row: expect.objectContaining({
1079
+ rawPath: 'cards/missing.json',
1080
+ artifactKind: 'wiki',
1081
+ artifactKey: 'account-segments',
1082
+ actionType: 'wiki_written',
1083
+ }),
1084
+ origin: expect.objectContaining({
1085
+ source: 'work_unit_action',
1086
+ unitKey: 'card-valid-artifacts',
1087
+ actionIndex: 1,
1088
+ unitRawFiles: ['cards/source.json'],
1089
+ action: expect.objectContaining({
1090
+ target: 'wiki',
1091
+ type: 'created',
1092
+ key: 'account-segments',
1093
+ rawPaths: ['cards/missing.json'],
1094
+ }),
1095
+ }),
1096
+ }),
1097
+ ]),
1098
+ });
1099
+ expect(failureReport.body.provenanceRows).toEqual(expect.arrayContaining([
1100
+ expect.objectContaining({ rawPath: 'cards/source.json', artifactKind: 'sl', artifactKey: 'mart_account_segments' }),
1101
+ expect.objectContaining({ rawPath: 'cards/missing.json', artifactKind: 'wiki', artifactKey: 'account-segments' }),
1102
+ ]));
1103
+ expect(failureReport.body.workUnits).toEqual(expect.arrayContaining([
1104
+ expect.objectContaining({
1105
+ unitKey: 'card-valid-artifacts',
1106
+ rawFiles: ['cards/source.json'],
1107
+ actions: expect.arrayContaining([
1108
+ expect.objectContaining({
1109
+ target: 'wiki',
1110
+ key: 'account-segments',
1111
+ rawPaths: ['cards/missing.json'],
1112
+ }),
1113
+ ]),
1114
+ }),
1115
+ ]));
1116
+ const events = (await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-invalid-provenance/trace.jsonl'), 'utf-8'))
1117
+ .trim()
1118
+ .split('\n')
1119
+ .map((line) => JSON.parse(line));
1120
+ expect(events.map((event) => event.event)).toEqual(expect.arrayContaining([
1121
+ 'final_artifact_gates_finished',
1122
+ 'provenance_rows_validation_failed',
1123
+ 'ingest_failed',
1124
+ 'failure_report_created',
1125
+ ]));
1126
+ expect(events.map((event) => event.event)).not.toContain('squash_finished');
1127
+ const validationFailure = events.find((event) => event.event === 'provenance_rows_validation_failed');
1128
+ expect(validationFailure).toMatchObject({
1129
+ phase: 'provenance',
1130
+ data: {
1131
+ invalidRawPaths: ['cards/missing.json'],
1132
+ currentRawPaths: ['cards/source.json'],
1133
+ invalidRows: expect.arrayContaining([
1134
+ expect.objectContaining({
1135
+ row: expect.objectContaining({ rawPath: 'cards/missing.json' }),
1136
+ origin: expect.objectContaining({
1137
+ source: 'work_unit_action',
1138
+ unitKey: 'card-valid-artifacts',
1139
+ actionIndex: 1,
1140
+ }),
1141
+ }),
1142
+ ]),
1143
+ },
1144
+ });
1145
+ }
1146
+ finally {
1147
+ await rm(runtime.homeDir, { recursive: true, force: true });
1148
+ }
1149
+ });
1150
+ it('rejects slDisallowed patches that touch semantic-layer files', async () => {
1151
+ const runtime = await makeRealGitRuntime();
1152
+ try {
1153
+ const { deps, adapter } = makeDeps(runtime);
1154
+ adapter.chunk.mockResolvedValue({
1155
+ workUnits: [
1156
+ {
1157
+ unitKey: 'lookml-mismatch',
1158
+ rawFiles: ['views/orders.lkml'],
1159
+ peerFileIndex: [],
1160
+ dependencyPaths: [],
1161
+ slDisallowed: true,
1162
+ slDisallowedReason: 'lookml_connection_mismatch',
1163
+ },
1164
+ ],
1165
+ });
1166
+ let currentSession = null;
1167
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1168
+ currentSession = toolSession;
1169
+ return { toRuntimeTools: vi.fn(() => ({})) };
1170
+ });
1171
+ deps.agentRunner.runLoop = vi.fn(async () => {
1172
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1173
+ await mkdir(join(root, 'semantic-layer/warehouse'), { recursive: true });
1174
+ await writeFile(join(root, 'semantic-layer/warehouse/orders.yaml'), 'name: orders\ngrain: [id]\ncolumns: [{name: id, type: string}]\njoins: []\nmeasures: []\n');
1175
+ currentSession.actions.push({ target: 'sl', type: 'created', key: 'orders', detail: 'forbidden', targetConnectionId: 'warehouse' });
1176
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/orders.yaml'], 'forbidden sl', 'KTX Test', 'system@ktx.local');
1177
+ return { stopReason: 'natural' };
1178
+ });
1179
+ const runner = new IngestBundleRunner(deps);
1180
+ await mockStageRawFiles(runner, runtime, [['views/orders.lkml', 'h1']]);
1181
+ await expect(runner.run({ jobId: 'job-sl-disallowed', connectionId: 'warehouse', sourceKey: 'metabase', trigger: 'upload', bundleRef: { kind: 'upload', uploadId: 'upload' } })).rejects.toThrow(/isolated diff textual conflict/);
1182
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-sl-disallowed/trace.jsonl'), 'utf-8');
1183
+ expect(trace).toContain('patch_policy_rejected');
1184
+ expect(trace).toContain('slDisallowed WorkUnit lookml-mismatch touched semantic-layer/warehouse/orders.yaml');
1185
+ }
1186
+ finally {
1187
+ await rm(runtime.homeDir, { recursive: true, force: true });
1188
+ }
1189
+ });
1190
+ it('rejects final wiki refs broken by another accepted WorkUnit before squash', async () => {
1191
+ const runtime = await makeRealGitRuntime();
1192
+ try {
1193
+ await mkdir(join(runtime.configDir, 'wiki/global'), { recursive: true });
1194
+ await writeFile(join(runtime.configDir, 'wiki/global/source-page.md'), '---\nsummary: Source page\nusage_mode: auto\n---\n\nSource page\n');
1195
+ await runtime.git.commitFiles(['wiki/global/source-page.md'], 'seed source page', 'KTX Test', 'system@ktx.local');
1196
+ const preRunHead = await runtime.git.revParseHead();
1197
+ const { deps, adapter } = makeDeps(runtime);
1198
+ adapter.chunk.mockResolvedValue({
1199
+ workUnits: [
1200
+ { unitKey: 'page-ref', rawFiles: ['pages/ref.json'], peerFileIndex: [], dependencyPaths: [] },
1201
+ { unitKey: 'page-delete', rawFiles: ['pages/delete.json'], peerFileIndex: [], dependencyPaths: [] },
1202
+ ],
1203
+ });
1204
+ let currentSession = null;
1205
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1206
+ currentSession = toolSession;
1207
+ return { toRuntimeTools: vi.fn(() => ({})) };
1208
+ });
1209
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
1210
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1211
+ if (params.telemetryTags.unitKey === 'page-ref') {
1212
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
1213
+ await writeFile(join(root, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\nrefs:\n - source-page\n---\n\nSee [[source-page]].\n');
1214
+ currentSession.actions.push({
1215
+ target: 'wiki',
1216
+ type: 'created',
1217
+ key: 'account-segments',
1218
+ detail: 'Page with wiki ref',
1219
+ rawPaths: ['pages/ref.json'],
1220
+ });
1221
+ await currentSession.gitService.commitFiles(['wiki/global/account-segments.md'], 'wu page ref', 'KTX Test', 'system@ktx.local');
1222
+ }
1223
+ if (params.telemetryTags.unitKey === 'page-delete') {
1224
+ await rm(join(root, 'wiki/global/source-page.md'), { force: true });
1225
+ currentSession.actions.push({
1226
+ target: 'wiki',
1227
+ type: 'removed',
1228
+ key: 'source-page',
1229
+ detail: 'Delete referenced page',
1230
+ rawPaths: ['pages/delete.json'],
1231
+ });
1232
+ await currentSession.gitService.commitFiles(['wiki/global/source-page.md'], 'wu delete source page', 'KTX Test', 'system@ktx.local');
1233
+ }
1234
+ return { stopReason: 'natural' };
1235
+ });
1236
+ const runner = new IngestBundleRunner(deps);
1237
+ await mockStageRawFiles(runner, runtime, [
1238
+ ['pages/ref.json', 'h1'],
1239
+ ['pages/delete.json', 'h2'],
1240
+ ]);
1241
+ await expect(runner.run({
1242
+ jobId: 'job-wiki-ref-conflict',
1243
+ connectionId: 'warehouse',
1244
+ sourceKey: 'metabase',
1245
+ trigger: 'upload',
1246
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1247
+ })).rejects.toThrow(/wiki references target missing page\(s\): account-segments -> source-page/);
1248
+ expect(await runtime.git.revParseHead()).toBe(preRunHead);
1249
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-wiki-ref-conflict/trace.jsonl'), 'utf-8');
1250
+ expect(trace).toContain('final_artifact_gates_failed');
1251
+ expect(trace).toContain('account-segments -> source-page');
1252
+ expect(trace).toContain('ingest_failed');
1253
+ expect(trace).toContain('failure_report_created');
1254
+ expect(trace).not.toContain('squash_finished');
1255
+ const failureReport = deps.reports.create.mock.calls
1256
+ .map((call) => call[0])
1257
+ .find((report) => report.body.status === 'failed');
1258
+ expect(failureReport.body.failure).toMatchObject({
1259
+ phase: 'final_gates',
1260
+ message: expect.stringContaining('account-segments -> source-page'),
1261
+ details: expect.objectContaining({
1262
+ changedWikiPageKeys: expect.arrayContaining(['account-segments']),
1263
+ workUnitPatchTouchedPaths: expect.arrayContaining([
1264
+ 'wiki/global/account-segments.md',
1265
+ 'wiki/global/source-page.md',
1266
+ ]),
1267
+ }),
1268
+ });
1269
+ }
1270
+ finally {
1271
+ await rm(runtime.homeDir, { recursive: true, force: true });
1272
+ }
1273
+ });
1274
+ it('rejects unchanged inbound wiki refs broken by an isolated wiki deletion', async () => {
1275
+ const runtime = await makeRealGitRuntime();
1276
+ try {
1277
+ await mkdir(join(runtime.configDir, 'wiki/global'), { recursive: true });
1278
+ await writeFile(join(runtime.configDir, 'wiki/global/source-page.md'), '---\nsummary: Source page\nusage_mode: auto\n---\n\nSource page\n');
1279
+ await writeFile(join(runtime.configDir, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\nrefs:\n - source-page\n---\n\nSee [[source-page]].\n');
1280
+ await runtime.git.commitFiles(['wiki/global/source-page.md', 'wiki/global/account-segments.md'], 'seed inbound wiki refs', 'KTX Test', 'system@ktx.local');
1281
+ const preRunHead = await runtime.git.revParseHead();
1282
+ const { deps, adapter } = makeDeps(runtime);
1283
+ adapter.chunk.mockResolvedValue({
1284
+ workUnits: [{ unitKey: 'delete-target-page', rawFiles: ['pages/delete.json'], peerFileIndex: [], dependencyPaths: [] }],
1285
+ });
1286
+ let currentSession = null;
1287
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1288
+ currentSession = toolSession;
1289
+ return { toRuntimeTools: vi.fn(() => ({})) };
1290
+ });
1291
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
1292
+ if (params.telemetryTags.unitKey !== 'delete-target-page') {
1293
+ return { stopReason: 'natural' };
1294
+ }
1295
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1296
+ await rm(join(root, 'wiki/global/source-page.md'), { force: true });
1297
+ currentSession.actions.push({
1298
+ target: 'wiki',
1299
+ type: 'removed',
1300
+ key: 'source-page',
1301
+ detail: 'Delete referenced page',
1302
+ rawPaths: ['pages/delete.json'],
1303
+ });
1304
+ await currentSession.gitService.commitFiles(['wiki/global/source-page.md'], 'wu delete target page', 'KTX Test', 'system@ktx.local');
1305
+ return { stopReason: 'natural' };
1306
+ });
1307
+ const runner = new IngestBundleRunner(deps);
1308
+ await mockStageRawFiles(runner, runtime, [['pages/delete.json', 'h1']]);
1309
+ await expect(runner.run({
1310
+ jobId: 'job-existing-wiki-ref-stale',
1311
+ connectionId: 'warehouse',
1312
+ sourceKey: 'metabase',
1313
+ trigger: 'upload',
1314
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1315
+ })).rejects.toThrow(/wiki references target missing page\(s\): account-segments -> source-page/);
1316
+ expect(await runtime.git.revParseHead()).toBe(preRunHead);
1317
+ const events = (await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-existing-wiki-ref-stale/trace.jsonl'), 'utf-8'))
1318
+ .trim()
1319
+ .split('\n')
1320
+ .map((line) => JSON.parse(line));
1321
+ expect(events.map((event) => event.event)).toEqual(expect.arrayContaining([
1322
+ 'final_artifact_gates_started',
1323
+ 'final_artifact_gates_failed',
1324
+ 'ingest_failed',
1325
+ 'failure_report_created',
1326
+ ]));
1327
+ expect(events.map((event) => event.event)).not.toContain('squash_finished');
1328
+ const gateFailure = events.find((event) => event.event === 'final_artifact_gates_failed');
1329
+ expect(gateFailure).toMatchObject({
1330
+ data: {
1331
+ wikiReferenceGateScope: {
1332
+ global: true,
1333
+ reasons: expect.arrayContaining(['wiki_page_removed']),
1334
+ removedWikiPageKeys: expect.arrayContaining(['source-page']),
1335
+ pageKeysValidated: expect.arrayContaining(['account-segments']),
1336
+ },
1337
+ actionOrigins: expect.arrayContaining([
1338
+ expect.objectContaining({
1339
+ source: 'work_unit_action',
1340
+ unitKey: 'delete-target-page',
1341
+ unitRawFiles: ['pages/delete.json'],
1342
+ action: expect.objectContaining({
1343
+ target: 'wiki',
1344
+ type: 'removed',
1345
+ key: 'source-page',
1346
+ rawPaths: ['pages/delete.json'],
1347
+ }),
1348
+ }),
1349
+ ]),
1350
+ },
1351
+ error: { message: expect.stringContaining('account-segments -> source-page') },
1352
+ });
1353
+ const failureReport = deps.reports.create.mock.calls
1354
+ .map((call) => call[0])
1355
+ .find((report) => report.body.status === 'failed');
1356
+ expect(failureReport.body.failure).toMatchObject({
1357
+ phase: 'final_gates',
1358
+ message: expect.stringContaining('account-segments -> source-page'),
1359
+ details: expect.objectContaining({
1360
+ wikiReferenceGateScope: expect.objectContaining({
1361
+ global: true,
1362
+ reasons: expect.arrayContaining(['wiki_page_removed']),
1363
+ removedWikiPageKeys: expect.arrayContaining(['source-page']),
1364
+ pageKeysValidated: expect.arrayContaining(['account-segments']),
1365
+ }),
1366
+ changedWikiPageKeys: expect.arrayContaining(['source-page']),
1367
+ actionOrigins: expect.arrayContaining([
1368
+ expect.objectContaining({
1369
+ source: 'work_unit_action',
1370
+ unitKey: 'delete-target-page',
1371
+ action: expect.objectContaining({
1372
+ target: 'wiki',
1373
+ type: 'removed',
1374
+ key: 'source-page',
1375
+ rawPaths: ['pages/delete.json'],
1376
+ }),
1377
+ }),
1378
+ ]),
1379
+ }),
1380
+ });
1381
+ expect(failureReport.body.workUnits).toEqual(expect.arrayContaining([
1382
+ expect.objectContaining({
1383
+ unitKey: 'delete-target-page',
1384
+ actions: expect.arrayContaining([
1385
+ expect.objectContaining({
1386
+ target: 'wiki',
1387
+ type: 'removed',
1388
+ key: 'source-page',
1389
+ rawPaths: ['pages/delete.json'],
1390
+ }),
1391
+ ]),
1392
+ }),
1393
+ ]));
1394
+ }
1395
+ finally {
1396
+ await rm(runtime.homeDir, { recursive: true, force: true });
1397
+ }
1398
+ });
1399
+ it('rejects WorkUnit patches that touch unauthorized semantic-layer target connections', async () => {
1400
+ const runtime = await makeRealGitRuntime();
1401
+ try {
1402
+ const { deps, adapter } = makeDeps(runtime);
1403
+ adapter.chunk.mockResolvedValue({
1404
+ workUnits: [{ unitKey: 'finance-source', rawFiles: ['cards/finance.json'], peerFileIndex: [], dependencyPaths: [] }],
1405
+ });
1406
+ let currentSession = null;
1407
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1408
+ currentSession = toolSession;
1409
+ return { toRuntimeTools: vi.fn(() => ({})) };
1410
+ });
1411
+ deps.agentRunner.runLoop = vi.fn(async () => {
1412
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1413
+ await mkdir(join(root, 'semantic-layer/finance'), { recursive: true });
1414
+ await writeFile(join(root, 'semantic-layer/finance/orders.yaml'), 'name: orders\ngrain: [id]\ncolumns: [{name: id, type: string}]\njoins: []\nmeasures: []\n');
1415
+ addTouchedSlSource(currentSession.touchedSlSources, 'finance', 'orders');
1416
+ currentSession.actions.push({
1417
+ target: 'sl',
1418
+ type: 'created',
1419
+ key: 'orders',
1420
+ detail: 'Unauthorized target',
1421
+ targetConnectionId: 'finance',
1422
+ rawPaths: ['cards/finance.json'],
1423
+ });
1424
+ await currentSession.gitService.commitFiles(['semantic-layer/finance/orders.yaml'], 'wu unauthorized target', 'KTX Test', 'system@ktx.local');
1425
+ return { stopReason: 'natural' };
1426
+ });
1427
+ const runner = new IngestBundleRunner(deps);
1428
+ await mockStageRawFiles(runner, runtime, [['cards/finance.json', 'h1']]);
1429
+ const preRunHead = await runtime.git.revParseHead();
1430
+ await expect(runner.run({
1431
+ jobId: 'job-unauthorized-wu-target',
1432
+ connectionId: 'warehouse',
1433
+ sourceKey: 'metabase',
1434
+ trigger: 'upload',
1435
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1436
+ })).rejects.toThrow(/isolated diff textual conflict.*semantic-layer target connection not allowed/);
1437
+ expect(await runtime.git.revParseHead()).toBe(preRunHead);
1438
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-unauthorized-wu-target/trace.jsonl'), 'utf-8');
1439
+ expect(trace).toContain('patch_policy_rejected');
1440
+ expect(trace).toContain('semantic-layer/finance/orders.yaml');
1441
+ expect(trace).toContain('allowedTargetConnectionIds');
1442
+ expect(trace).toContain('ingest_failed');
1443
+ expect(trace).toContain('failure_report_created');
1444
+ expect(trace).not.toContain('squash_finished');
1445
+ const failureReport = deps.reports.create.mock.calls
1446
+ .map((call) => call[0])
1447
+ .find((report) => report.body.status === 'failed');
1448
+ expect(failureReport.body.failure).toMatchObject({
1449
+ phase: 'integration',
1450
+ message: expect.stringContaining('semantic-layer target connection not allowed'),
1451
+ });
1452
+ expect(failureReport.body.failure.details).toMatchObject({
1453
+ unitKey: 'finance-source',
1454
+ allowedTargetConnectionIds: ['warehouse'],
1455
+ touchedPaths: ['semantic-layer/finance/orders.yaml'],
1456
+ reason: expect.stringContaining('semantic-layer/finance/orders.yaml (finance)'),
1457
+ });
1458
+ }
1459
+ finally {
1460
+ await rm(runtime.homeDir, { recursive: true, force: true });
1461
+ }
1462
+ });
1463
+ it('rejects reconciliation mutations that touch unauthorized semantic-layer target connections before squash', async () => {
1464
+ const runtime = await makeRealGitRuntime();
1465
+ try {
1466
+ const { deps, adapter } = makeDeps(runtime);
1467
+ adapter.chunk.mockResolvedValue({
1468
+ workUnits: [{ unitKey: 'valid-page', rawFiles: ['pages/source.json'], peerFileIndex: [], dependencyPaths: [] }],
1469
+ });
1470
+ let currentSession = null;
1471
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1472
+ currentSession = toolSession;
1473
+ return { toRuntimeTools: vi.fn(() => ({})) };
1474
+ });
1475
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
1476
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1477
+ if (params.telemetryTags.operationName === 'ingest-bundle-wu') {
1478
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
1479
+ await writeFile(join(root, 'wiki/global/valid-page.md'), '---\nsummary: Valid page\nusage_mode: auto\n---\n\nValid\n');
1480
+ currentSession.actions.push({
1481
+ target: 'wiki',
1482
+ type: 'created',
1483
+ key: 'valid-page',
1484
+ detail: 'Valid page',
1485
+ rawPaths: ['pages/source.json'],
1486
+ });
1487
+ await currentSession.gitService.commitFiles(['wiki/global/valid-page.md'], 'wu valid page', 'KTX Test', 'system@ktx.local');
1488
+ }
1489
+ else {
1490
+ await mkdir(join(root, 'semantic-layer/finance'), { recursive: true });
1491
+ await writeFile(join(root, 'semantic-layer/finance/reconcile_orders.yaml'), 'name: reconcile_orders\ngrain: [id]\ncolumns: [{name: id, type: string}]\njoins: []\nmeasures: []\n');
1492
+ addTouchedSlSource(currentSession.touchedSlSources, 'finance', 'reconcile_orders');
1493
+ currentSession.actions.push({
1494
+ target: 'sl',
1495
+ type: 'created',
1496
+ key: 'reconcile_orders',
1497
+ detail: 'Unauthorized reconcile target',
1498
+ targetConnectionId: 'finance',
1499
+ rawPaths: ['pages/source.json'],
1500
+ });
1501
+ await currentSession.gitService.commitFiles(['semantic-layer/finance/reconcile_orders.yaml'], 'reconcile unauthorized target', 'KTX Test', 'system@ktx.local');
1502
+ }
1503
+ return { stopReason: 'natural' };
1504
+ });
1505
+ const runner = new IngestBundleRunner(deps);
1506
+ await mockStageRawFiles(runner, runtime, [['pages/source.json', 'h1']]);
1507
+ const preRunHead = await runtime.git.revParseHead();
1508
+ await expect(runner.run({
1509
+ jobId: 'job-unauthorized-reconcile-target',
1510
+ connectionId: 'warehouse',
1511
+ sourceKey: 'metabase',
1512
+ trigger: 'upload',
1513
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1514
+ })).rejects.toThrow(/semantic-layer target connection not allowed/);
1515
+ expect(await runtime.git.revParseHead()).toBe(preRunHead);
1516
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-unauthorized-reconcile-target/trace.jsonl'), 'utf-8');
1517
+ expect(trace).toContain('semantic_layer_target_policy_started');
1518
+ expect(trace).toContain('semantic_layer_target_policy_failed');
1519
+ expect(trace).toContain('allowedTargetConnectionIds');
1520
+ expect(trace).toContain('semantic-layer/finance/reconcile_orders.yaml');
1521
+ expect(trace).toContain('ingest_failed');
1522
+ expect(trace).toContain('failure_report_created');
1523
+ expect(trace).not.toContain('squash_finished');
1524
+ const failureReport = deps.reports.create.mock.calls
1525
+ .map((call) => call[0])
1526
+ .find((report) => report.body.status === 'failed');
1527
+ expect(failureReport.body.failure).toMatchObject({
1528
+ phase: 'target_policy',
1529
+ message: expect.stringContaining('semantic-layer target connection not allowed'),
1530
+ });
1531
+ expect(failureReport.body.failure.details).toMatchObject({
1532
+ allowedTargetConnectionIds: ['warehouse'],
1533
+ touchedPaths: expect.arrayContaining(['semantic-layer/finance/reconcile_orders.yaml']),
1534
+ });
1535
+ }
1536
+ finally {
1537
+ await rm(runtime.homeDir, { recursive: true, force: true });
1538
+ }
1539
+ });
1540
+ it('repairs additive same-source textual conflicts before final gates and squash', async () => {
1541
+ const runtime = await makeRealGitRuntime();
1542
+ try {
1543
+ const { deps } = makeDeps(runtime);
1544
+ let currentSession = null;
1545
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1546
+ currentSession = toolSession;
1547
+ return { toRuntimeTools: vi.fn(() => ({})) };
1548
+ });
1549
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
1550
+ if (params.telemetryTags.operationName === 'ingest-isolated-diff-textual-resolver') {
1551
+ const current = await params.toolSet.read_integration_file.execute({
1552
+ path: 'semantic-layer/warehouse/mart_account_segments.yaml',
1553
+ });
1554
+ expect(current.markdown).toContain('total_contract_arr_cents');
1555
+ const patch = await params.toolSet.read_failed_patch.execute({});
1556
+ expect(patch.markdown).toContain('account_count');
1557
+ await params.toolSet.write_integration_file.execute({
1558
+ path: 'semantic-layer/warehouse/mart_account_segments.yaml',
1559
+ content: 'name: mart_account_segments\n' +
1560
+ 'grain: [account_id]\n' +
1561
+ 'columns: [{name: account_id, type: string}]\n' +
1562
+ 'joins: []\n' +
1563
+ 'measures:\n' +
1564
+ ' - name: total_contract_arr_cents\n' +
1565
+ ' expr: sum(contract_arr)\n' +
1566
+ ' - name: account_count\n' +
1567
+ ' expr: count_distinct(account_id)\n',
1568
+ });
1569
+ return { stopReason: 'natural' };
1570
+ }
1571
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1572
+ await mkdir(join(root, 'semantic-layer/warehouse'), { recursive: true });
1573
+ if (params.telemetryTags.unitKey === 'card-wiki') {
1574
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\n' +
1575
+ 'grain: [account_id]\n' +
1576
+ 'columns: [{name: account_id, type: string}]\n' +
1577
+ 'joins: []\n' +
1578
+ 'measures:\n' +
1579
+ ' - name: total_contract_arr_cents\n' +
1580
+ ' expr: sum(contract_arr)\n');
1581
+ }
1582
+ else if (params.telemetryTags.unitKey === 'card-source') {
1583
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\n' +
1584
+ 'grain: [account_id]\n' +
1585
+ 'columns: [{name: account_id, type: string}]\n' +
1586
+ 'joins: []\n' +
1587
+ 'measures:\n' +
1588
+ ' - name: account_count\n' +
1589
+ ' expr: count_distinct(account_id)\n');
1590
+ }
1591
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'mart_account_segments');
1592
+ currentSession.actions.push({
1593
+ target: 'sl',
1594
+ type: 'updated',
1595
+ key: 'mart_account_segments',
1596
+ detail: 'Updated account segments source',
1597
+ targetConnectionId: 'warehouse',
1598
+ });
1599
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml'], `wu ${params.telemetryTags.unitKey}`, 'KTX Test', 'system@ktx.local');
1600
+ return { stopReason: 'natural' };
1601
+ });
1602
+ const runner = new IngestBundleRunner(deps);
1603
+ await mockStageRawFiles(runner, runtime, [
1604
+ ['cards/wiki.json', 'hash-a'],
1605
+ ['cards/source.json', 'hash-b'],
1606
+ ]);
1607
+ const result = await runner.run({
1608
+ jobId: 'job-resolver-e2e',
1609
+ connectionId: 'warehouse',
1610
+ sourceKey: 'metabase',
1611
+ trigger: 'manual_resync',
1612
+ bundleRef: { kind: 'upload', uploadId: 'upload-1' },
1613
+ });
1614
+ expect(result.commitSha).toBeTruthy();
1615
+ const source = await readFile(join(runtime.configDir, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'utf-8');
1616
+ expect(source).toContain('total_contract_arr_cents');
1617
+ expect(source).toContain('account_count');
1618
+ expect(deps.agentRunner.runLoop).toHaveBeenCalledWith(expect.objectContaining({
1619
+ modelRole: 'repair',
1620
+ telemetryTags: expect.objectContaining({
1621
+ operationName: 'ingest-isolated-diff-textual-resolver',
1622
+ unitKey: 'card-source',
1623
+ }),
1624
+ }));
1625
+ const successReport = deps.reports.create.mock.calls.at(-1)?.[0]?.body;
1626
+ expect(successReport.isolatedDiff).toMatchObject({
1627
+ acceptedPatches: 2,
1628
+ textualConflicts: 1,
1629
+ semanticConflicts: 0,
1630
+ resolverAttempts: 1,
1631
+ resolverRepairs: 1,
1632
+ resolverFailures: 0,
1633
+ });
1634
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-resolver-e2e/trace.jsonl'), 'utf-8');
1635
+ expect(trace).toContain('textual_conflict_resolver_repaired');
1636
+ expect(trace).toContain('patch_accepted_after_textual_resolution');
1637
+ }
1638
+ finally {
1639
+ await rm(runtime.homeDir, { recursive: true, force: true });
1640
+ }
1641
+ });
1642
+ it('repairs final wiki body refs before squash when the repair agent edits the scoped page', async () => {
1643
+ const runtime = await makeRealGitRuntime();
1644
+ try {
1645
+ await mkdir(join(runtime.configDir, 'semantic-layer/warehouse'), { recursive: true });
1646
+ await mkdir(join(runtime.configDir, 'wiki/global'), { recursive: true });
1647
+ await writeFile(join(runtime.configDir, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr_cents\n expr: sum(contract_arr)\n');
1648
+ await writeFile(join(runtime.configDir, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\n---\n\nExisting ARR uses `mart_account_segments.total_contract_arr_cents`.\n');
1649
+ await runtime.git.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml', 'wiki/global/account-segments.md'], 'seed stale wiki body ref', 'KTX Test', 'system@ktx.local');
1650
+ const { deps, adapter } = makeDeps(runtime);
1651
+ adapter.chunk.mockResolvedValue({
1652
+ workUnits: [{ unitKey: 'source-only', rawFiles: ['cards/source.json'], peerFileIndex: [], dependencyPaths: [] }],
1653
+ });
1654
+ let currentSession = null;
1655
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1656
+ currentSession = toolSession;
1657
+ return { toRuntimeTools: vi.fn(() => ({})) };
1658
+ });
1659
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
1660
+ if (params.telemetryTags.operationName === 'ingest-isolated-diff-gate-repair') {
1661
+ const gateError = await params.toolSet.read_gate_error.execute({});
1662
+ expect(gateError.markdown).toContain('total_contract_arr_cents');
1663
+ const page = await params.toolSet.read_repair_file.execute({
1664
+ path: 'wiki/global/account-segments.md',
1665
+ });
1666
+ await params.toolSet.write_repair_file.execute({
1667
+ path: 'wiki/global/account-segments.md',
1668
+ content: page.markdown.replace('total_contract_arr_cents', 'total_contract_arr'),
1669
+ });
1670
+ return { stopReason: 'natural' };
1671
+ }
1672
+ if (params.modelRole === 'reconcile') {
1673
+ return { stopReason: 'natural' };
1674
+ }
1675
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1676
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
1677
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'mart_account_segments');
1678
+ currentSession.actions.push({
1679
+ target: 'sl',
1680
+ type: 'updated',
1681
+ key: 'mart_account_segments',
1682
+ detail: 'Rename ARR measure',
1683
+ targetConnectionId: 'warehouse',
1684
+ rawPaths: ['cards/source.json'],
1685
+ });
1686
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml'], 'wu source rename', 'KTX Test', 'system@ktx.local');
1687
+ return { stopReason: 'natural' };
1688
+ });
1689
+ const runner = new IngestBundleRunner(deps);
1690
+ await mockStageRawFiles(runner, runtime, [['cards/source.json', 'h1']]);
1691
+ const result = await runner.run({
1692
+ jobId: 'job-final-gate-repair',
1693
+ connectionId: 'warehouse',
1694
+ sourceKey: 'metabase',
1695
+ trigger: 'upload',
1696
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1697
+ });
1698
+ expect(result.commitSha).toBeTruthy();
1699
+ await expect(readFile(join(runtime.configDir, 'wiki/global/account-segments.md'), 'utf-8')).resolves.toContain('mart_account_segments.total_contract_arr');
1700
+ await expect(readFile(join(runtime.configDir, 'wiki/global/account-segments.md'), 'utf-8')).resolves.not.toContain('total_contract_arr_cents');
1701
+ const reportCreate = vi.mocked(deps.reports.create).mock.calls.at(-1)?.[0];
1702
+ expect(reportCreate.body.isolatedDiff).toMatchObject({
1703
+ gateRepairAttempts: 1,
1704
+ gateRepairs: 1,
1705
+ gateRepairFailures: 0,
1706
+ });
1707
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-final-gate-repair/trace.jsonl'), 'utf-8');
1708
+ expect(trace).toContain('gate_repair_repaired');
1709
+ expect(trace).toContain('final_artifact_gates_after_gate_repair_finished');
1710
+ expect(trace).toContain('final_gate_repair_committed');
1711
+ }
1712
+ finally {
1713
+ await rm(runtime.homeDir, { recursive: true, force: true });
1714
+ }
1715
+ });
1716
+ it('fails before squash when final gate repair makes no edit', async () => {
1717
+ const runtime = await makeRealGitRuntime();
1718
+ try {
1719
+ await mkdir(join(runtime.configDir, 'semantic-layer/warehouse'), { recursive: true });
1720
+ await mkdir(join(runtime.configDir, 'wiki/global'), { recursive: true });
1721
+ await writeFile(join(runtime.configDir, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr_cents\n expr: sum(contract_arr)\n');
1722
+ await writeFile(join(runtime.configDir, 'wiki/global/account-segments.md'), '---\nsummary: Account segments\nusage_mode: auto\n---\n\nExisting ARR uses `mart_account_segments.total_contract_arr_cents`.\n');
1723
+ await runtime.git.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml', 'wiki/global/account-segments.md'], 'seed stale wiki body ref', 'KTX Test', 'system@ktx.local');
1724
+ const preRunHead = await runtime.git.revParseHead();
1725
+ const { deps, adapter } = makeDeps(runtime);
1726
+ adapter.chunk.mockResolvedValue({
1727
+ workUnits: [{ unitKey: 'source-only', rawFiles: ['cards/source.json'], peerFileIndex: [], dependencyPaths: [] }],
1728
+ });
1729
+ let currentSession = null;
1730
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1731
+ currentSession = toolSession;
1732
+ return { toRuntimeTools: vi.fn(() => ({})) };
1733
+ });
1734
+ deps.agentRunner.runLoop = vi.fn(async (params) => {
1735
+ if (params.telemetryTags.operationName === 'ingest-isolated-diff-gate-repair') {
1736
+ return { stopReason: 'natural' };
1737
+ }
1738
+ if (params.modelRole === 'reconcile') {
1739
+ return { stopReason: 'natural' };
1740
+ }
1741
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1742
+ await writeFile(join(root, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
1743
+ addTouchedSlSource(currentSession.touchedSlSources, 'warehouse', 'mart_account_segments');
1744
+ currentSession.actions.push({
1745
+ target: 'sl',
1746
+ type: 'updated',
1747
+ key: 'mart_account_segments',
1748
+ detail: 'Rename ARR measure',
1749
+ targetConnectionId: 'warehouse',
1750
+ rawPaths: ['cards/source.json'],
1751
+ });
1752
+ await currentSession.gitService.commitFiles(['semantic-layer/warehouse/mart_account_segments.yaml'], 'wu source rename', 'KTX Test', 'system@ktx.local');
1753
+ return { stopReason: 'natural' };
1754
+ });
1755
+ const runner = new IngestBundleRunner(deps);
1756
+ await mockStageRawFiles(runner, runtime, [['cards/source.json', 'h1']]);
1757
+ await expect(runner.run({
1758
+ jobId: 'job-final-gate-repair-fails',
1759
+ connectionId: 'warehouse',
1760
+ sourceKey: 'metabase',
1761
+ trigger: 'upload',
1762
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1763
+ })).rejects.toThrow(/gate repair completed without editing an allowed path/);
1764
+ expect(await runtime.git.revParseHead()).toBe(preRunHead);
1765
+ const reportCreate = vi.mocked(deps.reports.create).mock.calls.at(-1)?.[0];
1766
+ expect(reportCreate.body.status).toBe('failed');
1767
+ expect(reportCreate.body.isolatedDiff).toMatchObject({
1768
+ gateRepairAttempts: 1,
1769
+ gateRepairs: 0,
1770
+ gateRepairFailures: 1,
1771
+ });
1772
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-final-gate-repair-fails/trace.jsonl'), 'utf-8');
1773
+ expect(trace).toContain('gate_repair_failed');
1774
+ expect(trace).not.toContain('squash_finished');
1775
+ }
1776
+ finally {
1777
+ await rm(runtime.homeDir, { recursive: true, force: true });
1778
+ }
1779
+ });
1780
+ it('runs finalization before wiki sl-ref repair and final gates', async () => {
1781
+ const runtime = await makeRealGitRuntime();
1782
+ try {
1783
+ const { deps, adapter } = makeDeps(runtime);
1784
+ adapter.chunk.mockResolvedValue({
1785
+ workUnits: [{ unitKey: 'wiki-page', rawFiles: ['cards/source.json'], peerFileIndex: [], dependencyPaths: [] }],
1786
+ });
1787
+ adapter.finalize = vi.fn(async ({ workdir }) => {
1788
+ await mkdir(join(workdir, 'semantic-layer/warehouse'), { recursive: true });
1789
+ await mkdir(join(workdir, 'wiki/global'), { recursive: true });
1790
+ await writeFile(join(workdir, 'semantic-layer/warehouse/mart_account_segments.yaml'), 'name: mart_account_segments\ngrain: [account_id]\ncolumns: [{name: account_id, type: string}]\njoins: []\nmeasures:\n - name: total_contract_arr\n expr: sum(contract_arr)\n');
1791
+ await writeFile(join(workdir, 'wiki/global/finalized-accounts.md'), '---\nsummary: Finalized accounts\nusage_mode: auto\nsl_refs:\n - mart_account_segments\n - missing_source\n---\n\nAccounts use `mart_account_segments.total_contract_arr`.\n');
1792
+ return {
1793
+ warnings: [],
1794
+ errors: [],
1795
+ touchedSources: [{ connectionId: 'warehouse', sourceName: 'mart_account_segments' }],
1796
+ changedWikiPageKeys: ['finalized-accounts'],
1797
+ actions: [
1798
+ {
1799
+ target: 'sl',
1800
+ type: 'created',
1801
+ key: 'mart_account_segments',
1802
+ detail: 'Finalized accounts',
1803
+ targetConnectionId: 'warehouse',
1804
+ rawPaths: ['cards/source.json'],
1805
+ },
1806
+ {
1807
+ target: 'wiki',
1808
+ type: 'created',
1809
+ key: 'finalized-accounts',
1810
+ detail: 'Finalized wiki',
1811
+ rawPaths: ['cards/source.json'],
1812
+ },
1813
+ ],
1814
+ };
1815
+ });
1816
+ deps.agentRunner.runLoop = vi.fn(async () => ({ stopReason: 'natural' }));
1817
+ const runner = new IngestBundleRunner(deps);
1818
+ await mockStageRawFiles(runner, runtime, [['cards/source.json', 'h1']]);
1819
+ await runner.run({
1820
+ jobId: 'job-finalization',
1821
+ connectionId: 'warehouse',
1822
+ sourceKey: 'metabase',
1823
+ trigger: 'upload',
1824
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1825
+ });
1826
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-finalization/trace.jsonl'), 'utf-8');
1827
+ expect(trace.indexOf('finalization_committed')).toBeLessThan(trace.indexOf('wiki_sl_refs_repaired'));
1828
+ expect(trace.indexOf('wiki_sl_refs_repaired')).toBeLessThan(trace.indexOf('final_artifact_gates'));
1829
+ await expect(readFile(join(runtime.configDir, 'wiki/global/finalized-accounts.md'), 'utf-8')).resolves.toContain('sl_refs:\n - mart_account_segments');
1830
+ }
1831
+ finally {
1832
+ await rm(runtime.homeDir, { recursive: true, force: true });
1833
+ }
1834
+ });
1835
+ it('fails when finalization edits a path already changed earlier in the run', async () => {
1836
+ const runtime = await makeRealGitRuntime();
1837
+ try {
1838
+ const { deps, adapter } = makeDeps(runtime);
1839
+ adapter.chunk.mockResolvedValue({
1840
+ workUnits: [{ unitKey: 'wiki-page', rawFiles: ['cards/source.json'], peerFileIndex: [], dependencyPaths: [] }],
1841
+ });
1842
+ let currentSession = null;
1843
+ deps.toolsetFactory.createIngestWuToolset = vi.fn((toolSession) => {
1844
+ currentSession = toolSession;
1845
+ return { toRuntimeTools: vi.fn(() => ({})) };
1846
+ });
1847
+ deps.agentRunner.runLoop = vi.fn(async () => {
1848
+ const root = rootOfConfig(currentSession.configService, runtime.configDir);
1849
+ await mkdir(join(root, 'wiki/global'), { recursive: true });
1850
+ await writeFile(join(root, 'wiki/global/orders.md'), '---\nsummary: Orders\nusage_mode: auto\n---\n\nWU body\n');
1851
+ currentSession.actions.push({
1852
+ target: 'wiki',
1853
+ type: 'created',
1854
+ key: 'orders',
1855
+ detail: 'WU orders',
1856
+ rawPaths: ['cards/source.json'],
1857
+ });
1858
+ await currentSession.gitService.commitFiles(['wiki/global/orders.md'], 'wu orders', 'KTX Test', 'system@ktx.local');
1859
+ return { stopReason: 'natural' };
1860
+ });
1861
+ adapter.finalize = vi.fn(async ({ workdir }) => {
1862
+ await writeFile(join(workdir, 'wiki/global/orders.md'), '---\nsummary: Orders\nusage_mode: auto\n---\n\nFinalized body\n');
1863
+ return {
1864
+ warnings: [],
1865
+ errors: [],
1866
+ touchedSources: [],
1867
+ changedWikiPageKeys: ['orders'],
1868
+ actions: [{ target: 'wiki', type: 'updated', key: 'orders', detail: 'Conflicting finalization' }],
1869
+ };
1870
+ });
1871
+ const runner = new IngestBundleRunner(deps);
1872
+ await mockStageRawFiles(runner, runtime, [['cards/source.json', 'h1']]);
1873
+ await expect(runner.run({
1874
+ jobId: 'job-finalization-overlap',
1875
+ connectionId: 'warehouse',
1876
+ sourceKey: 'metabase',
1877
+ trigger: 'upload',
1878
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1879
+ })).rejects.toThrow(/finalization modified path\(s\) already changed earlier in this run: wiki\/global\/orders\.md/);
1880
+ }
1881
+ finally {
1882
+ await rm(runtime.homeDir, { recursive: true, force: true });
1883
+ }
1884
+ });
1885
+ it('rejects finalization writes to unauthorized semantic-layer targets', async () => {
1886
+ const runtime = await makeRealGitRuntime();
1887
+ try {
1888
+ const { deps, adapter } = makeDeps(runtime);
1889
+ adapter.chunk.mockResolvedValue({ workUnits: [] });
1890
+ adapter.finalize = vi.fn(async ({ workdir }) => {
1891
+ await mkdir(join(workdir, 'semantic-layer/other-warehouse'), { recursive: true });
1892
+ await writeFile(join(workdir, 'semantic-layer/other-warehouse/orders.yaml'), 'name: orders\ngrain: [order_id]\ncolumns: [{name: order_id, type: string}]\njoins: []\nmeasures: []\n');
1893
+ return {
1894
+ warnings: [],
1895
+ errors: [],
1896
+ touchedSources: [{ connectionId: 'other-warehouse', sourceName: 'orders' }],
1897
+ changedWikiPageKeys: [],
1898
+ actions: [
1899
+ {
1900
+ target: 'sl',
1901
+ type: 'created',
1902
+ key: 'orders',
1903
+ targetConnectionId: 'other-warehouse',
1904
+ detail: 'Forbidden target',
1905
+ rawPaths: ['cards/source.json'],
1906
+ },
1907
+ ],
1908
+ };
1909
+ });
1910
+ const runner = new IngestBundleRunner(deps);
1911
+ await mockStageRawFiles(runner, runtime, [['cards/source.json', 'h1']]);
1912
+ await expect(runner.run({
1913
+ jobId: 'job-finalization-target-policy',
1914
+ connectionId: 'warehouse',
1915
+ sourceKey: 'metabase',
1916
+ trigger: 'upload',
1917
+ bundleRef: { kind: 'upload', uploadId: 'upload' },
1918
+ })).rejects.toThrow(/semantic-layer target connection not allowed/);
1919
+ const trace = await readFile(join(runtime.configDir, '.ktx/ingest-traces/job-finalization-target-policy/trace.jsonl'), 'utf-8');
1920
+ expect(trace).toContain('finalization_committed');
1921
+ expect(trace).toContain('semantic_layer_target_policy');
1922
+ expect(trace).toContain('ingest_failed');
1923
+ }
1924
+ finally {
1925
+ await rm(runtime.homeDir, { recursive: true, force: true });
1926
+ }
1927
+ });
1928
+ });