@lambdacurry/arbor 0.13.6 → 0.13.8

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 +74 -2
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -1847,7 +1847,7 @@ var apps = sqliteTable("apps", {
1847
1847
  stateMode: text("state_mode").$type().notNull(),
1848
1848
  stateIdentity: text("state_identity").notNull(),
1849
1849
  stateGeneration: integer("state_generation").notNull().default(0),
1850
- pendingStateResetId: text("pending_state_reset_id"),
1850
+ pendingStateOperationId: text("pending_state_reset_id"),
1851
1851
  currentStateSchemaVersion: integer("current_state_schema_version").notNull().default(0),
1852
1852
  deploymentRevision: integer("deployment_revision").notNull().default(0),
1853
1853
  metadataRevision: integer("metadata_revision").notNull().default(0),
@@ -1897,6 +1897,19 @@ var appStateResets = sqliteTable("app_state_resets", {
1897
1897
  activeDeploymentId: text("active_deployment_id"),
1898
1898
  deploymentRevision: integer("deployment_revision"),
1899
1899
  targetStateSchemaVersion: integer("target_state_schema_version"),
1900
+ recoveryBookmark: text("recovery_bookmark"),
1901
+ recoveryExpiresAt: ts("recovery_expires_at"),
1902
+ previousStateSchemaVersion: integer("previous_state_schema_version"),
1903
+ restoreIdempotencyKey: text("restore_idempotency_key"),
1904
+ restoredByProfileId: text("restored_by_profile_id").references(() => profiles.id),
1905
+ restoreExecutionContextId: text("restore_execution_context_id").references(() => executionContexts.id),
1906
+ restoreProviderReceipt: text("restore_provider_receipt", {
1907
+ mode: "json"
1908
+ }).$type(),
1909
+ restoreFromGeneration: integer("restore_from_generation"),
1910
+ restoreToGeneration: integer("restore_to_generation"),
1911
+ restoreRequestedAt: ts("restore_requested_at"),
1912
+ restoredAt: ts("restored_at"),
1900
1913
  createdAt: ts("created_at").notNull(),
1901
1914
  completedAt: ts("completed_at")
1902
1915
  }, (t) => ({
@@ -16440,6 +16453,16 @@ var id = exports_external.string();
16440
16453
  var timestamp = exports_external.string();
16441
16454
  var nullableString = exports_external.string().nullable();
16442
16455
  var jsonObject = exports_external.looseObject({});
16456
+ var appInvocationResponse = exports_external.object({
16457
+ status: exports_external.number().int().min(100).max(599),
16458
+ headers: exports_external.record(exports_external.string(), exports_external.string()),
16459
+ body: exports_external.string(),
16460
+ byteCount: exports_external.number().int().min(0).max(64 * 1024),
16461
+ truncated: exports_external.boolean(),
16462
+ bodyKind: exports_external.enum(["text", "unsupported"]),
16463
+ unsupportedReason: exports_external.enum(["binary_content_type", "invalid_utf8"]).optional(),
16464
+ json: exports_external.json().optional()
16465
+ });
16443
16466
  var spaceRef = exports_external.looseObject({ id, title: nullableString });
16444
16467
  var recallHit = exports_external.looseObject({
16445
16468
  id,
@@ -16950,6 +16973,8 @@ var MCP_OUTPUT_SCHEMAS = {
16950
16973
  url: exports_external.string()
16951
16974
  }),
16952
16975
  app_deployment_get: exports_external.looseObject({ deployment, bundle: jsonObject }),
16976
+ app_fetch: appInvocationResponse,
16977
+ app_request: appInvocationResponse,
16953
16978
  app_create: app2,
16954
16979
  app_deploy: exports_external.looseObject({
16955
16980
  deployment,
@@ -16971,6 +16996,7 @@ var MCP_OUTPUT_SCHEMAS = {
16971
16996
  }),
16972
16997
  app_set_access: app2,
16973
16998
  app_reset_state: exports_external.looseObject({ reset: jsonObject, replayed: exports_external.boolean() }),
16999
+ app_restore_state: exports_external.looseObject({ reset: jsonObject, replayed: exports_external.boolean() }),
16974
17000
  app_archive: app2,
16975
17001
  charter: exports_external.looseObject({
16976
17002
  ok: exports_external.boolean().optional(),
@@ -17211,12 +17237,15 @@ var MCP_TOOL_ANNOTATIONS = {
17211
17237
  app_get: readOnly,
17212
17238
  app_list: readOnly,
17213
17239
  app_deployment_get: readOnly,
17240
+ app_fetch: readOnly,
17241
+ app_request: destructive,
17214
17242
  app_create: additive,
17215
17243
  app_deploy: idempotent,
17216
17244
  app_activate: additive,
17217
17245
  app_rollback: additive,
17218
17246
  app_set_access: additive,
17219
17247
  app_reset_state: destructiveIdempotent,
17248
+ app_restore_state: destructiveIdempotent,
17220
17249
  app_archive: additive,
17221
17250
  charter: destructive,
17222
17251
  computer_open: additive,
@@ -18851,6 +18880,35 @@ var ACTION_DEFINITIONS = [
18851
18880
  toolset: "apps",
18852
18881
  run: forward("app.deployment_get")
18853
18882
  },
18883
+ {
18884
+ name: "app_fetch",
18885
+ title: "Fetch from an App",
18886
+ description: "READ ONLY: Invoke GET or HEAD on one relative path of an App using your current Arbor identity; for Space Apps, current Space membership is rechecked on every call. It cannot modify App lifecycle, deployments, access, or durable SQLite; browser grants, cookies, credentials, and reserved /__arbor paths are never exposed to App code.",
18887
+ inputSchema: {
18888
+ appId: exports_external.string().describe("target App, app_…"),
18889
+ path: exports_external.string().min(1).max(2048).describe("relative App path beginning with /; may include a query string"),
18890
+ method: exports_external.enum(["GET", "HEAD"]).optional().describe("safe read method; default GET")
18891
+ },
18892
+ surfaces: ["mcp"],
18893
+ toolset: "apps",
18894
+ run: forward("app.fetch")
18895
+ },
18896
+ {
18897
+ name: "app_request",
18898
+ title: "Send a mutating App request",
18899
+ description: "Send POST, PUT, PATCH, or DELETE to one relative path of an App using your current Arbor identity; the App may mutate its own state. Supply either json or UTF-8 body, never both; browser grants, cookies, credentials, caller headers, and reserved /__arbor paths are never exposed to App code.",
18900
+ inputSchema: {
18901
+ appId: exports_external.string().describe("target App, app_…"),
18902
+ path: exports_external.string().min(1).max(2048).describe("relative App path beginning with /; may include a query string"),
18903
+ method: exports_external.enum(["POST", "PUT", "PATCH", "DELETE"]).describe("mutating HTTP method"),
18904
+ json: exports_external.json().optional().describe("JSON request value; mutually exclusive with body and sets application/json"),
18905
+ body: exports_external.string().optional().describe("UTF-8 request body; mutually exclusive with json"),
18906
+ contentType: exports_external.string().max(160).optional().describe("body media type; allowed only with body, default text/plain; charset=utf-8")
18907
+ },
18908
+ surfaces: ["mcp"],
18909
+ toolset: "apps",
18910
+ run: forward("app.request")
18911
+ },
18854
18912
  {
18855
18913
  name: "app_activate",
18856
18914
  title: "Activate a verified deployment",
@@ -18893,7 +18951,7 @@ var ACTION_DEFINITIONS = [
18893
18951
  {
18894
18952
  name: "app_reset_state",
18895
18953
  title: "Reset durable App state",
18896
- 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.",
18954
+ description: "Delete one durable App facet's isolated SQLite database as an explicit attributed transition after capturing a Cloudflare recovery point valid for 30 days. Only the App creator or an Org owner/admin may do this; deploying or rolling back never does. 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.",
18897
18955
  inputSchema: {
18898
18956
  appId: exports_external.string().describe("durable App, app_…"),
18899
18957
  expectedGeneration: exports_external.number().int().min(0).describe("state generation from app_get"),
@@ -18903,6 +18961,20 @@ var ACTION_DEFINITIONS = [
18903
18961
  toolset: "apps",
18904
18962
  run: forward("app.reset_state")
18905
18963
  },
18964
+ {
18965
+ name: "app_restore_state",
18966
+ title: "Restore durable App state",
18967
+ description: "Restore the latest completed durable-state reset from its automatic Cloudflare recovery point, discarding state written after that reset. Recovery is available for 30 days, only while that reset remains latest and its active release has not changed. Only the App creator or an Org owner/admin may do this. Read app_get first, pass the reset id and current generation, and keep the same idempotencyKey across retries.",
18968
+ inputSchema: {
18969
+ appId: exports_external.string().describe("durable App, app_…"),
18970
+ resetId: exports_external.string().describe("latest recoverable reset from app_get, rst_…"),
18971
+ expectedGeneration: exports_external.number().int().min(0).describe("state generation from app_get"),
18972
+ idempotencyKey: exports_external.string().min(1).max(200).describe("stable key for this one deliberate recovery")
18973
+ },
18974
+ surfaces: ["mcp", "cli"],
18975
+ toolset: "apps",
18976
+ run: forward("app.restore_state")
18977
+ },
18906
18978
  {
18907
18979
  name: "app_archive",
18908
18980
  title: "Archive an App",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.13.6",
3
+ "version": "0.13.8",
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",