@vendoai/apps 0.4.0
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.
- package/LICENSE +202 -0
- package/README.md +8 -0
- package/dist/adapter-conformance.d.ts +48 -0
- package/dist/adapter-conformance.d.ts.map +1 -0
- package/dist/adapter-conformance.js +196 -0
- package/dist/adapter-conformance.js.map +1 -0
- package/dist/agent-tools.d.ts +10 -0
- package/dist/agent-tools.d.ts.map +1 -0
- package/dist/agent-tools.js +252 -0
- package/dist/agent-tools.js.map +1 -0
- package/dist/app-data.d.ts +23 -0
- package/dist/app-data.d.ts.map +1 -0
- package/dist/app-data.js +129 -0
- package/dist/app-data.js.map +1 -0
- package/dist/app-token.d.ts +24 -0
- package/dist/app-token.d.ts.map +1 -0
- package/dist/app-token.js +61 -0
- package/dist/app-token.js.map +1 -0
- package/dist/audit.d.ts +11 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +19 -0
- package/dist/audit.js.map +1 -0
- package/dist/automation-plan.d.ts +43 -0
- package/dist/automation-plan.d.ts.map +1 -0
- package/dist/automation-plan.js +212 -0
- package/dist/automation-plan.js.map +1 -0
- package/dist/bench/client.d.ts +43 -0
- package/dist/bench/client.d.ts.map +1 -0
- package/dist/bench/client.js +129 -0
- package/dist/bench/client.js.map +1 -0
- package/dist/bench/fixtures.d.ts +42 -0
- package/dist/bench/fixtures.d.ts.map +1 -0
- package/dist/bench/fixtures.js +146 -0
- package/dist/bench/fixtures.js.map +1 -0
- package/dist/bench/judge.d.ts +9 -0
- package/dist/bench/judge.d.ts.map +1 -0
- package/dist/bench/judge.js +71 -0
- package/dist/bench/judge.js.map +1 -0
- package/dist/bench/metrics.d.ts +32 -0
- package/dist/bench/metrics.d.ts.map +1 -0
- package/dist/bench/metrics.js +172 -0
- package/dist/bench/metrics.js.map +1 -0
- package/dist/bench/prompts.d.ts +17 -0
- package/dist/bench/prompts.d.ts.map +1 -0
- package/dist/bench/prompts.js +100 -0
- package/dist/bench/prompts.js.map +1 -0
- package/dist/bench/report.d.ts +43 -0
- package/dist/bench/report.d.ts.map +1 -0
- package/dist/bench/report.js +74 -0
- package/dist/bench/report.js.map +1 -0
- package/dist/bench/runner.d.ts +15 -0
- package/dist/bench/runner.d.ts.map +1 -0
- package/dist/bench/runner.js +26 -0
- package/dist/bench/runner.js.map +1 -0
- package/dist/bench/toolfork.d.ts +18 -0
- package/dist/bench/toolfork.d.ts.map +1 -0
- package/dist/bench/toolfork.js +125 -0
- package/dist/bench/toolfork.js.map +1 -0
- package/dist/box-agent.d.ts +78 -0
- package/dist/box-agent.d.ts.map +1 -0
- package/dist/box-agent.js +137 -0
- package/dist/box-agent.js.map +1 -0
- package/dist/box-env.d.ts +26 -0
- package/dist/box-env.d.ts.map +1 -0
- package/dist/box-env.js +52 -0
- package/dist/box-env.js.map +1 -0
- package/dist/call.d.ts +23 -0
- package/dist/call.d.ts.map +1 -0
- package/dist/call.js +45 -0
- package/dist/call.js.map +1 -0
- package/dist/cloud.d.ts +4917 -0
- package/dist/cloud.d.ts.map +1 -0
- package/dist/cloud.js +16 -0
- package/dist/cloud.js.map +1 -0
- package/dist/e2b/index.d.ts +30 -0
- package/dist/e2b/index.d.ts.map +1 -0
- package/dist/e2b/index.js +273 -0
- package/dist/e2b/index.js.map +1 -0
- package/dist/egress-approval.d.ts +73 -0
- package/dist/egress-approval.d.ts.map +1 -0
- package/dist/egress-approval.js +74 -0
- package/dist/egress-approval.js.map +1 -0
- package/dist/engine.d.ts +188 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +1507 -0
- package/dist/engine.js.map +1 -0
- package/dist/fn.d.ts +22 -0
- package/dist/fn.d.ts.map +1 -0
- package/dist/fn.js +108 -0
- package/dist/fn.js.map +1 -0
- package/dist/history.d.ts +21 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +158 -0
- package/dist/history.js.map +1 -0
- package/dist/inclient.d.ts +48 -0
- package/dist/inclient.d.ts.map +1 -0
- package/dist/inclient.js +68 -0
- package/dist/inclient.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/interchange.d.ts +17 -0
- package/dist/interchange.d.ts.map +1 -0
- package/dist/interchange.js +133 -0
- package/dist/interchange.js.map +1 -0
- package/dist/machine-lifecycle.d.ts +102 -0
- package/dist/machine-lifecycle.d.ts.map +1 -0
- package/dist/machine-lifecycle.js +360 -0
- package/dist/machine-lifecycle.js.map +1 -0
- package/dist/manifest.d.ts +42 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +53 -0
- package/dist/manifest.js.map +1 -0
- package/dist/open.d.ts +45 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +245 -0
- package/dist/open.js.map +1 -0
- package/dist/parked-action.d.ts +51 -0
- package/dist/parked-action.d.ts.map +1 -0
- package/dist/parked-action.js +29 -0
- package/dist/parked-action.js.map +1 -0
- package/dist/persistence.d.ts +41 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +86 -0
- package/dist/persistence.js.map +1 -0
- package/dist/pins.d.ts +231 -0
- package/dist/pins.d.ts.map +1 -0
- package/dist/pins.js +213 -0
- package/dist/pins.js.map +1 -0
- package/dist/pipeline.d.ts +142 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +1014 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/prewired-schema.d.ts +16 -0
- package/dist/prewired-schema.d.ts.map +1 -0
- package/dist/prewired-schema.js +48 -0
- package/dist/prewired-schema.js.map +1 -0
- package/dist/redaction.d.ts +13 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +67 -0
- package/dist/redaction.js.map +1 -0
- package/dist/runtime.d.ts +463 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1715 -0
- package/dist/runtime.js.map +1 -0
- package/dist/sandbox.d.ts +90 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +2 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/schedules.d.ts +89 -0
- package/dist/schedules.d.ts.map +1 -0
- package/dist/schedules.js +334 -0
- package/dist/schedules.js.map +1 -0
- package/dist/secret-exposure.d.ts +55 -0
- package/dist/secret-exposure.d.ts.map +1 -0
- package/dist/secret-exposure.js +53 -0
- package/dist/secret-exposure.js.map +1 -0
- package/dist/ship-diff.d.ts +47 -0
- package/dist/ship-diff.d.ts.map +1 -0
- package/dist/ship-diff.js +39 -0
- package/dist/ship-diff.js.map +1 -0
- package/dist/testing/fake-box.d.ts +67 -0
- package/dist/testing/fake-box.d.ts.map +1 -0
- package/dist/testing/fake-box.js +166 -0
- package/dist/testing/fake-box.js.map +1 -0
- package/dist/testing/fake-sandbox-v2.d.ts +59 -0
- package/dist/testing/fake-sandbox-v2.d.ts.map +1 -0
- package/dist/testing/fake-sandbox-v2.js +121 -0
- package/dist/testing/fake-sandbox-v2.js.map +1 -0
- package/dist/testing/fake-sandbox.d.ts +94 -0
- package/dist/testing/fake-sandbox.d.ts.map +1 -0
- package/dist/testing/fake-sandbox.js +239 -0
- package/dist/testing/fake-sandbox.js.map +1 -0
- package/dist/testing/guard-fixture.d.ts +19 -0
- package/dist/testing/guard-fixture.d.ts.map +1 -0
- package/dist/testing/guard-fixture.js +134 -0
- package/dist/testing/guard-fixture.js.map +1 -0
- package/dist/testing/index.d.ts +8 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +8 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/memory-store.d.ts +5 -0
- package/dist/testing/memory-store.d.ts.map +1 -0
- package/dist/testing/memory-store.js +4 -0
- package/dist/testing/memory-store.js.map +1 -0
- package/dist/testing/scripted-model.d.ts +32 -0
- package/dist/testing/scripted-model.d.ts.map +1 -0
- package/dist/testing/scripted-model.js +112 -0
- package/dist/testing/scripted-model.js.map +1 -0
- package/dist/testing/seed-app-row.d.ts +4 -0
- package/dist/testing/seed-app-row.d.ts.map +1 -0
- package/dist/testing/seed-app-row.js +7 -0
- package/dist/testing/seed-app-row.js.map +1 -0
- package/dist/unified-diff.d.ts +13 -0
- package/dist/unified-diff.d.ts.map +1 -0
- package/dist/unified-diff.js +127 -0
- package/dist/unified-diff.js.map +1 -0
- package/dist/version-hash.d.ts +9 -0
- package/dist/version-hash.d.ts.map +1 -0
- package/dist/version-hash.js +12 -0
- package/dist/version-hash.js.map +1 -0
- package/package.json +84 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** @vendoai/apps — the app artifact and engine (docs/contracts/06-apps.md).
|
|
2
|
+
*
|
|
3
|
+
* The sandbox seam is the execution-v2 shape (sandbox.ts); the v1 seam and
|
|
4
|
+
* its compat bridge are deleted (execution-v2 Wave 1.5).
|
|
5
|
+
* The package root otherwise exports exactly the 06 §1 public API plus the
|
|
6
|
+
* block-plan's flagged additions (AppsConfig.pinBaselines), the ENG-288 M4
|
|
7
|
+
* in-client trust-axis surface (06 §9): AppsRuntime.inClient and
|
|
8
|
+
* appVersionHash, and the ENG-288 M5 drift→rebase surface (06 §8):
|
|
9
|
+
* AppsRuntime.pins and detectPinDrift.
|
|
10
|
+
* Everything else — the generation engine, interchange plumbing — is internal
|
|
11
|
+
* and reachable only through AppsRuntime.
|
|
12
|
+
*/
|
|
13
|
+
export { createApps, type AppsConfig, type AppsRuntime, type BoxRequest, type BoxResponse, type EditFailure, type EditResult, type MachineEditResult, type OpenSurface, type PinForkInput, type PinForkResult, type PinRebaseResult, type SecretExposureState, type SetExposureResult, type VersionEntry, } from "./runtime.js";
|
|
14
|
+
export type { SandboxAdapter, SandboxMachine, SandboxResumePolicy } from "./sandbox.js";
|
|
15
|
+
export { parseVendoManifest, vendoManifestSchema, type VendoManifest, type VendoManifestSchedule, } from "./manifest.js";
|
|
16
|
+
export { createAppTokens, type AppTokens, } from "./app-token.js";
|
|
17
|
+
export { buildEnv, type BuildEnvContext, type BuiltBoxEnv, type InferenceResolver, } from "./box-env.js";
|
|
18
|
+
export { SCHEDULE_STATE_COLLECTION } from "./schedules.js";
|
|
19
|
+
export { shareSnapshotSchema, publishRecordSchema, type CloudAppsClient, type PublishRecord, type ShareSnapshot, } from "./cloud.js";
|
|
20
|
+
export { detectPinDrift, inClientApprovalSchema, pinBaselineSchema, pinComponentName, type InClientApproval, type PinBaseline, type PinDrift, } from "./pins.js";
|
|
21
|
+
export { appVersionHash } from "./version-hash.js";
|
|
22
|
+
export { type InClientVenueState, type InClientVerdict, } from "./inclient.js";
|
|
23
|
+
export { type ShipDiff, type ShipDiffGenerated, type ShipDiffPin, } from "./ship-diff.js";
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,UAAU,EACV,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,KAAK,SAAS,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** @vendoai/apps — the app artifact and engine (docs/contracts/06-apps.md).
|
|
2
|
+
*
|
|
3
|
+
* The sandbox seam is the execution-v2 shape (sandbox.ts); the v1 seam and
|
|
4
|
+
* its compat bridge are deleted (execution-v2 Wave 1.5).
|
|
5
|
+
* The package root otherwise exports exactly the 06 §1 public API plus the
|
|
6
|
+
* block-plan's flagged additions (AppsConfig.pinBaselines), the ENG-288 M4
|
|
7
|
+
* in-client trust-axis surface (06 §9): AppsRuntime.inClient and
|
|
8
|
+
* appVersionHash, and the ENG-288 M5 drift→rebase surface (06 §8):
|
|
9
|
+
* AppsRuntime.pins and detectPinDrift.
|
|
10
|
+
* Everything else — the generation engine, interchange plumbing — is internal
|
|
11
|
+
* and reachable only through AppsRuntime.
|
|
12
|
+
*/
|
|
13
|
+
export { createApps, } from "./runtime.js";
|
|
14
|
+
// execution-v2 skin contract (Lane C): the manifest gate, the per-app box
|
|
15
|
+
// token, and the box env assembly Lane B consumes at provision.
|
|
16
|
+
export { parseVendoManifest, vendoManifestSchema, } from "./manifest.js";
|
|
17
|
+
export { createAppTokens, } from "./app-token.js";
|
|
18
|
+
export { buildEnv, } from "./box-env.js";
|
|
19
|
+
// execution-v2 Lane D — the BYO schedule engine's state collection (the wire
|
|
20
|
+
// tests pin its name).
|
|
21
|
+
export { SCHEDULE_STATE_COLLECTION } from "./schedules.js";
|
|
22
|
+
export { shareSnapshotSchema, publishRecordSchema, } from "./cloud.js";
|
|
23
|
+
export { detectPinDrift, inClientApprovalSchema, pinBaselineSchema, pinComponentName, } from "./pins.js";
|
|
24
|
+
export { appVersionHash } from "./version-hash.js";
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,UAAU,GAeX,MAAM,cAAc,CAAC;AAEtB,0EAA0E;AAC1E,gEAAgE;AAChE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAGpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,QAAQ,GAIT,MAAM,cAAc,CAAC;AACtB,6EAA6E;AAC7E,uBAAuB;AACvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAIpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type AppDocument, type AppId, type Guard, type RunContext, type StoreAdapter } from "@vendoai/core";
|
|
2
|
+
import { type PinBaseline } from "./pins.js";
|
|
3
|
+
/** Dependencies for the 06-apps §7 interchange boundary. */
|
|
4
|
+
export interface AppInterchangeDependencies {
|
|
5
|
+
store: StoreAdapter;
|
|
6
|
+
guard: Guard;
|
|
7
|
+
pinBaselines?: readonly PinBaseline[];
|
|
8
|
+
requireOwned(appId: AppId, subject: string): Promise<AppDocument>;
|
|
9
|
+
}
|
|
10
|
+
/** Public interchange methods wired into AppsRuntime. */
|
|
11
|
+
export interface AppInterchange {
|
|
12
|
+
exportApp(appId: AppId, ctx: RunContext): Promise<Uint8Array>;
|
|
13
|
+
importApp(source: Uint8Array | AppDocument, ctx: RunContext): Promise<AppDocument>;
|
|
14
|
+
}
|
|
15
|
+
/** 06-apps §7 — build the copy-only .vendoapp import/export boundary. */
|
|
16
|
+
export declare const createAppInterchange: (dependencies: AppInterchangeDependencies) => AppInterchange;
|
|
17
|
+
//# sourceMappingURL=interchange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interchange.d.ts","sourceRoot":"","sources":["../src/interchange.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,KAAK,EAEV,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AA+GnE,4DAA4D;AAC5D,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACnE;AAED,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9D,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACpF;AAED,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,GAC/B,cAAc,0BAA0B,KACvC,cA0CF,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { VendoError, validateAppDocument, } from "@vendoai/core";
|
|
2
|
+
import { unzipSync, zipSync } from "fflate";
|
|
3
|
+
import { appLifecycleEvent } from "./audit.js";
|
|
4
|
+
import { appRecordInput } from "./persistence.js";
|
|
5
|
+
import { assertPinsExportable } from "./pins.js";
|
|
6
|
+
const encoder = new TextEncoder();
|
|
7
|
+
const decoder = new TextDecoder();
|
|
8
|
+
const ARCHIVE_MAX_ENTRIES = 4_096;
|
|
9
|
+
const ARCHIVE_MAX_TOTAL_BYTES = 64 * 1024 * 1024;
|
|
10
|
+
const ARCHIVE_MAX_ENTRY_BYTES = 16 * 1024 * 1024;
|
|
11
|
+
const APP_DOCUMENT_FIELDS = [
|
|
12
|
+
"format",
|
|
13
|
+
"id",
|
|
14
|
+
"name",
|
|
15
|
+
"description",
|
|
16
|
+
"ui",
|
|
17
|
+
"tree",
|
|
18
|
+
"components",
|
|
19
|
+
"storage",
|
|
20
|
+
"server",
|
|
21
|
+
"machine",
|
|
22
|
+
"trigger",
|
|
23
|
+
"egress",
|
|
24
|
+
"secrets",
|
|
25
|
+
"pins",
|
|
26
|
+
"forkedFrom",
|
|
27
|
+
];
|
|
28
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
29
|
+
const validationError = (message, detail) => new VendoError("validation", message, detail);
|
|
30
|
+
const validateImportedDocument = (input) => {
|
|
31
|
+
const result = validateAppDocument(input);
|
|
32
|
+
if (!result.ok) {
|
|
33
|
+
throw validationError(`invalid imported app document: ${result.error.message}`, {
|
|
34
|
+
reason: result.error.message,
|
|
35
|
+
validationCode: result.error.code,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return structuredClone(result.app);
|
|
39
|
+
};
|
|
40
|
+
const allowedDocumentFields = (input, omitted) => {
|
|
41
|
+
if (!isRecord(input))
|
|
42
|
+
return {};
|
|
43
|
+
const copy = {};
|
|
44
|
+
for (const field of APP_DOCUMENT_FIELDS) {
|
|
45
|
+
if (!omitted.has(field) && Object.prototype.hasOwnProperty.call(input, field)) {
|
|
46
|
+
copy[field] = structuredClone(input[field]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return copy;
|
|
50
|
+
};
|
|
51
|
+
// execution-v2 — interchange is document-only, a copy boundary: a machine (or
|
|
52
|
+
// retired v1 server) ref never crosses it. Export never writes one, import
|
|
53
|
+
// strips one a document tries to smuggle in, and the box's disk is scratch by
|
|
54
|
+
// the data rule — an imported app re-graduates on its own.
|
|
55
|
+
const withoutExportIdentity = (app) => allowedDocumentFields(app, new Set(["id", "server", "machine", "forkedFrom"]));
|
|
56
|
+
const withFreshIdentity = (input, id) => {
|
|
57
|
+
const copy = allowedDocumentFields(input, new Set(["id", "server", "machine", "forkedFrom"]));
|
|
58
|
+
copy.id = id;
|
|
59
|
+
return copy;
|
|
60
|
+
};
|
|
61
|
+
const parseArchive = (source) => {
|
|
62
|
+
try {
|
|
63
|
+
let entryCount = 0;
|
|
64
|
+
let declaredBytes = 0;
|
|
65
|
+
const archive = unzipSync(source, {
|
|
66
|
+
filter(entry) {
|
|
67
|
+
entryCount += 1;
|
|
68
|
+
declaredBytes += entry.originalSize;
|
|
69
|
+
if (entryCount > ARCHIVE_MAX_ENTRIES
|
|
70
|
+
|| entry.originalSize > ARCHIVE_MAX_ENTRY_BYTES
|
|
71
|
+
|| declaredBytes > ARCHIVE_MAX_TOTAL_BYTES) {
|
|
72
|
+
throw validationError("app archive exceeds size limits");
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
let inflatedBytes = 0;
|
|
78
|
+
for (const bytes of Object.values(archive)) {
|
|
79
|
+
inflatedBytes += bytes.byteLength;
|
|
80
|
+
if (bytes.byteLength > ARCHIVE_MAX_ENTRY_BYTES || inflatedBytes > ARCHIVE_MAX_TOTAL_BYTES) {
|
|
81
|
+
throw validationError("app archive exceeds size limits");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const appJson = archive["app.json"];
|
|
85
|
+
if (appJson === undefined)
|
|
86
|
+
throw validationError("invalid .vendoapp: app.json is missing");
|
|
87
|
+
return {
|
|
88
|
+
document: JSON.parse(decoder.decode(appJson)),
|
|
89
|
+
hasAppDirectory: Object.keys(archive).some((entry) => entry.startsWith("app/")),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (error instanceof VendoError)
|
|
94
|
+
throw error;
|
|
95
|
+
throw validationError("invalid .vendoapp archive", {
|
|
96
|
+
reason: error instanceof Error ? error.message : "archive parse failed",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
/** 06-apps §7 — build the copy-only .vendoapp import/export boundary. */
|
|
101
|
+
export const createAppInterchange = (dependencies) => {
|
|
102
|
+
const report = async (operation, appId, ctx, extra = {}) => {
|
|
103
|
+
await dependencies.guard.report(appLifecycleEvent(ctx.principal, ctx, appId, { operation, ...extra }));
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
async exportApp(appId, ctx) {
|
|
107
|
+
const app = await dependencies.requireOwned(appId, ctx.principal.subject);
|
|
108
|
+
assertPinsExportable(app.pins ?? [], dependencies.pinBaselines ?? []);
|
|
109
|
+
const archive = {
|
|
110
|
+
"app.json": encoder.encode(JSON.stringify(withoutExportIdentity(app))),
|
|
111
|
+
};
|
|
112
|
+
const bytes = zipSync(archive, { level: 6 });
|
|
113
|
+
await report("export", app.id, ctx);
|
|
114
|
+
return bytes;
|
|
115
|
+
},
|
|
116
|
+
async importApp(source, ctx) {
|
|
117
|
+
// Mint before document validation; an artifact id is never trusted (01-core §10).
|
|
118
|
+
const appId = `app_${globalThis.crypto.randomUUID()}`;
|
|
119
|
+
const parsed = source instanceof Uint8Array
|
|
120
|
+
? parseArchive(source)
|
|
121
|
+
: { document: source, hasAppDirectory: false };
|
|
122
|
+
const imported = validateImportedDocument(withFreshIdentity(parsed.document, appId));
|
|
123
|
+
await dependencies.store.records("vendo_apps").put(appRecordInput(imported, ctx.principal.subject));
|
|
124
|
+
// An app/ directory in the archive is machine scratch from an older
|
|
125
|
+
// export; it is ignored — the imported copy re-graduates on its own.
|
|
126
|
+
await report("import", imported.id, ctx, {
|
|
127
|
+
appDirectory: parsed.hasAppDirectory ? "ignored" : "absent",
|
|
128
|
+
});
|
|
129
|
+
return structuredClone(imported);
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=interchange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interchange.js","sourceRoot":"","sources":["../src/interchange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { type AppDocument, type AppId, type StoreAdapter } from "@vendoai/core";
|
|
2
|
+
import type { SandboxAdapter, SandboxMachine } from "./sandbox.js";
|
|
3
|
+
/** Injectable timer seam so idle auto-sleep is testable without real time. */
|
|
4
|
+
export interface LifecycleClock {
|
|
5
|
+
setTimeout(fn: () => void, ms: number): unknown;
|
|
6
|
+
clearTimeout(handle: unknown): void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Lane C's env-assembly seam (PORT, secrets, store URL, callback URL,
|
|
10
|
+
* inference endpoint). Injected here so the lanes do not collide; the default
|
|
11
|
+
* assembles nothing.
|
|
12
|
+
*
|
|
13
|
+
* Lane E adds `grants`: the runtime resolves the app's active secret grants
|
|
14
|
+
* and hands them to the host's assembler, so ONLY declared ∩ granted secrets
|
|
15
|
+
* inject real values (the assembler never reads grant state itself). The
|
|
16
|
+
* lifecycle calls the seam with the document only; the runtime composes the
|
|
17
|
+
* grant-carrying closure.
|
|
18
|
+
*/
|
|
19
|
+
export type BuildMachineEnv = (app: AppDocument, grants?: MachineEnvGrants) => Promise<Record<string, string>> | Record<string, string>;
|
|
20
|
+
/** Lane E — grant state resolved by the runtime for the env assembler. */
|
|
21
|
+
export interface MachineEnvGrants {
|
|
22
|
+
/** Names of declared secrets the owner granted to THIS app. */
|
|
23
|
+
grantedSecrets: ReadonlySet<string>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Lane E's egress-policy seam: resolves the CURRENT allowlist a machine must
|
|
27
|
+
* boot or wake with (approved declaration + implicit skin domains — see
|
|
28
|
+
* boxAllowlist in egress-approval.ts, where the list is assembled). Consulted
|
|
29
|
+
* on every provision AND every wake, so a grant decided while the machine
|
|
30
|
+
* slept applies at the next resume; it throws to refuse the operation (an
|
|
31
|
+
* unapproved declared domain must never reach the provider). `undefined`
|
|
32
|
+
* result means unrestricted egress (no policy for this app). No callback →
|
|
33
|
+
* pre-Lane-E behavior: create unrestricted, resume with the snapshot ref's
|
|
34
|
+
* stored policy.
|
|
35
|
+
*/
|
|
36
|
+
export type BuildMachineAllowlist = (app: AppDocument) => Promise<string[] | undefined> | string[] | undefined;
|
|
37
|
+
export interface MachineLifecycleConfig {
|
|
38
|
+
store: StoreAdapter;
|
|
39
|
+
sandbox?: SandboxAdapter;
|
|
40
|
+
buildEnv?: BuildMachineEnv;
|
|
41
|
+
allowedDomains?: BuildMachineAllowlist;
|
|
42
|
+
/**
|
|
43
|
+
* Wave 7 — push a freshly assembled boundary env into a LIVE machine (the
|
|
44
|
+
* runtime wires the box control port's env door, which restarts the app).
|
|
45
|
+
* A wake of a machine whose document carries `machine.envStaleAt` (a secret
|
|
46
|
+
* grant changed while it slept — resumes restore the SNAPSHOT's env on
|
|
47
|
+
* every provider) rebuilds the env through this seam and clears the marker.
|
|
48
|
+
* Fail-closed: an injection failure destroys the resumed machine and fails
|
|
49
|
+
* the wake (a box we cannot re-police must not serve — a revoked secret
|
|
50
|
+
* would stay usable inside it); the marker and ref survive for the retry.
|
|
51
|
+
*/
|
|
52
|
+
injectEnv?: (machine: SandboxMachine, env: Record<string, string>) => Promise<void>;
|
|
53
|
+
/** Provider base template every provisioned machine boots from. */
|
|
54
|
+
template?: string;
|
|
55
|
+
idleMs?: number;
|
|
56
|
+
clock?: LifecycleClock;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Execution-v2 machine lifecycle: provision on graduation, wake on demand,
|
|
60
|
+
* sleep on idle, destroy with the app. Wake single-flight and the idle timer
|
|
61
|
+
* are in-process state — multi-instance hosts can wake one app twice (known
|
|
62
|
+
* v2 limit; last sleep's CAS wins).
|
|
63
|
+
*/
|
|
64
|
+
export interface MachineLifecycle {
|
|
65
|
+
available(): boolean;
|
|
66
|
+
/** The live machine for an app, when one is awake in this process. */
|
|
67
|
+
peek(appId: AppId): SandboxMachine | undefined;
|
|
68
|
+
/** Create the machine from the base template, snapshot it, store the ref. Idempotent. */
|
|
69
|
+
provision(app: AppDocument): Promise<AppDocument>;
|
|
70
|
+
/** Resume the stored snapshot; concurrent wakes of one app share one machine. */
|
|
71
|
+
wake(app: AppDocument): Promise<SandboxMachine>;
|
|
72
|
+
/** Snapshot the live machine, store the new ref, stop it. No-op when not awake. */
|
|
73
|
+
sleep(app: AppDocument): Promise<AppDocument>;
|
|
74
|
+
/**
|
|
75
|
+
* execution-v2 Wave 3 — drop the live machine WITHOUT snapshotting it,
|
|
76
|
+
* leaving the document's `machine.snapshotRef` untouched: the app rolls back
|
|
77
|
+
* to its pre-edit snapshot (the next wake re-provisions from the prior ref).
|
|
78
|
+
* This is the failed-edit rollback — no new fork machinery, just "don't keep
|
|
79
|
+
* what the box just did". No-op when the app is not awake.
|
|
80
|
+
*/
|
|
81
|
+
discard(app: AppDocument): Promise<void>;
|
|
82
|
+
/** Destroy the sandbox and clear the document's machine field. */
|
|
83
|
+
destroyMachine(app: AppDocument): Promise<AppDocument>;
|
|
84
|
+
/**
|
|
85
|
+
* execution-v2 Wave 3 — reap ALL provider resources for an app (live machine
|
|
86
|
+
* + stored snapshot) WITHOUT rewriting the document. The delete path uses
|
|
87
|
+
* this: the row is about to be removed, so re-validating a machine-cleared
|
|
88
|
+
* document (which a graduated tree's `fn:` refs would fail) must never block
|
|
89
|
+
* the provider cleanup. Best-effort and idempotent.
|
|
90
|
+
*/
|
|
91
|
+
destroyResources(app: AppDocument): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* execution-v2 Wave 3 — the CURRENT boundary env for an app (PORT, granted
|
|
94
|
+
* secrets, skin URLs, inference), assembled by the injected buildEnv seam.
|
|
95
|
+
* The Wave-3 edit flow pushes this to the box's control port before an edit
|
|
96
|
+
* so a grant flipped while the machine slept lands via the in-box restart
|
|
97
|
+
* loop (Lane E's env-baked-at-provision gap).
|
|
98
|
+
*/
|
|
99
|
+
buildAppEnv(app: AppDocument): Promise<Record<string, string>>;
|
|
100
|
+
}
|
|
101
|
+
export declare const createMachineLifecycle: (config: MachineLifecycleConfig) => MachineLifecycle;
|
|
102
|
+
//# sourceMappingURL=machine-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-lifecycle.d.ts","sourceRoot":"","sources":["../src/machine-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAKnE,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,WAAW,EAChB,MAAM,CAAC,EAAE,gBAAgB,KACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9D,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,GAAG,EAAE,WAAW,KACb,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,IAAI,OAAO,CAAC;IACrB,sEAAsE;IACtE,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,GAAG,SAAS,CAAC;IAC/C,yFAAyF;IACzF,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,iFAAiF;IACjF,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAChD,mFAAmF;IACnF,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9C;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,kEAAkE;IAClE,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD;;;;;;OAMG;IACH,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD;;;;;;OAMG;IACH,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAChE;AAUD,eAAO,MAAM,sBAAsB,GAAI,QAAQ,sBAAsB,KAAG,gBAuWvE,CAAC"}
|