busa-sdk 0.95.0 → 0.96.0

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.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as AssetTextStatus, $t as NodeType, A as NodeVO, At as GalleryCardSize, B as UpdatePreviewFileCredentialDTO, Bt as ViewSortVO, C as CommentVO, Ct as ListFormsDTO, D as MentionInboxItemVO, Dt as AssetAttachmentRef, E as LookupRollup, Et as UpdateFormDTO, F as SearchResponseVO, Ft as VIEW_FIELD_MAX_WIDTH, G as VaultItemKind, Gt as CloudContract, H as VaultAccessPolicy, Ht as ViewVO, I as SearchResultKind, It as VIEW_FIELD_MIN_WIDTH, J as VaultScopeType, Jt as NodeIconSchema, K as VaultItemVO, Kt as cloudContract, L as SearchResultVO, Lt as ViewConfigVO, M as OperationVO, Mt as GanttScale, N as ReviewVO, Nt as RecordLinkVO, O as MentionInboxPageVO, Ot as BaseFieldVO, P as ReviewVerdict, Pt as RecordVO, Q as AssetDetailVO, Qt as CreatableNodeType, R as SourceAttributionVO, Rt as ViewFilterOperator, S as CommentSubjectType, St as FormVO, T as FieldType, Tt as SubmitFormDTO, U as VaultEnvironment, Ut as AttachmentRef, V as UpdateVaultSettingsDTO, Vt as ViewType, W as VaultItemInput, Wt as PlaybookAttributionVO, X as FileNodeMetadata, Xt as resolveNodeIconSource, Y as VaultSettingsVO, Yt as NodeIconSource, Z as FileNodeVO, Zt as CREATABLE_NODE_TYPES, _ as ChangeRequestVO, _t as FormFieldBindingVO, a as createBusabaseClient, at as FilePreviewConfigurationStatus, b as CommentMentionTargetType, bt as FormSubmitResultVO, c as AuditAction, ct as FilePreviewUnavailableReason, d as ChangeRequestBatchFailureVO, dt as FileTreeNodeVO, en as OperationKind, et as AssetUsageVO, f as ChangeRequestCountsVO, ft as FileTreeReadFileVO, g as ChangeRequestTargetType, gt as FormBoundFieldVO, h as ChangeRequestStatus, ht as CreateFormDTO, i as ResolvedConfig, it as FilePreviewConfigVO, j as OperationStatus, jt as GalleryCoverFit, k as NodeSearchResultVO, kt as BaseVO, l as AuditEventVO, lt as FilePreviewVO, m as ChangeRequestReviewBatchResultVO, mt as ActivityItemVO, n as BusabaseConfig, nt as GrepInputDTO, o as resolveConfig, ot as FilePreviewCredentialSource, p as ChangeRequestMergeBatchResultVO, pt as NodeDetailVO, q as VaultRuntimeEnv, qt as NodeIcon, r as DEFAULT_BASE_URL, rt as GrepResultVO, s as AgentTaskVO, st as FilePreviewProvider, t as BusabaseClient, tt as AssetVO, u as BusabaseSourceChannel, ut as FileTreeFileVO, v as CommentMentionDispatchStatus, vt as FormPageSourceVO, w as CommitVO, wt as ListFormsVO, x as CommentMentionVO, xt as FormThemeVO, y as CommentMentionInputDTO, yt as FormShareVO, z as UserRefVO, zt as ViewFilterVO } from "./client-BlHnsVv8.js";
1
+ import { $ as AssetDetailVO, $t as CreatableNodeType, A as NodeVO, At as BaseVO, B as UserRefVO, Bt as ViewFilterVO, C as CommentVO, Ct as FormVO, D as MentionInboxItemVO, Dt as UpdateFormDTO, E as LookupRollup, Et as SubmitFormDTO, F as ReviewVerdict, Ft as RecordVO, G as VaultItemInput, Gt as PlaybookAttributionVO, H as UpdateVaultSettingsDTO, Ht as ViewType, I as SearchResponseVO, It as VIEW_FIELD_MAX_WIDTH, J as VaultRuntimeEnv, Jt as NodeIcon, K as VaultItemKind, Kt as CloudContract, L as SearchResultKind, Lt as VIEW_FIELD_MIN_WIDTH, M as OperationVO, Mt as GalleryCoverFit, N as RestoredSlugChangeVO, Nt as GanttScale, O as MentionInboxPageVO, Ot as AssetAttachmentRef, P as ReviewVO, Pt as RecordLinkVO, Q as FileNodeVO, Qt as CREATABLE_NODE_TYPES, R as SearchResultVO, Rt as ViewConfigVO, S as CommentSubjectType, St as FormThemeVO, T as FieldType, Tt as ListFormsVO, U as VaultAccessPolicy, Ut as ViewVO, V as UpdatePreviewFileCredentialDTO, Vt as ViewSortVO, W as VaultEnvironment, Wt as AttachmentRef, X as VaultSettingsVO, Xt as NodeIconSource, Y as VaultScopeType, Yt as NodeIconSchema, Z as FileNodeMetadata, Zt as resolveNodeIconSource, _ as ChangeRequestVO, _t as FormBoundFieldVO, a as createBusabaseClient, at as FilePreviewConfigVO, b as CommentMentionTargetType, bt as FormShareVO, c as AuditAction, ct as FilePreviewProvider, d as ChangeRequestBatchFailureVO, dt as FileTreeFileVO, en as NodeType, et as AssetTextStatus, f as ChangeRequestCountsVO, ft as FileTreeNodeVO, g as ChangeRequestTargetType, gt as CreateFormDTO, h as ChangeRequestStatus, ht as ActivityItemVO, i as ResolvedConfig, it as GrepResultVO, j as OperationStatus, jt as GalleryCardSize, k as NodeSearchResultVO, kt as BaseFieldVO, l as AuditEventVO, lt as FilePreviewUnavailableReason, m as ChangeRequestReviewBatchResultVO, mt as NodeDetailVO, n as BusabaseConfig, nt as AssetVO, o as resolveConfig, ot as FilePreviewConfigurationStatus, p as ChangeRequestMergeBatchResultVO, pt as FileTreeReadFileVO, q as VaultItemVO, qt as cloudContract, r as DEFAULT_BASE_URL, rt as GrepInputDTO, s as AgentTaskVO, st as FilePreviewCredentialSource, t as BusabaseClient, tn as OperationKind, tt as AssetUsageVO, u as BusabaseSourceChannel, ut as FilePreviewVO, v as CommentMentionDispatchStatus, vt as FormFieldBindingVO, w as CommitVO, wt as ListFormsDTO, x as CommentMentionVO, xt as FormSubmitResultVO, y as CommentMentionInputDTO, yt as FormPageSourceVO, z as SourceAttributionVO, zt as ViewFilterOperator } from "./client-CfuVCvxi.js";
2
2
  import { z } from "zod";
