@lambdacurry/arbor 0.16.4 → 0.17.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.
- package/dist/arbor.js +37 -25
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -1880,6 +1880,8 @@ var secrets = sqliteTable("secrets", {
|
|
|
1880
1880
|
orgId: text("org_id").notNull().references(() => orgs.id),
|
|
1881
1881
|
name: text("name").notNull(),
|
|
1882
1882
|
description: text("description").notNull().default(""),
|
|
1883
|
+
ownerType: text("owner_type").$type().notNull().default("organization"),
|
|
1884
|
+
ownerId: text("owner_id"),
|
|
1883
1885
|
lifecycle: text("lifecycle").$type().notNull().default("active"),
|
|
1884
1886
|
currentVersionId: text("current_version_id"),
|
|
1885
1887
|
currentVersion: integer("current_version").notNull().default(0),
|
|
@@ -1889,7 +1891,9 @@ var secrets = sqliteTable("secrets", {
|
|
|
1889
1891
|
createdAt: ts("created_at").notNull(),
|
|
1890
1892
|
revokedAt: ts("revoked_at")
|
|
1891
1893
|
}, (t) => ({
|
|
1892
|
-
orgNameUq: uniqueIndex("
|
|
1894
|
+
orgNameUq: uniqueIndex("secrets_org_owner_name_uq").on(t.orgId, t.name).where(sql`${t.ownerType} = 'organization'`),
|
|
1895
|
+
profileNameUq: uniqueIndex("secrets_profile_name_uq").on(t.orgId, t.ownerId, t.name).where(sql`${t.ownerType} = 'profile'`),
|
|
1896
|
+
ownerIdx: index("secrets_owner_idx").on(t.orgId, t.ownerType, t.ownerId),
|
|
1893
1897
|
orgLifecycleIdx: index("secrets_org_lifecycle_idx").on(t.orgId, t.lifecycle, t.createdAt)
|
|
1894
1898
|
}));
|
|
1895
1899
|
var secretVersions = sqliteTable("secret_versions", {
|
|
@@ -2183,6 +2187,24 @@ var EMOJI_RE = new RegExp("^\\p{RGI_Emoji}$", "v");
|
|
|
2183
2187
|
var BASE_MS = Date.parse("2026-07-20T15:00:00.000Z");
|
|
2184
2188
|
// ../core/src/ops/agent-pairing.ts
|
|
2185
2189
|
var PAIRING_TTL_MS = 15 * 60 * 1000;
|
|
2190
|
+
// ../core/src/ops/secret.ts
|
|
2191
|
+
var SECRET_PERMISSIONS = [
|
|
2192
|
+
"create",
|
|
2193
|
+
"metadata:read",
|
|
2194
|
+
"value:write",
|
|
2195
|
+
"rotate",
|
|
2196
|
+
"bind",
|
|
2197
|
+
"unbind",
|
|
2198
|
+
"revoke",
|
|
2199
|
+
"delete",
|
|
2200
|
+
"plaintext:read"
|
|
2201
|
+
];
|
|
2202
|
+
var SECRET_ADMIN_PERMISSIONS = SECRET_PERMISSIONS.filter((permission) => permission !== "create" && permission !== "plaintext:read");
|
|
2203
|
+
var ORG_ADMIN_CONTAINMENT_PERMISSIONS = new Set([
|
|
2204
|
+
"metadata:read",
|
|
2205
|
+
"unbind",
|
|
2206
|
+
"revoke"
|
|
2207
|
+
]);
|
|
2186
2208
|
// ../core/src/ops/preview.ts
|
|
2187
2209
|
var PREVIEW_ENTRY_MIME = "text/html; charset=utf-8";
|
|
2188
2210
|
var PREVIEW_MAX_BYTES = 2 * 1024 * 1024;
|
|
@@ -2203,20 +2225,6 @@ var PREVIEW_MIME_TYPES = new Set([
|
|
|
2203
2225
|
"font/woff",
|
|
2204
2226
|
"font/woff2"
|
|
2205
2227
|
]);
|
|
2206
|
-
// ../core/src/ops/secret.ts
|
|
2207
|
-
var SECRET_PERMISSIONS = [
|
|
2208
|
-
"create",
|
|
2209
|
-
"metadata:read",
|
|
2210
|
-
"value:write",
|
|
2211
|
-
"rotate",
|
|
2212
|
-
"bind",
|
|
2213
|
-
"unbind",
|
|
2214
|
-
"revoke",
|
|
2215
|
-
"delete",
|
|
2216
|
-
"plaintext:read"
|
|
2217
|
-
];
|
|
2218
|
-
var SECRET_ADMIN_PERMISSIONS = SECRET_PERMISSIONS.filter((permission) => permission !== "create" && permission !== "plaintext:read");
|
|
2219
|
-
|
|
2220
2228
|
// ../core/src/ops/app.ts
|
|
2221
2229
|
var APP_MAX_MODULE_BYTES = 10 * 1024 * 1024;
|
|
2222
2230
|
var APP_MAX_ASSET_BYTES = 25 * 1024 * 1024;
|
|
@@ -17959,7 +17967,7 @@ var ACTION_DEFINITIONS = [
|
|
|
17959
17967
|
description: "Replace your organization's sparse computer-default layer without allocating runtime state. Omitted/null values fall back to provider defaults; Space, Topic, and Thread layers may override individual fields.",
|
|
17960
17968
|
inputSchema: {
|
|
17961
17969
|
backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("default execution tier, or null to use worker-shell"),
|
|
17962
|
-
containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, Node 26.5.1,
|
|
17970
|
+
containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, and ripgrep (rg), or null to clear"),
|
|
17963
17971
|
setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize, or null to clear"),
|
|
17964
17972
|
repositories: exports_external.array(exports_external.string()).max(MAX_COMPUTER_REPOSITORIES).nullable().optional().describe("connected GitHub repositories to materialize into a fresh reusable base and allow for later Git calls; [] clears and null inherits")
|
|
17965
17973
|
},
|
|
@@ -17974,7 +17982,7 @@ var ACTION_DEFINITIONS = [
|
|
|
17974
17982
|
inputSchema: {
|
|
17975
17983
|
spaceId: exports_external.string().describe("the Space, spc_…"),
|
|
17976
17984
|
backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
|
|
17977
|
-
containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, Node 26.5.1,
|
|
17985
|
+
containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, and ripgrep (rg), or null to clear inherited profile"),
|
|
17978
17986
|
setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize, or null to clear"),
|
|
17979
17987
|
repositories: exports_external.array(exports_external.string()).max(MAX_COMPUTER_REPOSITORIES).nullable().optional().describe("connected GitHub repositories to materialize into a fresh reusable base and allow for later Git calls; [] clears and null inherits")
|
|
17980
17988
|
},
|
|
@@ -17989,7 +17997,7 @@ var ACTION_DEFINITIONS = [
|
|
|
17989
17997
|
inputSchema: {
|
|
17990
17998
|
topicId: exports_external.string().describe("the Topic, top_…"),
|
|
17991
17999
|
backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
|
|
17992
|
-
containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, Node 26.5.1,
|
|
18000
|
+
containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, and ripgrep (rg), or null to clear inherited profile"),
|
|
17993
18001
|
setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize"),
|
|
17994
18002
|
repositories: exports_external.array(exports_external.string()).max(MAX_COMPUTER_REPOSITORIES).nullable().optional().describe("connected GitHub repositories to materialize into a fresh reusable base and allow for later Git calls; [] clears and null inherits")
|
|
17995
18003
|
},
|
|
@@ -18004,7 +18012,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18004
18012
|
inputSchema: {
|
|
18005
18013
|
threadId: exports_external.string().describe("the Thread, thr_…"),
|
|
18006
18014
|
backend: exports_external.enum(["worker-shell", "container"]).nullable().optional().describe("override execution tier, or null to inherit"),
|
|
18007
|
-
containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, Node 26.5.1,
|
|
18015
|
+
containerProfile: exports_external.string().nullable().optional().describe("logical container profile; bun-typescript-v1 guarantees Bash, Git, Bun 1.3.3, bunx, Node 26.5.1, pnpm 10.33.0, and ripgrep (rg), or null to clear inherited profile"),
|
|
18008
18016
|
setupScript: exports_external.string().nullable().optional().describe("optional strict Bash setup run after connected repositories materialize"),
|
|
18009
18017
|
repositories: exports_external.array(exports_external.string()).max(MAX_COMPUTER_REPOSITORIES).nullable().optional().describe("connected GitHub repositories to materialize into a fresh reusable base and allow for later Git calls; [] clears and null inherits")
|
|
18010
18018
|
},
|
|
@@ -19317,7 +19325,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19317
19325
|
{
|
|
19318
19326
|
name: "secrets",
|
|
19319
19327
|
title: "Manage encrypted Secrets",
|
|
19320
|
-
description: "Create, authorize, version, rotate, bind, and revoke first-class Arbor Secrets without revealing plaintext. set and rotate never echo submitted values; bind exposes the current version only to the named App runtime binding, while identity administration and runtime consumption remain separate. Plaintext reveal is not shipped in v1.",
|
|
19328
|
+
description: "Create, authorize, version, rotate, bind, and revoke first-class Arbor Secrets without revealing plaintext. set and rotate never echo submitted values; bind exposes the current version only to the named App runtime binding, while identity administration and runtime consumption remain separate. A Secret is owned by the Organization or by one Profile; ownership carries administration authority and never implies runtime access, which always needs an explicit grant or binding. Deactivating an owning Profile revokes what it owns, so bound App workloads fail closed. Plaintext reveal is not shipped in v1.",
|
|
19321
19329
|
inputSchema: {
|
|
19322
19330
|
verb: exports_external.enum([
|
|
19323
19331
|
"list",
|
|
@@ -19334,6 +19342,8 @@ var ACTION_DEFINITIONS = [
|
|
|
19334
19342
|
secretId: exports_external.string().optional().describe("Secret id; omit only when granting/revoking org-scoped create permission"),
|
|
19335
19343
|
name: exports_external.string().optional().describe("create: lowercase Secret name"),
|
|
19336
19344
|
description: exports_external.string().max(500).optional().describe("create: non-sensitive purpose"),
|
|
19345
|
+
owner: exports_external.enum(["organization", "profile"]).optional().describe("create: who owns the Secret (default organization). profile keeps administration with one identity; names are unique per owner"),
|
|
19346
|
+
ownerProfileId: exports_external.string().optional().describe("create + owner=profile: the owning identity, defaulting to you; assigning another Profile is an Org owner/admin action"),
|
|
19337
19347
|
value: exports_external.string().min(1).optional().describe("set/rotate: plaintext submitted once and never returned or recorded"),
|
|
19338
19348
|
profileId: exports_external.string().optional().describe("grant/revoke_grant: authorized human or agent"),
|
|
19339
19349
|
permissions: exports_external.array(exports_external.enum([
|
|
@@ -19387,10 +19397,12 @@ var ACTION_DEFINITIONS = [
|
|
|
19387
19397
|
{
|
|
19388
19398
|
name: "secret_create",
|
|
19389
19399
|
title: "Create a Secret",
|
|
19390
|
-
description: "Create first-class Secret metadata without material; an Org owner/admin or identity with org-scoped create permission may do this. Follow with secret_set to write its first encrypted version.",
|
|
19400
|
+
description: "Create first-class Secret metadata without material; an Org owner/admin or identity with org-scoped create permission may do this. Owner defaults to the Organization; owner=profile keeps administration with one identity, and an Org owner/admin then holds only metadata read, unbind, and revoke over it. Ownership never grants runtime access. Follow with secret_set to write its first encrypted version.",
|
|
19391
19401
|
inputSchema: {
|
|
19392
|
-
name: exports_external.string().min(1).max(63).describe("lowercase stable name"),
|
|
19393
|
-
description: exports_external.string().max(500).optional().describe("non-sensitive purpose")
|
|
19402
|
+
name: exports_external.string().min(1).max(63).describe("lowercase stable name, unique per owner"),
|
|
19403
|
+
description: exports_external.string().max(500).optional().describe("non-sensitive purpose"),
|
|
19404
|
+
owner: exports_external.enum(["organization", "profile"]).optional().describe("who owns it (default organization); deactivating a profile owner revokes what it owns"),
|
|
19405
|
+
ownerProfileId: exports_external.string().optional().describe("owner=profile: the owning identity, defaulting to you; assigning another Profile is an Org owner/admin action")
|
|
19394
19406
|
},
|
|
19395
19407
|
surfaces: ["cli"],
|
|
19396
19408
|
toolset: "apps",
|
|
@@ -19423,7 +19435,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19423
19435
|
{
|
|
19424
19436
|
name: "secret_grant",
|
|
19425
19437
|
title: "Grant Secret access",
|
|
19426
|
-
description: "Replace one human or agent's explicit Secret permissions; omit secretId only to grant org-scoped create. Plaintext-read is reserved for a future dedicated reveal path and this command rejects it; runtime App consumption is controlled by bindings, not this identity grant.",
|
|
19438
|
+
description: "Replace one human or agent's explicit Secret permissions; omit secretId only to grant org-scoped create. An Organization-owned Secret is administered by an Org owner/admin or its creator; a profile-owned Secret is administered only by its owner, so no one else can grant themselves access to it. Plaintext-read is reserved for a future dedicated reveal path and this command rejects it; runtime App consumption is controlled by bindings, not this identity grant.",
|
|
19427
19439
|
inputSchema: {
|
|
19428
19440
|
secretId: exports_external.string().optional().describe("Secret scope; omit only for org-scoped create permission"),
|
|
19429
19441
|
profileId: exports_external.string().describe("authorized human or agent profile"),
|
|
@@ -19458,7 +19470,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19458
19470
|
{
|
|
19459
19471
|
name: "secret_bind",
|
|
19460
19472
|
title: "Bind a Secret to an App",
|
|
19461
|
-
description: "Authorize one App workload to consume the active Secret version through a provider-native Dynamic Worker env binding. The actor needs Secret bind authority
|
|
19473
|
+
description: "Authorize one App workload to consume the active Secret version through a provider-native Dynamic Worker env binding. The actor needs Secret bind authority — ownership of a profile-owned Secret, or an explicit bind grant — plus access to the App's Space. Binding permission never grants plaintext read to the acting identity, and no material enters bundles, deployments, receipts, or Events; it does put the value in reach of that App's code, so bind your own Secret only into an App whose deployers you trust.",
|
|
19462
19474
|
inputSchema: {
|
|
19463
19475
|
secretId: exports_external.string().describe("active Secret with a value, sec_…"),
|
|
19464
19476
|
appId: exports_external.string().describe("target App, app_…"),
|
package/package.json
CHANGED