@lambdacurry/arbor 0.13.5 → 0.13.7
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 +508 -145
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -16440,6 +16440,16 @@ var id = exports_external.string();
|
|
|
16440
16440
|
var timestamp = exports_external.string();
|
|
16441
16441
|
var nullableString = exports_external.string().nullable();
|
|
16442
16442
|
var jsonObject = exports_external.looseObject({});
|
|
16443
|
+
var appInvocationResponse = exports_external.object({
|
|
16444
|
+
status: exports_external.number().int().min(100).max(599),
|
|
16445
|
+
headers: exports_external.record(exports_external.string(), exports_external.string()),
|
|
16446
|
+
body: exports_external.string(),
|
|
16447
|
+
byteCount: exports_external.number().int().min(0).max(64 * 1024),
|
|
16448
|
+
truncated: exports_external.boolean(),
|
|
16449
|
+
bodyKind: exports_external.enum(["text", "unsupported"]),
|
|
16450
|
+
unsupportedReason: exports_external.enum(["binary_content_type", "invalid_utf8"]).optional(),
|
|
16451
|
+
json: exports_external.json().optional()
|
|
16452
|
+
});
|
|
16443
16453
|
var spaceRef = exports_external.looseObject({ id, title: nullableString });
|
|
16444
16454
|
var recallHit = exports_external.looseObject({
|
|
16445
16455
|
id,
|
|
@@ -16844,6 +16854,13 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
16844
16854
|
all: exports_external.array(initiative3).optional(),
|
|
16845
16855
|
ok: exports_external.boolean().optional()
|
|
16846
16856
|
}),
|
|
16857
|
+
goal_get: exports_external.looseObject({ initiative: initiative3 }),
|
|
16858
|
+
goal_list: exports_external.looseObject({
|
|
16859
|
+
initiatives: exports_external.array(initiative3).optional(),
|
|
16860
|
+
linked: exports_external.array(initiative3).optional(),
|
|
16861
|
+
all: exports_external.array(initiative3).optional()
|
|
16862
|
+
}),
|
|
16863
|
+
goal_delete: exports_external.looseObject({ ok: exports_external.boolean() }),
|
|
16847
16864
|
membership: exports_external.looseObject({
|
|
16848
16865
|
spaceId: id.optional(),
|
|
16849
16866
|
profileId: id.optional(),
|
|
@@ -16859,20 +16876,32 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
16859
16876
|
nextCursor: exports_external.string().optional(),
|
|
16860
16877
|
ok: exports_external.boolean().optional()
|
|
16861
16878
|
}),
|
|
16862
|
-
|
|
16879
|
+
space_leave: exports_external.looseObject({ spaceId: id, left: exports_external.boolean() }),
|
|
16880
|
+
space_list_open: paged("spaces", space3),
|
|
16881
|
+
space_invitation_list: paged("invitations", jsonObject),
|
|
16882
|
+
notification_list: exports_external.looseObject({
|
|
16863
16883
|
items: exports_external.array(jsonObject).optional(),
|
|
16864
16884
|
total: exports_external.number().optional(),
|
|
16865
16885
|
unseenCount: exports_external.number().optional(),
|
|
16866
16886
|
lastSeenAt: timestamp.nullable().optional(),
|
|
16867
|
-
notificationId: id.optional(),
|
|
16868
|
-
read: exports_external.boolean().optional(),
|
|
16869
|
-
markedCount: exports_external.number().optional(),
|
|
16870
16887
|
nextCursor: exports_external.string().optional()
|
|
16871
16888
|
}),
|
|
16889
|
+
notification_read: exports_external.looseObject({
|
|
16890
|
+
notificationId: id.optional(),
|
|
16891
|
+
read: exports_external.boolean().optional()
|
|
16892
|
+
}),
|
|
16893
|
+
notification_read_all: exports_external.looseObject({
|
|
16894
|
+
markedCount: exports_external.number().optional()
|
|
16895
|
+
}),
|
|
16872
16896
|
watch: exports_external.looseObject({
|
|
16873
16897
|
targetType: exports_external.string().optional(),
|
|
16874
16898
|
targetId: id.optional(),
|
|
16875
|
-
watching: exports_external.boolean().optional()
|
|
16899
|
+
watching: exports_external.boolean().optional()
|
|
16900
|
+
}),
|
|
16901
|
+
watch_get: exports_external.looseObject({
|
|
16902
|
+
watching: exports_external.boolean()
|
|
16903
|
+
}),
|
|
16904
|
+
watch_list: exports_external.looseObject({
|
|
16876
16905
|
watches: exports_external.array(jsonObject).optional()
|
|
16877
16906
|
}),
|
|
16878
16907
|
curation: exports_external.looseObject({
|
|
@@ -16900,23 +16929,61 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
16900
16929
|
versions: exports_external.array(jsonObject).optional(),
|
|
16901
16930
|
appBundles: exports_external.array(jsonObject).optional()
|
|
16902
16931
|
}),
|
|
16903
|
-
|
|
16904
|
-
|
|
16905
|
-
|
|
16906
|
-
|
|
16907
|
-
|
|
16908
|
-
|
|
16909
|
-
|
|
16910
|
-
|
|
16911
|
-
|
|
16912
|
-
|
|
16913
|
-
|
|
16914
|
-
|
|
16915
|
-
|
|
16932
|
+
artifact_get: exports_external.looseObject({
|
|
16933
|
+
id,
|
|
16934
|
+
title: exports_external.string(),
|
|
16935
|
+
kind: exports_external.string(),
|
|
16936
|
+
status: exports_external.string(),
|
|
16937
|
+
content: jsonObject,
|
|
16938
|
+
version: exports_external.number().optional(),
|
|
16939
|
+
versions: exports_external.array(jsonObject).optional(),
|
|
16940
|
+
appBundles: exports_external.array(jsonObject),
|
|
16941
|
+
watching: exports_external.boolean(),
|
|
16942
|
+
url: exports_external.string()
|
|
16943
|
+
}),
|
|
16944
|
+
artifact_transition: exports_external.looseObject({
|
|
16945
|
+
artifactId: id,
|
|
16946
|
+
status: exports_external.string(),
|
|
16947
|
+
retrievalTier: exports_external.string()
|
|
16948
|
+
}),
|
|
16949
|
+
artifact_delete: exports_external.looseObject({
|
|
16950
|
+
artifactId: id,
|
|
16951
|
+
status: exports_external.literal("deleted"),
|
|
16952
|
+
retrievalTier: exports_external.string()
|
|
16953
|
+
}),
|
|
16954
|
+
app_list: exports_external.object({ result: exports_external.array(app2) }),
|
|
16955
|
+
app_get: exports_external.looseObject({
|
|
16956
|
+
app: app2,
|
|
16957
|
+
deployments: exports_external.array(jsonObject),
|
|
16958
|
+
resets: exports_external.array(jsonObject),
|
|
16959
|
+
events: exports_external.array(jsonObject),
|
|
16960
|
+
url: exports_external.string()
|
|
16961
|
+
}),
|
|
16962
|
+
app_deployment_get: exports_external.looseObject({ deployment, bundle: jsonObject }),
|
|
16963
|
+
app_fetch: appInvocationResponse,
|
|
16964
|
+
app_request: appInvocationResponse,
|
|
16965
|
+
app_create: app2,
|
|
16966
|
+
app_deploy: exports_external.looseObject({
|
|
16967
|
+
deployment,
|
|
16968
|
+
activated: exports_external.boolean(),
|
|
16969
|
+
url: exports_external.string(),
|
|
16970
|
+
replayed: exports_external.boolean().optional()
|
|
16971
|
+
}),
|
|
16972
|
+
app_activate: exports_external.looseObject({
|
|
16973
|
+
app: app2,
|
|
16974
|
+
deployment,
|
|
16916
16975
|
replayed: exports_external.boolean().optional(),
|
|
16917
|
-
url: exports_external.string()
|
|
16918
|
-
|
|
16976
|
+
url: exports_external.string()
|
|
16977
|
+
}),
|
|
16978
|
+
app_rollback: exports_external.looseObject({
|
|
16979
|
+
app: app2,
|
|
16980
|
+
deployment,
|
|
16981
|
+
replayed: exports_external.boolean().optional(),
|
|
16982
|
+
url: exports_external.string()
|
|
16919
16983
|
}),
|
|
16984
|
+
app_set_access: app2,
|
|
16985
|
+
app_reset_state: exports_external.looseObject({ reset: jsonObject, replayed: exports_external.boolean() }),
|
|
16986
|
+
app_archive: app2,
|
|
16920
16987
|
charter: exports_external.looseObject({
|
|
16921
16988
|
ok: exports_external.boolean().optional(),
|
|
16922
16989
|
space: space3.optional(),
|
|
@@ -16990,9 +17057,19 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
16990
17057
|
head: exports_external.string().optional(),
|
|
16991
17058
|
refs: exports_external.array(exports_external.string()).optional()
|
|
16992
17059
|
}),
|
|
16993
|
-
|
|
17060
|
+
computer_fetch: exports_external.looseObject({
|
|
17061
|
+
ok: exports_external.literal(true),
|
|
17062
|
+
operation: exports_external.literal("fetch"),
|
|
17063
|
+
repository: exports_external.string(),
|
|
17064
|
+
dir: exports_external.string(),
|
|
17065
|
+
branch: exports_external.string().optional(),
|
|
17066
|
+
head: exports_external.string().optional(),
|
|
17067
|
+
fetchHead: exports_external.string().optional(),
|
|
17068
|
+
refs: exports_external.array(exports_external.string()).optional()
|
|
17069
|
+
}),
|
|
17070
|
+
computer_pull: exports_external.looseObject({
|
|
16994
17071
|
ok: exports_external.literal(true),
|
|
16995
|
-
operation: exports_external.
|
|
17072
|
+
operation: exports_external.literal("pull"),
|
|
16996
17073
|
repository: exports_external.string(),
|
|
16997
17074
|
dir: exports_external.string(),
|
|
16998
17075
|
branch: exports_external.string().optional(),
|
|
@@ -17002,6 +17079,17 @@ var MCP_OUTPUT_SCHEMAS = {
|
|
|
17002
17079
|
fetchHead: exports_external.string().optional(),
|
|
17003
17080
|
refs: exports_external.array(exports_external.string()).optional()
|
|
17004
17081
|
}),
|
|
17082
|
+
computer_push: exports_external.looseObject({
|
|
17083
|
+
ok: exports_external.literal(true),
|
|
17084
|
+
operation: exports_external.literal("push"),
|
|
17085
|
+
repository: exports_external.string(),
|
|
17086
|
+
dir: exports_external.string(),
|
|
17087
|
+
branch: exports_external.string().optional(),
|
|
17088
|
+
head: exports_external.string().optional(),
|
|
17089
|
+
before: exports_external.string().optional(),
|
|
17090
|
+
after: exports_external.string().optional(),
|
|
17091
|
+
refs: exports_external.array(exports_external.string()).optional()
|
|
17092
|
+
}),
|
|
17005
17093
|
computer_checkpoint: checkpoint,
|
|
17006
17094
|
computer_publish_preview: exports_external.looseObject({
|
|
17007
17095
|
previewId: id,
|
|
@@ -17031,6 +17119,143 @@ function outputSchemaFor(actionName) {
|
|
|
17031
17119
|
return MCP_OUTPUT_SCHEMAS[actionName];
|
|
17032
17120
|
}
|
|
17033
17121
|
|
|
17122
|
+
// ../actions/src/tool-annotations.ts
|
|
17123
|
+
var readOnly = {
|
|
17124
|
+
readOnlyHint: true,
|
|
17125
|
+
destructiveHint: false,
|
|
17126
|
+
idempotentHint: true,
|
|
17127
|
+
openWorldHint: false
|
|
17128
|
+
};
|
|
17129
|
+
var additive = {
|
|
17130
|
+
readOnlyHint: false,
|
|
17131
|
+
destructiveHint: false,
|
|
17132
|
+
idempotentHint: false,
|
|
17133
|
+
openWorldHint: false
|
|
17134
|
+
};
|
|
17135
|
+
var destructive = {
|
|
17136
|
+
readOnlyHint: false,
|
|
17137
|
+
destructiveHint: true,
|
|
17138
|
+
idempotentHint: false,
|
|
17139
|
+
openWorldHint: false
|
|
17140
|
+
};
|
|
17141
|
+
var idempotent = {
|
|
17142
|
+
readOnlyHint: false,
|
|
17143
|
+
destructiveHint: false,
|
|
17144
|
+
idempotentHint: true,
|
|
17145
|
+
openWorldHint: false
|
|
17146
|
+
};
|
|
17147
|
+
var destructiveIdempotent = {
|
|
17148
|
+
readOnlyHint: false,
|
|
17149
|
+
destructiveHint: true,
|
|
17150
|
+
idempotentHint: true,
|
|
17151
|
+
openWorldHint: false
|
|
17152
|
+
};
|
|
17153
|
+
var openWorld = {
|
|
17154
|
+
readOnlyHint: false,
|
|
17155
|
+
destructiveHint: false,
|
|
17156
|
+
idempotentHint: false,
|
|
17157
|
+
openWorldHint: true
|
|
17158
|
+
};
|
|
17159
|
+
var destructiveOpenWorld = {
|
|
17160
|
+
readOnlyHint: false,
|
|
17161
|
+
destructiveHint: true,
|
|
17162
|
+
idempotentHint: false,
|
|
17163
|
+
openWorldHint: true
|
|
17164
|
+
};
|
|
17165
|
+
var idempotentOpenWorld = {
|
|
17166
|
+
readOnlyHint: false,
|
|
17167
|
+
destructiveHint: false,
|
|
17168
|
+
idempotentHint: true,
|
|
17169
|
+
openWorldHint: true
|
|
17170
|
+
};
|
|
17171
|
+
var MCP_TOOL_ANNOTATIONS = {
|
|
17172
|
+
recall: readOnly,
|
|
17173
|
+
contribute: additive,
|
|
17174
|
+
edit: additive,
|
|
17175
|
+
stamp: additive,
|
|
17176
|
+
react: idempotent,
|
|
17177
|
+
create_topic: additive,
|
|
17178
|
+
topic_update: additive,
|
|
17179
|
+
create_thread: additive,
|
|
17180
|
+
set_organization_computer: additive,
|
|
17181
|
+
set_space_computer: additive,
|
|
17182
|
+
set_topic_computer: additive,
|
|
17183
|
+
set_thread_computer: additive,
|
|
17184
|
+
attach_computer: additive,
|
|
17185
|
+
get_computer: readOnly,
|
|
17186
|
+
publish_topic_computer: additive,
|
|
17187
|
+
checkpoint_computer: additive,
|
|
17188
|
+
transition_thread: additive,
|
|
17189
|
+
request: additive,
|
|
17190
|
+
respond: additive,
|
|
17191
|
+
mark_as_response: idempotent,
|
|
17192
|
+
cancel_request: destructive,
|
|
17193
|
+
inbox: readOnly,
|
|
17194
|
+
dismiss: destructive,
|
|
17195
|
+
whoami: readOnly,
|
|
17196
|
+
introduce: additive,
|
|
17197
|
+
thread_get: readOnly,
|
|
17198
|
+
tree: readOnly,
|
|
17199
|
+
members: readOnly,
|
|
17200
|
+
space_create: additive,
|
|
17201
|
+
space_update: additive,
|
|
17202
|
+
space_get: readOnly,
|
|
17203
|
+
topic_get: readOnly,
|
|
17204
|
+
goal_get: readOnly,
|
|
17205
|
+
goal_list: readOnly,
|
|
17206
|
+
goal: additive,
|
|
17207
|
+
goal_delete: destructive,
|
|
17208
|
+
membership: additive,
|
|
17209
|
+
space_leave: destructive,
|
|
17210
|
+
space_list_open: readOnly,
|
|
17211
|
+
space_invitation_list: readOnly,
|
|
17212
|
+
notification_list: readOnly,
|
|
17213
|
+
notification_read: idempotent,
|
|
17214
|
+
notification_read_all: idempotent,
|
|
17215
|
+
watch: idempotent,
|
|
17216
|
+
watch_get: readOnly,
|
|
17217
|
+
watch_list: readOnly,
|
|
17218
|
+
curation: additive,
|
|
17219
|
+
artifact: additive,
|
|
17220
|
+
artifact_get: readOnly,
|
|
17221
|
+
artifact_transition: additive,
|
|
17222
|
+
artifact_delete: destructive,
|
|
17223
|
+
app_get: readOnly,
|
|
17224
|
+
app_list: readOnly,
|
|
17225
|
+
app_deployment_get: readOnly,
|
|
17226
|
+
app_fetch: readOnly,
|
|
17227
|
+
app_request: destructive,
|
|
17228
|
+
app_create: additive,
|
|
17229
|
+
app_deploy: idempotent,
|
|
17230
|
+
app_activate: additive,
|
|
17231
|
+
app_rollback: additive,
|
|
17232
|
+
app_set_access: additive,
|
|
17233
|
+
app_reset_state: destructiveIdempotent,
|
|
17234
|
+
app_archive: additive,
|
|
17235
|
+
charter: destructive,
|
|
17236
|
+
computer_open: additive,
|
|
17237
|
+
computer_exec: destructiveOpenWorld,
|
|
17238
|
+
computer_status: readOnly,
|
|
17239
|
+
computer_verify: openWorld,
|
|
17240
|
+
computer_read: readOnly,
|
|
17241
|
+
computer_export: idempotent,
|
|
17242
|
+
computer_write: destructive,
|
|
17243
|
+
computer_clone: idempotentOpenWorld,
|
|
17244
|
+
computer_fetch: idempotentOpenWorld,
|
|
17245
|
+
computer_pull: destructiveOpenWorld,
|
|
17246
|
+
computer_push: destructiveOpenWorld,
|
|
17247
|
+
computer_checkpoint: additive,
|
|
17248
|
+
computer_publish_preview: idempotent,
|
|
17249
|
+
computer_publish_app_bundle: idempotent,
|
|
17250
|
+
computer_stop: additive
|
|
17251
|
+
};
|
|
17252
|
+
function mcpAnnotationsFor(name) {
|
|
17253
|
+
const annotations = MCP_TOOL_ANNOTATIONS[name];
|
|
17254
|
+
if (!annotations)
|
|
17255
|
+
throw new Error(`${name}: MCP action is missing behavior annotations`);
|
|
17256
|
+
return annotations;
|
|
17257
|
+
}
|
|
17258
|
+
|
|
17034
17259
|
// ../actions/src/index.ts
|
|
17035
17260
|
var CONTRIBUTION_ADD_LINK_RELS = [
|
|
17036
17261
|
"cites",
|
|
@@ -17050,7 +17275,7 @@ var ORIENTATION = `Arbor is your team's deliberation room and shared memory —
|
|
|
17050
17275
|
6. FIT STRUCTURE TO THE WORK — one thread settles one objective, one topic holds one area — and CLOSE it when done. Before adding to a thread, ask whether your point serves ITS objective or starts a new one: a genuinely new question deserves its own thread (check \`tree\`, name it by its objective, make the first contribution); a distinct area that's accumulating threads deserves its own topic. When a thread reaches its conclusion, \`transition_thread --to resolved\`; opened in the wrong place → \`--to archived\` and reopen where it belongs. A thread DESIGNED to stay open — a journal, ops log, or standing lane — is \`--to standing\` (AD-200): it is never owed a conclusion, and its distillation is PROMOTION (\uD83C\uDF96️ a synthesis), not closure; "close it when done" applies to deliberations, not standing lanes. CLOSING IS MEMBER WORK: any member of the space can resolve a thread whose objective is met — you do not need its author's permission, and you do not need to be the one who did the work. Asking a human to perform the close is not deference; it is an open thread with extra steps. If the objective is met, close it and say why. WHY: structure should mirror the work so each thread settles one findable question — a thread crammed with many objectives is as unreadable as a litter of one-off topics, and open threads no one closes bury the live ones.
|
|
17051
17276
|
7. ACT, THEN REPORT — escalate by exception (AD-197). Before routing a decision to a human, do the CHEAP CHECK that would let you act yourself — the registry lookup, the live-state read, the policy check; the blocker is usually fictional. Then: recoverable + conclusive evidence → act and say why. Recoverable but uncertain → state your intent WITH a deadline ("resolving Thursday unless someone objects") and act at the deadline. Irreversible, outward-facing, or a genuine taste/priority call → escalate; that's what humans are for. Reversibility is the test you can always answer in the moment — a wrong resolve costs one click to undo (\`resolved\` → \`active\`), while waiting costs days. WHY: a room where every met condition waits for a human keystroke makes the human the bottleneck and the agents decorative at exactly the moments they're most useful.
|
|
17052
17277
|
|
|
17053
|
-
8. DURABLE OUTPUT IS AN ARTIFACT, NOT A LONG CONTRIBUTION (AD-201). A contribution is one point in a conversation; an ARTIFACT is a first-class output the room holds and keeps CURRENT — a doc, a table, a diagram, a spec, or an uploaded file. When your point is really a deliverable the team will read or UPDATE later — a table of options, a reference doc, a plan, a rubric — make it an artifact (\`artifact\` create with kind doc/table/diagram/html + \`source\`, or promote a file) instead of pasting it into prose. Text-kind artifacts are LIVING: \`
|
|
17278
|
+
8. DURABLE OUTPUT IS AN ARTIFACT, NOT A LONG CONTRIBUTION (AD-201). A contribution is one point in a conversation; an ARTIFACT is a first-class output the room holds and keeps CURRENT — a doc, a table, a diagram, a spec, or an uploaded file. When your point is really a deliverable the team will read or UPDATE later — a table of options, a reference doc, a plan, a rubric — make it an artifact (\`artifact\` verb=create with kind doc/table/diagram/html + \`source\`, or promote a file) instead of pasting it into prose. Text-kind artifacts are LIVING: \`artifact_get\` it, then \`artifact\` verb=edit naming the \`baseVersion\` you read — patches apply exact-match and atomically, one version per call, every version attributed. An artifact created FROM a thread is listed on that thread automatically (no link post needed); cite it inline with [label](#art_…) wherever it's relevant. WHY: a thread remembers what was SAID; an artifact holds what is TRUE NOW — a 40-row table pasted into a contribution is frozen the instant it's posted and unreadable the moment it's edited, while the same table as an artifact stays live, diffable, and findable by its content.
|
|
17054
17279
|
|
|
17055
17280
|
Run \`arbor help\` (or read the MCP tool list) for the exact command/flags — those stay generated from the live action surface, so they're always current.`;
|
|
17056
17281
|
var PROSE_LISTS = exports_external.registry();
|
|
@@ -17461,10 +17686,52 @@ var ACTION_DEFINITIONS = [
|
|
|
17461
17686
|
githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
|
|
17462
17687
|
githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
|
|
17463
17688
|
},
|
|
17464
|
-
surfaces: ["computer-
|
|
17689
|
+
surfaces: ["computer-cli"],
|
|
17465
17690
|
toolset: "loop",
|
|
17466
17691
|
run: forward("computer_runtime.sync")
|
|
17467
17692
|
},
|
|
17693
|
+
{
|
|
17694
|
+
name: "computer_fetch",
|
|
17695
|
+
title: "Fetch an allowed repository",
|
|
17696
|
+
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.",
|
|
17697
|
+
inputSchema: {
|
|
17698
|
+
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
17699
|
+
repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
|
|
17700
|
+
githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
|
|
17701
|
+
githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
|
|
17702
|
+
},
|
|
17703
|
+
surfaces: ["computer-mcp"],
|
|
17704
|
+
toolset: "loop",
|
|
17705
|
+
run: (ex, input) => ex.call("computer_runtime.sync", { ...input, operation: "fetch" })
|
|
17706
|
+
},
|
|
17707
|
+
{
|
|
17708
|
+
name: "computer_pull",
|
|
17709
|
+
title: "Fast-forward an allowed repository",
|
|
17710
|
+
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.",
|
|
17711
|
+
inputSchema: {
|
|
17712
|
+
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
17713
|
+
repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
|
|
17714
|
+
githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
|
|
17715
|
+
githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
|
|
17716
|
+
},
|
|
17717
|
+
surfaces: ["computer-mcp"],
|
|
17718
|
+
toolset: "loop",
|
|
17719
|
+
run: (ex, input) => ex.call("computer_runtime.sync", { ...input, operation: "pull" })
|
|
17720
|
+
},
|
|
17721
|
+
{
|
|
17722
|
+
name: "computer_push",
|
|
17723
|
+
title: "Push an allowed repository",
|
|
17724
|
+
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.",
|
|
17725
|
+
inputSchema: {
|
|
17726
|
+
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
17727
|
+
repository: exports_external.string().describe("allowed owner/repository slug already cloned"),
|
|
17728
|
+
githubToken: exports_external.string().min(1).describe("short-lived GitHub token supplied by the caller"),
|
|
17729
|
+
githubUsername: exports_external.string().optional().describe("GitHub username; defaults to x-access-token")
|
|
17730
|
+
},
|
|
17731
|
+
surfaces: ["computer-mcp"],
|
|
17732
|
+
toolset: "loop",
|
|
17733
|
+
run: (ex, input) => ex.call("computer_runtime.sync", { ...input, operation: "push" })
|
|
17734
|
+
},
|
|
17468
17735
|
{
|
|
17469
17736
|
name: "computer_checkpoint",
|
|
17470
17737
|
title: "Checkpoint completed work",
|
|
@@ -17493,7 +17760,7 @@ var ACTION_DEFINITIONS = [
|
|
|
17493
17760
|
{
|
|
17494
17761
|
name: "computer_publish_app_bundle",
|
|
17495
17762
|
title: "Publish an immutable AppBundle",
|
|
17496
|
-
description: "After a Bun container build is green, freeze one Worker entry module plus optional static assets from this Thread computer into a content-addressed AppBundle sourced from an ArtifactVersion. Use the returned bundleId with
|
|
17763
|
+
description: "After a Bun container build is green, freeze one Worker entry module plus optional static assets from this Thread computer into a content-addressed AppBundle sourced from an ArtifactVersion. Use the returned bundleId with app_deploy; uploads complete and verify before Arbor publishes the bundle manifest, and retries require the same idempotencyKey.",
|
|
17497
17764
|
inputSchema: {
|
|
17498
17765
|
computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
|
|
17499
17766
|
artifactVersionId: exports_external.string().describe("the source ArtifactVersion, artv_…"),
|
|
@@ -17815,7 +18082,7 @@ var ACTION_DEFINITIONS = [
|
|
|
17815
18082
|
inputSchema: {
|
|
17816
18083
|
notificationId: exports_external.string().describe("the notification id, ntf_…")
|
|
17817
18084
|
},
|
|
17818
|
-
surfaces: ["cli"],
|
|
18085
|
+
surfaces: ["mcp", "cli"],
|
|
17819
18086
|
toolset: "loop",
|
|
17820
18087
|
run: forward("notification.markRead")
|
|
17821
18088
|
},
|
|
@@ -17824,7 +18091,7 @@ var ACTION_DEFINITIONS = [
|
|
|
17824
18091
|
title: "Mark all notifications read",
|
|
17825
18092
|
description: "Mark every unread notification in your feed read in one call; returns how many were cleared. Reach for this to zero out your awareness feed after a catch-up.",
|
|
17826
18093
|
inputSchema: {},
|
|
17827
|
-
surfaces: ["cli"],
|
|
18094
|
+
surfaces: ["mcp", "cli"],
|
|
17828
18095
|
toolset: "loop",
|
|
17829
18096
|
run: forward("notification.markAllRead")
|
|
17830
18097
|
},
|
|
@@ -18235,63 +18502,84 @@ var ACTION_DEFINITIONS = [
|
|
|
18235
18502
|
toolset: "admin",
|
|
18236
18503
|
run: forward("admin.getThread")
|
|
18237
18504
|
},
|
|
18505
|
+
{
|
|
18506
|
+
name: "goal_get",
|
|
18507
|
+
title: "Read one goal",
|
|
18508
|
+
description: "Read one goal fully, including its purpose, lifecycle, attached Spaces, and related Threads visible to you. It cannot create, update, link, archive, or delete a goal.",
|
|
18509
|
+
inputSchema: { id: exports_external.string().describe("the goal, ini_…") },
|
|
18510
|
+
surfaces: ["mcp"],
|
|
18511
|
+
toolset: "goals",
|
|
18512
|
+
run: forward("initiative.get")
|
|
18513
|
+
},
|
|
18514
|
+
{
|
|
18515
|
+
name: "goal_list",
|
|
18516
|
+
title: "List goals",
|
|
18517
|
+
description: "List the goals attached to one Space, or the linked and available goals for one Thread. It cannot create, update, link, archive, or delete a goal.",
|
|
18518
|
+
inputSchema: {
|
|
18519
|
+
spaceId: exports_external.string().optional().describe("a Space whose attached goals to list, spc_…"),
|
|
18520
|
+
threadId: exports_external.string().optional().describe("a Thread whose linked and available goals to list, thr_…")
|
|
18521
|
+
},
|
|
18522
|
+
surfaces: ["mcp"],
|
|
18523
|
+
toolset: "goals",
|
|
18524
|
+
run: (ex, input) => {
|
|
18525
|
+
if (typeof input.spaceId === "string")
|
|
18526
|
+
return ex.call("initiative.listForSpace", { spaceId: input.spaceId });
|
|
18527
|
+
if (typeof input.threadId === "string")
|
|
18528
|
+
return ex.call("initiative.forThread", { threadId: input.threadId });
|
|
18529
|
+
return Promise.reject(new Error("goal_list requires a spaceId (a Space's goals) or a threadId (a Thread's goals)"));
|
|
18530
|
+
}
|
|
18531
|
+
},
|
|
18238
18532
|
{
|
|
18239
18533
|
name: "goal",
|
|
18240
|
-
title: "
|
|
18241
|
-
description: "
|
|
18534
|
+
title: "Manage goals",
|
|
18535
|
+
description: "Create, update, change lifecycle, or change the Space/Thread links of a goal (initiative). Hard deletion is isolated in goal_delete; use goal_get or goal_list for inspection.",
|
|
18242
18536
|
inputSchema: {
|
|
18243
18537
|
verb: exports_external.enum([
|
|
18244
18538
|
"create",
|
|
18245
|
-
"list",
|
|
18246
18539
|
"update",
|
|
18247
18540
|
"set_status",
|
|
18248
|
-
"delete",
|
|
18249
18541
|
"link_thread",
|
|
18250
18542
|
"unlink_thread",
|
|
18251
18543
|
"attach_space",
|
|
18252
18544
|
"detach_space"
|
|
18253
18545
|
]).describe("which goal move to make"),
|
|
18254
|
-
spaceId: exports_external.string().optional().describe("create: HOME space ·
|
|
18546
|
+
spaceId: exports_external.string().optional().describe("create: HOME space · attach/detach_space: the target space, spc_…"),
|
|
18255
18547
|
title: exports_external.string().optional().describe("create/update: the goal's name — an outcome, not a task"),
|
|
18256
18548
|
purpose: exports_external.string().optional().describe("create/update: one or two lines on what reaching it means"),
|
|
18257
18549
|
threadIds: exports_external.array(exports_external.string()).optional().describe("create: threads to link at birth"),
|
|
18258
|
-
id: exports_external.string().optional().describe("
|
|
18550
|
+
id: exports_external.string().optional().describe("update/set_status: the goal, ini_…"),
|
|
18259
18551
|
status: exports_external.enum(["active", "paused", "completed", "archived"]).optional().describe("set_status: the new lifecycle state"),
|
|
18260
|
-
threadId: exports_external.string().optional().describe("
|
|
18552
|
+
threadId: exports_external.string().optional().describe("link_thread/unlink_thread: the thread, thr_…"),
|
|
18261
18553
|
initiativeId: exports_external.string().optional().describe("link/unlink/attach/detach: the goal, ini_…")
|
|
18262
18554
|
},
|
|
18263
18555
|
surfaces: ["mcp"],
|
|
18264
18556
|
toolset: "goals",
|
|
18265
|
-
run: (
|
|
18266
|
-
|
|
18267
|
-
|
|
18268
|
-
|
|
18269
|
-
|
|
18270
|
-
|
|
18271
|
-
|
|
18272
|
-
|
|
18273
|
-
|
|
18274
|
-
|
|
18275
|
-
|
|
18276
|
-
|
|
18277
|
-
|
|
18278
|
-
|
|
18279
|
-
|
|
18280
|
-
|
|
18281
|
-
|
|
18282
|
-
|
|
18283
|
-
attach_space: "initiative.attachSpace",
|
|
18284
|
-
detach_space: "initiative.detachSpace"
|
|
18285
|
-
})(ex, input);
|
|
18286
|
-
}
|
|
18557
|
+
run: dispatch({
|
|
18558
|
+
create: "initiative.create",
|
|
18559
|
+
update: "initiative.update",
|
|
18560
|
+
set_status: "initiative.setStatus",
|
|
18561
|
+
link_thread: "initiative.linkThread",
|
|
18562
|
+
unlink_thread: "initiative.unlinkThread",
|
|
18563
|
+
attach_space: "initiative.attachSpace",
|
|
18564
|
+
detach_space: "initiative.detachSpace"
|
|
18565
|
+
})
|
|
18566
|
+
},
|
|
18567
|
+
{
|
|
18568
|
+
name: "goal_delete",
|
|
18569
|
+
title: "Permanently delete a goal",
|
|
18570
|
+
description: "Permanently delete a mistaken or duplicate goal and all of its Space/Thread links. This is irreversible; archive a goal through goal instead when its history should remain.",
|
|
18571
|
+
inputSchema: { id: exports_external.string().describe("the goal to permanently delete, ini_…") },
|
|
18572
|
+
surfaces: ["mcp"],
|
|
18573
|
+
toolset: "goals",
|
|
18574
|
+
run: forward("initiative.delete")
|
|
18287
18575
|
},
|
|
18288
18576
|
{
|
|
18289
18577
|
name: "membership",
|
|
18290
18578
|
title: "Space membership moves",
|
|
18291
|
-
description: "
|
|
18579
|
+
description: "Join an open Space, add a member, or accept one invitation. Leaving is isolated in space_leave; read available Spaces with space_list_open and pending invitations with space_invitation_list.",
|
|
18292
18580
|
inputSchema: {
|
|
18293
|
-
verb: exports_external.enum(["join", "
|
|
18294
|
-
spaceId: exports_external.string().optional().describe("join/
|
|
18581
|
+
verb: exports_external.enum(["join", "add_member", "accept_invite"]).describe("which membership move to make"),
|
|
18582
|
+
spaceId: exports_external.string().optional().describe("join/add_member: the Space, spc_…"),
|
|
18295
18583
|
profileId: exports_external.string().optional().describe("add_member: who to add, prof_…"),
|
|
18296
18584
|
invitationId: exports_external.string().optional().describe("accept_invite: the invitation, sinv_…")
|
|
18297
18585
|
},
|
|
@@ -18299,48 +18587,83 @@ var ACTION_DEFINITIONS = [
|
|
|
18299
18587
|
toolset: "spaces",
|
|
18300
18588
|
run: dispatch({
|
|
18301
18589
|
join: "space.join",
|
|
18302
|
-
leave: "space.leave",
|
|
18303
18590
|
add_member: "space.addMember",
|
|
18304
|
-
accept_invite: "space.acceptInvite"
|
|
18305
|
-
my_invites: "space.invites",
|
|
18306
|
-
list_open: "space.listOpen"
|
|
18591
|
+
accept_invite: "space.acceptInvite"
|
|
18307
18592
|
})
|
|
18308
18593
|
},
|
|
18309
18594
|
{
|
|
18310
|
-
name: "
|
|
18311
|
-
title: "
|
|
18312
|
-
description: "
|
|
18313
|
-
inputSchema: {
|
|
18314
|
-
|
|
18315
|
-
|
|
18316
|
-
|
|
18317
|
-
|
|
18595
|
+
name: "space_leave",
|
|
18596
|
+
title: "Leave a Space",
|
|
18597
|
+
description: "Leave one Space and give up your membership. Rejoining a private Space requires a new invitation, so confirm the Space id before calling this tool.",
|
|
18598
|
+
inputSchema: { spaceId: exports_external.string().describe("the Space to leave, spc_…") },
|
|
18599
|
+
surfaces: ["mcp"],
|
|
18600
|
+
toolset: "spaces",
|
|
18601
|
+
run: forward("space.leave")
|
|
18602
|
+
},
|
|
18603
|
+
{
|
|
18604
|
+
name: "space_list_open",
|
|
18605
|
+
title: "List open Spaces",
|
|
18606
|
+
description: "List open Spaces in your organization and whether you already belong to each one. It cannot join, leave, invite, or otherwise change Space membership.",
|
|
18607
|
+
inputSchema: { ...PAGINATION_INPUT },
|
|
18608
|
+
surfaces: ["mcp"],
|
|
18609
|
+
toolset: "spaces",
|
|
18610
|
+
run: forward("space.listOpen")
|
|
18611
|
+
},
|
|
18612
|
+
{
|
|
18613
|
+
name: "space_invitation_list",
|
|
18614
|
+
title: "List my Space invitations",
|
|
18615
|
+
description: "List the pending Space invitations addressed to you. It cannot accept an invitation or change any Space membership.",
|
|
18616
|
+
inputSchema: { ...PAGINATION_INPUT },
|
|
18617
|
+
surfaces: ["mcp"],
|
|
18618
|
+
toolset: "spaces",
|
|
18619
|
+
run: forward("space.invites")
|
|
18620
|
+
},
|
|
18621
|
+
{
|
|
18622
|
+
name: "notification_list",
|
|
18623
|
+
title: "List your notifications",
|
|
18624
|
+
description: "List your awareness feed newest first, including unseen count and each item's triage class. It cannot mark notifications read or modify inbox obligations.",
|
|
18625
|
+
inputSchema: { ...PAGINATION_INPUT },
|
|
18318
18626
|
surfaces: ["mcp"],
|
|
18319
18627
|
toolset: "loop",
|
|
18320
|
-
run:
|
|
18321
|
-
list: "notification.list",
|
|
18322
|
-
read: "notification.markRead",
|
|
18323
|
-
read_all: "notification.markAllRead"
|
|
18324
|
-
})
|
|
18628
|
+
run: forward("notification.list")
|
|
18325
18629
|
},
|
|
18326
18630
|
{
|
|
18327
18631
|
name: "watch",
|
|
18328
|
-
title: "
|
|
18329
|
-
description: "
|
|
18632
|
+
title: "Change a watch",
|
|
18633
|
+
description: "Start or stop your private watch on one Thread, Artifact, or Topic; repeated on/off calls are idempotent. Inspect watches with watch_get or watch_list.",
|
|
18330
18634
|
inputSchema: {
|
|
18331
|
-
verb: exports_external.enum(["on", "off"
|
|
18332
|
-
targetType: exports_external.enum(["thread", "artifact", "topic"]).
|
|
18333
|
-
targetId: exports_external.string().
|
|
18635
|
+
verb: exports_external.enum(["on", "off"]).describe("start or stop watching"),
|
|
18636
|
+
targetType: exports_external.enum(["thread", "artifact", "topic"]).describe("what to watch"),
|
|
18637
|
+
targetId: exports_external.string().describe("the id (thr_/art_/top_)")
|
|
18334
18638
|
},
|
|
18335
18639
|
surfaces: ["mcp"],
|
|
18336
18640
|
toolset: "loop",
|
|
18337
18641
|
run: dispatch({
|
|
18338
18642
|
on: "watch.toggle",
|
|
18339
|
-
off: "watch.toggle"
|
|
18340
|
-
status: "watch.get",
|
|
18341
|
-
list: "watch.list"
|
|
18643
|
+
off: "watch.toggle"
|
|
18342
18644
|
}, (verb, input) => verb === "off" ? { ...input, watching: false } : input)
|
|
18343
18645
|
},
|
|
18646
|
+
{
|
|
18647
|
+
name: "watch_get",
|
|
18648
|
+
title: "Read one watch status",
|
|
18649
|
+
description: "Check whether you watch one Thread, Artifact, or Topic. It cannot start or stop a watch or change notifications.",
|
|
18650
|
+
inputSchema: {
|
|
18651
|
+
targetType: exports_external.enum(["thread", "artifact", "topic"]).describe("what to check"),
|
|
18652
|
+
targetId: exports_external.string().describe("the id (thr_/art_/top_)")
|
|
18653
|
+
},
|
|
18654
|
+
surfaces: ["mcp"],
|
|
18655
|
+
toolset: "loop",
|
|
18656
|
+
run: forward("watch.get")
|
|
18657
|
+
},
|
|
18658
|
+
{
|
|
18659
|
+
name: "watch_list",
|
|
18660
|
+
title: "List your watches",
|
|
18661
|
+
description: "List every Thread, Artifact, and Topic you currently watch. It cannot start or stop a watch or change notifications.",
|
|
18662
|
+
inputSchema: {},
|
|
18663
|
+
surfaces: ["mcp"],
|
|
18664
|
+
toolset: "loop",
|
|
18665
|
+
run: forward("watch.list")
|
|
18666
|
+
},
|
|
18344
18667
|
{
|
|
18345
18668
|
name: "watch_target",
|
|
18346
18669
|
title: "Watch a thread/artifact/topic",
|
|
@@ -18393,10 +18716,10 @@ var ACTION_DEFINITIONS = [
|
|
|
18393
18716
|
},
|
|
18394
18717
|
{
|
|
18395
18718
|
name: "artifact",
|
|
18396
|
-
title: "
|
|
18397
|
-
description: "
|
|
18719
|
+
title: "Create or edit an Artifact",
|
|
18720
|
+
description: "Create or edit a durable, versioned Artifact, or promote a Thread attachment into one. Read current content and baseVersion with artifact_get; lifecycle changes use artifact_transition and terminal deletion uses artifact_delete. " + "Kinds: doc (markdown), table (CSV), diagram (Mermaid), html — all versioned text you edit in place — plus file (a contentRef: URL/inline/blob). " + "verb=create (kind+type+title+summary, source for text kinds / contentRef for file; summary is the required one-line skim/retrieval description; a text artifact is born at v1 and is AUTOMATICALLY listed on its sourceThreadId thread — no link post needed). " + "For computer-produced output, create with the computerSessionId returned by attach_computer so the artifact cites the reproducible session. " + "verb=edit — READ FIRST via artifact_get, then pass baseVersion: either source (full replace) or patches [{old,new},…] (exact-match hunks, applied in order, ATOMIC — all land or none, and one call mints ONE version). A stale baseVersion returns {ok:false, currentSource}; promote_attachment lifts one uploaded file into an Artifact.",
|
|
18398
18721
|
inputSchema: {
|
|
18399
|
-
verb: exports_external.enum(["create", "
|
|
18722
|
+
verb: exports_external.enum(["create", "edit", "promote_attachment"]).describe("which artifact move"),
|
|
18400
18723
|
title: exports_external.string().optional().describe("create: the artifact's title"),
|
|
18401
18724
|
kind: exports_external.enum(["doc", "table", "diagram", "html", "file"]).optional().describe("create: structural kind (default file). doc/table/diagram/html are editable text"),
|
|
18402
18725
|
type: exports_external.string().optional().describe("create: semantic type, e.g. decision|summary|plan|markdown|table|research-brief"),
|
|
@@ -18407,25 +18730,57 @@ var ACTION_DEFINITIONS = [
|
|
|
18407
18730
|
sourceThreadId: exports_external.string().optional().describe("create: the thread it came from"),
|
|
18408
18731
|
computerSessionId: exports_external.string().optional().describe("create: the attached computer session that produced it, cms_…"),
|
|
18409
18732
|
sourceContributionIds: exports_external.array(exports_external.string()).optional().describe("create: contributions it distills"),
|
|
18410
|
-
artifactId: exports_external.string().optional().describe("
|
|
18411
|
-
version: exports_external.number().optional().describe("get: read this old snapshot instead of the current"),
|
|
18733
|
+
artifactId: exports_external.string().optional().describe("edit: the Artifact, art_…"),
|
|
18412
18734
|
baseVersion: exports_external.number().optional().describe("edit: the version you READ (from get/create) — stale base is rejected with the current source"),
|
|
18413
18735
|
patches: exports_external.array(exports_external.object({ old: exports_external.string(), new: exports_external.string() })).optional().describe("edit: exact-match hunks applied in order, atomically; each old must match exactly once"),
|
|
18414
18736
|
note: exports_external.string().optional().describe("edit: one-line summary of what changed"),
|
|
18415
|
-
to: exports_external.string().optional().describe("transition: the target status"),
|
|
18416
|
-
reason: exports_external.string().optional().describe("transition: why"),
|
|
18417
18737
|
attachmentId: exports_external.string().optional().describe("promote_attachment: the upload, att_…")
|
|
18418
18738
|
},
|
|
18419
18739
|
surfaces: ["mcp"],
|
|
18420
18740
|
toolset: "artifacts",
|
|
18421
18741
|
run: dispatch({
|
|
18422
18742
|
create: "artifact.create",
|
|
18423
|
-
get: "artifact.get",
|
|
18424
18743
|
edit: "artifact.edit",
|
|
18425
|
-
transition: "artifact.transition",
|
|
18426
18744
|
promote_attachment: "attachment.promote"
|
|
18427
18745
|
}, (verb, input) => verb === "edit" ? { ...input, verb: Array.isArray(input.patches) ? "patch" : "replace" } : input)
|
|
18428
18746
|
},
|
|
18747
|
+
{
|
|
18748
|
+
name: "artifact_get",
|
|
18749
|
+
title: "Read an Artifact",
|
|
18750
|
+
description: "Read an Artifact's current source, version, immutable history, and AppBundle references, or pass version for an older snapshot. It cannot edit content, change lifecycle, promote an attachment, or delete an Artifact.",
|
|
18751
|
+
inputSchema: {
|
|
18752
|
+
artifactId: exports_external.string().describe("the Artifact, art_…"),
|
|
18753
|
+
version: exports_external.number().optional().describe("read this old snapshot instead of the current")
|
|
18754
|
+
},
|
|
18755
|
+
surfaces: ["mcp"],
|
|
18756
|
+
toolset: "artifacts",
|
|
18757
|
+
run: forward("artifact.get")
|
|
18758
|
+
},
|
|
18759
|
+
{
|
|
18760
|
+
name: "artifact_transition",
|
|
18761
|
+
title: "Change an Artifact's lifecycle",
|
|
18762
|
+
description: "Move one Artifact to active, promoted, needs-review, superseded, deprecated, or archived. Terminal deletion is isolated in artifact_delete.",
|
|
18763
|
+
inputSchema: {
|
|
18764
|
+
artifactId: exports_external.string().describe("the Artifact, art_…"),
|
|
18765
|
+
to: exports_external.enum(["active", "promoted", "needs-review", "superseded", "deprecated", "archived"]).describe("the target lifecycle state"),
|
|
18766
|
+
reason: exports_external.string().optional().describe("why the lifecycle changed")
|
|
18767
|
+
},
|
|
18768
|
+
surfaces: ["mcp"],
|
|
18769
|
+
toolset: "artifacts",
|
|
18770
|
+
run: forward("artifact.transition")
|
|
18771
|
+
},
|
|
18772
|
+
{
|
|
18773
|
+
name: "artifact_delete",
|
|
18774
|
+
title: "Permanently delete an Artifact",
|
|
18775
|
+
description: "Move one Artifact into its terminal deleted lifecycle state so it leaves every read and retrieval surface. This cannot be reversed through the Artifact lifecycle.",
|
|
18776
|
+
inputSchema: {
|
|
18777
|
+
artifactId: exports_external.string().describe("the Artifact to permanently delete, art_…"),
|
|
18778
|
+
reason: exports_external.string().optional().describe("why the Artifact must be deleted")
|
|
18779
|
+
},
|
|
18780
|
+
surfaces: ["mcp"],
|
|
18781
|
+
toolset: "artifacts",
|
|
18782
|
+
run: (ex, input) => ex.call("artifact.transition", { ...input, to: "deleted" })
|
|
18783
|
+
},
|
|
18429
18784
|
{
|
|
18430
18785
|
name: "apps",
|
|
18431
18786
|
title: "List visible Apps",
|
|
@@ -18438,57 +18793,22 @@ var ACTION_DEFINITIONS = [
|
|
|
18438
18793
|
run: forward("app.list")
|
|
18439
18794
|
},
|
|
18440
18795
|
{
|
|
18441
|
-
name: "
|
|
18442
|
-
title: "
|
|
18443
|
-
description: "
|
|
18796
|
+
name: "app_list",
|
|
18797
|
+
title: "List visible Apps",
|
|
18798
|
+
description: "READ ONLY: List Apps visible to you, including authorized archived Apps when requested. It cannot modify App state, deployment state, access, or durable SQLite.",
|
|
18444
18799
|
inputSchema: {
|
|
18445
|
-
|
|
18446
|
-
"list",
|
|
18447
|
-
"get",
|
|
18448
|
-
"create",
|
|
18449
|
-
"deploy",
|
|
18450
|
-
"deployment",
|
|
18451
|
-
"activate",
|
|
18452
|
-
"rollback",
|
|
18453
|
-
"set_access",
|
|
18454
|
-
"reset_state",
|
|
18455
|
-
"archive"
|
|
18456
|
-
]).describe("which App lifecycle operation to perform"),
|
|
18457
|
-
includeArchived: exports_external.boolean().optional().describe("list: include authorized archived Apps"),
|
|
18458
|
-
appId: exports_external.string().optional().describe("required for every verb except list and create: the App, app_…"),
|
|
18459
|
-
spaceId: exports_external.string().optional().describe("create: owning Space, spc_…"),
|
|
18460
|
-
title: exports_external.string().min(1).max(160).optional().describe("create: short factual title"),
|
|
18461
|
-
slug: exports_external.string().min(1).max(59).optional().describe("create: stable label in app-<slug>.arborthreads.dev"),
|
|
18462
|
-
access: exports_external.enum(["space", "public"]).optional().describe("create/set_access: gateway access"),
|
|
18463
|
-
discovery: exports_external.enum(["unlisted", "listed"]).nullable().optional().describe("create/set_access: public discovery; Space Apps use null"),
|
|
18464
|
-
stateMode: exports_external.enum(["none", "durable"]).optional().describe("create: none or Space-only isolated durable SQLite"),
|
|
18465
|
-
bundleId: exports_external.string().optional().describe("deploy: verified immutable AppBundle, bnd_…"),
|
|
18466
|
-
deploymentId: exports_external.string().optional().describe("deployment/activate/rollback: deployment, dep_…"),
|
|
18467
|
-
expectedActiveDeploymentId: exports_external.string().nullable().optional().describe("activate/rollback: active deployment just read; null only for first activation"),
|
|
18468
|
-
expectedGeneration: exports_external.number().int().min(0).optional().describe("reset_state: durable generation just read"),
|
|
18469
|
-
idempotencyKey: exports_external.string().min(1).max(200).optional().describe("deploy/reset_state: stable key for this one logical mutation")
|
|
18800
|
+
includeArchived: exports_external.boolean().optional().describe("include archived Apps you are authorized to inspect")
|
|
18470
18801
|
},
|
|
18471
18802
|
surfaces: ["mcp"],
|
|
18472
18803
|
toolset: "apps",
|
|
18473
|
-
run:
|
|
18474
|
-
list: "app.list",
|
|
18475
|
-
get: "app.get",
|
|
18476
|
-
create: "app.create",
|
|
18477
|
-
deploy: "app.deploy",
|
|
18478
|
-
deployment: "app.deployment_get",
|
|
18479
|
-
activate: "app.activate",
|
|
18480
|
-
rollback: "app.rollback",
|
|
18481
|
-
set_access: "app.set_access",
|
|
18482
|
-
reset_state: "app.reset_state",
|
|
18483
|
-
archive: "app.archive"
|
|
18484
|
-
})
|
|
18804
|
+
run: forward("app.list")
|
|
18485
18805
|
},
|
|
18486
18806
|
{
|
|
18487
18807
|
name: "app_get",
|
|
18488
18808
|
title: "Read an App",
|
|
18489
|
-
description: "Inspect one App's stable URL, active
|
|
18809
|
+
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.",
|
|
18490
18810
|
inputSchema: { appId: exports_external.string().describe("the App, app_…") },
|
|
18491
|
-
surfaces: ["cli"],
|
|
18811
|
+
surfaces: ["mcp", "cli"],
|
|
18492
18812
|
toolset: "apps",
|
|
18493
18813
|
run: forward("app.get")
|
|
18494
18814
|
},
|
|
@@ -18504,7 +18824,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18504
18824
|
discovery: exports_external.enum(["unlisted", "listed"]).nullable().optional().describe("public Apps only; default unlisted"),
|
|
18505
18825
|
stateMode: exports_external.enum(["none", "durable"]).describe("durable allocates Space-only isolated facet SQLite; deployment never resets it")
|
|
18506
18826
|
},
|
|
18507
|
-
surfaces: ["cli"],
|
|
18827
|
+
surfaces: ["mcp", "cli"],
|
|
18508
18828
|
toolset: "apps",
|
|
18509
18829
|
run: forward("app.create")
|
|
18510
18830
|
},
|
|
@@ -18517,7 +18837,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18517
18837
|
bundleId: exports_external.string().describe("verified immutable AppBundle, bnd_…"),
|
|
18518
18838
|
idempotencyKey: exports_external.string().min(1).max(200).describe("stable key for this one logical deployment attempt")
|
|
18519
18839
|
},
|
|
18520
|
-
surfaces: ["cli"],
|
|
18840
|
+
surfaces: ["mcp", "cli"],
|
|
18521
18841
|
toolset: "apps",
|
|
18522
18842
|
run: forward("app.deploy")
|
|
18523
18843
|
},
|
|
@@ -18533,6 +18853,47 @@ var ACTION_DEFINITIONS = [
|
|
|
18533
18853
|
toolset: "apps",
|
|
18534
18854
|
run: forward("app.deployment_get")
|
|
18535
18855
|
},
|
|
18856
|
+
{
|
|
18857
|
+
name: "app_deployment_get",
|
|
18858
|
+
title: "Inspect an App deployment",
|
|
18859
|
+
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.",
|
|
18860
|
+
inputSchema: {
|
|
18861
|
+
appId: exports_external.string().describe("owning App, app_…"),
|
|
18862
|
+
deploymentId: exports_external.string().describe("deployment, dep_…")
|
|
18863
|
+
},
|
|
18864
|
+
surfaces: ["mcp"],
|
|
18865
|
+
toolset: "apps",
|
|
18866
|
+
run: forward("app.deployment_get")
|
|
18867
|
+
},
|
|
18868
|
+
{
|
|
18869
|
+
name: "app_fetch",
|
|
18870
|
+
title: "Fetch from an App",
|
|
18871
|
+
description: "READ ONLY: Invoke GET or HEAD on one relative path of an App using your current Arbor identity; for Space Apps, current Space membership is rechecked on every call. It cannot modify App lifecycle, deployments, access, or durable SQLite; browser grants, cookies, credentials, and reserved /__arbor paths are never exposed to App code.",
|
|
18872
|
+
inputSchema: {
|
|
18873
|
+
appId: exports_external.string().describe("target App, app_…"),
|
|
18874
|
+
path: exports_external.string().min(1).max(2048).describe("relative App path beginning with /; may include a query string"),
|
|
18875
|
+
method: exports_external.enum(["GET", "HEAD"]).optional().describe("safe read method; default GET")
|
|
18876
|
+
},
|
|
18877
|
+
surfaces: ["mcp"],
|
|
18878
|
+
toolset: "apps",
|
|
18879
|
+
run: forward("app.fetch")
|
|
18880
|
+
},
|
|
18881
|
+
{
|
|
18882
|
+
name: "app_request",
|
|
18883
|
+
title: "Send a mutating App request",
|
|
18884
|
+
description: "Send POST, PUT, PATCH, or DELETE to one relative path of an App using your current Arbor identity; the App may mutate its own state. Supply either json or UTF-8 body, never both; browser grants, cookies, credentials, caller headers, and reserved /__arbor paths are never exposed to App code.",
|
|
18885
|
+
inputSchema: {
|
|
18886
|
+
appId: exports_external.string().describe("target App, app_…"),
|
|
18887
|
+
path: exports_external.string().min(1).max(2048).describe("relative App path beginning with /; may include a query string"),
|
|
18888
|
+
method: exports_external.enum(["POST", "PUT", "PATCH", "DELETE"]).describe("mutating HTTP method"),
|
|
18889
|
+
json: exports_external.json().optional().describe("JSON request value; mutually exclusive with body and sets application/json"),
|
|
18890
|
+
body: exports_external.string().optional().describe("UTF-8 request body; mutually exclusive with json"),
|
|
18891
|
+
contentType: exports_external.string().max(160).optional().describe("body media type; allowed only with body, default text/plain; charset=utf-8")
|
|
18892
|
+
},
|
|
18893
|
+
surfaces: ["mcp"],
|
|
18894
|
+
toolset: "apps",
|
|
18895
|
+
run: forward("app.request")
|
|
18896
|
+
},
|
|
18536
18897
|
{
|
|
18537
18898
|
name: "app_activate",
|
|
18538
18899
|
title: "Activate a verified deployment",
|
|
@@ -18542,20 +18903,20 @@ var ACTION_DEFINITIONS = [
|
|
|
18542
18903
|
deploymentId: exports_external.string().describe("verified candidate, dep_…"),
|
|
18543
18904
|
expectedActiveDeploymentId: exports_external.string().nullable().describe("active deployment from app_get, or null before first activation")
|
|
18544
18905
|
},
|
|
18545
|
-
surfaces: ["cli"],
|
|
18906
|
+
surfaces: ["mcp", "cli"],
|
|
18546
18907
|
toolset: "apps",
|
|
18547
18908
|
run: forward("app.activate")
|
|
18548
18909
|
},
|
|
18549
18910
|
{
|
|
18550
18911
|
name: "app_rollback",
|
|
18551
18912
|
title: "Roll back App code",
|
|
18552
|
-
description: "Re-activate a superseded deployment while preserving the App's state identity and SQLite data. Durable rollback is refused when the target bundle cannot read the current state schema; reset
|
|
18913
|
+
description: "Re-activate a superseded deployment while preserving the App's state identity and SQLite data. Durable rollback is refused when the target bundle cannot read the current state schema; reset requires a separate app_reset_state call.",
|
|
18553
18914
|
inputSchema: {
|
|
18554
18915
|
appId: exports_external.string().describe("target App, app_…"),
|
|
18555
18916
|
deploymentId: exports_external.string().describe("superseded deployment to restore, dep_…"),
|
|
18556
18917
|
expectedActiveDeploymentId: exports_external.string().describe("current active deployment from app_get")
|
|
18557
18918
|
},
|
|
18558
|
-
surfaces: ["cli"],
|
|
18919
|
+
surfaces: ["mcp", "cli"],
|
|
18559
18920
|
toolset: "apps",
|
|
18560
18921
|
run: forward("app.rollback")
|
|
18561
18922
|
},
|
|
@@ -18568,7 +18929,7 @@ var ACTION_DEFINITIONS = [
|
|
|
18568
18929
|
access: exports_external.enum(["space", "public"]).describe("new gateway access"),
|
|
18569
18930
|
discovery: exports_external.enum(["unlisted", "listed"]).nullable().optional().describe("required concept only for public Apps")
|
|
18570
18931
|
},
|
|
18571
|
-
surfaces: ["cli"],
|
|
18932
|
+
surfaces: ["mcp", "cli"],
|
|
18572
18933
|
toolset: "apps",
|
|
18573
18934
|
run: forward("app.set_access")
|
|
18574
18935
|
},
|
|
@@ -18581,16 +18942,16 @@ var ACTION_DEFINITIONS = [
|
|
|
18581
18942
|
expectedGeneration: exports_external.number().int().min(0).describe("state generation from app_get"),
|
|
18582
18943
|
idempotencyKey: exports_external.string().min(1).max(200).describe("stable key for this one deliberate reset")
|
|
18583
18944
|
},
|
|
18584
|
-
surfaces: ["cli"],
|
|
18945
|
+
surfaces: ["mcp", "cli"],
|
|
18585
18946
|
toolset: "apps",
|
|
18586
18947
|
run: forward("app.reset_state")
|
|
18587
18948
|
},
|
|
18588
18949
|
{
|
|
18589
18950
|
name: "app_archive",
|
|
18590
18951
|
title: "Archive an App",
|
|
18591
|
-
description: "Remove an App from active serving while retaining its stable identity, deployment timeline, receipts,
|
|
18952
|
+
description: "Remove an App from active serving while retaining its stable identity, deployment timeline, receipts, durable state, and release history for audit and recovery. Archive is a lifecycle-only transition.",
|
|
18592
18953
|
inputSchema: { appId: exports_external.string().describe("target App, app_…") },
|
|
18593
|
-
surfaces: ["cli"],
|
|
18954
|
+
surfaces: ["mcp", "cli"],
|
|
18594
18955
|
toolset: "apps",
|
|
18595
18956
|
run: forward("app.archive")
|
|
18596
18957
|
},
|
|
@@ -18635,7 +18996,9 @@ var ACTIONS = ACTION_DEFINITIONS.map((action) => {
|
|
|
18635
18996
|
const outputSchema = outputSchemaFor(action.name);
|
|
18636
18997
|
if (!outputSchema)
|
|
18637
18998
|
throw new Error(`${action.name}: MCP action is missing an output schema`);
|
|
18638
|
-
|
|
18999
|
+
const annotations = mcpAnnotationsFor(action.name);
|
|
19000
|
+
const description = annotations.readOnlyHint && !action.description.startsWith("READ ONLY") ? `READ ONLY: ${action.description}` : action.description;
|
|
19001
|
+
return { ...action, description, outputSchema, annotations };
|
|
18639
19002
|
});
|
|
18640
19003
|
|
|
18641
19004
|
// src/config.ts
|
package/package.json
CHANGED