3
3
  //#region src/url.d.ts
4
4
  /**
@@ -567,4 +567,4 @@ declare class Busabase {
567
567
  }>>>>;
568
568
  }
569
569
  //#endregion
570
- export { type ActivityItemVO, type AgentTaskVO, type FileTreeFileVO as AirAppFileVO, type FileTreeFileVO as DriveFileVO, type FileTreeFileVO, type FileTreeFileVO as SkillFileVO, type FileTreeReadFileVO as AirAppReadFileVO, type FileTreeReadFileVO as DriveReadFileVO, type FileTreeReadFileVO, type FileTreeReadFileVO as SkillReadFileVO, type FileTreeNodeVO as AirAppVO, type FileTreeNodeVO as DriveVO, type FileTreeNodeVO, type FileTreeNodeVO as SkillVO, type AssetAttachmentRef, type AssetDetailVO, type AssetTextStatus, type AssetUsageVO, type AssetVO, type AttachmentRef, type AuditAction, type AuditEventVO, type BaseFieldVO, type BaseVO, Busabase, type BusabaseAssetsClient, BusabaseChangeRequestsClient, type BusabaseClient, type BusabaseConfig, type BusabaseRecordsClient, type BusabaseSourceChannel, type BusabaseUploadedAsset, CREATABLE_NODE_TYPES, type ChangeRequestBatchFailureVO, type ChangeRequestCountsVO, type ChangeRequestMergeBatchResultVO, type ChangeRequestReviewBatchResultVO, type ChangeRequestStatus, type ChangeRequestTargetType, type ChangeRequestVO, type CloudContract, type CommentMentionDispatchStatus, type CommentMentionInputDTO, type CommentMentionTargetType, type CommentMentionVO, type CommentSubjectType, type CommentVO, type CommitVO, type CreatableNodeType, type CreateFormDTO, DEFAULT_BASE_URL, type FieldType, type FileNodeMetadata, type FileNodeVO, type FilePreviewConfigVO, type FilePreviewConfigurationStatus, type FilePreviewCredentialSource, type FilePreviewProvider, type FilePreviewUnavailableReason, type FilePreviewVO, type FormBoundFieldVO, type FormFieldBindingVO, type FormPageSourceVO, type FormShareVO, type FormSubmitResultVO, type FormThemeVO, type FormVO, type GalleryCardSize, type GalleryCoverFit, type GanttScale, type ListFormsDTO, type ListFormsVO, type LookupRollup, type MentionInboxItemVO, type MentionInboxPageVO, type NodeDetailVO, type NodeIcon, type NodeIconSchema, type NodeIconSource, type NodeSearchResultVO, type NodeType, type NodeVO, type NodeWebUrlInput, type OperationKind, type OperationStatus, type OperationVO, type PlaybookAttributionVO, type RecordByFieldInput, type RecordLinkVO, type RecordVO, type ResolvedConfig, type ReviewVO, type ReviewVerdict, type SearchResponseVO, type SearchResultKind, type SearchResultVO, type SourceAttributionVO, type SubmitFormDTO, type UpdateFormDTO, type UpdatePreviewFileCredentialDTO, type UpdateVaultSettingsDTO, type UploadAssetOptions, type UserRefVO, type VIEW_FIELD_MAX_WIDTH, type VIEW_FIELD_MIN_WIDTH, type VaultAccessPolicy, type VaultEnvironment, type VaultItemInput, type VaultItemKind, type VaultItemVO, type VaultRuntimeEnv, type VaultScopeType, type VaultSettingsVO, type ViewConfigVO, type ViewFilterOperator, type ViewFilterVO, type ViewSortVO, type ViewType, type ViewVO, cloudContract, createBusabaseClient, getRecordByField, grepAssets, hashBytes, nodeWebUrl, normalizeBaseUrl, resolveConfig, type resolveNodeIconSource, toFilesOnlyGrepResult, toUnifiedFilesGrepInput, uploadAsset };
570
+ export { type ActivityItemVO, type AgentTaskVO, type FileTreeFileVO as AirAppFileVO, type FileTreeFileVO as DriveFileVO, type FileTreeFileVO, type FileTreeFileVO as SkillFileVO, type FileTreeReadFileVO as AirAppReadFileVO, type FileTreeReadFileVO as DriveReadFileVO, type FileTreeReadFileVO, type FileTreeReadFileVO as SkillReadFileVO, type FileTreeNodeVO as AirAppVO, type FileTreeNodeVO as DriveVO, type FileTreeNodeVO, type FileTreeNodeVO as SkillVO, type AssetAttachmentRef, type AssetDetailVO, type AssetTextStatus, type AssetUsageVO, type AssetVO, type AttachmentRef, type AuditAction, type AuditEventVO, type BaseFieldVO, type BaseVO, Busabase, type BusabaseAssetsClient, BusabaseChangeRequestsClient, type BusabaseClient, type BusabaseConfig, type BusabaseRecordsClient, type BusabaseSourceChannel, type BusabaseUploadedAsset, CREATABLE_NODE_TYPES, type ChangeRequestBatchFailureVO, type ChangeRequestCountsVO, type ChangeRequestMergeBatchResultVO, type ChangeRequestReviewBatchResultVO, type ChangeRequestStatus, type ChangeRequestTargetType, type ChangeRequestVO, type CloudContract, type CommentMentionDispatchStatus, type CommentMentionInputDTO, type CommentMentionTargetType, type CommentMentionVO, type CommentSubjectType, type CommentVO, type CommitVO, type CreatableNodeType, type CreateFormDTO, DEFAULT_BASE_URL, type FieldType, type FileNodeMetadata, type FileNodeVO, type FilePreviewConfigVO, type FilePreviewConfigurationStatus, type FilePreviewCredentialSource, type FilePreviewProvider, type FilePreviewUnavailableReason, type FilePreviewVO, type FormBoundFieldVO, type FormFieldBindingVO, type FormPageSourceVO, type FormShareVO, type FormSubmitResultVO, type FormThemeVO, type FormVO, type GalleryCardSize, type GalleryCoverFit, type GanttScale, type ListFormsDTO, type ListFormsVO, type LookupRollup, type MentionInboxItemVO, type MentionInboxPageVO, type NodeDetailVO, type NodeIcon, type NodeIconSchema, type NodeIconSource, type NodeSearchResultVO, type NodeType, type NodeVO, type NodeWebUrlInput, type OperationKind, type OperationStatus, type OperationVO, type PlaybookAttributionVO, type RecordByFieldInput, type RecordLinkVO, type RecordVO, type ResolvedConfig, type RestoredSlugChangeVO, type ReviewVO, type ReviewVerdict, type SearchResponseVO, type SearchResultKind, type SearchResultVO, type SourceAttributionVO, type SubmitFormDTO, type UpdateFormDTO, type UpdatePreviewFileCredentialDTO, type UpdateVaultSettingsDTO, type UploadAssetOptions, type UserRefVO, type VIEW_FIELD_MAX_WIDTH, type VIEW_FIELD_MIN_WIDTH, type VaultAccessPolicy, type VaultEnvironment, type VaultItemInput, type VaultItemKind, type VaultItemVO, type VaultRuntimeEnv, type VaultScopeType, type VaultSettingsVO, type ViewConfigVO, type ViewFilterOperator, type ViewFilterVO, type ViewSortVO, type ViewType, type ViewVO, cloudContract, createBusabaseClient, getRecordByField, grepAssets, hashBytes, nodeWebUrl, normalizeBaseUrl, resolveConfig, type resolveNodeIconSource, toFilesOnlyGrepResult, toUnifiedFilesGrepInput, uploadAsset };
package/dist/index.js CHANGED
@@ -58,17 +58,42 @@ const toFilesOnlyGrepResult = (result) => ({
58
58
  });
59
59
  /** Call unified grep as files-only while preserving the former asset helper result shape. */
