@lambdacurry/arbor 0.4.4 → 0.4.6
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 +65 -31
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -156,6 +156,7 @@ var httpExecutor = {
|
|
|
156
156
|
|
|
157
157
|
// ../core/src/objects/types.ts
|
|
158
158
|
var CONTRIBUTION_TYPES = [
|
|
159
|
+
"comment",
|
|
159
160
|
"question",
|
|
160
161
|
"assertion",
|
|
161
162
|
"evidence",
|
|
@@ -1612,8 +1613,14 @@ var contributions = sqliteTable("contributions", {
|
|
|
1612
1613
|
standoutAt: ts("standout_at"),
|
|
1613
1614
|
standoutBy: text("standout_by").references(() => profiles.id),
|
|
1614
1615
|
deletedAt: ts("deleted_at"),
|
|
1616
|
+
aboutType: text("about_type").$type(),
|
|
1617
|
+
aboutId: text("about_id"),
|
|
1618
|
+
anchor: text("anchor", { mode: "json" }).$type(),
|
|
1615
1619
|
createdAt: ts("created_at").notNull()
|
|
1616
|
-
}, (t) => ({
|
|
1620
|
+
}, (t) => ({
|
|
1621
|
+
threadIdx: index("contributions_thread_idx").on(t.threadId),
|
|
1622
|
+
aboutIdx: index("contributions_about_idx").on(t.aboutType, t.aboutId)
|
|
1623
|
+
}));
|
|
1617
1624
|
var reviews = sqliteTable("reviews", {
|
|
1618
1625
|
id: text("id").primaryKey(),
|
|
1619
1626
|
targetContributionId: text("target_contribution_id").notNull().references(() => contributions.id),
|
|
@@ -16171,7 +16178,11 @@ var ACTIONS = [
|
|
|
16171
16178
|
body: exports_external.string().min(1).describe("the contribution text"),
|
|
16172
16179
|
summary: exports_external.string().max(300).optional().describe("optional ≤300-char gist — becomes the recall snippet AND sharpens recall for long contributions (it's prepended to the embedded text); write one when the body is long"),
|
|
16173
16180
|
confidence: exports_external.number().int().min(0).max(100).optional().describe("optional 0–100 confidence"),
|
|
16174
|
-
mentions: exports_external.array(exports_external.object({
|
|
16181
|
+
mentions: exports_external.array(exports_external.object({
|
|
16182
|
+
kind: exports_external.enum(["person", "contribution", "artifact"]),
|
|
16183
|
+
id: exports_external.string(),
|
|
16184
|
+
label: exports_external.string()
|
|
16185
|
+
})).optional().describe("inline @-mentions in the body; person mentions notify"),
|
|
16175
16186
|
links: exports_external.array(exports_external.object({ rel: exports_external.enum(CONTRIBUTION_LINK_RELS), targetId: exports_external.string() })).optional().describe("internal typed links: { rel, targetId } (same-space). External refs go IN THE BODY as URLs.")
|
|
16176
16187
|
},
|
|
16177
16188
|
surfaces: ["mcp", "cli"],
|
|
@@ -16189,17 +16200,6 @@ var ACTIONS = [
|
|
|
16189
16200
|
surfaces: ["mcp", "cli"],
|
|
16190
16201
|
run: forward("contribution.update")
|
|
16191
16202
|
},
|
|
16192
|
-
{
|
|
16193
|
-
name: "edit_comment",
|
|
16194
|
-
title: "Edit your comment",
|
|
16195
|
-
description: "Edit the body of your own comment (editable-but-audited, AD-060/132 — an 'edited' marker appears; the event log keeps the trail). Author-only.",
|
|
16196
|
-
inputSchema: {
|
|
16197
|
-
commentId: exports_external.string().describe("your comment's id, cmt_…"),
|
|
16198
|
-
body: exports_external.string().min(1).describe("the replacement text")
|
|
16199
|
-
},
|
|
16200
|
-
surfaces: ["mcp", "cli"],
|
|
16201
|
-
run: forward("comment.update")
|
|
16202
|
-
},
|
|
16203
16203
|
{
|
|
16204
16204
|
name: "stamp",
|
|
16205
16205
|
title: "Stamp (review) a contribution",
|
|
@@ -16209,26 +16209,15 @@ var ACTIONS = [
|
|
|
16209
16209
|
facetKey: exports_external.enum(STAMP_FACETS).optional().describe("quality|impact|fit|originality (omit for a neutral stamp)"),
|
|
16210
16210
|
polarity: exports_external.enum(["positive", "negative"]).optional().describe("required with a facet"),
|
|
16211
16211
|
note: exports_external.string().min(1).optional().describe("the 'why' — markdown, required for a signed stamp (AD-143)"),
|
|
16212
|
-
mentions: exports_external.array(exports_external.object({
|
|
16212
|
+
mentions: exports_external.array(exports_external.object({
|
|
16213
|
+
kind: exports_external.enum(["person", "contribution", "artifact"]),
|
|
16214
|
+
id: exports_external.string(),
|
|
16215
|
+
label: exports_external.string()
|
|
16216
|
+
})).optional().describe("inline @-mentions in the note; person mentions notify")
|
|
16213
16217
|
},
|
|
16214
16218
|
surfaces: ["mcp", "cli"],
|
|
16215
16219
|
run: forward("review.add")
|
|
16216
16220
|
},
|
|
16217
|
-
{
|
|
16218
|
-
name: "comment",
|
|
16219
|
-
title: "Comment in a thread",
|
|
16220
|
-
description: "Add lightweight discussion that isn't itself a contribution — a clarifying aside, a pointer, or a reply about a specific contribution/artifact/comment. Use this for talk-about-the-work, not for the work on the record.",
|
|
16221
|
-
inputSchema: {
|
|
16222
|
-
threadId: exports_external.string(),
|
|
16223
|
-
body: exports_external.string().min(1),
|
|
16224
|
-
aboutType: exports_external.enum(["contribution", "artifact", "comment"]).optional(),
|
|
16225
|
-
aboutId: exports_external.string().optional(),
|
|
16226
|
-
replyToId: exports_external.string().optional(),
|
|
16227
|
-
mentions: exports_external.array(exports_external.string()).optional().describe("profile ids to @-mention (they get a notification)")
|
|
16228
|
-
},
|
|
16229
|
-
surfaces: ["mcp", "cli"],
|
|
16230
|
-
run: forward("comment.add")
|
|
16231
|
-
},
|
|
16232
16221
|
{
|
|
16233
16222
|
name: "react",
|
|
16234
16223
|
title: "React to an object",
|
|
@@ -16376,10 +16365,10 @@ var ACTIONS = [
|
|
|
16376
16365
|
{
|
|
16377
16366
|
name: "mark_as_response",
|
|
16378
16367
|
title: "Mark a contribution as a request's response",
|
|
16379
|
-
description: "
|
|
16368
|
+
description: "Mark an ALREADY-POSTED contribution as a response to a request (AD-142) — a response is just a `fulfills` link, so use this when a response was posted as a plain contribution instead of through `respond`. A request has RESPONSES (plural), not a single answer. Allowed if you're the contribution's AUTHOR ('this is my response') or the REQUESTER ('this responded to me'). The contribution must be in the request's thread; the request must be open. Re-evaluates completion.",
|
|
16380
16369
|
inputSchema: {
|
|
16381
16370
|
requestId: exports_external.string().describe("the open request, req_…"),
|
|
16382
|
-
contributionId: exports_external.string().describe("the existing contribution that
|
|
16371
|
+
contributionId: exports_external.string().describe("the existing contribution that responds to it, con_…")
|
|
16383
16372
|
},
|
|
16384
16373
|
surfaces: ["mcp", "cli"],
|
|
16385
16374
|
run: forward("request.bind")
|
|
@@ -16529,6 +16518,51 @@ var ACTIONS = [
|
|
|
16529
16518
|
surfaces: ["mcp", "cli"],
|
|
16530
16519
|
run: forward("space.invites")
|
|
16531
16520
|
},
|
|
16521
|
+
{
|
|
16522
|
+
name: "create_goal",
|
|
16523
|
+
title: "Create a goal",
|
|
16524
|
+
description: "Create an org-scoped GOAL (initiative) — the widest unit of work, the 'why' that threads serve toward. Reach for this when several threads ladder up to one outcome worth naming; then `link_thread_to_goal` the threads that contribute. Optionally seed it from a space's threads at creation. Prefer linking to an existing goal (see `list_goals`) over minting a near-duplicate.",
|
|
16525
|
+
inputSchema: {
|
|
16526
|
+
spaceId: exports_external.string().describe("the space you're creating it from, spc_… (gates access)"),
|
|
16527
|
+
title: exports_external.string().min(1).describe("the goal's name — an outcome, not a task"),
|
|
16528
|
+
purpose: exports_external.string().optional().describe("one or two lines on what reaching it means"),
|
|
16529
|
+
threadIds: exports_external.array(exports_external.string()).optional().describe("optional threads IN THIS SPACE to link at creation (others are ignored)")
|
|
16530
|
+
},
|
|
16531
|
+
surfaces: ["mcp", "cli"],
|
|
16532
|
+
run: forward("initiative.create")
|
|
16533
|
+
},
|
|
16534
|
+
{
|
|
16535
|
+
name: "link_thread_to_goal",
|
|
16536
|
+
title: "Link a thread to a goal",
|
|
16537
|
+
description: "Record that a thread contributes to a goal — the many-to-many link that surfaces the goal on the thread's space and lists the thread under the goal. Idempotent. Reach for this once a thread's work clearly serves a goal; use `list_goals` to find the goal id.",
|
|
16538
|
+
inputSchema: {
|
|
16539
|
+
threadId: exports_external.string().describe("the contributing thread, thr_…"),
|
|
16540
|
+
initiativeId: exports_external.string().describe("the goal it serves, ini_…")
|
|
16541
|
+
},
|
|
16542
|
+
surfaces: ["mcp", "cli"],
|
|
16543
|
+
run: forward("initiative.linkThread")
|
|
16544
|
+
},
|
|
16545
|
+
{
|
|
16546
|
+
name: "unlink_thread_from_goal",
|
|
16547
|
+
title: "Unlink a thread from a goal",
|
|
16548
|
+
description: "Remove the link between a thread and a goal (the deliberate inverse of `link_thread_to_goal`). Idempotent. Reach for this when a thread no longer serves the goal it was attached to — the thread and the goal both stay; only the link is dropped.",
|
|
16549
|
+
inputSchema: {
|
|
16550
|
+
threadId: exports_external.string().describe("the thread to unlink, thr_…"),
|
|
16551
|
+
initiativeId: exports_external.string().describe("the goal to unlink it from, ini_…")
|
|
16552
|
+
},
|
|
16553
|
+
surfaces: ["mcp", "cli"],
|
|
16554
|
+
run: forward("initiative.unlinkThread")
|
|
16555
|
+
},
|
|
16556
|
+
{
|
|
16557
|
+
name: "list_goals",
|
|
16558
|
+
title: "List a thread's goals",
|
|
16559
|
+
description: "For a thread, list the goals it already contributes to PLUS the org's goals you could link it to (the pick list). Reach for this before `link_thread_to_goal` to find the right goal id and avoid creating a duplicate; archived goals are omitted.",
|
|
16560
|
+
inputSchema: {
|
|
16561
|
+
threadId: exports_external.string().describe("the thread to read goals for, thr_…")
|
|
16562
|
+
},
|
|
16563
|
+
surfaces: ["mcp", "cli"],
|
|
16564
|
+
run: forward("initiative.forThread")
|
|
16565
|
+
},
|
|
16532
16566
|
{
|
|
16533
16567
|
name: "space_create",
|
|
16534
16568
|
title: "Create a space",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lambdacurry/arbor",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.6",
|
|
4
4
|
"description": "The Arbor CLI \u2014 a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|