@lambdacurry/arbor 0.21.20 → 0.21.22

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 +51 -8
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -2112,6 +2112,32 @@ var computerSnapshots = sqliteTable("computer_snapshots", {
2112
2112
  runIdx: index("computer_snapshots_run_idx").on(t.runId, t.createdAt),
2113
2113
  parentIdx: index("computer_snapshots_parent_idx").on(t.parentSnapshotId)
2114
2114
  }));
2115
+ var computerRunStarts = sqliteTable("computer_run_starts", {
2116
+ id: text("id").primaryKey(),
2117
+ computerId: text("computer_id").notNull().references(() => threadComputers.id),
2118
+ threadId: text("thread_id").notNull().references(() => threads.id),
2119
+ originatingSessionId: text("originating_session_id").notNull().references(() => computerSessions.id),
2120
+ profileId: text("profile_id").notNull().references(() => profiles.id),
2121
+ executionContextId: text("execution_context_id").notNull().references(() => executionContexts.id),
2122
+ idempotencyKey: text("idempotency_key").notNull(),
2123
+ idempotencyFingerprint: text("idempotency_fingerprint").notNull(),
2124
+ mode: text("mode").$type().notNull(),
2125
+ execution: text("execution").$type().notNull(),
2126
+ label: text("label"),
2127
+ checkpointLineageKey: text("checkpoint_lineage_key"),
2128
+ checkpointExpectedCurrentSnapshotId: text("checkpoint_expected_current_snapshot_id").references(() => computerSnapshots.id),
2129
+ checkpointParentSnapshotId: text("checkpoint_parent_snapshot_id").references(() => computerSnapshots.id),
2130
+ snapshotId: text("snapshot_id").references(() => computerSnapshots.id),
2131
+ runId: text("run_id").references(() => computerRuns.id),
2132
+ createdAt: ts("created_at").notNull(),
2133
+ updatedAt: ts("updated_at").notNull()
2134
+ }, (t) => ({
2135
+ idempotencyIdx: uniqueIndex("computer_run_starts_idempotency_idx").on(t.threadId, t.profileId, t.idempotencyKey),
2136
+ threadIdx: index("computer_run_starts_thread_idx").on(t.threadId, t.createdAt),
2137
+ checkpointLineageIdx: uniqueIndex("computer_run_starts_checkpoint_lineage_idx").on(t.checkpointLineageKey),
2138
+ snapshotIdx: index("computer_run_starts_snapshot_idx").on(t.snapshotId),
2139
+ runIdx: uniqueIndex("computer_run_starts_run_idx").on(t.runId)
2140
+ }));
2115
2141
  var previews = sqliteTable("previews", {
2116
2142
  id: text("id").primaryKey(),
2117
2143
  threadId: text("thread_id").notNull().references(() => threads.id),
@@ -2771,6 +2797,7 @@ var watches = sqliteTable("watches", {
2771
2797
  watchTargetIdx: index("watches_target_idx").on(t.targetType, t.targetId)
2772
2798
  }));
2773
2799
  // ../core/src/ops/computer-run.ts
2800
+ var COMPUTER_RUN_START_CHECKPOINT_RESERVATION_STALE_MS = 12 * 60 * 1000;
2774
2801
  var TERMINAL = new Set(["finished", "failed", "cancelled"]);
2775
2802
  var RUN_LIFECYCLE_TYPES = new Set(["run.started", "run.finished", "run.failed", "run.cancelled"]);
2776
2803
  var COMPUTER_RUN_ACTIVITY_LABEL_MAX = 120;
@@ -17843,6 +17870,8 @@ var MCP_OUTPUT_SCHEMAS = {
17843
17870
  scope: exports_external.literal("global"),
17844
17871
  forum: exports_external.looseObject({ title: exports_external.string(), purpose: nullableString }),
17845
17872
  topics: exports_external.array(jsonObject),
17873
+ total: exports_external.number().int().min(0).optional(),
17874
+ nextCursor: exports_external.string().optional(),
17846
17875
  privacy: exports_external.string()
17847
17876
  }),
17848
17877
  feedback_recall: exports_external.looseObject({
@@ -17856,7 +17885,10 @@ var MCP_OUTPUT_SCHEMAS = {
17856
17885
  canonicalThreadId: id,
17857
17886
  thread: jsonObject,
17858
17887
  topic: jsonObject,
17859
- contributions: exports_external.array(jsonObject),
17888
+ contributions: exports_external.array(jsonObject).optional(),
17889
+ recentContributions: exports_external.array(jsonObject).optional(),
17890
+ contributionPage: exports_external.looseObject({ total: exports_external.number().int().min(0), nextCursor: nullableString }).optional(),
17891
+ contributionCount: exports_external.number().int().min(0).optional(),
17860
17892
  mergedFrom: exports_external.array(jsonObject),
17861
17893
  redirects: exports_external.array(jsonObject),
17862
17894
  privacy: exports_external.string()
@@ -18319,7 +18351,9 @@ var MCP_OUTPUT_SCHEMAS = {
18319
18351
  ]).optional()
18320
18352
  }),