60
60
  const grepAssets = async (client, input) => toFilesOnlyGrepResult(await client.grep(toUnifiedFilesGrepInput(input)));
61
- //#endregion
62
- //#region ../../packages/busabase-contract/src/domains/agents/types.ts
63
- /**
64
- * Agents domain — DTO (inputs) and VO (outputs) for driving EXTERNAL ACP agents.
65
- *
66
- * Standalone zod only: no drizzle, no `~/db`, no server imports. These types are
67
- * pulled into the browser bundle and the mobile client is generated from them.
68
- *
69
- * Vocabulary note: an "agent" here is a *backend we connect out to* (Claude Code,
70
- * Codex, a remote Buda agent), NOT one of Busabase's own nodes.
71
- */
61
+ z.object({ redirectUrl: z.string() });
62
+ z.object({
63
+ grantId: z.string(),
64
+ acprouterSpaceName: z.string()
65
+ });
66
+ const RouterGrantVOSchema = z.object({
67
+ grantId: z.string(),
68
+ spaceName: z.string()
69
+ });
70
+ const RouterEnrollmentInputSchema = z.object({
71
+ grantId: z.string().min(1),
72
+ enrollmentId: z.string().min(1)
73
+ });
74
+ const RouterEnrollmentMintInputSchema = z.object({
75
+ grantId: z.string().min(1),
76
+ agentSlug: z.enum(["claude-acp", "codex-acp"])
77
+ });
78
+ const RouterEnrollmentMintVOSchema = z.object({
79
+ enrollmentId: z.string(),
80
+ command: z.string(),
81
+ expiresAt: z.string()
82
+ });
83
+ const RouterEnrollmentStatusVOSchema = z.object({
84
+ state: z.enum([
85
+ "not_redeemed",
86
+ "redeemed_offline",
87
+ "online",
88
+ "failed"
89
+ ]),
90
+ machineId: z.string().optional()
91
+ });
92
+ const RouterEnrollmentCompleteInputSchema = RouterEnrollmentInputSchema.extend({ agentSlug: z.enum(["claude-acp", "codex-acp"]) });
93
+ const RouterEnrollmentConnectionVOSchema = z.object({
94
+ connectionSlug: z.string(),
95
+ agentSlug: z.string()
96
+ });
72
97
  /**
73
98
  * How a backend is reached. This is the axis that decides everything else:
74
99
  * `local-subprocess` runs on whichever machine serves the request (the user's
@@ -182,6 +207,11 @@ const AgentConnectionVOSchema = z.object({
182
207
  latest: AgentSessionVOSchema.nullable(),
183
208
  /** Whether Busabase can start another conversation with this agent right now. */
