kapable-sdk (0.10.1)

Published 2026-07-18 19:42:53 +00:00 by kapable

Installation

[registries.forgejo]
index = "sparse+" # Sparse index
# index = "" # Git

[net]
git-fetch-with-cli = true
cargo add kapable-sdk@0.10.1 --registry forgejo

About this package

Typed Rust SDK for the Kapable v2 platform API

kapable-sdk

Typed Rust SDK for the Kapable v2 platform API. The single, typed, audited mirror of every customer-tier capability on the platform, scoped to the correct security token. The Rust twin of the TypeScript @kapable/sdk, kept at method parity by a shared coverage manifest.

Version 0.2.0 — customer-tier coverage 74.7% (up from 50.6% at the 2026-06-08 audit). 11 modules, 315 methods. See CHANGELOG.md.

Install

Published to the Kapable Forgejo cargo registry (anonymous read). One-time registry setup in .cargo/config.toml (project or ~/.cargo):

[registries.kapable]
index = "sparse+https://git.kapable.dev/api/packages/kapable/cargo/"

Then:

[dependencies]
kapable-sdk = { registry = "kapable", version = "0.2" }

Quick start

use kapable_sdk::KapableClient;

#[tokio::main]
async fn main() -> Result<(), kapable_sdk::KapableError> {
    let client = KapableClient::new("https://api.kapable.ai")
        .api_key("my-api-key")
        .build();

    let stories = client.board().list_stories(Default::default()).await?;
    println!("Found {} stories (total {})", stories.data.len(), stories.total);

    let buckets = client.store().list_buckets().await?;
    for bucket in &buckets {
        println!("Bucket: {}", bucket.name);
    }
    Ok(())
}

Auth

Two authentication methods:

// API key (x-api-key header)
let client = KapableClient::new("https://api.kapable.ai")
    .api_key("sk_live_...")
    .build();

// Bearer token (JWT / session)
let client = KapableClient::new("https://api.kapable.ai")
    .token("eyJ...")
    .build();

Picking the right token

The SDK never enforces authorization — the server does — but it ships a typed description of the platform's RBAC / token model so you can pick the right credential. See kapable_sdk::security (Permission, TokenType, Scope, AuthRequirement, and the tier presets):

use kapable_sdk::security::{tier, Permission};

let billing_req = tier::owner_with(Permission::BillingManage);
assert!(tier::OWNER.token_types.contains(&kapable_sdk::TokenType::Session));
  • Token tiering & contribution rules: ../kapable-sdk/CONTRIBUTING.md (shared, both languages)
  • Full RBAC / token-tiering matrix + gap analysis: ../docs/sdk-surface-matrix.md
  • Operator/admin endpoints (berth, foreman, host, gateway, …) are deliberately excluded — they belong in the planned ops SDK, never this crate.

Workspace scoping

Workspace-scoped data (workspaces module, workspace_scoped data tables) is resolved server-side from the X-Workspace-Id header (membership-validated by kapable-auth; a workspace-bound credential always wins over the header). The SDK sets the header natively — no header plumbing needed:

// Builder scope: every request carries X-Workspace-Id
let client = KapableClient::new("https://api.kapable.ai")
    .token("eyJ...")
    .workspace_id("a4d3…")
    .build();

// Derive re-scoped clients — sub-clients carry the new scope
let other = client.with_workspace_id("other-ws"); // different workspace
let org_wide = client.without_workspace_id();     // org-wide opt-out (no header)

Real-time (SSE)

Several modules expose text/event-stream endpoints (board events, data row changes, comms room/agent/anomaly feeds, AI proxy streaming). They return a Stream of typed events backed by the sse module (parse_sse_buffer / SseEvent), usable directly against any Kapable SSE endpoint.

Modules

11 customer-tier modules. Method counts are Rust / TS (kept at parity by the drift gate). The lists below are generated from ../kapable-sdk/coverage-manifest.json — the source of truth for the wrapped surface.

Module Methods (Rust / TS) Service Description
ai 6 / 6 kapable-ai Provider catalog, per-org config, upstream proxy (SSE)
auth 109 / 115 kapable-auth Login, signup, orgs, members, API keys, apps, deployments, lanes, workspaces
billing 3 / 3 kapable-billing Org subscription summary, Stripe checkout, customer portal
board 41 / 42 kapable-board Stories, sprints, plans, products, comments, closures, Routa coordination
comms 43 / 43 kapable-comms Agents, mailboxes, rooms, messages, email, bridges, SSE feeds
data 17 / 18 kapable-data Tables CRUD, rows CRUD, search, bulk ops, CSV, SSE row changes
harbor 11 / 11 harbor Runtime licensing + release store (public + org-scoped reads)
knowledge 37 / 38 kapable-knowledge Claims, edges, predicates, perspectives, entities, tensions
secrets 7 / 7 strongbox Org-scoped secrets vault: CRUD, rotate, audit
store 10 / 10 kapable-store Buckets, objects, presigned URLs
wiki 31 / 31 kv2-wiki Pages/collections/tags/projects CRUD, prompt-gen, agent-tools

Plus security (Permission / TokenType / Scope / AuthRequirement), sse (event-stream parser + connector), error, and types (ListResponse, ListParams).

Method index

