@lambdacurry/arbor 0.15.2 → 0.16.1

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 +168 -13
  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(),
@@ -17002,6 +17023,12 @@ var MCP_OUTPUT_SCHEMAS = {
17002
17023
  get_computer: exports_external.looseObject({
17003
17024
  threadId: id,
17004
17025
  config: redactedComputerRecipe,
17026
+ repositoryAuthorization: exports_external.array(exports_external.looseObject({
17027
+ repository: exports_external.string(),
17028
+ connected: exports_external.boolean(),
17029
+ grantedByScope: exports_external.enum(["organization", "space", "topic", "thread"]).nullable(),
17030
+ inheritedBySiblingThreads: exports_external.boolean()
17031
+ })),
17005
17032
  compatibility: exports_external.looseObject({
17006
17033
  state: exports_external.enum(["ready", "stale_config", "backend_mismatch", "replacement_required"]),
17007
17034
  reason: exports_external.string(),
@@ -17016,6 +17043,19 @@ var MCP_OUTPUT_SCHEMAS = {
17016
17043
  lineage: exports_external.array(jsonObject),
17017
17044
  reprovisions: exports_external.array(jsonObject)
17018
17045
  }),
17046
+ github_repositories: exports_external.looseObject({
17047
+ repositories: exports_external.array(jsonObject),
17048
+ nextCursor: exports_external.string().nullable().optional(),
17049
+ hasMore: exports_external.boolean().optional()
17050
+ }),
17051
+ github_connect_repository: exports_external.looseObject({
17052
+ repositoryId: id,
17053
+ scope: exports_external.enum(["organization", "space", "topic", "thread"]),
17054
+ scopeId: id,
17055
+ status: exports_external.enum(["active", "disconnected"]),
17056
+ connected: exports_external.boolean(),
17057
+ inheritedBySiblingThreads: exports_external.boolean()
17058
+ }),
17019
17059
  publish_topic_computer: exports_external.looseObject({
17020
17060
  published: exports_external.boolean(),
17021
17061
  snapshot
@@ -17292,6 +17332,7 @@ var MCP_OUTPUT_SCHEMAS = {
17292
17332
  profile: computerProfile.nullable(),
17293
17333
  startingSnapshot: snapshot.nullable(),
17294
17334
  materialized: checkpoint.nullable(),
17335
+ capabilities: computerCapabilityCard,
17295
17336
  runtime: jsonObject
17296
17337
  }),
17297
17338
  computer_reprovision: exports_external.looseObject({
@@ -17316,11 +17357,13 @@ var MCP_OUTPUT_SCHEMAS = {
17316
17357
  strict: exports_external.boolean()
17317
17358
  }),
17318
17359
  computer_status: exports_external.looseObject({
17319
- ok: exports_external.boolean().optional(),
17320
- status: exports_external.string().optional(),
17321
- backend: exports_external.string().optional(),
17322
- processes: exports_external.array(jsonObject).optional(),
17323
- profile: computerProfile.nullable()
17360
+ computerSessionId: id,
17361
+ computerId: id,
17362
+ status: exports_external.enum(["running", "dormant"]),
17363
+ backend: exports_external.enum(["worker-shell", "container"]),
17364
+ profile: computerProfile.nullable(),
17365
+ capabilities: computerCapabilityCard,
17366
+ runtime: jsonObject
17324
17367
  }),
17325
17368
  computer_verify: exports_external.looseObject({
17326
17369
  passed: exports_external.literal(true),
@@ -17427,7 +17470,47 @@ var MCP_OUTPUT_SCHEMAS = {
17427
17470
  warnings: exports_external.array(exports_external.string()),
17428
17471
  replayed: exports_external.boolean()
17429
17472
  }),
17430
- computer_stop: exports_external.looseObject({ checkpoint, stopped: jsonObject })
17473
+ computer_stop: exports_external.looseObject({ checkpoint, stopped: jsonObject }),
17474
+ code_symbols: exports_external.looseObject({
17475
+ computerSessionId: id,
17476
+ path: exports_external.string(),
17477
+ symbols: exports_external.array(codeSymbol)
17478
+ }),
17479
+ code_find_symbol: exports_external.looseObject({
17480
+ computerSessionId: id,
17481
+ namePath: exports_external.string(),
17482
+ symbols: exports_external.array(codeSymbol)
17483
+ }),
17484
+ code_references: exports_external.looseObject({
17485
+ computerSessionId: id,
17486
+ namePath: exports_external.string(),
17487
+ path: exports_external.string(),
17488
+ references: exports_external.array(exports_external.looseObject({
17489
+ path: exports_external.string(),
17490
+ namePath: exports_external.string().optional(),
17491
+ startLine: exports_external.number().optional(),
17492
+ snippet: exports_external.string().optional()
17493
+ })),
17494
+ truncated: exports_external.boolean()
17495
+ }),
17496
+ code_implementations: exports_external.looseObject({
17497
+ computerSessionId: id,
17498
+ namePath: exports_external.string(),
17499
+ path: exports_external.string(),
17500
+ symbols: exports_external.array(codeSymbol)
17501
+ }),
17502
+ code_diagnostics: exports_external.looseObject({
17503
+ computerSessionId: id,
17504
+ path: exports_external.string(),
17505
+ diagnostics: exports_external.array(exports_external.looseObject({
17506
+ severity: exports_external.enum(["error", "warning", "information", "hint"]),
17507
+ message: exports_external.string(),
17508
+ path: exports_external.string(),
17509
+ startLine: exports_external.number().optional(),
17510
+ namePath: exports_external.string().optional()
17511
+ })),
17512
+ truncated: exports_external.boolean()
17513
+ })
17431
17514
  };
17432
17515
  function outputSchemaFor(actionName) {
17433
17516
  return MCP_OUTPUT_SCHEMAS[actionName];
@@ -17551,10 +17634,17 @@ var MCP_TOOL_ANNOTATIONS = {
17551
17634
  app_restore_state: destructiveIdempotent,
17552
17635
  app_archive: additive,
17553
17636
  charter: destructive,
17637
+ github_repositories: readOnly,
17638
+ github_connect_repository: idempotent,
17554
17639
  computer_open: additive,
17555
17640
  computer_reprovision: destructiveIdempotent,
17556
17641
  computer_exec: destructiveOpenWorld,
17557
17642
  computer_status: readOnly,
17643
+ code_symbols: readOnly,
17644
+ code_find_symbol: readOnly,
17645
+ code_references: readOnly,
17646
+ code_implementations: readOnly,
17647
+ code_diagnostics: readOnly,
17558
17648
  computer_verify: openWorld,
17559
17649
  computer_read: readOnly,
17560
17650
  computer_export: idempotent,
@@ -17635,23 +17725,23 @@ var ACTION_DEFINITIONS = [
17635
17725
  {
17636
17726
  name: "github_repositories",
17637
17727
  title: "List installed GitHub repositories",
17638
- description: "List repositories projected from this organization's verified Arbor Computer GitHub App installation. This returns repository ids and metadata, never credentials; use the id with github_connect_repository.",
17728
+ description: "READ ONLY: List repositories projected from this organization's verified Arbor Computer GitHub App installation. This returns repository ids and metadata, never credentials; use the id with github_connect_repository.",
17639
17729
  inputSchema: { ...PAGINATION_INPUT },
17640
- surfaces: ["cli"],
17730
+ surfaces: ["mcp", "cli"],
17641
17731
  toolset: "admin",
17642
17732
  run: forward("github.repositories")
17643
17733
  },
17644
17734
  {
17645
17735
  name: "github_connect_repository",
17646
17736
  title: "Connect a GitHub repository",
17647
- description: "Connect or disconnect one installed GitHub repository at an Arbor organization, Space, Topic, or Thread. This explicit, recoverable connection is required before Arbor may use private repository context there; it does not grant an agent a Git credential.",
17737
+ description: "Connect or disconnect one installed GitHub repository at an Arbor organization, Space, Topic, or Thread. This explicit, recoverable connection is required before Arbor may use private repository context there; it does not grant an agent a Git credential. THE SCOPE IS THE DECISION: a Computer recipe only NAMES repositories, and a Thread materializes one only when a connection at its own scope or an ANCESTOR authorizes it — so connect at the Topic that owns the project and every Thread opened under it inherits the environment, while connecting at a single Thread authorizes that Thread alone and no sibling. Read get_computer's repositoryAuthorization to see which scope currently grants each configured repository. Owner/admin only.",
17648
17738
  inputSchema: {
17649
17739
  repositoryId: exports_external.string().describe("installed repository id from github_repositories, ghr_…"),
17650
- scope: exports_external.enum(["organization", "space", "topic", "thread"]).describe("the Arbor scope that may use this repository's context"),
17740
+ scope: exports_external.enum(["organization", "space", "topic", "thread"]).describe("the Arbor scope that may use this repository's context; topic is the durable choice for a project every Thread under it develops"),
17651
17741
  scopeId: exports_external.string().describe("id matching the selected scope"),
17652
17742
  connected: exports_external.boolean().describe("true to connect; false to disconnect recoverably")
17653
17743
  },
17654
- surfaces: ["cli"],
17744
+ surfaces: ["mcp", "cli"],
17655
17745
  toolset: "admin",
17656
17746
  run: forward("github.set_repository_connection")
17657
17747
  },
@@ -17928,7 +18018,7 @@ var ACTION_DEFINITIONS = [
17928
18018
  {
17929
18019
  name: "computer_open",
17930
18020
  title: "Open a Thread computer",
17931
- 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.",
18021
+ 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 and a resolved capabilities card naming what this computer can do, each entry ready (usable now) or available (starts on demand).",
17932
18022
  inputSchema: {
17933
18023
  threadId: exports_external.string().describe("the Arbor Thread whose stable computer to open, thr_…"),
17934
18024
  vcpus: exports_external.number().int().min(1).max(4).optional().describe("optional container vCPU request"),
@@ -17970,7 +18060,7 @@ var ACTION_DEFINITIONS = [
17970
18060
  {
17971
18061
  name: "computer_status",
17972
18062
  title: "Inspect a computer",
17973
- 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.",
18063
+ 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.",
17974
18064
  inputSchema: {
17975
18065
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…")
17976
18066
  },
@@ -17990,6 +18080,71 @@ var ACTION_DEFINITIONS = [
17990
18080
  toolset: "loop",
17991
18081
  run: forward("computer_runtime.verify")
17992
18082
  },
18083
+ {
18084
+ name: "code_symbols",
18085
+ title: "Outline a file's symbols",
18086
+ 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.",
18087
+ inputSchema: {
18088
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18089
+ path: exports_external.string().max(512).describe("file or directory, absolute under /workspace or workspace-relative")
18090
+ },
18091
+ surfaces: ["computer-mcp", "computer-cli"],
18092
+ toolset: "loop",
18093
+ run: forward("computer_code.symbols")
18094
+ },
18095
+ {
18096
+ name: "code_find_symbol",
18097
+ title: "Find a symbol by name path",
18098
+ 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.",
18099
+ inputSchema: {
18100
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18101
+ namePath: exports_external.string().min(1).max(200).describe("symbol name path within a file, e.g. MyClass/myMethod"),
18102
+ path: exports_external.string().max(512).optional().describe("optional file or directory to restrict the search to"),
18103
+ includeBody: exports_external.boolean().optional().describe("include each symbol's source body"),
18104
+ depth: exports_external.number().int().min(0).max(3).optional().describe("how many levels of children to include (default 0)")
18105
+ },
18106
+ surfaces: ["computer-mcp", "computer-cli"],
18107
+ toolset: "loop",
18108
+ run: forward("computer_code.find_symbol")
18109
+ },
18110
+ {
18111
+ name: "code_references",
18112
+ title: "Find what references a symbol",
18113
+ 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.',
18114
+ inputSchema: {
18115
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18116
+ namePath: exports_external.string().min(1).max(200).describe("name path of the symbol to trace"),
18117
+ path: exports_external.string().max(512).describe("the file declaring that symbol, absolute under /workspace or workspace-relative")
18118
+ },
18119
+ surfaces: ["computer-mcp", "computer-cli"],
18120
+ toolset: "loop",
18121
+ run: forward("computer_code.references")
18122
+ },
18123
+ {
18124
+ name: "code_implementations",
18125
+ title: "Find implementations of a symbol",
18126
+ 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.",
18127
+ inputSchema: {
18128
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18129
+ namePath: exports_external.string().min(1).max(200).describe("name path of the interface, type, or method"),
18130
+ path: exports_external.string().max(512).describe("the file declaring that symbol, absolute under /workspace or workspace-relative")
18131
+ },
18132
+ surfaces: ["computer-mcp", "computer-cli"],
18133
+ toolset: "loop",
18134
+ run: forward("computer_code.implementations")
18135
+ },
18136
+ {
18137
+ name: "code_diagnostics",
18138
+ title: "Read language-server diagnostics for a file",
18139
+ 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.",
18140
+ inputSchema: {
18141
+ computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18142
+ path: exports_external.string().max(512).describe("the file to inspect, absolute under /workspace or workspace-relative")
18143
+ },
18144
+ surfaces: ["computer-mcp", "computer-cli"],
18145
+ toolset: "loop",
18146
+ run: forward("computer_code.diagnostics")
18147
+ },
17993
18148
  {
17994
18149
  name: "computer_read",
17995
18150
  title: "Read a project file",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.15.2",
3
+ "version": "0.16.1",
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",