@lambdacurry/arbor 0.17.4 → 0.17.6

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 +14 -153
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -16678,6 +16678,7 @@ var redactedComputerRecipe = exports_external.looseObject({
16678
16678
  provider: exports_external.string(),
16679
16679
  backend: exports_external.enum(["worker-shell", "container"]),
16680
16680
  containerProfile: nullableString,
16681
+ containerProfileRevision: exports_external.number().int().nullable(),
16681
16682
  repositories: exports_external.array(exports_external.string()),
16682
16683
  setupScriptConfigured: exports_external.boolean(),
16683
16684
  configRevision: exports_external.string(),
@@ -17345,7 +17346,13 @@ var MCP_OUTPUT_SCHEMAS = {
17345
17346
  repositories: exports_external.array(exports_external.looseObject({ repository: exports_external.string(), path: exports_external.string() })),
17346
17347
  defaultCwd: exports_external.string(),
17347
17348
  capabilities: computerCapabilityCard,
17348
- runtime: jsonObject
17349
+ runtime: jsonObject,
17350
+ reconciliation: exports_external.looseObject({
17351
+ action: exports_external.literal("automatic_reprovision"),
17352
+ reason: exports_external.literal("container_profile_revision"),
17353
+ fromContainerProfileRevision: exports_external.number().int().nullable(),
17354
+ toContainerProfileRevision: exports_external.number().int().nullable()
17355
+ }).optional()
17349
17356
  }),
17350
17357
  computer_reprovision: exports_external.looseObject({
17351
17358
  reprovisionId: id,
@@ -17415,11 +17422,6 @@ var MCP_OUTPUT_SCHEMAS = {
17415
17422
  sha256: exports_external.string()
17416
17423
  })
17417
17424
  }),
