@lambdacurry/arbor 0.20.10 → 0.20.12

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 +120 -18
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -754,6 +754,33 @@ function alias(table, alias2) {
754
754
  return new Proxy(table, new TableAliasProxyHandler(alias2, false));
755
755
  }
756
756
 
757
+ // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_885285c61ee4b1c788385eea24f801ee/node_modules/drizzle-orm/sqlite-core/checks.js
758
+ class CheckBuilder {
759
+ constructor(name, value) {
760
+ this.name = name;
761
+ this.value = value;
762
+ }
763
+ static [entityKind] = "SQLiteCheckBuilder";
764
+ brand;
765
+ build(table) {
766
+ return new Check(table, this);
767
+ }
768
+ }
769
+
770
+ class Check {
771
+ constructor(table, builder) {
772
+ this.table = table;
773
+ this.name = builder.name;
774
+ this.value = builder.value;
775
+ }
776
+ static [entityKind] = "SQLiteCheck";
777
+ name;
778
+ value;
779
+ }
780
+ function check(name, value) {
781
+ return new CheckBuilder(name, value);
782
+ }
783
+
757
784
  // ../../node_modules/.pnpm/drizzle-orm@0.38.4_@cloudflare+workers-types@4.20260529.1_@prisma+client@5.22.0_@types+_885285c61ee4b1c788385eea24f801ee/node_modules/drizzle-orm/utils.js
