@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.
- package/dist/arbor.js +36 -14
- 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.
|
|
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
|
|
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
|
|
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
|
|
11417
|
-
description: "Set a SPACE's
|
|
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
|
|
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
|
|
11429
|
-
description: "Set a TOPIC's
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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