@lambdacurry/arbor 0.17.3 → 0.17.5

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 +65 -9
  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,
@@ -17365,10 +17372,29 @@ var MCP_OUTPUT_SCHEMAS = {
17365
17372
  stderr: exports_external.string().optional(),
17366
17373
  exitCode: exports_external.number().optional(),
17367
17374
  jobId: exports_external.string().optional(),
17375
+ processId: exports_external.string().optional(),
17368
17376
  status: exports_external.string().optional(),
17369
17377
  cwd: exports_external.string(),
17370
17378
  strict: exports_external.boolean()
17371
17379
  }),
17380
+ computer_process_read: exports_external.looseObject({
17381
+ processId: id,
17382
+ status: exports_external.string(),
17383
+ command: exports_external.string().optional(),
17384
+ cwd: exports_external.string().optional(),
17385
+ startedAt: timestamp.nullable().optional(),
17386
+ endedAt: timestamp.nullable().optional(),
17387
+ durationMs: exports_external.number().int().min(0).nullable().optional(),
17388
+ stdout: exports_external.string().optional(),
17389
+ stderr: exports_external.string().optional(),
17390
+ truncated: exports_external.boolean().optional(),
17391
+ exitCode: exports_external.number().int().nullable().optional()
17392
+ }),
17393
+ computer_process_terminate: exports_external.looseObject({
17394
+ processId: id,
17395
+ status: exports_external.string(),
17396
+ terminated: exports_external.boolean().optional()
17397
+ }),
17372
17398
  computer_status: exports_external.looseObject({
17373
17399
  computerSessionId: id,
17374
17400
  computerId: id,
@@ -17656,6 +17682,8 @@ var MCP_TOOL_ANNOTATIONS = {
17656
17682
  computer_open: additive,
17657
17683
  computer_reprovision: destructiveIdempotent,
17658
17684
  computer_exec: destructiveOpenWorld,
17685
+ computer_process_read: readOnly,
17686
+ computer_process_terminate: destructiveOpenWorld,
17659
17687
  computer_status: readOnly,
17660
17688
  code_symbols: readOnly,
17661
17689
  code_find_symbol: readOnly,
@@ -17968,7 +17996,7 @@ var ACTION_DEFINITIONS = [
17968
17996
  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.",
17969
17997
  inputSchema: {
17970
17998
  backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("default execution tier, or null to use worker-shell"),
17971
- containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, and ripgrep (rg), or null to clear"),
17999
+ containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, GitHub CLI (gh), Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, Python 3.13.15 (python/python3), jq, and ripgrep (rg), or null to clear"),
17972
18000
  setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize, or null to clear"),
17973
18001
  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")
17974
18002
  },
@@ -17983,7 +18011,7 @@ var ACTION_DEFINITIONS = [
17983
18011
  inputSchema: {
17984
18012
  spaceId: exports_external.string().describe("the Space, spc_…"),
17985
18013
  backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
17986
- containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, and ripgrep (rg), or null to clear inherited profile"),
18014
+ containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, GitHub CLI (gh), Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, Python 3.13.15 (python/python3), jq, and ripgrep (rg), or null to clear inherited profile"),
17987
18015
  setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize, or null to clear"),
17988
18016
  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")
17989
18017
  },
@@ -17998,7 +18026,7 @@ var ACTION_DEFINITIONS = [
17998
18026
  inputSchema: {
17999
18027
  topicId: exports_external.string().describe("the Topic, top_…"),
18000
18028
  backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
18001
- containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, and ripgrep (rg), or null to clear inherited profile"),
18029
+ containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, GitHub CLI (gh), Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, Python 3.13.15 (python/python3), jq, and ripgrep (rg), or null to clear inherited profile"),
18002
18030
  setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize"),
18003
18031
  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")
18004
18032
  },
@@ -18013,7 +18041,7 @@ var ACTION_DEFINITIONS = [
18013
18041
  inputSchema: {
18014
18042
  threadId: exports_external.string().describe("the Thread, thr_…"),
18015
18043
  backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
18016
- containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, and ripgrep (rg), or null to clear inherited profile"),
18044
+ containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, GitHub CLI (gh), Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, Python 3.13.15 (python/python3), jq, and ripgrep (rg), or null to clear inherited profile"),
18017
18045
  setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize"),
18018
18046
  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")
18019
18047
  },
@@ -18035,7 +18063,7 @@ var ACTION_DEFINITIONS = [
18035
18063
  {
18036
18064
  name: "computer_open",
18037
18065
  title: "Open a Thread computer",
18038
- 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, 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.",
18066
+ 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.",
18039
18067
  inputSchema: {
18040
18068
  threadId: exports_external.string().describe("the Arbor Thread whose stable computer to open, thr_…"),
18041
18069
  vcpus: exports_external.number().int().min(1).max(4).optional().describe("optional container vCPU request"),
@@ -18061,7 +18089,7 @@ var ACTION_DEFINITIONS = [
18061
18089
  {
18062
18090
  name: "computer_exec",
18063
18091
  title: "Run a command",
18064
- description: "Run one bounded logical operation in an opened Thread computer. Omitting cwd runs from the Computer's defaultCwd — the one materialized checkout when the recipe has exactly one repository, otherwise the workspace root — and the receipt echoes the cwd it ran in; pass cwd explicitly to override it. Strict Bash semantics are ON by default: an early command failure or failed pipeline makes the execution nonzero, while explicit handling such as `cmd || fallback` still works. Set strict=false only for an intentional best-effort script. For a connected human working inside a configured repository, Arbor supplies that human’s GitHub-linked author/committer identity ephemerally for the exec without writing it into the workspace; command-local Git environment overrides may still replace it. Use background only for the container backend; worker-shell deliberately serializes mutations and rejects long-lived processes.",
18092
+ description: "Run one bounded logical operation in an opened Thread computer. Omitting cwd runs from the Computer's defaultCwd — the one materialized checkout when the recipe has exactly one repository, otherwise the workspace root — and the receipt echoes the cwd it ran in; pass cwd explicitly to override it. Strict Bash semantics are ON by default: an early command failure or failed pipeline makes the execution nonzero, while explicit handling such as `cmd || fallback` still works. Set strict=false only for an intentional best-effort script. For a connected human, Arbor supplies ambient GitHub authorization for normal gh/HTTPS Git commands and GitHub-linked author/committer identity ephemerally for every exec without writing credentials into the workspace; command-local Git environment overrides may still replace the identity. Use background only for the container backend; it returns a processId for computer_process_read / computer_process_terminate. worker-shell deliberately serializes mutations and rejects long-lived processes.",
18065
18093
  inputSchema: {
18066
18094
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18067
18095
  command: exports_external.string().min(1).describe("the shell command to run"),
@@ -18074,6 +18102,31 @@ var ACTION_DEFINITIONS = [
18074
18102
  toolset: "loop",
18075
18103
  run: forward("computer_runtime.exec")
18076
18104
  },
18105
+ {
18106
+ name: "computer_process_read",
18107
+ title: "Read a background process",
18108
+ description: "READ ONLY: Inspect one process returned by computer_exec(background=true). Returns provider-owned lifecycle metadata plus bounded latest stdout/stderr and, once terminal, the final exit result. Re-read the same processId for progress without sentinel files or shell process archaeology.",
18109
+ inputSchema: {
18110
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18111
+ processId: exports_external.string().min(1).describe("the opaque processId returned by computer_exec(background=true), proc_…"),
18112
+ maxBytes: exports_external.number().int().min(1024).max(65536).optional().describe("maximum combined output bytes to return; default 16,384")
18113
+ },
18114
+ surfaces: ["computer-mcp", "computer-cli"],
18115
+ toolset: "loop",
18116
+ run: forward("computer_runtime.process_read")
18117
+ },
18118
+ {
18119
+ name: "computer_process_terminate",
18120
+ title: "Terminate a background process",
18121
+ description: "Terminate one process returned by computer_exec(background=true), including its provider-owned process tree. Returns the observed terminal state so ChatGPT can stop long verification explicitly without shell PIDs or ps/kill workarounds.",
18122
+ inputSchema: {
18123
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18124
+ processId: exports_external.string().min(1).describe("the opaque processId returned by computer_exec(background=true), proc_…")
18125
+ },
18126
+ surfaces: ["computer-mcp", "computer-cli"],
18127
+ toolset: "loop",
18128
+ run: forward("computer_runtime.process_terminate")
18129
+ },
18077
18130
  {
18078
18131
  name: "computer_status",
18079
18132
  title: "Inspect a computer",
@@ -18276,7 +18329,7 @@ var ACTION_DEFINITIONS = [
18276
18329
  {
18277
18330
  name: "computer_checkpoint",
18278
18331
  title: "Checkpoint completed work",
18279
- 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.",
18332
+ 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.",
18280
18333
  inputSchema: {
18281
18334
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…")
18282
18335
  },
@@ -18323,7 +18376,7 @@ var ACTION_DEFINITIONS = [
18323
18376
  {
18324
18377
  name: "computer_stop",
18325
18378
  title: "Checkpoint and stop",
18326
- 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.",
18379
+ 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.",
18327
18380
  inputSchema: {
18328
18381
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…")
18329
18382
  },
@@ -19875,6 +19928,9 @@ function parseErrorDetails(value) {
19875
19928
  if (typeof raw.compatibilityState === "string") {
19876
19929
  details.compatibilityState = raw.compatibilityState;
19877
19930
  }
19931
+ if (typeof raw.compatibilityReason === "string") {
19932
+ details.compatibilityReason = raw.compatibilityReason;
19933
+ }
19878
19934
  if (typeof raw.suggestedAction === "string")
19879
19935
  details.suggestedAction = raw.suggestedAction;
19880
19936
  return details;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.17.3",
3
+ "version": "0.17.5",
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",