@lambdacurry/arbor 0.14.1 → 0.14.3

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 (3) hide show
  1. package/README.md +1 -1
  2. package/dist/arbor.js +39 -16
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -42,7 +42,7 @@ This prints a URL + short code to relay to the human, who approves it in their l
42
42
 
43
43
  ## Output contract (agent-friendly)
44
44
 
45
- Every command takes `--json` to emit a stable `{ ok, data | error, meta }` envelope on stdout (with structured error codes and agent-mode exit codes); advisory/human text goes to stderr. A failure envelope adds the server's granular `reason` — `validation.missing_field`, `limit.exceeded`, `conflict.state`, … — beside the coarse `code`, optionally with `field`, `limit`, `retryable`, and `phase` (AD-237). `--quiet` (auto under `--json` or a pipe) silences the advisory stream. `--fields a,b,list:N` projects a result; `--limit`/`--cursor` paginate list commands.
45
+ Every command takes `--json` to emit a stable `{ ok, data | error, meta }` envelope on stdout (with structured error codes and agent-mode exit codes); advisory/human text goes to stderr. A failure envelope adds the server's granular `reason` — `validation.missing_field`, `limit.exceeded`, `conflict.state`, … — beside the coarse `code`, optionally with `field`, `limit`, `retryable`, `phase`, and bounded sanitized `provider` lifecycle diagnostics (AD-237/261). `--quiet` (auto under `--json` or a pipe) silences the advisory stream. `--fields a,b,list:N` projects a result; `--limit`/`--cursor` paginate list commands.
46
46
 
