@lambdacurry/arbor 0.14.6 → 0.15.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 +82 -18
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -1526,6 +1526,32 @@ var githubInstallations = sqliteTable("github_installations", {
1526
1526
  githubIdIdx: uniqueIndex("github_installations_github_id_idx").on(t.githubInstallationId),
1527
1527
  orgIdx: index("github_installations_org_idx").on(t.orgId, t.status)
1528
1528
  }));
1529
+ var githubUserAuthorizations = sqliteTable("github_user_authorizations", {
1530
+ id: text("id").primaryKey(),
1531
+ profileId: text("profile_id").notNull().references(() => profiles.id),
1532
+ orgId: text("org_id").notNull().references(() => orgs.id),
1533
+ githubUserId: text("github_user_id").notNull(),
1534
+ githubLogin: text("github_login").notNull(),
1535
+ status: text("status").$type().notNull().default("active"),
1536
+ accessCiphertext: text("access_ciphertext"),
1537
+ accessIv: text("access_iv"),
1538
+ accessKeyId: text("access_key_id"),
1539
+ accessAlgorithm: text("access_algorithm"),
1540
+ accessExpiresAt: ts("access_expires_at"),
1541
+ refreshCiphertext: text("refresh_ciphertext"),
1542
+ refreshIv: text("refresh_iv"),
1543
+ refreshKeyId: text("refresh_key_id"),
1544
+ refreshAlgorithm: text("refresh_algorithm"),
1545
+ refreshExpiresAt: ts("refresh_expires_at"),
1546
+ createdExecutionContextId: text("created_execution_context_id").notNull().references(() => executionContexts.id),
1547
+ updatedExecutionContextId: text("updated_execution_context_id").notNull().references(() => executionContexts.id),
1548
+ createdAt: ts("created_at").notNull(),
1549
+ updatedAt: ts("updated_at").notNull()
1550
+ }, (t) => ({
1551
+ profileIdx: uniqueIndex("github_user_authorizations_profile_idx").on(t.profileId),
1552
+ githubUserIdx: index("github_user_authorizations_github_user_idx").on(t.githubUserId, t.status),
1553
+ orgIdx: index("github_user_authorizations_org_idx").on(t.orgId, t.status)
1554
+ }));
1529
1555
  var githubRepositories = sqliteTable("github_repositories", {
1530
1556
  id: text("id").primaryKey(),
1531
1557
  installationId: text("installation_id").notNull().references(() => githubInstallations.id),
@@ -1625,6 +1651,7 @@ var computerReprovisions = sqliteTable("computer_reprovisions", {
1625
1651
  restorationOutcome: text("restoration_outcome").$type().notNull().default("not_needed"),
1626
1652
  restoredSnapshotId: text("restored_snapshot_id"),
1627
1653
  failureCode: text("failure_code"),
1654
+ failureDetail: text("failure_detail"),
1628
1655
  createdAt: ts("created_at").notNull(),
1629
1656
  completedAt: ts("completed_at")
1630
1657
  }, (t) => ({
@@ -2176,9 +2203,6 @@ var PREVIEW_MIME_TYPES = new Set([
2176
2203
  "font/woff",
2177
2204
  "font/woff2"
2178
2205
  ]);
2179
- // ../core/src/ops/app.ts
2180
- var APP_MAX_MODULE_BYTES = 10 * 1024 * 1024;
2181
- var APP_MAX_ASSET_BYTES = 25 * 1024 * 1024;
2182
2206
  // ../core/src/ops/secret.ts
2183
2207
  var SECRET_PERMISSIONS = [
2184
2208
  "create",
@@ -2192,6 +2216,10 @@ var SECRET_PERMISSIONS = [
2192
2216
  "plaintext:read"
2193
2217
  ];
2194
2218
  var SECRET_ADMIN_PERMISSIONS = SECRET_PERMISSIONS.filter((permission) => permission !== "create" && permission !== "plaintext:read");
2219
+
2220
+ // ../core/src/ops/app.ts
2221
+ var APP_MAX_MODULE_BYTES = 10 * 1024 * 1024;
2222
+ var APP_MAX_ASSET_BYTES = 25 * 1024 * 1024;
2195
2223
  // ../core/src/queries/lane-match.ts
2196
2224
  var STOP_WORDS = new Set("a an and are as at be by for from has have here how i in is it me of on or our the their they this to was what when where which who will with you your".split(" "));
2197
2225
  // ../core/src/queries/activity.ts
@@ -17212,11 +17240,16 @@ var MCP_OUTPUT_SCHEMAS = {
17212
17240
  app_get: exports_external.looseObject({
17213
17241
  app: app2,
17214
17242
  deployments: exports_external.array(jsonObject),
17243
+ configurationReadiness: jsonObject.nullable(),
17215
17244
  resets: exports_external.array(jsonObject),
17216
17245
  events: exports_external.array(jsonObject),
17217
17246
  url: exports_external.string()
17218
17247
  }),
17219
- app_deployment_get: exports_external.looseObject({ deployment, bundle: jsonObject }),
17248
+ app_deployment_get: exports_external.looseObject({
17249
+ deployment,
17250
+ bundle: jsonObject,
17251
+ configurationReadiness: jsonObject
17252
+ }),
17220
17253
  app_fetch: appInvocationResponse,
17221
17254
  app_request: appInvocationResponse,
17222
17255
  app_create: app2,
@@ -17328,6 +17361,7 @@ var MCP_OUTPUT_SCHEMAS = {
17328
17361
  operation: exports_external.literal("clone"),
17329
17362
  repository: exports_external.string(),
17330
17363
  dir: exports_external.string(),
17364
+ credential: exports_external.literal("caller"),
17331
17365
  branch: exports_external.string().optional(),
17332
17366
  head: exports_external.string().optional(),
17333
17367
  refs: exports_external.array(exports_external.string()).optional()
@@ -17337,6 +17371,7 @@ var MCP_OUTPUT_SCHEMAS = {
17337
17371
  operation: exports_external.literal("fetch"),
17338
17372
  repository: exports_external.string(),
17339
17373
  dir: exports_external.string(),
17374
+ credential: exports_external.enum(["caller", "arbor-managed"]),
17340
17375
  branch: exports_external.string().optional(),
17341
17376
  head: exports_external.string().optional(),
17342
17377
  fetchHead: exports_external.string().optional(),
@@ -17347,6 +17382,7 @@ var MCP_OUTPUT_SCHEMAS = {
17347
17382
  operation: exports_external.literal("pull"),
17348
17383
  repository: exports_external.string(),
17349
17384
  dir: exports_external.string(),
17385
+ credential: exports_external.enum(["caller", "arbor-managed"]),
17350
17386
  branch: exports_external.string().optional(),
17351
17387
  head: exports_external.string().optional(),
17352
17388
  before: exports_external.string().optional(),
@@ -17359,6 +17395,7 @@ var MCP_OUTPUT_SCHEMAS = {
17359
17395
  operation: exports_external.literal("push"),
17360
17396
  repository: exports_external.string(),
17361
17397
  dir: exports_external.string(),
17398
+ credential: exports_external.enum(["caller", "github-user"]),
17362
17399
  branch: exports_external.string().optional(),
17363
17400
  head: exports_external.string().optional(),
17364
17401
  before: exports_external.string().optional(),
@@ -17618,6 +17655,33 @@ var ACTION_DEFINITIONS = [
17618
17655
  toolset: "admin",
17619
17656
  run: forward("github.set_repository_connection")
17620
17657
  },
17658
+ {
17659
+ name: "github_identity",
17660
+ title: "Show your GitHub connection",
17661
+ description: "Show whether your own Arbor human profile has a connected GitHub identity, with the login and when the connection expires. Redacted by construction — it never returns a credential.",
17662
+ inputSchema: {},
17663
+ surfaces: ["cli"],
17664
+ toolset: "admin",
17665
+ run: forward("github.user_status")
17666
+ },
17667
+ {
17668
+ name: "github_connect_identity",
17669
+ title: "Connect your GitHub identity",
17670
+ description: "Mint the short-lived URL you open in a signed-in browser to connect your GitHub identity, so an Arbor Computer can push your commits as you. Human profiles only; the URL authorizes nothing by itself and expires in ten minutes.",
17671
+ inputSchema: {},
17672
+ surfaces: ["cli"],
17673
+ toolset: "admin",
17674
+ run: forward("github.user_connect")
17675
+ },
17676
+ {
17677
+ name: "github_disconnect_identity",
17678
+ title: "Disconnect your GitHub identity",
17679
+ description: "Disconnect your own GitHub identity from Arbor and erase the stored credential material; a Computer can no longer push as you until you connect again. The audit record of the connection is preserved.",
17680
+ inputSchema: {},
17681
+ surfaces: ["cli"],
17682
+ toolset: "admin",
17683
+ run: forward("github.user_disconnect")
17684
+ },
17621
17685
  {
17622
17686
  name: "recall",
17623
17687
  title: "Recall existing knowledge",
@@ -17983,13 +18047,13 @@ var ACTION_DEFINITIONS = [
17983
18047
  {
17984
18048
  name: "computer_sync",
17985
18049
  title: "Sync an allowed repository",
17986
- description: "Fetch, fast-forward pull, or push the checked-out branch of a cloned recipe repository using the working collaborator's GitHub token just in time. The lightweight Computer fixes the allowlisted GitHub URL, never force-pushes or deletes refs, and neither stores nor returns the token.",
18050
+ 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.",
17987
18051
  inputSchema: {
17988
18052
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
17989
18053
  repository: exports_external.string().describe("allowed owner/repository slug already cloned by computer_clone"),
17990
18054
  operation: exports_external.enum(["fetch", "pull", "push"]).describe("network operation to perform"),
17991
- githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
17992
- githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
18055
+ 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"),
18056
+ githubUsername: exports_external.string().optional().describe("GitHub username for a supplied githubToken; defaults to x-access-token")
17993
18057
  },
17994
18058
  surfaces: ["computer-cli"],
17995
18059
  toolset: "loop",
@@ -17998,12 +18062,12 @@ var ACTION_DEFINITIONS = [
17998
18062
  {
17999
18063
  name: "computer_fetch",
18000
18064
  title: "Fetch an allowed repository",
18001
- description: "Fetch remote refs for a cloned recipe repository without changing its checked-out branch or any remote ref. The collaborator's GitHub token is spent only on this call and is neither stored nor returned.",
18065
+ 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.`,
18002
18066
  inputSchema: {
18003
18067
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18004
18068
  repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
18005
- githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
18006
- githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
18069
+ githubToken: exports_external.string().min(1).optional().describe("short-lived collaborator GitHub token; omit to use Arbor's managed recipe credential"),
18070
+ githubUsername: exports_external.string().optional().describe("GitHub username for a supplied githubToken; defaults to x-access-token")
18007
18071
  },
18008
18072
  surfaces: ["computer-mcp"],
18009
18073
  toolset: "loop",
@@ -18012,12 +18076,12 @@ var ACTION_DEFINITIONS = [
18012
18076
  {
18013
18077
  name: "computer_pull",
18014
18078
  title: "Fast-forward an allowed repository",
18015
- description: "Fetch and fast-forward the checked-out branch of a cloned recipe repository; divergent history is rejected. The collaborator's GitHub token is spent only on this call and is neither stored nor returned.",
18079
+ 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.",
18016
18080
  inputSchema: {
18017
18081
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18018
18082
  repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
18019
- githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
18020
- githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
18083
+ githubToken: exports_external.string().min(1).optional().describe("short-lived collaborator GitHub token; omit to use Arbor's managed recipe credential"),
18084
+ githubUsername: exports_external.string().optional().describe("GitHub username for a supplied githubToken; defaults to x-access-token")
18021
18085
  },
18022
18086
  surfaces: ["computer-mcp"],
18023
18087
  toolset: "loop",
@@ -18026,12 +18090,12 @@ var ACTION_DEFINITIONS = [
18026
18090
  {
18027
18091
  name: "computer_push",
18028
18092
  title: "Push an allowed repository",
18029
- description: "Push the checked-out branch to its fixed allowlisted GitHub repository without force-pushing or deleting refs. The collaborator's GitHub token is spent only on this call and is neither stored nor returned.",
18093
+ 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.",
18030
18094
  inputSchema: {
18031
18095
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18032
18096
  repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
18033
- githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
18034
- githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
18097
+ githubToken: exports_external.string().min(1).optional().describe("optional short-lived GitHub token override; omit to use your connected GitHub identity"),
18098
+ githubUsername: exports_external.string().optional().describe("GitHub username for a supplied githubToken; omit for your connected GitHub identity")
18035
18099
  },
18036
18100
  surfaces: ["computer-mcp"],
18037
18101
  toolset: "loop",
@@ -19284,7 +19348,7 @@ var ACTION_DEFINITIONS = [
19284
19348
  {
19285
19349
  name: "app_get",
19286
19350
  title: "Read an App",
19287
- description: "READ ONLY: Inspect one App's stable URL, active deployment, pending control intent, deployment history, health, and durable state generation. It cannot modify App state, deployment state, access, or durable SQLite; use its activeDeploymentId as app_activate's expectedActiveDeploymentId.",
19351
+ description: "READ ONLY: Inspect one App's stable URL, active deployment, pending control intent, deployment history, provider health, deployment-aware redacted configuration readiness for the active release, and durable state generation. It cannot modify App state, deployment state, access, or durable SQLite; use its activeDeploymentId as app_activate's expectedActiveDeploymentId.",
19288
19352
  inputSchema: { appId: exports_external.string().describe("the App, app_…") },
19289
19353
  surfaces: ["mcp", "cli"],
19290
19354
  toolset: "apps",
@@ -19351,7 +19415,7 @@ var ACTION_DEFINITIONS = [
19351
19415
  {
19352
19416
  name: "app_deployment_get",
19353
19417
  title: "Inspect an App deployment",
19354
- description: "READ ONLY: Inspect one deployment's candidate, active, failed, or superseded state, source AppBundle, provider receipt, and redacted health result. It cannot modify App state, deployment state, access, or durable SQLite.",
19418
+ description: "READ ONLY: Inspect one deployment's candidate, active, failed, or superseded state, source AppBundle, provider receipt, redacted provider health result, and redacted configuration readiness against that bundle's declared runtime requirements. It cannot modify App state, deployment state, access, or durable SQLite.",
19355
19419
  inputSchema: {
19356
19420
  appId: exports_external.string().describe("owning App, app_…"),
19357
19421
  deploymentId: exports_external.string().describe("deployment, dep_…")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.14.6",
3
+ "version": "0.15.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",