busa-cli 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/cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/{run-fBARIIox.js → run-B3hHU9aE.js} +35 -7
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { i as checkForUpdate, n as pkgVersion, r as runCli } from "./run-
|
|
2
|
+
import { i as checkForUpdate, n as pkgVersion, r as runCli } from "./run-B3hHU9aE.js";
|
|
3
3
|
//#region src/flush-stdio.ts
|
|
4
4
|
/**
|
|
5
5
|
* Wait for stdout/stderr to reach the other side before the process is torn down.
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as render, i as checkForUpdate, n as pkgVersion, r as runCli, t as HELP } from "./run-
|
|
1
|
+
import { a as render, i as checkForUpdate, n as pkgVersion, r as runCli, t as HELP } from "./run-B3hHU9aE.js";
|
|
2
2
|
import { DEFAULT_BASE_URL, createBusabaseClient, normalizeBaseUrl } from "busabase-sdk";
|
|
3
3
|
export { DEFAULT_BASE_URL, HELP, checkForUpdate, createBusabaseClient, normalizeBaseUrl, pkgVersion, render, runCli };
|
|
@@ -635,6 +635,7 @@ const baseFieldChangeTask = {
|
|
|
635
635
|
examples: [
|
|
636
636
|
"busabase-cli bases field-change-request --base-id bas_1 --operation add --slug status --name Status --field-type select",
|
|
637
637
|
"busabase-cli bases field-change-request --base-id bas_1 --operation update --field-id fld_1 --patch-json '{\"required\":true}'",
|
|
638
|
+
"busabase-cli bases field-change-request --base-id bas_1 --operation update --field-id fld_1 --patch-json '{\"help\":{\"description\":\"Actual customer acceptance date\",\"example\":\"2026-10-14\"}}'",
|
|
638
639
|
"busabase-cli bases field-change-request --base-id bas_1 --operation reorder --field-ids fld_2 --field-ids fld_1"
|
|
639
640
|
],
|
|
640
641
|
execute: async (client, input) => {
|
|
@@ -2195,7 +2196,7 @@ const nodeCreateTask = {
|
|
|
2195
2196
|
"workspace",
|
|
2196
2197
|
"public"
|
|
2197
2198
|
],
|
|
2198
|
-
description: "Skill/Drive/AirApp only.
|
|
2199
|
+
description: "Skill/Drive/AirApp only. Omit to follow the space default and parent folder, like any other node."
|
|
2199
2200
|
},
|
|
2200
2201
|
{
|
|
2201
2202
|
name: "version",
|
|
@@ -6445,7 +6446,13 @@ const lookupRollupSchema = z.enum([
|
|
|
6445
6446
|
"max",
|
|
6446
6447
|
"concatenate"
|
|
6447
6448
|
]).default("values");
|
|
6449
|
+
/** Public, plain-text guidance. Examples are hints, never default record values. */
|
|
6450
|
+
const fieldHelpSchema = z.object({
|
|
6451
|
+
description: z.string().max(1e3).optional(),
|
|
6452
|
+
example: z.string().max(200).optional()
|
|
6453
|
+
});
|
|
6448
6454
|
const fieldOptionsSchema = z.object({
|
|
6455
|
+
help: fieldHelpSchema.optional(),
|
|
6449
6456
|
ai: z.object({
|
|
6450
6457
|
model: z.string().optional(),
|
|
6451
6458
|
prompt: z.string().optional(),
|
|
@@ -6476,7 +6483,18 @@ const fieldOptionsSchema = z.object({
|
|
|
6476
6483
|
height: z.number().int().positive().max(1200).optional(),
|
|
6477
6484
|
providers: z.array(z.string()).optional()
|
|
6478
6485
|
}).optional(),
|
|
6479
|
-
formula: z.object({
|
|
6486
|
+
formula: z.object({
|
|
6487
|
+
expression: z.string().min(1),
|
|
6488
|
+
format: z.enum([
|
|
6489
|
+
"auto",
|
|
6490
|
+
"number",
|
|
6491
|
+
"currency",
|
|
6492
|
+
"percent",
|
|
6493
|
+
"date"
|
|
6494
|
+
]).optional(),
|
|
6495
|
+
precision: z.number().int().min(0).max(10).optional(),
|
|
6496
|
+
currency: z.string().regex(/^[A-Z]{3}$/).optional()
|
|
6497
|
+
}).optional(),
|
|
6480
6498
|
inverseFieldId: z.string().optional(),
|
|
6481
6499
|
lookup: z.object({
|
|
6482
6500
|
relationFieldSlug: z.string().min(1).describe("Slug of a `relation` field on THIS Base — the hop to follow."),
|
|
@@ -6566,7 +6584,9 @@ const updateFieldChangeRequestInputSchema = z.object({
|
|
|
6566
6584
|
patch: z.object({
|
|
6567
6585
|
name: fieldNameSchema.optional(),
|
|
6568
6586
|
required: z.boolean().optional(),
|
|
6569
|
-
options: fieldOptionsSchema.optional(),
|
|
6587
|
+
options: fieldOptionsSchema.removeDefault().optional(),
|
|
6588
|
+
/** Applied against current options at merge time; null removes all guidance. */
|
|
6589
|
+
help: fieldHelpSchema.nullable().optional(),
|
|
6570
6590
|
/**
|
|
6571
6591
|
* Not a patch key — rejected on purpose, and the only key here that is.
|
|
6572
6592
|
*
|
|
@@ -7102,7 +7122,7 @@ const changeRequestSchema = z.object({
|
|
|
7102
7122
|
sourceAttribution: sourceAttributionSchema.nullable().optional(),
|
|
7103
7123
|
sourceMeta: z.record(z.string(), z.unknown()),
|
|
7104
7124
|
reviewPolicySnapshot: z.record(z.string(), z.unknown()),
|
|
7105
|
-
mergeSummary: z.record(z.string(), z.unknown()),
|
|
7125
|
+
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."),
|
|
7106
7126
|
rejectedReason: z.string().nullable(),
|
|
7107
7127
|
reviewedAt: z.string().nullable(),
|
|
7108
7128
|
mergedAt: z.string().nullable(),
|
|
@@ -7872,6 +7892,7 @@ const PackageDocFrontmatterSchema = z.object({
|
|
|
7872
7892
|
* so choice ids survive and record values referencing them need no remap.
|
|
7873
7893
|
*/
|
|
7874
7894
|
const PackageFieldOptionsSchema = z.object({
|
|
7895
|
+
help: fieldHelpSchema.optional(),
|
|
7875
7896
|
ai: z.object({
|
|
7876
7897
|
model: z.string().optional(),
|
|
7877
7898
|
prompt: z.string().optional(),
|
|
@@ -9647,7 +9668,7 @@ const applyAgentPrompts = async (client, nodeId, node, state) => {
|
|
|
9647
9668
|
const agentPrompts = node.agentPrompts;
|
|
9648
9669
|
if (!agentPrompts?.length) return;
|
|
9649
9670
|
if (!nodeId) {
|
|
9650
|
-
state.warnings.push(`"${node.slug}" installs as a change request, so its ${agentPrompts.length} agent prompt(s) were not applied. After merging it, run \`busabase-cli nodes set-agent-prompts\` for that node, or re-install
|
|
9671
|
+
state.warnings.push(`"${node.slug}" installs as a change request, so its ${agentPrompts.length} agent prompt(s) were not applied. After merging it, run \`busabase-cli nodes set-agent-prompts\` for that node, or re-install without asking for review (drop --require-review, or leave "Send the content for review first" off).`);
|
|
9651
9672
|
return;
|
|
9652
9673
|
}
|
|
9653
9674
|
try {
|
|
@@ -10971,7 +10992,7 @@ const findPlanBlockers = (plan, autoMerge) => {
|
|
|
10971
10992
|
const list = plan.collisions.filter((collision) => !collision.renamedTo).map((collision) => ` • ${collision.kind} "${collision.slug}" (${collision.path})`).join("\n");
|
|
10972
10993
|
blockers.push(`Install would collide with content that already exists:\n${list}\n\nNothing was created. Re-run with --rename to install the colliding items under suffixed slugs (e.g. "-2"), or pick a different --into-folder.`);
|
|
10973
10994
|
}
|
|
10974
|
-
if (plan.requiresAutoMerge && !autoMerge) blockers.push("This package's records carry relation values, and a relation stores the ids of the records it points at — which only exist once the records are merged. Installing review-first would leave every relation empty.\n\
|
|
10995
|
+
if (plan.requiresAutoMerge && !autoMerge) blockers.push("This package's records carry relation values, and a relation stores the ids of the records it points at — which only exist once the records are merged. Installing review-first would leave every relation empty.\n\nInstall it without asking for review: drop --require-review, or leave \"Send the content for review first\" off in the dashboard. Records are then created immediately. A credential that can only propose changes cannot install this package; use one with write access to the space.");
|
|
10975
10996
|
const unsatisfiable = findUnsatisfiableRequiredFields(plan);
|
|
10976
10997
|
if (unsatisfiable.length > 0) blockers.push(`This package cannot satisfy its own required fields:\n${unsatisfiable.join("\n")}\n\nThe server rejects these while writing records, partway through the install. Re-export the package (export relaxes fields it cannot fill), or edit the Base definitions in the package to make them optional.`);
|
|
10977
10998
|
return blockers;
|
|
@@ -12243,6 +12264,11 @@ const PROCEDURE_PERMISSION_POLICY = {
|
|
|
12243
12264
|
"agents.connections.list": workspace("manage"),
|
|
12244
12265
|
"agents.disconnect": workspace("manage"),
|
|
12245
12266
|
"agents.deleteHistory": workspace("manage"),
|
|
12267
|
+
"agents.routerEnrollment.grants": workspace("manage"),
|
|
12268
|
+
"agents.routerEnrollment.mint": workspace("manage"),
|
|
12269
|
+
"agents.routerEnrollment.status": workspace("manage"),
|
|
12270
|
+
"agents.routerEnrollment.complete": workspace("manage"),
|
|
12271
|
+
"agents.routerEnrollment.cancel": workspace("manage"),
|
|
12246
12272
|
"agents.sessions.list": workspace("manage"),
|
|
12247
12273
|
"agents.sessions.listPaged": workspace("manage"),
|
|
12248
12274
|
"agents.sessions.create": workspace("manage"),
|
|
@@ -12256,6 +12282,7 @@ const PROCEDURE_PERMISSION_POLICY = {
|
|
|
12256
12282
|
"changeRequests.listPage": node("read"),
|
|
12257
12283
|
"changeRequests.inboxSnapshot": node("read"),
|
|
12258
12284
|
"changeRequests.counts": node("read"),
|
|
12285
|
+
"changeRequests.reviewCount": node("read"),
|
|
12259
12286
|
"changeRequests.get": node("read"),
|
|
12260
12287
|
"changeRequests.createPreviewLink": node("changeRequest"),
|
|
12261
12288
|
"records.list": node("read"),
|
|
@@ -15878,7 +15905,8 @@ manual lands as a Skill node, its nodes are stamped as belonging to that app, it
|
|
|
15878
15905
|
Base slugs are prefixed with the target folder so two templates cannot collide on
|
|
15879
15906
|
a name like "settings", and its sample rows are merged so the app is not empty
|
|
15880
15907
|
when you open it (--no-sample-records opts out). Its AirApp code and its Skill
|
|
15881
|
-
|
|
15908
|
+
follow the same rule as other content: live if you can write, held for review
|
|
15909
|
+
with --require-review.
|
|
15882
15910
|
|
|
15883
15911
|
If the URL is a repository that holds several packages rather than being one,
|
|
15884
15912
|
install lists them and you pick with --skill <name>.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "busa-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.96.0",
|
|
4
4
|
"description": "Command-line client for the Busabase OpenAPI REST API. Talks to a local or remote `busabase server`. Short-name alias for busabase-cli.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/busabase/busabase/tree/main/apps/busabase-cli",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@zip.js/zip.js": "^2.8.20",
|
|
35
35
|
"busabase-package": "workspace:*",
|
|
36
|
-
"busabase-sdk": "0.
|
|
36
|
+
"busabase-sdk": "0.96.0",
|
|
37
37
|
"commander": "^14.0.0",
|
|
38
38
|
"qrcode": "^1.5.4",
|
|
39
39
|
"tar-stream": "^3.1.7",
|