184
209
  connected: z.boolean(),
210
+ connectionState: z.enum([
211
+ "ready",
212
+ "activating",
213
+ "disconnecting"
214
+ ]).optional(),
185
215
  /** Controls owner-only actions such as deleting the saved OAuth grant. */
186
216
  ownedByCurrentUser: z.boolean()
187
217
  });
@@ -279,6 +309,13 @@ const SetAgentSessionConfigOptionInputSchema = z.object({
279
309
  * matching how `live.subscribe` is declared.
280
310
  */
281
311
  const agentsContract = {
312
+ routerEnrollment: {
313
+ grants: oc.output(RouterGrantVOSchema.array()),
314
+ mint: oc.input(RouterEnrollmentMintInputSchema).output(RouterEnrollmentMintVOSchema),
315
+ status: oc.input(RouterEnrollmentInputSchema).output(RouterEnrollmentStatusVOSchema),
316
+ complete: oc.input(RouterEnrollmentCompleteInputSchema).output(RouterEnrollmentConnectionVOSchema),
317
+ cancel: oc.input(RouterEnrollmentInputSchema).output(z.object({ ok: z.boolean() }))
318
+ },
282
319
  /** Connectable backends. Availability is resolved per request, not cached in the client. */
283
320
  catalog: oc.output(AgentCatalogEntryVOSchema.array()),
284
321
  disconnect: oc.input(DisconnectAgentInputSchema).output(z.object({
@@ -512,7 +549,13 @@ const lookupRollupSchema = z.enum([
512
549
  "max",
513
550
  "concatenate"
514
551
  ]).default("values");
552
+ /** Public, plain-text guidance. Examples are hints, never default record values. */
553
+ const fieldHelpSchema = z.object({
554
+ description: z.string().max(1e3).optional(),
555
+ example: z.string().max(200).optional()
556
+ });
515
557
  const fieldOptionsSchema = z.object({
558
+ help: fieldHelpSchema.optional(),
516
559
  ai: z.object({
517
560
  model: z.string().optional(),
518
561
  prompt: z.string().optional(),
@@ -543,7 +586,18 @@ const fieldOptionsSchema = z.object({
543
586
  height: z.number().int().positive().max(1200).optional(),
544
587
  providers: z.array(z.string()).optional()
545
588
  }).optional(),
546
- formula: z.object({ expression: z.string().min(1) }).optional(),
589
+ formula: z.object({
590
+ expression: z.string().min(1),
591
+ format: z.enum([
592
+ "auto",
593
+ "number",
594
+ "currency",
595
+ "percent",
596
+ "date"
597
+ ]).optional(),
598
+ precision: z.number().int().min(0).max(10).optional(),
599
+ currency: z.string().regex(/^[A-Z]{3}$/).optional()
600
+ }).optional(),
547
601
  inverseFieldId: z.string().optional(),
548
602
  lookup: z.object({
549
603
  relationFieldSlug: z.string().min(1).describe("Slug of a `relation` field on THIS Base — the hop to follow."),
@@ -633,7 +687,9 @@ const updateFieldChangeRequestInputSchema = z.object({
633
687
  patch: z.object({
634
688
  name: fieldNameSchema.optional(),
635
689
  required: z.boolean().optional(),
636
- options: fieldOptionsSchema.optional(),
690
+ options: fieldOptionsSchema.removeDefault().optional(),
691
+ /** Applied against current options at merge time; null removes all guidance. */
692
+ help: fieldHelpSchema.nullable().optional(),
637
693
  /**
638
694
  * Not a patch key — rejected on purpose, and the only key here that is.
639
695
  *
@@ -1900,7 +1956,7 @@ const changeRequestSchema = z.object({
1900
1956
  sourceAttribution: sourceAttributionSchema.nullable().optional(),
1901
1957
  sourceMeta: z.record(z.string(), z.unknown()),
1902
1958
  reviewPolicySnapshot: z.record(z.string(), z.unknown()),
1903
- mergeSummary: z.record(z.string(), z.unknown()),
1959
+ mergeSummary: z.record(z.string(), z.unknown()).describe("Filled in when the change request merges. `slugChanges` (present only when non-empty) lists items a restore brought back under a new slug because another item took the old one while they were in the Trash: `{ nodeId, nodeType, name, fromSlug, toSlug }`. Read the new slug from here instead of assuming the old one."),
1904
1960
  rejectedReason: z.string().nullable(),
1905
1961
  reviewedAt: z.string().nullable(),
1906
1962
  mergedAt: z.string().nullable(),
@@ -2413,7 +2469,7 @@ const createFileTreeInputSchema = z.object({
2413
2469
  "private",
2414
2470
  "workspace",
2415
2471
  "public"
2416
- ]).optional().default("private"),
2472
+ ]).optional(),
2417
2473
  version: z.string().optional().default("0.1.0"),
2418
2474
  /**
2419
2475
  * Extra node metadata, stored alongside the server-owned keys.
@@ -3246,6 +3302,11 @@ const listRecordsInputSchema = z.object({
3246
3302
  baseId: z.string().optional().describe("Restrict to one Base. OMITTING it lists records across the WHOLE SPACE, which is rarely what a caller means and is easy to miss — every other parameter still applies, so an unscoped query looks like it worked."),
3247
3303
  cursor: z.string().optional().describe("Opaque page cursor: pass back the `nextCursor` from the previous response. Do not construct or parse it — it is keyed on `createdAt`, or on the sort field when `sort` is given, and that is an implementation detail."),
3248
3304
  status: z.enum(["active", "archived"]).optional().default("active").describe("`active` is the live table; `archived` is the Base's trash."),
3305
+ summary: z.union([
3306
+ z.boolean(),
3307
+ z.literal("true"),
3308
+ z.literal("false")
3309
+ ]).transform((value) => value === true || value === "true").optional().describe("Return compact list previews: field values larger than 4 KB are replaced with omission markers, and Base field definitions and computed lookup values are omitted. Omit for full records; use records.get to read the complete content of a selected row."),
3249
3310
  filters: z.array(listRecordsFilterSchema).optional().describe("View filters — a best-effort SUPERSET, not an exact answer. They mean what the grid means (a currency number reads as \"$1,234.00\", a select as its choice label), and the server may return records that do not match, so the caller must narrow them again and must NOT trust `limit` alongside them. Use `valueFilters` when you need an exact row set."),
3250
3311
  /**
3251
3312
  * Exact value comparisons. Unlike `filters` these are authoritative — the
@@ -3299,6 +3360,16 @@ const listRecordsPageInputSchema = z.object({
3299
3360
  gte: z.string().describe("Inclusive lower bound, ISO 8601 UTC instant."),
3300
3361
  lt: z.string().describe("EXCLUSIVE upper bound, ISO 8601 UTC instant.")
3301
3362
  }).optional().describe("Scope the page to a `date`/`created_time`/`updated_time` field falling in `[gte, lt)` — a half-open range of absolute UTC instants, not a `filters` condition. Resolve the bounds yourself: a day or a month only means something in a timezone, and the server does not know the viewer's."),
3363
+ /**
3364
+ * The same one-field sort `records.list` takes, with the same semantics —
3365
+ * so an app can jump straight to page N of "newest follow-up first" without
3366
+ * creating a View in the user's Base or walking a cursor through every page.
3367
+ *
3368
+ * It REPLACES the View's saved sort when both are given (the View's filters
3369
+ * still apply). Ties on the value are broken by record id, so consecutive
3370
+ * pages never overlap or skip a record.
3371
+ */
3372
+ sort: listRecordsSortSchema.optional().describe("Sort by one field. Only number and date fields sort authoritatively (their typed value column matches a client's own ordering); any other field type is returned in the default order and left for the caller to sort. Replaces the saved View's sort when `viewId` is also given (the View's filters still apply). Empty values sort last; ties are broken by record id, so pages never overlap."),
3302
3373
  page: z.coerce.number().int().min(1).optional().default(1).describe("1-indexed, not 0-indexed."),
3303
3374
  pageSize: z.coerce.number().int().min(1).max(100).optional().default(50).describe("Records per page. Capped at 100.")
3304
3375
  });
@@ -3562,8 +3633,8 @@ const baseContract = {
3562
3633
  path: "/bases",
3563
3634
  tags: ["Bases"],
3564
3635
  summary: "List Bases",
3565
- successDescription: "Developer-facing Bases. `status=archived` returns the archived ones instead of the active ones."
3566
- }).input(listByStatusInputSchema).output(z.array(baseSchema)),
3636
+ successDescription: "Developer-facing Bases. `status=archived` returns the archived ones instead of the active ones. `fields=links` trims each Base to its relation and lookup fields."
3637
+ }).input(listByStatusInputSchema.extend({ fields: z.enum(["all", "links"]).optional().default("all").describe("`all` (default): every live field. `links`: only relation and lookup fields — enough to see how Bases connect (relation targets, lookups, inverse relations) across a large space, not to read or edit records. Fetch one Base with `bases.get` for its full schema.") })).output(z.array(baseSchema)),
3567
3638
  get: oc.route({
3568
3639
  method: "GET",
3569
3640
  path: "/bases/{baseId}",
@@ -3639,7 +3710,7 @@ const baseContract = {
3639
3710
  path: "/bases/{baseId}/lifecycle/change-requests",
3640
3711
  tags: ["Bases", "Change Requests"],
3641
3712
  summary: "Create Base lifecycle change request",
3642
- successDescription: "Created change request that moves a Base between its lifecycle states. `operation` selects the direction: `archive` (soft-delete a live Base) or `restore` (bring an archived Base back)."
3713
+ successDescription: "Created change request that moves a Base between its lifecycle states. `operation` selects the direction: `archive` (soft-delete a live Base) or `restore` (bring an archived Base back). If another Base took the slug while this one was archived, the restore brings it back under the next free slug (`tasks-2`) and lists the change in `mergeSummary.slugChanges`."
3643
3714
  }).input(baseLifecycleChangeRequestInputSchema).output(changeRequestSchema)
3644
3715
  };
3645
3716
  const recordContract = {
@@ -3655,7 +3726,7 @@ const recordContract = {
3655
3726
  path: "/records/page",
3656
3727
  tags: ["Records"],
3657
3728
  summary: "List a numbered record page",
3658
- successDescription: "A random-access page of active records. When viewId is supplied, the saved view is authoritatively filtered and sorted before total and page slicing are calculated. `dateRange` additionally scopes to a `[gte, lt)` UTC instant window on a date/created_time/updated_time field."
3729
+ successDescription: "A random-access page of active records. When viewId is supplied, the saved view is authoritatively filtered and sorted before total and page slicing are calculated. An explicit `sort` (same shape as `records.list`'s) replaces the View's sort, so page N of a number- or date-sorted list is one request. `dateRange` additionally scopes to a `[gte, lt)` UTC instant window on a date/created_time/updated_time field."
3659
3730
  }).input(listRecordsPageInputSchema).output(listRecordsPageResponseSchema),
3660
3731
  count: oc.route({
3661
3732
  method: "GET",
@@ -4045,6 +4116,7 @@ const FormBoundFieldSchema = z.object({
4045
4116
  slug: z.string(),
4046
4117
  name: fieldNameSchema,
4047
4118
  type: fieldTypeSchema,
4119
+ help: fieldHelpSchema.optional(),
4048
4120
  choices: z.array(z.object({
4049
4121
  id: z.string(),
4050
4122
  name: z.string()
@@ -5691,6 +5763,7 @@ const busabaseContractRoutes = {
5691
5763
  path: "/embed-links",
5692
5764
  tags: ["Embed Links"],
5693
5765
  summary: "Create a polymorphic read-only embed link",
5766
+ description: "Record detail requires write on the owning Base node; change requests require changeRequest on every affected node; whole-node links require manage. Listing and revoking links require manage.",
5694
5767
  successDescription: "The capability URL is returned once; only its secret hash is stored."
5695
5768
  }).errors(embedLinkErrors).input(CreateEmbedLinkInputSchema).output(CreatedEmbedLinkVOSchema),
5696
5769
  list: oc.route({
@@ -6090,6 +6163,7 @@ members: oc.output(z.array(userRefSchema)) },
6090
6163
  successDescription: "A random-access page of change requests plus the total across the whole filter. Same `status`, `mine`, and `affectsNodeId` filters as the cursor listing."
6091
6164
  }).input(listChangeRequestsPageInputSchema).output(listChangeRequestsPageResponseSchema),
6092
6165
  inboxSnapshot: oc.input(inboxSnapshotInputSchema).output(inboxSnapshotResponseSchema),
6166
+ reviewCount: oc.output(z.object({ review: z.number().int().min(0) })),
6093
6167
  counts: oc.route({
6094
6168
  method: "GET",
6095
6169
  path: "/change-requests/counts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "busa-sdk",
3
- "version": "0.95.0",
3
+ "version": "0.96.0",
4
4
  "description": "Typed TypeScript/JavaScript SDK for the Busabase OpenAPI REST API. Talks to a local or remote `busabase server` (or Busabase Cloud). Short-name alias for busabase-sdk.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/busabase/busabase/tree/main/apps/busabase-sdk",