@lambdacurry/arbor 0.13.2 → 0.13.4

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 +534 -12
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -1809,6 +1809,7 @@ var appBundles = sqliteTable("app_bundles", {
1809
1809
  mainModule: text("main_module").notNull(),
1810
1810
  modules: text("modules", { mode: "json" }).$type().notNull(),
1811
1811
  staticAssets: text("static_assets", { mode: "json" }).$type().notNull(),
1812
+ buildProvenance: text("build_provenance", { mode: "json" }).$type(),
1812
1813
  runtimeEntrypoint: text("runtime_entrypoint").$type().notNull(),
1813
1814
  capabilityRequirements: text("capability_requirements", { mode: "json" }).$type().notNull().default([]),
1814
1815
  stateSchemaVersion: integer("state_schema_version").notNull().default(0),
@@ -1839,14 +1840,17 @@ var apps = sqliteTable("apps", {
1839
1840
  access: text("access").$type().notNull(),
1840
1841
  discovery: text("discovery").$type(),
1841
1842
  activeDeploymentId: text("active_deployment_id"),
1843
+ pendingActivationDeploymentId: text("pending_activation_deployment_id"),
1842
1844
  runtimeProvider: text("runtime_provider").$type().notNull(),
1843
1845
  runtimeHealth: text("runtime_health").$type().notNull().default("unknown"),
1844
1846
  runtimeHealthUpdatedAt: ts("runtime_health_updated_at"),
1845
1847
  stateMode: text("state_mode").$type().notNull(),
1846
1848
  stateIdentity: text("state_identity").notNull(),
1847
1849
  stateGeneration: integer("state_generation").notNull().default(0),
1850
+ pendingStateResetId: text("pending_state_reset_id"),
1848
1851
  currentStateSchemaVersion: integer("current_state_schema_version").notNull().default(0),
1849
1852
  deploymentRevision: integer("deployment_revision").notNull().default(0),
1853
+ metadataRevision: integer("metadata_revision").notNull().default(0),
1850
1854
  createdByProfileId: text("created_by_profile_id").notNull().references(() => profiles.id),
1851
1855
  createdExecutionContextId: text("created_execution_context_id").notNull().references(() => executionContexts.id),
1852
1856
  createdAt: ts("created_at").notNull(),
@@ -1889,9 +1893,15 @@ var appStateResets = sqliteTable("app_state_resets", {
1889
1893
  resetByProfileId: text("reset_by_profile_id").notNull().references(() => profiles.id),
1890
1894
  resetExecutionContextId: text("reset_execution_context_id").notNull().references(() => executionContexts.id),
1891
1895
  providerReceipt: text("provider_receipt", { mode: "json" }).$type().notNull(),
1892
- createdAt: ts("created_at").notNull()
1896
+ status: text("status").$type().notNull().default("completed"),
1897
+ activeDeploymentId: text("active_deployment_id"),
1898
+ deploymentRevision: integer("deployment_revision"),
1899
+ targetStateSchemaVersion: integer("target_state_schema_version"),
1900
+ createdAt: ts("created_at").notNull(),
1901
+ completedAt: ts("completed_at")
1893
1902
  }, (t) => ({
1894
1903
  idempotencyUq: uniqueIndex("app_state_resets_idempotency_uq").on(t.appId, t.resetByProfileId, t.idempotencyKey),
1904
+ generationUq: uniqueIndex("app_state_resets_generation_uq").on(t.appId, t.fromGeneration),
1895
1905
  appIdx: index("app_state_resets_app_idx").on(t.appId, t.createdAt)
1896
1906
  }));
1897
1907
  var appViewerGrantUses = sqliteTable("app_viewer_grant_uses", {
@@ -1948,7 +1958,7 @@ var events = sqliteTable("events", {
1948
1958
  payload: text("payload", { mode: "json" }).$type().notNull().default({}),
1949
1959
  createdAt: ts("created_at").notNull()
1950
1960
  }, (t) => ({
1951
- objectIdx: index("events_object_idx").on(t.objectType, t.objectId),
1961
+ objectIdx: index("events_object_idx").on(t.objectType, t.objectId, t.createdAt),
1952
1962
  createdIdx: index("events_created_idx").on(t.createdAt)
1953
1963
  }));
1954
1964
  var notifications = sqliteTable("notifications", {
@@ -16425,6 +16435,509 @@ function date4(params) {
16425
16435
 
16426
16436
  // ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
16427
16437
  config(en_default());
16438
+ // ../actions/src/output-schemas.ts
16439
+ var id = exports_external.string();
16440
+ var timestamp = exports_external.string();
16441
+ var nullableString = exports_external.string().nullable();
16442
+ var jsonObject = exports_external.looseObject({});
16443
+ var spaceRef = exports_external.looseObject({ id, title: nullableString });
16444
+ var recallHit = exports_external.looseObject({
16445
+ id,
16446
+ objectType: exports_external.string(),
16447
+ tier: exports_external.string(),
16448
+ score: exports_external.number(),
16449
+ excerpt: exports_external.string(),
16450
+ space: spaceRef.nullable(),
16451
+ url: exports_external.string(),
16452
+ createdAt: timestamp
16453
+ });
16454
+ var contributionRef = exports_external.looseObject({
16455
+ id,
16456
+ objectType: exports_external.string(),
16457
+ excerpt: exports_external.string(),
16458
+ url: exports_external.string(),
16459
+ createdAt: timestamp,
16460
+ space: spaceRef.nullable(),
16461
+ crossSpace: exports_external.boolean()
16462
+ });
16463
+ var reactionCount = exports_external.looseObject({ emoji: exports_external.string(), count: exports_external.number(), reacted: exports_external.boolean() });
16464
+ var computerConfig = exports_external.looseObject({
16465
+ backend: exports_external.enum(["worker-shell", "container"]),
16466
+ containerProfile: nullableString,
16467
+ setupScript: nullableString,
16468
+ repositories: exports_external.array(exports_external.string())
16469
+ });
16470
+ var computerConfigLayer = exports_external.looseObject({
16471
+ id,
16472
+ scope: exports_external.string(),
16473
+ scopeId: id,
16474
+ config: jsonObject,
16475
+ version: exports_external.number(),
16476
+ updatedAt: timestamp
16477
+ });
16478
+ var snapshot = exports_external.looseObject({
16479
+ id,
16480
+ ownerScope: exports_external.enum(["topic-base", "thread-checkpoint"]),
16481
+ provider: exports_external.string(),
16482
+ providerRef: exports_external.string()
16483
+ });
16484
+ var attachment2 = exports_external.looseObject({
16485
+ attachmentId: id,
16486
+ filename: exports_external.string(),
16487
+ description: exports_external.string(),
16488
+ mimeType: exports_external.string(),
16489
+ size: exports_external.number(),
16490
+ sha256: exports_external.string(),
16491
+ downloadUrl: exports_external.string(),
16492
+ markdown: exports_external.string()
16493
+ });
16494
+ var checkpoint = exports_external.looseObject({
16495
+ kind: exports_external.enum(["topic-base", "thread-checkpoint"]),
16496
+ backup: exports_external.string(),
16497
+ published: jsonObject
16498
+ });
16499
+ var profile2 = exports_external.looseObject({
16500
+ id,
16501
+ kind: exports_external.string(),
16502
+ displayName: exports_external.string(),
16503
+ orgId: id,
16504
+ orgRole: exports_external.string(),
16505
+ color: nullableString.optional(),
16506
+ emoji: nullableString.optional(),
16507
+ description: nullableString.optional(),
16508
+ capabilities: exports_external.array(exports_external.string()).optional(),
16509
+ notificationPrefs: jsonObject.optional()
16510
+ });
16511
+ var member = exports_external.looseObject({
16512
+ id: id.optional(),
16513
+ profileId: id.optional(),
16514
+ displayName: exports_external.string().optional(),
16515
+ name: exports_external.string().optional(),
16516
+ kind: exports_external.string(),
16517
+ role: exports_external.string()
16518
+ });
16519
+ var thread3 = exports_external.looseObject({
16520
+ id,
16521
+ title: exports_external.string(),
16522
+ objective: exports_external.string(),
16523
+ status: exports_external.string(),
16524
+ url: exports_external.string().optional()
16525
+ });
16526
+ var topic2 = exports_external.looseObject({
16527
+ id,
16528
+ spaceId: id.optional(),
16529
+ title: exports_external.string(),
16530
+ purpose: nullableString.optional(),
16531
+ url: exports_external.string().optional()
16532
+ });
16533
+ var space3 = exports_external.looseObject({
16534
+ id,
16535
+ title: exports_external.string(),
16536
+ purpose: nullableString.optional(),
16537
+ stage: exports_external.string().optional(),
16538
+ url: exports_external.string().optional()
16539
+ });
16540
+ var contribution2 = exports_external.looseObject({
16541
+ id,
16542
+ threadId: id,
16543
+ type: exports_external.string(),
16544
+ body: exports_external.string(),
16545
+ createdAt: timestamp,
16546
+ url: exports_external.string().optional()
16547
+ });
16548
+ var request2 = exports_external.looseObject({
16549
+ id,
16550
+ threadId: id,
16551
+ status: exports_external.string(),
16552
+ kind: exports_external.string().optional(),
16553
+ prompt: exports_external.string().optional()
16554
+ });
16555
+ var artifact4 = exports_external.looseObject({
16556
+ id,
16557
+ title: exports_external.string(),
16558
+ kind: exports_external.string(),
16559
+ status: exports_external.string(),
16560
+ version: exports_external.number().optional(),
16561
+ url: exports_external.string().optional()
16562
+ });
16563
+ var initiative3 = exports_external.looseObject({
16564
+ id,
16565
+ title: exports_external.string(),
16566
+ status: exports_external.string(),
16567
+ spaceId: id.optional()
16568
+ });
16569
+ var app2 = exports_external.looseObject({
16570
+ id,
16571
+ spaceId: id,
16572
+ title: exports_external.string(),
16573
+ slug: exports_external.string(),
16574
+ access: exports_external.string(),
16575
+ stateMode: exports_external.string(),
16576
+ url: exports_external.string().optional()
16577
+ });
16578
+ var deployment = exports_external.looseObject({ id, appId: id, bundleId: id, status: exports_external.string() });
16579
+ var treeThread = exports_external.looseObject({
16580
+ id,
16581
+ title: exports_external.string(),
16582
+ objective: exports_external.string(),
16583
+ contributionCount: exports_external.number(),
16584
+ status: exports_external.string(),
16585
+ lastActivityAt: timestamp.optional(),
16586
+ standouts: exports_external.number().optional(),
16587
+ openRequests: exports_external.number().optional(),
16588
+ openRequestsForYou: exports_external.number().optional()
16589
+ });
16590
+ var treeTopic = exports_external.looseObject({
16591
+ id,
16592
+ title: exports_external.string(),
16593
+ purpose: exports_external.string().optional(),
16594
+ lanesForYou: exports_external.array(exports_external.string()).optional(),
16595
+ threads: exports_external.array(treeThread).optional()
16596
+ });
16597
+ var treeSpace = exports_external.looseObject({
16598
+ id,
16599
+ title: exports_external.string(),
16600
+ purpose: exports_external.string().optional(),
16601
+ stage: exports_external.string().optional(),
16602
+ members: exports_external.array(member).optional(),
16603
+ lanesForYou: exports_external.array(exports_external.string()).optional(),
16604
+ topics: exports_external.array(treeTopic).optional()
16605
+ });
16606
+ var paged = (key, item) => exports_external.looseObject({
16607
+ [key]: exports_external.array(item),
16608
+ total: exports_external.number().optional(),
16609
+ nextCursor: exports_external.string().optional()
16610
+ });
16611
+ var MCP_OUTPUT_SCHEMAS = {
16612
+ recall: exports_external.object({ result: exports_external.array(recallHit) }),
16613
+ contribute: exports_external.looseObject({
16614
+ contributionId: id,
16615
+ threadId: id,
16616
+ type: exports_external.string(),
16617
+ replayed: exports_external.boolean(),
16618
+ url: exports_external.string(),
16619
+ priorArt: exports_external.array(contributionRef).optional(),
16620
+ summaryHint: exports_external.string().optional()
16621
+ }),
16622
+ edit: exports_external.looseObject({ contributionId: id, editedAt: timestamp }),
16623
+ stamp: exports_external.looseObject({
16624
+ reviewId: id,
16625
+ contributionId: id,
16626
+ facetKey: exports_external.string().nullable(),
16627
+ polarity: exports_external.string().nullable()
16628
+ }),
16629
+ react: exports_external.looseObject({
16630
+ reacted: exports_external.boolean(),
16631
+ targetType: exports_external.string(),
16632
+ targetId: id,
16633
+ emoji: exports_external.string(),
16634
+ reactions: exports_external.array(reactionCount)
16635
+ }),
16636
+ create_topic: topic2,
16637
+ topic_update: exports_external.looseObject({
16638
+ id,
16639
+ title: exports_external.string().optional(),
16640
+ purpose: nullableString.optional()
16641
+ }),
16642
+ create_thread: thread3,
16643
+ set_organization_computer: exports_external.looseObject({ config: computerConfigLayer.nullable() }),
16644
+ set_space_computer: exports_external.looseObject({ config: computerConfigLayer.nullable() }),
16645
+ set_topic_computer: exports_external.looseObject({ config: computerConfigLayer.nullable() }),
16646
+ set_thread_computer: exports_external.looseObject({ config: computerConfigLayer.nullable() }),
16647
+ attach_computer: exports_external.looseObject({
16648
+ computerId: id,
16649
+ sessionId: id,
16650
+ createdComputer: exports_external.boolean(),
16651
+ startingSnapshot: snapshot.nullable(),
16652
+ config: computerConfig
16653
+ }),
16654
+ get_computer: exports_external.looseObject({
16655
+ threadId: id,
16656
+ config: computerConfig,
16657
+ topicBase: snapshot.nullable(),
16658
+ computer: jsonObject.nullable(),
16659
+ sessions: exports_external.array(jsonObject),
16660
+ lineage: exports_external.array(snapshot)
16661
+ }),
16662
+ publish_topic_computer: exports_external.looseObject({
16663
+ published: exports_external.boolean(),
16664
+ snapshot
16665
+ }),
16666
+ checkpoint_computer: exports_external.looseObject({
16667
+ ok: exports_external.boolean(),
16668
+ idempotent: exports_external.boolean().optional(),
16669
+ snapshot: snapshot.optional(),
16670
+ reason: exports_external.string().optional(),
16671
+ currentSnapshotId: nullableString.optional()
16672
+ }),
16673
+ transition_thread: exports_external.looseObject({ threadId: id, status: exports_external.string() }),
16674
+ request: exports_external.looseObject({
16675
+ requestId: id,
16676
+ threadId: id,
16677
+ audience: exports_external.string(),
16678
+ completion: exports_external.string(),
16679
+ status: exports_external.string(),
16680
+ opensAt: timestamp.optional()
16681
+ }),
16682
+ respond: exports_external.looseObject({
16683
+ requestId: id,
16684
+ requestStatus: exports_external.string(),
16685
+ contributionId: id,
16686
+ computerSessionId: id.optional(),
16687
+ attachmentIds: exports_external.array(id).optional()
16688
+ }),
16689
+ mark_as_response: exports_external.looseObject({
16690
+ requestId: id,
16691
+ requestStatus: exports_external.string(),
16692
+ contributionId: id
16693
+ }),
16694
+ cancel_request: exports_external.looseObject({ requestId: id, status: exports_external.string(), withdrawn: exports_external.boolean() }),
16695
+ inbox: paged("items", jsonObject),
16696
+ dismiss: exports_external.looseObject({ inboxItemId: id, status: exports_external.literal("dismissed") }),
16697
+ whoami: exports_external.looseObject({
16698
+ profile: profile2,
16699
+ client: exports_external.looseObject({ id, kind: exports_external.string() }),
16700
+ platform: exports_external.looseObject({ level: exports_external.string() }).optional(),
16701
+ spaceCharters: exports_external.array(jsonObject).optional(),
16702
+ completeness: jsonObject.optional()
16703
+ }),
16704
+ introduce: profile2,
16705
+ thread_get: exports_external.looseObject({
16706
+ thread: thread3.optional(),
16707
+ topic: topic2.optional(),
16708
+ space: space3.optional(),
16709
+ contributions: exports_external.array(contribution2).optional(),
16710
+ recentContributions: exports_external.array(contribution2).optional(),
16711
+ contributionCount: exports_external.number().optional(),
16712
+ openRequests: exports_external.array(request2).optional(),
16713
+ scheduledRequests: exports_external.array(request2).optional(),
16714
+ artifacts: exports_external.array(artifact4).optional(),
16715
+ initiatives: exports_external.array(initiative3).optional(),
16716
+ cursor: exports_external.string().optional(),
16717
+ unchanged: exports_external.boolean().optional()
16718
+ }),
16719
+ tree: exports_external.looseObject({ spaces: exports_external.array(treeSpace) }),
16720
+ members: exports_external.looseObject({ members: exports_external.array(member), total: exports_external.number().optional() }),
16721
+ space_create: space3,
16722
+ space_update: exports_external.looseObject({
16723
+ id,
16724
+ title: exports_external.string().optional(),
16725
+ purpose: nullableString.optional(),
16726
+ visibility: exports_external.string().optional(),
16727
+ stage: exports_external.string().optional()
16728
+ }),
16729
+ space_get: exports_external.looseObject({
16730
+ space: space3,
16731
+ topics: exports_external.array(topic2).optional(),
16732
+ members: exports_external.array(member).optional(),
16733
+ computerConfig: computerConfig.nullable().optional()
16734
+ }),
16735
+ topic_get: exports_external.looseObject({
16736
+ topic: topic2,
16737
+ space: space3,
16738
+ threads: exports_external.array(thread3).optional(),
16739
+ promotedArtifacts: exports_external.array(artifact4).optional(),
16740
+ computerConfig: computerConfig.nullable().optional()
16741
+ }),
16742
+ goal: exports_external.looseObject({
16743
+ id: id.optional(),
16744
+ title: exports_external.string().optional(),
16745
+ purpose: nullableString.optional(),
16746
+ status: exports_external.string().optional(),
16747
+ homeSpaceId: id.optional(),
16748
+ initiative: initiative3.optional(),
16749
+ initiatives: exports_external.array(initiative3).optional(),
16750
+ linked: exports_external.array(initiative3).optional(),
16751
+ all: exports_external.array(initiative3).optional(),
16752
+ ok: exports_external.boolean().optional()
16753
+ }),
16754
+ membership: exports_external.looseObject({
16755
+ spaceId: id.optional(),
16756
+ profileId: id.optional(),
16757
+ role: exports_external.string().optional(),
16758
+ left: exports_external.boolean().optional(),
16759
+ effect: exports_external.string().optional(),
16760
+ invitationId: id.optional(),
16761
+ accepted: exports_external.boolean().optional(),
16762
+ spaces: exports_external.array(space3).optional(),
16763
+ invitations: exports_external.array(jsonObject).optional(),
16764
+ membership: jsonObject.optional(),
16765
+ total: exports_external.number().optional(),
16766
+ nextCursor: exports_external.string().optional(),
16767
+ ok: exports_external.boolean().optional()
16768
+ }),
16769
+ notification: exports_external.looseObject({
16770
+ items: exports_external.array(jsonObject).optional(),
16771
+ total: exports_external.number().optional(),
16772
+ unseenCount: exports_external.number().optional(),
16773
+ lastSeenAt: timestamp.nullable().optional(),
16774
+ notificationId: id.optional(),
16775
+ read: exports_external.boolean().optional(),
16776
+ markedCount: exports_external.number().optional(),
16777
+ nextCursor: exports_external.string().optional()
16778
+ }),
16779
+ watch: exports_external.looseObject({
16780
+ targetType: exports_external.string().optional(),
16781
+ targetId: id.optional(),
16782
+ watching: exports_external.boolean().optional(),
16783
+ watches: exports_external.array(jsonObject).optional()
16784
+ }),
16785
+ curation: exports_external.looseObject({
16786
+ contributionId: id.optional(),
16787
+ threadId: id.optional(),
16788
+ standout: exports_external.boolean().optional(),
16789
+ changed: exports_external.boolean().optional(),
16790
+ demoted: exports_external.boolean().optional(),
16791
+ deleted: exports_external.boolean().optional(),
16792
+ restored: exports_external.boolean().optional(),
16793
+ status: exports_external.string().optional()
16794
+ }),
16795
+ artifact: exports_external.looseObject({
16796
+ id: id.optional(),
16797
+ title: exports_external.string().optional(),
16798
+ kind: exports_external.string().optional(),
16799
+ content: jsonObject.optional(),
16800
+ artifactId: id.optional(),
16801
+ artifact: artifact4.optional(),
16802
+ version: exports_external.number().optional(),
16803
+ status: exports_external.string().optional(),
16804
+ retrievalTier: exports_external.string().optional(),
16805
+ watching: exports_external.boolean().optional(),
16806
+ url: exports_external.string().optional(),
16807
+ versions: exports_external.array(jsonObject).optional(),
16808
+ appBundles: exports_external.array(jsonObject).optional()
16809
+ }),
16810
+ apps: exports_external.looseObject({
16811
+ result: exports_external.array(app2).optional(),
16812
+ spaceId: id.optional(),
16813
+ title: exports_external.string().optional(),
16814
+ slug: exports_external.string().optional(),
16815
+ access: exports_external.string().optional(),
16816
+ stateMode: exports_external.string().optional(),
16817
+ app: app2.optional(),
16818
+ deployment: deployment.optional(),
16819
+ deployments: exports_external.array(jsonObject).optional(),
16820
+ bundle: jsonObject.optional(),
16821
+ reset: jsonObject.optional(),
16822
+ activated: exports_external.boolean().optional(),
16823
+ replayed: exports_external.boolean().optional(),
16824
+ url: exports_external.string().optional(),
16825
+ id: id.optional()
16826
+ }),
16827
+ charter: exports_external.looseObject({
16828
+ ok: exports_external.boolean().optional(),
16829
+ space: space3.optional(),
16830
+ topic: topic2.optional(),
16831
+ thread: thread3.optional(),
16832
+ charter: exports_external.string().nullable().optional(),
16833
+ guidance: exports_external.array(exports_external.string()).optional(),
16834
+ contributionLanes: exports_external.array(exports_external.string()).optional()
16835
+ }),
16836
+ computer_open: exports_external.looseObject({
16837
+ computerId: id,
16838
+ computerSessionId: id,
16839
+ backend: exports_external.enum(["worker-shell", "container"]),
16840
+ startingSnapshot: snapshot.nullable(),
16841
+ materialized: checkpoint.nullable(),
16842
+ runtime: jsonObject
16843
+ }),
16844
+ computer_exec: exports_external.looseObject({
16845
+ stdout: exports_external.string().optional(),
16846
+ stderr: exports_external.string().optional(),
16847
+ exitCode: exports_external.number().optional(),
16848
+ jobId: exports_external.string().optional(),
16849
+ status: exports_external.string().optional()
16850
+ }),
16851
+ computer_status: exports_external.looseObject({
16852
+ ok: exports_external.boolean().optional(),
16853
+ status: exports_external.string().optional(),
16854
+ backend: exports_external.string().optional(),
16855
+ processes: exports_external.array(jsonObject).optional()
16856
+ }),
16857
+ computer_verify: exports_external.looseObject({
16858
+ passed: exports_external.literal(true),
16859
+ computerSessionId: id,
16860
+ runtimeStarted: exports_external.literal(false),
16861
+ result: exports_external.looseObject({ outcome: exports_external.literal("passed") }),
16862
+ receipt: jsonObject,
16863
+ attachmentIds: exports_external.array(id),
16864
+ attachments: exports_external.array(attachment2),
16865
+ verification: exports_external.looseObject({
16866
+ kind: exports_external.literal("visual"),
16867
+ targetUrl: exports_external.string(),
16868
+ capturedAt: timestamp,
16869
+ viewport: exports_external.looseObject({ width: exports_external.number(), height: exports_external.number() }),
16870
+ mimeType: exports_external.literal("image/png"),
16871
+ size: exports_external.number(),
16872
+ sha256: exports_external.string()
16873
+ })
16874
+ }),
16875
+ computer_read: exports_external.looseObject({
16876
+ content: exports_external.string(),
16877
+ size: exports_external.number().optional(),
16878
+ encoding: exports_external.string().optional()
16879
+ }),
16880
+ computer_export: exports_external.looseObject({
16881
+ computerSessionId: id,
16882
+ replayed: exports_external.boolean(),
16883
+ attachmentIds: exports_external.array(id),
16884
+ attachments: exports_external.array(attachment2)
16885
+ }),
16886
+ computer_write: exports_external.looseObject({
16887
+ ok: exports_external.boolean(),
16888
+ path: exports_external.string().optional(),
16889
+ size: exports_external.number().optional()
16890
+ }),
16891
+ computer_clone: exports_external.looseObject({
16892
+ ok: exports_external.literal(true),
16893
+ operation: exports_external.literal("clone"),
16894
+ repository: exports_external.string(),
16895
+ dir: exports_external.string(),
16896
+ branch: exports_external.string().optional(),
16897
+ head: exports_external.string().optional(),
16898
+ refs: exports_external.array(exports_external.string()).optional()
16899
+ }),
16900
+ computer_sync: exports_external.looseObject({
16901
+ ok: exports_external.literal(true),
16902
+ operation: exports_external.enum(["fetch", "pull", "push"]),
16903
+ repository: exports_external.string(),
16904
+ dir: exports_external.string(),
16905
+ branch: exports_external.string().optional(),
16906
+ head: exports_external.string().optional(),
16907
+ before: exports_external.string().optional(),
16908
+ after: exports_external.string().optional(),
16909
+ fetchHead: exports_external.string().optional(),
16910
+ refs: exports_external.array(exports_external.string()).optional()
16911
+ }),
16912
+ computer_checkpoint: checkpoint,
16913
+ computer_publish_preview: exports_external.looseObject({
16914
+ previewId: id,
16915
+ previewVersionId: id,
16916
+ url: exports_external.string(),
16917
+ manifestDigest: exports_external.string(),
16918
+ fileCount: exports_external.number(),
16919
+ byteCount: exports_external.number(),
16920
+ snapshotId: id,
16921
+ published: exports_external.boolean(),
16922
+ replayed: exports_external.boolean()
16923
+ }),
16924
+ computer_publish_app_bundle: exports_external.looseObject({
16925
+ bundleId: id,
16926
+ contentDigest: exports_external.string(),
16927
+ artifactVersionId: id.optional(),
16928
+ snapshotId: id,
16929
+ moduleCount: exports_external.number().optional(),
16930
+ assetCount: exports_external.number().optional(),
16931
+ byteCount: exports_external.number().optional(),
16932
+ buildProvenance: jsonObject,
16933
+ replayed: exports_external.boolean()
16934
+ }),
16935
+ computer_stop: exports_external.looseObject({ checkpoint, stopped: jsonObject })
16936
+ };
16937
+ function outputSchemaFor(actionName) {
16938
+ return MCP_OUTPUT_SCHEMAS[actionName];
16939
+ }
16940
+
16428
16941
  // ../actions/src/index.ts
16429
16942
  var CONTRIBUTION_ADD_LINK_RELS = [
16430
16943
  "cites",
@@ -16472,7 +16985,7 @@ var PAGINATION_INPUT = {
16472
16985
  limit: exports_external.number().int().min(1).optional().describe("max items to return — enables pagination"),
16473
16986
  cursor: exports_external.string().optional().describe("opaque cursor from a prior response's nextCursor (use with --limit)")
16474
16987
  };
16475
- var ACTIONS = [
16988
+ var ACTION_DEFINITIONS = [
16476
16989
  {
16477
16990
  name: "github_repositories",
16478
16991
  title: "List installed GitHub repositories",
@@ -17823,7 +18336,7 @@ var ACTIONS = [
17823
18336
  {
17824
18337
  name: "apps",
17825
18338
  title: "List visible Apps",
17826
- description: "List Apps available to you: every App in your Spaces plus listed public Apps across the organization. Lifecycle and runtime health are separate fields; unlisted public Apps appear only to their owning Space.",
18339
+ description: "List Apps available to you: every App in your Spaces plus active listed public Apps across the organization. Lifecycle and last activation health are separate fields; unlisted public and archived Apps appear only to actors authorized for their owning Space.",
17827
18340
  inputSchema: {
17828
18341
  includeArchived: exports_external.boolean().optional().describe("include archived Apps you are authorized to inspect")
17829
18342
  },
@@ -17834,7 +18347,7 @@ var ACTIONS = [
17834
18347
  {
17835
18348
  name: "apps",
17836
18349
  title: "Publish and manage Apps",
17837
- description: "Manage stable Arbor Apps through one guarded lifecycle (AD-248). verb=list shows Apps visible across your Spaces; get reads the current active release, state generation, and history; create mints the Space-owned identity; deploy health-checks an immutable AppBundle without moving the URL; deployment inspects one candidate; activate and rollback health-check then compare-and-swap the active release; set_access changes Space/public and public discovery immediately; reset_state is the only durable SQLite deletion; archive stops serving but retains history. Read with get immediately before activate, rollback, access, or reset so expectedActiveDeploymentId/expectedGeneration are current; start public Apps as public+unlisted+none and private stateful Apps as space+durable.",
18350
+ description: "Manage stable Arbor Apps through one guarded lifecycle (AD-248/249). verb=list shows Apps across the actor's Spaces plus active listed public Apps across the organization; get reads the active release, pending control intent, state generation, and history; create mints the Space-owned identity; deploy health-checks an immutable AppBundle without moving the URL; deployment inspects one candidate; activate and rollback reserve an attributed intent before provider health and compare-and-swap completion; set_access changes Space/public and public discovery immediately; reset_state is the only durable SQLite deletion and resumes partial failure with the same idempotency key; archive stops serving but retains history. Read with get immediately before activate, rollback, access, or reset. Public Apps must be public+(unlisted|listed)+none; durable Apps are space+durable.",
17838
18351
  inputSchema: {
17839
18352
  verb: exports_external.enum([
17840
18353
  "list",
@@ -17855,7 +18368,7 @@ var ACTIONS = [
17855
18368
  slug: exports_external.string().min(1).max(59).optional().describe("create: stable label in app-<slug>.arborthreads.dev"),
17856
18369
  access: exports_external.enum(["space", "public"]).optional().describe("create/set_access: gateway access"),
17857
18370
  discovery: exports_external.enum(["unlisted", "listed"]).nullable().optional().describe("create/set_access: public discovery; Space Apps use null"),
17858
- stateMode: exports_external.enum(["none", "durable"]).optional().describe("create: none or isolated durable SQLite"),
18371
+ stateMode: exports_external.enum(["none", "durable"]).optional().describe("create: none or Space-only isolated durable SQLite"),
17859
18372
  bundleId: exports_external.string().optional().describe("deploy: verified immutable AppBundle, bnd_…"),
17860
18373
  deploymentId: exports_external.string().optional().describe("deployment/activate/rollback: deployment, dep_…"),
17861
18374
  expectedActiveDeploymentId: exports_external.string().nullable().optional().describe("activate/rollback: active deployment just read; null only for first activation"),
@@ -17880,7 +18393,7 @@ var ACTIONS = [
17880
18393
  {
17881
18394
  name: "app_get",
17882
18395
  title: "Read an App",
17883
- description: "Inspect one App's stable URL, active release, source AppBundle, deployment timeline, runtime health, state identity/generation, and reset history. Read this before deployment, rollback, access, or state changes so your compare-and-swap inputs are current.",
18396
+ description: "Inspect one App's stable URL, active release, pending control intent, source AppBundle, attributed deployment timeline, last activation health, state identity/generation, and reset history. Read this before deployment, rollback, access, or state changes so compare-and-swap inputs are current.",
17884
18397
  inputSchema: { appId: exports_external.string().describe("the App, app_…") },
17885
18398
  surfaces: ["cli"],
17886
18399
  toolset: "apps",
@@ -17889,14 +18402,14 @@ var ACTIONS = [
17889
18402
  {
17890
18403
  name: "app_create",
17891
18404
  title: "Create an App",
17892
- description: "Create a stable first-class App identity in a Space before deploying code. Start small public Apps as public+unlisted+none; use space+durable only when the App needs membership authorization and isolated SQLite state.",
18405
+ description: "Create a stable first-class App identity in a Space before deploying code. Public Apps are stateless and start public+unlisted+none; durable Apps are always space+durable with membership authorization and isolated SQLite state.",
17893
18406
  inputSchema: {
17894
18407
  spaceId: exports_external.string().describe("owning Space, spc_…"),
17895
18408
  title: exports_external.string().min(1).max(160).describe("short factual App title"),
17896
18409
  slug: exports_external.string().min(1).max(59).describe("stable DNS label used by app-<slug>.arborthreads.dev"),
17897
18410
  access: exports_external.enum(["space", "public"]).describe("space requires membership; public is anonymous at the gateway"),
17898
18411
  discovery: exports_external.enum(["unlisted", "listed"]).nullable().optional().describe("public Apps only; default unlisted"),
17899
- stateMode: exports_external.enum(["none", "durable"]).describe("durable allocates isolated facet SQLite; deployment never resets it")
18412
+ stateMode: exports_external.enum(["none", "durable"]).describe("durable allocates Space-only isolated facet SQLite; deployment never resets it")
17900
18413
  },
17901
18414
  surfaces: ["cli"],
17902
18415
  toolset: "apps",
@@ -17930,7 +18443,7 @@ var ACTIONS = [
17930
18443
  {
17931
18444
  name: "app_activate",
17932
18445
  title: "Activate a verified deployment",
17933
- description: "Atomically advance an App's stable URL to a verified candidate after a fresh health check. Pass the active deployment id you just read (or null for the first release); a concurrent change is rejected instead of overwriting it.",
18446
+ description: "Reserve an attributed activation intent, health-check the verified candidate, then atomically advance the stable URL. Pass the active deployment id just read (or null for the first release). A retry resumes the same pending release; a conflicting control change is rejected.",
17934
18447
  inputSchema: {
17935
18448
  appId: exports_external.string().describe("target App, app_…"),
17936
18449
  deploymentId: exports_external.string().describe("verified candidate, dep_…"),
@@ -17956,7 +18469,7 @@ var ACTIONS = [
17956
18469
  {
17957
18470
  name: "app_set_access",
17958
18471
  title: "Change App access",
17959
- description: "Change the gateway policy immediately and record who changed it: space requires a current Space member, while public permits anonymous requests and may be unlisted or listed. This does not redeploy code or pass an Arbor identity into App code.",
18472
+ description: "Change the gateway policy immediately and record who changed it: space requires a current Space member, while public permits anonymous requests and may be unlisted or listed. Durable Apps cannot become public. This does not redeploy code or pass an Arbor identity into App code.",
17960
18473
  inputSchema: {
17961
18474
  appId: exports_external.string().describe("target App, app_…"),
17962
18475
  access: exports_external.enum(["space", "public"]).describe("new gateway access"),
@@ -17969,7 +18482,7 @@ var ACTIONS = [
17969
18482
  {
17970
18483
  name: "app_reset_state",
17971
18484
  title: "Reset durable App state",
17972
- description: "Permanently delete one durable App facet's isolated SQLite database as an explicit operation; deploying or rolling back never does this. Read app_get first, pass its expectedGeneration, and use a stable idempotencyKey so retries do not delete a later generation.",
18485
+ description: "Permanently delete one durable App facet's isolated SQLite database as an explicit attributed transition; deploying or rolling back never does this. Read app_get first, pass its expectedGeneration, and keep the same idempotencyKey across retries. A provider interruption leaves a visible pending intent that the same call resumes; do not change release or archive while pending.",
17973
18486
  inputSchema: {
17974
18487
  appId: exports_external.string().describe("durable App, app_…"),
17975
18488
  expectedGeneration: exports_external.number().int().min(0).describe("state generation from app_get"),
@@ -18022,6 +18535,15 @@ var ACTIONS = [
18022
18535
  })
18023
18536
  }
18024
18537
  ];
18538
+ var ACTIONS = ACTION_DEFINITIONS.map((action) => {
18539
+ if (!action.surfaces.some((surface) => surface === "mcp" || surface === "computer-mcp")) {
18540
+ return action;
18541
+ }
18542
+ const outputSchema = outputSchemaFor(action.name);
18543
+ if (!outputSchema)
18544
+ throw new Error(`${action.name}: MCP action is missing an output schema`);
18545
+ return { ...action, outputSchema };
18546
+ });
18025
18547
 
18026
18548
  // src/config.ts
18027
18549
  import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.13.2",
3
+ "version": "0.13.4",
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",