From c07873cde88d9b74b78550130e492a0e374f3886 Mon Sep 17 00:00:00 2001 From: soustruh Date: Mon, 7 Sep 2026 08:21:07 +0200 Subject: [PATCH] chore(release): 0.93.0 --- .claude-plugin/marketplace.json | 2 +- CLAUDE.md | 4 ++-- plugins/kbagent/.claude-plugin/plugin.json | 2 +- plugins/kbagent/agents/keboola-expert.md | 4 ++-- .../kbagent/references/commands-reference.md | 12 +++++------ .../skills/kbagent/references/gotchas.md | 10 +++++----- pyproject.toml | 2 +- src/keboola_agent_cli/changelog.py | 20 +++++++++++++++++++ src/keboola_agent_cli/constants.py | 2 +- uv.lock | 2 +- 10 files changed, 40 insertions(+), 20 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index b64efa044..2ab812e6f 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,7 @@ "plugins": [ { "name": "kbagent", - "version": "0.92.0", + "version": "0.93.0", "source": "./plugins/kbagent", "description": "DEPRECATED — install from keboola/ai-kit: /plugin marketplace add keboola/ai-kit && /plugin install kbagent@keboola-claude-kit — AI-friendly interface to Keboola Connection projects — explore configs, jobs, lineage, sync configs as files, manage dev branches, and debug SQL in workspaces", "category": "development" diff --git a/CLAUDE.md b/CLAUDE.md index 376610b79..c368010a5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -982,10 +982,10 @@ kbagent kai ask --message "question" [--project NAME] kbagent kai chat --message "msg" [--chat-id ID] [--project NAME] kbagent kai chat-detail --chat-id ID [--project NAME] kbagent kai history [--project NAME] [--limit N] -# Default-project resolution (since vNEXT, #684): the `kai` group, `docs query`, `component detail`, +# Default-project resolution (since 0.93.0, #684): the `kai` group, `docs query`, `component detail`, # `component list --query`, `config examples`, and `config new` (scaffold mode) resolve an omitted # --project through the shared cascade (--project > KBAGENT_PROJECT env > `project use` pin > sole -# project). Before vNEXT these paths used the FIRST REGISTERED project and ignored the pin. +# project). Before 0.93.0 these paths used the FIRST REGISTERED project and ignored the pin. # Several projects with no pin now exit 5 (CONFIG_ERROR) instead of silently picking the first. # Same fix over `kbagent serve`: /kai/*, POST /documentation/query, GET /components?query=... diff --git a/plugins/kbagent/.claude-plugin/plugin.json b/plugins/kbagent/.claude-plugin/plugin.json index 307bf4187..7747b4407 100644 --- a/plugins/kbagent/.claude-plugin/plugin.json +++ b/plugins/kbagent/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "kbagent", - "version": "0.92.0", + "version": "0.93.0", "description": "AI-friendly interface to Keboola Connection projects — explore configs, jobs, lineage, sync configs as files, manage dev branches, and debug SQL in workspaces", "author": { "name": "Keboola", diff --git a/plugins/kbagent/agents/keboola-expert.md b/plugins/kbagent/agents/keboola-expert.md index dc2187046..8cfe64096 100644 --- a/plugins/kbagent/agents/keboola-expert.md +++ b/plugins/kbagent/agents/keboola-expert.md @@ -190,7 +190,7 @@ its absence is NOT a promise the entry is version-independent (see §1 Rule 6). config in the project instead. **A command without `--project` refused with CONFIG_ERROR (or picked a project)** -- On **vNEXT+** the `kai` group, `docs query`, `component detail`, `component +- On **0.93.0+** the `kai` group, `docs query`, `component detail`, `component list --query`, `config examples`, and `config new` (scaffold mode) resolve an omitted `--project` through the pin cascade: `--project` > `KBAGENT_PROJECT` env > `project use` pin > sole project. Several projects and no pin -> exit 5 @@ -198,7 +198,7 @@ its absence is NOT a promise the entry is version-independent (see §1 Rule 6). or run `project use`. On <= 0.90.1 the same commands silently used the FIRST registered project and ignored the pin (issue #684). gotchas.md. -**Recurring `ext.keboola.cli.` events in a project's own event log (vNEXT+)** +**Recurring `ext.keboola.cli.` events in a project's own event log (0.93.0+)** - kbagent posts one best-effort usage event per command to the acting project's Storage events. An event audit then shows one `ext.keboola.cli.` (CLI/REPL) or `ext.keboola.cli.serve` (serve) row per kbagent command. That is expected diff --git a/plugins/kbagent/skills/kbagent/references/commands-reference.md b/plugins/kbagent/skills/kbagent/references/commands-reference.md index 83281d11d..a1e011d3a 100644 --- a/plugins/kbagent/skills/kbagent/references/commands-reference.md +++ b/plugins/kbagent/skills/kbagent/references/commands-reference.md @@ -123,9 +123,9 @@ Requires a **super-admin** Manage API token (same kind as `org setup`). Same def ## Component Discovery - `component sync-action ACTION_NAME --component-id ID --project ALIAS (--config-id ID [--row-id ID] | --config-data JSON|@file|-) [--branch ID] [--timeout N]` -- run a synchronous component action (`testConnection`, `getTables`, ...) on the `sync-actions.{stack}` service. `ACTION_NAME` is freeform (component-defined; discover via `component detail` `synchronous_actions`). `--row-id` shallow-merges the row over the root config at TOP level only (row `parameters`/`storage` replace root wholesale -- NOT deep merge; MCP `run_sync_action` parity). `--config-data` sends explicit `configData` verbatim. Response is action-specific pass-through. Ports the `run_sync_action` MCP tool. **Since 0.89.0 (#620)** the ROOT configuration's `authorization` and `runtime` blocks are forwarded into `configData` too -- root only (a `--row-id` never overrides them), and only when non-empty. `authorization.oauth_api.id` is the OAuth broker reference the sync-actions service resolves and decrypts, so on 0.88.0 and earlier every sync action on an OAuth / Service-Account component (`keboola.ex-linkedin-ads`, ...) failed with an opaque empty-body 400. -- `config examples --component-id ID [--project NAME] [--row]` -- sample root/row configurations from the AI-service component detail. `--json` emits `{component_id, root_examples, row_examples}`; `--row` limits to row examples. Ports the `get_config_examples` MCP tool. **Since vNEXT (#684)** an omitted `--project` resolves the `project use` pin, not the first registered project. See `gotchas.md`. -- `component list [--project NAME] [--type TYPE] [--query "text"]` -- list/search components (AI-powered with `--query`). **Since vNEXT (#684)** the `--query` path resolves an omitted `--project` through the `project use` pin, not the first registered project. The no-`--query` path still fans out to all projects. See `gotchas.md`. -- `component detail --component-id ID [--project NAME]` -- show component schema, docs URL, examples. **Since 0.90.0** a component the AI Service does not index (private/deprecated: `keboola.mcp-server-tool`, `keboola.data-apps`) no longer errors -- it falls back to the project's Storage component catalog. `documentation_source` (`"ai_service"` vs `"storage_catalog"`) is on BOTH paths and tells them apart; the fallback has NO configuration examples (`examples_count`/`row_examples_count` always 0), so read `documentation_source` before treating 0 as "this component ships none". `NOT_FOUND` is still raised when both sources miss. **Since 0.90.0** omitting `--project` really does fall back to a default project -- on <= 0.89.x it failed with `CONFIG_ERROR: Project 'None' not found` despite the help text, so pass `--project` explicitly there. **Since vNEXT (#684)** that fallback is the `project use` pin (explicit > `KBAGENT_PROJECT` env > pin > sole project), not the first registered project. Several projects with no pin now fail with `CONFIG_ERROR` (exit 5). On 0.90.0-0.90.1 the fallback was the first registered project. See `gotchas.md`. +- `config examples --component-id ID [--project NAME] [--row]` -- sample root/row configurations from the AI-service component detail. `--json` emits `{component_id, root_examples, row_examples}`; `--row` limits to row examples. Ports the `get_config_examples` MCP tool. **Since 0.93.0 (#684)** an omitted `--project` resolves the `project use` pin, not the first registered project. See `gotchas.md`. +- `component list [--project NAME] [--type TYPE] [--query "text"]` -- list/search components (AI-powered with `--query`). **Since 0.93.0 (#684)** the `--query` path resolves an omitted `--project` through the `project use` pin, not the first registered project. The no-`--query` path still fans out to all projects. See `gotchas.md`. +- `component detail --component-id ID [--project NAME]` -- show component schema, docs URL, examples. **Since 0.90.0** a component the AI Service does not index (private/deprecated: `keboola.mcp-server-tool`, `keboola.data-apps`) no longer errors -- it falls back to the project's Storage component catalog. `documentation_source` (`"ai_service"` vs `"storage_catalog"`) is on BOTH paths and tells them apart; the fallback has NO configuration examples (`examples_count`/`row_examples_count` always 0), so read `documentation_source` before treating 0 as "this component ships none". `NOT_FOUND` is still raised when both sources miss. **Since 0.90.0** omitting `--project` really does fall back to a default project -- on <= 0.89.x it failed with `CONFIG_ERROR: Project 'None' not found` despite the help text, so pass `--project` explicitly there. **Since 0.93.0 (#684)** that fallback is the `project use` pin (explicit > `KBAGENT_PROJECT` env > pin > sole project), not the first registered project. Several projects with no pin now fail with `CONFIG_ERROR` (exit 5). On 0.90.0-0.90.1 the fallback was the first registered project. See `gotchas.md`. ## Configuration Browsing - `config list [--project NAME] [--component-type TYPE] [--component-id ID] [--branch ID] [--include-rows]` -- list configs across projects (branch-aware). With `--include-rows` each row extends to include the full `configuration` and `rows` body (noticeably larger payload -- use only when the bodies are needed; the summary default covers name/description/component/last_modified/folder) @@ -137,7 +137,7 @@ Requires a **super-admin** Manage API token (same kind as `org setup`). Same def - `config delete --project NAME --component-id ID --config-id ID [--branch ID] [--dry-run]` -- SOFT-delete a configuration into the Storage trash (restorable). Since 0.89.0 it locates the config first and a config already in the trash is NOT deleted again -- the raw API purges permanently on a second DELETE (the retry-after-timeout trap); kbagent reports `already_in_trash` and exits 0 instead. `--dry-run` reports the located state without writing. Undo with `config restore`. Permission class `destructive` - `config restore --project NAME --component-id ID --config-id ID [--branch ID]` *(since v0.89.0)* -- restore a trashed configuration (versions, rows and metadata come back). Only works on a config currently in the trash. Permission class `write` - `config trash-list --project NAME [--component-id ID] [--branch ID]` *(since v0.89.0)* -- list configurations in the trash; each row carries `component_id`, `config_id`, `name`, `version` and `deleted_at`, which is exactly what `config restore` needs. Permission class `read` -- `config new --component-id ID [--project NAME] [--name NAME] [--output-dir DIR] [--push --no-files --description D --configuration JSON|@file|- --configuration-file PATH --no-validate --branch ID --dry-run --allow-plaintext-on-encrypt-failure]` -- **two modes**. **Default (no `--push`)**: scaffold new config from component schema; writes files to `--output-dir` or prints to stdout. **No Storage write calls** -- one AI Service read fetches the component schema/examples (that is what `--project` authenticates even without `--push`). **With `--push`** (0.33.0+, requires `--project` + non-empty `--name`): also POSTs to `/v2/storage/components/{cid}/configs` for a one-shot remote create. `#`-prefixed secrets in the pushed body auto-encrypt via the Encryption API first (fail-closed; since 0.54.0, #378; `--allow-plaintext-on-encrypt-failure` overrides). `--no-files` skips the filesystem step entirely (FIIA-style empty-shell pattern). `--configuration` / `--configuration-file` override the POSTed body (default is `{}`, with validation auto-skipped for the default empty shell). `--dry-run` previews the planned POST + validation result without creating. Since 0.89.0, `--push` + `--output-dir` writes the scaffold WITH `_keboola.config_id` into the subtree of the branch the config was created in (registering the branch in the manifest when missing), so the next `sync push` adopts it instead of duplicating (issue #644); with an explicit body the local file mirrors the pushed encrypted configuration. Schema validation runs by default when an explicit body is given (fail-closed: `ConfigError` exit 5 on mismatch) but skips silently if the AI Service has no schema for the component or returns an error; `--no-validate` opts out. Works for ALL component types including `keboola.snowflake-transformation`. **Since 0.90.0** the scaffold mode's optional `--project` really does fall back to a default project when omitted -- on <= 0.89.x it failed with `CONFIG_ERROR: Project 'None' not found` (see `gotchas.md`). **Since vNEXT (#684)** that fallback is the `project use` pin, not the first registered project. +- `config new --component-id ID [--project NAME] [--name NAME] [--output-dir DIR] [--push --no-files --description D --configuration JSON|@file|- --configuration-file PATH --no-validate --branch ID --dry-run --allow-plaintext-on-encrypt-failure]` -- **two modes**. **Default (no `--push`)**: scaffold new config from component schema; writes files to `--output-dir` or prints to stdout. **No Storage write calls** -- one AI Service read fetches the component schema/examples (that is what `--project` authenticates even without `--push`). **With `--push`** (0.33.0+, requires `--project` + non-empty `--name`): also POSTs to `/v2/storage/components/{cid}/configs` for a one-shot remote create. `#`-prefixed secrets in the pushed body auto-encrypt via the Encryption API first (fail-closed; since 0.54.0, #378; `--allow-plaintext-on-encrypt-failure` overrides). `--no-files` skips the filesystem step entirely (FIIA-style empty-shell pattern). `--configuration` / `--configuration-file` override the POSTed body (default is `{}`, with validation auto-skipped for the default empty shell). `--dry-run` previews the planned POST + validation result without creating. Since 0.89.0, `--push` + `--output-dir` writes the scaffold WITH `_keboola.config_id` into the subtree of the branch the config was created in (registering the branch in the manifest when missing), so the next `sync push` adopts it instead of duplicating (issue #644); with an explicit body the local file mirrors the pushed encrypted configuration. Schema validation runs by default when an explicit body is given (fail-closed: `ConfigError` exit 5 on mismatch) but skips silently if the AI Service has no schema for the component or returns an error; `--no-validate` opts out. Works for ALL component types including `keboola.snowflake-transformation`. **Since 0.90.0** the scaffold mode's optional `--project` really does fall back to a default project when omitted -- on <= 0.89.x it failed with `CONFIG_ERROR: Project 'None' not found` (see `gotchas.md`). **Since 0.93.0 (#684)** that fallback is the `project use` pin, not the first registered project. - `config clone --project P --component-id ID --config-id ID --name NAME [--target-project P2] [--description D] [--set PATH=VALUE ...] [--secret PATH=VALUE ...] [--branch ID] [--target-branch ID] [--dry-run] [--allow-plaintext-on-encrypt-failure]` (0.84.2+, #587) -- duplicate a configuration **whole**. Reach for this instead of reading `config detail` and rebuilding a body: copying only `configuration["parameters"]` silently drops its siblings (`runtime`, `storage`, `authorization`), and a lost `runtime.parallelism` makes Keboola fall back to `parallelism: 1` -- the reporter's 65-row writer went sequential, 140 min instead of ~60-90, with nothing in any output pointing at it. **Same project** (default): server-side copy via `POST .../configs/{id}/versions/{v}/create`; rows and `KBC::` encrypted values travel with it (verified live). `--set PATH=VALUE` is applied as a follow-up update on the copy, so an override can never be the reason a key went missing. **Cross project** (`--target-project`): reassembled client-side and rows recreated one by one, because encrypted values **cannot** travel -- a Keboola ciphertext is scoped to the project it was encrypted in. Any `KBC::` value makes the clone **fail with exit 5**, listing every path, until re-supplied via `--secret PATH=VALUE` (encrypted in the TARGET project on write). `--dry-run` reports those paths instead of refusing -- run it first to learn what to gather. Storage bucket/table IDs are copied **verbatim, never remapped**; `sync clone` is the command that remaps. - `config variables-set --project NAME --component-id ID --config-id ID --var KEY=VALUE [--var ...] [--replace] [--variables-id ID] [--values-id ID] [--branch ID] [--dry-run] [--allow-plaintext-on-encrypt-failure] [--yes]` -- attach variable values to a config. Auto-creates a sibling `keboola.variables` config + default row on first use and links it via the parent's `runtime.variables_id` / `variables_values_id`. Defaults to merge; `--replace` drops keys not in `--var`. `#`-prefixed values encrypt via the Encryption API (fail-closed; exit non-zero on `ENCRYPTION_FAILED`). See `variables-workflow.md` - `config variables-get --project NAME --component-id ID --config-id ID [--branch ID]` -- resolve `variables_id` + `values_id` from the parent config and fetch the current KEY=VALUE map. Returns `{linked: bool, variables_id, values_id, values}`; `linked=false` means the parent has no variables attached @@ -285,10 +285,10 @@ Ports the `create_sql_transformation` / `update_sql_transformation` tools (#396) - `transformation edit --project NAME --config-id ID --change-description TEXT (--op JSON ... | --op-file ops.json) [--storage JSON|@file|-] [--component-id ID] [--branch ID] [--dry-run]` -- 9 ops (`add_block`, `remove_block`, `rename_block`, `add_code`, `remove_code`, `rename_code`, `set_code`, `add_script`, `str_replace`) applied sequentially against batch-start ids. `--storage` REPLACES `configuration.storage` wholesale (include ALL mappings you want to keep). Unknown ids error with the list of valid ids. ## Documentation Q&A -- `docs query "QUESTION" [--project NAME]` -- natural-language answer from the Keboola documentation via the AI Service (server-side RAG, no local corpus). Returns answer text + source URLs; `--json` emits `{query, text, source_urls}`. Unlike `kai ask` it does NOT see project data, works with any token (no master-token / feature-flag requirement), and is the right tool for "how do I ..." questions. Ports the `docs_query` MCP tool. **Since vNEXT (#684)** an omitted `--project` resolves the `project use` pin, not the first registered project. See `gotchas.md`. +- `docs query "QUESTION" [--project NAME]` -- natural-language answer from the Keboola documentation via the AI Service (server-side RAG, no local corpus). Returns answer text + source URLs; `--json` emits `{query, text, source_urls}`. Unlike `kai ask` it does NOT see project data, works with any token (no master-token / feature-flag requirement), and is the right tool for "how do I ..." questions. Ports the `docs_query` MCP tool. **Since 0.93.0 (#684)** an omitted `--project` resolves the `project use` pin, not the first registered project. See `gotchas.md`. ## Kai (Keboola AI Assistant) -Requires the project to be added with its **master ('owner') Storage API token** -- the auto-generated owner token, not a custom one. Custom tokens cannot access Kai. Also requires the `agent-chat` feature flag on the project. Use `kai preflight` to verify both conditions without raising. **Since vNEXT (#684)** every `kai` subcommand resolves an omitted `--project` through the `project use` pin (explicit > `KBAGENT_PROJECT` env > pin > sole project). On 0.90.1 and older the fallback was the first registered project and the pin was ignored -- pass `--project` explicitly there. See `gotchas.md`. +Requires the project to be added with its **master ('owner') Storage API token** -- the auto-generated owner token, not a custom one. Custom tokens cannot access Kai. Also requires the `agent-chat` feature flag on the project. Use `kai preflight` to verify both conditions without raising. **Since 0.93.0 (#684)** every `kai` subcommand resolves an omitted `--project` through the `project use` pin (explicit > `KBAGENT_PROJECT` env > pin > sole project). On 0.90.1 and older the fallback was the first registered project and the pin was ignored -- pass `--project` explicitly there. See `gotchas.md`. - `kai ping [--project NAME]` -- check Kai server health and MCP connection status. Fails with KAI_NOT_ENABLED if the agent-chat feature is missing or the token is not a master token - `kai preflight [--project NAME]` -- inspect token readiness WITHOUT raising. Returns `{ok, is_master_token, has_agent_chat_feature, token_description, error}`. Use this in UIs and automation pre-flight checks instead of `ping` - `kai ask --message "question" [--project NAME]` -- one-shot question to Kai, collects full response diff --git a/plugins/kbagent/skills/kbagent/references/gotchas.md b/plugins/kbagent/skills/kbagent/references/gotchas.md index 750daf78d..e67cb5dc1 100644 --- a/plugins/kbagent/skills/kbagent/references/gotchas.md +++ b/plugins/kbagent/skills/kbagent/references/gotchas.md @@ -4703,8 +4703,8 @@ fallback (`config examples` already resolved it correctly). `component detail`'s `project_alias` reports the alias actually used (never `None`). With NO projects configured at all, the failure is an actionable `CONFIG_ERROR: No projects configured. Use 'kbagent project add' ...`. - Since vNEXT the fallback is the `project use` pin, not the first project -- - see the vNEXT gotcha on the `project use` pin (issue #684). + Since 0.93.0 the fallback is the `project use` pin, not the first project -- + see the gotcha on the `project use` pin (issue #684). - **<= 0.89.x**: pass `--project` explicitly to these two commands -- the help text's "first available" promise does not work there. - `component sync-action` is unaffected: its `--project` is genuinely required @@ -4960,9 +4960,9 @@ volatile components without waiting for an upstream kbagent release. ## `kai` / `docs query` / `component` / `config new` now honor the `project use` pin -*(since vNEXT, closes #684)* These commands take an optional `--project`: the whole `kai` group, +*(since 0.93.0, closes #684)* These commands take an optional `--project`: the whole `kai` group, `docs query`, `component detail`, `component list --query`, `config examples`, -and `config new` (scaffold mode). Before vNEXT, they resolved an omitted +and `config new` (scaffold mode). Before 0.93.0, they resolved an omitted `--project` to the **first registered project**. They ignored the pin from `kbagent project use`. With two or more projects registered, the command acted on the wrong project and reported no warning. @@ -4985,7 +4985,7 @@ single-project command: ## Usage telemetry: one `ext.keboola.cli.` event per command (opt-out with an env var) -*(since vNEXT)* Every CLI command, every REPL line, and every **mutating** `kbagent serve` +*(since 0.93.0)* Every CLI command, every REPL line, and every **mutating** `kbagent serve` request posts one best-effort usage event to the **acting project's own** Storage events (`POST /v2/storage/events`), the same mechanism the original Keboola Go CLI uses. Connection stores it as `ext.keboola.cli.` (CLI/REPL) or `ext.keboola.cli.serve` (serve). diff --git a/pyproject.toml b/pyproject.toml index 9683ac76c..d5a3517fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "keboola-cli" -version = "0.92.0" +version = "0.93.0" description = "AI-friendly CLI for managing Keboola projects" readme = "README.md" requires-python = ">=3.12" diff --git a/src/keboola_agent_cli/changelog.py b/src/keboola_agent_cli/changelog.py index 199fac226..91471affe 100644 --- a/src/keboola_agent_cli/changelog.py +++ b/src/keboola_agent_cli/changelog.py @@ -24,6 +24,26 @@ # Ordered newest-first. Each value is a list of brief one-line descriptions. CHANGELOG: dict[str, list[str]] = { + "0.93.0": [ + "New (#731): kbagent now posts a best-effort usage event per command, so its usage is " + "visible in Keboola telemetry like the original Go CLI. Connection stores it as " + "`ext.keboola.cli.` (CLI and REPL) or `ext.keboola.cli.serve` (serve). It records the " + "command name, the outcome and the duration, never argument values, and never changes a " + "command's exit code. Turn it off with `KBAGENT_DISABLE_TELEMETRY=1` or `DO_NOT_TRACK=1`. " + "The local-only `context`, `changelog` and `version` commands never post, `serve` logs " + "only mutating requests, and a session (`auth login`) project is covered without ever " + "triggering a token refresh.", + "Fix (#700): the commands that resolve a default project now honor the `project use` pin " + "when `--project` is omitted, not the first registered project. This covers the `kai` " + "group, `docs query`, `component detail`, `component list --query`, `config examples` and " + "`config new` (scaffold). The cascade is `--project`, then `KBAGENT_PROJECT`, then the " + "`project use` pin, then the sole project. With several registered projects and no pin " + "these now exit 5 (`CONFIG_ERROR`) asking for `--project` instead of guessing. The same " + "fix applies over `kbagent serve`.", + "Note (#703, #724, #739): housekeeping with no user-facing change. Internal groundwork for " + "merge requests (the Layer 2 service, no commands yet), an agent-docs cleanup, and the " + "move to ruff 0.16 as the linter.", + ], "0.92.0": [ "New (#719): `kbagent flow triggers --project P --flow-id ID` answers what actually " "starts a flow -- cron schedules AND table triggers in one call. A table trigger is a " diff --git a/src/keboola_agent_cli/constants.py b/src/keboola_agent_cli/constants.py index 648bc5e6b..eaf4d56a9 100644 --- a/src/keboola_agent_cli/constants.py +++ b/src/keboola_agent_cli/constants.py @@ -328,7 +328,7 @@ def _resolve_app_name() -> str: ENV_KBC_LOGIN_TOTP_SECRET: str = "KBC_LOGIN_TOTP_SECRET" ENV_CONVERSATION_ID: str = "KBAGENT_CONVERSATION_ID" -# --- Command telemetry (since vNEXT) --- +# --- Command telemetry (since 0.93.0) --- # Per-invocation usage event posted best-effort to the project's own Storage # events (POST /v2/storage/events), the same mechanism the kbc CLI uses. It is # NOT the audit trail: mutations are recorded server-side by Connection diff --git a/uv.lock b/uv.lock index 942f7a235..063edc369 100644 --- a/uv.lock +++ b/uv.lock @@ -590,7 +590,7 @@ wheels = [ [[package]] name = "keboola-cli" -version = "0.92.0" +version = "0.93.0" source = { editable = "." } dependencies = [ { name = "croniter" },