@lambdacurry/arbor 0.22.30 → 0.22.32
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/arbor.js +35 -14
- 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.
|
|
5
|
+
version: "0.22.32",
|
|
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;
|
|
@@ -10130,7 +10143,7 @@ Arbor's MCP is the collaboration and durable-knowledge surface. Configure, autho
|
|
|
10130
10143
|
|
|
10131
10144
|
Run \`arbor help\` (or read the MCP tool list) for the exact command/flags — those stay generated from the live action surface, so they're always current.`;
|
|
10132
10145
|
var ARBOR_SKILL_MARKDOWN = renderArborSkill(ORIENTATION);
|
|
10133
|
-
var COMPUTER_ORIENTATION = `Long Computer work returns a processId handle — do not hold one tool call for a full test or build. \`computer_exec\` runs a command; if the result is still running, observe it with \`computer_process_read\`; read a truncated continuation only when you need more output. Finish and suspend preserve unread terminal output internally, with original process IDs/cursors recoverable for 30 days. Do not chain \`pnpm test && pnpm build\` in one exec; split steps or pass \`background:true\`.
|
|
10146
|
+
var COMPUTER_ORIENTATION = `Long Computer work returns a processId handle — do not hold one tool call for a full test or build. \`computer_exec\` runs a command; if the result is still running, observe it with \`computer_process_read\`; read a truncated continuation only when you need more output. Finish and suspend preserve unread terminal output internally, with original process IDs/cursors recoverable for 30 days. Do not chain \`pnpm test && pnpm build\` in one exec; split steps or pass \`background:true\`. An explicit waitForTerminalMs uses one server wait and canonical output page; otherwise the CLI polls only while the process is silent unless \`--no-wait\`. It never concatenates continuation pages into one agent context.
|
|
10134
10147
|
|
|
10135
10148
|
Arbor Computer is the complete software execution platform attached to Arbor's durable collaboration graph. It configures project environments, executes and verifies work, packages and releases Apps, and preserves reviewable evidence; it does not schedule agents or replace Arbor collaboration.
|
|
10136
10149
|
|
|
@@ -10954,16 +10967,17 @@ var ACTION_DEFINITIONS = [
|
|
|
10954
10967
|
{
|
|
10955
10968
|
name: "computer_exec",
|
|
10956
10969
|
title: "Run a command",
|
|
10957
|
-
description: "Run a shell command in runId with ambient GitHub authorization
|
|
10970
|
+
description: "Run a shell command in runId with ambient GitHub authorization; timeout kills the process. Use waitForTerminalMs for immediate or bounded native observation, then continue with computer_process_read and nextCursor for a truncated output page; background is mutually exclusive, and after response loss read computer_run_receipt.operations[].operationId instead of repeating the mutation.",
|
|
10958
10971
|
inputSchema: {
|
|
10959
10972
|
computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
|
|
10960
10973
|
command: string2().min(1).describe("the shell command to run"),
|
|
10961
10974
|
runId: string2().optional().describe("route this command according to this Run execution placement, run_… (from computer_run_start)"),
|
|
10962
10975
|
cwd: string2().optional().describe("working directory under /workspace, or under the run; omit to use defaultCwd"),
|
|
10963
10976
|
timeout: number2().int().min(1000).max(1800000).optional().describe("process kill deadline in milliseconds, from 1,000 through 1,800,000 — not the RPC hold"),
|
|
10964
|
-
background: boolean2().optional().describe("start the process and return immediately without the short RPC wait"),
|
|
10965
|
-
|
|
10966
|
-
|
|
10977
|
+
background: boolean2().optional().describe("start the process and return immediately without the short RPC wait; mutually exclusive with waitForTerminalMs"),
|
|
10978
|
+
waitForTerminalMs: number2().int().min(0).max(45000).optional().describe("explicit terminal-observation window from 0 through 45,000 milliseconds; 0 returns immediately, a positive value returns one canonical output page when the native wait ends or expires, and descendants may keep the result running; mutually exclusive with background"),
|
|
10979
|
+
activityLabel: string2().min(1).max(COMPUTER_RUN_ACTIVITY_LABEL_MAX).optional().describe("short human-readable label for retained run-scoped work selected by background or waitForTerminalMs; Arbor records this label instead of the raw command or output"),
|
|
10980
|
+
activityKind: literal("verification").optional().describe("mark labeled retained run-scoped work as a verification check; its provider-observed terminal result is recorded as verification.finished"),
|
|
10967
10981
|
strict: boolean2().optional().describe("fail on the first unhandled command or pipeline failure; defaults to true, set false only for intentional best-effort execution")
|
|
10968
10982
|
},
|
|
10969
10983
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
@@ -10973,13 +10987,14 @@ var ACTION_DEFINITIONS = [
|
|
|
10973
10987
|
{
|
|
10974
10988
|
name: "computer_process_read",
|
|
10975
10989
|
title: "Read a background process",
|
|
10976
|
-
description: "Read
|
|
10990
|
+
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.",
|
|
10977
10991
|
inputSchema: {
|
|
10978
10992
|
computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
|
|
10979
10993
|
runId: string2().optional().describe("the Run that owns this process, if it was started inside a Run"),
|
|
10980
10994
|
processId: string2().min(1).describe("the processId returned by background exec, or matching computer_run_receipt.operations[].operationId for recovered foreground Run work, proc_…"),
|
|
10981
10995
|
cursor: string2().optional().describe("continue after nextCursor from the prior result; omit to read from the beginning"),
|
|
10982
|
-
maxBytes: number2().int().min(1024).max(65536).optional().describe("maximum combined output bytes to return; default 4,096, opt up only when needed")
|
|
10996
|
+
maxBytes: number2().int().min(1024).max(65536).optional().describe("maximum combined output bytes to return; default 4,096, opt up only when needed"),
|
|
10997
|
+
waitForTerminalMs: number2().int().min(0).max(45000).optional().describe("use one native terminal-observation window up to this many milliseconds, then return one canonical output page; 0 is immediate, surviving descendants may remain running, and omission preserves the current read behavior")
|
|
10983
10998
|
},
|
|
10984
10999
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
10985
11000
|
toolset: "loop",
|
|
@@ -12343,7 +12358,7 @@ var ACTION_DEFINITIONS = [
|
|
|
12343
12358
|
{
|
|
12344
12359
|
name: "tldraw_exec",
|
|
12345
12360
|
title: "Run a one-shot tldraw program",
|
|
12346
|
-
description: `Modify the current live tldraw board with preferred declarative operations or bounded JavaScript, including
|
|
12361
|
+
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}.`,
|
|
12347
12362
|
inputSchema: {
|
|
12348
12363
|
artifactId: string2().describe("the tldraw Artifact, art_…"),
|
|
12349
12364
|
code: string2().min(1).max(1e5).optional().describe("advanced script source; mutually exclusive with operations"),
|
|
@@ -14149,7 +14164,7 @@ Alias: \`arbor ${aliases[0]}\` (the tool-name form) resolves to this same comman
|
|
|
14149
14164
|
Aliases: ${aliases.map((alias) => `\`arbor ${alias}\``).join(", ")} (tool-name forms) resolve to this same command.` : "";
|
|
14150
14165
|
const heading = `${commandWords(action)}${aliases.length === 1 ? ` (alias: ${aliases[0]})` : aliases.length > 1 ? ` (aliases: ${aliases.join(", ")})` : ""}`;
|
|
14151
14166
|
const waitLines = action.name === "computer_exec" ? [
|
|
14152
|
-
" --no-wait [<boolean>] [optional] — return a running processId immediately instead of polling computer_process_read"
|
|
14167
|
+
" --no-wait [<boolean>] [optional] — return a running processId immediately instead of polling computer_process_read; mutually exclusive with --wait-for-terminal-ms"
|
|
14153
14168
|
] : [];
|
|
14154
14169
|
return `${heading} — ${action.description}
|
|
14155
14170
|
|
|
@@ -14178,7 +14193,7 @@ function commandCatalog() {
|
|
|
14178
14193
|
kind: "boolean",
|
|
14179
14194
|
required: false,
|
|
14180
14195
|
acceptsFile: false,
|
|
14181
|
-
description: "return a running processId immediately instead of polling computer_process_read"
|
|
14196
|
+
description: "return a running processId immediately instead of polling computer_process_read; mutually exclusive with --wait-for-terminal-ms"
|
|
14182
14197
|
}
|
|
14183
14198
|
] : []
|
|
14184
14199
|
]
|
|
@@ -14240,6 +14255,12 @@ async function runObjectVerb(positionals, flags, ctx) {
|
|
|
14240
14255
|
delete inputFlags.json;
|
|
14241
14256
|
}
|
|
14242
14257
|
const input = buildInput(action.inputSchema, inputFlags, commandWords(action));
|
|
14258
|
+
if (action.name === "computer_exec" && flags["no-wait"] !== undefined && input.waitForTerminalMs !== undefined) {
|
|
14259
|
+
throw new UsageError("--no-wait and --wait-for-terminal-ms are mutually exclusive", {
|
|
14260
|
+
reason: "validation.invalid_value",
|
|
14261
|
+
field: "waitForTerminalMs"
|
|
14262
|
+
});
|
|
14263
|
+
}
|
|
14243
14264
|
if (action.name === "app_request" && input.json !== undefined) {
|
|
14244
14265
|
if (input.body !== undefined) {
|
|
14245
14266
|
throw new UsageError("--json and --body are mutually exclusive", {
|
|
@@ -14261,7 +14282,7 @@ async function runObjectVerb(positionals, flags, ctx) {
|
|
|
14261
14282
|
`, ctx);
|
|
14262
14283
|
}
|
|
14263
14284
|
let value = await action.run(httpExecutor, input);
|
|
14264
|
-
if (action.name === "computer_exec" && !truthyFlag(flags["no-wait"])) {
|
|
14285
|
+
if (action.name === "computer_exec" && !truthyFlag(flags["no-wait"]) && input.waitForTerminalMs === undefined) {
|
|
14265
14286
|
value = await waitForComputerExec(httpExecutor, input, value, ctx);
|
|
14266
14287
|
}
|
|
14267
14288
|
emitData(shapeActionOutput(action.name, value, input), action.name, ctx);
|
|
@@ -14280,7 +14301,7 @@ function bareConnectUrl(apiUrl, returnedUrl) {
|
|
|
14280
14301
|
return fallback;
|
|
14281
14302
|
}
|
|
14282
14303
|
}
|
|
14283
|
-
async function
|
|
14304
|
+
async function connect2(opts) {
|
|
14284
14305
|
if (defaultConfigOverwriteBlocked()) {
|
|
14285
14306
|
throw new Error(DEFAULT_TOKEN_OVERWRITE_REFUSAL);
|
|
14286
14307
|
}
|
|
@@ -14607,7 +14628,7 @@ async function main() {
|
|
|
14607
14628
|
const key = positionals[1];
|
|
14608
14629
|
if (!key)
|
|
14609
14630
|
throw new UsageError("usage: arbor connect <pairing-key> [--url <api-url>]");
|
|
14610
|
-
await
|
|
14631
|
+
await connect2({ pairingKey: key, url: stringFlag(flags.url, "url") });
|
|
14611
14632
|
advise(`
|
|
14612
14633
|
✓ Connected (${getConfigPath()}).
|
|
14613
14634
|
`, ctx);
|
package/package.json
CHANGED