@lambdacurry/arbor 0.24.1 → 0.24.2

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 +29 -7
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // package.json
3
3
  var package_default = {
4
4
  name: "@lambdacurry/arbor",
5
- version: "0.24.1",
5
+ version: "0.24.2",
6
6
  description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
7
7
  keywords: [
8
8
  "agents",
@@ -12314,7 +12314,7 @@ var ACTION_DEFINITIONS = [
12314
12314
  {
12315
12315
  name: "attachment",
12316
12316
  title: "Upload and read Thread Attachments",
12317
- description: "Upload a file (100 MB cap): upload_url → signed PUT (5 min) → attach (1 h after PUT expiry); receipts replay after expiry; JSON syntax checks stop at 10 MB, larger JSON gets UTF-8/control checks only, so validate locally. get/list recover receipts; mediaUrl/downloadUrl require an Arbor credential (401 otherwise), with no public read URLs.",
12317
+ description: "Upload (100 MB): upload_url → signed PUT (5 min) → attach (1 h after PUT expiry); receipts replay after expiry; JSON syntax checked ≤10 MB, larger JSON gets UTF-8/control checks only (validate locally); get/list recover receipts; read URLs need Arbor credentials (401 otherwise), no public URLs. Missing tool: refresh the MCP tool catalog; CLI: arbor attachment upload (Node/Bun).",
12318
12318
  inputSchema: {
12319
12319
  verb: _enum(["upload_url", "attach", "get", "list"]),
12320
12320
  threadId: string2().optional().describe("upload_url/list: Thread id, thr_…"),
@@ -12382,10 +12382,20 @@ var ACTION_DEFINITIONS = [
12382
12382
  {
12383
12383
  name: "attachment_upload",
12384
12384
  title: "Upload a local Thread file",
12385
- description: "Upload with Node and SHA-256 via upload_url → presigned PUT → attach (100 MB cap); compress, split, or link larger files; JSON syntax checks stop at 10 MB, larger JSON gets UTF-8/control checks only. PUT expires in 5 min, first attach gets 1 h more, receipts replay after expiry; js-exec cannot upload; mediaUrl/downloadUrl require an Arbor credential (401 otherwise), no public read URLs; for a missing tool refresh the MCP tool catalog or use arbor attachment upload.",
12385
+ description: "Upload a local file with Node or Bun (SHA-256 → presigned PUT → attach, 100 MB cap)",
12386
+ cliHelpLead: "Requires Node or Bun.",
12387
+ cliHelpNotes: [
12388
+ "Upload with SHA-256 via upload_url → presigned PUT → attach (100 MB cap); compress, split, or link larger files.",
12389
+ "PUT links expire after five minutes; first attach is allowed until one hour after PUT expiry. Finalized receipts replay after expiry.",
12390
+ "JSON syntax checks stop at 10 MB; larger JSON gets UTF-8/control checks only, so validate syntax locally.",
12391
+ "js-exec lacks file descriptors, node:crypto, and binary-safe fetch; run this command with Node or Bun.",
12392
+ "With only curl available, use the MCP attachment tool: upload_url → returned curl PUT command → attach with the returned token.",
12393
+ "mediaUrl/downloadUrl require an Arbor credential (401 otherwise); no public read URLs. The R2 PUT uses only the required signed headers, never an Arbor credential."
12394
+ ].join(`
12395
+ `),
12386
12396
  inputSchema: {
12387
12397
  threadId: string2().min(1),
12388
- file: string2().min(1).describe("local file path (or positional file); requires Node"),
12398
+ file: string2().min(1).describe("local file path (or positional file); requires Node or Bun"),
12389
12399
  description: string2().min(1).max(500).optional()
12390
12400
  },
12391
12401
  surfaces: ["cli"],
@@ -15060,8 +15070,8 @@ async function uploadLocalAttachment(executor, input, fetcher = fetch) {
15060
15070
  const mimeType = localAttachmentMime(filename);
15061
15071
  if (!mimeType)
15062
15072
  throw new UsageError(`Unsupported file extension for ${initialStat.size} bytes (limit ${MAX_ATTACHMENT_BYTES} bytes). Use PNG/JPEG/GIF/WebP/PDF/TXT/JSON/CSV, or link the file.`);
15063
- if (typeof fs.openSync !== "function")
15064
- throw new UsageError("Attachment upload requires Node: this js-exec runtime cannot PUT binary file bytes. Run `arbor attachment upload <file> --thread-id <thread>` with Node.");
15073
+ if ([fs.openSync, fs.fstatSync, fs.readSync, fs.closeSync].some((api) => typeof api !== "function"))
15074
+ throw new UsageError("Attachment upload requires Node or Bun: js-exec lacks file descriptors, node:crypto, and binary-safe fetch. Run `arbor attachment upload <file> --thread-id <thread>` with Node or Bun, or use MCP attachment upload_url → curl PUT → attach.");
15065
15075
  const descriptor = fs.openSync(file, "r");
15066
15076
  let bytes;
15067
15077
  try {
@@ -15838,12 +15848,24 @@ Aliases: ${aliases.map((alias) => `\`arbor ${alias}\``).join(", ")} (tool-name f
15838
15848
  const waitLines = action.name === "computer_exec" ? [
15839
15849
  " --no-wait [<boolean>] [optional] — return a running processId immediately instead of polling computer_process_read (implied by --background); mutually exclusive with --wait-for-terminal-ms"
15840
15850
  ] : [];
15851
+ const notes = action.cliHelpNotes ? `
15852
+
15853
+ ${action.cliHelpNotes}` : "";
15854
+ if (action.cliHelpLead) {
15855
+ return `${usage}
15856
+
15857
+ ${action.cliHelpLead}
15858
+
15859
+ ${lines.join(`
15860
+ `)}${primaryNote}${explicitNote}${aliasNote}${notes}
15861
+ `;
15862
+ }
15841
15863
  return `${heading} — ${action.description}
15842
15864
 
15843
15865
  ${usage}${waitLines.length > 0 ? " [--no-wait]" : ""}
15844
15866
 
15845
15867
  ${[...lines, ...waitLines].join(`
15846
- `)}${primaryNote}${explicitNote}${aliasNote}
15868
+ `)}${primaryNote}${explicitNote}${aliasNote}${notes}
15847
15869
  `;
15848
15870
  }
15849
15871
  function commandCatalog() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.24.1",
3
+ "version": "0.24.2",
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",