Commit graph

301 commits

Author SHA1 Message Date
Andrey Avtomonov
c35aa760e6 feat(cli): support Claude local MCP setup scope 2026-05-14 19:09:48 +02:00
Andrey Avtomonov
6cb03d6924 feat(cli): configure MCP clients in setup agents 2026-05-14 19:07:22 +02:00
Andrey Avtomonov
0955b36887 feat(cli): install KTX research skill 2026-05-14 19:05:46 +02:00
Andrey Avtomonov
d79c51abaa docs: add research-agent MCP http daemon plan 2026-05-14 18:55:22 +02:00
Andrey Avtomonov
88f91f27c2 fix(cli): stabilize mcp daemon verification 2026-05-14 18:54:18 +02:00
Andrey Avtomonov
3bba9eec79 feat(cli): add ktx mcp commands 2026-05-14 18:52:00 +02:00
Andrey Avtomonov
db09df4d72 feat(cli): manage mcp daemon lifecycle 2026-05-14 18:50:54 +02:00
Andrey Avtomonov
6bff3c3492 feat(cli): host mcp over streamable http 2026-05-14 18:50:08 +02:00
Andrey Avtomonov
7ffa99983f feat(cli): add mcp http security helpers 2026-05-14 18:47:50 +02:00
Andrey Avtomonov
e974f3e59f docs: add research-agent MCP discover_data plan 2026-05-14 18:38:18 +02:00
Andrey Avtomonov
fc903f32b7 feat: wire local discover data MCP port 2026-05-14 18:36:18 +02:00
Andrey Avtomonov
e74976d321 feat: expose discover data MCP tool 2026-05-14 18:35:30 +02:00
Andrey Avtomonov
6a61f209e2 feat: add MCP discover data service 2026-05-14 18:34:44 +02:00
Andrey Avtomonov
f1c073b614 docs: add research-agent MCP dictionary_search plan 2026-05-14 18:24:48 +02:00
Andrey Avtomonov
b8418c7a79 feat(context): expose local MCP dictionary search 2026-05-14 18:22:55 +02:00
Andrey Avtomonov
edb62deed2 feat(context): register MCP dictionary search tool 2026-05-14 18:22:25 +02:00
Andrey Avtomonov
d0b8996456 feat(context): add dictionary search service 2026-05-14 18:21:52 +02:00
Andrey Avtomonov
ff3a8c5777 docs: add research-agent MCP entity_details plan 2026-05-14 18:14:17 +02:00
Andrey Avtomonov
a27400b3dd test(context): align entity details scan fixtures 2026-05-14 18:13:23 +02:00
Andrey Avtomonov
da6f8873d4 feat(context): expose local MCP entity details 2026-05-14 18:11:27 +02:00
Andrey Avtomonov
9d9fa9bc3b feat(context): register MCP entity details tool 2026-05-14 18:10:03 +02:00
Andrey Avtomonov
700c0ba5d7 feat(context): add scan-backed entity details service 2026-05-14 18:09:16 +02:00
Andrey Avtomonov
371fcd47eb docs: add research-agent MCP sql execution foundation plan 2026-05-14 18:00:40 +02:00
Andrey Avtomonov
66e7c9fca4 test(context): update SQL analysis port fixtures 2026-05-14 17:59:21 +02:00
Andrey Avtomonov
807f86d761 feat(context): execute MCP SQL through validated connector path 2026-05-14 17:57:41 +02:00
Andrey Avtomonov
c774870346 feat(context): register MCP sql execution tool 2026-05-14 17:56:33 +02:00
Andrey Avtomonov
06f020dca1 feat(context): expose read-only SQL validation port 2026-05-14 17:55:23 +02:00
Andrey Avtomonov
aa4431b295 feat(daemon): validate read-only SQL with sqlglot 2026-05-14 17:54:36 +02:00
Andrey Avtomonov
de9f4d97e7 Refine spec: drop connectionName compat carve-out and ground summary/snippet provenance per kind 2026-05-14 17:24:23 +02:00
Andrey Avtomonov
bef9d14b90 Refine research-agent MCP tools spec after adversarial review iteration 3 2026-05-14 17:06:35 +02:00
Andrey Avtomonov
1a79c0efc3 Refine research-agent MCP tools spec after adversarial review iteration 2 2026-05-14 16:58:28 +02:00
Andrey Avtomonov
9e6511182e Refine research-agent MCP tools spec after adversarial review iteration 1 2026-05-14 16:47:57 +02:00
Andrey Avtomonov
97ac2139bc 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.
2026-05-14 16:42:40 +02:00
Andrey Avtomonov
77cce79237
feat(cli): unify wiki and sl search output with clack-style box and score badge (#89)
Routes `ktx wiki list` and `ktx wiki search` through the shared printList()
renderer so all four list/search commands now produce the same Clack-style
pretty box, TSV plain output, and JSON envelope. Adds a `--output` flag to
the wiki commands mirroring sl, and surfaces relevance score as a leading
dim badge ("87%") in pretty mode and a `score=` prefix in plain mode for
both wiki search and sl search. Empty results now emit a consistent
actionable hint across commands.
2026-05-14 15:15:20 +02:00
Andrey Avtomonov
52dd89481c
fix(cli): keep ktx setup alive when a dbt git clone fails (#88)
Wraps the validation clone in defaultValidateDbt so auth or network
failures surface as a clean validation error instead of an unhandled
RepoFetchError that exits the wizard. Verifies pasted tokens with
testGitRepo before saving them as a secret so bad tokens are caught at
paste time. In interactive setup, validation failures now bounce the
user back to source selection (with a "Edit the connection or pick a
different source" hint) instead of killing the process; --source flag
mode still exits with failed as before.
2026-05-14 14:39:50 +02:00
Andrey Avtomonov
6c4623f2ff
feat(cli): enforce required database selection and improve tree-picker UX (#86)
* feat(cli): enforce required database selection and improve tree-picker UX

- Require at least one database driver via prompt `required: true` instead of
  looping on empty selection; remove the now-dead retry/back-on-empty branch.
- Surface the recommended option with a "(recommended)" hint in the depth and
  query-history prompts.
- Tree picker: add `◧` partial glyph for parents whose descendants are checked,
  and make `a` toggle select-all-visible / select-none.

* fix(cli): drop unused export from tree-picker toggleSelectAllVisible

Knip flagged the export as unused; the function is only consumed by the
internal reducer via the 'toggle-select-all-visible' command, so demote
it to a module-local helper to keep CI's dead-code check green.

* test(cli): drop empty-selection warning assertion from setup test

The empty-selection retry/warning loop in `chooseDrivers` was removed in
favor of `multiselect`'s `required: true`, so the legacy warning string
is unreachable. Update the test to assert the simpler back-from-selection
return-to-embeddings flow.
2026-05-14 14:35:58 +02:00
Andrey Avtomonov
e28b10454a
feat(cli): friendly missing-project status and per-project daemon state (#87)
- Block project-aware commands when ktx.yaml is absent and render a
  friendly "run ktx setup" message (plain or JSON) instead of leaking
  ENOENT or "Project: ..." noise.
- Make ktx status project detect the missing config and emit the same
  message via a shared renderMissingProjectMessage helper.
- Move the managed Python daemon state, stdout, and stderr files out of
  the shared runtime root into {projectDir}/.ktx/runtime so multiple
  projects no longer share a single daemon record.
- Simplify the runtime install root to ~/.ktx/runtime on every platform
  and split the daemon-specific paths into managedPythonDaemonLayout,
  threading projectDir through start, stop, and stop-all paths.
2026-05-14 14:35:55 +02:00
Luca Martial
6d7d90571e
fix(cli): remove redundant "already" from configured sources label (#83)
The word "already" in "Primary sources already configured" adds no
information and reads awkwardly in the setup flow.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-13 19:51:24 -04:00
Luca Martial
5b4ba73e64
refactor(cli): remove Vertex AI auth step and add gcloud retry (#84)
* refactor(cli): remove Vertex AI auth step and add gcloud project listing retry

The Vertex AI auth step only offered one option (use existing ADC credentials)
making it a redundant click. Remove it and go straight to project selection.

When gcloud project listing fails (e.g. expired credentials), show a
diagnostic message and offer a "Retry" option instead of silently falling
back to an empty list.

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

* refactor(cli): show gcloud project listing errors inline in the prompt

Move the gcloud failure message into the select prompt instead of writing
it to stdout separately, and highlight it with yellow ANSI coloring so
users notice the remediation steps.

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-13 19:49:49 -04:00
Andrey Avtomonov
b00c1a11a9
feat: merge ingest and scan
* docs: add CLI component reuse guidance

* docs: add unified ingest ux design

* Refine unified ingest UX design after adversarial review iteration 1

* Refine unified ingest UX design after adversarial review iteration 2

* Refine unified ingest UX design after adversarial review iteration 3

* feat(cli): route public connection ingest command

* feat(cli): hide standalone scan from public help

* feat(cli): plan public ingest depth and query history

* feat(cli): execute public database ingest facets

* feat(ingest): read connection query history config

* fix(cli): use public ingest wording

* fix(config): stop generating ingest adapter allow lists

* docs: document public ingest command

* test: align ingest surface expectations

* docs: add unified ingest public CLI surface plan

* feat(cli): preflight deep public ingest readiness

* feat(setup): store query history in connection context

* feat(setup): store database context depth

* feat(setup): verify context readiness by database depth

* fix(setup): keep context build foreground only

* fix(config): reject reserved ingest connection ids

* test: close unified ingest v1 expectations

* docs: add unified ingest v1 closure plan

* fix(ingest): bypass adapter allow-list for public source ingest

* fix(ingest): honor query history window intent

* fix(ingest): hide scan internals from public database ingest

* feat(ingest): use foreground view for interactive public ingest

* fix(setup): use schema context and query history wording

* test(cli): verify unified ingest public output

* docs: add unified ingest v1 public output closure plan

* fix(setup): forward query history flags

* fix(setup): prompt for postgres query history

* fix(status): report query history readiness

* fix(ingest): remove legacy public guidance

* fix(ingest): polish foreground retry copy

* docs(examples): use unified query history wording

* chore(ingest): finish public query history cleanup

* docs: add unified ingest v1 query history status cleanup plan

* test(docs): cover unified ingest public docs

* docs: align ingest CLI reference with unified UX

* docs: update context build guides for unified ingest

* docs: update setup and primary source ingest wording

* docs: stop advertising adapter-backed example ingest

* docs: close unified ingest public docs gaps

* docs: add unified ingest v1 docs site closure plan

* fix: render unified ingest foreground warnings

* fix: explain query history schema order

* fix: add public ingest retry guidance

* fix: align setup next steps with unified ingest

* fix: remove scan wording from demo progress

* test: verify unified ingest ux closure

* docs: add unified ingest v1 foreground and retry closure plan

* fix(cli): preserve query-history pull config in public ingest

* fix(cli): omit hidden commands from docs command tree

* test(cli): close unified ingest final public surface checks

* docs: add unified ingest v1 final public surface closure plan

* fix(cli): use public source labels in ingest reports

* fix(cli): suppress low-level public ingest output

* test(cli): verify unified ingest public plain output

* docs: add unified ingest v1 public plain output closure plan

* fix(cli): add public ingest copy sanitizers

* fix(cli): sanitize public ingest progress copy

* fix(cli): rename setup schema scope prompt

* docs(plan): add progress copy closure; test: align setup back-nav fixture

Adds the iter9 plan and updates the setup back-navigation test fixture
to pass disableQueryHistory plus listSchemas/listTables stubs that the
unified ingest setup step now requires.

* docs(plan): add final ux labels plan with narrowed label scans

* fix(cli): aggregate unsupported query-history warnings

* fix(cli): align setup database labels

* test(cli): fix setup database test type-check

* fix(cli): remove primary-source wording from setup output

* test(cli): verify unified ingest setup closure

* docs(plan): add unified ingest v1 verification copy closure plan

* fix(cli): remove top-level scan command

* fix(cli): remove legacy ingest and wiki commands

* Merge scan into ingest flow

* feat(cli): split ingest progress into per-phase rows, rename work units to tasks

Each database target in the unified ingest dashboard now renders one row per
real subprocess (Schema, then Query history when enabled) instead of a single
combined bar. Each phase has its own monotonic 0-100% bar so the progress
never snaps back to zero when historic-sql starts after scan completes.
Completed phases keep their final bar, summary, and elapsed time visible as
an inline audit trail; queued and skipped phases are shown explicitly.

Also rename user-facing "work units" / "Failed work units" to "tasks" /
"Failed tasks" in ingest output and parseIngestSummary. The parser still
accepts the legacy "Work units:" wording in captured output for backward
compat. Internal memory-flow event names and type fields are left alone.

* Fix test harness failures

* Fix CI smoke checks

---------

Co-authored-by: Andrey Avtomonov <7889985+andreybavt@users.noreply.github.com>
2026-05-14 01:43:06 +02:00
Andrey Avtomonov
1a472cf3ed
fix: clean up ktx yaml config parameters (#75)
* fix: clean up ktx yaml config parameters

* fix: align ci smoke checks with status output

* test: update artifact smoke status assertion
2026-05-14 01:27:31 +02:00
Andrey Avtomonov
339bc39de8
docs: add Codecov badge (#85) 2026-05-14 01:21:01 +02:00
Andrey Avtomonov
0a261fe8a4
ci: add codecov coverage reporting (#82)
* ci: add codecov coverage reporting

* ci: fix codecov and secret scan checks

* ci: fix smoke and artifact checks
2026-05-14 01:13:31 +02:00
Andrey Avtomonov
28b5e2a83e
fix: align KTX agent tools and repair handling (#73) 2026-05-14 00:57:51 +02:00
Luca Martial
ed690ef60c
feat(cli): redesign ktx status output UX (#80)
* feat(cli): redesign ktx status output with grouped checks and color

Replace flat PASS/FAIL/WARN text output with a grouped, symbol-based
layout (Environment, Project, Semantic search, Query history). Passing
groups collapse to a single summary line; failing groups expand to show
individual checks with fix hints. Adds --verbose flag to show all checks
including passing ones, color support for TTY terminals, a dedicated
setup-mode report that guides users toward `ktx setup`, and timing info.

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

* refactor(cli): extract project checks and historic SQL doctor into status-project

Move project-level doctor checks, semantic search embedding checks, and
historic SQL doctor logic from doctor.ts into a dedicated status-project.ts
module. Removes historic-sql-doctor.ts and its test file, consolidating
everything into the new module with its own tests.

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-13 18:47:58 -04:00
Luca Martial
dabd640cad
feat(cli): tree-picker UI for database scope selection (#81)
* refactor(cli): extract generic tree picker from Notion-specific modules

Rename notion-page-picker-tree → tree-picker-state and
notion-page-picker-tui → tree-picker-tui, removing Notion-specific
naming so the tree picker can be reused for database scope selection.
Update notion-page-picker to consume the new generic interfaces.

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

* feat(cli): add database tree picker for schema and table scope selection

Replace inline multiselect prompts in setup-databases with a new
database-tree-picker that uses the generic tree picker TUI. This gives
database scope selection the same grouped tree UI as the Notion page
picker, combining schema and table selection into a single step.

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-13 18:41:44 -04:00
Luca Martial
c2750dd797
refactor(cli): hide internal setup options and remove dead flags (#79)
Hide advanced/internal `ktx setup` options from --help output using
.hideHelp() so the command surface is approachable for new users. Remove
the --project, --agent-scope, and --skip-initial-source-ingest flags
that are no longer needed. Update docs and tests to match.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-13 17:55:25 -04:00
Luca Martial
f219ba22a6
feat(cli): redesign Notion page picker UI and add skip-empty flow (#78)
Rework the inline picker to use a cleaner visual style (filled/empty
square glyphs, bordered layout, clack-style header) and streamlined
keybindings (Enter to confirm, Escape to quit, Right Arrow to expand).
Replace the transient "select at least one" hint with a skip-empty
confirmation prompt that exits cleanly via quit-without-save.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-13 17:28:48 -04:00
Luca Martial
9ecb8cb119
feat(cli): add edit flow for setup connections (#77)
* feat(cli): add edit flow for primary database connections in setup

Allow users to edit existing primary database connections during setup
instead of only adding new ones. Preselects existing values (URL, schemas,
tables) so users can adjust without re-entering everything.

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

* feat(cli): add edit flow for context source connections in setup

Allow users to edit existing context source connections during setup.
Preselects existing values (URLs, credentials, repo details) and offers
a "Keep existing credential" option for sensitive fields.

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

* fix(cli): rename "Add more" to "Add additional" in primary sources menu

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-13 17:22:59 -04:00
Luca Martial
c31281c643
Merge pull request #76 from Kaelio/remove-vertex-gcloud-auth
refactor(cli): remove interactive gcloud auth from Vertex AI setup
2026-05-13 16:30:28 -04:00