@lambdacurry/arbor 0.24.25 → 0.24.26

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 +67 -5
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -8666,6 +8666,29 @@ var githubUserAuthorizations = sqliteTable("github_user_authorizations", {
8666
8666
  githubUserIdx: index("github_user_authorizations_github_user_idx").on(t.githubUserId, t.status),
8667
8667
  orgIdx: index("github_user_authorizations_org_idx").on(t.orgId, t.status)
8668
8668
  }));
8669
+ var githubAgentConnections = sqliteTable("github_agent_connections", {
8670
+ id: text("id").primaryKey(),
8671
+ profileId: text("profile_id").notNull().references(() => profiles.id),
8672
+ orgId: text("org_id").notNull().references(() => orgs.id),
8673
+ status: text("status").$type().notNull().default("active"),
8674
+ access: text("access").$type().notNull().default("read"),
8675
+ app: text("app").$type().notNull().default("arbor"),
8676
+ repositories: text("repositories", { mode: "json" }).$type().notNull().default([]),
8677
+ githubAppId: text("github_app_id"),
8678
+ githubInstallationId: text("github_installation_id"),
8679
+ privateKeySecretId: text("private_key_secret_id").references(() => secrets.id),
8680
+ githubAppSlug: text("github_app_slug"),
8681
+ githubAccountLogin: text("github_account_login"),
8682
+ createdByProfileId: text("created_by_profile_id").notNull().references(() => profiles.id),
8683
+ updatedByProfileId: text("updated_by_profile_id").notNull().references(() => profiles.id),
8684
+ createdExecutionContextId: text("created_execution_context_id").notNull().references(() => executionContexts.id),
8685
+ updatedExecutionContextId: text("updated_execution_context_id").notNull().references(() => executionContexts.id),
8686
+ createdAt: ts("created_at").notNull(),
8687
+ updatedAt: ts("updated_at").notNull()
8688
+ }, (t) => ({
8689
+ profileIdx: uniqueIndex("github_agent_connections_profile_idx").on(t.profileId),
8690
+ orgIdx: index("github_agent_connections_org_idx").on(t.orgId, t.status)
8691
+ }));
8669
8692
  var githubRepositories = sqliteTable("github_repositories", {
8670
8693
  id: text("id").primaryKey(),
8671
8694
  installationId: text("installation_id").notNull().references(() => githubInstallations.id),
@@ -9460,6 +9483,7 @@ var secrets = sqliteTable("secrets", {
9460
9483
  ownerType: text("owner_type").$type().notNull().default("organization"),
9461
9484
  ownerId: text("owner_id"),
9462
9485
  lifecycle: text("lifecycle").$type().notNull().default("active"),
9486
+ reservedFor: text("reserved_for").$type(),
9463
9487
  currentVersionId: text("current_version_id"),
9464
9488
  currentVersion: integer2("current_version").notNull().default(0),
9465
9489
  metadataRevision: integer2("metadata_revision").notNull().default(0),
@@ -10322,8 +10346,6 @@ var recallFts = sqliteTable("recall_fts", {
10322
10346
  // ../core/src/ops/quick-search.ts
10323
10347
  var QUICK_EXPAND_LIMIT = 20;
10324
10348
  var QUICK_CANDIDATE_LIMIT = QUICK_EXPAND_LIMIT + 2;
10325
- // ../core/src/ops/computer-checkpoint-operations.ts
10326
- var CHECKPOINT_OPERATION_TTL_SECONDS = 7 * 24 * 60 * 60;
10327
10349
  // ../core/src/ops/package-cache.ts
10328
10350
  var PACKAGE_CACHE_PENDING_TTL_MS = 15 * 60 * 1000;
10329
10351
  var PACKAGE_CACHE_FINAL_TTL_MS = 30 * 24 * 60 * 60 * 1000;
@@ -11454,6 +11476,16 @@ function buildOutputSchemas() {
11454
11476
  connected: boolean2(),
11455
11477
  inheritedBySiblingThreads: boolean2()
11456
11478
  }),
11479
+ github_agent_connection: looseObject({
11480
+ agentProfileId: id,
11481
+ connected: boolean2(),
11482
+ access: _enum(["read", "review", "write"]).nullable(),
11483
+ app: looseObject({ kind: _enum(["arbor", "custom"]) }).nullable().describe("the signing App; custom adds its id, installation, slug, account, and key Secret id"),
11484
+ githubActor: string2().nullable().describe("the GitHub bot account pushes and pull requests show, e.g. currybot[bot]"),
11485
+ repositories: array(looseObject({ githubRepositoryId: string2(), fullName: string2() })).describe("the admin allowlist; empty when not connected"),
11486
+ connectedAt: timestamp.nullable(),
11487
+ updatedAt: timestamp.nullable()
11488
+ }),
11457
11489
  transition_thread: looseObject({ status: string2() }),
11458
11490
  request: looseObject({
11459
11491
  requestId: id,
@@ -13058,6 +13090,7 @@ var MCP_TOOL_ANNOTATIONS = {
13058
13090
  github_repositories: readOnly,
13059
13091
  github_refresh_installation: openWorld,
13060
13092
  github_connect_repository: idempotent,
13093
+ github_agent_connection: readOnly,
13061
13094
  computer_reprovision: destructiveIdempotent,
13062
13095
  computer_run_start: idempotent,
13063
13096
  computer_run_suspend: idempotent,
@@ -13438,7 +13471,7 @@ var COMPUTER_ORIENTATION_SECTIONS = [
13438
13471
  },
13439
13472
  {
13440
13473
  brief: "5. Git and gh run through `computer_exec` once authorized; fetch before trusting remote state.",
13441
- full: `5. GIT AND GITHUB ARE ORDINARY COMMANDS AFTER AUTHORIZATION. Clone, fetch, pull, push, and gh run through computer_exec using a connected human's just-in-time ambient GitHub identity. Credentials never enter argv, workspace files, Git config, checkpoints, Events, logs, or receipts. A restored Computer deliberately keeps the checkout age of its snapshot, so fetch/pull before trusting remote state.`
13474
+ full: `5. GIT AND GITHUB ARE ORDINARY COMMANDS AFTER AUTHORIZATION. Clone, fetch, pull, push, and gh run through computer_exec using just-in-time ambient GitHub credentials: a connected human's own GitHub identity, or for an agent an admin connected (github_agent_connection), a one-hour App token for repositories on the admin's allowlist that the Computer declares and the Thread connects — connecting another repository yourself adds nothing to it. Credentials never enter argv, workspace files, Git config, checkpoints, Events, logs, or receipts. A restored Computer deliberately keeps the checkout age of its snapshot, so fetch/pull before trusting remote state.`
13442
13475
  },
13443
13476
  {
13444
13477
  brief: "6. `computer_verify` captures a URL, `computer_publish_preview` keeps static output, `computer_export` saves files to the Thread.",
@@ -13678,6 +13711,35 @@ var ACTION_DEFINITIONS = [
13678
13711
  toolset: "admin",
13679
13712
  run: forward("github.user_disconnect")
13680
13713
  },
13714
+ {
13715
+ name: "github_agent_connection",
13716
+ title: "Show an agent's GitHub connection",
13717
+ description: "Show whether an agent profile is connected to GitHub for its own Git work — access, signing App (Arbor's or an existing custom App), and githubActor, the bot account its pushes and pull requests show. An agent reads its own; its manager and org admins may read any, and no key or token is ever returned.",
13718
+ inputSchema: {
13719
+ agentProfileId: string2().optional().describe("the agent, prof_…; an agent may omit it to read its own")
13720
+ },
13721
+ surfaces: ["computer-mcp", "cli"],
13722
+ toolset: "projects",
13723
+ run: forward("github.agent_connection_status")
13724
+ },
13725
+ {
13726
+ name: "github_set_agent_connection",
13727
+ title: "Connect an agent to GitHub",
13728
+ description: "Org owner/admin only, from a web or CLI session (never a personal access token): connect, re-scope, or disconnect one agent profile's GitHub work. app=arbor signs with Arbor's GitHub App. app=custom keeps an App the agent already uses (for example a bot App): pass githubAppId, githubInstallationId, and privateKeySecretId — an organization-owned Arbor Secret that a human created and set with that App's private key (secret_set --value-file), never granted to an agent and never bound to an App. Arbor confirms the installation with GitHub, then reserves that Secret permanently for signing. Each Computer call then mints a one-hour token for repositories on this allowlist that the Computer declares and the Thread connects, at the chosen access; disconnecting stops renewal at the next call.",
13729
+ inputSchema: {
13730
+ agentProfileId: string2().describe("the agent profile, prof_…"),
13731
+ connected: boolean2().describe("true to connect or re-scope; false to disconnect"),
13732
+ access: _enum(["read", "review", "write"]).optional().describe("connect: read; review (PR reviews and comments, no push — Pull requests write also lets it approve, dismiss, or close PRs; branch rules decide what an approval counts for); or write (push and PRs). A read Run always caps at read"),
13733
+ app: _enum(["arbor", "custom"]).optional().describe("connect: which GitHub App signs; omitted means arbor, except that an agent already on a custom App must name it, so a re-scope never swaps its bot identity"),
13734
+ githubAppId: string2().optional().describe("app=custom: the existing App's numeric id"),
13735
+ githubInstallationId: string2().optional().describe("app=custom: that App's installation id on the repositories' account"),
13736
+ privateKeySecretId: string2().optional().describe("app=custom: the org-owned Secret holding the App's private key, sec_…"),
13737
+ repositories: array(string2()).optional().describe("connect: the admin allowlist — installed repository ids (ghr_…), owner/name, or GitHub URLs; a token only ever reaches these")
13738
+ },
13739
+ surfaces: ["cli"],
13740
+ toolset: "admin",
13741
+ run: forward("github.agent_connection_set")
13742
+ },
13681
13743
  {
13682
13744
  name: "recall",
13683
13745
  title: "Recall existing knowledge",
@@ -16606,7 +16668,7 @@ var ACTIONS = ACTION_DEFINITIONS.map((action) => {
16606
16668
  });
16607
16669
 
16608
16670
  // ../actions/src/retention-entry.ts
16609
- var ARBOR_VERSION = "0.24.25";
16671
+ var ARBOR_VERSION = "0.24.26";
16610
16672
  var historyPolicySchema = _enum(["full", "checkpoint"]).optional().describe("text Artifacts: future history retention policy; full retains every source snapshot, checkpoint keeps metadata for every revision and source only when explicitly retained");
16611
16673
  var retainSourceSchema = boolean2().optional().describe("edit: in checkpoint mode, retain this newly minted content revision's source");
16612
16674
  var checkpointSchema = boolean2().optional().describe("edit: retain the exact current version source without incrementing content version");
@@ -17014,7 +17076,7 @@ function dispositionFilename(value) {
17014
17076
  // package.json
17015
17077
  var package_default = {
17016
17078
  name: "@lambdacurry/arbor",
17017
- version: "0.24.25",
17079
+ version: "0.24.26",
17018
17080
  description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
17019
17081
  keywords: [
17020
17082
  "agents",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.24.25",
3
+ "version": "0.24.26",
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",