17418
- computer_read: exports_external.looseObject({
17419
- content: exports_external.string(),
17420
- size: exports_external.number().optional(),
17421
- encoding: exports_external.string().optional()
17422
- }),
17423
17425
  computer_export: exports_external.looseObject({
17424
17426
  computerSessionId: id,
17425
17427
  replayed: exports_external.boolean(),
@@ -17431,56 +17433,6 @@ var MCP_OUTPUT_SCHEMAS = {
17431
17433
  path: exports_external.string().optional(),
17432
17434
  size: exports_external.number().optional()
17433
17435
  }),
17434
- computer_clone: exports_external.looseObject({
17435
- ok: exports_external.literal(true),
17436
- operation: exports_external.literal("clone"),
17437
- repository: exports_external.string(),
17438
- dir: exports_external.string(),
17439
- credential: exports_external.literal("caller"),
17440
- branch: exports_external.string().optional(),
17441
- head: exports_external.string().optional(),
17442
- refs: exports_external.array(exports_external.string()).optional()
17443
- }),
17444
- computer_fetch: exports_external.looseObject({
17445
- ok: exports_external.literal(true),
17446
- operation: exports_external.literal("fetch"),
17447
- repository: exports_external.string(),
17448
- dir: exports_external.string(),
17449
- credential: exports_external.enum(["caller", "arbor-managed"]),
17450
- branch: exports_external.string().optional(),
17451
- head: exports_external.string().optional(),
17452
- fetchHead: exports_external.string().optional(),
17453
- refs: exports_external.array(exports_external.string()).optional()
17454
- }),
17455
- computer_pull: exports_external.looseObject({
17456
- ok: exports_external.literal(true),
17457
- operation: exports_external.literal("pull"),
17458
- repository: exports_external.string(),
17459
- dir: exports_external.string(),
17460
- credential: exports_external.enum(["caller", "arbor-managed"]),
17461
- branch: exports_external.string().optional(),
17462
- head: exports_external.string().optional(),
17463
- before: exports_external.string().optional(),
17464
- after: exports_external.string().optional(),
17465
- fetchHead: exports_external.string().optional(),
17466
- refs: exports_external.array(exports_external.string()).optional(),
17467
- remoteTracking: exports_external.union([
17468
- exports_external.looseObject({ updated: exports_external.literal(true), ref: exports_external.string(), head: exports_external.string() }),
17469
- exports_external.looseObject({ updated: exports_external.literal(false), reason: exports_external.literal("untracked_workspace") })
17470
- ])
17471
- }),
17472
- computer_push: exports_external.looseObject({
17473
- ok: exports_external.literal(true),
17474
- operation: exports_external.literal("push"),
17475
- repository: exports_external.string(),
17476
- dir: exports_external.string(),
17477
- credential: exports_external.enum(["caller", "github-user"]),
17478
- branch: exports_external.string().optional(),
17479
- head: exports_external.string().optional(),
17480
- before: exports_external.string().optional(),
17481
- after: exports_external.string().optional(),
17482
- refs: exports_external.array(exports_external.string()).optional()
17483
- }),
17484
17436
  computer_checkpoint: checkpoint,
17485
17437
  computer_publish_preview: exports_external.looseObject({
17486
17438
  previewId: id,
@@ -17595,12 +17547,6 @@ var destructiveOpenWorld = {
17595
17547
  idempotentHint: false,
17596
17548
  openWorldHint: true
17597
17549
  };
17598
- var idempotentOpenWorld = {
17599
- readOnlyHint: false,
17600
- destructiveHint: false,
17601
- idempotentHint: true,
17602
- openWorldHint: true
17603
- };
17604
17550
  var MCP_TOOL_ANNOTATIONS = {
17605
17551
  server_info: readOnly,
17606
17552
  recall: readOnly,
@@ -17684,13 +17630,8 @@ var MCP_TOOL_ANNOTATIONS = {
17684
17630
  code_implementations: readOnly,
17685
17631
  code_diagnostics: readOnly,
17686
17632
  computer_verify: openWorld,
17687
- computer_read: readOnly,
17688
17633
  computer_export: idempotent,
17689
17634
  computer_write: destructive,
17690
- computer_clone: idempotentOpenWorld,
17691
- computer_fetch: idempotentOpenWorld,
17692
- computer_pull: destructiveOpenWorld,
17693
- computer_push: destructiveOpenWorld,
17694
17635
  computer_checkpoint: additive,
17695
17636
  computer_publish_preview: idempotent,
17696
17637
  computer_publish_app_bundle: idempotent,
@@ -18056,7 +17997,7 @@ var ACTION_DEFINITIONS = [
18056
17997
  {
18057
17998
  name: "computer_open",
18058
17999
  title: "Open a Thread computer",
18059
- 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 — pass it unchanged to later Computer tools and cited work — plus the selected profile contract (including GitHub CLI (gh) on bun-typescript-v1), a resolved capabilities card, workspaceRoot, each materialized repositories[].path, and defaultCwd. Omitted computer_exec.cwd uses defaultCwd: the single checkout when exactly one repository is configured, workspaceRoot otherwise.",
18000
+ description: "Open or resume this Thread's project environment for filesystem or command work. A safe living-profile revision drift is reconciled automatically by replacing the generation, restoring supported state, and returning reconciliation metadata; structural recipe changes still fail explicitly with computer_reprovision as the suggested action. 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 — pass it unchanged to later Computer tools and cited work — plus the selected profile contract (including GitHub CLI (gh) on bun-typescript-v1), a resolved capabilities card, workspaceRoot, each materialized repositories[].path, and defaultCwd. Omitted computer_exec.cwd uses defaultCwd: the single checkout when exactly one repository is configured, workspaceRoot otherwise.",
18060
18001
  inputSchema: {
18061
18002
  threadId: exports_external.string().describe("the Arbor Thread whose stable computer to open, thr_…"),
18062
18003
  vcpus: exports_external.number().int().min(1).max(4).optional().describe("optional container vCPU request"),
@@ -18208,18 +18149,6 @@ var ACTION_DEFINITIONS = [
18208
18149
  toolset: "loop",
18209
18150
  run: forward("computer_code.diagnostics")
18210
18151
  },
18211
- {
18212
- name: "computer_read",
18213
- title: "Read a project file",
18214
- description: "Read one file from the opened computer when command output is the wrong shape. Paths must stay under /workspace.",
18215
- inputSchema: {
18216
- computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18217
- path: exports_external.string().describe("absolute path under /workspace")
18218
- },
18219
- surfaces: ["computer-mcp", "computer-cli"],
18220
- toolset: "loop",
18221
- run: forward("computer_runtime.read")
18222
- },
18223
18152
  {
18224
18153
  name: "computer_export",
18225
18154
  title: "Export a Thread file",
@@ -18248,81 +18177,10 @@ var ACTION_DEFINITIONS = [
18248
18177
  toolset: "loop",
18249
18178
  run: forward("computer_runtime.write")
18250
18179
  },
18251
- {
18252
- name: "computer_clone",
18253
- title: "Clone an allowed repository",
18254
- description: "Clone a repository named by the resolved computer recipe, supplying the working collaborator's GitHub token just in time. The token is spent only on this call and is neither returned nor persisted in the workspace.",
18255
- inputSchema: {
18256
- computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18257
- repository: exports_external.string().describe("allowed owner/repository slug"),
18258
- githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
18259
- githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
18260
- },
18261
- surfaces: ["computer-mcp", "computer-cli"],
18262
- toolset: "loop",
18263
- run: forward("computer_runtime.clone")
18264
- },
18265
- {
18266
- name: "computer_sync",
18267
- title: "Sync an allowed repository",
18268
- description: "Fetch, fast-forward pull, or push the checked-out branch of a cloned recipe repository. OMIT githubToken to refresh a repository named in this computer's effective recipe with Arbor's own managed credential — Arbor rechecks the repository connection and mints a request-scoped one-repository read credential server-side, so a restored computer can reach current history with no token of yours. Managed refresh covers fetch and pull; push writes to GitHub, so omit githubToken there to push as the signed-in human's GitHub identity connected in Account Settings, or supply your just-in-time collaborator token as an override. The lightweight Computer fixes the allowlisted GitHub URL, never force-pushes or deletes refs, and neither stores nor returns either credential.",
18269
- inputSchema: {
18270
- computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18271
- repository: exports_external.string().describe("allowed owner/repository slug already cloned by computer_clone"),
18272
- operation: exports_external.enum(["fetch", "pull", "push"]).describe("network operation to perform"),
18273
- githubToken: exports_external.string().min(1).optional().describe("short-lived collaborator GitHub token; omit for fetch/pull to use Arbor's managed read credential, or for push to use the signed-in human's connected GitHub identity"),
18274
- githubUsername: exports_external.string().optional().describe("GitHub username for a supplied githubToken; defaults to x-access-token")
18275
- },
18276
- surfaces: ["computer-cli"],
18277
- toolset: "loop",
18278
- run: forward("computer_runtime.sync")
18279
- },
18280
- {
18281
- name: "computer_fetch",
18282
- title: "Fetch an allowed repository",
18283
- description: `Fetch remote refs for a cloned recipe repository without changing its checked-out branch or any remote ref. OMIT githubToken and Arbor refreshes it for you: it rechecks that the repository is in this computer's effective recipe and still connected, mints a request-scoped one-repository read credential server-side, spends it on this fetch alone, and returns credential: "arbor-managed" — this is the way a RESTORED computer, which deliberately holds no credential, catches up with the remote. Supply githubToken instead to fetch as the collaborator. Neither credential is stored or returned.`,
18284
- inputSchema: {
18285
- computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18286
- repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
18287
- githubToken: exports_external.string().min(1).optional().describe("short-lived collaborator GitHub token; omit to use Arbor's managed recipe credential"),
18288
- githubUsername: exports_external.string().optional().describe("GitHub username for a supplied githubToken; defaults to x-access-token")
18289
- },
18290
- surfaces: ["computer-mcp"],
18291
- toolset: "loop",
18292
- run: (ex, input) => ex.call("computer_runtime.sync", { ...input, operation: "fetch" })
18293
- },
18294
- {
18295
- name: "computer_pull",
18296
- title: "Fast-forward an allowed repository",
18297
- description: "Fetch and fast-forward the checked-out branch of a cloned recipe repository; divergent history, a dirty working tree, and anything needing a merge are rejected rather than forced. A returned pull also PROVES the branch's remote-tracking ref reached the fetched tip and reports it as remoteTracking, so ordinary `git status` and `git log origin/<branch>` stay true instead of showing a level checkout as ahead; if that cannot be proven the call fails as retryable with the landed fast-forward attached, rather than reporting a truthful pull it did not verify. remoteTracking.updated is false only when the checked-out branch does not track this repository at all. OMIT githubToken and Arbor pulls with its own managed recipe credential after rechecking the repository connection — the way a restored computer reaches current history. Supply githubToken instead to pull as the collaborator. Neither credential is stored or returned.",
18298
- inputSchema: {
18299
- computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18300
- repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
18301
- githubToken: exports_external.string().min(1).optional().describe("short-lived collaborator GitHub token; omit to use Arbor's managed recipe credential"),
18302
- githubUsername: exports_external.string().optional().describe("GitHub username for a supplied githubToken; defaults to x-access-token")
18303
- },
18304
- surfaces: ["computer-mcp"],
18305
- toolset: "loop",
18306
- run: (ex, input) => ex.call("computer_runtime.sync", { ...input, operation: "pull" })
18307
- },
18308
- {
18309
- name: "computer_push",
18310
- title: "Push an allowed repository",
18311
- description: "Push the checked-out branch to its fixed allowlisted GitHub repository without force-pushing or deleting refs. OMIT githubToken to use the signed-in human's GitHub connection from Account Settings; Arbor refreshes that GitHub App user credential server-side and never returns or persists it in the Computer. Supply githubToken only for an explicit caller credential override.",
18312
- inputSchema: {
18313
- computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18314
- repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
18315
- githubToken: exports_external.string().min(1).optional().describe("optional short-lived GitHub token override; omit to use your connected GitHub identity"),
18316
- githubUsername: exports_external.string().optional().describe("GitHub username for a supplied githubToken; omit for your connected GitHub identity")
18317
- },
18318
- surfaces: ["computer-mcp"],
18319
- toolset: "loop",
18320
- run: (ex, input) => ex.call("computer_runtime.sync", { ...input, operation: "push" })
18321
- },
18322
18180
  {
18323
18181
  name: "computer_checkpoint",
18324
18182
  title: "Checkpoint completed work",
18325
- description: "Save an intermediate complete unit of project work into durable Thread lineage. For the final unit, call computer_stop instead; it performs the final checkpoint before teardown. No checkpoint is needed for computer_verify alone because remote visual capture starts no project runtime.",
18183
+ description: "Save an intermediate complete unit of project work into durable Thread lineage. A running background process may still be writing the workspace, so checkpointing refuses until it is finished or explicitly terminated; use computer_status to inspect active processes. For the final unit, call computer_stop instead; it performs the final checkpoint before teardown. No checkpoint is needed for computer_verify alone because remote visual capture starts no project runtime.",
18326
18184
  inputSchema: {
18327
18185
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…")
18328
18186
  },
@@ -18369,7 +18227,7 @@ var ACTION_DEFINITIONS = [
18369
18227
  {
18370
18228
  name: "computer_stop",
18371
18229
  title: "Checkpoint and stop",
18372
- description: "Finish an opened computer after a unit of work. Currybox checkpoints and Arbor publishes before teardown; any durability failure refuses the stop instead of silently discarding state.",
18230
+ description: "Finish an opened computer after a unit of work. Currybox checkpoints and Arbor publishes before teardown; any durability failure refuses the stop instead of silently discarding state. A running background process also refuses the checkpoint; use computer_status to inspect it and computer_process_terminate when it should be stopped.",
18373
18231
  inputSchema: {
18374
18232
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…")
18375
18233
  },
@@ -19921,6 +19779,9 @@ function parseErrorDetails(value) {
19921
19779
  if (typeof raw.compatibilityState === "string") {
19922
19780
  details.compatibilityState = raw.compatibilityState;
19923
19781
  }
19782
+ if (typeof raw.compatibilityReason === "string") {
19783
+ details.compatibilityReason = raw.compatibilityReason;
19784
+ }
19924
19785
  if (typeof raw.suggestedAction === "string")
19925
19786
  details.suggestedAction = raw.suggestedAction;
19926
19787
  return details;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.17.4",
3
+ "version": "0.17.6",
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",