47
47
  ```bash
48
48
  arbor inbox --json --limit 20
package/dist/arbor.js CHANGED
@@ -1331,7 +1331,10 @@ var ts = (name) => text(name);
1331
1331
  var orgs = sqliteTable("orgs", {
1332
1332
  id: text("id").primaryKey(),
1333
1333
  name: text("name").notNull(),
1334
- createdAt: ts("created_at").notNull()
1334
+ createdAt: ts("created_at").notNull(),
1335
+ status: text("status").$type().notNull().default("active"),
1336
+ lockedAt: ts("locked_at"),
1337
+ lockedReason: text("locked_reason")
1335
1338
  });
1336
1339
  var profiles = sqliteTable("profiles", {
1337
1340
  id: text("id").primaryKey(),
@@ -2078,6 +2081,9 @@ var watches = sqliteTable("watches", {
2078
2081
  watchUq: uniqueIndex("watches_watcher_target_uniq").on(t.watcherProfileId, t.targetType, t.targetId),
2079
2082
  watchTargetIdx: index("watches_target_idx").on(t.targetType, t.targetId)
2080
2083
  }));
2084
+ // ../core/src/ops/computer.ts
2085
+ var MAX_COMPUTER_REPOSITORIES = 10;
2086
+
2081
2087
  // ../core/src/ops/request.ts
2082
2088
  var REQUEST_TTL_MS = 14 * 24 * 60 * 60 * 1000;
2083
2089
 
@@ -16618,7 +16624,8 @@ var computerProfile = exports_external.looseObject({
16618
16624
  id: exports_external.string(),
16619
16625
  version: exports_external.number(),
16620
16626
  shell: exports_external.string(),
16621
- runtimes: exports_external.looseObject({ bun: exports_external.string() }),
16627
+ runtimes: exports_external.looseObject({ bun: exports_external.string(), node: exports_external.string() }),
16628
+ packageManagers: exports_external.looseObject({ pnpm: exports_external.string() }),
16622
16629
  tools: exports_external.array(exports_external.string()),
16623
16630
  recommendedEditingPrimitive: exports_external.string()
16624
16631
  });
@@ -17072,7 +17079,8 @@ var MCP_OUTPUT_SCHEMAS = {
17072
17079
  watching: exports_external.boolean().optional(),
17073
17080
  url: exports_external.string().optional(),
17074
17081
  versions: exports_external.array(jsonObject).optional(),
17075
- appBundles: exports_external.array(jsonObject).optional()
17082
+ appBundles: exports_external.array(jsonObject).optional(),
17083
+ usedByApps: exports_external.array(jsonObject).optional()
17076
17084
  }),
17077
17085
  artifact_get: exports_external.looseObject({
17078
17086
  id,
@@ -17083,6 +17091,7 @@ var MCP_OUTPUT_SCHEMAS = {
17083
17091
  version: exports_external.number().optional(),
17084
17092
  versions: exports_external.array(jsonObject).optional(),
17085
17093
  appBundles: exports_external.array(jsonObject),
17094
+ usedByApps: exports_external.array(jsonObject),
17086
17095
  watching: exports_external.boolean(),
17087
17096
  url: exports_external.string()
17088
17097
  }),
@@ -17693,9 +17702,9 @@ var ACTION_DEFINITIONS = [
17693
17702
  description: "Replace your organization's sparse computer-default layer without allocating runtime state. Omitted/null values fall back to provider defaults; Space, Topic, and Thread layers may override individual fields.",
17694
17703
  inputSchema: {
17695
17704
  backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("default execution tier, or null to use worker-shell"),
17696
- containerProfile: exports_external.string().nullable().optional().describe("logical container profile; use bun-typescript-v1 for the pinned Bun monorepo toolchain, or null to clear"),
17697
- setupScript: exports_external.string().nullable().optional().describe("optional setup run when materializing a reusable base, or null to clear"),
17698
- repositories: exports_external.array(exports_external.string()).nullable().optional().describe("default repositories, repeated --repositories; [] clears and null inherits provider default")
17705
+ containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, Node 26.5.1, and pnpm 10.33.0, or null to clear"),
17706
+ setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize, or null to clear"),
17707
+ repositories: exports_external.array(exports_external.string()).max(MAX_COMPUTER_REPOSITORIES).nullable().optional().describe("connected GitHub repositories to materialize into a fresh reusable base and allow for later Git calls; [] clears and null inherits")
17699
17708
  },
17700
17709
  surfaces: ["mcp", "cli"],
17701
17710
  toolset: "structure",
@@ -17708,9 +17717,9 @@ var ACTION_DEFINITIONS = [
17708
17717
  inputSchema: {
17709
17718
  spaceId: exports_external.string().describe("the Space, spc_…"),
17710
17719
  backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
17711
- containerProfile: exports_external.string().nullable().optional().describe("logical container profile; use bun-typescript-v1 for the pinned Bun monorepo toolchain, or null to clear inherited profile"),
17712
- setupScript: exports_external.string().nullable().optional().describe("optional setup run when materializing a reusable base, or null to clear"),
17713
- repositories: exports_external.array(exports_external.string()).nullable().optional().describe("repository allowlist/default clones; [] clears and null inherits")
17720
+ containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, Node 26.5.1, and pnpm 10.33.0, or null to clear inherited profile"),
17721
+ setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize, or null to clear"),
17722
+ repositories: exports_external.array(exports_external.string()).max(MAX_COMPUTER_REPOSITORIES).nullable().optional().describe("connected GitHub repositories to materialize into a fresh reusable base and allow for later Git calls; [] clears and null inherits")
17714
17723
  },
17715
17724
  surfaces: ["mcp", "cli"],
17716
17725
  toolset: "structure",
@@ -17723,9 +17732,9 @@ var ACTION_DEFINITIONS = [
17723
17732
  inputSchema: {
17724
17733
  topicId: exports_external.string().describe("the Topic, top_…"),
17725
17734
  backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
17726
- containerProfile: exports_external.string().nullable().optional().describe("logical container profile; use bun-typescript-v1 for the pinned Bun monorepo toolchain, or null to clear inherited profile"),
17727
- setupScript: exports_external.string().nullable().optional().describe("optional setup run, or null to clear"),
17728
- repositories: exports_external.array(exports_external.string()).nullable().optional().describe("repository allowlist/default clones; [] clears and null inherits")
17735
+ containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, Node 26.5.1, and pnpm 10.33.0, or null to clear inherited profile"),
17736
+ setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize"),
17737
+ repositories: exports_external.array(exports_external.string()).max(MAX_COMPUTER_REPOSITORIES).nullable().optional().describe("connected GitHub repositories to materialize into a fresh reusable base and allow for later Git calls; [] clears and null inherits")
17729
17738
  },
17730
17739
  surfaces: ["mcp", "cli"],
17731
17740
  toolset: "structure",
@@ -17738,9 +17747,9 @@ var ACTION_DEFINITIONS = [
17738
17747
  inputSchema: {
17739
17748
  threadId: exports_external.string().describe("the Thread, thr_…"),
17740
17749
  backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
17741
- containerProfile: exports_external.string().nullable().optional().describe("logical container profile; use bun-typescript-v1 for the pinned Bun monorepo toolchain, or null to clear inherited profile"),
17742
- setupScript: exports_external.string().nullable().optional().describe("optional setup run, or null to clear"),
17743
- repositories: exports_external.array(exports_external.string()).nullable().optional().describe("repository allowlist/default clones; [] clears and null inherits")
17750
+ containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, Node 26.5.1, and pnpm 10.33.0, or null to clear inherited profile"),
17751
+ setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize"),
17752
+ repositories: exports_external.array(exports_external.string()).max(MAX_COMPUTER_REPOSITORIES).nullable().optional().describe("connected GitHub repositories to materialize into a fresh reusable base and allow for later Git calls; [] clears and null inherits")
17744
17753
  },
17745
17754
  surfaces: ["mcp", "cli"],
17746
17755
  toolset: "structure",
@@ -17760,7 +17769,7 @@ var ACTION_DEFINITIONS = [
17760
17769
  {
17761
17770
  name: "computer_open",
17762
17771
  title: "Open a Thread computer",
17763
- description: "Open or resume this Thread's project environment for filesystem or command work. Returns computerSessionId and, when a declared container profile is selected, its guaranteed shell/runtimes/tools/editing primitive; pass the session id unchanged to later Computer tools and to Contributions or responses produced from the work.",
17772
+ description: "Open or resume this Thread's project environment for filesystem or command work. Every configured repository is re-authorized through its explicit GitHub connection; a fresh reusable base clones it with a request-scoped contents:read credential before strict setup runs, while a restore receives no credential. Returns computerSessionId and the selected profile contract; pass the session id unchanged to later Computer tools and cited work.",
17764
17773
  inputSchema: {
17765
17774
  threadId: exports_external.string().describe("the Arbor Thread whose stable computer to open, thr_…"),
17766
17775
  vcpus: exports_external.number().int().min(1).max(4).optional().describe("optional container vCPU request"),
@@ -19483,6 +19492,20 @@ function parseErrorDetails(value) {
19483
19492
  details.retryable = raw.retryable;
19484
19493
  if (typeof raw.phase === "string")
19485
19494
  details.phase = raw.phase;
19495
+ if (raw.provider && typeof raw.provider === "object" && !Array.isArray(raw.provider)) {
19496
+ const provider = raw.provider;
19497
+ if (typeof provider.stage === "string" && provider.stage !== "") {
19498
+ details.provider = {
19499
+ stage: provider.stage,
19500
+ ...typeof provider.command === "string" ? { command: provider.command } : {},
19501
+ ...typeof provider.exitCode === "number" ? { exitCode: provider.exitCode } : {},
19502
+ ...typeof provider.stdout === "string" ? { stdout: provider.stdout } : {},
19503
+ ...typeof provider.stderr === "string" ? { stderr: provider.stderr } : {},
19504
+ ...typeof provider.containerStarted === "boolean" ? { containerStarted: provider.containerStarted } : {},
19505
+ ...typeof provider.repositoryMaterialized === "boolean" ? { repositoryMaterialized: provider.repositoryMaterialized } : {}
19506
+ };
19507
+ }
19508
+ }
19486
19509
  return details;
19487
19510
  }
19488
19511
  function detailsForError(err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.14.1",
3
+ "version": "0.14.3",
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",
@@ -36,7 +36,7 @@
36
36
  "devDependencies": {
37
37
  "@arbor/actions": "workspace:*",
38
38
  "@arbor/core": "workspace:*",
39
- "@types/node": "^22.19.19",
39
+ "@types/node": "^26.2.0",
40
40
  "tsx": "^4.20.6",
41
41
  "typescript": "^5.8.0",
42
42
  "vitest": "^4.1.4",