@lambdacurry/arbor 0.21.7 → 0.21.9
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 +134 -10
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -2774,6 +2774,22 @@ var watches = sqliteTable("watches", {
|
|
|
2774
2774
|
var TERMINAL = new Set(["finished", "failed", "cancelled"]);
|
|
2775
2775
|
var RUN_LIFECYCLE_TYPES = new Set(["run.started", "run.finished", "run.failed", "run.cancelled"]);
|
|
2776
2776
|
var COMPUTER_RUN_ACTIVITY_LABEL_MAX = 120;
|
|
2777
|
+
var RUN_PROVIDER_LIFECYCLE_PHASES = [
|
|
2778
|
+
"allocate",
|
|
2779
|
+
"boot",
|
|
2780
|
+
"restore",
|
|
2781
|
+
"session",
|
|
2782
|
+
"probe",
|
|
2783
|
+
"readiness",
|
|
2784
|
+
"ready",
|
|
2785
|
+
"checkpoint",
|
|
2786
|
+
"publish",
|
|
2787
|
+
"suspend",
|
|
2788
|
+
"release",
|
|
2789
|
+
"lost",
|
|
2790
|
+
"workspace_freeze"
|
|
2791
|
+
];
|
|
2792
|
+
var RUN_PROVIDER_LIFECYCLE_PHASE_SET = new Set(RUN_PROVIDER_LIFECYCLE_PHASES);
|
|
2777
2793
|
|
|
2778
2794
|
// ../core/src/ops/computer.ts
|
|
2779
2795
|
var MAX_COMPUTER_REPOSITORIES = 10;
|
|
@@ -17475,7 +17491,32 @@ var computerRunReceipt = exports_external.looseObject({
|
|
|
17475
17491
|
targetId: exports_external.string().optional(),
|
|
17476
17492
|
reasonCode: exports_external.string().optional()
|
|
17477
17493
|
})),
|
|
17478
|
-
lifecycle: exports_external.array(exports_external.looseObject({ type: exports_external.string(), at: exports_external.string() }))
|
|
17494
|
+
lifecycle: exports_external.array(exports_external.looseObject({ type: exports_external.string(), at: exports_external.string() })),
|
|
17495
|
+
providerLifecycle: exports_external.looseObject({
|
|
17496
|
+
generation: exports_external.number().int().min(0).nullable(),
|
|
17497
|
+
lastPhase: exports_external.string().nullable(),
|
|
17498
|
+
lastReasonCode: exports_external.string().nullable(),
|
|
17499
|
+
lastEventId: exports_external.string().nullable(),
|
|
17500
|
+
lastObservedAt: exports_external.string().nullable(),
|
|
17501
|
+
replacementGeneration: exports_external.number().int().min(0).nullable(),
|
|
17502
|
+
droppedCount: exports_external.number().int().min(0),
|
|
17503
|
+
events: exports_external.array(exports_external.looseObject({
|
|
17504
|
+
eventId: exports_external.string(),
|
|
17505
|
+
observedAt: exports_external.string(),
|
|
17506
|
+
phase: exports_external.string(),
|
|
17507
|
+
providerGeneration: exports_external.number().int().min(0),
|
|
17508
|
+
controlRelease: exports_external.string(),
|
|
17509
|
+
attemptId: exports_external.string().optional(),
|
|
17510
|
+
snapshotId: exports_external.string().optional(),
|
|
17511
|
+
runtimeState: exports_external.enum(["live", "suspended"]).optional(),
|
|
17512
|
+
releaseState: exports_external.enum(["live", "pending", "released"]).optional(),
|
|
17513
|
+
reasonCode: exports_external.string().optional(),
|
|
17514
|
+
providerHttpStatus: exports_external.number().int().optional(),
|
|
17515
|
+
providerStopClass: exports_external.string().optional(),
|
|
17516
|
+
providerRoute: exports_external.enum(["primary", "standby", "service"]).optional(),
|
|
17517
|
+
parentWorkspaceFrozen: exports_external.boolean().optional()
|
|
17518
|
+
}))
|
|
17519
|
+
})
|
|
17479
17520
|
});
|
|
17480
17521
|
var computerCapabilityCard = exports_external.looseObject({
|
|
17481
17522
|
capabilities: exports_external.array(exports_external.looseObject({
|
|
@@ -17823,6 +17864,7 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
17823
17864
|
}),
|
|
17824
17865
|
admin_feedback_capability: jsonObject,
|
|
17825
17866
|
admin_feedback_evidence: jsonObject,
|
|
17867
|
+
admin_feedback: jsonObject,
|
|
17826
17868
|
admin_feedback_topic: jsonObject,
|
|
17827
17869
|
admin_feedback_thread: jsonObject,
|
|
17828
17870
|
admin_feedback_publish: jsonObject,
|
|
@@ -18289,7 +18331,12 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
18289
18331
|
prCreate: exports_external.enum(["not-needed", "safe", "manual", "unknown"])
|
|
18290
18332
|
}),
|
|
18291
18333
|
nextAction: exports_external.string()
|
|
18292
|
-
}))
|
|
18334
|
+
})),
|
|
18335
|
+
runDisposition: exports_external.looseObject({
|
|
18336
|
+
action: exports_external.enum(["computer_run_suspend", "continue-local-work", "none"]),
|
|
18337
|
+
resumeSameRunId: exports_external.boolean(),
|
|
18338
|
+
reason: exports_external.string()
|
|
18339
|
+
})
|
|
18293
18340
|
}),
|
|
18294
18341
|
computer_run_receipt: exports_external.looseObject({
|
|
18295
18342
|
receipt: computerRunReceipt
|
|
@@ -18724,6 +18771,7 @@ var MCP_TOOL_ANNOTATIONS = {
|
|
|
18724
18771
|
feedback_status: readOnly,
|
|
18725
18772
|
admin_feedback_capability: destructiveIdempotent,
|
|
18726
18773
|
admin_feedback_evidence: destructive,
|
|
18774
|
+
admin_feedback: destructive,
|
|
18727
18775
|
admin_feedback_topic: destructive,
|
|
18728
18776
|
admin_feedback_thread: destructive,
|
|
18729
18777
|
admin_feedback_publish: additive,
|
|
@@ -18892,6 +18940,49 @@ function dispatch(map2, reshape) {
|
|
|
18892
18940
|
return ex.call(op, reshape && verb ? reshape(verb, rest) : rest);
|
|
18893
18941
|
};
|
|
18894
18942
|
}
|
|
18943
|
+
var ADMIN_FEEDBACK_VERBS = [
|
|
18944
|
+
"publish",
|
|
18945
|
+
"merge",
|
|
18946
|
+
"transition",
|
|
18947
|
+
"edit",
|
|
18948
|
+
"curate",
|
|
18949
|
+
"topic",
|
|
18950
|
+
"create",
|
|
18951
|
+
"update",
|
|
18952
|
+
"move",
|
|
18953
|
+
"archive",
|
|
18954
|
+
"restore"
|
|
18955
|
+
];
|
|
18956
|
+
var ADMIN_FEEDBACK_THREAD_VERBS = new Set([
|
|
18957
|
+
"create",
|
|
18958
|
+
"update",
|
|
18959
|
+
"move",
|
|
18960
|
+
"transition",
|
|
18961
|
+
"archive",
|
|
18962
|
+
"restore",
|
|
18963
|
+
"merge"
|
|
18964
|
+
]);
|
|
18965
|
+
var ADMIN_FEEDBACK_VERB_HELP = ADMIN_FEEDBACK_VERBS.join(" | ");
|
|
18966
|
+
function runAdminFeedback(ex, input) {
|
|
18967
|
+
const { verb, ...rest } = input;
|
|
18968
|
+
if (verb === "curate") {
|
|
18969
|
+
if (rest.curate === "delete")
|
|
18970
|
+
return ex.call("feedback_admin.remove", rest);
|
|
18971
|
+
if (rest.curate === "restore")
|
|
18972
|
+
return ex.call("feedback_admin.restore", rest);
|
|
18973
|
+
return Promise.reject(new Error('curate requires curate "delete" or "restore"'));
|
|
18974
|
+
}
|
|
18975
|
+
if (verb && ADMIN_FEEDBACK_THREAD_VERBS.has(verb)) {
|
|
18976
|
+
return ex.call("feedback_admin.thread", { ...rest, action: verb });
|
|
18977
|
+
}
|
|
18978
|
+
if (verb === "publish")
|
|
18979
|
+
return ex.call("feedback_admin.publish", rest);
|
|
18980
|
+
if (verb === "edit")
|
|
18981
|
+
return ex.call("feedback_admin.edit", rest);
|
|
18982
|
+
if (verb === "topic")
|
|
18983
|
+
return ex.call("feedback_admin.topic", rest);
|
|
18984
|
+
return Promise.reject(new Error(`unknown verb "${verb ?? ""}" — expected one of: ${ADMIN_FEEDBACK_VERB_HELP}`));
|
|
18985
|
+
}
|
|
18895
18986
|
var NOTIFICATION_TRIAGE_DESCRIPTION = "READ ONLY: List your awareness feed newest first with unseen count and derived triage class: `settled-context` = settled Thread context; `owed-by-me` = an open request pointing to `inbox`; `judgment-available` = live engagement inviting judgment; `closed-loop` = your request completed; `room-motion` = ambient activity. Notifications are FYI, not a second obligation surface: `inbox` alone contains work owed by you; this cannot mark notifications read or modify inbox obligations.";
|
|
18896
18987
|
var PAGINATION_INPUT = {
|
|
18897
18988
|
limit: exports_external.number().int().min(1).optional().describe("max items to return — enables pagination"),
|
|
@@ -19083,6 +19174,36 @@ var ACTION_DEFINITIONS = [
|
|
|
19083
19174
|
status: "feedback_admin.status"
|
|
19084
19175
|
})
|
|
19085
19176
|
},
|
|
19177
|
+
{
|
|
19178
|
+
name: "admin_feedback",
|
|
19179
|
+
title: "Moderate shared Arbor Feedback",
|
|
19180
|
+
description: "After a ship, recall matching Feedback, merge duplicates, publish the outcome, and transition the canonical Thread to resolved. Moderators only: this cannot file reports or expose receipt metadata.",
|
|
19181
|
+
inputSchema: {
|
|
19182
|
+
verb: exports_external.enum(ADMIN_FEEDBACK_VERBS).describe("close loop: publish, merge, transition; also edit, curate, topic, and thread lifecycle"),
|
|
19183
|
+
threadId: exports_external.string().optional().describe("publish / update / move / transition / archive / restore: Thread id"),
|
|
19184
|
+
type: exports_external.enum(CONTRIBUTION_TYPES).optional().describe("publish/edit: shared contribution type, including maintainer decision"),
|
|
19185
|
+
body: exports_external.string().min(1).optional().describe("publish: follow-on body · edit: replacement body"),
|
|
19186
|
+
summary: exports_external.string().max(500).nullable().optional().describe("publish/edit: gist; edit null/empty clears"),
|
|
19187
|
+
confidence: exports_external.number().int().min(0).max(100).optional().describe("publish: 0–100 confidence"),
|
|
19188
|
+
idempotencyKey: exports_external.string().min(1).max(200).optional().describe("publish: stable retry key"),
|
|
19189
|
+
feedbackId: exports_external.string().optional().describe("publish: optional receipt id; additionally requires review_private"),
|
|
19190
|
+
contributionId: exports_external.string().optional().describe("edit/curate: shared contribution id"),
|
|
19191
|
+
curate: exports_external.enum(["delete", "restore"]).optional().describe("curate: delete or restore a shared contribution"),
|
|
19192
|
+
action: exports_external.enum(["create", "update", "archive", "restore"]).optional().describe("topic: create, update, archive, or restore"),
|
|
19193
|
+
topicId: exports_external.string().optional().describe("topic / create / move / update: Feedback Topic id"),
|
|
19194
|
+
title: exports_external.string().min(1).optional().describe("topic/create/update: title"),
|
|
19195
|
+
purpose: exports_external.string().optional().describe("topic: purpose"),
|
|
19196
|
+
sourceThreadId: exports_external.string().optional().describe("merge: duplicate source Thread id"),
|
|
19197
|
+
targetThreadId: exports_external.string().optional().describe("merge: canonical destination Thread id"),
|
|
19198
|
+
objective: exports_external.string().min(1).optional().describe("create/update: Thread objective"),
|
|
19199
|
+
status: exports_external.enum(["active", "needs-review", "stuck", "standing", "resolved", "archived"]).optional().describe("transition/update: target Thread status"),
|
|
19200
|
+
reason: exports_external.string().optional().describe("merge: concise auditable rationale")
|
|
19201
|
+
},
|
|
19202
|
+
surfaces: ["mcp"],
|
|
19203
|
+
toolset: "admin",
|
|
19204
|
+
requiresCapability: "moderate",
|
|
19205
|
+
run: runAdminFeedback
|
|
19206
|
+
},
|
|
19086
19207
|
{
|
|
19087
19208
|
name: "admin_feedback_topic",
|
|
19088
19209
|
title: "Maintain shared Feedback Topics",
|
|
@@ -19093,7 +19214,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19093
19214
|
title: exports_external.string().min(1).optional().describe("create/update: Topic title"),
|
|
19094
19215
|
purpose: exports_external.string().optional().describe("create/update: Topic purpose")
|
|
19095
19216
|
},
|
|
19096
|
-
surfaces: ["
|
|
19217
|
+
surfaces: ["cli"],
|
|
19097
19218
|
toolset: "admin",
|
|
19098
19219
|
run: forward("feedback_admin.topic")
|
|
19099
19220
|
},
|
|
@@ -19112,7 +19233,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19112
19233
|
status: exports_external.enum(["active", "needs-review", "stuck", "standing", "resolved", "archived"]).optional().describe("transition/update: target Thread status"),
|
|
19113
19234
|
reason: exports_external.string().optional().describe("merge: concise auditable rationale")
|
|
19114
19235
|
},
|
|
19115
|
-
surfaces: ["
|
|
19236
|
+
surfaces: ["cli"],
|
|
19116
19237
|
toolset: "admin",
|
|
19117
19238
|
run: forward("feedback_admin.thread")
|
|
19118
19239
|
},
|
|
@@ -19129,7 +19250,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19129
19250
|
idempotencyKey: exports_external.string().min(1).max(200).optional(),
|
|
19130
19251
|
feedbackId: exports_external.string().optional().describe("optional receipt id; additionally requires review_private")
|
|
19131
19252
|
},
|
|
19132
|
-
surfaces: ["
|
|
19253
|
+
surfaces: ["cli"],
|
|
19133
19254
|
toolset: "admin",
|
|
19134
19255
|
run: forward("feedback_admin.publish")
|
|
19135
19256
|
},
|
|
@@ -19143,7 +19264,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19143
19264
|
summary: exports_external.string().max(500).nullable().optional().describe("replacement gist; null/empty clears"),
|
|
19144
19265
|
type: exports_external.enum(CONTRIBUTION_TYPES).optional().describe("replacement shared contribution type")
|
|
19145
19266
|
},
|
|
19146
|
-
surfaces: ["
|
|
19267
|
+
surfaces: ["cli"],
|
|
19147
19268
|
toolset: "admin",
|
|
19148
19269
|
run: forward("feedback_admin.edit")
|
|
19149
19270
|
},
|
|
@@ -19155,7 +19276,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19155
19276
|
verb: exports_external.enum(["delete", "restore"]),
|
|
19156
19277
|
contributionId: exports_external.string().describe("shared Feedback contribution id")
|
|
19157
19278
|
},
|
|
19158
|
-
surfaces: ["
|
|
19279
|
+
surfaces: ["cli"],
|
|
19159
19280
|
toolset: "admin",
|
|
19160
19281
|
run: dispatch({ delete: "feedback_admin.remove", restore: "feedback_admin.restore" })
|
|
19161
19282
|
},
|
|
@@ -19442,7 +19563,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19442
19563
|
{
|
|
19443
19564
|
name: "computer_repo_work_status",
|
|
19444
19565
|
title: "Inspect repository finish state",
|
|
19445
|
-
description: "READ ONLY: Inspect an active isolated WRITE Run
|
|
19566
|
+
description: "READ ONLY: Inspect an active isolated WRITE Run's Git publication, PR, CI, and review before retry, wait, or finish. Returns repository state (e.g. ci-pending) plus runDisposition.action computer_run_suspend when published work waits on CI/review/human authorization — the same runId resumes; dirty, unpublished, unknown-publication, failing, or changes-requested work keeps the local nextAction.",
|
|
19446
19567
|
inputSchema: {
|
|
19447
19568
|
runId: exports_external.string().describe("the active isolated WRITE Run to inspect, run_…")
|
|
19448
19569
|
},
|
|
@@ -19467,7 +19588,7 @@ var ACTION_DEFINITIONS = [
|
|
|
19467
19588
|
{
|
|
19468
19589
|
name: "computer_run_receipt",
|
|
19469
19590
|
title: "Read a run receipt",
|
|
19470
|
-
description: "READ ONLY: Inspect one Run's durable receipt during or after execution, including its Run-owned operation/activity state
|
|
19591
|
+
description: "READ ONLY: Inspect one Run's durable receipt during or after execution, including its Run-owned operation/activity state and a compact providerLifecycle journal (generation, last phase, typed reason) separate from command/process activity. Use this instead of parent computer_status; it returns compact history, not transcripts, and does not rewrite terminal reasonCode.",
|
|
19471
19592
|
inputSchema: {
|
|
19472
19593
|
runId: exports_external.string().describe("the run to read, run_… (from computer_run_start or computer_runs)")
|
|
19473
19594
|
},
|
|
@@ -20360,7 +20481,7 @@ var ACTION_DEFINITIONS = [
|
|
|
20360
20481
|
{
|
|
20361
20482
|
name: "service_register",
|
|
20362
20483
|
title: "Register a Computer lifecycle service",
|
|
20363
|
-
description: "Register a persistent service identity for Currybox Computer lifecycle maintenance and mint its API key (shown ONCE). Human owner/admin CLI setup only. The credential is restricted to computer.get + computer.lifecycle_runs + computer.checkpoint + computer.suspend_run + computer.resume_run + computer.reconcile_runs and to the Spaces listed here; store it as the Currybox control plane's Arbor credential.",
|
|
20484
|
+
description: "Register a persistent service identity for Currybox Computer lifecycle maintenance and mint its API key (shown ONCE). Human owner/admin CLI setup only. The credential is restricted to computer.get + computer.lifecycle_runs + computer.append_run_lifecycle + computer.checkpoint + computer.suspend_run + computer.resume_run + computer.reconcile_runs and to the Spaces listed here; store it as the Currybox control plane's Arbor credential.",
|
|
20364
20485
|
inputSchema: {
|
|
20365
20486
|
displayName: exports_external.string().min(1).describe("the service display name, e.g. Currybox lifecycle service"),
|
|
20366
20487
|
spaceIds: exports_external.array(exports_external.string().min(1)).min(1).describe("Spaces whose Thread computers the service may maintain")
|
|
@@ -21203,6 +21324,9 @@ var ACTION_DEFINITIONS = [
|
|
|
21203
21324
|
}
|
|
21204
21325
|
];
|
|
21205
21326
|
var ACTIONS = ACTION_DEFINITIONS.map((action) => {
|
|
21327
|
+
if (action.requiresCapability && !action.surfaces.includes("mcp")) {
|
|
21328
|
+
throw new Error(`${action.name}: requiresCapability is an MCP catalog gate`);
|
|
21329
|
+
}
|
|
21206
21330
|
if (!action.surfaces.some((surface) => surface === "mcp" || surface === "computer-mcp")) {
|
|
21207
21331
|
return action;
|
|
21208
21332
|
}
|
package/package.json
CHANGED