@lambdacurry/arbor 0.21.56 → 0.21.58

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 +41 -15
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -16,7 +16,7 @@ var __export = (target, all) => {
16
16
  // package.json
17
17
  var package_default = {
18
18
  name: "@lambdacurry/arbor",
19
- version: "0.21.56",
19
+ version: "0.21.58",
20
20
  description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
21
21
  keywords: [
22
22
  "agents",
@@ -18037,6 +18037,12 @@ var MCP_OUTPUT_SCHEMAS = {
18037
18037
  purpose: nullableString.optional()
18038
18038
  }),
18039
18039
  create_thread: exports_external.looseObject({ threadId: id }),
18040
+ thread_update: exports_external.looseObject({
18041
+ id,
18042
+ title: exports_external.string().optional(),
18043
+ objective: exports_external.string().optional(),
18044
+ topicId: exports_external.string().optional()
18045
+ }),
18040
18046
  set_organization_computer: exports_external.looseObject({ config: computerConfigLayer.nullable() }),
18041
18047
  set_space_computer: exports_external.looseObject({ config: computerConfigLayer.nullable() }),
18042
18048
  set_topic_computer: exports_external.looseObject({ config: computerConfigLayer.nullable() }),
@@ -19045,6 +19051,7 @@ var MCP_TOOL_ANNOTATIONS = {
19045
19051
  create_topic: additive,
19046
19052
  topic_update: additive,
19047
19053
  create_thread: additive,
19054
+ thread_update: additive,
19048
19055
  set_organization_computer: destructiveIdempotent,
19049
19056
  set_space_computer: destructiveIdempotent,
19050
19057
  set_topic_computer: destructiveIdempotent,
@@ -19672,11 +19679,11 @@ var ACTION_DEFINITIONS = [
19672
19679
  {
19673
19680
  name: "create_topic",
19674
19681
  title: "Create a topic",
19675
- description: "Open a durable Topic in a Space only when a sub-area needs multiple Threads; check tree first so structure stays scarce. Read Ways of working (`/ways-of-working.md`), then make the Topic contract clear in purpose, guidance, and lanes: operating role, scope, external or split truth, default Thread recipes, and handoffs.",
19682
+ description: "Create a Topic for a durable sub-area that will hold multiple Threads (check tree first so structure stays scarce); otherwise keep the work in a Thread. Give it one primary operating role so future contributors know what normally happens there.",
19676
19683
  inputSchema: {
19677
19684
  spaceId: exports_external.string().describe("the space to create the topic in, spc_…"),
19678
19685
  title: exports_external.string().min(1).describe("the topic's name — an area of work, not a question"),
19679
- purpose: exports_external.string().optional().describe("one line on what belongs here")
19686
+ purpose: exports_external.string().optional().describe("what this Topic accomplishes and what belongs here, leading with its primary role — Direction, Delivery, Operations, Intake, Coordination, or Learning; name an external or split source of truth or a handoff boundary only when it materially matters")
19680
19687
  },
19681
19688
  surfaces: ["mcp", "cli"],
19682
19689
  toolset: "structure",
@@ -19689,7 +19696,7 @@ var ACTION_DEFINITIONS = [
19689
19696
  inputSchema: {
19690
19697
  topicId: exports_external.string().describe("the topic to edit, top_…"),
19691
19698
  title: exports_external.string().min(1).optional().describe("a new title — an area of work, not a question"),
19692
- purpose: exports_external.string().optional().describe("a new one-line purpose — what belongs here")
19699
+ purpose: exports_external.string().optional().describe("a new purpose — what this Topic accomplishes and what belongs here, leading with its primary role (Direction, Delivery, Operations, Intake, Coordination, or Learning); name an external or split source of truth or a handoff boundary only when it materially matters")
19693
19700
  },
19694
19701
  surfaces: ["mcp", "cli"],
19695
19702
  toolset: "spaces",
@@ -19698,7 +19705,7 @@ var ACTION_DEFINITIONS = [
19698
19705
  {
19699
19706
  name: "set_topic_guidance",
19700
19707
  title: "Set a topic's guidance",
19701
- description: "Set a topic's SOFT guidance — the local how-we-work norms for this topic (culture/quality, AD-063), e.g. 'recall before re-deriving', 'one typed point per contribution'. Soft norms only; hard governance (permissions, rate, join) lives at the space, and FACTS about the area (where its code lives, what it covers) belong in the topic's purpose — `topic_update`, not here. You READ guidance to learn the room's habits — it's distinct from `set_ways_to_help` (what's open on a thread) and `request` (obligations). Replaces the whole list; pass [] to clear. Read Ways of working (`/ways-of-working.md`) before writing so the guidance supports the Topic's operating role and contract.",
19708
+ description: "Set a topic's SOFT guidance — the local how-we-work norms for this topic (culture/quality, AD-063), e.g. 'recall before re-deriving', 'one typed point per contribution'. Soft norms only; hard governance (permissions, rate, join) lives at the space, and FACTS about the area (where its code lives, what it covers) belong in the topic's purpose — `topic_update`, not here. You READ guidance to learn the room's habits — it's distinct from `set_ways_to_help` (what's open on a thread) and `request` (obligations). Replaces the whole list; pass [] to clear.",
19702
19709
  inputSchema: {
19703
19710
  topicId: exports_external.string().describe("the topic, top_…"),
19704
19711
  guidance: proseList("the full guidance list — replaces the existing one; [] clears it")
@@ -19710,7 +19717,7 @@ var ACTION_DEFINITIONS = [
19710
19717
  {
19711
19718
  name: "set_space_guidance",
19712
19719
  title: "Set a space's guidance",
19713
- description: "Set a SPACE's SOFT guidance — the how-we-work-here norms for the whole space (culture/quality, AD-062/063), e.g. 'recall before re-deriving', 'promote the standout, sparingly'. Soft norms only, read not enforced; hard governance (permissions, rate, join) is separate. Members READ it (via space_get) to learn how the room operates — it's broader than `set_topic_guidance` (one topic's habits) and distinct from `request` (obligations). Replaces the whole list; pass [] to clear. Read Ways of working (`/ways-of-working.md`) before writing so the guidance supports the Space boundary and work modes.",
19720
+ description: "Set a SPACE's SOFT guidance — the how-we-work-here norms for the whole space (culture/quality, AD-062/063), e.g. 'recall before re-deriving', 'promote the standout, sparingly'. Soft norms only, read not enforced; hard governance (permissions, rate, join) is separate. Members READ it (via space_get) to learn how the room operates — it's broader than `set_topic_guidance` (one topic's habits) and distinct from `request` (obligations). Replaces the whole list; pass [] to clear.",
19714
19721
  inputSchema: {
19715
19722
  spaceId: exports_external.string().describe("the space, spc_…"),
19716
19723
  guidance: proseList("the full guidance list — replaces the existing one; [] clears it")
@@ -19746,17 +19753,31 @@ var ACTION_DEFINITIONS = [
19746
19753
  {
19747
19754
  name: "create_thread",
19748
19755
  title: "Open a thread",
19749
- description: "Open a new deliberation Thread under a Topic when the objective does not fit an existing Thread; name it by the question or outcome to settle, not status. Check tree first, then make the first contribution and set waysToHelp; link an existing Goal when it serves one, or create one only when 2+ Threads share an outcome.",
19756
+ description: "Open a Thread for one focused unit of work that does not fit an existing Thread (check tree first), then make the first contribution and set waysToHelp; link an existing Goal when it serves one, or create one only when 2+ Threads share an outcome. Choose the working recipe — Decide a question, Deliver an outcome, Investigate evidence, Manage one instance, or Maintain a standing concern — and make done clear for finite work.",
19750
19757
  inputSchema: {
19751
19758
  spaceId: exports_external.string().describe("the space, spc_…"),
19752
19759
  topicId: exports_external.string().describe("the topic to file it under, top_…"),
19753
- title: exports_external.string().min(1).describe("the thread title the question/objective, not a status"),
19754
- objective: exports_external.string().min(1).describe("what settled/done looks like for this thread")
19760
+ title: exports_external.string().min(1).describe("name the question, outcome, investigation, instance, or standing concern — not a status"),
19761
+ objective: exports_external.string().min(1).describe("what this Thread should accomplish; for finite work, state what done means")
19755
19762
  },
19756
19763
  surfaces: ["mcp", "cli"],
19757
19764
  toolset: "loop",
19758
19765
  run: forward("thread.create")
19759
19766
  },
19767
+ {
19768
+ name: "thread_update",
19769
+ title: "Edit a thread's title, objective, or topic",
19770
+ description: "Correct a Thread's title or objective, or move it under another Topic of the same Space, patching only supplied fields; use it to make done clear or refile misfiled work instead of archiving and reopening. Status moves stay with `transition_thread`, and the temporary help list with `charter` ways_to_help.",
19771
+ inputSchema: {
19772
+ threadId: exports_external.string().describe("the thread to edit, thr_…"),
19773
+ title: exports_external.string().min(1).optional().describe("a new title — the question, outcome, investigation, instance, or standing concern"),
19774
+ objective: exports_external.string().min(1).optional().describe("a new objective — what this Thread should accomplish; for finite work, what done means"),
19775
+ topicId: exports_external.string().optional().describe("move the thread under this topic of the same space, top_…")
19776
+ },
19777
+ surfaces: ["mcp", "cli"],
19778
+ toolset: "loop",
19779
+ run: forward("thread.setConfig")
19780
+ },
19760
19781
  {
19761
19782
  name: "set_organization_computer",
19762
19783
  title: "Replace organization computer defaults",
@@ -20216,7 +20237,7 @@ var ACTION_DEFINITIONS = [
20216
20237
  {
20217
20238
  name: "transition_thread",
20218
20239
  title: "Move a thread's lifecycle",
20219
- description: "Move a Thread among active, needs-review, stuck, standing, resolved, or archived with an optional reason; illegal lifecycle jumps are rejected. Resolve concluded deliberations, archive retired or misfiled work, use standing only for intentionally open-ended lanes, and curate standout outputs separately.",
20240
+ description: "Move a Thread among active, needs-review, stuck, standing, resolved, or archived with an optional reason; illegal lifecycle jumps are rejected. Resolve finite Decide/Deliver/Investigate/Manage work once its outcome is in, archive retired work (refile misfiled work with `thread_update` instead), use standing only for intentionally open-ended concerns, and curate standout outputs separately.",
20220
20241
  inputSchema: {
20221
20242
  threadId: exports_external.string().describe("the thread to move, thr_…"),
20222
20243
  to: exports_external.string().describe("target status: active|needs-review|stuck|standing|resolved|archived"),
@@ -20776,10 +20797,10 @@ var ACTION_DEFINITIONS = [
20776
20797
  {
20777
20798
  name: "space_create",
20778
20799
  title: "Create a space",
20779
- description: "Create a top-level Space for a new collaboration area open/private visibility plus optional seeded members (agents join directly, humans get invites); you become its first admin. Org owner/admins always can (other members only when enabled); before writing purpose, guidance, or lanes, read Ways of working (`/ways-of-working.md`) and describe the boundary shape, work modes, governance, and Topic strategy in the normal object fields.",
20800
+ description: "Create a Space when work needs its own durable collaboration/governance boundary its own membership, visibility, shared norms, and multiple durable areas; you become its first admin (org owner/admins always can, other members only when enabled), with open/private visibility and optional seeded members. If the work can live under an existing Space with the same people and governance, use a Topic instead.",
20780
20801
  inputSchema: {
20781
20802
  title: exports_external.string().min(1).describe("the space title"),
20782
- purpose: exports_external.string().optional().describe("optional one-line purpose"),
20803
+ purpose: exports_external.string().optional().describe("why this boundary exists and what it is around — commonly a Product/System, Program/Function, Portfolio/Network, or Practice/Community — plus its dominant work modes (Build, Operate, Coordinate, Discuss, Share) when that helps; plain prose, not metadata syntax"),
20783
20804
  visibility: exports_external.enum(["open", "private"]).optional().describe("open (default) or private (invite-only)"),
20784
20805
  memberProfileIds: exports_external.array(exports_external.string()).optional().describe("org profile ids to seed as members — agents added directly, humans get a pending invite")
20785
20806
  },
@@ -20793,7 +20814,7 @@ var ACTION_DEFINITIONS = [
20793
20814
  description: "Edit a Space's purpose, title, or visibility; org owner/admin or that Space's admin only, and only supplied fields are patched. Use this for factual room metadata, including open/private; collaboration norms belong in Space guidance.",
20794
20815
  inputSchema: {
20795
20816
  spaceId: exports_external.string().describe("the space, spc_…"),
20796
- purpose: exports_external.string().optional().describe("one-line purpose what this space is about"),
20817
+ purpose: exports_external.string().optional().describe("why this boundary exists and what it is around — commonly a Product/System, Program/Function, Portfolio/Network, or Practice/Community — plus its dominant work modes (Build, Operate, Coordinate, Discuss, Share) when that helps; plain prose, not metadata syntax"),
20797
20818
  title: exports_external.string().optional().describe("a new title for the space"),
20798
20819
  visibility: exports_external.enum(["open", "private"]).optional().describe("open or private (invite-only)")
20799
20820
  },
@@ -21637,7 +21658,7 @@ var ACTION_DEFINITIONS = [
21637
21658
  {
21638
21659
  name: "charter",
21639
21660
  title: "Set the guidance surfaces",
21640
- description: "Write collaboration guidance: space_charter for a member's per-Space operating charter, space/topic guidance for shared norms, space/topic lanes for durable contribution lanes, or ways_to_help for one Thread's temporary help list. These writes replace the selected value/list (empty clears); for Space/Topic guidance and lanes, read Ways of working (`/ways-of-working.md`) first so they support that object's operating contract.",
21661
+ description: "Write collaboration guidance: space_charter for a member's per-Space operating charter, space/topic guidance for durable how-we-work-here norms, space/topic lanes for the durable kinds of help welcome there, or ways_to_help for one Thread's temporary needs. Each write replaces the selected value/list (empty clears).",
21641
21662
  inputSchema: {
21642
21663
  verb: exports_external.enum([
21643
21664
  "space_charter",
@@ -22849,7 +22870,12 @@ var KNOWN_MISREACHES = [
22849
22870
  { tried: "topics", use: "tree --depth topics", why: "topics are a tree depth" },
22850
22871
  { tried: "search", use: "recall <query>", why: "recall is the search surface" },
22851
22872
  { tried: "update topic", use: "topic update --topic-id top_…", why: "this command is noun-verb" },
22852
- { tried: "update space", use: "space update --space-id spc_…", why: "this command is noun-verb" }
22873
+ { tried: "update space", use: "space update --space-id spc_…", why: "this command is noun-verb" },
22874
+ {
22875
+ tried: "update thread",
22876
+ use: "thread update --thread-id thr_…",
22877
+ why: "this command is noun-verb"
22878
+ }
22853
22879
  ];
22854
22880
  function familyHelp(positionals) {
22855
22881
  if (positionals.length !== 1)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.21.56",
3
+ "version": "0.21.58",
4
4
  "description": "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
5
5
  "keywords": [
6
6
  "agents",