Commit graph

328 commits

Author SHA1 Message Date
semantic-release-bot
f9d7f689ad chore(release): 0.1.0-rc.6 [skip ci]
## [0.1.0-rc.6](https://github.com/kaelio/ktx/compare/v0.1.0-rc.5...v0.1.0-rc.6) (2026-05-18)

### Features

* **cli:** add read-only sql command ([#126](https://github.com/kaelio/ktx/issues/126)) ([33a142f](33a142f769))
* **cli:** improve search ranking output ([#123](https://github.com/kaelio/ktx/issues/123)) ([74be832](74be832aea))
* **ingest:** default local ingest to isolated diffs ([#128](https://github.com/kaelio/ktx/issues/128)) ([e64da5a](e64da5a85d))
* **ingest:** export finalization adapter contract types ([ac861ca](ac861caddb))

### Bug Fixes

* accept ingest wiki forward refs ([#125](https://github.com/kaelio/ktx/issues/125)) ([f49672b](f49672ba5b))
* **cli:** build runtime assets during dev setup ([#121](https://github.com/kaelio/ktx/issues/121)) ([de72a10](de72a10ffb))
* improve ingest runtime readiness ([#124](https://github.com/kaelio/ktx/issues/124)) ([c89af77](c89af7733a))
* improve setup wizard behavior ([#127](https://github.com/kaelio/ktx/issues/127)) ([d1c84e5](d1c84e5564))
* **release:** repair next npm release workflow ([#122](https://github.com/kaelio/ktx/issues/122)) ([d3d58a2](d3d58a279b))

### Documentation

* **plans:** add adapter-owned finalization v1 closure plan ([c513d61](c513d61dca))

### Tests

* **ingest:** exercise historic sql finalization locally ([74f1f0e](74f1f0e761))
2026-05-18 21:33:54 +00:00
github-actions[bot]
69535f86c9 Merge commit 'c513d61dca' into next 2026-05-18 21:32:16 +00:00
Andrey Avtomonov
c513d61dca docs(plans): add adapter-owned finalization v1 closure plan 2026-05-18 16:04:18 +02:00
Andrey Avtomonov
74f1f0e761 test(ingest): exercise historic sql finalization locally 2026-05-18 16:02:06 +02:00
Andrey Avtomonov
ac861caddb feat(ingest): export finalization adapter contract types 2026-05-18 16:01:47 +02:00
Andrey Avtomonov
013998387e Implement adapter-owned ingest finalization v1
Moves finalization from runner-owned post-processors into typed
SourceAdapter.finalize() contracts. Adds finalization report schema,
scope derivation, override replay context, and migrates historic-SQL
projection. Removes IngestBundlePostProcessorPort wiring and
HistoricSqlProjectionPostProcessor.
2026-05-18 15:55:07 +02:00
Andrey Avtomonov
e8d461fcb8 Refine adapter-owned ingest finalization design after adversarial review iteration 3 2026-05-18 15:30:38 +02:00
Andrey Avtomonov
a4a74c3822 Refine adapter-owned ingest finalization design after adversarial review iteration 2 2026-05-18 15:21:00 +02:00
Andrey Avtomonov
fd8d6a1134 Refine adapter-owned ingest finalization design after adversarial review iteration 1 2026-05-18 15:11:20 +02:00
Andrey Avtomonov
e64da5a85d
feat(ingest): default local ingest to isolated diffs (#128)
* docs: add isolated-diff ingestion design

* Refine isolated-diff ingestion design after adversarial review iteration 1

* Refine isolated-diff ingestion design after adversarial review iteration 2

* Refine isolated-diff ingestion design after adversarial review iteration 3

* feat: persist ingest trace events

* feat: add isolated ingest patch helpers

* feat: validate wiki body semantic references

* feat: add final ingest artifact gates

* feat: execute ingest work units in child worktrees

* feat: integrate isolated work unit patches

* feat: route selected ingest sources through isolated diffs

* test: cover isolated diff ingestion regressions

* feat: add isolated diff ingestion v1 core

* docs: document ingest trace inspection

* docs: add isolated diff ingestion v1 core plan

* fix(ingest): tighten final artifact gates

* fix(ingest): gate isolated final integration tree

* fix(ingest): persist postmortem failure traces

* fix(ingest): trace policy conflicts and cleanup child worktrees

* test(ingest): verify isolated diff postmortem coverage

* docs: add isolated diff ingestion gates and trace closure plan

* fix(ingest): gate provenance before isolated diff squash

* docs: add isolated diff ingestion provenance gate closure plan

* fix(ingest): gate final wiki references

* fix(ingest): enforce SL target connection scope

* fix(ingest): trace isolated SL target policy gates

* test(ingest): cover isolated diff reference and target gates

* chore(ingest): verify isolated diff gate closure

* docs: add isolated diff ingestion reference and target gate closure plan

* fix(ingest): gate global wiki references

* docs: add isolated diff ingestion global wiki reference gate closure plan

* fix(ingest): validate scan sources and wiki refs

* test(ingest): cover isolated diff textual conflict resolver

* test(ingest): cover isolated diff resolver integration

* feat(ingest): repair isolated diff textual conflicts

* feat(ingest): report isolated diff resolver outcomes

* test(ingest): verify isolated diff textual conflict repair

* test(ingest): align textual conflict failure coverage

* docs: add isolated diff textual conflict resolver plan

* test(ingest): cover isolated diff gate repair

* feat(ingest): add isolated diff gate repair agent

* feat(ingest): repair isolated diff semantic gate failures

* feat(ingest): wire isolated diff gate repair

* test(ingest): verify isolated diff final gate repair

* chore(ingest): verify isolated diff gate repair

* docs: add isolated diff gate repair plan

* Improve ingest progress updates

* feat(ingest): route direct-write connectors through isolated diffs

* test(ingest): cover non-metabase isolated diff routing

* feat(ingest): project metricflow semantic models before work units

* test(ingest): verify metricflow isolated projection path

* chore(ingest): verify isolated diff connector migration

* docs: add isolated diff connector migration plan

* feat(ingest): make isolated diff routing the private default

* feat(ingest): promote isolated diff to default runner path

* feat(ingest): default local ingest to isolated diffs

* chore(ingest): remove isolated diff allowlist references

* fix(ingest): preserve transient evidence for isolated work units

* docs: add isolated diff default promotion plan

* refactor(ingest): remove shared worktree WorkUnit path

* docs(ingest): align WorkUnit prompts with isolated diffs

* test(ingest): drop unused runner import

* docs: add isolated diff shared worktree removal plan

* docs: add isolated diff gate repair classification plan

* fix: restrict claude-code mcp servers

* docs: align ingest trace guidance with public CLI

---------

Co-authored-by: Andrey Avtomonov <7889985+andreybavt@users.noreply.github.com>
2026-05-18 13:38:06 +02:00
Andrey Avtomonov
d1c84e5564
fix: improve setup wizard behavior (#127)
* fix: improve setup wizard behavior

* fix: derive runtime versions from release metadata

* test: validate metabase source mapping requirements

* Fix boundary check release identifiers
2026-05-17 19:15:09 +02:00
Andrey Avtomonov
33a142f769
feat(cli): add read-only sql command (#126)
* feat(cli): add read-only sql command

* fix(cli): rename sql connection flag
2026-05-17 10:29:07 +02:00
Andrey Avtomonov
c89af7733a
fix: improve ingest runtime readiness (#124)
* fix: improve ingest runtime readiness

* fix(cli): mock runtime in slow setup tests

* test(cli): isolate setup runtime status
2026-05-17 10:27:29 +02:00
Andrey Avtomonov
f49672ba5b
fix: accept ingest wiki forward refs (#125) 2026-05-17 10:10:14 +02:00
Andrey Avtomonov
74be832aea
feat(cli): improve search ranking output (#123) 2026-05-17 02:32:41 +02:00
Andrey Avtomonov
d3d58a279b
fix(release): repair next npm release workflow (#122)
* fix(ci): run rc releases from next branch

* fix(context): allow release git askpass env

* fix(release): make npm publish noninteractive

* fix(release): use npm trusted publishing

* fix(release): tolerate npm propagation in smoke

* docs(release): document trusted publishing auth
2026-05-17 01:41:07 +02:00
semantic-release-bot
48afe89bd4 chore(release): 0.1.0-rc.5 [skip ci]
## [0.1.0-rc.5](https://github.com/kaelio/ktx/compare/v0.1.0-rc.4...v0.1.0-rc.5) (2026-05-16)

### Bug Fixes

* **release:** tolerate npm propagation in smoke ([8d1837f](8d1837f26e))
2026-05-16 23:15:33 +00:00
github-actions[bot]
72ea21636e Merge commit '8d1837f26e' into next 2026-05-16 23:13:49 +00:00
Andrey Avtomonov
8d1837f26e fix(release): tolerate npm propagation in smoke 2026-05-17 01:08:58 +02:00
semantic-release-bot
8c092429ba chore(release): 0.1.0-rc.4 [skip ci]
## [0.1.0-rc.4](https://github.com/kaelio/ktx/compare/v0.1.0-rc.3...v0.1.0-rc.4) (2026-05-16)

### Bug Fixes

* **release:** use npm trusted publishing ([ceb578e](ceb578e0f6))
2026-05-16 23:06:16 +00:00
Andrey Avtomonov
de72a10ffb
fix(cli): build runtime assets during dev setup (#121) 2026-05-17 01:04:44 +02:00
github-actions[bot]
b9e46cc1c6 Merge commit 'ceb578e0f6' into next 2026-05-16 23:04:29 +00:00
Andrey Avtomonov
ceb578e0f6 fix(release): use npm trusted publishing 2026-05-17 01:03:39 +02:00
semantic-release-bot
7089754306 chore(release): 0.1.0-rc.3 [skip ci]
## [0.1.0-rc.3](https://github.com/kaelio/ktx/compare/v0.1.0-rc.2...v0.1.0-rc.3) (2026-05-16)

### Bug Fixes

* **release:** make npm publish noninteractive ([45374fa](45374fa3ab))
2026-05-16 22:46:22 +00:00
github-actions[bot]
a50242384a Merge commit '45374fa3ab' into next 2026-05-16 22:44:37 +00:00
Andrey Avtomonov
45374fa3ab fix(release): make npm publish noninteractive 2026-05-17 00:43:37 +02:00
semantic-release-bot
be29470619 chore(release): 0.1.0-rc.2 [skip ci]
## [0.1.0-rc.2](https://github.com/kaelio/ktx/compare/v0.1.0-rc.1...v0.1.0-rc.2) (2026-05-16)

### Bug Fixes

* **ci:** run rc releases from next branch ([3dca33e](3dca33ec11))
* **context:** allow release git askpass env ([78ca891](78ca891c0c))

### Documentation

* clarify getting started introduction ([#120](https://github.com/kaelio/ktx/issues/120)) ([c7e6b50](c7e6b5001d))
* merge community contributing pages ([#119](https://github.com/kaelio/ktx/issues/119)) ([cf3674c](cf3674cd9f))
* move LLM configuration guide last ([#117](https://github.com/kaelio/ktx/issues/117)) ([6862883](68628832a9))
2026-05-16 22:30:32 +00:00
Andrey Avtomonov
78ca891c0c fix(context): allow release git askpass env 2026-05-17 00:27:59 +02:00
Andrey Avtomonov
3dca33ec11 fix(ci): run rc releases from next branch 2026-05-17 00:21:06 +02:00
Luca Martial
c7e6b5001d
docs: clarify getting started introduction (#120) 2026-05-16 13:25:37 -04:00
Luca Martial
b318671d31
Shorten concept docs (#118)
* docs: shorten concept pages

* docs: shorten semantic internals page

* docs: restore semantic internals diagrams

* docs: align semantic internals intro

* docs: rename semantic internals page

* docs: polish safe sql comparison
2026-05-16 12:36:07 -04:00
Luca Martial
cf3674cd9f
docs: merge community contributing pages (#119) 2026-05-16 12:34:35 -04:00
Luca Martial
68628832a9
docs: move LLM configuration guide last (#117) 2026-05-16 12:00:31 -04:00
Andrey Avtomonov
b565e44a22
feat: add claude-code llm backend with runtime port (#115)
* docs: revise claude-code ingest backend spec

* docs: keep claude-code spec focused on ingest

* docs: expand claude-code spec to full llm parity

* Refine claude-code backend spec after adversarial review iteration 1

* Refine claude-code backend spec after adversarial review iteration 2

* Refine claude-code backend spec after adversarial review iteration 3

* feat: recognize claude-code llm backend

* feat: add ktx llm runtime port

* feat: add claude-code llm runtime

* feat: route non-agent llm calls through runtime

* feat: run ingest agents through llm runtime

* feat: support claude-code setup and status

* test: verify claude-code backend runtime

* docs: add claude-code backend v1 runtime plan

* fix: close claude-code runtime isolation checks

* fix: warn on claude-code prompt caching during setup

* chore: verify claude-code v1 closure

* docs: add claude-code backend v1 isolation closure plan

* fix: update claude-code ingest setup guidance

* docs: add claude-code backend v1 ingest guidance closure plan

* docs: align claude-code isolation spec with sdk metadata

* test: cover claude-code host discovery metadata

* fix: tolerate claude-code host discovery metadata

* docs: clarify claude-code host discovery metadata

* docs: add claude-code auth-probe isolation fix plan

* chore: prepare kaelio ktx rc1 release

* chore: add semantic release workflow

* fix: unblock ci checks

* chore(release): 0.1.0-rc.1

* feat: add Claude Code model selection to setup

* fix: keep git maintenance attached in local repos
2026-05-16 12:06:34 +02:00
Andrey Avtomonov
e6d578c03f
feat(setup): add Claude Desktop target and MCP-first agent setup (#114)
* feat(setup): add Claude Desktop target and MCP-first agent setup

Adds `ktx mcp stdio` and a `claude-desktop` setup target that generates a
local plugin ZIP wiring the analytics skill and a stdio MCP config. Replaces
the CLI-only agent install mode with MCP+analytics (default) and an optional
admin CLI skill, renames the research skill to analytics, and lets interactive
setup pick project vs global scope when every target supports it. Extracts a
shared MCP server factory used by both HTTP and stdio entrypoints.

* Add MCP agent client setup support

* Polish setup output formatting

* Add MCP tool polish design spec

Design for slimming the MCP-registered surface from 25 to 11 tools,
introducing memory_ingest, applying the per-tool polish kit (annotations,
outputSchema, .describe(), in-band error wrapping, union-drift fixes,
type-narrowed jsonToolResult), emitting progress notifications on
sql_execution + sl_query, and refining the ktx-analytics SKILL.md to
match.

* Refine MCP tool polish design spec after adversarial review iteration 1

* Refine MCP tool polish design spec after adversarial review iteration 2

* Refine MCP tool polish design spec after adversarial review iteration 3

* refactor(context): rename memory capture service to ingest

* feat(mcp): slim research tool surface

* refactor(mcp): remove admin ports from server factory

* refactor(cli): rename text ingest memory port

* docs: update analytics skill for memory ingest

* chore: verify mcp surface rename

* Add MCP tool polish v1 surface change plan

* feat(context): polish mcp tool metadata

* fix(context): enforce resolved semantic layer compute sources

* feat(context): emit mcp query progress stages

* fix(context): keep mcp progress event internal

* Add MCP tool polish v1 metadata & progress plan

* Fix CI snapshot and docs checks
2026-05-16 11:39:55 +02:00
Andrey Avtomonov
a72fca2b32
fix(cli): auto-install runtime during setup (#116)
* fix(cli): auto-install runtime during setup

* test: align docs smoke with readme
2026-05-16 11:39:43 +02:00
Luca Martial
42b688e934
Align docs with current KTX behavior (#106)
* docs: align docs with current KTX behavior

* fix: generate valid agent sl query command

* docs: clarify KTX product mechanics

* fix: use <ol> for runtime pipeline steps in product mechanics

The PipelineStep component renders <li> elements, but the RuntimeDiagram
wrapper was a plain <div> instead of a list element. This produced invalid
HTML and accessibility warnings. IngestionDiagram already used <ol>.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add docs favicon

* docs: add semantic layer internals concept

* docs: refine documentation source label

* docs: clarify company documentation examples

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 15:31:51 -04:00
Luca Martial
465724a991
Improve README scanability and CLI docs (#112)
* docs: simplify readme

* docs: add mcp cli reference

* test: use docs base path

* docs: enlarge readme tagline
2026-05-15 13:25:44 -04:00
Andrey Avtomonov
f9532f549b
perf(cli): cache pnpm run ktx builds against a stamp file (#113)
The staleness check compared source mtimes against packages/cli/dist/bin.js,
but tsc only rewrites outputs whose source actually changed. Editing any
non-bin source (e.g. setup.ts) left bin.js untouched, so its mtime stayed
older than the sources forever and every `pnpm run ktx` invocation
rebuilt the whole workspace. Write a dedicated .ktx-build-stamp after a
successful build and check sources against that instead.
2026-05-15 15:49:39 +02:00
Luca Martial
50ffebd98b
refactor(cli): unify output formatting across commands (#111)
* refactor(cli): unify output formatting across search and status commands

Replace clack-style box borders (◇/│/└) and bullets (●/◆) in printList
pretty mode with a clean status-style layout: bold headers, indented
aligned rows, no decorative framing. Migrate status-project.ts from
hand-rolled ANSI escape codes to shared symbols.ts color helpers.
Remove dead clack symbols from SYMBOLS, add yellow() for warnings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): update stale badge role docstring after dim removal

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 08:54:36 -04:00
Andrey Avtomonov
beeeda4437
feat(docs-site): add "by Kaelio" attribution and enlarge nav logo (#110)
Stack a small "by Kaelio" line under the "KTX" wordmark in the docs site
nav logo, scale the mascot + wordmark ~1.4x, and fix the mascot asset
paths to include the /ktx basePath so they load in production. Also
ignore .playwright-cli/ session artifacts produced by local UI checks.
2026-05-15 14:01:24 +02:00
Luca Martial
703cbd92fc
refactor(cli): remove stale setup context detach state (#109) 2026-05-15 07:09:58 -04:00
Andrey Avtomonov
2de4dd2c1b
perf(setup): speed up conductor setup and make it rerun-safe (#107)
Drop the duplicate `pnpm run build` (artifacts:build already builds every
package). Run package builds in parallel topology via one recursive pnpm
invocation. Enable incremental tsc and keep the cli's tsbuildinfo outside
its dist (moved the dist wipe into a separate `clean` script). Run the
final `ktx status` doctor from a temp dir so it stops walking up into a
parent ktx.yaml and failing the script.

Conductor setup drops from ~26s to ~9.8s cold and ~4.4s warm.
2026-05-15 12:06:37 +02:00
Andrey Avtomonov
b759a4a286
feat(mcp):added MCP server (#97)
* docs(specs): design research-agent MCP tools and ktx mcp daemon

Adds the 2026-05-14 design spec for exposing four new MCP tools
(discover_data, entity_details, dictionary_search, sql_execution),
shipping a ktx-research skill, and introducing an HTTP-only ktx mcp
daemon so external agents can use KTX as a research-capable context
layer.

* Refine research-agent MCP tools spec after adversarial review iteration 1

* Refine research-agent MCP tools spec after adversarial review iteration 2

* Refine research-agent MCP tools spec after adversarial review iteration 3

* Refine spec: drop connectionName compat carve-out and ground summary/snippet provenance per kind

* feat(daemon): validate read-only SQL with sqlglot

* feat(context): expose read-only SQL validation port

* feat(context): register MCP sql execution tool

* feat(context): execute MCP SQL through validated connector path

* test(context): update SQL analysis port fixtures

* docs: add research-agent MCP sql execution foundation plan

* feat(context): add scan-backed entity details service

* feat(context): register MCP entity details tool

* feat(context): expose local MCP entity details

* test(context): align entity details scan fixtures

* docs: add research-agent MCP entity_details plan

* feat(context): add dictionary search service

* feat(context): register MCP dictionary search tool

* feat(context): expose local MCP dictionary search

* docs: add research-agent MCP dictionary_search plan

* feat: add MCP discover data service

* feat: expose discover data MCP tool

* feat: wire local discover data MCP port

* docs: add research-agent MCP discover_data plan

* feat(cli): add mcp http security helpers

* feat(cli): host mcp over streamable http

* feat(cli): manage mcp daemon lifecycle

* feat(cli): add ktx mcp commands

* fix(cli): stabilize mcp daemon verification

* docs: add research-agent MCP http daemon plan

* feat(cli): install KTX research skill

* feat(cli): configure MCP clients in setup agents

* feat(cli): support Claude local MCP setup scope

* docs: add research-agent MCP setup-agents plan

* refactor(context): use connectionId in warehouse verification tools

* docs(context): update ingest verification prompts for connectionId

* docs: add research-agent MCP ingest contract convergence plan

* chore: build runtime artifacts in conductor setup

---------

Co-authored-by: Andrey Avtomonov <7889985+andreybavt@users.noreply.github.com>
2026-05-15 02:35:09 +02:00
Andrey Avtomonov
c7b64379bf docs-site: serve under /ktx and redirect ktx.sh to docs.kaelio.com
- Add Next.js basePath '/ktx' so the docs site mounts under /ktx,
  enabling it to be reverse-proxied by docs.kaelio.com.
- Add host-based redirects so docs.ktx.sh and ktx.sh permanently
  redirect to https://docs.kaelio.com/ktx, making docs.kaelio.com
  the single canonical home for KTX docs.
- Update markdown-preference middleware to be basePath-aware so the
  llms.mdx rewrite still fires on /ktx/docs/* requests.
2026-05-15 02:30:20 +02:00
Andrey Avtomonov
cb8902f1e5
fix(context): merge overlay columns onto manifest columns by name (#94)
* fix(context): merge overlay columns onto manifest columns by name

composeOverlay was appending overlay columns to the manifest column list,
producing duplicate entries when dbt/metabase overlays declared a column
just to attach descriptions. The duplicates carried no `type`, so the
pydantic SourceDefinition rejected them at semantic-query time and broke
`ktx sl query` for every overlay-backed measure. Now overlay columns
match base columns by name (case-insensitive): same-name entries merge
onto the manifest (overlay fields win, type/role fall back to the base,
descriptions merge per source key) and only new names append.

* refactor(sl): split overlay columns from column_overrides and enforce TS/Python wire contract

Overlay sources now have two distinct collections: `columns:` for computed
columns (requiring `expr` + `type`) and `column_overrides:` for metadata
patches to inherited manifest columns. Composing or loading an overlay that
mixes the two — or references an unknown column — fails with a typed error.

Introduce `ResolvedSemanticLayerSource` / `resolvedSourceSchema` /
`toResolvedWire` as the strict shape sent to the Python engine, and add a
schema contract test that diffs Zod against the Pydantic JSON schema dumped
by `python -m semantic_layer dump-schema`. `SourceDefinition` is now
`extra="forbid"` on the Python side.

`loadAllSources` surfaces per-file load errors instead of swallowing them,
so validation/query paths can report manifest shard parse failures.

* fix(context): make scan description generation resilient and quiet

A transient sampleTable failure during ingest used to take out every
table in a connection: generateTableDescription returned a hardcoded
'Table not found' string into descriptions.ai, and KtxDescriptionGenerator
was constructed without a logger, so the failure left no trail anywhere.

- sampleTable / sampleColumn calls retry 3x with 200/400/800ms backoff,
  honouring KtxScanContext.signal via a new KtxAbortedError.
- On retry exhaustion or missing capability, table generation falls back
  to a metadata-only prompt built from column name / native type / comment
  / rawDescriptions. The column path follows the same rule -- call the
  LLM when any of samples or rawDescriptions are available; skip only
  when both are absent.
- Logger is now threaded from KtxScanContext into the generator. Failures
  emit structured KtxScanWarning entries (new description_fallback_used
  code, plus existing sampling_failed / enrichment_failed /
  connector_capability_missing). ktx scan groups warnings by code so a
  batch of identical failures collapses to one summary line plus sample.
- Returns null on failure instead of the 'Table not found' sentinel; the
  manifest writer's existing guard already skips empty descriptions, so
  schema YAML no longer carries misleading text. SCAN_MANAGED_DESCRIPTION_KEYS
  already strips stale 'ai' on merge, so existing YAML clears on next run.

Also suppress AI SDK v6 'system in messages' warning: pull system messages
out of KtxMessageBuilder.wrapSimple's output via a new splitKtxSystemMessages
helper and pass them top-level to generateText (preserves cacheControl
providerOptions on the SystemModelMessage). Agent-runner's local
splitSystemPromptMessages dedupes onto the shared helper.

* test(docs): align examples-docs assertions with revamped docs

PR #103 (setup/guide doc revamp) reworded several CLI examples and
connection labels; the assertions in scripts/examples-docs.test.mjs
still referenced the pre-revamp wording and were failing in CI on main.
Update the regexes to match the post-revamp content:

- drop the `--json` flag from the sl-query example expectation
- move the `Driver:` / `Status: ok` probe to the connection reference,
  which is where that output now lives (driver id is lowercase
  `postgres`, not the display name `PostgreSQL`)
- drop the obsolete `Install \`uv\`...` troubleshooting line
- accept `<connectionId>` everywhere; the docs no longer use the
  hyphenated `<connection-id>` form
- match the `warehouse` connection id used in the quickstart instead of
  the `postgres-warehouse` id only used in the README and setup ref

* fix(sl): skip TS/Python schema contract test when uv is unavailable

The TypeScript checks CI job does not install uv or Python, so the
module-level `execFileSync('uv', ...)` in schemas.contract.test.ts threw
ENOENT and failed the suite. Wrap the schema dump in a try/catch and
guard the describe block with `describe.skipIf` so the test skips in
environments without uv. Local dev and any CI job that has uv on PATH
still runs the cross-language contract assertion.
2026-05-15 02:11:04 +02:00
Luca Martial
6bc8d200ea
Remove deleted CLI command remnants (#105)
* fix(cli): reject unknown commands generically

* fix(cli): refresh ready command hints

* refactor(cli): drop removed wiki command internals
2026-05-14 19:04:22 -04:00
Luca Martial
db23fea609
Revamp setup and guide docs (#103)
* docs: revamp quickstart setup flow

* docs: refresh context build guide

* docs: rewrite context authoring guide

* docs: update agent serving guide
2026-05-14 18:09:26 -04:00
Luca Martial
17653e24f5
docs: revamp resource and integration sections (#104) 2026-05-14 18:09:13 -04:00
Andrey Avtomonov
f8db99811a
feat(context): add driver-discriminated connection schemas (#96)
* refactor(context): export and describe mapping shape schemas

* feat(context): add driver-schemas module with warehouse drivers

* feat(context): add metabase, looker, lookml driver schemas with mappings

* feat(context): add notion, dbt, metricflow driver schemas

* refactor(context): make connectionSchema a driver-discriminated union

* chore(context): re-export KtxConnectionConfig from project package

* docs(context): add connection driver schema plan

* chore(secrets): allowlist example credentials in driver-schemas fixtures

* test(cli): align metabase fixtures with required api_url field

The driver-discriminated union added in this branch now requires api_url
for metabase connections and a known driver for warehouses. Update slow
CLI test fixtures and assertions so they exercise the new schema:
- ingest.test-utils.ts: add api_url to the prod-metabase fixture.
- setup.test.ts: switch metabase fixture from 'url' to 'api_url'.
- local-scan-connectors.test.ts: invalid-driver/missing-driver tests now
  expect the schema error from loadKtxProject (parse-time rejection).
2026-05-15 00:08:11 +02:00