Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"plugins": [
{
"name": "kbagent",
"version": "0.97.0",
"version": "0.98.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"
Expand Down
4 changes: 2 additions & 2 deletions docs/sdk.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ Escape hatch for endpoints the facade omits. See [§7](#7-clientraw-the-escape-h

## 5. Typed result models

`result_models.py` defines the **stable return shapes** (`JobResult`, `QueryResult`, `UploadTableResult`, `ConfigDetailResult`, `SyncPushResult`, `CloneResult`, the `0.66.0+` device-enrollment pair `ScopedTokenResult` / `StreamSourceResult`, `TokenListEntryResult` from `0.86.0+`, and `StorageJobResult` from `vNEXT+`), all re-exported from the package root. They exist so a downstream consumer types against a **semver-versioned contract** instead of an undocumented `dict[str, Any]` — a contract change then surfaces at *type-check* time, not at runtime against a customer build.
`result_models.py` defines the **stable return shapes** (`JobResult`, `QueryResult`, `UploadTableResult`, `ConfigDetailResult`, `SyncPushResult`, `CloneResult`, the `0.66.0+` device-enrollment pair `ScopedTokenResult` / `StreamSourceResult`, `TokenListEntryResult` from `0.86.0+`, and `StorageJobResult` from `0.98.0+`), all re-exported from the package root. They exist so a downstream consumer types against a **semver-versioned contract** instead of an undocumented `dict[str, Any]` — a contract change then surfaces at *type-check* time, not at runtime against a customer build.

Two design rules every model follows (`_ApiResultModel` base):

Expand All @@ -272,7 +272,7 @@ The two device-enrollment models (`0.66.0+`) commit these named fields:
- **`ScopedTokenResult`** — `id`, `token` (the one-time secret, see the gotcha in §4), `description`, `expires` (`str | None`), `can_read_all_file_uploads` (alias `canReadAllFileUploads`).
- **`StreamSourceResult`** — `id`, `source_id`, `name`, `type`, `description`, `branch_id` (default `"default"`), `otlp_url` (ingest URL, secret in the path — unmasked), `otlp_secret`, `base_endpoint`, `sink_bucket_id` (`str | None`; the `in.c-otlp-<id>` bucket to grant a device token write on).

`UploadTableResult` also commits (`vNEXT+`) `file_id`, `job_id` (`int | None`) and `job_status` (`str | None`). `StorageJobResult` (`vNEXT+`) commits `job_id` (alias `id`), `status`, `operation_name` (alias `operationName`), `table_id` (alias `tableId`), `file_id`, `created_time` / `start_time` / `end_time` (aliases `createdTime` / `startTime` / `endTime`), `imported_rows`, `warnings`, `results`, `error`, plus the properties `finished` and `failed`.
`UploadTableResult` also commits (`0.98.0+`) `file_id`, `job_id` (`int | None`) and `job_status` (`str | None`). `StorageJobResult` (`0.98.0+`) commits `job_id` (alias `id`), `status`, `operation_name` (alias `operationName`), `table_id` (alias `tableId`), `file_id`, `created_time` / `start_time` / `end_time` (aliases `createdTime` / `startTime` / `endTime`), `imported_rows`, `warnings`, `results`, `error`, plus the properties `finished` and `failed`.

`TokenListEntryResult` (`0.86.0+`) commits `id`, `description`, `created` (`str | None`), `expires` (`str | None`), `is_expired` (alias `isExpired`), `is_master_token` (alias `isMasterToken`), and (`0.88.0+`) `last_used` (alias `lastUsed`), `last_used_event` (alias `lastUsedEvent`) and `last_used_status` (alias `lastUsedStatus`) — all three `str | None`, `None` unless `list_tokens(with_last_used=True)` was used. It has **no secret field by design** — see `list_tokens` above.

Expand Down
2 changes: 1 addition & 1 deletion plugins/kbagent/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "kbagent",
"version": "0.97.0",
"version": "0.98.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",
Expand Down
4 changes: 2 additions & 2 deletions plugins/kbagent/agents/keboola-expert.md
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ its absence is NOT a promise the entry is version-independent (see §1 Rule 6).
projects succeed. Branch on the code, never on the message. The fan-out
readers work on a session now, so a per-project `AUTH_NOT_SUPPORTED_ON_STACK`
comes only from one of the three static-only features.
- **Exit 1 with a full `--json` payload = a partial failure (vNEXT+, #745)**:
- **Exit 1 with a full `--json` payload = a partial failure (0.98.0+, #745)**:
Comment thread
padak marked this conversation as resolved.
a write that keeps going after one item fails (`sync push`, `sync clone`,
`sync push/pull/diff --all-projects`, `org setup`, `project refresh`,
`project invite --from-csv`, `workspace gc`, `semantic-layer
Expand Down Expand Up @@ -516,7 +516,7 @@ its absence is NOT a promise the entry is version-independent (see §1 Rule 6).
are `cli:*` categories, exact operation names, or globs matching >=1
operation (check with `kbagent permissions list`).

**Big `storage upload-table` (since vNEXT)**
**Big `storage upload-table` (since 0.98.0)**
- Use `--no-wait`, keep `job_id` + `file_id`, poll `storage job-detail --wait`.
`STORAGE_JOB_TIMEOUT` here = import still running: NEVER re-run the upload
(duplicate rows); recover with `load-file --file-id`.
Expand Down
Loading
Loading