busa-cli 0.9.13 → 0.9.14

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.
@@ -1464,11 +1464,11 @@ var createBaseInputSchema = z5.object({
1464
1464
  options: fieldOptionsSchema.optional().default({})
1465
1465
  })
1466
1466
  ).default([]),
1467
- // Review-first by default: without `autoMerge: true`, this proposes the Base
1468
- // as a pending ChangeRequest (status "in_review") instead of creating it
1469
- // immediately. Pass `autoMerge: true` only for callers that don't need human
1470
- // review (seed/migration scripts, an explicit no-review agent task).
1471
- autoMerge: z5.boolean().optional().default(false)
1467
+ // Permission-aware default: omitted merges immediately if the actor has
1468
+ // write access on the parent node, otherwise falls back to a pending
1469
+ // ChangeRequest (status "in_review"). Pass explicit `autoMerge: false` to
1470
+ // force review even with write access.
1471
+ autoMerge: z5.boolean().optional()
1472
1472
  });
1473
1473
  var createBaseFieldInputSchema = z5.object({
1474
1474
  name: fieldNameSchema,
@@ -2116,8 +2116,8 @@ var createNodeChangeRequestInputSchema = z6.object({
2116
2116
  'Explanation shown to the human reviewer. Write a conventional-commit style subject \u2014 imperative verb + what + why, e.g. "Reorganize marketing docs under a Campaigns folder".'
2117
2117
  ),
2118
2118
  submittedBy: z6.string().optional().default("local-producer"),
2119
- autoMerge: z6.boolean().optional().default(false).describe(
2120
- "Whether to approve and merge this structural node change immediately. Defaults to false so node Change Request creation is review-first unless explicitly requested."
2119
+ autoMerge: z6.boolean().optional().describe(
2120
+ "Whether to approve and merge this structural node change immediately. Omitted defaults to merging immediately if the actor has write access on every target node, otherwise falling back to a pending Change Request; pass explicit false to force review even with write access."
2121
2121
  ),
2122
2122
  operations: z6.array(nodeOperationInputSchema).min(1)
2123
2123
  });
@@ -4802,14 +4802,21 @@ The flags below skip the menu (handy for scripts / CI):
4802
4802
  addGlobalFlags(nodes.command("list")).description("Workspace node tree").action(runAction(state, (client) => client.nodes.list()));
4803
4803
  addGlobalFlags(nodes.command("create-change-request")).description("Propose a new node via a Change Request").addOption(
4804
4804
  new Option(`--type <${CREATABLE_NODE_TYPES2.join("|")}>`, "node type").choices(CREATABLE_NODE_TYPES2).makeOptionMandatory()
4805
- ).requiredOption("--slug <slug>", "node slug").requiredOption("--name <name>", "node name").option("--description <text>", "optional node description").option("--parent-node-id <id>", "parent folder node id; omit for root").option("--message <text>", "reviewer-facing Change Request message").option("--submitted-by <name>", "producer label").option("--field <slug:name:type...>", "base field, repeatable (for --type base)").option("--fields-json <json|@file>", "base fields as JSON array (for --type base)").option("--asset-id <id>", "backing Asset id (required for --type file)").addHelpText(
4805
+ ).requiredOption("--slug <slug>", "node slug").requiredOption("--name <name>", "node name").option("--description <text>", "optional node description").option("--parent-node-id <id>", "parent folder node id; omit for root").option("--message <text>", "reviewer-facing Change Request message").option("--submitted-by <name>", "producer label").option("--field <slug:name:type...>", "base field, repeatable (for --type base)").option("--fields-json <json|@file>", "base fields as JSON array (for --type base)").option("--asset-id <id>", "backing Asset id (required for --type file)").option(
4806
+ "--auto-merge",
4807
+ "skip review and create the node immediately if you have write access (default: merge immediately if you have write access, otherwise propose a pending Change Request)"
4808
+ ).option(
4809
+ "--require-review",
4810
+ "always propose a pending Change Request, even if you have write access"
4811
+ ).addHelpText(
4806
4812
  "after",
4807
4813
  `
4808
4814
  Examples:
4809
4815
  busabase-cli nodes create-change-request --type folder --slug cms --name "\u5185\u5BB9\u7BA1\u7406 CMS"
4810
4816
  busabase-cli nodes create-change-request --type base --slug blog --name "\u535A\u5BA2\u6587\u7AE0 Blog Posts" --field title:Title:text --field body:Body:markdown
4811
4817
  busabase-cli nodes create-change-request --type base --slug products --name "\u4EA7\u54C1\u76EE\u5F55 Products" --fields-json @fields.json
4812
- busabase-cli nodes create-change-request --type file --slug board-plan --name "Board Plan" --asset-id ast_123`
4818
+ busabase-cli nodes create-change-request --type file --slug board-plan --name "Board Plan" --asset-id ast_123
4819
+ busabase-cli nodes create-change-request --type folder --slug cms --name "\u5185\u5BB9\u7BA1\u7406 CMS" --require-review # always propose a Change Request`
4813
4820
  ).action(
4814
4821
  runAction(state, (client, opts) => {
4815
4822
  const nodeType = opts.type;
@@ -4823,6 +4830,7 @@ Examples:
4823
4830
  return client.nodes.createChangeRequest({
4824
4831
  message: opts.message ?? `Create ${nodeType} ${name}`,
4825
4832
  submittedBy: opts.submittedBy,
4833
+ ...opts.requireReview ? { autoMerge: false } : opts.autoMerge ? { autoMerge: true } : {},
4826
4834
  operations: [
4827
4835
  {
4828
4836
  kind: "create",
@@ -4902,14 +4910,18 @@ Examples:
4902
4910
  );
4903
4911
  addGlobalFlags(bases.command("create")).description("Create a Base \u2014 review-first by default: returns a pending Change Request").requiredOption("--slug <slug>", "Base slug").requiredOption("--name <name>", "Base name").option("--field <slug:name:type...>", "field definition, repeatable").option("--fields-json <json|@file>", "field definitions as JSON array").option("--description <text>", "optional description").option("--parent-node-id <id>", "parent folder node id; omit for root").option(
4904
4912
  "--auto-merge",
4905
- "skip review and create the Base immediately (default: propose a pending Change Request)"
4913
+ "skip review and create the Base immediately if you have write access (default: merge immediately if you have write access, otherwise propose a pending Change Request)"
4914
+ ).option(
4915
+ "--require-review",
4916
+ "always propose a pending Change Request, even if you have write access"
4906
4917
  ).addHelpText(
4907
4918
  "after",
4908
4919
  `
4909
4920
  Examples:
4910
4921
  busabase-cli bases create --slug products --name "\u4EA7\u54C1\u76EE\u5F55 Products" --field product_name:"Product Name":text
4911
4922
  busabase-cli bases create --slug products --name "\u4EA7\u54C1\u76EE\u5F55 Products" --fields-json @fields.json
4912
- busabase-cli bases create --slug products --name "Products" --auto-merge # skip review, create immediately`
4923
+ busabase-cli bases create --slug products --name "Products" --auto-merge # skip review, create immediately
4924
+ busabase-cli bases create --slug products --name "Products" --require-review # always propose a Change Request`
4913
4925
  ).action(
4914
4926
  runAction(
4915
4927
  state,
@@ -4919,7 +4931,7 @@ Examples:
4919
4931
  description: opts.description,
4920
4932
  parentNodeId: opts.parentNodeId,
4921
4933
  fields: parseFieldDefinitions(opts),
4922
- ...opts.autoMerge ? { autoMerge: true } : {}
4934
+ ...opts.requireReview ? { autoMerge: false } : opts.autoMerge ? { autoMerge: true } : {}
4923
4935
  })
4924
4936
  )
4925
4937
  );
@@ -4976,14 +4988,18 @@ Examples:
4976
4988
  );
4977
4989
  addGlobalFlags(bases.command("create-change-request")).description("Propose a new record via a Change Request \u2014 review-first by default").requiredOption("--base-id <id>", "target Base id").requiredOption("--fields-json <json|@file>", "record fields as JSON, or @file.json").option("--message <text>", "reviewer-facing Change Request message").option("--submitted-by <name>", "producer label").option(
4978
4990
  "--auto-merge",
4979
- "skip review and create the record immediately (default: propose a pending Change Request)"
4991
+ "skip review and create the record immediately if you have write access (default: merge immediately if you have write access, otherwise propose a pending Change Request)"
4992
+ ).option(
4993
+ "--require-review",
4994
+ "always propose a pending Change Request, even if you have write access"
4980
4995
  ).addHelpText(
4981
4996
  "after",
4982
4997
  `
4983
4998
  Examples:
4984
4999
  busabase-cli bases create-change-request --base-id bse_123 --fields-json '{"title":"Hello","status":"draft"}'
4985
5000
  busabase-cli bases create-change-request --base-id bse_123 --fields-json @record.json
4986
- busabase-cli bases create-change-request --base-id bse_123 --fields-json '{"title":"Hello"}' --auto-merge # skip review, create immediately`
5001
+ busabase-cli bases create-change-request --base-id bse_123 --fields-json '{"title":"Hello"}' --auto-merge # skip review, create immediately
5002
+ busabase-cli bases create-change-request --base-id bse_123 --fields-json '{"title":"Hello"}' --require-review # always propose a Change Request`
4987
5003
  ).action(
4988
5004
  runAction(
4989
5005
  state,
@@ -4992,7 +5008,7 @@ Examples:
4992
5008
  fields: parseJsonValue(opts.fieldsJson, "fields-json"),
4993
5009
  message: opts.message,
4994
5010
  submittedBy: opts.submittedBy,
4995
- ...opts.autoMerge ? { autoMerge: true } : {}
5011
+ ...opts.requireReview ? { autoMerge: false } : opts.autoMerge ? { autoMerge: true } : {}
4996
5012
  })
4997
5013
  )
4998
5014
  );
@@ -5016,7 +5032,10 @@ Examples:
5016
5032
  ).choices(["merge", "replace"])
5017
5033
  ).option(
5018
5034
  "--auto-merge",
5019
- "skip review and create the AirApp immediately (default: propose a pending Change Request)"
5035
+ "skip review and create the AirApp immediately if you have write access (default: merge immediately if you have write access, otherwise propose a pending Change Request)"
5036
+ ).option(
5037
+ "--require-review",
5038
+ "always propose a pending Change Request, even if you have write access"
5020
5039
  ).addHelpText(
5021
5040
  "after",
5022
5041
  `
@@ -5033,7 +5052,8 @@ mergeMode explains how --files-json combines with the AirApp's default scaffold:
5033
5052
  Examples:
5034
5053
  busabase-cli airapps create --slug hello-app --name "Hello App" --files-json @files.json
5035
5054
  busabase-cli airapps create --slug vite-app --name "Vite App" --files-json @files.json --merge-mode replace
5036
- busabase-cli airapps create --slug hello-app --name "Hello App" --files-json @files.json --auto-merge # skip review, create immediately`
5055
+ busabase-cli airapps create --slug hello-app --name "Hello App" --files-json @files.json --auto-merge # skip review, create immediately
5056
+ busabase-cli airapps create --slug hello-app --name "Hello App" --files-json @files.json --require-review # always propose a Change Request`
5037
5057
  ).action(
5038
5058
  runAction(
5039
5059
  state,
@@ -5046,7 +5066,7 @@ Examples:
5046
5066
  version: opts.version,
5047
5067
  files: opts.filesJson ? parseJsonValue(opts.filesJson, "files-json") : void 0,
5048
5068
  mergeMode: opts.mergeMode,
5049
- ...opts.autoMerge ? { autoMerge: true } : {}
5069
+ ...opts.requireReview ? { autoMerge: false } : opts.autoMerge ? { autoMerge: true } : {}
5050
5070
  })
5051
5071
  )
5052
5072
  );
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "./chunk-LRUXSAKS.js";
4
+ } from "./chunk-P4Z4SWET.js";
5
5
 
6
6
  // src/cli.ts
7
7
  process.exit(await runCli(process.argv.slice(2)));
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  HELP,
3
3
  render,
4
4
  runCli
5
- } from "./chunk-LRUXSAKS.js";
5
+ } from "./chunk-P4Z4SWET.js";
6
6
 
7
7
  // src/index.ts
8
8
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "busa-cli",
3
- "version": "0.9.13",
3
+ "version": "0.9.14",
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.9.13",
36
+ "busabase-sdk": "0.9.14",
37
37
  "commander": "^14.0.0",
38
38
  "tar-stream": "^3.1.7",
39
39
  "yaml": "^2.9.0",