@lambdacurry/arbor 0.24.13 → 0.24.15

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 +49 -2
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -646,7 +646,7 @@ function dispositionFilename(value) {
646
646
  // package.json
647
647
  var package_default = {
648
648
  name: "@lambdacurry/arbor",
649
- version: "0.24.13",
649
+ version: "0.24.15",
650
650
  description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
651
651
  keywords: [
652
652
  "agents",
@@ -10432,6 +10432,11 @@ function buildOutputSchemas() {
10432
10432
  execution: _enum(["completed", "running"]).optional(),
10433
10433
  nextAction: literal("computer_process_read").optional()
10434
10434
  });
10435
+ const computerRunSaveSkip = looseObject({
10436
+ state: literal("skipped"),
10437
+ lastDurableSnapshotId: id.nullable(),
10438
+ unsavedChanges: literal("not-saved-by-close")
10439
+ });
10435
10440
  const computerRunReceipt = looseObject({
10436
10441
  runId: id,
10437
10442
  threadId: id,
@@ -10472,6 +10477,7 @@ function buildOutputSchemas() {
10472
10477
  outcome: _enum(["finished", "failed", "cancelled"]).nullable(),
10473
10478
  reason: string2().nullable(),
10474
10479
  reasonCode: string2().nullable(),
10480
+ save: computerRunSaveSkip.nullable(),
10475
10481
  operations: array(looseObject({
10476
10482
  operationId: string2(),
10477
10483
  kind: literal("exec"),
@@ -11721,6 +11727,16 @@ function buildOutputSchemas() {
11721
11727
  parentCheckpoint: string2().optional(),
11722
11728
  parentAsleep: boolean2().optional()
11723
11729
  }),
11730
+ computer_run_promote: looseObject({
11731
+ snapshotId: id,
11732
+ previousSnapshotId: id,
11733
+ computerId: id,
11734
+ generation: number2(),
11735
+ sourceRunId: id,
11736
+ sourceSnapshotId: id,
11737
+ promotedAt: string2(),
11738
+ replayed: boolean2()
11739
+ }),
11724
11740
  computer_run_finish: looseObject({
11725
11741
  runId: id,
11726
11742
  status: string2(),
@@ -11728,6 +11744,7 @@ function buildOutputSchemas() {
11728
11744
  durability: computerRunDurability,
11729
11745
  finishAssessment: computerRunFinishAssessment.nullable(),
11730
11746
  finishRequest: computerRunFinishRequest.nullable(),
11747
+ save: computerRunSaveSkip.optional(),
11731
11748
  parent: object({
11732
11749
  checkpoint: string2().nullable(),
11733
11750
  stopped: boolean2(),
@@ -12349,6 +12366,19 @@ var OUTPUT_SHAPERS = {
12349
12366
  ["parentAsleep", result.parentAsleep]
12350
12367
  ]);
12351
12368
  },
12369
+ computer_run_promote: (result) => {
12370
+ const promotion = record2(result.promotion) ?? {};
12371
+ return defined([
12372
+ ["snapshotId", promotion.snapshotId],
12373
+ ["previousSnapshotId", promotion.previousSnapshotId],
12374
+ ["computerId", promotion.computerId],
12375
+ ["generation", promotion.generation],
12376
+ ["sourceRunId", promotion.sourceRunId],
12377
+ ["sourceSnapshotId", promotion.sourceSnapshotId],
12378
+ ["promotedAt", promotion.promotedAt],
12379
+ ["replayed", result.replayed]
12380
+ ]);
12381
+ },
12352
12382
  computer_run_finish: (result) => {
12353
12383
  const run = record2(result.run) ?? {};
12354
12384
  return defined([
@@ -12358,6 +12388,7 @@ var OUTPUT_SHAPERS = {
12358
12388
  ["durability", run.durability],
12359
12389
  ["finishAssessment", result.finishAssessment],
12360
12390
  ["finishRequest", result.finishRequest ?? null],
12391
+ ["save", result.save],
12361
12392
  ["parent", result.parent]
12362
12393
  ]);
12363
12394
  },
@@ -12585,6 +12616,7 @@ var MCP_TOOL_ANNOTATIONS = {
12585
12616
  computer_reprovision: destructiveIdempotent,
12586
12617
  computer_run_start: idempotent,
12587
12618
  computer_run_suspend: idempotent,
12619
+ computer_run_promote: idempotent,
12588
12620
  computer_repo_work_status: readOnly,
12589
12621
  computer_run_finish: idempotent,
12590
12622
  computer_run_receipt: readOnly,
@@ -13794,6 +13826,20 @@ var ACTION_DEFINITIONS = [
13794
13826
  toolset: "loop",
13795
13827
  run: forward("computer_runtime.run_suspend")
13796
13828
  },
13829
+ {
13830
+ name: "computer_run_promote",
13831
+ title: "Promote a Run checkpoint",
13832
+ description: "Make YOUR active isolated Run's last saved checkpoint (not later edits) the shared Thread Computer's next head, fast-forward only; default new isolated Runs and the parent's next wake start from it. Refused with nothing changed unless the Run started from expectedHeadSnapshotId, the head is unmoved, and the shared Computer is asleep with no open shared Run or pending work; never merges.",
13833
+ inputSchema: {
13834
+ runId: string2().describe("YOUR active isolated WRITE Run whose checkpoint to promote, run_…"),
13835
+ sourceSnapshotId: string2().describe("the exact checkpoint you expect to promote (the Run receipt's runtime.currentSnapshotId), cps_…; refused if it moved"),
13836
+ expectedHeadSnapshotId: string2().describe("the shared checkpoint head this Run started from and will replace (the Run's baseSnapshotId), cps_…; refused if the head moved"),
13837
+ idempotencyKey: string2().min(1).max(200).describe("stable key for this ONE logical promotion; a retry with the same inputs returns the original result")
13838
+ },
13839
+ surfaces: ["computer-mcp", "computer-cli"],
13840
+ toolset: "loop",
13841
+ run: forward("computer_runtime.run_promote")
13842
+ },
13797
13843
  {
13798
13844
  name: "computer_repo_work_status",
13799
13845
  title: "Inspect repository finish state",
@@ -13813,7 +13859,8 @@ var ACTION_DEFINITIONS = [
13813
13859
  runId: string2().describe("the runId returned by computer_run_start, run_…"),
13814
13860
  outcome: _enum(["finished", "failed", "cancelled"]).optional().describe("terminal outcome; defaults to finished"),
13815
13861
  reason: string2().trim().max(500).optional().describe("required for a new finish intent: accomplishments and useful outcomes or limits; exact accepted legacy retries reuse their original text or omission"),
13816
- discard: boolean2().optional().describe("explicitly abandon this Run's workspace only after provider quiescence; requires outcome failed or cancelled and never overrides active or unknown execution")
13862
+ discard: boolean2().optional().describe("explicitly abandon this Run's workspace only after provider quiescence; requires outcome failed or cancelled and never overrides active or unknown execution"),
13863
+ save: boolean2().optional().describe("false closes without the final checkpoint and deletes nothing: receipt records reasonCode run.closed_without_save and save.lastDurableSnapshotId; shared or suspended Runs only; not with discard")
13817
13864
  },
13818
13865
  surfaces: ["computer-mcp", "computer-cli"],
13819
13866
  toolset: "loop",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.24.13",
3
+ "version": "0.24.15",
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",