Accessed via client.<module>().<method>(...).

  • aiconfigure_provider, get_provider, list_providers, proxy, proxy_stream, remove_provider_config
  • authlogin, signup, logout, logout_everywhere, refresh, me, validate, validate_header, session_info, magic_link_request, magic_link_verify, create_api_key, list_api_keys, revoke_api_key, create_service_token, get_org, rename_org, get_org_caps, list_org_members, assign_member_role, deactivate_member, reactivate_member, create_invitation, list_invitations, revoke_invitation, accept_invitation, list_roles, create_role, update_role, delete_role, list_permissions, list_org_apps, get_app_detail, get_app_choice, create_app_choice, fork_app_choice, rename_app, delete_app, pause_app, resume_app, request_deploy, rebuild_app, … (full list in the manifest; admin_create_org/admin_create_org_api_key are admin-tier and now live in kapable-ops-sdk-rs; the 3 internal X-Callback-Token deployment/owner-email callbacks were dropped from both SDKs — they are internal service-to-service, intentionally in no SDK)
  • billingget, init, portal
  • boardlist_stories, get_story, create_story, update_story, delete_story, transition_story, search_stories, list_sprints, get_sprint, create_sprint, start_sprint, complete_sprint, attach_story, detach_story, get_closure, upsert_closure, list_plans, get_plan, create_plan, update_plan, list_revisions, create_revision, list_products, get_product, create_product, update_product, list_comments, create_comment, update_comment, delete_comment, get_lanes, set_lanes, post_evidence, get_verdict, list_worktrees, agent_report, list_story_repos, add_story_repo, remove_story_repo, list_repos, stream_events
  • commscreate_agent, list_agents, delete_agent, mint_agent_key, list_agent_keys, revoke_agent_key, create_mailbox, list_agent_mailboxes, delete_mailbox, list_mailbox_channels, create_channel, get_message, list_messages, send_email, create_room, list_rooms, get_room, room_presence, heartbeat, join_room, invite_agent_to_room, revoke_room_agent, create_invite, list_invites, revoke_invite, post_room_message, list_room_messages, mint_app_token, list_app_tokens, revoke_app_token, post_annotations, upsert_mailbox_quota, get_mailbox_quotas, delete_mailbox_quota, mailbox_rate_limit_hits, list_org_send_audit, link_telegram_bridge, telegram_setup_url, list_bridges, revoke_bridge, stream_room, stream_agent, stream_anomaly_feed
  • datalist_tables, create_table, drop_table, migrate_table, list_rows, get_row, create_rows, update_row, patch_row, delete_row, search_rows, bulk_update, bulk_delete, import_csv, export_data, stream_changes, stream_org_changes
  • harboractivate, validate, verify_release, get_org_public_key, get_release_manifest, get_latest_release_compat, download_release_artifact, download_artifact, get_license, get_license_usage, list_org_keys
  • knowledgecreate_claim, get_claim, list_claims, search_claims, list_claims_by_perspective, retract_claim, create_claim_confidence_evidence, list_claim_confidence_evidence, create_claim_meta, list_claim_meta, create_claim_derivations, list_claim_derivations, create_edge, list_edges, list_predicates, predicate_ontology, create_source, list_sources, delete_source, create_page, list_pages, merge_pages, create_corpus, get_corpus, list_corpora, get_perspective, list_perspectives, list_canonical_entities, resolve_canonical_entity, list_merge_candidates, decide_merge_candidate, unmerge_merge_candidate, list_source_provenance, source_provenance_graph, list_invariants, list_assay_runs, detect_tensions
  • secretscreate, get, list, update, delete, rotate, audit
  • storelist_buckets, create_bucket, list_objects, paginate_objects, upload_object, download_object, head_object, delete_object, presign_upload, presign_download
  • wikicreate_page, list_pages, update_page, delete_page, get_raw_page, create_entity_page, create_prompt_page, update_prompt, regenerate, generate_narrative, page_generation_history, create_collection, list_collections, get_collection, update_collection, delete_collection, add_page_to_collection, remove_page_from_collection, update_page_in_collection, create_tag, list_tags, add_tags_to_page, remove_tag_from_page, delete_tag, create_project, list_projects, search_claims, get_canonical_entity, list_predicates, read_page_tool, list_pages_tool

Coverage & drift gate

Coverage is measured against the customer-tier, SDK-eligible endpoint inventory. The TypeScript package owns the manifest and the gate (cd ../kapable-sdk && bun run check-drift); this crate is kept at method parity by the same manifest. Current: 74.7% customer-tier coverage, 0 phantom methods.

License

MIT

Dependencies

ID Version
aes-gcm ^0.10
base64 ^0.22
bytes ^1
chrono ^0.4
futures-util ^0.3
rand ^0.8
reqwest ^0.12
serde ^1
serde_json ^1
thiserror ^2
tokio ^1
url ^2
uuid ^1
futures-util ^0.3
tokio ^1
wiremock ^0.6
Details
Cargo
2026-07-18 19:42:53 +00:00
2
MIT
211 KiB
Assets (1)
Versions (36) View all
0.17.0 2026-08-03
0.16.0 2026-08-02
0.15.0 2026-08-02
0.14.0 2026-07-27
0.13.0 2026-07-26