@lambdacurry/arbor 0.24.20 → 0.24.22

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.
Files changed (2) hide show
  1. package/dist/arbor.js +24 -14
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -12503,6 +12503,15 @@ function verbatimList(description) {
12503
12503
  function isVerbatimList(schema) {
12504
12504
  return VERBATIM_LISTS.has(schema);
12505
12505
  }
12506
+ var FILE_BODIES = registry();
12507
+ function fileBody(description, base = string2()) {
12508
+ const schema = base.describe(description);
12509
+ FILE_BODIES.add(schema, { fileBody: true });
12510
+ return schema;
12511
+ }
12512
+ function isFileBody(schema) {
12513
+ return FILE_BODIES.has(schema);
12514
+ }
12506
12515
  var ATTACHMENT_DESCRIPTION_HINT = "durable summary and default alt text; defaults to the filename when omitted; permanent once bound; 1-500 chars; give each file its own";
12507
12516
  function forward(operation) {
12508
12517
  const run = (ex, input) => ex.call(operation, input);
@@ -13677,7 +13686,7 @@ var ACTION_DEFINITIONS = [
13677
13686
  computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
13678
13687
  path: string2().describe("absolute path under /workspace, or a path inside the run"),
13679
13688
  runId: string2().optional().describe("route this write according to this Run execution placement, run_… (from computer_run_start)"),
13680
- content: string2().describe("complete UTF-8 content, or base64 bytes when encoding=base64"),
13689
+ content: fileBody("complete UTF-8 content, or base64 bytes when encoding=base64"),
13681
13690
  encoding: _enum(["utf8", "base64"]).optional().describe("content encoding; defaults to utf8, use base64 for binary files")
13682
13691
  },
13683
13692
  surfaces: ["computer-mcp", "computer-cli"],
@@ -13855,7 +13864,7 @@ var ACTION_DEFINITIONS = [
13855
13864
  type: _enum(ARTIFACT_TYPES).describe(ARTIFACT_TYPE_DESCRIPTION),
13856
13865
  kind: _enum(["doc", "table", "diagram", "html", "file"]).optional().describe("structural kind (default file). doc/table/diagram/html are editable, versioned text"),
13857
13866
  title: string2().min(1),
13858
- source: string2().optional().describe("text kinds: the initial content (v1)"),
13867
+ source: fileBody("text kinds: the initial content (v1)").optional(),
13859
13868
  contentRef: string2().optional().describe("kind=file: where the content lives, e.g. inline://… or a URL"),
13860
13869
  editPolicy: _enum(["owner", "members", "anyone"]).optional().describe("who may edit (default members)"),
13861
13870
  summary: string2().min(1).max(500).describe("required one-line description of what this durable Artifact is or accomplishes"),
@@ -13893,7 +13902,7 @@ var ACTION_DEFINITIONS = [
13893
13902
  inputSchema: {
13894
13903
  artifactId: string2().describe("the artifact, art_…"),
13895
13904
  baseVersion: number2().describe("the version you READ (get_artifact) — stale is rejected"),
13896
- source: string2().optional().describe("full replace: the complete new content"),
13905
+ source: fileBody("full replace: the complete new content").optional(),
13897
13906
  patches: array(object({ old: string2(), new: string2() })).optional().describe("exact-match hunks applied in order; each old must match exactly once"),
13898
13907
  note: string2().optional().describe("one-line summary of what changed"),
13899
13908
  idempotencyKey: string2().min(1).max(200).optional().describe("stable retry key for this logical edit; the CLI derives one from the artifact, base version, and content when omitted")
@@ -14886,7 +14895,7 @@ var ACTION_DEFINITIONS = [
14886
14895
  title: string2().optional().describe("create: the artifact's title"),
14887
14896
  kind: _enum(["doc", "table", "diagram", "html", "file"]).optional().describe("create: structural kind (default file). doc/table/diagram/html are editable text"),
14888
14897
  type: _enum(ARTIFACT_TYPES).optional().describe(`create: ${ARTIFACT_TYPE_DESCRIPTION}`),
14889
- source: string2().optional().describe("create (text kinds): the initial content · edit verb=replace: the full new content"),
14898
+ source: fileBody("create (text kinds): the initial content · edit verb=replace: the full new content").optional(),
14890
14899
  contentRef: string2().optional().describe("create (kind=file): where the content lives, e.g. inline://… or a URL"),
14891
14900
  editPolicy: _enum(["owner", "members", "anyone"]).optional().describe("create: who may edit (default members)"),
14892
14901
  summary: string2().min(1).max(500).optional().describe("create: REQUIRED one-line description of what this Artifact is or accomplishes"),
@@ -15140,7 +15149,7 @@ var ACTION_DEFINITIONS = [
15140
15149
  description: string2().max(500).optional().describe("create: non-sensitive purpose"),
15141
15150
  owner: _enum(["organization", "profile"]).optional().describe("create: who owns the Secret (default organization). profile keeps administration with one identity; names are unique per owner"),
15142
15151
  ownerProfileId: string2().optional().describe("create + owner=profile: the owning identity, defaulting to you; assigning another Profile is an Org owner/admin action"),
15143
- value: string2().min(1).optional().describe("set/rotate: plaintext submitted once and never returned or recorded"),
15152
+ value: fileBody("set/rotate: plaintext submitted once and never returned or recorded; --value-file is sent byte-exact (printf, not echo)", string2().min(1)).optional(),
15144
15153
  profileId: string2().optional().describe("grant/revoke_grant: authorized human or agent"),
15145
15154
  permissions: array(_enum([
15146
15155
  "create",
@@ -15210,7 +15219,7 @@ var ACTION_DEFINITIONS = [
15210
15219
  description: "Write the first encrypted SecretVersion. The submitted value is never echoed, logged, audited, or placed in provenance; use secret_rotate after the first version.",
15211
15220
  inputSchema: {
15212
15221
  secretId: string2().describe("the empty Secret, sec_…"),
15213
- value: string2().min(1).describe("plaintext submitted once and never returned")
15222
+ value: fileBody("plaintext submitted once and never returned; --value-file is sent byte-exact (printf, not echo)", string2().min(1))
15214
15223
  },
15215
15224
  surfaces: ["cli"],
15216
15225
  toolset: "apps",
@@ -15222,7 +15231,7 @@ var ACTION_DEFINITIONS = [
15222
15231
  description: "Append a new encrypted SecretVersion and make every active App binding consume it. Rotation permission is independent of value-write, bind, and plaintext-read permission; the submitted value is never returned.",
15223
15232
  inputSchema: {
15224
15233
  secretId: string2().describe("the active Secret, sec_…"),
15225
- value: string2().min(1).describe("new plaintext submitted once and never returned")
15234
+ value: fileBody("new plaintext submitted once and never returned; --value-file is sent byte-exact (printf, not echo)", string2().min(1))
15226
15235
  },
15227
15236
  surfaces: ["cli"],
15228
15237
  toolset: "apps",
@@ -15454,7 +15463,7 @@ var ACTION_DEFINITIONS = [
15454
15463
  path: string2().min(1).max(2048).describe("relative App path beginning with /; may include a query string"),
15455
15464
  method: _enum(["POST", "PUT", "PATCH", "DELETE"]).describe("mutating HTTP method"),
15456
15465
  json: json().optional().describe("JSON request value; mutually exclusive with body and sets application/json. On the CLI, pass serialized JSON after the command as --json '<value>'"),
15457
- body: string2().optional().describe("UTF-8 request body; mutually exclusive with json"),
15466
+ body: fileBody("UTF-8 request body; mutually exclusive with json").optional(),
15458
15467
  contentType: string2().max(160).optional().describe("body media type; allowed only with body, default text/plain; charset=utf-8")
15459
15468
  },
15460
15469
  surfaces: ["computer-mcp", "cli"],
@@ -15610,7 +15619,7 @@ var ACTIONS = ACTION_DEFINITIONS.map((action) => {
15610
15619
  });
15611
15620
 
15612
15621
  // ../actions/src/retention-entry.ts
15613
- var ARBOR_VERSION = "0.24.20";
15622
+ var ARBOR_VERSION = "0.24.22";
15614
15623
  var historyPolicySchema = _enum(["full", "checkpoint"]).optional().describe("text Artifacts: future history retention policy; full retains every source snapshot, checkpoint keeps metadata for every revision and source only when explicitly retained");
15615
15624
  var retainSourceSchema = boolean2().optional().describe("edit: in checkpoint mode, retain this newly minted content revision's source");
15616
15625
  var checkpointSchema = boolean2().optional().describe("edit: retain the exact current version source without incrementing content version");
@@ -16494,7 +16503,7 @@ function dispositionFilename(value) {
16494
16503
  // package.json
16495
16504
  var package_default = {
16496
16505
  name: "@lambdacurry/arbor",
16497
- version: "0.24.20",
16506
+ version: "0.24.22",
16498
16507
  description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
16499
16508
  keywords: [
16500
16509
  "agents",
@@ -16992,7 +17001,7 @@ function acceptedFlags(inputSchema) {
16992
17001
  }
16993
17002
  return out;
16994
17003
  }
16995
- function readTextSource(src) {
17004
+ function readTextSource(src, verbatim) {
16996
17005
  let text;
16997
17006
  try {
16998
17007
  text = readFileSync2(src === "-" ? 0 : src, "utf8");
@@ -17000,7 +17009,7 @@ function readTextSource(src) {
17000
17009
  const where = src === "-" ? "stdin" : src;
17001
17010
  throw new UsageError(`could not read ${where}: ${e instanceof Error ? e.message : String(e)}`);
17002
17011
  }
17003
- return text.replace(/[\r\n]+$/, "");
17012
+ return verbatim ? text : text.replace(/[\r\n]+$/, "");
17004
17013
  }
17005
17014
  function primaryPositionalField(inputSchema) {
17006
17015
  return flagsForSchema(inputSchema).find((f) => f.required && (f.kind === "string" || f.kind === "number"));
@@ -17016,7 +17025,8 @@ function flagsForSchema(inputSchema) {
17016
17025
  nullable,
17017
17026
  description: description(inner) ?? description(raw),
17018
17027
  literal: isProseList(inner),
17019
- verbatim: isVerbatimList(inner)
17028
+ verbatim: isVerbatimList(inner),
17029
+ fileBody: isFileBody(inner)
17020
17030
  };
17021
17031
  });
17022
17032
  }
@@ -17032,7 +17042,7 @@ function buildInput(inputSchema, flags, command) {
17032
17042
  }
17033
17043
  if (fileSrc === true)
17034
17044
  throw new UsageError(`--${spec.flag}-file expects a path (or - for stdin)`);
17035
- const sourced = readTextSource(String(fileSrc));
17045
+ const sourced = readTextSource(String(fileSrc), spec.fileBody === true);
17036
17046
  if (spec.kind === "json") {
17037
17047
  try {
17038
17048
  input[spec.field] = JSON.parse(sourced);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.24.20",
3
+ "version": "0.24.22",
4
4
  "description": "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
5
5
  "keywords": [
6
6
  "agents",