@lambdacurry/arbor 0.24.35 → 0.24.36
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 +35 -14
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -6955,6 +6955,7 @@ function json(params) {
|
|
|
6955
6955
|
return jsonSchema;
|
|
6956
6956
|
}
|
|
6957
6957
|
// ../core/src/objects/types.ts
|
|
6958
|
+
var TOPIC_LIFECYCLES = ["planned", "open", "on-hold", "closed", "archived"];
|
|
6958
6959
|
var IDENTITY_COLORS = [
|
|
6959
6960
|
"indigo",
|
|
6960
6961
|
"teal",
|
|
@@ -8562,6 +8563,7 @@ var topics = sqliteTable("topics", {
|
|
|
8562
8563
|
workflowId: text("workflow_id"),
|
|
8563
8564
|
visibility: text("visibility").$type().notNull().default("open"),
|
|
8564
8565
|
ownerProfileId: text("owner_profile_id").references(() => profiles.id),
|
|
8566
|
+
lifecycle: text("lifecycle").$type().notNull().default("open"),
|
|
8565
8567
|
archivedAt: ts("archived_at"),
|
|
8566
8568
|
createdAt: ts("created_at").notNull()
|
|
8567
8569
|
}, (t) => ({
|
|
@@ -10217,6 +10219,9 @@ var ORG_ADMIN_CONTAINMENT_PERMISSIONS = new Set([
|
|
|
10217
10219
|
"revoke"
|
|
10218
10220
|
]);
|
|
10219
10221
|
|
|
10222
|
+
// ../core/src/ops/topic-lifecycle.ts
|
|
10223
|
+
var INITIAL_TOPIC_LIFECYCLES = ["planned", "open"];
|
|
10224
|
+
|
|
10220
10225
|
// ../core/src/queries/artifact-base.ts
|
|
10221
10226
|
var eventChronology = sql`_rowid_`;
|
|
10222
10227
|
var SPACE_ARTIFACT_STATUSES = [
|
|
@@ -11121,13 +11126,17 @@ function buildOutputSchemas() {
|
|
|
11121
11126
|
type: string2(),
|
|
11122
11127
|
description: string2().optional()
|
|
11123
11128
|
});
|
|
11129
|
+
const topicLifecycle = _enum(TOPIC_LIFECYCLES);
|
|
11130
|
+
const removedTopicStatus = never().optional();
|
|
11124
11131
|
const topic = looseObject({
|
|
11125
11132
|
id,
|
|
11126
11133
|
spaceId: id.optional(),
|
|
11127
11134
|
title: string2(),
|
|
11128
11135
|
purpose: nullableString.optional(),
|
|
11129
11136
|
url: string2().optional(),
|
|
11130
|
-
workflowId: nullableString.optional()
|
|
11137
|
+
workflowId: nullableString.optional(),
|
|
11138
|
+
lifecycle: topicLifecycle.optional(),
|
|
11139
|
+
status: removedTopicStatus
|
|
11131
11140
|
});
|
|
11132
11141
|
const space = looseObject({
|
|
11133
11142
|
id,
|
|
@@ -11285,7 +11294,8 @@ function buildOutputSchemas() {
|
|
|
11285
11294
|
purpose: string2().optional(),
|
|
11286
11295
|
threadCount: number2(),
|
|
11287
11296
|
activeThreadCount: number2(),
|
|
11288
|
-
|
|
11297
|
+
lifecycle: topicLifecycle,
|
|
11298
|
+
status: removedTopicStatus,
|
|
11289
11299
|
openRequestCount: number2().optional(),
|
|
11290
11300
|
lastActivityAt: timestamp,
|
|
11291
11301
|
lanesForYou: array(string2()).optional(),
|
|
@@ -11437,13 +11447,19 @@ function buildOutputSchemas() {
|
|
|
11437
11447
|
reacted: boolean2(),
|
|
11438
11448
|
reactions: array(reactionCount)
|
|
11439
11449
|
}),
|
|
11440
|
-
create_topic: looseObject({
|
|
11450
|
+
create_topic: looseObject({
|
|
11451
|
+
topicId: id,
|
|
11452
|
+
url: string2().optional(),
|
|
11453
|
+
lifecycle: topicLifecycle.optional()
|
|
11454
|
+
}),
|
|
11441
11455
|
topic_update: looseObject({
|
|
11442
11456
|
id,
|
|
11443
11457
|
title: string2().optional(),
|
|
11444
11458
|
purpose: nullableString.optional(),
|
|
11445
11459
|
workflowId: nullableString.optional(),
|
|
11446
|
-
visibility: _enum(["open", "private"]).optional()
|
|
11460
|
+
visibility: _enum(["open", "private"]).optional(),
|
|
11461
|
+
lifecycle: topicLifecycle.optional(),
|
|
11462
|
+
archivedAt: nullableString.optional()
|
|
11447
11463
|
}),
|
|
11448
11464
|
create_thread: looseObject({ threadId: id, url: string2().optional() }),
|
|
11449
11465
|
thread_update: looseObject({
|
|
@@ -11723,7 +11739,8 @@ function buildOutputSchemas() {
|
|
|
11723
11739
|
}),
|
|
11724
11740
|
space_get: looseObject({
|
|
11725
11741
|
space,
|
|
11726
|
-
topics: array(topic).optional(),
|
|
11742
|
+
topics: array(topic.extend({ lifecycle: topicLifecycle })).optional(),
|
|
11743
|
+
archivedTopics: array(looseObject({ id, title: string2(), lifecycle: literal("archived") })).optional(),
|
|
11727
11744
|
members: array(member).optional(),
|
|
11728
11745
|
total: number2().int().min(0),
|
|
11729
11746
|
nextCursor: string2().optional(),
|
|
@@ -11732,7 +11749,8 @@ function buildOutputSchemas() {
|
|
|
11732
11749
|
defaultWorkflow: workflowSummary.optional()
|
|
11733
11750
|
}),
|
|
11734
11751
|
topic_get: looseObject({
|
|
11735
|
-
topic,
|
|
11752
|
+
topic: topic.extend({ lifecycle: topicLifecycle }),
|
|
11753
|
+
lifecycleChoices: array(topicLifecycle).optional(),
|
|
11736
11754
|
space,
|
|
11737
11755
|
workflow: workflowSummary.optional(),
|
|
11738
11756
|
threads: array(thread).optional(),
|
|
@@ -12823,7 +12841,8 @@ var OUTPUT_SHAPERS = {
|
|
|
12823
12841
|
]),
|
|
12824
12842
|
create_topic: (result) => defined([
|
|
12825
12843
|
["topicId", result.id],
|
|
12826
|
-
["url", result.url]
|
|
12844
|
+
["url", result.url],
|
|
12845
|
+
["lifecycle", result.lifecycle]
|
|
12827
12846
|
]),
|
|
12828
12847
|
create_thread: (result) => defined([
|
|
12829
12848
|
["threadId", result.id],
|
|
@@ -13616,7 +13635,7 @@ var ORIENTATION_SECTIONS = [
|
|
|
13616
13635
|
},
|
|
13617
13636
|
{
|
|
13618
13637
|
brief: "1. Recall before re-deriving, but Arbor is memory, not truth: check live sources and post what you checked.",
|
|
13619
|
-
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 \`
|
|
13638
|
+
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 \`lifecycle\` is the Topic's deliberate status (planned, open, on-hold, closed), set by its owner or a Space admin and never derived from its Threads — a Closed Topic still takes new Threads. 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\`.`
|
|
13620
13639
|
},
|
|
13621
13640
|
{
|
|
13622
13641
|
brief: "2. Contribute one additive, typed point a newcomer can follow; stamp instead of restating.",
|
|
@@ -14278,7 +14297,8 @@ var ACTION_DEFINITIONS = [
|
|
|
14278
14297
|
title: string2().min(1).describe("the topic's name — an area of work, not a question"),
|
|
14279
14298
|
purpose: string2().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"),
|
|
14280
14299
|
workflow: string2().optional().describe("a workflow id from `space_get.workflows` (pick by summary) — a built-in such as `queue` or a catalog `wfl_…`; must already be attached to this Space"),
|
|
14281
|
-
visibility: _enum(["open", "private"]).optional().describe("`open` (default): every Space member sees it. `private`: only its roster plus the Space's admins and the org's owner/admins — creating one takes Space admin; you start on the roster")
|
|
14300
|
+
visibility: _enum(["open", "private"]).optional().describe("`open` (default): every Space member sees it. `private`: only its roster plus the Space's admins and the org's owner/admins — creating one takes Space admin; you start on the roster"),
|
|
14301
|
+
lifecycle: _enum(INITIAL_TOPIC_LIFECYCLES).optional().describe("the Topic's starting status: `open` (default) or `planned` (not started yet); change it later with `topic_update --lifecycle`")
|
|
14282
14302
|
},
|
|
14283
14303
|
surfaces: ["mcp", "cli"],
|
|
14284
14304
|
toolset: "structure",
|
|
@@ -14286,14 +14306,15 @@ var ACTION_DEFINITIONS = [
|
|
|
14286
14306
|
},
|
|
14287
14307
|
{
|
|
14288
14308
|
name: "topic_update",
|
|
14289
|
-
title: "Edit a topic's title or
|
|
14290
|
-
description: "Edit a Topic's title, purpose, or `--workflow` (pick from `space_get.workflows` by summary; blank inherits the Space default), patching only supplied fields, or
|
|
14309
|
+
title: "Edit a topic's title, purpose, or status",
|
|
14310
|
+
description: "Edit a Topic's title, purpose, or `--workflow` (pick from `space_get.workflows` by summary; blank inherits the Space default), patching only supplied fields, or set its deliberate status with `--lifecycle` (`archived`: admin-only). Norms belong in topic guidance and ways to help, not here.",
|
|
14291
14311
|
inputSchema: {
|
|
14292
14312
|
topicId: string2().describe("the topic to edit, top_…"),
|
|
14293
14313
|
title: string2().min(1).optional().describe("a new title — an area of work, not a question"),
|
|
14294
14314
|
purpose: string2().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"),
|
|
14295
14315
|
workflow: string2().nullable().optional().describe("a workflow id from `space_get.workflows` (pick by summary) — a built-in such as `queue` or a catalog `wfl_…`; must be attached to the Space; blank or null inherits the Space default"),
|
|
14296
|
-
|
|
14316
|
+
lifecycle: _enum(TOPIC_LIFECYCLES).optional().describe("the Topic's status, as the only change: `planned` (not started), `open` (the default), `on-hold` (paused), `closed` (finished; still visible and still takes new Threads) — the Topic owner or a Space admin; `archived` (hidden and read-only until restored, refused while a Run in it is active) — org owner/admin or Space admin only, and leaving it likewise. Never changes a Thread's status"),
|
|
14317
|
+
archived: boolean2().optional().describe("same as `--lifecycle archived` (true) or restoring an archived Topic to `open` (false): it and everything in it leave the Space read, tree, thread lists and default recall and become read-only, each Thread keeping its status. Org owner/admin or Space admin only, as the only change; refused while a Run in it is active"),
|
|
14297
14318
|
visibility: _enum(["open", "private"]).optional().describe("Space admin only: `private` limits the Topic (its threads, contributions, artifacts) to its roster plus Space/org admins; `open` shows it to every Space member again")
|
|
14298
14319
|
},
|
|
14299
14320
|
surfaces: ["mcp", "cli"],
|
|
@@ -16960,7 +16981,7 @@ var ACTIONS = ACTION_DEFINITIONS.map((action) => {
|
|
|
16960
16981
|
});
|
|
16961
16982
|
|
|
16962
16983
|
// ../actions/src/retention-entry.ts
|
|
16963
|
-
var ARBOR_VERSION = "0.24.
|
|
16984
|
+
var ARBOR_VERSION = "0.24.36";
|
|
16964
16985
|
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");
|
|
16965
16986
|
var retainSourceSchema = boolean2().optional().describe("edit: in checkpoint mode, retain this newly minted content revision's source");
|
|
16966
16987
|
var checkpointSchema = boolean2().optional().describe("edit: retain the exact current version source without incrementing content version");
|
|
@@ -17368,7 +17389,7 @@ function dispositionFilename(value) {
|
|
|
17368
17389
|
// package.json
|
|
17369
17390
|
var package_default = {
|
|
17370
17391
|
name: "@lambdacurry/arbor",
|
|
17371
|
-
version: "0.24.
|
|
17392
|
+
version: "0.24.36",
|
|
17372
17393
|
description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
|
|
17373
17394
|
keywords: [
|
|
17374
17395
|
"agents",
|
package/package.json
CHANGED