@lambdacurry/arbor 0.22.0 → 0.22.2

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 +150 -83
  2. package/package.json +2 -2
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.22.0",
5
+ version: "0.22.2",
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",
@@ -42,7 +42,7 @@ var package_default = {
42
42
  "just-bash": "3.4.2",
43
43
  tsx: "^4.20.6",
44
44
  typescript: "^5.8.0",
45
- vitest: "^4.1.4",
45
+ vitest: "^4.1.10",
46
46
  zod: "^4.4.3"
47
47
  },
48
48
  engines: {
@@ -4950,7 +4950,7 @@ var ERROR_REASONS = new Set([
4950
4950
  "provider.failure",
4951
4951
  "internal"
4952
4952
  ]);
4953
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/entity.js
4953
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/entity.js
4954
4954
  var entityKind = Symbol.for("drizzle:entityKind");
4955
4955
  var hasOwnEntityKind = Symbol.for("drizzle:hasOwnEntityKind");
4956
4956
  function is(value, type) {
@@ -4975,7 +4975,7 @@ function is(value, type) {
4975
4975
  return false;
4976
4976
  }
4977
4977
 
4978
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/column.js
4978
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/column.js
4979
4979
  class Column {
4980
4980
  constructor(table, config) {
4981
4981
  this.table = table;
@@ -5025,7 +5025,7 @@ class Column {
5025
5025
  }
5026
5026
  }
5027
5027
 
5028
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/column-builder.js
5028
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/column-builder.js
5029
5029
  class ColumnBuilder {
5030
5030
  static [entityKind] = "ColumnBuilder";
5031
5031
  config;
@@ -5081,38 +5081,39 @@ class ColumnBuilder {
5081
5081
  }
5082
5082
  }
5083
5083
 
5084
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/table.utils.js
5084
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/table.utils.js
5085
5085
  var TableName = Symbol.for("drizzle:Name");
5086
5086
 
5087
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/tracing-utils.js
5087
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/tracing-utils.js
5088
5088
  function iife(fn, ...args) {
5089
5089
  return fn(...args);
5090
5090
  }
5091
5091
 
5092
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/pg-core/columns/enum.js
5092
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/pg-core/columns/enum.js
5093
5093
  var isPgEnumSym = Symbol.for("drizzle:isPgEnum");
5094
5094
  function isPgEnum(obj) {
5095
5095
  return !!obj && typeof obj === "function" && isPgEnumSym in obj && obj[isPgEnumSym] === true;
5096
5096
  }
5097
5097
 
5098
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/subquery.js
5098
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/subquery.js
5099
5099
  class Subquery {
5100
5100
  static [entityKind] = "Subquery";
5101
- constructor(sql, selection, alias, isWith = false) {
5101
+ constructor(sql, fields, alias, isWith = false, usedTables = []) {
5102
5102
  this._ = {
5103
5103
  brand: "Subquery",
5104
5104
  sql,
5105
- selectedFields: selection,
5105
+ selectedFields: fields,
5106
5106
  alias,
5107
- isWith
5107
+ isWith,
5108
+ usedTables
5108
5109
  };
5109
5110
  }
5110
5111
  }
5111
5112
 
5112
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/version.js
5113
- var version2 = "0.38.4";
5113
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/version.js
5114
+ var version2 = "0.45.2";
5114
5115
 
5115
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/tracing.js
5116
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/tracing.js
5116
5117
  var otel;
5117
5118
  var rawTracer;
5118
5119
  var tracer = {
@@ -5139,10 +5140,10 @@ var tracer = {
5139
5140
  }
5140
5141
  };
5141
5142
 
5142
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/view-common.js
5143
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/view-common.js
5143
5144
  var ViewBaseConfig = Symbol.for("drizzle:ViewBaseConfig");
5144
5145
 
5145
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/table.js
5146
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/table.js
5146
5147
  var Schema = Symbol.for("drizzle:Schema");
5147
5148
  var Columns = Symbol.for("drizzle:Columns");
5148
5149
  var ExtraConfigColumns = Symbol.for("drizzle:ExtraConfigColumns");
@@ -5180,7 +5181,7 @@ class Table {
5180
5181
  }
5181
5182
  }
5182
5183
 
5183
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sql/sql.js
5184
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sql/sql.js
5184
5185
  function isSQLWrapper(value) {
5185
5186
  return value !== null && value !== undefined && typeof value.getSQL === "function";
5186
5187
  }
@@ -5213,10 +5214,17 @@ class StringChunk {
5213
5214
  class SQL {
5214
5215
  constructor(queryChunks) {
5215
5216
  this.queryChunks = queryChunks;
5217
+ for (const chunk of queryChunks) {
5218
+ if (is(chunk, Table)) {
5219
+ const schemaName = chunk[Table.Symbol.Schema];
5220
+ this.usedTables.push(schemaName === undefined ? chunk[Table.Symbol.Name] : schemaName + "." + chunk[Table.Symbol.Name]);
5221
+ }
5222
+ }
5216
5223
  }
5217
5224
  static [entityKind] = "SQL";
5218
5225
  decoder = noopDecoder;
5219
5226
  shouldInlineParams = false;
5227
+ usedTables = [];
5220
5228
  append(query) {
5221
5229
  this.queryChunks.push(...query.queryChunks);
5222
5230
  return this;
@@ -5275,7 +5283,7 @@ class SQL {
5275
5283
  const schemaName = chunk[Table.Symbol.Schema];
5276
5284
  const tableName = chunk[Table.Symbol.Name];
5277
5285
  return {
5278
- sql: schemaName === undefined ? escapeName(tableName) : escapeName(schemaName) + "." + escapeName(tableName),
5286
+ sql: schemaName === undefined || chunk[IsAlias] ? escapeName(tableName) : escapeName(schemaName) + "." + escapeName(tableName),
5279
5287
  params: []
5280
5288
  };
5281
5289
  }
@@ -5294,7 +5302,7 @@ class SQL {
5294
5302
  const schemaName = chunk[ViewBaseConfig].schema;
5295
5303
  const viewName = chunk[ViewBaseConfig].name;
5296
5304
  return {
5297
- sql: schemaName === undefined ? escapeName(viewName) : escapeName(schemaName) + "." + escapeName(viewName),
5305
+ sql: schemaName === undefined || chunk[ViewBaseConfig].isAlias ? escapeName(viewName) : escapeName(schemaName) + "." + escapeName(viewName),
5298
5306
  params: []
5299
5307
  };
5300
5308
  }
@@ -5533,7 +5541,7 @@ Subquery.prototype.getSQL = function() {
5533
5541
  return new SQL([this]);
5534
5542
  };
5535
5543
 
5536
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/alias.js
5544
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/alias.js
5537
5545
  class ColumnAliasProxyHandler {
5538
5546
  constructor(table) {
5539
5547
  this.table = table;
@@ -5589,12 +5597,12 @@ class TableAliasProxyHandler {
5589
5597
  }
5590
5598
  }
5591
5599
 
5592
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/alias.js
5600
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/alias.js
5593
5601
  function alias(table, alias2) {
5594
5602
  return new Proxy(table, new TableAliasProxyHandler(alias2, false));
5595
5603
  }
5596
5604
 
5597
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/checks.js
5605
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/checks.js
5598
5606
  class CheckBuilder {
5599
5607
  constructor(name, value) {
5600
5608
  this.name = name;
@@ -5621,15 +5629,16 @@ function check(name, value) {
5621
5629
  return new CheckBuilder(name, value);
5622
5630
  }
5623
5631
 
5624
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/utils.js
5632
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/utils.js
5625
5633
  function getColumnNameAndConfig(a, b) {
5626
5634
  return {
5627
5635
  name: typeof a === "string" && a.length > 0 ? a : "",
5628
5636
  config: typeof a === "object" ? a : b
5629
5637
  };
5630
5638
  }
5639
+ var textDecoder = typeof TextDecoder === "undefined" ? null : new TextDecoder;
5631
5640
 
5632
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/foreign-keys.js
5641
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/foreign-keys.js
5633
5642
  class ForeignKeyBuilder {
5634
5643
  static [entityKind] = "SQLiteForeignKeyBuilder";
5635
5644
  reference;
@@ -5683,12 +5692,12 @@ class ForeignKey {
5683
5692
  }
5684
5693
  }
5685
5694
 
5686
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/unique-constraint.js
5695
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/unique-constraint.js
5687
5696
  function uniqueKeyName(table, columns) {
5688
5697
  return `${table[TableName]}_${columns.join("_")}_unique`;
5689
5698
  }
5690
5699
 
5691
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/columns/common.js
5700
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/columns/common.js
5692
5701
  class SQLiteColumnBuilder extends ColumnBuilder {
5693
5702
  static [entityKind] = "SQLiteColumnBuilder";
5694
5703
  foreignKeyConfigs = [];
@@ -5739,7 +5748,7 @@ class SQLiteColumn extends Column {
5739
5748
  static [entityKind] = "SQLiteColumn";
5740
5749
  }
5741
5750
 
5742
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/columns/blob.js
5751
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/columns/blob.js
5743
5752
  class SQLiteBigIntBuilder extends SQLiteColumnBuilder {
5744
5753
  static [entityKind] = "SQLiteBigIntBuilder";
5745
5754
  constructor(name) {
@@ -5756,14 +5765,11 @@ class SQLiteBigInt extends SQLiteColumn {
5756
5765
  return "blob";
5757
5766
  }
5758
5767
  mapFromDriverValue(value) {
5759
- if (Buffer.isBuffer(value)) {
5760
- return BigInt(value.toString());
5761
- }
5762
- if (value instanceof ArrayBuffer) {
5763
- const decoder = new TextDecoder;
5764
- return BigInt(decoder.decode(value));
5768
+ if (typeof Buffer !== "undefined" && Buffer.from) {
5769
+ const buf = Buffer.isBuffer(value) ? value : value instanceof ArrayBuffer ? Buffer.from(value) : value.buffer ? Buffer.from(value.buffer, value.byteOffset, value.byteLength) : Buffer.from(value);
5770
+ return BigInt(buf.toString("utf8"));
5765
5771
  }
5766
- return BigInt(String.fromCodePoint(...value));
5772
+ return BigInt(textDecoder.decode(value));
5767
5773
  }
5768
5774
  mapToDriverValue(value) {
5769
5775
  return Buffer.from(value.toString());
@@ -5786,14 +5792,11 @@ class SQLiteBlobJson extends SQLiteColumn {
5786
5792
  return "blob";
5787
5793
  }
5788
5794
  mapFromDriverValue(value) {
5789
- if (Buffer.isBuffer(value)) {
5790
- return JSON.parse(value.toString());
5791
- }
5792
- if (value instanceof ArrayBuffer) {
5793
- const decoder = new TextDecoder;
5794
- return JSON.parse(decoder.decode(value));
5795
+ if (typeof Buffer !== "undefined" && Buffer.from) {
5796
+ const buf = Buffer.isBuffer(value) ? value : value instanceof ArrayBuffer ? Buffer.from(value) : value.buffer ? Buffer.from(value.buffer, value.byteOffset, value.byteLength) : Buffer.from(value);
5797
+ return JSON.parse(buf.toString("utf8"));
5795
5798
  }
5796
- return JSON.parse(String.fromCodePoint(...value));
5799
+ return JSON.parse(textDecoder.decode(value));
5797
5800
  }
5798
5801
  mapToDriverValue(value) {
5799
5802
  return Buffer.from(JSON.stringify(value));
@@ -5812,6 +5815,12 @@ class SQLiteBlobBufferBuilder extends SQLiteColumnBuilder {
5812
5815
 
5813
5816
  class SQLiteBlobBuffer extends SQLiteColumn {
5814
5817
  static [entityKind] = "SQLiteBlobBuffer";
5818
+ mapFromDriverValue(value) {
5819
+ if (Buffer.isBuffer(value)) {
5820
+ return value;
5821
+ }
5822
+ return Buffer.from(value);
5823
+ }
5815
5824
  getSQLType() {
5816
5825
  return "blob";
5817
5826
  }
@@ -5827,7 +5836,7 @@ function blob(a, b) {
5827
5836
  return new SQLiteBlobBufferBuilder(name);
5828
5837
  }
5829
5838
 
5830
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/columns/custom.js
5839
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/columns/custom.js
5831
5840
  class SQLiteCustomColumnBuilder extends SQLiteColumnBuilder {
5832
5841
  static [entityKind] = "SQLiteCustomColumnBuilder";
5833
5842
  constructor(name, fieldConfig, customTypeParams) {
@@ -5868,7 +5877,7 @@ function customType(customTypeParams) {
5868
5877
  };
5869
5878
  }
5870
5879
 
5871
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/columns/integer.js
5880
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/columns/integer.js
5872
5881
  class SQLiteBaseIntegerBuilder extends SQLiteColumnBuilder {
5873
5882
  static [entityKind] = "SQLiteBaseIntegerBuilder";
5874
5883
  constructor(name, dataType, columnType) {
@@ -5970,7 +5979,7 @@ function integer2(a, b) {
5970
5979
  return new SQLiteIntegerBuilder(name);
5971
5980
  }
5972
5981
 
5973
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/columns/numeric.js
5982
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/columns/numeric.js
5974
5983
  class SQLiteNumericBuilder extends SQLiteColumnBuilder {
5975
5984
  static [entityKind] = "SQLiteNumericBuilder";
5976
5985
  constructor(name) {
@@ -5983,15 +5992,64 @@ class SQLiteNumericBuilder extends SQLiteColumnBuilder {
5983
5992
 
5984
5993
  class SQLiteNumeric extends SQLiteColumn {
5985
5994
  static [entityKind] = "SQLiteNumeric";
5995
+ mapFromDriverValue(value) {
5996
+ if (typeof value === "string")
5997
+ return value;
5998
+ return String(value);
5999
+ }
6000
+ getSQLType() {
6001
+ return "numeric";
6002
+ }
6003
+ }
6004
+
6005
+ class SQLiteNumericNumberBuilder extends SQLiteColumnBuilder {
6006
+ static [entityKind] = "SQLiteNumericNumberBuilder";
6007
+ constructor(name) {
6008
+ super(name, "number", "SQLiteNumericNumber");
6009
+ }
6010
+ build(table) {
6011
+ return new SQLiteNumericNumber(table, this.config);
6012
+ }
6013
+ }
6014
+
6015
+ class SQLiteNumericNumber extends SQLiteColumn {
6016
+ static [entityKind] = "SQLiteNumericNumber";
6017
+ mapFromDriverValue(value) {
6018
+ if (typeof value === "number")
6019
+ return value;
6020
+ return Number(value);
6021
+ }
6022
+ mapToDriverValue = String;
5986
6023
  getSQLType() {
5987
6024
  return "numeric";
5988
6025
  }
5989
6026
  }
5990
- function numeric(name) {
5991
- return new SQLiteNumericBuilder(name ?? "");
6027
+
6028
+ class SQLiteNumericBigIntBuilder extends SQLiteColumnBuilder {
6029
+ static [entityKind] = "SQLiteNumericBigIntBuilder";
6030
+ constructor(name) {
6031
+ super(name, "bigint", "SQLiteNumericBigInt");
6032
+ }
6033
+ build(table) {
6034
+ return new SQLiteNumericBigInt(table, this.config);
6035
+ }
6036
+ }
6037
+
6038
+ class SQLiteNumericBigInt extends SQLiteColumn {
6039
+ static [entityKind] = "SQLiteNumericBigInt";
6040
+ mapFromDriverValue = BigInt;
6041
+ mapToDriverValue = String;
6042
+ getSQLType() {
6043
+ return "numeric";
6044
+ }
6045
+ }
6046
+ function numeric(a, b) {
6047
+ const { name, config } = getColumnNameAndConfig(a, b);
6048
+ const mode = config?.mode;
6049
+ return mode === "number" ? new SQLiteNumericNumberBuilder(name) : mode === "bigint" ? new SQLiteNumericBigIntBuilder(name) : new SQLiteNumericBuilder(name);
5992
6050
  }
5993
6051
 
5994
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/columns/real.js
6052
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/columns/real.js
5995
6053
  class SQLiteRealBuilder extends SQLiteColumnBuilder {
5996
6054
  static [entityKind] = "SQLiteRealBuilder";
5997
6055
  constructor(name) {
@@ -6012,7 +6070,7 @@ function real(name) {
6012
6070
  return new SQLiteRealBuilder(name ?? "");
6013
6071
  }
6014
6072
 
6015
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/columns/text.js
6073
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/columns/text.js
6016
6074
  class SQLiteTextBuilder extends SQLiteColumnBuilder {
6017
6075
  static [entityKind] = "SQLiteTextBuilder";
6018
6076
  constructor(name, config) {
@@ -6067,7 +6125,7 @@ function text(a, b = {}) {
6067
6125
  return new SQLiteTextBuilder(name, config);
6068
6126
  }
6069
6127
 
6070
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/columns/all.js
6128
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/columns/all.js
6071
6129
  function getSQLiteColumnBuilders() {
6072
6130
  return {
6073
6131
  blob,
@@ -6079,7 +6137,7 @@ function getSQLiteColumnBuilders() {
6079
6137
  };
6080
6138
  }
6081
6139
 
6082
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/table.js
6140
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/table.js
6083
6141
  var InlineForeignKeys = Symbol.for("drizzle:SQLiteInlineForeignKeys");
6084
6142
 
6085
6143
  class SQLiteTable extends Table {
@@ -6113,7 +6171,7 @@ var sqliteTable = (name, columns, extraConfig) => {
6113
6171
  return sqliteTableBase(name, columns, extraConfig);
6114
6172
  };
6115
6173
 
6116
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/indexes.js
6174
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/indexes.js
6117
6175
  class IndexBuilderOn {
6118
6176
  constructor(name, unique) {
6119
6177
  this.name = name;
@@ -6159,7 +6217,7 @@ function uniqueIndex(name) {
6159
6217
  return new IndexBuilderOn(name, true);
6160
6218
  }
6161
6219
 
6162
- // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_2d24ef0c7d82378656baf6d38a38bd13/node_modules/drizzle-orm/sqlite-core/primary-keys.js
6220
+ // ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_e3ffa19e92dda647278b0f9fbb1fe124/node_modules/drizzle-orm/sqlite-core/primary-keys.js
6163
6221
  function primaryKey(...config) {
6164
6222
  if (config[0].columns) {
6165
6223
  return new PrimaryKeyBuilder(config[0].columns, config[0].name);
@@ -8709,13 +8767,15 @@ var MCP_OUTPUT_SCHEMAS = {
8709
8767
  runId: id,
8710
8768
  runtime: computerRunRuntime,
8711
8769
  replayed: boolean2(),
8712
- snapshotId: id.nullable()
8770
+ snapshotId: id.nullable(),
8771
+ parentCheckpoint: string2().optional()
8713
8772
  }),
8714
8773
  computer_run_finish: looseObject({
8715
8774
  status: string2(),
8716
8775
  replayed: boolean2(),
8717
8776
  durability: computerRunDurability,
8718
- finishAssessment: computerRunFinishAssessment.nullable()
8777
+ finishAssessment: computerRunFinishAssessment.nullable(),
8778
+ parent: object({ checkpoint: string2(), stopped: boolean2() }).optional()
8719
8779
  }),
8720
8780
  computer_repo_work_status: looseObject({
8721
8781
  runId: id,
@@ -9168,7 +9228,8 @@ var OUTPUT_SHAPERS = {
9168
9228
  ["runId", run.runId],
9169
9229
  ["runtime", selected(run.runtime, ["state", "currentSnapshotId", "updatedAt"])],
9170
9230
  ["replayed", result.replayed],
9171
- ["snapshotId", result.snapshotId]
9231
+ ["snapshotId", result.snapshotId],
9232
+ ["parentCheckpoint", result.parentCheckpoint]
9172
9233
  ]);
9173
9234
  },
9174
9235
  computer_run_finish: (result) => {
@@ -9177,7 +9238,8 @@ var OUTPUT_SHAPERS = {
9177
9238
  ["status", run.status],
9178
9239
  ["replayed", result.replayed],
9179
9240
  ["durability", run.durability],
9180
- ["finishAssessment", result.finishAssessment]
9241
+ ["finishAssessment", result.finishAssessment],
9242
+ ["parent", result.parent]
9181
9243
  ]);
9182
9244
  },
9183
9245
  computer_exec: (result, input) => defined([
@@ -9429,14 +9491,14 @@ Arbor Computer is the complete software execution platform attached to Arbor's d
9429
9491
 
9430
9492
  ${ARBOR_FEEDBACK_GUIDANCE}
9431
9493
 
9432
- 1. ORIENT, CONFIGURE, AND AUTHORIZE. Start with provider-free get_computer(threadId) to inspect the effective inherited recipe, repository authorization, compatibility, recoverySafety, and durable lineage without contacting execution. Use set_organization_computer, set_space_computer, set_topic_computer, or set_thread_computer only when the corresponding complete sparse layer must be replaced; use github_repositories then github_connect_repository to authorize repositories at the narrowest scope that should inherit them. If github_repositories looks stale, github_refresh_installation reconciles the cached inventory from GitHub. attach_computer mints durable protocol identity without starting a runtime; computer_open attaches as needed and starts or resumes the project environment. Each returned repository entry includes verified root instruction pointers when that repo has an AGENTS.md: read surfaced repository instructions before substantial edits or verification, then check for a nearer nested AGENTS.md once the target path is known. Repo-local instructions/scripts/config beat guessed formatter, test, lint, or build commands.
9433
- 2. READ THE CAPABILITIES CARD, NOT THE BACKEND. computer_open and computer_status describe the live PARENT Thread Computer and return the exact computerSessionId for parent filesystem, command, checkpoint, Preview, bundle, and stop operations. computer_status does not establish isolated Run activity; use computer_run_receipt(runId) and computer_process_read for Run-owned work. Command-line utilities, including Git and package managers, run through computer_exec; check unfamiliar binaries with command -v.
9494
+ 1. ORIENT, CONFIGURE, AND AUTHORIZE. Start with provider-free get_computer(threadId) to inspect the effective inherited recipe, repository authorization, compatibility, recoverySafety, and durable lineage without contacting execution. Use set_organization_computer, set_space_computer, set_topic_computer, or set_thread_computer only when the corresponding complete sparse layer must be replaced; use github_repositories then github_connect_repository to authorize repositories at the narrowest scope that should inherit them. If github_repositories looks stale, github_refresh_installation reconciles the cached inventory from GitHub. computer_run_start(threadId, mode) is the front door: it attaches durable identity itself and starts an isolated write Run from the Thread's base snapshot without booting the parent; computer_open and attach_computer are deprecated aliases (AD-306). Each returned repository entry includes verified root instruction pointers when that repo has an AGENTS.md: read surfaced repository instructions before substantial edits or verification, then check for a nearer nested AGENTS.md once the target path is known. Repo-local instructions/scripts/config beat guessed formatter, test, lint, or build commands.
9495
+ 2. READ THE CAPABILITIES CARD, NOT THE BACKEND. runId is the one address: every runtime tool takes it, and the computerSessionId a Run carries is legacy input. computer_status(runId) describes the live PARENT Thread Computer behind a shared Run; it does not establish isolated Run activity, so use computer_run_receipt(runId) and computer_process_read for Run-owned work. Command-line utilities, including Git and package managers, run through computer_exec; check unfamiliar binaries with command -v.
9434
9496
  3. ONE RUN PER TASK. A write Run defaults to an isolated execution environment with its own filesystem, processes, ports, and /tmp while preserving /workspace paths; a read Run shares the parent. Pass runId to Run-aware tools. If a response is lost, recover the durable operation/process identity from computer_run_receipt and read it before retrying. computer_process_read and computer_process_terminate settle a provider-absent current-generation process from exact evidence; computer_run_suspend performs that bounded settlement internally and never replays unknown work. A still-active process returns a retryable busy state; an unknown current-generation mutation fail-closes. An isolated local commit or Preview is not Git publication; push coherent work and prove it with computer_repo_work_status before computer_run_finish destroys the final placement. discard=true with outcome failed or cancelled is the explicit choice to abandon unknown or proven non-durable work without replaying it.
9435
- 4. CHECKPOINT COMPLETE PARENT UNITS. computer_checkpoint advances immutable parent lineage after an intermediate complete unit; computer_stop performs the final checkpoint before teardown. An isolated Run Preview is durable review output, not adoption or a checkpoint. The internal provider-handle publication operations are not agent tools.
9497
+ 4. CHECKPOINT COMPLETE UNITS THROUGH THE RUN. computer_run_suspend(runId) checkpoints an intermediate complete unit — an isolated Run publishes its exact workspace and releases its Sandbox, a shared Run advances the parent lineage and computer_run_finish(runId) makes the final one; finishing the last active shared Run also stops the parent. computer_checkpoint and computer_stop are deprecated aliases. An isolated Run Preview is durable review output, not adoption or a checkpoint. The internal provider-handle publication operations are not agent tools.
9436
9498
  5. GIT AND GITHUB ARE ORDINARY COMMANDS AFTER AUTHORIZATION. Clone, fetch, pull, push, and gh run through computer_exec using a connected human's just-in-time ambient GitHub identity. Credentials never enter argv, workspace files, Git config, checkpoints, Events, logs, or receipts. A restored Computer deliberately keeps the checkout age of its snapshot, so fetch/pull before trusting remote state.
9437
9499
  6. VERIFY, PREVIEW, AND EXPORT. computer_verify captures a public URL directly without opening a project runtime. computer_publish_preview preserves immutable static output from either the parent or an active isolated write Run. computer_export moves bounded files into durable Thread Attachments; for a computer:// file Artifact asleep face, export the exact locator path .tldr and a same-Thread PNG, then use artifact set_snapshot. computer_export itself does not call set_snapshot; place returned Markdown exactly where the media belongs and cite the matching attachment ids.
9438
- 7. PACKAGE, DEPLOY, ACTIVATE, AND OPERATE APPS HERE. computer_publish_app_bundle creates the immutable executable bundle from verified parent bytes. For short-lived public Artifact experiments use preview_app_create/get/retire; for published Space Apps use app_create, app_config_apply, app_deploy, app_deployment_get, app_activate, app_get, app_fetch/app_request, app_rollback, app_set_access, app_reset_state/app_restore_state, and app_archive as one workflow-closed release surface. First-class Organization/Profile Secrets remain on Arbor's collaboration MCP because they are broader identity-owned resources; App configuration here references existing Secret ids and never accepts or returns secret material.
9439
- 8. FINISH WHAT YOU START. Stop the parent after its final complete unit, finish every Run, and preserve evidence before teardown. When reporting collaboration conclusions through Arbor, pass the producing computerSessionId and attachmentIds to contribute or respond.
9500
+ 7. PACKAGE, DEPLOY, ACTIVATE, AND OPERATE APPS HERE. computer_publish_app_bundle creates the immutable executable bundle from verified parent bytes through a shared write Run: push isolated work, computer_run_start with execution shared, pull, then publish. For short-lived public Artifact experiments use preview_app_create/get/retire; for published Space Apps use app_create, app_config_apply, app_deploy, app_deployment_get, app_activate, app_get, app_fetch/app_request, app_rollback, app_set_access, app_reset_state/app_restore_state, and app_archive as one workflow-closed release surface. First-class Organization/Profile Secrets remain on Arbor's collaboration MCP because they are broader identity-owned resources; App configuration here references existing Secret ids and never accepts or returns secret material.
9501
+ 8. FINISH WHAT YOU START. Finish every Run the last active shared Run's finish stops the parent — and preserve evidence before teardown. When reporting collaboration conclusions through Arbor, pass the producing computerSessionId and attachmentIds to contribute or respond.
9440
9502
  9. CLOSE OUT ARBOR DOGFOOD. When developing Arbor through Arbor, ask: “Did Arbor itself create meaningful friction or require an Arbor-specific workaround?” If yes, apply the classifier above and file one bounded report before closing the development loop; keep unrelated product friction out of the implementation Thread. If no, close normally without manufacturing feedback.`;
9441
9503
  var PROSE_LISTS = registry();
9442
9504
  function proseList(description) {
@@ -10128,7 +10190,7 @@ var ACTION_DEFINITIONS = [
10128
10190
  {
10129
10191
  name: "attach_computer",
10130
10192
  title: "Attach a Thread computer",
10131
- description: "Create or reuse a Thread's stable Computer identity and mint an immutable collaborator receipt without starting provider runtime. Normally computer_open performs this attachment as part of opening; use this tool only when durable protocol identity is needed separately.",
10193
+ description: "Deprecated by AD-306: computer_run_start(threadId) attaches durable identity itself, so use this only to mint protocol identity with no Run at all. Creates or reuses the Thread's stable Computer identity and an immutable collaborator receipt without starting provider runtime.",
10132
10194
  inputSchema: {
10133
10195
  threadId: string2().describe("the Thread whose computer you are attaching, thr_…")
10134
10196
  },
@@ -10139,7 +10201,7 @@ var ACTION_DEFINITIONS = [
10139
10201
  {
10140
10202
  name: "computer_open",
10141
10203
  title: "Open a Thread computer",
10142
- description: "Open a usable Thread workspace with verified root repository instruction pointers; omit the key to retry the same logical open, with unsafe recovery refused. A successful open means the first allowed exec can proceed: Compatible execution is selected internally, additive authorized repository drift auto-reconciles, and unresolved newer workspace state stays fail-closed.",
10204
+ description: "Deprecated by AD-306: start work with computer_run_start(threadId, mode) instead; this alias remains one release and boots the parent Thread Computer, returning a computerSessionId. Use it only for a legacy client that still addresses the parent by cms_ id; unsafe recovery is refused and unresolved newer workspace state stays fail-closed.",
10143
10205
  inputSchema: {
10144
10206
  threadId: string2().describe("the Arbor Thread whose stable computer to open, thr_…"),
10145
10207
  idempotencyKey: string2().trim().min(1).max(200).optional().describe("optional explicit key for ONE distinct logical open; omission reuses the durable profile/Thread/recipe identity; changed options require a distinct intent; retry unchanged after response loss and never mint a new key to bypass unresolved work"),
@@ -10186,7 +10248,7 @@ var ACTION_DEFINITIONS = [
10186
10248
  {
10187
10249
  name: "computer_run_suspend",
10188
10250
  title: "Suspend a run",
10189
- description: "Checkpoint an active isolated WRITE Run's exact workspace, publish that restore point, and release its Sandbox during an external wait; the same runId resumes on the next operation. Performs bounded process read/terminate/settlement internally: suspends when settled, returns retryable busy if a process is active, or fail-closes on unknown mutation and never replays unknown work.",
10251
+ description: "Checkpoint an active WRITE Run for an external wait (the same runId resumes next): an isolated Run publishes its exact workspace and releases its Sandbox, a shared Run checkpoints the parent lineage. Performs bounded process read/terminate/settlement internally: suspends when settled, returns retryable busy if a process is active, or fail-closes on unknown mutation and never replays unknown work.",
10190
10252
  inputSchema: {
10191
10253
  runId: string2().describe("the active isolated WRITE Run to suspend, run_…")
10192
10254
  },
@@ -10208,7 +10270,7 @@ var ACTION_DEFINITIONS = [
10208
10270
  {
10209
10271
  name: "computer_run_finish",
10210
10272
  title: "Finish a run",
10211
- description: "Finish a Run with an explicit terminal outcome; ordinary finish refuses unsettled operations and proven non-durable isolated WRITE work. To abandon an unknown or non-durable disposable Run without replaying it, pass discard=true with outcome failed or cancelled; the receipt preserves unknown operation and durability evidence, and repeating the same outcome is a safe no-op.",
10273
+ description: "Finish a Run with an explicit terminal outcome; ordinary finish refuses unsettled operations and proven non-durable isolated WRITE work, and the last shared Run's finish also stops the parent. To abandon an unknown or non-durable disposable Run without replaying it, pass discard=true with outcome failed or cancelled; the receipt keeps the evidence and repeating the outcome is a safe no-op.",
10212
10274
  inputSchema: {
10213
10275
  runId: string2().describe("the runId returned by computer_run_start, run_…"),
10214
10276
  outcome: _enum(["finished", "failed", "cancelled"]).optional().describe("terminal outcome; defaults to finished"),
@@ -10233,9 +10295,10 @@ var ACTION_DEFINITIONS = [
10233
10295
  {
10234
10296
  name: "computer_runs",
10235
10297
  title: "List runs",
10236
- description: "List active or recent Runs for this Thread Computer when deciding whether to resume existing work or start another unit. Returns each Run's mode, execution placement, workspace identity, and lifecycle status.",
10298
+ description: "List active or recent Runs on the Computer that owns runId when deciding whether to resume existing work or start another unit. Returns each Run's mode, execution placement, workspace identity, and lifecycle status.",
10237
10299
  inputSchema: {
10238
- computerSessionId: string2().describe("the computerSessionId returned by computer_open, cms_…"),
10300
+ runId: string2().optional().describe("any Run on the Computer to list, run_…"),
10301
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…"),
10239
10302
  status: _enum(["active", "finished", "failed", "cancelled"]).optional().describe("filter to one lifecycle status"),
10240
10303
  limit: number2().int().min(1).max(100).optional().describe("rows to return (default 20)")
10241
10304
  },
@@ -10246,9 +10309,9 @@ var ACTION_DEFINITIONS = [
10246
10309
  {
10247
10310
  name: "computer_exec",
10248
10311
  title: "Run a command",
10249
- description: "Run one bounded shell operation in a parent Computer or Run with ambient GitHub authorization for connected humans. A long command returns processId if still running — poll computer_process_read (background:true skips the wait; timeout kills the process); after a missed isolated response use computer_run_receipt.operations[].operationId with computer_process_read instead of repeating the mutation.",
10312
+ description: "Run one bounded shell operation in a Run (pass runId) with ambient GitHub authorization for connected humans. A long command returns processId if still running — poll computer_process_read (background:true skips the wait; timeout kills the process); after a missed isolated response use computer_run_receipt.operations[].operationId with computer_process_read instead of repeating the mutation.",
10250
10313
  inputSchema: {
10251
- computerSessionId: string2().optional().describe("the computerSessionId returned by computer_open, cms_…; required unless runId is supplied"),
10314
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
10252
10315
  command: string2().min(1).describe("the shell command to run"),
10253
10316
  runId: string2().optional().describe("route this command according to this Run execution placement, run_… (from computer_run_start)"),
10254
10317
  cwd: string2().optional().describe("working directory under /workspace, or under the run; omit to use defaultCwd"),
@@ -10267,7 +10330,7 @@ var ACTION_DEFINITIONS = [
10267
10330
  title: "Read a background process",
10268
10331
  description: "Read one provider-owned process from computer_exec, including a recovered Run operation, using nextCursor for incremental output. Successful Run reads durably retain the latest provider observation; a later timeout stays unknown and unsafe while returning it with age, and Arbor settles the durable operation only from terminal or exact provider-absence proof.",
10269
10332
  inputSchema: {
10270
- computerSessionId: string2().optional().describe("the computerSessionId returned by computer_open, cms_…; required unless runId is supplied"),
10333
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
10271
10334
  runId: string2().optional().describe("the Run that owns this process, if it was started inside a Run"),
10272
10335
  processId: string2().min(1).describe("the processId returned by background exec, or matching computer_run_receipt.operations[].operationId for recovered foreground Run work, proc_…"),
10273
10336
  cursor: string2().optional().describe("continue after nextCursor from the prior process read; omit for a small latest tail"),
@@ -10282,7 +10345,7 @@ var ACTION_DEFINITIONS = [
10282
10345
  title: "Terminate a background process",
10283
10346
  description: "Terminate a background process started by computer_exec when it should no longer run, stopping the provider-owned process tree without shell PIDs or ps/kill. Repeating terminate for an already-absent or already-complete process is a no-op that settles that exact durable operation from the available evidence.",
10284
10347
  inputSchema: {
10285
- computerSessionId: string2().optional().describe("the computerSessionId returned by computer_open, cms_…; required unless runId is supplied"),
10348
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
10286
10349
  runId: string2().optional().describe("the Run that owns this process, if it was started inside a Run"),
10287
10350
  processId: string2().min(1).describe("the opaque processId returned by computer_exec(background=true), proc_…")
10288
10351
  },
@@ -10293,9 +10356,10 @@ var ACTION_DEFINITIONS = [
10293
10356
  {
10294
10357
  name: "computer_status",
10295
10358
  title: "Inspect a computer",
10296
- description: "Inspect the live PARENT Thread Computer's capabilities, live can-I-exec readiness, processes, and profile. Transient session unavailability drops command capabilities and may retry computer_open once; a terminal unknown mutation is a non-retryable stop — this does not report isolated Run command state, so use computer_run_receipt for Run state or get_computer for restore-safety.",
10359
+ description: "Inspect the live PARENT Thread Computer behind runId: capabilities, live can-I-exec readiness, processes, and profile. It does not report isolated Run command state (computer_run_receipt) or restore-safety (get_computer); transient unavailability drops command capabilities, and a terminal unknown mutation is a non-retryable stop.",
10297
10360
  inputSchema: {
10298
- computerSessionId: string2().describe("the computerSessionId returned by computer_open, cms_…")
10361
+ runId: string2().optional().describe("the Run whose parent Computer to inspect, run_…"),
10362
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…")
10299
10363
  },
10300
10364
  surfaces: ["computer-mcp", "computer-cli"],
10301
10365
  toolset: "loop",
@@ -10388,7 +10452,7 @@ var ACTION_DEFINITIONS = [
10388
10452
  title: "Export a Thread file",
10389
10453
  description: "Export one bounded file from the parent Computer or a Run as a durable Thread Attachment, with ready-to-place attachments[].markdown to put exactly where the media belongs and a downloadUrl you can GET with your own Arbor credential to see it yourself. For a Layer 1 snapshot, export the computer:// .tldr locator path and a same-Thread PNG, then use artifact set_snapshot; this never mints.",
10390
10454
  inputSchema: {
10391
- computerSessionId: string2().optional().describe("the computerSessionId returned by computer_open, cms_…; required unless runId is supplied"),
10455
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
10392
10456
  runId: string2().optional().describe("route this export according to this Run execution placement, run_…"),
10393
10457
  path: string2().describe("absolute path to one supported file under /workspace"),
10394
10458
  description: string2().min(1).max(500).describe("concise description of what the file shows or contains; becomes image alt text, a video caption, and the Artifact summary"),
@@ -10403,7 +10467,7 @@ var ACTION_DEFINITIONS = [
10403
10467
  title: "Write a project file",
10404
10468
  description: "Write or replace one file in the parent Computer or a Run when the Computer surface is your filesystem editing path. Routes by runId when supplied and supports UTF-8 or explicit base64 bytes.",
10405
10469
  inputSchema: {
10406
- computerSessionId: string2().optional().describe("the computerSessionId returned by computer_open, cms_…; required unless runId is supplied"),
10470
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required unless runId is supplied"),
10407
10471
  path: string2().describe("absolute path under /workspace, or a path inside the run"),
10408
10472
  runId: string2().optional().describe("route this write according to this Run execution placement, run_… (from computer_run_start)"),
10409
10473
  content: string2().describe("complete UTF-8 content, or base64 bytes when encoding=base64"),
@@ -10416,9 +10480,10 @@ var ACTION_DEFINITIONS = [
10416
10480
  {
10417
10481
  name: "computer_checkpoint",
10418
10482
  title: "Checkpoint completed work",
10419
- description: "Checkpoint a completed unit from the live parent Thread Computer into durable Thread lineage when more parent work will follow. It is not Run-scoped; isolated Run work must be made durable through its repository workflow, and running background processes can block the checkpoint.",
10483
+ description: "Deprecated by AD-306: computer_run_suspend(runId) checkpoints a shared write Run's parent lineage and computer_run_finish makes the final one. Still checkpoints the live parent for a shared write Run (runId) or a legacy computerSessionId; isolated Runs are refused, and a running background process can block it.",
10420
10484
  inputSchema: {
10421
- computerSessionId: string2().describe("the computerSessionId returned by computer_open, cms_…")
10485
+ runId: string2().optional().describe("an active shared write Run whose parent lineage to checkpoint, run_…"),
10486
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…")
10422
10487
  },
10423
10488
  surfaces: ["computer-mcp", "computer-cli"],
10424
10489
  toolset: "loop",
@@ -10429,7 +10494,7 @@ var ACTION_DEFINITIONS = [
10429
10494
  title: "Publish an immutable static Preview",
10430
10495
  description: "Publish one checked HTML file or bounded static directory as a private immutable Preview for review. Parent publication checkpoints first; isolated Run publication freezes that Run's bytes without adopting it, and the returned arborthreads.dev URL survives teardown.",
10431
10496
  inputSchema: {
10432
- computerSessionId: string2().optional().describe("the computerSessionId returned by computer_open, cms_…; required for parent publication, optional when runId is supplied"),
10497
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…; required for parent publication, optional when runId is supplied"),
10433
10498
  runId: string2().optional().describe("active isolated write Run whose static workspace bytes should be published as review output"),
10434
10499
  path: string2().describe("absolute path to one HTML file or static build directory under /workspace"),
10435
10500
  title: string2().min(1).max(160).describe("short factual Preview title"),
@@ -10442,9 +10507,10 @@ var ACTION_DEFINITIONS = [
10442
10507
  {
10443
10508
  name: "computer_publish_app_bundle",
10444
10509
  title: "Publish an immutable AppBundle",
10445
- description: "Publish a content-addressed AppBundle from the live parent Computer after a green build when an ArtifactVersion is ready for app deployment; Arbor selects or acquires compatible bun-typescript-v1 execution internally. Verifies entry bytes against the ArtifactVersion, captures source/Git provenance and static assets, and returns bundleId; isolated Runs are not accepted.",
10510
+ description: "Publish an immutable AppBundle from the parent Computer behind a shared write Run (runId) after a green build when an ArtifactVersion is ready; Arbor acquires compatible bun-typescript-v1 execution internally. Verifies entry bytes against the ArtifactVersion, captures source/Git provenance and static assets, and returns bundleId; isolated Runs are refused, so push and start a shared Run first.",
10446
10511
  inputSchema: {
10447
- computerSessionId: string2().describe("the computerSessionId returned by computer_open, cms_…"),
10512
+ runId: string2().optional().describe("an active shared write Run on the parent whose bytes to publish, run_…"),
10513
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…"),
10448
10514
  artifactVersionId: string2().describe("the source ArtifactVersion, artv_…"),
10449
10515
  entryPath: string2().describe("absolute TypeScript/JavaScript Worker entry under /workspace"),
10450
10516
  assetsPath: string2().optional().describe("optional absolute static-asset directory under /workspace"),
@@ -10480,9 +10546,10 @@ var ACTION_DEFINITIONS = [
10480
10546
  {
10481
10547
  name: "computer_stop",
10482
10548
  title: "Checkpoint and stop",
10483
- description: "Checkpoint and stop an opened parent Computer after the final unit of work. Teardown is refused if checkpoint durability fails or a background process is still running, so state is not silently discarded.",
10549
+ description: "Deprecated by AD-306: finishing the last active shared Run with computer_run_finish(runId) performs the final checkpoint and stops the parent. Still checkpoints and stops the parent for a shared write Run (runId) or a legacy computerSessionId, refusing teardown when durability fails or a background process is running.",
10484
10550
  inputSchema: {
10485
- computerSessionId: string2().describe("the computerSessionId returned by computer_open, cms_…")
10551
+ runId: string2().optional().describe("an active shared write Run whose parent to checkpoint and stop, run_…"),
10552
+ computerSessionId: string2().optional().describe("legacy alternative to runId: a computerSessionId on that Computer, cms_…")
10486
10553
  },
10487
10554
  surfaces: ["computer-mcp", "computer-cli"],
10488
10555
  toolset: "loop",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.22.0",
3
+ "version": "0.22.2",
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",
@@ -40,7 +40,7 @@
40
40
  "just-bash": "3.4.2",
41
41
  "tsx": "^4.20.6",
42
42
  "typescript": "^5.8.0",
43
- "vitest": "^4.1.4",
43
+ "vitest": "^4.1.10",
44
44
  "zod": "^4.4.3"
45
45
  },
46
46
  "engines": {