@lambdacurry/arbor 0.22.31 → 0.22.33

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 +23 -9
  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.22.31",
5
+ version: "0.22.33",
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",
@@ -9981,6 +9981,11 @@ var update = object({
9981
9981
  var shapeIds = array(shapeId).min(1).max(TLDRAW_EXEC_MAX_OPERATIONS);
9982
9982
  var diagramKey = string2().min(1).max(80).describe("caller-meaningful node key; returned as the alias for its generated tldraw shape id");
9983
9983
  var diagramLabel = string2().min(1).max(160);
9984
+ var connect = object({
9985
+ op: literal("connect"),
9986
+ sourceId: shapeId.describe("existing native shape to bind the arrow start to"),
9987
+ targetId: shapeId.describe("existing native shape to bind the arrow end to")
9988
+ }).strict();
9984
9989
  var diagram = object({
9985
9990
  op: literal("diagram"),
9986
9991
  direction: _enum(["LR", "RL", "TB", "BT"]).describe("graph reading direction: left/right or top/bottom"),
@@ -10013,6 +10018,7 @@ var TLDRAW_EXEC_OPERATION_SCHEMA = discriminatedUnion("op", [
10013
10018
  ids: shapeIds.min(2),
10014
10019
  groupId: shapeId.optional()
10015
10020
  }).strict(),
10021
+ connect,
10016
10022
  diagram
10017
10023
  ]);
10018
10024
  var TLDRAW_EXEC_OPERATIONS_SCHEMA = array(TLDRAW_EXEC_OPERATION_SCHEMA).min(1).max(TLDRAW_EXEC_MAX_OPERATIONS).superRefine((operations, ctx) => {
@@ -10044,6 +10050,13 @@ var TLDRAW_EXEC_OPERATIONS_SCHEMA = array(TLDRAW_EXEC_OPERATION_SCHEMA).min(1).m
10044
10050
  seen.add(id);
10045
10051
  });
10046
10052
  }
10053
+ if (operation.op === "connect" && operation.sourceId === operation.targetId) {
10054
+ ctx.addIssue({
10055
+ code: "custom",
10056
+ message: "connect self-loops are not supported",
10057
+ path: [index, "targetId"]
10058
+ });
10059
+ }
10047
10060
  if (operation.op === "diagram") {
10048
10061
  const previousNodeTotal = totalDiagramNodes;
10049
10062
  const previousEdgeTotal = totalDiagramEdges;
@@ -10974,7 +10987,7 @@ var ACTION_DEFINITIONS = [
10974
10987
  {
10975
10988
  name: "computer_process_read",
10976
10989
  title: "Read a background process",
10977
- description: "Read process output with nextCursor; preserved bytes remain available for 30 days after preservation, including repeated cursors after finish/suspend, without provider wake. waitForTerminalMs adds one bounded native observation and page; expiry or descendants may still run, transport failure stays unknown/unsafe, and Arbor settles the durable operation only from terminal or exact absence proof.",
10990
+ description: "Read output with nextCursor, including repeated cursors for 30 days after preservation without provider wake. durationMs is process elapsed runtime (final at terminal), not RPC latency; waitForTerminalMs adds one bounded observation/page; expiry may leave work running; transport failure stays unknown/unsafe; only terminal or exact absence proof settles the durable operation.",
10978
10991
  inputSchema: {
10979
10992
  computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
10980
10993
  runId: string2().optional().describe("the Run that owns this process, if it was started inside a Run"),
@@ -11341,7 +11354,7 @@ var ACTION_DEFINITIONS = [
11341
11354
  {
11342
11355
  name: "promote_attachment",
11343
11356
  title: "Promote a file attachment to an artifact",
11344
- description: "Turn a file uploaded to a thread into a first-class artifact — the blob becomes the artifact's content, owned by the author of the contribution it hangs off (not necessarily you). Reach for this when an attached file is itself a deliverable worth retaining and citing. The attachment must share the contribution's thread; idempotent re-promoting the same file returns the same artifact.",
11357
+ description: "Turn a file uploaded to a thread into a separate first-class file Artifact from a source Contribution — the blob becomes the Artifact's content, owned by that contribution's author (not necessarily you). Use the Attachment's durable downloadUrl to reference an exported report within an existing baseline Artifact instead of promoting it into that artifactId; the Attachment must share the source Contribution's Thread, and re-promoting the same file is idempotent.",
11345
11358
  inputSchema: {
11346
11359
  attachmentId: string2().describe("the uploaded attachment, att_…"),
11347
11360
  sourceContributionId: string2().describe("the contribution it's produced by, con_… (must share the attachment's thread)")
@@ -12161,7 +12174,7 @@ var ACTION_DEFINITIONS = [
12161
12174
  {
12162
12175
  name: "artifact",
12163
12176
  title: "Create or edit an Artifact",
12164
- description: "Create or edit a durable versioned Artifact, bind its executable Thread Live Preview, set a Computer-file asleep/share snapshot, or promote a Thread attachment; for a computer:// .tldr snapshot mint: computer_export the exact locator path and same-Thread PNG, then use set_snapshot. Board save and TLP do not mint snapshots. set_snapshot does not wake Computer or change the locator; read artifact_get before changing it, while lifecycle/removal stay in artifact_transition and artifact_delete.",
12177
+ description: "Create or edit a durable versioned Artifact, bind its executable Thread Live Preview, set a Computer-file asleep/share snapshot, or promote a Thread attachment into a separate file Artifact from a source Contribution. To reference an exported report within an existing baseline Artifact, use the Attachment's durable downloadUrl instead of promoting it into that artifactId. For a computer:// .tldr snapshot mint: computer_export the exact locator path and same-Thread PNG, then use set_snapshot. Board save and TLP do not mint snapshots. set_snapshot does not wake Computer or change the locator; read artifact_get before changing it, while lifecycle/removal stay in artifact_transition and artifact_delete.",
12165
12178
  inputSchema: {
12166
12179
  verb: _enum(["create", "edit", "set_live_preview", "set_snapshot", "promote_attachment"]).describe("which artifact move"),
12167
12180
  title: string2().optional().describe("create: the artifact's title"),
@@ -12181,7 +12194,8 @@ var ACTION_DEFINITIONS = [
12181
12194
  note: string2().optional().describe("edit: one-line summary of what changed"),
12182
12195
  sourceAttachmentId: string2().optional().describe("set_snapshot: computer_export of the exact computer:// locator path; MIME application/vnd.tldraw+json, computerPath stamped and matching defaultCwd + locator"),
12183
12196
  previewAttachmentId: string2().optional().describe("set_snapshot: same-Thread computer_export image/png Attachment, used as the asleep face preview"),
12184
- attachmentId: string2().optional().describe("promote_attachment: the upload, att_…")
12197
+ attachmentId: string2().optional().describe("promote_attachment: the upload, att_…"),
12198
+ sourceContributionId: string2().optional().describe("promote_attachment: REQUIRED source Contribution, con_… (must share the Attachment's Thread)")
12185
12199
  },
12186
12200
  surfaces: ["mcp"],
12187
12201
  toolset: "artifacts",
@@ -12345,7 +12359,7 @@ var ACTION_DEFINITIONS = [
12345
12359
  {
12346
12360
  name: "tldraw_exec",
12347
12361
  title: "Run a one-shot tldraw program",
12348
- description: `Modify the current live tldraw board with preferred declarative operations or bounded JavaScript, including a graph-scoped diagram operation that lays out keyed nodes and native bound edges without caller-supplied coordinates, then return a durable execution receipt; use IDs from a fresh observe, reacquire this current schema after compaction, and never replay an unknown result. First use: read the tldraw guide at ${AGENT_GUIDE_URLS.tldraw}.`,
12362
+ description: `Modify the current live tldraw board with preferred declarative operations or bounded JavaScript, including graph-scoped diagram layout and safe native bound connect between shape IDs without caller-supplied connector geometry, then return a durable execution receipt; use IDs from a fresh observe, reacquire this current schema after compaction, and never replay an unknown result. First use: read the tldraw guide at ${AGENT_GUIDE_URLS.tldraw}.`,
12349
12363
  inputSchema: {
12350
12364
  artifactId: string2().describe("the tldraw Artifact, art_…"),
12351
12365
  code: string2().min(1).max(1e5).optional().describe("advanced script source; mutually exclusive with operations"),
@@ -12928,7 +12942,7 @@ function retentionAction(action) {
12928
12942
  if (action.name === "artifact") {
12929
12943
  return {
12930
12944
  ...action,
12931
- description: "Create or edit a durable versioned Artifact with bounded full|checkpoint retention, or manage its Live Preview/snapshot/attachment surface. Content edits return artifactVersionId; byte-identical edits reuse the current version, while policy changes and checkpoints preserve the content version.",
12945
+ description: "Create/edit a durable versioned Artifact with bounded full|checkpoint retention or manage its Live Preview/snapshot/attachment surface; promote_attachment creates a separate file Artifact from a source Contribution, while exported reports in an existing baseline Artifact use the Attachment's durable downloadUrl instead of promotion into that artifactId. Content edits return artifactVersionId; byte-identical edits reuse current version, while policy changes/checkpoints preserve content version.",
12932
12946
  inputSchema: {
12933
12947
  ...action.inputSchema,
12934
12948
  historyPolicy: historyPolicySchema,
@@ -14288,7 +14302,7 @@ function bareConnectUrl(apiUrl, returnedUrl) {
14288
14302
  return fallback;
14289
14303
  }
14290
14304
  }
14291
- async function connect(opts) {
14305
+ async function connect2(opts) {
14292
14306
  if (defaultConfigOverwriteBlocked()) {
14293
14307
  throw new Error(DEFAULT_TOKEN_OVERWRITE_REFUSAL);
14294
14308
  }
@@ -14615,7 +14629,7 @@ async function main() {
14615
14629
  const key = positionals[1];
14616
14630
  if (!key)
14617
14631
  throw new UsageError("usage: arbor connect <pairing-key> [--url <api-url>]");
14618
- await connect({ pairingKey: key, url: stringFlag(flags.url, "url") });
14632
+ await connect2({ pairingKey: key, url: stringFlag(flags.url, "url") });
14619
14633
  advise(`
14620
14634
  ✓ Connected (${getConfigPath()}).
14621
14635
  `, ctx);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.22.31",
3
+ "version": "0.22.33",
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",