@cadraos/sdk 0.3.7 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -317,6 +317,13 @@ interface KanbanCard$1 {
317
317
  executionId?: string;
318
318
  /** Summary of the card's current/last run, if any. */
319
319
  run?: KanbanRunSummary;
320
+ /**
321
+ * When this card next becomes DUE on a scheduled lane (ISO string) — maps to
322
+ * `agentic_card.next_due_at` (spec §3a / STORY-003/004). Drives the board's
323
+ * ⧗ "due" chip: `next_due_at ≤ now` → due (the next sweep will pick it up).
324
+ * OPTIONAL — absent → no due chip (today's render).
325
+ */
326
+ nextDueAt?: string;
320
327
  /** Who created the card. */
321
328
  createdBy?: string;
322
329
  /** When the card was created (ISO string). */
@@ -455,6 +462,13 @@ type StageRunStatus = "queued" | "running" | "completed" | "failed";
455
462
  * dispatch or a duplicate completion can't double-fire / double-advance
456
463
  * (design §5/§11 R2), and a `key` rename never collides with a prior run.
457
464
  * Backed by a host `stage_run` table with a UNIQUE constraint on `idemKey`.
465
+ *
466
+ * Stranded-run recovery (design §10): a run left `failed` (a dispatch threw) or
467
+ * stale `queued` (a process died before dispatch) is RE-CLAIMED by the next
468
+ * `beginStageRun` — reset to a fresh `queued` intent (with `attempts` bumped) —
469
+ * so a transient dispatch failure self-heals on the following sweep. v1 is
470
+ * acyclic-only: the idemKey pins `(cardId, stageId, version)`, so a re-claim
471
+ * only ever re-runs a FAILED attempt of the current stage, never a completed one.
458
472
  */
459
473
  interface StageRun {
460
474
  /** Idempotency key (`cardId:stageId:configVersion`; stageId = immutable id). UNIQUE. */
@@ -471,6 +485,19 @@ interface StageRun {
471
485
  executionUuid?: string;
472
486
  /** Error message (when failed). */
473
487
  error?: string;
488
+ /**
489
+ * Dispatch attempt count (design §10 — stranded-run recovery). `1` on first
490
+ * claim; incremented each time `beginStageRun` RE-CLAIMS a stranded
491
+ * (failed/stale-queued) run. Optional/back-compat — a host that doesn't track
492
+ * re-claims leaves it undefined; surfaced for the sweep digest + observability.
493
+ *
494
+ * v1 RECORDS attempts but does NOT cap them: self-heal is bounded by the
495
+ * CADENCE (one re-dispatch per sweep tick), not a max-attempts ceiling, so a
496
+ * transient outage recovers while a genuinely poison card simply re-fails once
497
+ * per tick (visible via this counter). A retry ceiling / backoff is a
498
+ * deliberate follow-on, not v1.
499
+ */
500
+ attempts?: number;
474
501
  /** When the run intent was created (ISO string). */
475
502
  createdAt: string;
476
503
  }
@@ -664,6 +691,13 @@ interface WireHandler {
664
691
  type?: string;
665
692
  agent_uuid?: string;
666
693
  team_uuid?: string;
694
+ /**
695
+ * remote_agent → the `remote_agents.uuid` for a `remote_agent` lane (§5.3).
696
+ * Snake-cased on the wire (published JSONB); mapped to `remoteAgentUuid`.
697
+ * WITHOUT this the binding is silently dropped at parse and every published
698
+ * remote_agent lane fails dispatch with "missing remoteAgentUuid" (FINDING-6).
699
+ */
700
+ remote_agent_uuid?: string;
667
701
  /** Legacy p28 slug ref. */
668
702
  agent_ref?: string;
669
703
  webhook?: {
@@ -1623,6 +1657,69 @@ interface KanbanAdapter {
1623
1657
  createRunStream?(executionId: string): ExecutionStreamController;
1624
1658
  }
1625
1659
 
1660
+ interface ScheduleStatusProps {
1661
+ /** Next scheduled sweep (ISO string) → the "next run in {t}" countdown. */
1662
+ nextTickAt?: string;
1663
+ /** Per-lane due counts (lane key → # of due cards) — powers "· {n} due". */
1664
+ dueByLane?: Record<string, number>;
1665
+ /**
1666
+ * Override the leading status label. Defaults to "On schedule" (`on-schedule`
1667
+ * tone), "Paused" (`paused`), or "Running now" (`due`).
1668
+ */
1669
+ label?: string;
1670
+ /** Status tone → drives the dot colour + default label. Default `on-schedule`. */
1671
+ tone?: "on-schedule" | "due" | "paused";
1672
+ /** Additional CSS class. */
1673
+ className?: string;
1674
+ }
1675
+ /**
1676
+ * Render the calm schedule-status line.
1677
+ */
1678
+ declare function ScheduleStatus({ nextTickAt, dueByLane, label, tone, className, }: ScheduleStatusProps): react_jsx_runtime.JSX.Element;
1679
+
1680
+ /** The kind of agent bound to a lane — drives the picker's leading icon. */
1681
+ type LaneAgentKind = "cadra" | "remote" | "human";
1682
+ /** A selectable agent option for a lane. */
1683
+ interface LaneAgentOption {
1684
+ /** Stable agent id (Cadra agent/team uuid, remote runner id, or "human"). */
1685
+ id: string;
1686
+ /** Display name, e.g. "Cadra · Lead Sourcer" or "My desktop agent". */
1687
+ label: string;
1688
+ /** Agent kind — icon + semantics. Default `cadra`. */
1689
+ kind?: LaneAgentKind;
1690
+ /**
1691
+ * Connection state for a `remote` agent (desktop/ACP). `true` → online dot,
1692
+ * `false` → offline dot + the lane will pause. Omit for always-on agents.
1693
+ */
1694
+ online?: boolean;
1695
+ }
1696
+ interface LaneAgentPickerProps {
1697
+ /** The currently-assigned agent (display). */
1698
+ selected?: LaneAgentOption;
1699
+ /** The agents the owner may pick from. */
1700
+ options?: LaneAgentOption[];
1701
+ /** Fired when the owner assigns an agent to this lane. */
1702
+ onSelect?: (agentId: string) => void;
1703
+ /**
1704
+ * Owner gate (M10 / §14). When `false`, the picker is LOCKED (read-only + a
1705
+ * visible reason). Defaults to `true`; an editable picker still needs
1706
+ * `onSelect` + `options` to actually open.
1707
+ */
1708
+ canEdit?: boolean;
1709
+ /**
1710
+ * The visible reason shown under a locked picker (IS-6), e.g.
1711
+ * "Only Ava (owner) can change agents". Rendered as text, never a tooltip.
1712
+ */
1713
+ lockedReason?: string;
1714
+ /** Additional CSS class. */
1715
+ className?: string;
1716
+ }
1717
+ /**
1718
+ * Render the lane agent picker — interactive for owners, locked-with-reason for
1719
+ * members.
1720
+ */
1721
+ declare function LaneAgentPicker({ selected, options, onSelect, canEdit, lockedReason, className, }: LaneAgentPickerProps): react_jsx_runtime.JSX.Element;
1722
+
1626
1723
  interface KanbanBoardProps {
1627
1724
  /** The adapter driving the board (default HTTP or a custom direct adapter). */
1628
1725
  adapter: KanbanAdapter;
@@ -1663,13 +1760,46 @@ interface KanbanBoardProps {
1663
1760
  * Default off (undefined).
1664
1761
  */
1665
1762
  pollIntervalMs?: number;
1763
+ /**
1764
+ * Server-aggregate card counts per lane KEY (spec §3a, `countsByLane`). Drives
1765
+ * each lane header's count pill + cap meter (the rendered array may be a
1766
+ * page). Absent → headers show the rendered `cards.length`.
1767
+ */
1768
+ laneCounts?: Record<string, number>;
1769
+ /**
1770
+ * Owner gate for per-lane agent pickers (M10 / §14). When `false`, every
1771
+ * lane's picker renders LOCKED (read-only + a visible reason). Passed to each
1772
+ * column as the default `canEdit`. Default `true`.
1773
+ */
1774
+ canEditHandlers?: boolean;
1775
+ /**
1776
+ * Resolve the agent-picker slot for a lane — "Cadra agent | My desktop agent"
1777
+ * (§12 wireframe). Return `undefined` for lanes with no picker. Owner-gated by
1778
+ * `canEditHandlers` unless the slot sets its own `canEdit`. Absent → no picker.
1779
+ */
1780
+ laneAgentPicker?: (lane: KanbanLane) => LaneAgentPickerProps | undefined;
1781
+ /**
1782
+ * The calm schedule-status strip rendered ABOVE the board — "On schedule ·
1783
+ * next run in 10m" (spec §6 ScheduleStatus; carries `nextTickAt` + `dueByLane`).
1784
+ * NEVER the word "Conductor" (M2). Absent → no strip.
1785
+ */
1786
+ scheduleStatus?: ScheduleStatusProps;
1787
+ /**
1788
+ * Host-driven card focus (p45 STORY-011): when set (or changed), the board
1789
+ * OPENS this card's drawer — powering a deep-link (the cockpit `Review`
1790
+ * ?card= target) and the activity-rail `Review` primary. `openCard` fetches
1791
+ * the card via `adapter.getCard`, so the target need NOT be in the loaded
1792
+ * page. Absent → no auto-open (today's behavior, M10). Re-set the SAME id (or
1793
+ * change it) to re-open after the user closes the drawer.
1794
+ */
1795
+ focusCardId?: string;
1666
1796
  /** Additional CSS class for the board container. */
1667
1797
  className?: string;
1668
1798
  }
1669
1799
  /**
1670
1800
  * Drop-in agent-first kanban board.
1671
1801
  */
1672
- declare function KanbanBoard({ adapter, onCreateCard, onRetryCard, onError, onCardCreated, enableCreate, enableEdit, enableAdvance, pollIntervalMs, className, }: KanbanBoardProps): react_jsx_runtime.JSX.Element;
1802
+ declare function KanbanBoard({ adapter, onCreateCard, onRetryCard, onError, onCardCreated, enableCreate, enableEdit, enableAdvance, pollIntervalMs, laneCounts, canEditHandlers, laneAgentPicker, scheduleStatus, focusCardId, className, }: KanbanBoardProps): react_jsx_runtime.JSX.Element;
1673
1803
 
1674
1804
  /**
1675
1805
  * The host's BROWSER-SIDE card source. The host implements these against its
@@ -1748,14 +1878,40 @@ interface KanbanColumnProps {
1748
1878
  onCreateCard?: (lane: KanbanLane) => void;
1749
1879
  /** Whether to show the "+ New card" affordance on this column. */
1750
1880
  showCreate?: boolean;
1881
+ /**
1882
+ * SERVER-aggregate card count for the header pill + cap meter (spec §3a,
1883
+ * `countsByLane`). The rendered array may be a page; this is the true total.
1884
+ * OPTIONAL — absent → the header shows `cards.length` (today's render).
1885
+ */
1886
+ count?: number;
1887
+ /**
1888
+ * The per-lane agent-picker slot (spec §6). Rendered in the lane header when
1889
+ * supplied; owner-gating comes from the slot's own `canEdit` or the
1890
+ * board-level `canEditHandlers`. OPTIONAL — absent → no picker.
1891
+ */
1892
+ agentPicker?: LaneAgentPickerProps;
1893
+ /**
1894
+ * Board-level owner gate for lane pickers (M10). Used as the default
1895
+ * `canEdit` for `agentPicker` when the slot doesn't set its own.
1896
+ */
1897
+ canEditHandlers?: boolean;
1751
1898
  /** Additional CSS class. */
1752
1899
  className?: string;
1753
1900
  }
1754
1901
  /**
1755
1902
  * Render a single lane column with its cards.
1756
1903
  */
1757
- declare function KanbanColumn({ lane, cards, onCardClick, selectedCardId, onCreateCard, showCreate, className, }: KanbanColumnProps): react_jsx_runtime.JSX.Element;
1904
+ declare function KanbanColumn({ lane, cards, onCardClick, selectedCardId, onCreateCard, showCreate, count, agentPicker, canEditHandlers, className, }: KanbanColumnProps): react_jsx_runtime.JSX.Element;
1758
1905
 
1906
+ /**
1907
+ * A card's lane-relative schedule state (spec §3a), computed by the column from
1908
+ * the card + its lane and passed down. OPTIONAL — absent → today's render.
1909
+ *
1910
+ * - `ready` — run completed and awaiting the next lane (success chip).
1911
+ * - `due` — `next_due_at ≤ now`; the next sweep will pick it up (neutral).
1912
+ * - `waiting` — sitting in a scheduled lane, not yet due (neutral).
1913
+ */
1914
+ type DueState = "due" | "ready" | "waiting";
1759
1915
  interface KanbanCardProps {
1760
1916
  /** The card to render. */
1761
1917
  card: KanbanCard$1;
@@ -1763,13 +1919,19 @@ interface KanbanCardProps {
1763
1919
  onClick?: (card: KanbanCard$1) => void;
1764
1920
  /** Whether this card is currently selected/open. */
1765
1921
  selected?: boolean;
1922
+ /**
1923
+ * The card's lane-relative schedule state (spec §3a), supplied by the column.
1924
+ * Drives the due/ready/waiting chips. OPTIONAL — absent → run-status chip only
1925
+ * (today's render).
1926
+ */
1927
+ dueState?: DueState;
1766
1928
  /** Additional CSS class. */
1767
1929
  className?: string;
1768
1930
  }
1769
1931
  /**
1770
1932
  * Render a single kanban card tile.
1771
1933
  */
1772
- declare function KanbanCard({ card, onClick, selected, className }: KanbanCardProps): react_jsx_runtime.JSX.Element;
1934
+ declare function KanbanCard({ card, onClick, selected, dueState, className, }: KanbanCardProps): react_jsx_runtime.JSX.Element;
1773
1935
 
1774
1936
  interface CardDrawerProps {
1775
1937
  /** The card to display, or null when the drawer is closed. */
@@ -1833,6 +1995,69 @@ interface CardDrawerProps {
1833
1995
  */
1834
1996
  declare function CardDrawer({ card, adapter, onClose, onRetry, onUpdate, onAdvance, canAdvance, transitions, lanes, onTransition, onRunTerminal, onError, className, }: CardDrawerProps): react_jsx_runtime.JSX.Element | null;
1835
1997
 
1998
+ interface CapMeterProps {
1999
+ /** Current card count in the lane (server aggregate). */
2000
+ count: number;
2001
+ /** The lane's per-sweep cap. */
2002
+ cap: number;
2003
+ /** Additional CSS class. */
2004
+ className?: string;
2005
+ }
2006
+ /**
2007
+ * Render a lane capacity meter (`count/cap` + a filling track).
2008
+ */
2009
+ declare function CapMeter({ count, cap, className }: CapMeterProps): react_jsx_runtime.JSX.Element;
2010
+
2011
+ /**
2012
+ * Internal styling helpers (inline — no clsx dependency).
2013
+ *
2014
+ * All board surfaces speak in SEMANTIC design tokens (p45 STORY-010): the
2015
+ * board is a shared SDK component, so it must adopt the CONSUMER's active
2016
+ * theme, never bake in a fixed palette. Tokens resolve per-theme via CSS
2017
+ * variables (light/dark flip without `dark:` variants), and the status
2018
+ * vocabulary is one-color-one-meaning (spec §3 crit F3):
2019
+ *
2020
+ * - `info` → running / working
2021
+ * - `success` → ready / done / sent / on-schedule
2022
+ * - `warning` → needs-you / human gate (RESERVED — never for "due")
2023
+ * - `destructive` → failed
2024
+ * - `neutral` → scheduled / due / waiting (machine will handle it)
2025
+ *
2026
+ * @module @cadraos/sdk/kanban
2027
+ */
2028
+ /**
2029
+ * Join truthy class names with a space.
2030
+ */
2031
+ declare function cn(...classes: (string | undefined | false | null)[]): string;
2032
+ /**
2033
+ * The badge/chip variants the board renders. Mirrors the shadcn `Badge` enum
2034
+ * every consumer ships (`default | secondary | destructive | outline | success
2035
+ * | warning`) PLUS the one new variant this story adds — `info` — for the
2036
+ * load-bearing "running/working" chip (spec §6). `neutral` is NOT a new Badge
2037
+ * variant: it composes the REAL `secondary` + `muted-foreground` tokens so the
2038
+ * calm scheduled/due/waiting chips stay distinct from amber without inventing a
2039
+ * `badge-muted` class (judge polish note 1).
2040
+ */
2041
+ type BadgeVariant = "default" | "secondary" | "outline" | "destructive" | "success" | "warning" | "info" | "neutral";
2042
+ /**
2043
+ * Token classes for a badge/chip variant. Colour only — the caller supplies the
2044
+ * chip layout (rounded-full, padding, text size). Soft-tinted for the status
2045
+ * variants (matching the mock's `hsl(var(--token)/.15)` fills) so they read as
2046
+ * calm siblings, solid for `default`.
2047
+ */
2048
+ declare function badgeVariantClass(variant: BadgeVariant): string;
2049
+ /**
2050
+ * Visual tone for a run status badge (reworked to semantic tokens — STORY-010).
2051
+ * Labels are unchanged; only the classes move from hardcoded palette to tokens.
2052
+ * `pending`/`cancelled` map to the CALM `neutral` tone — amber is reserved for
2053
+ * needs-you (F3), so a queued run never borrows the human-action colour.
2054
+ */
2055
+ declare function runStatusTone(status: string | undefined): {
2056
+ label: string;
2057
+ variant: BadgeVariant;
2058
+ className: string;
2059
+ };
2060
+
1836
2061
  interface UseKanbanBoardOptions {
1837
2062
  /** The adapter driving all board/card operations. */
1838
2063
  adapter: KanbanAdapter;
@@ -4331,7 +4556,12 @@ declare function createDefaultKanbanAdapter(config: DefaultKanbanAdapterConfig):
4331
4556
  *
4332
4557
  * 2. `beginStageRun` is a CAS insert keyed on `idemKey` (UNIQUE). It returns
4333
4558
  * `{ created: true, run }` on first insert and `{ created: false, run }`
4334
- * when the key already exists — so a retried dispatch is a no-op.
4559
+ * when a NON-reclaimable run already exists — so a retried dispatch is a
4560
+ * no-op. A `failed` or STALE `queued` run is RE-CLAIMED (reset to `queued`
4561
+ * → `{ created: true }`) so a transient dispatch failure self-heals on the
4562
+ * next sweep (design §10 — stranded-run recovery); a `running`/`completed`
4563
+ * run is never re-claimed. v1 is acyclic-only: the idemKey pins
4564
+ * `(cardId, stageId, version)`, so a re-claim only re-runs a FAILED attempt.
4335
4565
  *
4336
4566
  * 3. `completeStageRun` runs in ONE transaction: mark the stage run completed
4337
4567
  * AND `applyTransition` to `toLane` together; it returns `{ applied: false }`
@@ -4445,11 +4675,42 @@ interface KanbanStorageAdapter {
4445
4675
  */
4446
4676
  capabilities?(): AdapterCapabilities;
4447
4677
  /**
4448
- * CAS-insert a stage-run intent keyed on `idemKey` (UNIQUE).
4449
- *
4450
- * @returns `{ created: true, run }` on first insert; `{ created: false, run }`
4451
- * when the key already exists (the engine treats this as "already
4452
- * dispatched" and does NOT re-invoke the handler).
4678
+ * CAS-insert a stage-run intent keyed on `idemKey` (UNIQUE), with
4679
+ * FAILED/STALE-QUEUED RE-CLAIM (design §10 — stranded-run recovery).
4680
+ *
4681
+ * @returns `{ created: true, run }` when this call OWNS the dispatch — either
4682
+ * a first insert, OR a RE-CLAIM of an existing run left `failed` (a prior
4683
+ * dispatch threw → `failStageRun`) or stale `queued` (a process died between
4684
+ * begin and dispatch): the adapter resets that run to a fresh `queued` intent
4685
+ * (clearing the stale error/executionUuid, bumping `attempts`) and the engine
4686
+ * dispatches again. `{ created: false, run }` when a NON-reclaimable run
4687
+ * already exists (`running` — mid-flight; or `completed`) — the engine treats
4688
+ * this as "already dispatched"/terminal and does NOT re-invoke the handler.
4689
+ *
4690
+ * A host implements the re-claim as a single conditional write (e.g. an
4691
+ * `UPDATE stage_run SET status='queued', attempts=attempts+1, created_at=now(),
4692
+ * error=NULL, execution_uuid=NULL WHERE idem_key=$1 AND (status='failed' OR
4693
+ * (status='queued' AND created_at < $stale)) RETURNING …`, alongside the plain
4694
+ * CAS insert).
4695
+ *
4696
+ * ⚠ CRITICAL for the "two overlapping ticks never both win" guarantee: the SET
4697
+ * MUST move the row OUT of its own WHERE range — reset the `created_at`
4698
+ * discriminator (as shown). Under READ COMMITTED, a concurrent tick's UPDATE
4699
+ * blocks on the row lock, then RE-CHECKS its WHERE against the just-committed
4700
+ * row: with `created_at=now()` the stale-queued predicate no longer matches, so
4701
+ * it updates 0 rows (RETURNING empty → `created:false`). A naive
4702
+ * `SET status='queued'` that leaves `created_at` UNCHANGED is the trap — both
4703
+ * ticks still match the same stale `queued` row and BOTH re-dispatch. (The
4704
+ * in-memory reference adapter resets `createdAt` for exactly this reason.)
4705
+ * Equivalently, claim via a `SELECT … FOR UPDATE SKIP LOCKED` subselect. The
4706
+ * staleness horizon MUST comfortably exceed the host's dispatch timeout so a
4707
+ * genuinely in-flight `queued` row (mid dispatch call) is never re-claimed out
4708
+ * from under it.
4709
+ *
4710
+ * v1 scope is ACYCLIC flows only: because the idemKey embeds
4711
+ * `(cardId, stageId, version)`, a card can never legitimately re-enter the same
4712
+ * stage at the same version, so a re-claim only ever re-runs a FAILED attempt
4713
+ * of the current stage — it never re-executes a completed one.
4453
4714
  */
4454
4715
  beginStageRun(cardId: string, r: {
4455
4716
  stageId: string;
@@ -4476,7 +4737,12 @@ interface KanbanStorageAdapter {
4476
4737
  applied: boolean;
4477
4738
  }>;
4478
4739
  /**
4479
- * Mark a stage run failed (surfaced + retryable). Does NOT advance the card.
4740
+ * Mark a stage run failed (surfaced). Does NOT advance the card — it stays in
4741
+ * its lane. The engine calls this when a stage DISPATCH throws (design §10 —
4742
+ * stranded-run recovery), so the run is left `failed` (NOT a stranded `queued`
4743
+ * row the CAS would skip forever) and is RE-CLAIMED by the next
4744
+ * `beginStageRun` on the following sweep. A `completed` run is never clobbered
4745
+ * (a late failure after a success is a no-op — idempotent).
4480
4746
  */
4481
4747
  failStageRun(idemKey: string, f: {
4482
4748
  error: string;
@@ -4496,4 +4762,4 @@ interface KanbanStorageAdapter {
4496
4762
  getStageRun(idemKey: string): Promise<StageRun | null>;
4497
4763
  }
4498
4764
 
4499
- export { type Actor, type AdapterCapabilities, AgentBoard, type AgentBoardCardSource, type AgentBoardProps, type ApplyTransitionInput, BoardConfigClient, type BoardConfigClientOptions, type BoardConfigHttp, CadraLifecycleSource, CardDrawer, type CardDrawerProps, type CardList, type CreateCardInput, type CreateCardServerInput, type DefaultKanbanAdapterConfig, type DueRule, type KanbanActorType, type KanbanAdapter, KanbanBoard, type KanbanBoard$1 as KanbanBoardData, type KanbanBoardProps, type KanbanCard$1 as KanbanCard, type KanbanCardProps, KanbanCard as KanbanCardTile, KanbanColumn, type KanbanColumnProps, type KanbanHandlerType, type KanbanLane, type KanbanLaneDispatch, type KanbanLaneHandler, type KanbanLaneTrigger, type KanbanRunStatus, type KanbanRunSummary, type KanbanStorageAdapter, type KanbanTransition, type KanbanWebhookBinding, type LifecycleRef, type LifecycleSource, type LifecycleSourceKind, type ListCardsInput, type ResolveLifecycleRef, type ResolvedBoardConfig, type ResolvedLifecycle, type Stage, type StageRun, type StageRunStatus, type Transition, type TransitionCardInput, type TransitionLogEntry, type UseCardRunOptions, type UseCardRunResult, type UseKanbanBoardOptions, type UseKanbanBoardResult, createDefaultKanbanAdapter, mapDefinitionToBoard, toResolvedLifecycle, useCardRun, useKanbanBoard };
4765
+ export { type Actor, type AdapterCapabilities, AgentBoard, type AgentBoardCardSource, type AgentBoardProps, type ApplyTransitionInput, type BadgeVariant, BoardConfigClient, type BoardConfigClientOptions, type BoardConfigHttp, CadraLifecycleSource, CapMeter, type CapMeterProps, CardDrawer, type CardDrawerProps, type CardList, type CreateCardInput, type CreateCardServerInput, type DefaultKanbanAdapterConfig, type DueRule, type DueState, type KanbanActorType, type KanbanAdapter, KanbanBoard, type KanbanBoard$1 as KanbanBoardData, type KanbanBoardProps, type KanbanCard$1 as KanbanCard, type KanbanCardProps, KanbanCard as KanbanCardTile, KanbanColumn, type KanbanColumnProps, type KanbanHandlerType, type KanbanLane, type KanbanLaneDispatch, type KanbanLaneHandler, type KanbanLaneTrigger, type KanbanRunStatus, type KanbanRunSummary, type KanbanStorageAdapter, type KanbanTransition, type KanbanWebhookBinding, type LaneAgentKind, type LaneAgentOption, LaneAgentPicker, type LaneAgentPickerProps, type LifecycleRef, type LifecycleSource, type LifecycleSourceKind, type ListCardsInput, type ResolveLifecycleRef, type ResolvedBoardConfig, type ResolvedLifecycle, ScheduleStatus, type ScheduleStatusProps, type Stage, type StageRun, type StageRunStatus, type Transition, type TransitionCardInput, type TransitionLogEntry, type UseCardRunOptions, type UseCardRunResult, type UseKanbanBoardOptions, type UseKanbanBoardResult, badgeVariantClass, cn, createDefaultKanbanAdapter, mapDefinitionToBoard, runStatusTone, toResolvedLifecycle, useCardRun, useKanbanBoard };