18321
18353
  computer_run_start: exports_external.object({
18354
+ runStartId: id,
18322
18355
  runId: id,
18356
+ replayed: exports_external.boolean(),
18323
18357
  execution: exports_external.enum(["shared", "isolated"]),
18324
18358
  durability: computerRunDurabilitySummary,
18325
18359
  status: exports_external.string()
@@ -18713,7 +18747,9 @@ var OUTPUT_SHAPERS = {
18713
18747
  const run = record2(result.run) ?? {};
18714
18748
  const durability = record2(run.durability) ?? {};
18715
18749
  return defined([
18750
+ ["runStartId", result.runStartId],
18716
18751
  ["runId", run.runId],
18752
+ ["replayed", result.replayed],
18717
18753
  ["execution", run.execution],
18718
18754
  [
18719
18755
  "durability",
@@ -19196,10 +19232,12 @@ var ACTION_DEFINITIONS = [
19196
19232
  {
19197
19233
  name: "feedback_tree",
19198
19234
  title: "Browse the shared Arbor Feedback forum",
19199
- description: "Browse the global Arbor Feedback forum by Topic and optional Thread roster; the global scope is implied and no Space id is required. New reports appear as their own shared Threads as submitted; private receipt metadata and reviewer diagnostics are never returned.",
19235
+ description: "Browse the global Arbor Feedback forum; Topics page by default, and depth=threads requires topicId to page one shared Thread roster (all=true is the only unscoped complete enumeration). New reports appear as their own shared Threads as submitted; private receipt metadata and reviewer diagnostics are never returned.",
19200
19236
  inputSchema: {
19201
- depth: exports_external.enum(["topics", "threads"]).optional().describe("topics (default) or threads to include each Topic's shared Thread roster"),
19202
- includeArchived: exports_external.boolean().optional().describe("include archived Topics/Threads for historical moderation or lookup (default false)")
19237
+ depth: exports_external.enum(["topics", "threads"]).optional().describe("topics (default) or threads for one explicitly selected Feedback Topic"),
19238
+ topicId: exports_external.string().optional().describe("depth=threads only: shared Feedback Topic whose Thread roster to page"),
19239
+ includeArchived: exports_external.boolean().optional().describe("include archived Topics/Threads for historical moderation or lookup (default false)"),
19240
+ ...PAGINATION_INPUT
19203
19241
  },
19204
19242
  surfaces: ["mcp", "cli"],
19205
19243
  toolset: "feedback",
@@ -19221,10 +19259,14 @@ var ACTION_DEFINITIONS = [
19221
19259
  {
19222
19260
  name: "feedback_thread_get",
19223
19261
  title: "Read a shared Arbor Feedback thread",
19224
- description: "Read one shared Arbor Feedback Thread, following a merge redirect to its canonical destination while preserving shared provenance. A newly filed report appears here as submitted; private receipt ids, reporter organization metadata, diagnostics, and private associations are not projected.",
19262
+ description: "Read one shared Arbor Feedback Thread, following merge redirects while preserving shared provenance; MCP/CLI/API default to compact recent context, while view=full pages sanitized Contributions and all=true returns complete history. Private receipt ids, reporter organization metadata, diagnostics, and private associations are never projected.",
19225
19263
  inputSchema: {
19226
- threadId: exports_external.string().describe("the shared Feedback Thread id, thr_…")
19264
+ threadId: exports_external.string().describe("the shared Feedback Thread id, thr_…"),
19265
+ view: exports_external.enum(["full", "compact"]).optional().describe("MCP/CLI/API default compact; full pages the shared Contribution transcript"),
19266
+ recentLimit: exports_external.number().int().min(1).max(20).optional().describe("compact reads only: latest shared Contributions to include (default 6, max 20)"),
19267
+ ...PAGINATION_INPUT
19227
19268
  },
19269
+ externalReadDefaults: { view: EXTERNAL_DEFAULT_THREAD_VIEW },
19228
19270
  surfaces: ["mcp", "cli"],
19229
19271
  toolset: "feedback",
19230
19272
  run: forward("feedback.thread_get")
@@ -19659,12 +19701,13 @@ var ACTION_DEFINITIONS = [
19659
19701
  {
19660
19702
  name: "computer_run_start",
19661
19703
  title: "Start a run",
19662
- description: "Start one bounded unit of work inside an opened Thread Computer. Write Runs default to isolated; if isolated provisioning fails after the durable Run exists, the error returns its runId and points to computer_run_receipt so the caller can inspect the terminal reason without listing or guessing.",
19704
+ description: "Start one bounded unit of work inside an opened Thread Computer with a caller-owned idempotency key so response loss can recover zero-or-one Run creation without listing. Write Runs default isolated; post-creation provisioning failures keep returning the exact runId and computer_run_receipt recovery.",
19663
19705
  inputSchema: {
19664
19706
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
19665
19707
  mode: exports_external.enum(["read", "write"]).describe("write for mutable work; read for shared inspection"),
19666
19708
  execution: exports_external.enum(["shared", "isolated"]).optional().describe("write Run placement; defaults to isolated. Use shared only for intentional live collaboration on the Thread Computer"),
19667
- label: exports_external.string().max(120).optional().describe("short factual label for this unit of work")
19709
+ label: exports_external.string().max(120).optional().describe("short factual label for this unit of work"),
19710
+ idempotencyKey: exports_external.string().min(1).max(200).describe("stable key for this ONE logical Run-start request; reuse it unchanged for retries")
19668
19711
  },
19669
19712
  surfaces: ["computer-mcp", "computer-cli"],
19670
19713
  toolset: "loop",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.21.20",
3
+ "version": "0.21.22",
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",