@lambdacurry/arbor 0.16.0 → 0.16.2

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 +153 -11
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -16727,6 +16727,27 @@ var computerProfile = exports_external.looseObject({
16727
16727
  tools: exports_external.array(exports_external.string()),
16728
16728
  recommendedEditingPrimitive: exports_external.string()
16729
16729
  });
16730
+ var computerCapabilityCard = exports_external.looseObject({
16731
+ capabilities: exports_external.array(exports_external.looseObject({
16732
+ id: exports_external.string(),
16733
+ state: exports_external.enum(["ready", "available"]),
16734
+ surface: exports_external.array(exports_external.string()),
16735
+ hint: exports_external.string().optional()
16736
+ })),
16737
+ diagnostics: exports_external.looseObject({
16738
+ backend: exports_external.enum(["worker-shell", "container"]),
16739
+ containerProfile: nullableString,
16740
+ runtimeActive: exports_external.boolean()
16741
+ })
16742
+ });
16743
+ var codeSymbol = exports_external.looseObject({
16744
+ namePath: exports_external.string(),
16745
+ kind: exports_external.string(),
16746
+ path: exports_external.string(),
16747
+ startLine: exports_external.number().optional(),
16748
+ endLine: exports_external.number().optional(),
16749
+ body: exports_external.string().optional()
16750
+ });
16730
16751
  var appBundleSourceProvenance = exports_external.looseObject({
16731
16752
  entryPath: exports_external.string(),
16732
16753
  artifactVersionSha256: exports_external.string(),
@@ -17311,6 +17332,10 @@ var MCP_OUTPUT_SCHEMAS = {
17311
17332
  profile: computerProfile.nullable(),
17312
17333
  startingSnapshot: snapshot.nullable(),
17313
17334
  materialized: checkpoint.nullable(),
17335
+ workspaceRoot: exports_external.string(),
17336
+ repositories: exports_external.array(exports_external.looseObject({ repository: exports_external.string(), path: exports_external.string() })),
17337
+ defaultCwd: exports_external.string(),
17338
+ capabilities: computerCapabilityCard,
17314
17339
  runtime: jsonObject
17315
17340
  }),
17316
17341
  computer_reprovision: exports_external.looseObject({
@@ -17332,14 +17357,17 @@ var MCP_OUTPUT_SCHEMAS = {
17332
17357
  exitCode: exports_external.number().optional(),
17333
17358
  jobId: exports_external.string().optional(),
17334
17359
  status: exports_external.string().optional(),
17360
+ cwd: exports_external.string(),
17335
17361
  strict: exports_external.boolean()
17336
17362
  }),
17337
17363
  computer_status: exports_external.looseObject({
17338
- ok: exports_external.boolean().optional(),
17339
- status: exports_external.string().optional(),
17340
- backend: exports_external.string().optional(),
17341
- processes: exports_external.array(jsonObject).optional(),
17342
- profile: computerProfile.nullable()
17364
+ computerSessionId: id,
17365
+ computerId: id,
17366
+ status: exports_external.enum(["running", "dormant"]),
17367
+ backend: exports_external.enum(["worker-shell", "container"]),
17368
+ profile: computerProfile.nullable(),
17369
+ capabilities: computerCapabilityCard,
17370
+ runtime: jsonObject
17343
17371
  }),
17344
17372
  computer_verify: exports_external.looseObject({
17345
17373
  passed: exports_external.literal(true),
@@ -17407,7 +17435,11 @@ var MCP_OUTPUT_SCHEMAS = {
17407
17435
  before: exports_external.string().optional(),
17408
17436
  after: exports_external.string().optional(),
17409
17437
  fetchHead: exports_external.string().optional(),
17410
- refs: exports_external.array(exports_external.string()).optional()
17438
+ refs: exports_external.array(exports_external.string()).optional(),
17439
+ remoteTracking: exports_external.union([
17440
+ exports_external.looseObject({ updated: exports_external.literal(true), ref: exports_external.string(), head: exports_external.string() }),
17441
+ exports_external.looseObject({ updated: exports_external.literal(false), reason: exports_external.literal("untracked_workspace") })
17442
+ ])
17411
17443
  }),
17412
17444
  computer_push: exports_external.looseObject({
17413
17445
  ok: exports_external.literal(true),
@@ -17446,7 +17478,47 @@ var MCP_OUTPUT_SCHEMAS = {
17446
17478
  warnings: exports_external.array(exports_external.string()),
17447
17479
  replayed: exports_external.boolean()
17448
17480
  }),
17449
- computer_stop: exports_external.looseObject({ checkpoint, stopped: jsonObject })
17481
+ computer_stop: exports_external.looseObject({ checkpoint, stopped: jsonObject }),
17482
+ code_symbols: exports_external.looseObject({
17483
+ computerSessionId: id,
17484
+ path: exports_external.string(),
17485
+ symbols: exports_external.array(codeSymbol)
17486
+ }),
17487
+ code_find_symbol: exports_external.looseObject({
17488
+ computerSessionId: id,
17489
+ namePath: exports_external.string(),
17490
+ symbols: exports_external.array(codeSymbol)
17491
+ }),
17492
+ code_references: exports_external.looseObject({
17493
+ computerSessionId: id,
17494
+ namePath: exports_external.string(),
17495
+ path: exports_external.string(),
17496
+ references: exports_external.array(exports_external.looseObject({
17497
+ path: exports_external.string(),
17498
+ namePath: exports_external.string().optional(),
17499
+ startLine: exports_external.number().optional(),
17500
+ snippet: exports_external.string().optional()
17501
+ })),
17502
+ truncated: exports_external.boolean()
17503
+ }),
17504
+ code_implementations: exports_external.looseObject({
17505
+ computerSessionId: id,
17506
+ namePath: exports_external.string(),
17507
+ path: exports_external.string(),
17508
+ symbols: exports_external.array(codeSymbol)
17509
+ }),
17510
+ code_diagnostics: exports_external.looseObject({
17511
+ computerSessionId: id,
17512
+ path: exports_external.string(),
17513
+ diagnostics: exports_external.array(exports_external.looseObject({
17514
+ severity: exports_external.enum(["error", "warning", "information", "hint"]),
17515
+ message: exports_external.string(),
17516
+ path: exports_external.string(),
17517
+ startLine: exports_external.number().optional(),
17518
+ namePath: exports_external.string().optional()
17519
+ })),
17520
+ truncated: exports_external.boolean()
17521
+ })
17450
17522
  };
17451
17523
  function outputSchemaFor(actionName) {
17452
17524
  return MCP_OUTPUT_SCHEMAS[actionName];
@@ -17576,6 +17648,11 @@ var MCP_TOOL_ANNOTATIONS = {
17576
17648
  computer_reprovision: destructiveIdempotent,
17577
17649
  computer_exec: destructiveOpenWorld,
17578
17650
  computer_status: readOnly,
17651
+ code_symbols: readOnly,
17652
+ code_find_symbol: readOnly,
17653
+ code_references: readOnly,
17654
+ code_implementations: readOnly,
17655
+ code_diagnostics: readOnly,
17579
17656
  computer_verify: openWorld,
17580
17657
  computer_read: readOnly,
17581
17658
  computer_export: idempotent,
@@ -17949,7 +18026,7 @@ var ACTION_DEFINITIONS = [
17949
18026
  {
17950
18027
  name: "computer_open",
17951
18028
  title: "Open a Thread computer",
17952
- 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.",
18029
+ 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.",
17953
18030
  inputSchema: {
17954
18031
  threadId: exports_external.string().describe("the Arbor Thread whose stable computer to open, thr_…"),
17955
18032
  vcpus: exports_external.number().int().min(1).max(4).optional().describe("optional container vCPU request"),
@@ -17975,7 +18052,7 @@ var ACTION_DEFINITIONS = [
17975
18052
  {
17976
18053
  name: "computer_exec",
17977
18054
  title: "Run a command",
17978
- description: "Run one bounded logical operation in an opened Thread computer, normally from /workspace. 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. Use background only for the container backend; worker-shell deliberately serializes mutations and rejects long-lived processes.",
18055
+ 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. Use background only for the container backend; worker-shell deliberately serializes mutations and rejects long-lived processes.",
17979
18056
  inputSchema: {
17980
18057
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
17981
18058
  command: exports_external.string().min(1).describe("the shell command to run"),
@@ -17991,7 +18068,7 @@ var ACTION_DEFINITIONS = [
17991
18068
  {
17992
18069
  name: "computer_status",
17993
18070
  title: "Inspect a computer",
17994
- description: "READ ONLY: Read live Currybox process/runtime status and the declared container profile contract for an opened computer. This cannot modify files, processes, checkpoints, or Thread state; use get_computer on the Arbor surface for durable config and snapshot lineage.",
18071
+ description: "READ ONLY: Read what this computer can do right now — the same resolved capabilities card computer_open returns, each entry ready or available — plus live Currybox process/runtime status and the declared container profile contract. Reach for it when you are unsure whether a capability — background processes, semantic code intelligence, Preview publication — is usable on this session. This cannot modify files, processes, checkpoints, or Thread state; use get_computer on the Arbor surface for durable config and snapshot lineage.",
17995
18072
  inputSchema: {
17996
18073
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…")
17997
18074
  },
@@ -18011,6 +18088,71 @@ var ACTION_DEFINITIONS = [
18011
18088
  toolset: "loop",
18012
18089
  run: forward("computer_runtime.verify")
18013
18090
  },
18091
+ {
18092
+ name: "code_symbols",
18093
+ title: "Outline a file's symbols",
18094
+ description: "Outline the symbols a file or directory defines, resolved by the project's language server. Reach for this before reading a large unfamiliar file — unlike a grep through `computer_exec`, it returns the real declarations with their kinds rather than every textual match. Needs the semantic-code capability shown on the computer_status card.",
18095
+ inputSchema: {
18096
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18097
+ path: exports_external.string().max(512).describe("file or directory, absolute under /workspace or workspace-relative")
18098
+ },
18099
+ surfaces: ["computer-mcp", "computer-cli"],
18100
+ toolset: "loop",
18101
+ run: forward("computer_code.symbols")
18102
+ },
18103
+ {
18104
+ name: "code_find_symbol",
18105
+ title: "Find a symbol by name path",
18106
+ description: "Locate a declaration by its name path (`ClassName/methodName`) and optionally return its body. Use it instead of a `computer_exec` grep when you want THE definition rather than every line mentioning the name; the language server distinguishes the declaration from its call sites and its string occurrences. Needs the semantic-code capability shown on the computer_status card.",
18107
+ inputSchema: {
18108
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18109
+ namePath: exports_external.string().min(1).max(200).describe("symbol name path within a file, e.g. MyClass/myMethod"),
18110
+ path: exports_external.string().max(512).optional().describe("optional file or directory to restrict the search to"),
18111
+ includeBody: exports_external.boolean().optional().describe("include each symbol's source body"),
18112
+ depth: exports_external.number().int().min(0).max(3).optional().describe("how many levels of children to include (default 0)")
18113
+ },
18114
+ surfaces: ["computer-mcp", "computer-cli"],
18115
+ toolset: "loop",
18116
+ run: forward("computer_code.find_symbol")
18117
+ },
18118
+ {
18119
+ name: "code_references",
18120
+ title: "Find what references a symbol",
18121
+ description: 'List the places that actually reference a symbol, each with a short snippet. This is the operation `computer_exec` cannot do: a text search finds the same identifier in comments, unrelated modules, and shadowed scopes, while the language server resolves real references — so it answers "is this safe to change". Needs the semantic-code capability shown on the computer_status card.',
18122
+ inputSchema: {
18123
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18124
+ namePath: exports_external.string().min(1).max(200).describe("name path of the symbol to trace"),
18125
+ path: exports_external.string().max(512).describe("the file declaring that symbol, absolute under /workspace or workspace-relative")
18126
+ },
18127
+ surfaces: ["computer-mcp", "computer-cli"],
18128
+ toolset: "loop",
18129
+ run: forward("computer_code.references")
18130
+ },
18131
+ {
18132
+ name: "code_implementations",
18133
+ title: "Find implementations of a symbol",
18134
+ description: "List the concrete implementations or subtypes of an interface, abstract type, or method. A `computer_exec` search cannot follow a type relationship — only the language server knows which declarations satisfy this one. Needs the semantic-code capability shown on the computer_status card.",
18135
+ inputSchema: {
18136
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18137
+ namePath: exports_external.string().min(1).max(200).describe("name path of the interface, type, or method"),
18138
+ path: exports_external.string().max(512).describe("the file declaring that symbol, absolute under /workspace or workspace-relative")
18139
+ },
18140
+ surfaces: ["computer-mcp", "computer-cli"],
18141
+ toolset: "loop",
18142
+ run: forward("computer_code.implementations")
18143
+ },
18144
+ {
18145
+ name: "code_diagnostics",
18146
+ title: "Read language-server diagnostics for a file",
18147
+ description: "Return the language server's live errors and warnings for one file, mapped to symbols. Reach for it on a file you just edited: it answers in seconds without the whole-project build a `computer_exec` typecheck runs, though a green result here is not a substitute for that build. Needs the semantic-code capability shown on the computer_status card.",
18148
+ inputSchema: {
18149
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18150
+ path: exports_external.string().max(512).describe("the file to inspect, absolute under /workspace or workspace-relative")
18151
+ },
18152
+ surfaces: ["computer-mcp", "computer-cli"],
18153
+ toolset: "loop",
18154
+ run: forward("computer_code.diagnostics")
18155
+ },
18014
18156
  {
18015
18157
  name: "computer_read",
18016
18158
  title: "Read a project file",
@@ -18097,7 +18239,7 @@ var ACTION_DEFINITIONS = [
18097
18239
  {
18098
18240
  name: "computer_pull",
18099
18241
  title: "Fast-forward an allowed repository",
18100
- 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. 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.",
18242
+ 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.",
18101
18243
  inputSchema: {
18102
18244
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18103
18245
  repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.16.0",
3
+ "version": "0.16.2",
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",