@lambdacurry/arbor 0.24.32 → 0.24.33

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 +29 -8
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -11273,6 +11273,21 @@ function buildOutputSchemas() {
11273
11273
  lanesForYou: array(string2()).optional(),
11274
11274
  topics: array(treeTopic).optional()
11275
11275
  });
11276
+ const quickSearchResult = looseObject({
11277
+ exact: looseObject({
11278
+ id,
11279
+ kind: string2(),
11280
+ title: string2(),
11281
+ href: string2(),
11282
+ score: number2()
11283
+ }).nullable().optional(),
11284
+ groups: array(looseObject({
11285
+ kind: string2(),
11286
+ band: string2(),
11287
+ hits: array(jsonObject),
11288
+ more: literal(true).optional()
11289
+ }))
11290
+ });
11276
11291
  const paged = (key, item) => looseObject({
11277
11292
  [key]: array(item),
11278
11293
  total: number2().optional(),
@@ -11620,8 +11635,10 @@ function buildOutputSchemas() {
11620
11635
  spaces: array(treeSpace),
11621
11636
  pageUnit: _enum(["spaces", "topics", "threads"]).optional(),
11622
11637
  total: number2().int().min(0).optional(),
11623
- nextCursor: string2().optional()
11638
+ nextCursor: string2().optional(),
11639
+ matches: quickSearchResult.optional()
11624
11640
  }),
11641
+ quick_search: quickSearchResult,
11625
11642
  members: looseObject({
11626
11643
  members: array(orgMember),
11627
11644
  total: number2().optional(),
@@ -13080,6 +13097,7 @@ var MCP_TOOL_ANNOTATIONS = {
13080
13097
  org_leave: destructive,
13081
13098
  introduce: additive,
13082
13099
  thread_get: readOnly,
13100
+ quick_search: readOnly,
13083
13101
  tree: readOnly,
13084
13102
  members: readOnly,
13085
13103
  space_create: additive,
@@ -13451,7 +13469,7 @@ var ORIENTATION_SECTIONS = [
13451
13469
  },
13452
13470
  {
13453
13471
  brief: "1. Recall before re-deriving, but Arbor is memory, not truth: check live sources and post what you checked.",
13454
- full: `1. RECALL FIRST — but Arbor is MEMORY, NOT TRUTH. Run \`recall\` before re-deriving or restating anything — it may already be settled; cite prior work ([label](#con_…)) and build on it. Phrase the query in PROBLEM-LANGUAGE (a natural-language question — "how do agents handle X"), not extracted keywords; it ranks better. Empty recall is itself worth noting. In a large Space, don't search the whole org by habit: use \`tree\` to choose the room, then scope \`recall\` with \`space\`/\`topic\`/\`thread\` before deeper reads. External tree reads page four roots; follow \`nextCursor\`, use \`all=true\` only for deliberate complete enumeration, and scope \`depth=threads\` to one Space or Topic. On that map, \`activeThreadCount\` is the current working set (active/stuck/needs-review/standing), while \`status\` is the Topic attention rollup: \`stuck\` means any stuck Thread; \`attention\` means needs-review or an open request; \`healthy\` means neither. A contribution records what was true when it was WRITTEN, so before you assert the CURRENT state of anything outside Arbor — a PR, a build, a deploy, a config — check the live source; another contribution is not evidence of the present, and neither is a local copy of something whose home is elsewhere. And when you DO check, post the RECEIPT with the claim (AD-209): attach the actual output/screenshot (an attached file becomes a durable artifact carrying who-captured-it and when, citable as #art_… forever) or name exactly what you checked and when ("CI run #841, green, checked just now") — a "verified" with no receipt is a claim the next reader must take on faith or re-derive. When a receipted claim has AGED and matters again, don't re-trust it and don't silently re-argue it: \`request\` a re-check ("re-run this check"), and whoever runs it answers through the request with fresh evidence. WHY: a room where everyone re-derives is just a chat log — but a room that mistakes its own memory for the world confidently reports blockers that no longer exist, and this week's failures were exactly that: stale claims re-asserted as current because nothing distinguished a receipted observation from confident prose. And orient to the ROOM the way you orient to the record: \`tree\` is the map AND the way in — it carries each room's \`lanesForYou\`, the room's standing ways to help (\`contributionLanes\`) that match what you said you do; follow one into \`space_get\`/\`topic_get\`, where the room's purpose, guidance, goals, and full list of ways to help live. A way to help is an invitation, never an obligation: what you OWE is only ever in \`inbox\`.`
13472
+ full: `1. RECALL FIRST — but Arbor is MEMORY, NOT TRUTH. Run \`recall\` before re-deriving or restating anything — it may already be settled; cite prior work ([label](#con_…)) and build on it. Phrase the query in PROBLEM-LANGUAGE (a natural-language question — "how do agents handle X"), not extracted keywords; it ranks better. Empty recall is itself worth noting. If you already know a place's name, \`tree\` with \`query\` returns that lookup only (example: \`360training / Delivery & Reviews\` is Space then Topic); \`tree\` without query maps structure you don't know — don't paginate it looking for a name. In a large Space, don't search the whole org by habit: scope \`recall\` with \`space\`/\`topic\`/\`thread\` before deeper reads. External tree reads page four roots; follow \`nextCursor\`, use \`all=true\` only for deliberate complete enumeration, and scope \`depth=threads\` to one Space or Topic. On that map, \`activeThreadCount\` is the current working set (active/stuck/needs-review/standing), while \`status\` is the Topic attention rollup: \`stuck\` means any stuck Thread; \`attention\` means needs-review or an open request; \`healthy\` means neither. A contribution records what was true when it was WRITTEN, so before you assert the CURRENT state of anything outside Arbor — a PR, a build, a deploy, a config — check the live source; another contribution is not evidence of the present, and neither is a local copy of something whose home is elsewhere. And when you DO check, post the RECEIPT with the claim (AD-209): attach the actual output/screenshot (an attached file becomes a durable artifact carrying who-captured-it and when, citable as #art_… forever) or name exactly what you checked and when ("CI run #841, green, checked just now") — a "verified" with no receipt is a claim the next reader must take on faith or re-derive. When a receipted claim has AGED and matters again, don't re-trust it and don't silently re-argue it: \`request\` a re-check ("re-run this check"), and whoever runs it answers through the request with fresh evidence. WHY: a room where everyone re-derives is just a chat log — but a room that mistakes its own memory for the world confidently reports blockers that no longer exist, and this week's failures were exactly that: stale claims re-asserted as current because nothing distinguished a receipted observation from confident prose. And orient to the ROOM the way you orient to the record: \`tree\` is the map AND the way in — it carries each room's \`lanesForYou\`, the room's standing ways to help (\`contributionLanes\`) that match what you said you do; follow one into \`space_get\`/\`topic_get\`, where the room's purpose, guidance, goals, and full list of ways to help live. A way to help is an invitation, never an obligation: what you OWE is only ever in \`inbox\`.`
13455
13473
  },
13456
13474
  {
13457
13475
  brief: "2. Contribute one additive, typed point a newcomer can follow; stamp instead of restating.",
@@ -15328,11 +15346,12 @@ var ACTION_DEFINITIONS = [
15328
15346
  {
15329
15347
  name: "quick_search",
15330
15348
  title: "Quick search places",
15331
- description: "Jump to a place or person by name or short id: the Spaces, Topics, Threads and Artifacts you can open whose title (or objective, purpose, summary) contains every word, the people in your org whose name matches, best name match first, and an exact Thread short id (BUD-34) as `exact`. With `content`, the contributions you can open whose text holds every word (whole words, any word form), best match first, each with a short quote. The web ⌘K palette's two lookups: lexical, no embedding, no scope. To search what was said by meaning, use `recall`.",
15349
+ description: "Jump to a place or person by name or short id: the Spaces, Topics, Threads and Artifacts you can open whose title (or objective, purpose, summary) contains every word, the people in your org whose name matches, best name match first, and an exact Thread short id (BUD-34) as `exact`. With `content`, the contributions you can open whose text holds every word (whole words, any word form), best match first, each with a short quote. The web ⌘K palette's two lookups: lexical, no embedding, no scope. Named navigation is `tree` with `query`; meaning is `recall`.",
15332
15350
  inputSchema: {
15333
15351
  q: string2().min(2).max(200).describe("a place or person name to look up, or a Thread short id such as BUD-34"),
15334
15352
  content: boolean2().optional().describe("search what contributions said instead of place names")
15335
15353
  },
15354
+ cliHelpLead: "Unscoped name lookup (palette parity). Named navigation → `arbor tree --query`. Content by meaning → `arbor recall`.",
15336
15355
  surfaces: ["cli"],
15337
15356
  toolset: "loop",
15338
15357
  run: Object.assign((ex, { content, ...input }) => ex.call(content === true ? "search.content" : "search.quick", input), { operations: ["search.quick", "search.content"] })
@@ -15340,8 +15359,9 @@ var ACTION_DEFINITIONS = [
15340
15359
  {
15341
15360
  name: "tree",
15342
15361
  title: "Navigate the workspace tree",
15343
- description: `Map Spaces to Topics to Threads for orientation; external reads page ${TREE_EXTERNAL_DEFAULT_PAGE_SIZE} roots by default, while all=true is explicit complete retrieval: unscoped tree pages Spaces, Space-scoped tree pages Topics, and Topic-scoped depth=threads pages Threads. For a bounded Thread roster, scope to one Topic; Topic activeThreadCount is the current working set, status is area attention, not personal obligation (inbox), and depth=threads should stay scoped unless complete enumeration is intentional.`,
15362
+ description: `Map Spaces to Topics to Threads; query matches only (\`360training / Delivery & Reviews\`); external reads page ${TREE_EXTERNAL_DEFAULT_PAGE_SIZE} roots by default, all=true is complete: unscoped tree pages Spaces, Space-scoped tree pages Topics, and Topic-scoped depth=threads pages Threads. For a bounded Thread roster, scope to one Topic; Topic activeThreadCount is the current working set, status is area attention, not personal obligation (inbox), and depth=threads should stay scoped unless complete enumeration is intentional.`,
15344
15363
  inputSchema: {
15364
+ query: string2().min(2).max(200).optional().describe('known name or slash path ("360training / Delivery & Reviews"); returns matches only (no map/page); space/topic ids still scope the lookup'),
15345
15365
  space: string2().optional().describe("scope to one space id (spc_…)"),
15346
15366
  topic: string2().optional().describe("scope to one topic id (top_…)"),
15347
15367
  depth: _enum(["spaces", "topics", "threads"]).optional().describe("how deep to expand: spaces (just spaces) | topics (default: + topics + light roster) | threads (+ each topic's threads). For a concrete question in one Topic, prefer Topic-scoped recall; use topic_get when you intentionally need its Thread roster or Topic-wide context."),
@@ -15349,6 +15369,7 @@ var ACTION_DEFINITIONS = [
15349
15369
  cursor: PAGINATION_INPUT.cursor,
15350
15370
  all: PAGINATION_INPUT.all
15351
15371
  },
15372
+ cliHelpLead: 'Known name → `arbor tree --query "360training / Delivery & Reviews"`. Map structure → `arbor tree`. Content by meaning → `arbor recall`.',
15352
15373
  externalReadDefaults: { limit: TREE_EXTERNAL_DEFAULT_PAGE_SIZE },
15353
15374
  surfaces: ["mcp", "cli"],
15354
15375
  toolset: "loop",
@@ -16767,7 +16788,7 @@ var ACTIONS = ACTION_DEFINITIONS.map((action) => {
16767
16788
  });
16768
16789
 
16769
16790
  // ../actions/src/retention-entry.ts
16770
- var ARBOR_VERSION = "0.24.32";
16791
+ var ARBOR_VERSION = "0.24.33";
16771
16792
  var historyPolicySchema = _enum(["full", "checkpoint"]).optional().describe("text Artifacts: future history retention policy; full retains every source snapshot, checkpoint keeps metadata for every revision and source only when explicitly retained");
16772
16793
  var retainSourceSchema = boolean2().optional().describe("edit: in checkpoint mode, retain this newly minted content revision's source");
16773
16794
  var checkpointSchema = boolean2().optional().describe("edit: retain the exact current version source without incrementing content version");
@@ -17175,7 +17196,7 @@ function dispositionFilename(value) {
17175
17196
  // package.json
17176
17197
  var package_default = {
17177
17198
  name: "@lambdacurry/arbor",
17178
- version: "0.24.32",
17199
+ version: "0.24.33",
17179
17200
  description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
17180
17201
  keywords: [
17181
17202
  "agents",
@@ -18086,7 +18107,7 @@ var KNOWN_MISREACHES = [
18086
18107
  {
18087
18108
  tried: "search",
18088
18109
  use: "recall <query>",
18089
- why: "recall searches what was said; `quick search <name>` jumps to a place or person by name"
18110
+ why: 'recall searches what was said; `tree --query "360training / Delivery & Reviews"` jumps to a known name'
18090
18111
  },
18091
18112
  { tried: "update topic", use: "topic update --topic-id top_…", why: "this command is noun-verb" },
18092
18113
  { tried: "update space", use: "space update --space-id spc_…", why: "this command is noun-verb" },
@@ -18617,7 +18638,7 @@ function renderVersion(ctx) {
18617
18638
  }
18618
18639
  var HELP = `arbor — the Arbor CLI: people and agents deliberate on typed work, and Arbor remembers
18619
18640
  what's settled. Your token (env ARBOR_TOKEN, or \`arbor auth\`) resolves who you act AS — the CLI
18620
- never asserts it. Run \`arbor whoami\` to confirm, \`arbor tree\` to map the workspace.
18641
+ never asserts it. Run \`arbor whoami\` to confirm, \`arbor tree --query "360training / Delivery & Reviews"\` to jump to a known place, \`arbor tree\` to map the workspace, \`arbor recall\` for content.
18621
18642
 
18622
18643
  ${ORIENTATION}
18623
18644
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.24.32",
3
+ "version": "0.24.33",
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",