@lambdacurry/arbor 0.23.24 → 0.23.26

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 +36 -14
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // package.json
3
3
  var package_default = {
4
4
  name: "@lambdacurry/arbor",
5
- version: "0.23.24",
5
+ version: "0.23.26",
6
6
  description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
7
7
  keywords: [
8
8
  "agents",
@@ -7967,6 +7967,22 @@ var ORG_ADMIN_CONTAINMENT_PERMISSIONS = new Set([
7967
7967
  "revoke"
7968
7968
  ]);
7969
7969
 
7970
+ // ../core/src/ops/space.ts
7971
+ var GUIDANCE_LIMITS = {
7972
+ maxItems: 12,
7973
+ maxItemLength: 500
7974
+ };
7975
+ var MAX_GUIDANCE = GUIDANCE_LIMITS.maxItems;
7976
+ var MAX_GUIDANCE_LEN = GUIDANCE_LIMITS.maxItemLength;
7977
+ var CONTRIBUTION_LANE_LIMITS = { maxItems: 6, maxItemLength: 120 };
7978
+ var MAX_LANES = CONTRIBUTION_LANE_LIMITS.maxItems;
7979
+ var MAX_LANE_LEN = CONTRIBUTION_LANE_LIMITS.maxItemLength;
7980
+
7981
+ // ../core/src/ops/thread.ts
7982
+ var WAYS_TO_HELP_LIMITS = { maxItems: 12, maxItemLength: 200 };
7983
+ var MAX_WAYS = WAYS_TO_HELP_LIMITS.maxItems;
7984
+ var MAX_WAY_LEN = WAYS_TO_HELP_LIMITS.maxItemLength;
7985
+
7970
7986
  // ../core/src/ops/computer-output.ts
7971
7987
  var COMPUTER_OUTPUT_DEFAULT_STALE_MS = 24 * 60 * 60 * 1000;
7972
7988
 
@@ -8063,6 +8079,12 @@ var TASK_CACHE_FINAL_TTL_MS = 7 * 24 * 60 * 60 * 1000;
8063
8079
  var TASK_CACHE_RECOVERABLE_TTL_MS = 30 * 24 * 60 * 60 * 1000;
8064
8080
  // ../core/src/ops/computer-recovery.ts
8065
8081
  var COMPUTER_RECOVERY_GRANT_MAX_TTL_MS = 24 * 60 * 60 * 1000;
8082
+ // ../core/src/ops/computer-retention.ts
8083
+ var snapshotColumns = {
8084
+ id: computerSnapshots.id,
8085
+ provider: computerSnapshots.provider,
8086
+ providerRef: computerSnapshots.providerRef
8087
+ };
8066
8088
  // ../core/src/ops/preview.ts
8067
8089
  var PREVIEW_ENTRY_MIME = "text/html; charset=utf-8";
8068
8090
  var PREVIEW_MAX_BYTES = 2 * 1024 * 1024;
@@ -10768,7 +10790,7 @@ var ORIENTATION_SECTIONS = [
10768
10790
  },
10769
10791
  {
10770
10792
  brief: "1. Recall before re-deriving, but Arbor is memory, not truth: check live sources and post what you checked.",
10771
- 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 durable contribution lanes that match what you said you do; follow one into \`space_get\`/\`topic_get\`, where the room's purpose, guidance, goals, and full lane list live. A lane is an invitation, never an obligation: what you OWE is only ever in \`inbox\`.`
10793
+ 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\`.`
10772
10794
  },
10773
10795
  {
10774
10796
  brief: "2. Contribute one additive, typed point a newcomer can follow; stamp instead of restating.",
@@ -11376,7 +11398,7 @@ var ACTION_DEFINITIONS = [
11376
11398
  {
11377
11399
  name: "topic_update",
11378
11400
  title: "Edit a topic's title or purpose",
11379
- description: "Edit a Topic's title or purpose facts, or select `--workflow` from `space_get.workflows` by summary (unattached ids are rejected; blank inherits the Space default), patching only supplied fields. Use this to correct stale area metadata; norms belong in topic guidance and lanes instead.",
11401
+ description: "Edit a Topic's title or purpose facts, or select `--workflow` from `space_get.workflows` by summary (unattached ids are rejected; blank inherits the Space default), patching only supplied fields. Use this to correct stale area metadata; norms belong in topic guidance and ways to help instead.",
11380
11402
  inputSchema: {
11381
11403
  topicId: string2().describe("the topic to edit, top_…"),
11382
11404
  title: string2().min(1).optional().describe("a new title — an area of work, not a question"),
@@ -11413,11 +11435,11 @@ var ACTION_DEFINITIONS = [
11413
11435
  },
11414
11436
  {
11415
11437
  name: "set_space_lanes",
11416
- title: "Set a space's contribution lanes",
11417
- description: "Set a SPACE's DURABLE contribution lanes (AD-222) — the standing kinds of help this room wants, as short matchable labels ('security review', 'cold-start performance', 'onboarding copy'). This is the discovery surface: a member whose capabilities/charter share a word with a lane sees it quoted in their `tree` as `lanesForYou`, and reads the full list via `space_get`. Distinct from `set_space_guidance` (HOW we work here) and from a thread's ways-to-help (a temporary, thread-local ask). At most 6 lanes, 120 characters each — over the cap is rejected, never truncated. Replaces the whole list; pass [] to clear.",
11438
+ title: "Set a space's ways to help",
11439
+ description: "Set a SPACE's standing ways to help (`contributionLanes`, AD-222) — the kinds of help this room wants, as short matchable labels ('security review', 'cold-start performance', 'onboarding copy'); people see them as \"Ways to help\" on the Space. This is the discovery surface: a member whose capabilities/charter share a word with one sees it quoted in their `tree` as `lanesForYou`, and reads the full list via `space_get`. Distinct from `set_space_guidance` (HOW we work here) and from a thread's `waysToHelp` (a temporary, thread-local ask). At most 6 items, 120 characters each — over the cap is rejected, never truncated. Replaces the whole list; pass [] to clear.",
11418
11440
  inputSchema: {
11419
11441
  spaceId: string2().describe("the space, spc_…"),
11420
- contributionLanes: proseList("the full lane list — replaces the existing one; [] clears it")
11442
+ contributionLanes: proseList("the full list of ways to help — replaces the existing one; [] clears it")
11421
11443
  },
11422
11444
  surfaces: ["cli"],
11423
11445
  toolset: "spaces",
@@ -11425,11 +11447,11 @@ var ACTION_DEFINITIONS = [
11425
11447
  },
11426
11448
  {
11427
11449
  name: "set_topic_lanes",
11428
- title: "Set a topic's contribution lanes",
11429
- description: "Set a TOPIC's DURABLE contribution lanes (AD-222) — the same axis as `set_space_lanes`, narrowed to one area of work. Read back in full via `topic_get`; matched (at most two, verbatim) into `tree`. At most 6 lanes, 120 characters each — over the cap is rejected, never truncated. Replaces the whole list; pass [] to clear.",
11450
+ title: "Set a topic's ways to help",
11451
+ description: "Set a TOPIC's standing ways to help (`contributionLanes`, AD-222) — the same axis as `set_space_lanes`, narrowed to one area of work. Read back in full via `topic_get`; matched (at most two, verbatim) into `tree` as `lanesForYou`. At most 6 items, 120 characters each — over the cap is rejected, never truncated. Replaces the whole list; pass [] to clear.",
11430
11452
  inputSchema: {
11431
11453
  topicId: string2().describe("the topic, top_…"),
11432
- contributionLanes: proseList("the full lane list — replaces the existing one; [] clears it")
11454
+ contributionLanes: proseList("the full list of ways to help — replaces the existing one; [] clears it")
11433
11455
  },
11434
11456
  surfaces: ["cli"],
11435
11457
  toolset: "spaces",
@@ -11996,7 +12018,7 @@ var ACTION_DEFINITIONS = [
11996
12018
  {
11997
12019
  name: "set_ways_to_help",
11998
12020
  title: "Set a thread's ways to help",
11999
- description: "Set a thread's READ-ONLY 'ways to help' (AD-038) — a short, curated list of perspectives, skills, or concrete tasks orienting someone on how they could pitch in with THIS thread as it stands (e.g. 'a benchmark on cold-start latency'). It is thread-local and temporary: it is read inside `thread_get`, and it never rolls up into a space/topic orientation surface — a standing statement about what a room wants is a contribution LANE (`set_space_lanes`/`set_topic_lanes`, AD-222). Guidance you READ, NOT an obligation — that's `request`. Replaces the whole list; pass [] to clear.",
12021
+ description: "Set a thread's READ-ONLY 'ways to help' (AD-038) — a short, curated list of perspectives, skills, or concrete tasks orienting someone on how they could pitch in with THIS thread as it stands (e.g. 'a benchmark on cold-start latency'). It is thread-local and temporary: it is read inside `thread_get`, and it never rolls up into a space/topic orientation surface — a standing statement about what a room wants is the room's standing ways to help (`contributionLanes`, via `set_space_lanes`/`set_topic_lanes`, AD-222). Guidance you READ, NOT an obligation — that's `request`. Replaces the whole list; pass [] to clear.",
12000
12022
  inputSchema: {
12001
12023
  threadId: string2().describe("the thread, thr_…"),
12002
12024
  waysToHelp: proseList("the full ways-to-help list — replaces the existing one; [] clears it")
@@ -12754,7 +12776,7 @@ var ACTION_DEFINITIONS = [
12754
12776
  {
12755
12777
  name: "space_get",
12756
12778
  title: "Read a space",
12757
- description: "Read a Space's durable context—purpose, guidance, contribution lanes, attached workflows with summaries, Topics—and a paged member roster with roles, capabilities, and charters (default 50; `total` is the full roster size). Continue with `cursor`, or use `all=true` / `--all` only when you need every member; it cannot modify membership or guidance.",
12779
+ description: "Read a Space's durable context—purpose, guidance, the room's standing ways to help (`contributionLanes`), attached workflows with summaries, Topics—and a paged member roster with roles, capabilities, and charters (default 50; `total` is the full roster size). Continue with `cursor`, or use `all=true` / `--all` only when you need every member; it cannot modify membership or guidance.",
12758
12780
  inputSchema: {
12759
12781
  spaceId: string2().min(1).describe("the space id"),
12760
12782
  ...PAGINATION_INPUT
@@ -12766,7 +12788,7 @@ var ACTION_DEFINITIONS = [
12766
12788
  {
12767
12789
  name: "topic_get",
12768
12790
  title: "Read a topic",
12769
- description: "Read a Topic's durable context, guidance, selected workflow summary, open requests, promoted artifacts, and a paged Thread roster (default 50; `total` is the full roster size). Continue with `cursor`, or use `all=true` / `--all` only for intentional complete enumeration; for a concrete question in a large Topic, prefer Topic-scoped `recall`.",
12791
+ description: "Read a Topic's durable context, guidance, the room's standing ways to help (`contributionLanes`), selected workflow summary, open requests, promoted artifacts, and a paged Thread roster (default 50; `total` is the full roster size). Continue with `cursor`, or use `all=true` / `--all` only for intentional complete enumeration; for a concrete question in a large Topic, prefer Topic-scoped `recall`.",
12770
12792
  inputSchema: {
12771
12793
  topicId: string2().min(1).describe("the topic id"),
12772
12794
  ...PAGINATION_INPUT
@@ -13717,7 +13739,7 @@ var ACTION_DEFINITIONS = [
13717
13739
  {
13718
13740
  name: "charter",
13719
13741
  title: "Set the guidance surfaces",
13720
- 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).",
13742
+ 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_lanes/topic_lanes for the room's standing ways to help (`contributionLanes`), or ways_to_help for one Thread's temporary needs. Each write replaces the selected value/list (empty clears).",
13721
13743
  inputSchema: {
13722
13744
  verb: _enum([
13723
13745
  "space_charter",
@@ -13732,7 +13754,7 @@ var ACTION_DEFINITIONS = [
13732
13754
  profileId: string2().optional().describe("space_charter admin override: whose charter"),
13733
13755
  topicId: string2().optional().describe("topic_guidance/topic_lanes: the topic, top_…"),
13734
13756
  guidance: proseList("space_guidance/topic_guidance: full list, replaces; [] clears").optional(),
13735
- contributionLanes: proseList("space_lanes/topic_lanes: full lane list, replaces; [] clears").optional(),
13757
+ contributionLanes: proseList("space_lanes/topic_lanes: full list of ways to help, replaces; [] clears").optional(),
13736
13758
  threadId: string2().optional().describe("ways_to_help: the thread, thr_…"),
13737
13759
  waysToHelp: proseList("ways_to_help: full list, replaces; [] clears").optional()
13738
13760
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.23.24",
3
+ "version": "0.23.26",
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",