@lambdacurry/arbor 0.24.24 → 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.
- package/dist/arbor.js +97 -16
- 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),
|
|
@@ -10309,8 +10333,19 @@ var BASE_MS = Date.parse("2026-07-20T15:00:00.000Z");
|
|
|
10309
10333
|
var PAIRING_TTL_MS = 15 * 60 * 1000;
|
|
10310
10334
|
// ../core/src/ops/space-visit.ts
|
|
10311
10335
|
var VISIT_THROTTLE_MS = 5 * 60 * 1000;
|
|
10312
|
-
// ../core/src/
|
|
10313
|
-
var
|
|
10336
|
+
// ../core/src/retrieval/fts.ts
|
|
10337
|
+
var recallFts = sqliteTable("recall_fts", {
|
|
10338
|
+
id: text("id"),
|
|
10339
|
+
body: text("body"),
|
|
10340
|
+
org: text("org"),
|
|
10341
|
+
space: text("space"),
|
|
10342
|
+
topic: text("topic"),
|
|
10343
|
+
thread: text("thread")
|
|
10344
|
+
});
|
|
10345
|
+
|
|
10346
|
+
// ../core/src/ops/quick-search.ts
|
|
10347
|
+
var QUICK_EXPAND_LIMIT = 20;
|
|
10348
|
+
var QUICK_CANDIDATE_LIMIT = QUICK_EXPAND_LIMIT + 2;
|
|
10314
10349
|
// ../core/src/ops/package-cache.ts
|
|
10315
10350
|
var PACKAGE_CACHE_PENDING_TTL_MS = 15 * 60 * 1000;
|
|
10316
10351
|
var PACKAGE_CACHE_FINAL_TTL_MS = 30 * 24 * 60 * 60 * 1000;
|
|
@@ -10410,16 +10445,6 @@ function normalizeProtectedIngress(entries) {
|
|
|
10410
10445
|
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(" "));
|
|
10411
10446
|
// ../core/src/queries/activity.ts
|
|
10412
10447
|
var targetAuthor = alias(profiles, "target_author");
|
|
10413
|
-
// ../core/src/retrieval/fts.ts
|
|
10414
|
-
var recallFts = sqliteTable("recall_fts", {
|
|
10415
|
-
id: text("id"),
|
|
10416
|
-
body: text("body"),
|
|
10417
|
-
org: text("org"),
|
|
10418
|
-
space: text("space"),
|
|
10419
|
-
topic: text("topic"),
|
|
10420
|
-
thread: text("thread")
|
|
10421
|
-
});
|
|
10422
|
-
|
|
10423
10448
|
// ../core/src/retrieval/vector-lease.ts
|
|
10424
10449
|
var LEASE_MS = 5 * 60000;
|
|
10425
10450
|
|
|
@@ -11451,6 +11476,16 @@ function buildOutputSchemas() {
|
|
|
11451
11476
|
connected: boolean2(),
|
|
11452
11477
|
inheritedBySiblingThreads: boolean2()
|
|
11453
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
|
+
}),
|
|
11454
11489
|
transition_thread: looseObject({ status: string2() }),
|
|
11455
11490
|
request: looseObject({
|
|
11456
11491
|
requestId: id,
|
|
@@ -13055,6 +13090,7 @@ var MCP_TOOL_ANNOTATIONS = {
|
|
|
13055
13090
|
github_repositories: readOnly,
|
|
13056
13091
|
github_refresh_installation: openWorld,
|
|
13057
13092
|
github_connect_repository: idempotent,
|
|
13093
|
+
github_agent_connection: readOnly,
|
|
13058
13094
|
computer_reprovision: destructiveIdempotent,
|
|
13059
13095
|
computer_run_start: idempotent,
|
|
13060
13096
|
computer_run_suspend: idempotent,
|
|
@@ -13435,7 +13471,7 @@ var COMPUTER_ORIENTATION_SECTIONS = [
|
|
|
13435
13471
|
},
|
|
13436
13472
|
{
|
|
13437
13473
|
brief: "5. Git and gh run through `computer_exec` once authorized; fetch before trusting remote state.",
|
|
13438
|
-
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
|
|
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.`
|
|
13439
13475
|
},
|
|
13440
13476
|
{
|
|
13441
13477
|
brief: "6. `computer_verify` captures a URL, `computer_publish_preview` keeps static output, `computer_export` saves files to the Thread.",
|
|
@@ -13675,6 +13711,35 @@ var ACTION_DEFINITIONS = [
|
|
|
13675
13711
|
toolset: "admin",
|
|
13676
13712
|
run: forward("github.user_disconnect")
|
|
13677
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
|
+
},
|
|
13678
13743
|
{
|
|
13679
13744
|
name: "recall",
|
|
13680
13745
|
title: "Recall existing knowledge",
|
|
@@ -15173,6 +15238,18 @@ var ACTION_DEFINITIONS = [
|
|
|
15173
15238
|
toolset: "loop",
|
|
15174
15239
|
run: forward("reference.resolve")
|
|
15175
15240
|
},
|
|
15241
|
+
{
|
|
15242
|
+
name: "quick_search",
|
|
15243
|
+
title: "Quick search places",
|
|
15244
|
+
description: "Jump to a place or person by name or short id: the Spaces, Topics, Threads and Artifacts you can open whose title (or objective, purpose, summary) contains every word, the people in your org whose name matches, best name match first, and an exact Thread short id (BUD-34) as `exact`. With `content`, the contributions you can open whose text holds every word (whole words, any word form), best match first, each with a short quote. The web ⌘K palette's two lookups: lexical, no embedding, no scope. To search what was said by meaning, use `recall`.",
|
|
15245
|
+
inputSchema: {
|
|
15246
|
+
q: string2().min(2).max(200).describe("a place or person name to look up, or a Thread short id such as BUD-34"),
|
|
15247
|
+
content: boolean2().optional().describe("search what contributions said instead of place names")
|
|
15248
|
+
},
|
|
15249
|
+
surfaces: ["cli"],
|
|
15250
|
+
toolset: "loop",
|
|
15251
|
+
run: Object.assign((ex, { content, ...input }) => ex.call(content === true ? "search.content" : "search.quick", input), { operations: ["search.quick", "search.content"] })
|
|
15252
|
+
},
|
|
15176
15253
|
{
|
|
15177
15254
|
name: "tree",
|
|
15178
15255
|
title: "Navigate the workspace tree",
|
|
@@ -16591,7 +16668,7 @@ var ACTIONS = ACTION_DEFINITIONS.map((action) => {
|
|
|
16591
16668
|
});
|
|
16592
16669
|
|
|
16593
16670
|
// ../actions/src/retention-entry.ts
|
|
16594
|
-
var ARBOR_VERSION = "0.24.
|
|
16671
|
+
var ARBOR_VERSION = "0.24.26";
|
|
16595
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");
|
|
16596
16673
|
var retainSourceSchema = boolean2().optional().describe("edit: in checkpoint mode, retain this newly minted content revision's source");
|
|
16597
16674
|
var checkpointSchema = boolean2().optional().describe("edit: retain the exact current version source without incrementing content version");
|
|
@@ -16999,7 +17076,7 @@ function dispositionFilename(value) {
|
|
|
16999
17076
|
// package.json
|
|
17000
17077
|
var package_default = {
|
|
17001
17078
|
name: "@lambdacurry/arbor",
|
|
17002
|
-
version: "0.24.
|
|
17079
|
+
version: "0.24.26",
|
|
17003
17080
|
description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
|
|
17004
17081
|
keywords: [
|
|
17005
17082
|
"agents",
|
|
@@ -17878,7 +17955,11 @@ var KNOWN_MISREACHES = [
|
|
|
17878
17955
|
{ tried: "spaces", use: "tree", why: "the tree lists spaces" },
|
|
17879
17956
|
{ tried: "space list", use: "tree", why: "the tree lists spaces" },
|
|
17880
17957
|
{ tried: "topics", use: "tree --depth topics", why: "topics are a tree depth" },
|
|
17881
|
-
{
|
|
17958
|
+
{
|
|
17959
|
+
tried: "search",
|
|
17960
|
+
use: "recall <query>",
|
|
17961
|
+
why: "recall searches what was said; `quick search <name>` jumps to a place or person by name"
|
|
17962
|
+
},
|
|
17882
17963
|
{ tried: "update topic", use: "topic update --topic-id top_…", why: "this command is noun-verb" },
|
|
17883
17964
|
{ tried: "update space", use: "space update --space-id spc_…", why: "this command is noun-verb" },
|
|
17884
17965
|
{
|
package/package.json
CHANGED