@lambdacurry/arbor 0.23.1 → 0.23.3
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 +88 -5
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// package.json
|
|
3
3
|
var package_default = {
|
|
4
4
|
name: "@lambdacurry/arbor",
|
|
5
|
-
version: "0.23.
|
|
5
|
+
version: "0.23.3",
|
|
6
6
|
description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
|
|
7
7
|
keywords: [
|
|
8
8
|
"agents",
|
|
@@ -4943,7 +4943,7 @@ var LIFECYCLE_TYPE_DESCRIPTIONS = {
|
|
|
4943
4943
|
};
|
|
4944
4944
|
function transitionThreadActionDescription() {
|
|
4945
4945
|
const types = LIFECYCLE_TYPES.map((type) => `\`${type}\` ${LIFECYCLE_TYPE_DESCRIPTIONS[type]}`).join("; ");
|
|
4946
|
-
return `Move a Thread by key, case-insensitive name, or type (\`--to resolved\` still works as a bare type);
|
|
4946
|
+
return `Move a Thread by key, case-insensitive name, or type (\`--to resolved\` still works as a bare type); every type is reachable; optional \`--rank\`. ${types}; live menu is \`thread_get.transitionsFrom\`.`;
|
|
4947
4947
|
}
|
|
4948
4948
|
var CONTRIBUTION_TYPES = [
|
|
4949
4949
|
"comment",
|
|
@@ -6737,6 +6737,7 @@ var computerRuns = sqliteTable("computer_runs", {
|
|
|
6737
6737
|
runtimeUpdatedAt: ts("runtime_updated_at"),
|
|
6738
6738
|
gitStart: text("git_start", { mode: "json" }).$type(),
|
|
6739
6739
|
f1Authority: text("f1_authority", { mode: "json" }).$type(),
|
|
6740
|
+
workspaceState: text("workspace_state", { mode: "json" }).$type(),
|
|
6740
6741
|
finishRequest: text("finish_request", { mode: "json" }).$type(),
|
|
6741
6742
|
status: text("status").$type().notNull().default("active"),
|
|
6742
6743
|
label: text("label"),
|
|
@@ -6804,6 +6805,68 @@ var packageCacheProjectUsage = sqliteTable("package_cache_project_usage", {
|
|
|
6804
6805
|
objectBudget: check("package_cache_project_usage_object_budget", sql`${t.objectCount} + ${t.reservedObjects} <= ${t.maxObjects}`),
|
|
6805
6806
|
dailyWriteBudget: check("package_cache_project_usage_daily_write_budget", sql`${t.writeBytesToday} + ${t.reservedBytes} <= ${t.maxWriteBytesPerDay}`)
|
|
6806
6807
|
}));
|
|
6808
|
+
var taskCacheObjects = sqliteTable("task_cache_objects", {
|
|
6809
|
+
key: text("key").primaryKey(),
|
|
6810
|
+
orgId: text("org_id").notNull().references(() => orgs.id),
|
|
6811
|
+
project: text("project").notNull(),
|
|
6812
|
+
runner: text("runner").notNull(),
|
|
6813
|
+
hash: text("hash").notNull(),
|
|
6814
|
+
byteLength: integer2("byte_length").notNull(),
|
|
6815
|
+
status: text("status").$type().notNull(),
|
|
6816
|
+
reservationId: text("reservation_id").notNull(),
|
|
6817
|
+
producerRunId: text("producer_run_id").notNull().references(() => computerRuns.id),
|
|
6818
|
+
producerTrust: text("producer_trust").$type().notNull(),
|
|
6819
|
+
artifactTag: text("artifact_tag").notNull(),
|
|
6820
|
+
sourceSha: text("source_sha"),
|
|
6821
|
+
dirtyHash: text("dirty_hash"),
|
|
6822
|
+
durationMs: integer2("duration_ms"),
|
|
6823
|
+
providerChargedAt: ts("provider_charged_at"),
|
|
6824
|
+
etag: text("etag"),
|
|
6825
|
+
createdAt: ts("created_at").notNull(),
|
|
6826
|
+
readyAt: ts("ready_at"),
|
|
6827
|
+
expiresAt: ts("expires_at").notNull()
|
|
6828
|
+
}, (t) => ({
|
|
6829
|
+
reservationUq: uniqueIndex("task_cache_objects_reservation_uniq").on(t.reservationId),
|
|
6830
|
+
projectRunnerStatusExpiryIdx: index("task_cache_objects_project_runner_status_expiry_idx").on(t.orgId, t.project, t.runner, t.status, t.expiresAt)
|
|
6831
|
+
}));
|
|
6832
|
+
var taskCacheProjectUsage = sqliteTable("task_cache_project_usage", {
|
|
6833
|
+
id: text("id").primaryKey(),
|
|
6834
|
+
orgId: text("org_id").notNull().references(() => orgs.id),
|
|
6835
|
+
project: text("project").notNull(),
|
|
6836
|
+
maxStoredBytes: integer2("max_stored_bytes").notNull(),
|
|
6837
|
+
maxObjects: integer2("max_objects").notNull(),
|
|
6838
|
+
maxWriteBytesPerDay: integer2("max_write_bytes_per_day").notNull(),
|
|
6839
|
+
maxClassAOpsPerDay: integer2("max_class_a_ops_per_day").notNull(),
|
|
6840
|
+
maxClassBOpsPerDay: integer2("max_class_b_ops_per_day").notNull(),
|
|
6841
|
+
dailyPeriod: text("daily_period").notNull(),
|
|
6842
|
+
writeBytesToday: integer2("write_bytes_today").notNull().default(0),
|
|
6843
|
+
classAOpsToday: integer2("class_a_ops_today").notNull().default(0),
|
|
6844
|
+
classBOpsToday: integer2("class_b_ops_today").notNull().default(0),
|
|
6845
|
+
storedBytes: integer2("stored_bytes").notNull().default(0),
|
|
6846
|
+
objectCount: integer2("object_count").notNull().default(0),
|
|
6847
|
+
reservedBytes: integer2("reserved_bytes").notNull().default(0),
|
|
6848
|
+
reservedObjects: integer2("reserved_objects").notNull().default(0),
|
|
6849
|
+
writeBytes: integer2("write_bytes").notNull().default(0),
|
|
6850
|
+
readBytes: integer2("read_bytes").notNull().default(0),
|
|
6851
|
+
hits: integer2("hits").notNull().default(0),
|
|
6852
|
+
misses: integer2("misses").notNull().default(0),
|
|
6853
|
+
rejections: integer2("rejections").notNull().default(0),
|
|
6854
|
+
classAOps: integer2("class_a_ops").notNull().default(0),
|
|
6855
|
+
classBOps: integer2("class_b_ops").notNull().default(0),
|
|
6856
|
+
publicationsNew: integer2("publications_new").notNull().default(0),
|
|
6857
|
+
publicationsDuplicate: integer2("publications_duplicate").notNull().default(0),
|
|
6858
|
+
publicationsReconciled: integer2("publications_reconciled").notNull().default(0),
|
|
6859
|
+
publicationsRejected: integer2("publications_rejected").notNull().default(0),
|
|
6860
|
+
updatedAt: ts("updated_at").notNull()
|
|
6861
|
+
}, (t) => ({
|
|
6862
|
+
projectUq: uniqueIndex("task_cache_project_usage_project_uniq").on(t.orgId, t.project),
|
|
6863
|
+
nonnegative: check("task_cache_project_usage_nonnegative", sql`${t.storedBytes} >= 0 AND ${t.objectCount} >= 0 AND ${t.reservedBytes} >= 0 AND ${t.reservedObjects} >= 0 AND ${t.writeBytesToday} >= 0 AND ${t.classAOpsToday} >= 0 AND ${t.classBOpsToday} >= 0`),
|
|
6864
|
+
byteBudget: check("task_cache_project_usage_byte_budget", sql`${t.storedBytes} + ${t.reservedBytes} <= ${t.maxStoredBytes}`),
|
|
6865
|
+
objectBudget: check("task_cache_project_usage_object_budget", sql`${t.objectCount} + ${t.reservedObjects} <= ${t.maxObjects}`),
|
|
6866
|
+
dailyWriteBudget: check("task_cache_project_usage_daily_write_budget", sql`${t.writeBytesToday} <= ${t.maxWriteBytesPerDay}`),
|
|
6867
|
+
dailyClassABudget: check("task_cache_project_usage_daily_class_a_budget", sql`${t.classAOpsToday} <= ${t.maxClassAOpsPerDay}`),
|
|
6868
|
+
dailyClassBBudget: check("task_cache_project_usage_daily_class_b_budget", sql`${t.classBOpsToday} <= ${t.maxClassBOpsPerDay}`)
|
|
6869
|
+
}));
|
|
6807
6870
|
var computerSnapshots = sqliteTable("computer_snapshots", {
|
|
6808
6871
|
id: text("id").primaryKey(),
|
|
6809
6872
|
ownerScope: text("owner_scope").$type().notNull(),
|
|
@@ -7727,6 +7790,7 @@ var artifactTldrawPreviewCandidates = sqliteTable("artifact_tldraw_preview_candi
|
|
|
7727
7790
|
r2KeyIdx: uniqueIndex("artifact_tldraw_preview_candidates_r2_key_uniq").on(t.r2Key)
|
|
7728
7791
|
}));
|
|
7729
7792
|
// ../core/src/lifecycle/thread.ts
|
|
7793
|
+
var TYPE_SET = new Set(LIFECYCLE_TYPES);
|
|
7730
7794
|
var STATUS_OPENNESS = {
|
|
7731
7795
|
backlog: { working: false, currentWork: false, closed: false },
|
|
7732
7796
|
active: { working: true, currentWork: true, closed: false },
|
|
@@ -7916,6 +7980,7 @@ var COMPUTER_RUN_F1_FINAL_FAILURE_CODES = new Set([
|
|
|
7916
7980
|
]);
|
|
7917
7981
|
var TERMINAL = new Set(["finished", "failed", "cancelled"]);
|
|
7918
7982
|
var RUN_LIFECYCLE_TYPES = new Set(["run.started", "run.finished", "run.failed", "run.cancelled"]);
|
|
7983
|
+
var COMPUTER_RUN_RECOVERY_WINDOW_MS = 60 * 60 * 1000;
|
|
7919
7984
|
var COMPUTER_RUN_ACTIVITY_LABEL_MAX = 120;
|
|
7920
7985
|
var RUN_PROVIDER_LIFECYCLE_PHASES = [
|
|
7921
7986
|
"allocate",
|
|
@@ -7966,9 +8031,18 @@ var assigneeColumns = {
|
|
|
7966
8031
|
color: profiles.color,
|
|
7967
8032
|
emoji: profiles.emoji
|
|
7968
8033
|
};
|
|
8034
|
+
var lastActivityExpr = sql`coalesce(
|
|
8035
|
+
(select max(${contributions.createdAt}) from ${contributions}
|
|
8036
|
+
where ${contributions.threadId} = ${threads.id}),
|
|
8037
|
+
${threads.createdAt}
|
|
8038
|
+
)`;
|
|
7969
8039
|
// ../core/src/ops/package-cache.ts
|
|
7970
8040
|
var PACKAGE_CACHE_PENDING_TTL_MS = 15 * 60 * 1000;
|
|
7971
8041
|
var PACKAGE_CACHE_FINAL_TTL_MS = 30 * 24 * 60 * 60 * 1000;
|
|
8042
|
+
// ../core/src/ops/task-cache.ts
|
|
8043
|
+
var TASK_CACHE_PENDING_TTL_MS = 15 * 60 * 1000;
|
|
8044
|
+
var TASK_CACHE_FINAL_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
8045
|
+
var TASK_CACHE_RECOVERABLE_TTL_MS = 30 * 24 * 60 * 60 * 1000;
|
|
7972
8046
|
// ../core/src/ops/computer-output.ts
|
|
7973
8047
|
var COMPUTER_OUTPUT_DEFAULT_STALE_MS = 24 * 60 * 60 * 1000;
|
|
7974
8048
|
// ../core/src/ops/computer-recovery.ts
|
|
@@ -9095,12 +9169,19 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
9095
9169
|
topicTitle: string2(),
|
|
9096
9170
|
createdAt: string2(),
|
|
9097
9171
|
lastActivityAt: string2(),
|
|
9172
|
+
lifecycleLabel: string2().optional(),
|
|
9173
|
+
workflow: looseObject({
|
|
9174
|
+
id: string2(),
|
|
9175
|
+
allowedTypes: array(string2()),
|
|
9176
|
+
labelByType: record(string2(), string2())
|
|
9177
|
+
}).optional(),
|
|
9098
9178
|
assignees: array(threadAssignee),
|
|
9099
9179
|
url: string2().optional()
|
|
9100
9180
|
})),
|
|
9101
9181
|
nextCursor: nullableString,
|
|
9102
9182
|
total: number2().int().min(0),
|
|
9103
|
-
status: string2().optional()
|
|
9183
|
+
status: string2().optional(),
|
|
9184
|
+
order: string2().optional()
|
|
9104
9185
|
}),
|
|
9105
9186
|
tree: looseObject({
|
|
9106
9187
|
spaces: array(treeSpace),
|
|
@@ -11253,7 +11334,7 @@ var ACTION_DEFINITIONS = [
|
|
|
11253
11334
|
{
|
|
11254
11335
|
name: "thread_list",
|
|
11255
11336
|
title: "List threads by responsibility",
|
|
11256
|
-
description: "List the Threads you are responsible for (default), those assigned to another profile (or jointly to several), or the unassigned ones inside one Space or Topic — current work only (active, needs-review, stuck) unless status widens it. Read it to decide what to move forward; `inbox` remains the list of specific actions you owe.",
|
|
11337
|
+
description: "List the Threads you are responsible for (default), those assigned to another profile (or jointly to several), or the unassigned ones inside one Space or Topic — current work only (active, needs-review, stuck) unless status widens it; pass order=activity for last-activity DESC (the aggregate board). Read it to decide what to move forward; `inbox` remains the list of specific actions you owe.",
|
|
11257
11338
|
inputSchema: {
|
|
11258
11339
|
assignee: union([string2(), array(string2()).min(1).max(5)]).optional().describe("`me` (default) or a profile id, prof_…; a list (repeat the flag) means assigned to ALL of them — the pair view"),
|
|
11259
11340
|
unassigned: boolean2().optional().describe("threads with no assignee — requires spaceId or topicId"),
|
|
@@ -11271,6 +11352,7 @@ var ACTION_DEFINITIONS = [
|
|
|
11271
11352
|
"canceled",
|
|
11272
11353
|
"archived"
|
|
11273
11354
|
]).optional().describe("default current = active + needs-review + stuck; all includes backlog/standing/resolved/canceled/archived"),
|
|
11355
|
+
order: _enum(["assigned", "activity"]).optional().describe("default assigned = newest assignment first; activity = last_activity_at DESC (aggregate board order)"),
|
|
11274
11356
|
limit: number2().int().min(1).max(100).optional().describe("page size (default 20, max 100)"),
|
|
11275
11357
|
cursor: string2().optional().describe("keyset cursor from a prior page's nextCursor")
|
|
11276
11358
|
},
|
|
@@ -11755,7 +11837,8 @@ var ACTION_DEFINITIONS = [
|
|
|
11755
11837
|
inputSchema: {
|
|
11756
11838
|
threadId: string2().describe("the thread to move, thr_…"),
|
|
11757
11839
|
to: string2().min(1).describe("label key, case-insensitive label name, or bare type (`resolved` still works as a type name)"),
|
|
11758
|
-
reason: string2().optional().describe("optional one-line why, recorded on the event")
|
|
11840
|
+
reason: string2().optional().describe("optional one-line why, recorded on the event"),
|
|
11841
|
+
rank: string2().max(THREAD_RANK_MAX).regex(THREAD_RANK_PATTERN).nullable().optional().describe("LexoRank in the destination column; omit to leave unchanged, null to restore recency. Combined with `--to` this is one atomic write — a bad rank moves nothing")
|
|
11759
11842
|
},
|
|
11760
11843
|
surfaces: ["mcp", "cli"],
|
|
11761
11844
|
toolset: "loop",
|
package/package.json
CHANGED