758
785
  function getColumnNameAndConfig(a, b) {
759
786
  return {
@@ -1742,7 +1769,8 @@ var previewVersions = sqliteTable("preview_versions", {
1742
1769
  fileCount: integer("file_count").notNull(),
1743
1770
  byteCount: integer("byte_count").notNull(),
1744
1771
  computerSessionId: text("computer_session_id").notNull().references(() => computerSessions.id),
1745
- snapshotId: text("snapshot_id").notNull().references(() => computerSnapshots.id),
1772
+ snapshotId: text("snapshot_id").references(() => computerSnapshots.id),
1773
+ runId: text("run_id").references(() => computerRuns.id),
1746
1774
  publishedByProfileId: text("published_by_profile_id").notNull().references(() => profiles.id),
1747
1775
  idempotencyKey: text("idempotency_key"),
1748
1776
  idempotencyFingerprint: text("idempotency_fingerprint"),
@@ -1755,7 +1783,9 @@ var previewVersions = sqliteTable("preview_versions", {
1755
1783
  hostIdx: uniqueIndex("preview_versions_host_idx").on(t.hostLabel),
1756
1784
  sessionIdx: index("preview_versions_session_idx").on(t.computerSessionId, t.createdAt),
1757
1785
  idempotencyIdx: uniqueIndex("preview_versions_idempotency_idx").on(t.computerSessionId, t.publishedByProfileId, t.idempotencyKey),
1758
- snapshotIdx: index("preview_versions_snapshot_idx").on(t.snapshotId)
1786
+ snapshotIdx: index("preview_versions_snapshot_idx").on(t.snapshotId),
1787
+ runIdx: index("preview_versions_run_idx").on(t.runId),
1788
+ sourceCheck: check("preview_versions_source_check", sql`(${t.snapshotId} is not null and ${t.runId} is null) or (${t.snapshotId} is null and ${t.runId} is not null)`)
1759
1789
  }));
1760
1790
  var previewVersionFiles = sqliteTable("preview_version_files", {
1761
1791
  versionId: text("version_id").notNull().references(() => previewVersions.id),
@@ -2532,7 +2562,7 @@ __export(exports_external, {
2532
2562
  clone: () => clone,
2533
2563
  cidrv6: () => cidrv62,
2534
2564
  cidrv4: () => cidrv42,
2535
- check: () => check,
2565
+ check: () => check2,
2536
2566
  catch: () => _catch2,
2537
2567
  boolean: () => boolean2,
2538
2568
  bigint: () => bigint2,
@@ -14649,7 +14679,7 @@ __export(exports_schemas2, {
14649
14679
  codec: () => codec,
14650
14680
  cidrv6: () => cidrv62,
14651
14681
  cidrv4: () => cidrv42,
14652
- check: () => check,
14682
+ check: () => check2,
14653
14683
  catch: () => _catch2,
14654
14684
  boolean: () => boolean2,
14655
14685
  bigint: () => bigint2,
@@ -14941,8 +14971,8 @@ var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
14941
14971
  reg.add(this, meta2);
14942
14972
  return this;
14943
14973
  },
14944
- refine(check, params) {
14945
- return this.check(refine(check, params));
14974
+ refine(check2, params) {
14975
+ return this.check(refine(check2, params));
14946
14976
  },
14947
14977
  superRefine(refinement, params) {
14948
14978
  return this.check(superRefine(refinement, params));
@@ -16084,7 +16114,7 @@ var ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => {
16084
16114
  ZodType.init(inst, def);
16085
16115
  inst._zod.processJSONSchema = (ctx, json, params) => customProcessor(inst, ctx, json, params);
16086
16116
  });
16087
- function check(fn) {
16117
+ function check2(fn) {
16088
16118
  const ch = new $ZodCheck({
16089
16119
  check: "custom"
16090
16120
  });
@@ -16765,6 +16795,60 @@ var computerProfile = exports_external.looseObject({
16765
16795
  tools: exports_external.array(exports_external.string()),
16766
16796
  recommendedEditingPrimitive: exports_external.string()
16767
16797
  });
16798
+ var computerRunPublicationState = exports_external.enum(["not-required", "durable", "not-durable", "unknown"]);
16799
+ var computerRunDurability = exports_external.looseObject({
16800
+ workspace: exports_external.enum(["shared", "isolated"]),
16801
+ parentMutation: exports_external.enum(["direct", "none"]),
16802
+ providerExecution: exports_external.enum(["parent", "disposable"]),
16803
+ finishDestroysExecution: exports_external.boolean(),
16804
+ baseSnapshotId: id.nullable(),
16805
+ gitPublication: exports_external.looseObject({
16806
+ state: computerRunPublicationState,
16807
+ reasonCode: exports_external.string()
16808
+ })
16809
+ });
16810
+ var computerRunFinishAssessment = exports_external.looseObject({
16811
+ state: exports_external.enum(["safe", "blocked", "unknown"]),
16812
+ requiresDiscard: exports_external.boolean(),
16813
+ repositories: exports_external.array(exports_external.looseObject({
16814
+ repository: exports_external.string(),
16815
+ path: exports_external.string(),
16816
+ startHead: exports_external.string().nullable(),
16817
+ currentHead: exports_external.string().nullable(),
16818
+ currentDirty: exports_external.boolean().nullable(),
16819
+ changedSinceStart: exports_external.boolean().nullable(),
16820
+ publication: exports_external.looseObject({
16821
+ state: computerRunPublicationState,
16822
+ reasonCode: exports_external.string(),
16823
+ remoteRef: exports_external.string().optional()
16824
+ })
16825
+ }))
16826
+ });
16827
+ var operatingGuidanceEntry = exports_external.looseObject({
16828
+ class: exports_external.literal("guidance"),
16829
+ scope: exports_external.enum(["space", "topic"]),
16830
+ sourceId: id,
16831
+ strength: exports_external.literal("recommended"),
16832
+ message: exports_external.string()
16833
+ });
16834
+ var computerAgentBrief = exports_external.looseObject({
16835
+ work: exports_external.looseObject({ threadId: id, title: exports_external.string(), objective: exports_external.string() }),
16836
+ guidance: exports_external.array(operatingGuidanceEntry),
16837
+ computer: exports_external.looseObject({
16838
+ computerId: id,
16839
+ backend: exports_external.enum(["worker-shell", "container"]),
16840
+ containerProfile: exports_external.string().nullable(),
16841
+ repositories: exports_external.array(exports_external.looseObject({ repository: exports_external.string(), path: exports_external.string() })),
16842
+ durableSnapshotId: id.nullable()
16843
+ }),
16844
+ activeRuns: exports_external.array(exports_external.looseObject({
16845
+ runId: id,
16846
+ label: exports_external.string().nullable(),
16847
+ mode: exports_external.enum(["read", "write"]),
16848
+ execution: exports_external.enum(["shared", "isolated"]),
16849
+ status: exports_external.enum(["active", "finished", "failed", "cancelled"])
16850
+ }))
16851
+ });
16768
16852
  var computerRunGitStart = exports_external.looseObject({
16769
16853
  repositories: exports_external.array(exports_external.looseObject({
16770
16854
  repository: exports_external.string(),
@@ -16790,6 +16874,7 @@ var computerRun = exports_external.looseObject({
16790
16874
  workspaceDir: exports_external.string(),
16791
16875
  baseSnapshotId: id.nullable(),
16792
16876
  gitStart: computerRunGitStart.nullable().optional(),
16877
+ durability: computerRunDurability,
16793
16878
  status: exports_external.enum(["active", "finished", "failed", "cancelled"]),
16794
16879
  label: exports_external.string().nullable(),
16795
16880
  reason: exports_external.string().nullable(),
@@ -16812,6 +16897,8 @@ var computerRunReceipt = exports_external.looseObject({
16812
16897
  workspace: exports_external.looseObject({ dir: exports_external.string() }),
16813
16898
  baseSnapshotId: id.nullable(),
16814
16899
  gitStart: computerRunGitStart.nullable().optional(),
16900
+ durability: computerRunDurability,
16901
+ finishAssessment: computerRunFinishAssessment.nullable(),
16815
16902
  status: exports_external.enum(["active", "finished", "failed", "cancelled"]),
16816
16903
  outcome: exports_external.enum(["finished", "failed", "cancelled"]).nullable(),
16817
16904
  reason: exports_external.string().nullable(),
@@ -17420,6 +17507,7 @@ var MCP_OUTPUT_SCHEMAS = {
17420
17507
  repositories: exports_external.array(exports_external.looseObject({ repository: exports_external.string(), path: exports_external.string() })),
17421
17508
  defaultCwd: exports_external.string(),
17422
17509
  capabilities: computerCapabilityCard,
17510
+ agentBrief: computerAgentBrief,
17423
17511
  runtime: jsonObject,
17424
17512
  reconciliation: exports_external.looseObject({
17425
17513
  action: exports_external.literal("automatic_reprovision"),
@@ -17433,11 +17521,15 @@ var MCP_OUTPUT_SCHEMAS = {
17433
17521
  execution: exports_external.enum(["shared", "isolated"]),
17434
17522
  baseSnapshotId: id.nullable(),
17435
17523
  gitStart: computerRunGitStart.nullable().optional(),
17524
+ durability: computerRunDurability,
17525
+ guidance: exports_external.array(operatingGuidanceEntry),
17436
17526
  status: exports_external.string()
17437
17527
  }),
17438
17528
  computer_run_finish: exports_external.looseObject({
17439
17529
  status: exports_external.string(),
17440
- replayed: exports_external.boolean()
17530
+ replayed: exports_external.boolean(),
17531
+ durability: computerRunDurability,
17532
+ finishAssessment: computerRunFinishAssessment.nullable()
17441
17533
  }),
17442
17534
  computer_run_receipt: exports_external.looseObject({
17443
17535
  receipt: computerRunReceipt
@@ -17489,6 +17581,7 @@ var MCP_OUTPUT_SCHEMAS = {
17489
17581
  backend: exports_external.enum(["worker-shell", "container"]),
17490
17582
  profile: computerProfile.nullable(),
17491
17583
  capabilities: computerCapabilityCard,
17584
+ agentBrief: computerAgentBrief,
17492
17585
  runtime: jsonObject
17493
17586
  }),
17494
17587
  computer_verify: exports_external.looseObject({
@@ -17527,9 +17620,12 @@ var MCP_OUTPUT_SCHEMAS = {
17527
17620
  manifestDigest: exports_external.string(),
17528
17621
  fileCount: exports_external.number(),
17529
17622
  byteCount: exports_external.number(),
17530
- snapshotId: id,
17623
+ snapshotId: id.optional(),
17624
+ runId: id.optional(),
17531
17625
  published: exports_external.boolean(),
17532
17626
  replayed: exports_external.boolean()
17627
+ }).refine((value) => Boolean(value.snapshotId) !== Boolean(value.runId), {
17628
+ message: "Preview output requires exactly one provenance source: snapshotId or runId"
17533
17629
  }),
17534
17630
  computer_publish_app_bundle: exports_external.looseObject({
17535
17631
  bundleId: id,
@@ -17640,6 +17736,8 @@ var OUTPUT_SHAPERS = {
17640
17736
  ["execution", run.execution],
17641
17737
  ["baseSnapshotId", run.baseSnapshotId],
17642
17738
  ["gitStart", run.gitStart],
17739
+ ["durability", run.durability],
17740
+ ["guidance", result.guidance],
17643
17741
  ["status", run.status]
17644
17742
  ]);
17645
17743
  },
@@ -17647,7 +17745,9 @@ var OUTPUT_SHAPERS = {
17647
17745
  const run = record2(result.run) ?? {};
17648
17746
  return defined([
17649
17747
  ["status", run.status],
17650
- ["replayed", result.replayed]
17748
+ ["replayed", result.replayed],
17749
+ ["durability", run.durability],
17750
+ ["finishAssessment", result.finishAssessment]
17651
17751
  ]);
17652
17752
  },
17653
17753
  computer_exec: (result, input) => defined([
@@ -18188,7 +18288,7 @@ var ACTION_DEFINITIONS = [
18188
18288
  {
18189
18289
  name: "computer_open",
18190
18290
  title: "Open a Thread computer",
18191
- description: "Open or resume this Thread's project environment for filesystem or command work. A safe living-profile revision drift is reconciled automatically by replacing the generation, restoring supported state, and returning reconciliation metadata; structural recipe changes still fail explicitly with computer_reprovision as the suggested action. Every configured repository is re-authorized through its explicit GitHub connection; a fresh reusable base clones it with a request-scoped contents:read credential before strict setup runs, while a restore receives no credential. Returns computerSessionId — pass it unchanged to later Computer tools and cited work — plus the selected profile contract (including GitHub CLI (gh) on bun-typescript-v1), a resolved capabilities card, workspaceRoot, each materialized repositories[].path, and defaultCwd. Omitted computer_exec.cwd uses defaultCwd: the single checkout when exactly one repository is configured, workspaceRoot otherwise.",
18291
+ description: "Open or resume this Thread's project environment for filesystem or command work. A safe living-profile revision drift is reconciled automatically by replacing the generation, restoring supported state, and returning reconciliation metadata; structural recipe changes still fail explicitly with computer_reprovision as the suggested action. Every configured repository is re-authorized through its explicit GitHub connection; a fresh reusable base clones it with a request-scoped contents:read credential before strict setup runs, while a restore receives no credential. Returns computerSessionId — pass it unchanged to later Computer tools and cited work — plus a compact Agent Brief with Thread objective, scoped Space/Topic guidance and provenance, durable parent snapshot, repositories, and active Runs; the selected profile contract; a resolved capabilities card; workspaceRoot; each materialized repositories[].path; and defaultCwd. Omitted computer_exec.cwd uses defaultCwd: the single checkout when exactly one repository is configured, workspaceRoot otherwise.",
18192
18292
  inputSchema: {
18193
18293
  threadId: exports_external.string().describe("the Arbor Thread whose stable computer to open, thr_…"),
18194
18294
  vcpus: exports_external.number().int().min(1).max(4).optional().describe("optional container vCPU request"),
@@ -18214,7 +18314,7 @@ var ACTION_DEFINITIONS = [
18214
18314
  {
18215
18315
  name: "computer_run_start",
18216
18316
  title: "Start a run",
18217
- description: "Start one unit of work inside an opened Thread computer. Write Runs default to isolated execution restored from the Computer's current base snapshot, so independent work does not collide. For intentional live collaboration, pass execution='shared' and the Run works directly in the Thread Computer alongside other shared Runs. Read Runs always share. All placements present the same /workspace layout; pass runId to Run-aware Computer operations and Arbor routes them correctly. Finish every Run with computer_run_finish, which destroys its isolated environment. This creates no second Thread or durable Computer.",
18317
+ description: "Start one unit of work inside an opened Thread computer. Write Runs default to isolated execution restored from the Computer's current base snapshot, so independent work does not collide. For intentional live collaboration, pass execution='shared' and the Run works directly in the Thread Computer alongside other shared Runs. Read Runs always share. All placements present the same /workspace layout; pass runId to Run-aware Computer operations and Arbor routes them correctly. An isolated WRITE Run does not mutate the parent Computer, its provider environment is disposable, and finish destroys that environment. The start result states those durability facts and returns the inherited scoped guidance; follow any durability-first project guidance before broad validation. Git publication remains unknown until Arbor can prove a clean changed HEAD exists on the configured remote; a local commit, isolated filesystem, or Preview is not that proof. This creates no second Thread or durable Computer.",
18218
18318
  inputSchema: {
18219
18319
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18220
18320
  mode: exports_external.enum(["read", "write"]).describe("write for mutable work; read for shared inspection"),
@@ -18228,11 +18328,12 @@ var ACTION_DEFINITIONS = [
18228
18328
  {
18229
18329
  name: "computer_run_finish",
18230
18330
  title: "Finish a run",
18231
- description: "Close a Run with its terminal outcome and the one line that explains it. Finishing an isolated write Run destroys its execution environment, so push or otherwise publish anything that must outlive the Run before finishing it. Repeating the same outcome is a safe no-op, and it keeps the reason the first caller settled a different one conflicts. Say what happened in reason: it is what computer_run_receipt shows a reader who was not here.",
18331
+ description: "Close a Run with its terminal outcome and the one line that explains it. Before destroying an isolated WRITE environment, Arbor inspects bounded Git state: newly dirty work or a live remote check proving the new HEAD is absent blocks ordinary finish. Publication uncertainty remains explicitly unknown. Pass discard=true only when intentionally destroying work Arbor proved non-durable. Repeating the same outcome is a safe no-op, and the terminal receipt preserves the durability assessment.",
18232
18332
  inputSchema: {
18233
18333
  runId: exports_external.string().describe("the runId returned by computer_run_start, run_…"),
18234
18334
  outcome: exports_external.enum(["finished", "failed", "cancelled"]).optional().describe("terminal outcome; defaults to finished"),
18235
- reason: exports_external.string().max(500).optional().describe("one factual line on how this unit of work ended, e.g. what shipped or what broke")
18335
+ reason: exports_external.string().max(500).optional().describe("one factual line on how this unit of work ended, e.g. what shipped or what broke"),
18336
+ discard: exports_external.boolean().optional().describe("explicitly allow teardown when Arbor proved current Run work is not durable")
18236
18337
  },
18237
18338
  surfaces: ["computer-mcp", "computer-cli"],
18238
18339
  toolset: "loop",
@@ -18241,7 +18342,7 @@ var ACTION_DEFINITIONS = [
18241
18342
  {
18242
18343
  name: "computer_run_receipt",
18243
18344
  title: "Read a run receipt",
18244
- description: "READ ONLY: read one run's compact receipt — its purpose, actor, computer session, base snapshot and starting Git projection, execution placement, meaningful activity, and terminal outcome. Background work may appear as distilled labels/outcomes, but Arbor keeps no raw command transcript or process output. The receipt stays readable after the Run is terminal.",
18345
+ description: "READ ONLY: read one run's compact receipt — its purpose, actor, computer session, base snapshot and starting Git projection, explicit isolation/durability contract, pre-teardown durability assessment when available (including publication that remains unknown unless proven), meaningful activity, and terminal outcome. Background work may appear as distilled labels/outcomes, but Arbor keeps no raw command transcript or process output. The receipt stays readable after the Run is terminal.",
18245
18346
  inputSchema: {
18246
18347
  runId: exports_external.string().describe("the run to read, run_… (from computer_run_start or computer_runs)")
18247
18348
  },
@@ -18446,9 +18547,10 @@ var ACTION_DEFINITIONS = [
18446
18547
  {
18447
18548
  name: "computer_publish_preview",
18448
18549
  title: "Publish an immutable static Preview",
18449
- description: "Publish one checked HTML file or bounded static build directory from the live parent Thread Computer as a private immutable Preview after checkpointing its source. This is intentionally not Run-scoped yet; an isolated Run must not silently publish stale parent files or imply integration. The returned arborthreads.dev URL survives computer teardown; put it on its own line to show the interactive Preview card. A directory must contain index.html, use relative local asset URLs, and cannot include dotfiles, source maps, secrets, symlinks, or server code. Supply one stable idempotencyKey per logical publication: safe retries return the original immutable URL, while reusing the key for another path/title conflicts.",
18550
+ description: "Publish one checked HTML file or bounded static build directory as a private immutable Preview. Parent publication uses computerSessionId, checkpoints the source into Thread lineage, then publishes it. Isolated Run publication uses runId, freezes that Run's exact static bytes without checkpointing, adopting the Run, or advancing parent lineage, and remains durable after the Run is destroyed. The returned arborthreads.dev URL survives teardown; put it on its own line to show the interactive Preview card. A directory must contain index.html, use relative local asset URLs, and cannot include dotfiles, source maps, secrets, symlinks, or server code. Supply one stable idempotencyKey per logical publication: safe retries return the original immutable URL, while reusing the key for another path/title or Run fork conflicts.",
18450
18551
  inputSchema: {
18451
- computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_"),
18552
+ computerSessionId: exports_external.string().optional().describe("the computerSessionId returned by computer_open, cms_…; required for parent publication, optional when runId is supplied"),
18553
+ runId: exports_external.string().optional().describe("active isolated write Run whose static workspace bytes should be published as review output"),
18452
18554
  path: exports_external.string().describe("absolute path to one HTML file or static build directory under /workspace"),
18453
18555
  title: exports_external.string().min(1).max(160).describe("short factual Preview title"),
18454
18556
  idempotencyKey: exports_external.string().min(1).max(200).describe("stable key for this ONE logical publication (≤200 chars); reuse it only to retry the same path and title")
@@ -18460,7 +18562,7 @@ var ACTION_DEFINITIONS = [
18460
18562
  {
18461
18563
  name: "computer_publish_app_bundle",
18462
18564
  title: "Publish an immutable AppBundle",
18463
- description: "From the live parent Thread Computer, after a Bun container build is green, verify that entryPath bytes exactly match the referenced ArtifactVersion. This is intentionally not Run-scoped yet; isolated Run publication requires a separate integration/provenance decision. Then capture source hashes plus Git/workspace provenance, then freeze the Worker module and optional static assets into a content-addressed AppBundle. A mismatch is rejected; dirty or untracked source is allowed but returned as an explicit warning. Use the returned bundleId with app_deploy; retries require the same idempotencyKey.",
18565
+ description: "From the live parent Thread Computer, after a Bun container build is green, verify that entryPath bytes exactly match the referenced ArtifactVersion, then capture source hashes plus Git/workspace provenance, then freeze the Worker module and optional static assets into a content-addressed AppBundle. A mismatch is rejected; dirty or untracked source is allowed but returned as an explicit warning. Use the returned bundleId with app_deploy; retries require the same idempotencyKey. AppBundle publication remains intentionally parent-only; an isolated Run Preview is review output and does not adopt the Run.",
18464
18566
  inputSchema: {
18465
18567
  computerSessionId: exports_external.string().describe("the computerSessionId returned by computer_open, cms_…"),
18466
18568
  artifactVersionId: exports_external.string().describe("the source ArtifactVersion, artv_…"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.20.10",
3
+ "version": "0.20.12",
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",