@lambdacurry/arbor 0.4.5 → 0.4.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.
Files changed (2) hide show
  1. package/dist/arbor.js +17 -38
  2. 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) => ({ threadIdx: index("contributions_thread_idx").on(t.threadId) }));
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),
@@ -1854,8 +1861,6 @@ var recallFts = sqliteTable("recall_fts", {
1854
1861
  var INDEX_ON = new Set([
1855
1862
  "contribution.added",
1856
1863
  "contribution.edited",
1857
- "comment.added",
1858
- "comment.edited",
1859
1864
  "artifact.created",
1860
1865
  "review.added",
1861
1866
  "thread.created",
@@ -16193,21 +16198,10 @@ var ACTIONS = [
16193
16198
  surfaces: ["mcp", "cli"],
16194
16199
  run: forward("contribution.update")
16195
16200
  },
16196
- {
16197
- name: "edit_comment",
16198
- title: "Edit your comment",
16199
- 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.",
16200
- inputSchema: {
16201
- commentId: exports_external.string().describe("your comment's id, cmt_…"),
16202
- body: exports_external.string().min(1).describe("the replacement text")
16203
- },
16204
- surfaces: ["mcp", "cli"],
16205
- run: forward("comment.update")
16206
- },
16207
16201
  {
16208
16202
  name: "stamp",
16209
16203
  title: "Stamp (review) a contribution",
16210
- description: "Vouch for or push back on someone else's contribution — neutral (omit facet+polarity) or signed (a facet + ▲/▽). Use this to register quality judgment with a 'why'; you cannot stamp your own, and re-stamping updates yours in place. A STAMP is also how you answer a review-ask (AD-130): if `inbox`/a thread's open ask tells you to stamp a contribution, do it here. The note is a MARKDOWN body (AD-143) — be as substantive as the review needs; you can @-mention people and reference other work with [[con_…]].",
16204
+ description: "Vouch for or push back on someone else's contribution — neutral (omit facet+polarity) or signed (a facet + ▲/▽). Use this to register quality judgment with a 'why'; you cannot stamp your own, and re-stamping updates yours in place. A STAMP is also how you respond to a review request (AD-130): if `inbox`/a thread's open request tells you to stamp a contribution, do it here. The note is a MARKDOWN body (AD-143) — be as substantive as the review needs; you can @-mention people and reference other work with [[con_…]].",
16211
16205
  inputSchema: {
16212
16206
  contributionId: exports_external.string().describe("the contribution id, e.g. con_…"),
16213
16207
  facetKey: exports_external.enum(STAMP_FACETS).optional().describe("quality|impact|fit|originality (omit for a neutral stamp)"),
@@ -16222,21 +16216,6 @@ var ACTIONS = [
16222
16216
  surfaces: ["mcp", "cli"],
16223
16217
  run: forward("review.add")
16224
16218
  },
16225
- {
16226
- name: "comment",
16227
- title: "Comment in a thread",
16228
- 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.",
16229
- inputSchema: {
16230
- threadId: exports_external.string(),
16231
- body: exports_external.string().min(1),
16232
- aboutType: exports_external.enum(["contribution", "artifact", "comment"]).optional(),
16233
- aboutId: exports_external.string().optional(),
16234
- replyToId: exports_external.string().optional(),
16235
- mentions: exports_external.array(exports_external.string()).optional().describe("profile ids to @-mention (they get a notification)")
16236
- },
16237
- surfaces: ["mcp", "cli"],
16238
- run: forward("comment.add")
16239
- },
16240
16219
  {
16241
16220
  name: "react",
16242
16221
  title: "React to an object",
@@ -16355,11 +16334,11 @@ var ACTIONS = [
16355
16334
  {
16356
16335
  name: "request",
16357
16336
  title: "Ask for a review",
16358
- description: "Ask others to review work in a thread — name targets (an inbox item each) or leave it open (the thread board). Use this when you need someone's eyes to move forward; completion is software-computed from their responses (first | quorum(n) | all-targets | deadline | explicit). Review-only (AD-130): a review placed on the asked-about contribution counts as a response.",
16337
+ description: "Request a review of work in a thread — name targets (an inbox item each) or leave it open (the thread board). Use this when you need someone's eyes to move forward; completion is software-computed from their responses (first | quorum(n) | all-targets | deadline | explicit). Review-only (AD-130): a review placed on the contribution it's about counts as a response.",
16359
16338
  inputSchema: {
16360
- threadId: exports_external.string().describe("the thread the ask is in, thr_…"),
16339
+ threadId: exports_external.string().describe("the thread the request is in, thr_…"),
16361
16340
  requestedAction: exports_external.string().optional().describe("a one-line 'what'"),
16362
- aboutContributionId: exports_external.string().optional().describe("card-scoped ask: the contribution this is about, con_… (must be in the thread; badges that card)"),
16341
+ aboutContributionId: exports_external.string().optional().describe("card-scoped request: the contribution this is about, con_… (must be in the thread; badges that card)"),
16363
16342
  targetProfileIds: exports_external.array(exports_external.string()).optional().describe("targeted recipients (omit → open board)"),
16364
16343
  completion: exports_external.enum(["first", "quorum", "all-targets", "deadline", "explicit"]),
16365
16344
  quorumN: exports_external.number().int().min(1).optional().describe("required when completion=quorum"),
@@ -16371,7 +16350,7 @@ var ACTIONS = [
16371
16350
  {
16372
16351
  name: "respond",
16373
16352
  title: "Respond to a request",
16374
- description: "Fulfill a request addressed to you by posting the contribution that answers it (AD-048 respond-not-claim). Reach for this after `inbox` surfaces an obligation — each open ask carries an `answerWith` line telling you the exact call. NOTE: a review-ask is answered by `stamp` (AD-130), not `respond`. If you ALREADY posted an answer as a plain contribution, use `mark_as_response` to bind it. Returns the request's recomputed status (open | completed | expired).",
16353
+ description: "Fulfill a request addressed to you by posting the contribution that responds to it (AD-048 respond-not-claim). Reach for this after `inbox` surfaces an obligation — each open request carries a `respondWith` line telling you the exact call. NOTE: a review request is met by `stamp` (AD-130), not `respond`. If you ALREADY posted a response as a plain contribution, use `mark_as_response` to bind it. Returns the request's recomputed status (open | completed | expired).",
16375
16354
  inputSchema: {
16376
16355
  requestId: exports_external.string().describe("the request id, req_…"),
16377
16356
  type: exports_external.enum(CONTRIBUTION_TYPES).describe("the contribution type"),
@@ -16395,7 +16374,7 @@ var ACTIONS = [
16395
16374
  {
16396
16375
  name: "cancel_request",
16397
16376
  title: "Cancel a request",
16398
- description: "Cancel an OPEN request you raised (or any open request, if you're the org owner) — it moves to a terminal `cancelled` state and the inbox items it fanned out are SILENTLY withdrawn (they leave recipients' inboxes, no notification). Use this when an ask is no longer needed. Only open requests can be cancelled (a completed/expired one can't).",
16377
+ description: "Cancel an OPEN request you raised (or any open request, if you're the org owner) — it moves to a terminal `cancelled` state and the inbox items it fanned out are SILENTLY withdrawn (they leave recipients' inboxes, no notification). Use this when a request is no longer needed. Only open requests can be cancelled (a completed/expired one can't).",
16399
16378
  inputSchema: {
16400
16379
  requestId: exports_external.string().describe("the open request to cancel, req_…")
16401
16380
  },
@@ -16461,7 +16440,7 @@ var ACTIONS = [
16461
16440
  {
16462
16441
  name: "thread_get",
16463
16442
  title: "Read a thread",
16464
- description: "Read the full state of the thread you're working in — objective, every contribution/stamp/comment, and its OPEN ASKS. Load this before contributing; if an open ask matches what you're about to say, answer through `respond` (or `stamp` the asked-about card) so the ask completes.",
16443
+ description: "Read the full state of the thread you're working in — objective, every contribution/stamp/comment, and its OPEN REQUESTS. Load this before contributing; if an open request matches what you're about to say, respond (or `stamp` the card it's about) so the request completes.",
16465
16444
  inputSchema: {
16466
16445
  id: exports_external.string().describe("the thread id, e.g. thr_…")
16467
16446
  },
@@ -17125,8 +17104,8 @@ Etiquette — WHEN to act (the judgment; per-command mechanics are listed below)
17125
17104
  the recall snippet AND sharpens recall (it's embedded with the body).
17126
17105
  · References live in your prose — a URL or \`[label](#con_…)\` in the body becomes a typed reference;
17127
17106
  there is no separate links field.
17128
- · Answer asks THROUGH them — \`arbor respond\` (or \`arbor stamp\` a review ask) so the ask completes
17129
- and the requester is notified; a plain reply that happens to answer leaves the ask hanging.
17107
+ · Respond to requests THROUGH them — \`arbor respond\` (or \`arbor stamp\` a review request) so the
17108
+ request completes and the requester is notified; a plain reply that skips \`respond\` leaves it hanging.
17130
17109
  · Review honestly (\`arbor stamp\` = vouch / push back with a why), promote sparingly (curation, not
17131
17110
  applause), and \`arbor edit\` rather than repost.
17132
17111
  Full norms: GET /agent.md on your Arbor server, or the saffron arbor-collaboration shared skill.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.4.5",
3
+ "version": "0.4.7",
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": {