@open-everywhere/adapters 0.1.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.
Files changed (156) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +21 -0
  3. package/README.md +43 -0
  4. package/agent/aws/cli.ts +121 -0
  5. package/agent/aws/config.ts +71 -0
  6. package/agent/aws/register.ts +65 -0
  7. package/agent/aws/sso.ts +567 -0
  8. package/agent/aws/sts.ts +191 -0
  9. package/agent/blob/hosting.ts +24 -0
  10. package/agent/browser/config.ts +62 -0
  11. package/agent/browser/register.ts +66 -0
  12. package/agent/browser/sandbox.ts +39 -0
  13. package/agent/contributions.ts +12 -0
  14. package/agent/directory/config.ts +138 -0
  15. package/agent/directory/okta.ts +226 -0
  16. package/agent/directory/register.ts +16 -0
  17. package/agent/instrumentation.ts +42 -0
  18. package/agent/model/approval-judge.ts +57 -0
  19. package/agent/model/dream-judge.ts +105 -0
  20. package/agent/model/gateway-vision.ts +162 -0
  21. package/agent/model/gateway.ts +85 -0
  22. package/agent/oe-oauth/config.ts +246 -0
  23. package/agent/oe-oauth/errors.ts +77 -0
  24. package/agent/oe-oauth/oauth-client.ts +376 -0
  25. package/agent/oe-oauth/pkce.ts +21 -0
  26. package/agent/oe-oauth/register.ts +32 -0
  27. package/agent/oe-oauth/token-vault.ts +652 -0
  28. package/agent/oe-oauth/user-auth-flow.ts +76 -0
  29. package/agent/postgres/neon.ts +108 -0
  30. package/agent/sandbox/backend-stop.ts +259 -0
  31. package/agent/sandbox/created-sandbox-registry.ts +27 -0
  32. package/agent/sandbox/extend-workspace-time.ts +77 -0
  33. package/agent/sandbox/vercel-lifecycle.ts +252 -0
  34. package/dist/agent/aws/cli.d.ts +24 -0
  35. package/dist/agent/aws/cli.d.ts.map +1 -0
  36. package/dist/agent/aws/cli.js +89 -0
  37. package/dist/agent/aws/cli.js.map +1 -0
  38. package/dist/agent/aws/config.d.ts +27 -0
  39. package/dist/agent/aws/config.d.ts.map +1 -0
  40. package/dist/agent/aws/config.js +46 -0
  41. package/dist/agent/aws/config.js.map +1 -0
  42. package/dist/agent/aws/register.d.ts +23 -0
  43. package/dist/agent/aws/register.d.ts.map +1 -0
  44. package/dist/agent/aws/register.js +39 -0
  45. package/dist/agent/aws/register.js.map +1 -0
  46. package/dist/agent/aws/sso.d.ts +109 -0
  47. package/dist/agent/aws/sso.d.ts.map +1 -0
  48. package/dist/agent/aws/sso.js +421 -0
  49. package/dist/agent/aws/sso.js.map +1 -0
  50. package/dist/agent/aws/sts.d.ts +27 -0
  51. package/dist/agent/aws/sts.d.ts.map +1 -0
  52. package/dist/agent/aws/sts.js +135 -0
  53. package/dist/agent/aws/sts.js.map +1 -0
  54. package/dist/agent/blob/hosting.d.ts +4 -0
  55. package/dist/agent/blob/hosting.d.ts.map +1 -0
  56. package/dist/agent/blob/hosting.js +20 -0
  57. package/dist/agent/blob/hosting.js.map +1 -0
  58. package/dist/agent/browser/config.d.ts +24 -0
  59. package/dist/agent/browser/config.d.ts.map +1 -0
  60. package/dist/agent/browser/config.js +50 -0
  61. package/dist/agent/browser/config.js.map +1 -0
  62. package/dist/agent/browser/register.d.ts +7 -0
  63. package/dist/agent/browser/register.d.ts.map +1 -0
  64. package/dist/agent/browser/register.js +47 -0
  65. package/dist/agent/browser/register.js.map +1 -0
  66. package/dist/agent/browser/sandbox.d.ts +23 -0
  67. package/dist/agent/browser/sandbox.d.ts.map +1 -0
  68. package/dist/agent/browser/sandbox.js +27 -0
  69. package/dist/agent/browser/sandbox.js.map +1 -0
  70. package/dist/agent/contributions.d.ts +16 -0
  71. package/dist/agent/contributions.d.ts.map +1 -0
  72. package/dist/agent/contributions.js +11 -0
  73. package/dist/agent/contributions.js.map +1 -0
  74. package/dist/agent/directory/config.d.ts +39 -0
  75. package/dist/agent/directory/config.d.ts.map +1 -0
  76. package/dist/agent/directory/config.js +101 -0
  77. package/dist/agent/directory/config.js.map +1 -0
  78. package/dist/agent/directory/okta.d.ts +19 -0
  79. package/dist/agent/directory/okta.d.ts.map +1 -0
  80. package/dist/agent/directory/okta.js +178 -0
  81. package/dist/agent/directory/okta.js.map +1 -0
  82. package/dist/agent/directory/register.d.ts +6 -0
  83. package/dist/agent/directory/register.d.ts.map +1 -0
  84. package/dist/agent/directory/register.js +16 -0
  85. package/dist/agent/directory/register.js.map +1 -0
  86. package/dist/agent/instrumentation.d.ts +5 -0
  87. package/dist/agent/instrumentation.d.ts.map +1 -0
  88. package/dist/agent/instrumentation.js +39 -0
  89. package/dist/agent/instrumentation.js.map +1 -0
  90. package/dist/agent/model/approval-judge.d.ts +15 -0
  91. package/dist/agent/model/approval-judge.d.ts.map +1 -0
  92. package/dist/agent/model/approval-judge.js +46 -0
  93. package/dist/agent/model/approval-judge.js.map +1 -0
  94. package/dist/agent/model/dream-judge.d.ts +40 -0
  95. package/dist/agent/model/dream-judge.d.ts.map +1 -0
  96. package/dist/agent/model/dream-judge.js +80 -0
  97. package/dist/agent/model/dream-judge.js.map +1 -0
  98. package/dist/agent/model/gateway-vision.d.ts +53 -0
  99. package/dist/agent/model/gateway-vision.d.ts.map +1 -0
  100. package/dist/agent/model/gateway-vision.js +129 -0
  101. package/dist/agent/model/gateway-vision.js.map +1 -0
  102. package/dist/agent/model/gateway.d.ts +30 -0
  103. package/dist/agent/model/gateway.d.ts.map +1 -0
  104. package/dist/agent/model/gateway.js +55 -0
  105. package/dist/agent/model/gateway.js.map +1 -0
  106. package/dist/agent/oe-oauth/config.d.ts +69 -0
  107. package/dist/agent/oe-oauth/config.d.ts.map +1 -0
  108. package/dist/agent/oe-oauth/config.js +182 -0
  109. package/dist/agent/oe-oauth/config.js.map +1 -0
  110. package/dist/agent/oe-oauth/errors.d.ts +63 -0
  111. package/dist/agent/oe-oauth/errors.d.ts.map +1 -0
  112. package/dist/agent/oe-oauth/errors.js +73 -0
  113. package/dist/agent/oe-oauth/errors.js.map +1 -0
  114. package/dist/agent/oe-oauth/oauth-client.d.ts +124 -0
  115. package/dist/agent/oe-oauth/oauth-client.d.ts.map +1 -0
  116. package/dist/agent/oe-oauth/oauth-client.js +262 -0
  117. package/dist/agent/oe-oauth/oauth-client.js.map +1 -0
  118. package/dist/agent/oe-oauth/pkce.d.ts +8 -0
  119. package/dist/agent/oe-oauth/pkce.d.ts.map +1 -0
  120. package/dist/agent/oe-oauth/pkce.js +18 -0
  121. package/dist/agent/oe-oauth/pkce.js.map +1 -0
  122. package/dist/agent/oe-oauth/register.d.ts +17 -0
  123. package/dist/agent/oe-oauth/register.d.ts.map +1 -0
  124. package/dist/agent/oe-oauth/register.js +24 -0
  125. package/dist/agent/oe-oauth/register.js.map +1 -0
  126. package/dist/agent/oe-oauth/token-vault.d.ts +107 -0
  127. package/dist/agent/oe-oauth/token-vault.d.ts.map +1 -0
  128. package/dist/agent/oe-oauth/token-vault.js +498 -0
  129. package/dist/agent/oe-oauth/token-vault.js.map +1 -0
  130. package/dist/agent/oe-oauth/user-auth-flow.d.ts +10 -0
  131. package/dist/agent/oe-oauth/user-auth-flow.d.ts.map +1 -0
  132. package/dist/agent/oe-oauth/user-auth-flow.js +66 -0
  133. package/dist/agent/oe-oauth/user-auth-flow.js.map +1 -0
  134. package/dist/agent/postgres/neon.d.ts +29 -0
  135. package/dist/agent/postgres/neon.d.ts.map +1 -0
  136. package/dist/agent/postgres/neon.js +76 -0
  137. package/dist/agent/postgres/neon.js.map +1 -0
  138. package/dist/agent/sandbox/backend-stop.d.ts +98 -0
  139. package/dist/agent/sandbox/backend-stop.d.ts.map +1 -0
  140. package/dist/agent/sandbox/backend-stop.js +188 -0
  141. package/dist/agent/sandbox/backend-stop.js.map +1 -0
  142. package/dist/agent/sandbox/created-sandbox-registry.d.ts +15 -0
  143. package/dist/agent/sandbox/created-sandbox-registry.d.ts.map +1 -0
  144. package/dist/agent/sandbox/created-sandbox-registry.js +26 -0
  145. package/dist/agent/sandbox/created-sandbox-registry.js.map +1 -0
  146. package/dist/agent/sandbox/extend-workspace-time.d.ts +31 -0
  147. package/dist/agent/sandbox/extend-workspace-time.d.ts.map +1 -0
  148. package/dist/agent/sandbox/extend-workspace-time.js +63 -0
  149. package/dist/agent/sandbox/extend-workspace-time.js.map +1 -0
  150. package/dist/agent/sandbox/vercel-lifecycle.d.ts +38 -0
  151. package/dist/agent/sandbox/vercel-lifecycle.d.ts.map +1 -0
  152. package/dist/agent/sandbox/vercel-lifecycle.js +244 -0
  153. package/dist/agent/sandbox/vercel-lifecycle.js.map +1 -0
  154. package/package.json +204 -0
  155. package/tsconfig.build.json +22 -0
  156. package/tsconfig.json +22 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-vault.js","sourceRoot":"","sources":["../../../agent/oe-oauth/token-vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { UserAuthFlowProvider, OeOauthCallbackCompleter, CredentialPurgeHook } from "@open-everywhere/core/agent/adapter-api.js";
2
+ import type { OeOauthProviderConfig } from "./config.js";
3
+ import { type OeOauthVaultDeps } from "./token-vault.js";
4
+ /** Build the own-rolled provider plus the callback completer, sharing one token vault. `deps` is the DI seam. */
5
+ export declare function makeOeOauth(providers: ReadonlyMap<string, OeOauthProviderConfig>, deps?: OeOauthVaultDeps): {
6
+ readonly flow: UserAuthFlowProvider;
7
+ readonly completer: OeOauthCallbackCompleter;
8
+ readonly purge: CredentialPurgeHook;
9
+ };
10
+ //# sourceMappingURL=user-auth-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-auth-flow.d.ts","sourceRoot":"","sources":["../../../agent/oe-oauth/user-auth-flow.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAwC,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAC5K,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAyB,KAAK,gBAAgB,EAAuB,MAAM,kBAAkB,CAAC;AAQrG,iHAAiH;AACjH,wBAAgB,WAAW,CACzB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACrD,IAAI,GAAE,gBAAqB,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,CAyD5H"}
@@ -0,0 +1,66 @@
1
+ // The own-rolled OAuth USER-AUTH-FLOW adapter — core's vendor-neutral port over our own client and token
2
+ // vault. The callback completer shares ONE vault instance, so the single-flight lock covers both paths.
3
+ import { makeOeOauthTokenVault } from "./token-vault.js";
4
+ import { isUserAuthRequiredError } from "./errors.js";
5
+ /** Normalise the port's UserAuthSubject into the vault's subject shape. */
6
+ function toVaultSubject(subject) {
7
+ return subject.type === "app" ? { type: "app" } : { type: "user", id: subject.id };
8
+ }
9
+ /** Build the own-rolled provider plus the callback completer, sharing one token vault. `deps` is the DI seam. */
10
+ export function makeOeOauth(providers, deps = {}) {
11
+ const vault = makeOeOauthTokenVault(providers, deps);
12
+ const flow = {
13
+ async mintServiceToken(providerRef, _getTokenOptions) {
14
+ return { token: await vault.accessTokenFor(providerRef, { type: "app" }) };
15
+ },
16
+ async mintUserToken(providerRef, params) {
17
+ return { token: await vault.accessTokenFor(providerRef, { type: "user", id: params.subject.id }) };
18
+ },
19
+ async startAuthorization(providerRef, params, options) {
20
+ // `consent` (OPE-1619) rides through UNREAD — it is core's opaque record of the request this
21
+ // detour interrupted, and the vault stores it beside the pending row and returns it at the
22
+ // callback. This adapter never inspects it.
23
+ return vault.startAuthorization(providerRef, toVaultSubject(params.subject), {
24
+ ...(options.expiresInMs ? { expiresInMs: options.expiresInMs } : {}),
25
+ ...(options.consent ? { consent: options.consent } : {}),
26
+ });
27
+ },
28
+ isUserAuthRequired(e) {
29
+ return isUserAuthRequiredError(e);
30
+ },
31
+ async environmentClaim() {
32
+ return "self";
33
+ },
34
+ async hasFreshGrant(providerRef, subject) {
35
+ // (OPE-93) Existence check of the user's token vault row — the mid-turn self-heal signal (the real
36
+ // mint refreshes an expired token, so ROW EXISTENCE is what matters). Fail-soft: a vault-read
37
+ // failure reports `false`, never throws, so a probe error leaves the memo's short-circuit standing.
38
+ try {
39
+ return await vault.hasToken(providerRef, toVaultSubject(subject));
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ },
45
+ };
46
+ const completer = async ({ state, code }) => {
47
+ try {
48
+ // `subject` and `rebound` ride out UNREAD by this adapter: core's callback route audits them as
49
+ // `connector.credential_bound` (OPE-1937). No token material is on this path, by construction.
50
+ const { providerRef, subject, rebound, consent } = await vault.completeAuthorization(state, code);
51
+ return { ok: true, connectionName: providerRef, subject, rebound, ...(consent ? { consent } : {}) };
52
+ }
53
+ catch (err) {
54
+ return { ok: false, detail: err instanceof Error ? err.message : String(err) };
55
+ }
56
+ };
57
+ // The credential-purge hook, sharing the mint methods' vault: whatever this adapter can MINT for a subject it
58
+ // can also DESTROY. There is no app-subject purge — the service identity is not a person.
59
+ const purge = {
60
+ async purgeSubject(subjectId) {
61
+ return vault.forgetAll({ type: "user", id: subjectId });
62
+ },
63
+ };
64
+ return { flow, completer, purge };
65
+ }
66
+ //# sourceMappingURL=user-auth-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-auth-flow.js","sourceRoot":"","sources":["../../../agent/oe-oauth/user-auth-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type PgClient } from "@open-everywhere/core/agent/adapter-api.js";
2
+ /**
3
+ * Construct a Neon serverless client, initialise the schema, and register it as both the memory and the
4
+ * operational Postgres backend. Call once at startup, before the first session.
5
+ */
6
+ export declare function registerNeon(connectionString?: string | undefined): Promise<PgClient>;
7
+ /** The subset of @neondatabase/serverless's `neonConfig` we touch for the local-wsproxy recipe.
8
+ * `wsProxy` maps a target (host, port) to the proxy's `<host:port>/v1?address=…` URL. */
9
+ interface NeonConfig {
10
+ wsProxy?: (host: string, port: number) => string;
11
+ useSecureWebSocket?: boolean;
12
+ pipelineTLS?: boolean;
13
+ pipelineConnect?: boolean | "password";
14
+ webSocketConstructor?: unknown;
15
+ }
16
+ /**
17
+ * Point the driver at a local `wsproxy` so it reaches a plain Postgres over the compose network. NO-OP unless
18
+ * OE_NEON_WS_PROXY is set. Insecure WS is correct for a same-network local proxy ONLY, never a remote one.
19
+ */
20
+ export declare function configureLocalWsProxy(neonConfig: NeonConfig): void;
21
+ /**
22
+ * The Pool is a long-lived EventEmitter, and an idle connection's socket can error during teardown. With no
23
+ * 'error' listener Node kills the process, even after the request returned 200 — this listener is the fix.
24
+ */
25
+ export declare function attachPoolErrorHandler(pool: {
26
+ on?(event: "error", listener: (err: unknown) => void): unknown;
27
+ }): void;
28
+ export {};
29
+ //# sourceMappingURL=neon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neon.d.ts","sourceRoot":"","sources":["../../../agent/postgres/neon.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,QAAQ,EAEd,MAAM,4CAA4C,CAAC;AAEpD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,gBAAgB,qBAA2B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiDjG;AASD;0FAC0F;AAC1F,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAUlE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAA;CAAE,GAAG,IAAI,CAIrH"}
@@ -0,0 +1,76 @@
1
+ // Neon (serverless Postgres) adapter — where the driver is constructed and handed to core's register seams,
2
+ // so core stays vendor-SDK-free. LIVE-ONLY: it needs a real DATABASE_URL, and the driver imports dynamically.
3
+ import { registerPostgres, registerOperationalPostgres, initPostgresSchema, initOperationalSchema, } from "@open-everywhere/core/agent/adapter-api.js";
4
+ /**
5
+ * Construct a Neon serverless client, initialise the schema, and register it as both the memory and the
6
+ * operational Postgres backend. Call once at startup, before the first session.
7
+ */
8
+ export async function registerNeon(connectionString = process.env.DATABASE_URL) {
9
+ if (!connectionString) {
10
+ throw new Error("registerNeon: no connection string (set DATABASE_URL)");
11
+ }
12
+ // 🔴 This specifier is DELIBERATELY statically analyzable: hosted functions ship no node_modules, so the
13
+ // driver must be inlined by static resolution. A dynamic form killed every prod request (2026-08-11).
14
+ const mod = (await import("@neondatabase/serverless"));
15
+ // Local dev only: the serverless driver speaks WebSockets/HTTPS, not raw TCP, so a plain Postgres
16
+ // (the docker-compose postgres:16 sidecar) is reached through a `wsproxy` in front of it. OFF unless
17
+ // OE_NEON_WS_PROXY is set ⇒ the hosted Neon path is byte-identical. See docker-compose.yml.
18
+ configureLocalWsProxy(mod.neonConfig);
19
+ const { Pool } = mod;
20
+ const pool = new Pool({ connectionString });
21
+ attachPoolErrorHandler(pool);
22
+ const client = {
23
+ query: (text, params) => pool.query(text, params),
24
+ // The connection-pinning seam (OPE-1636). The audit chain's append needs `BEGIN … COMMIT`
25
+ // plus a transaction-scoped advisory lock on ONE connection; without this the hosted
26
+ // runtime's separate functions fork the chain. Every exit path releases, so a throwing
27
+ // callback can never leak a connection out of the pool.
28
+ withConnection: async (fn) => {
29
+ const conn = await pool.connect();
30
+ try {
31
+ const result = await fn({ query: (text, params) => conn.query(text, params) });
32
+ conn.release();
33
+ return result;
34
+ }
35
+ catch (err) {
36
+ // 🔴 `release(err)` DESTROYS the connection; a bare `release()` returns it to the pool
37
+ // whatever state it is in. A failed append can leave an open transaction holding the
38
+ // org's advisory lock, and that connection would then block every other appender for
39
+ // that org until it happened to be reused.
40
+ conn.release(err);
41
+ throw err;
42
+ }
43
+ },
44
+ };
45
+ await initPostgresSchema(client);
46
+ await initOperationalSchema(client);
47
+ registerPostgres(client);
48
+ registerOperationalPostgres(client);
49
+ return client;
50
+ }
51
+ /**
52
+ * Point the driver at a local `wsproxy` so it reaches a plain Postgres over the compose network. NO-OP unless
53
+ * OE_NEON_WS_PROXY is set. Insecure WS is correct for a same-network local proxy ONLY, never a remote one.
54
+ */
55
+ export function configureLocalWsProxy(neonConfig) {
56
+ const proxy = process.env.OE_NEON_WS_PROXY?.trim();
57
+ if (!proxy)
58
+ return;
59
+ neonConfig.wsProxy = (host, port) => `${proxy}/v1?address=${host}:${port}`;
60
+ neonConfig.useSecureWebSocket = false;
61
+ neonConfig.pipelineTLS = false;
62
+ neonConfig.pipelineConnect = false;
63
+ if (!neonConfig.webSocketConstructor && typeof globalThis.WebSocket !== "undefined") {
64
+ neonConfig.webSocketConstructor = globalThis.WebSocket;
65
+ }
66
+ }
67
+ /**
68
+ * The Pool is a long-lived EventEmitter, and an idle connection's socket can error during teardown. With no
69
+ * 'error' listener Node kills the process, even after the request returned 200 — this listener is the fix.
70
+ */
71
+ export function attachPoolErrorHandler(pool) {
72
+ pool.on?.("error", (err) => {
73
+ console.warn(`[open-everywhere:neon] pool error on an idle connection (ignored, no query affected): ${err instanceof Error ? err.message : String(err)}`);
74
+ });
75
+ }
76
+ //# sourceMappingURL=neon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neon.js","sourceRoot":"","sources":["../../../agent/postgres/neon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /** One sandbox as its backend reports it — `createdAt` (epoch ms) is the one honestly-observable
2
+ * timing reference (see vercel-lifecycle.ts's file-level comment on delta billing). */
3
+ export interface SandboxListing {
4
+ readonly name: string;
5
+ readonly status: string;
6
+ readonly createdAt: number;
7
+ }
8
+ /**
9
+ * The backend-specific half of the turn-end stop. One implementation per sandbox backend OE can
10
+ * select; `resolveSandboxStopper()` picks the one matching the running deployment.
11
+ *
12
+ * Injected into `stopSessionSandboxes` so the decision logic is testable without credentials, a
13
+ * docker daemon, or a platform.
14
+ */
15
+ export interface SandboxStopper {
16
+ /** Backend id, matching `OE_SANDBOX_BACKEND` / eve's backend name. For logs and tests. */
17
+ readonly backend: string;
18
+ /** Does this backend bill sandbox runtime by wall clock? Only then is a stop priced. */
19
+ readonly metered: boolean;
20
+ /** One line naming who owns the stop on this deployment, logged once per process. */
21
+ readonly ownership: string;
22
+ /** Sandboxes already tagged to this session. MUST NOT provision — an empty list is the
23
+ * correct answer for a backend that cannot look without creating. */
24
+ list(sessionId: string): Promise<SandboxListing[]>;
25
+ /** Stop the compute, preserving whatever the backend needs to reopen the session. */
26
+ stop(name: string): Promise<void>;
27
+ /**
28
+ * Re-tag an existing sandbox onto `sessionId`. Returns `true` when the backend re-tagged, and
29
+ * `false` when this backend never re-tags on attach — in which case there is nothing to undo
30
+ * and the caller must not treat the `false` as a failure. See the OPE-447 note on the Vercel
31
+ * implementation for why this exists at all.
32
+ */
33
+ retag(name: string, sessionId: string): Promise<boolean>;
34
+ }
35
+ /** Only a booted (or booting) sandbox is worth stopping; stopped/snapshotting are already done.
36
+ * Vercel's status vocabulary is the shared one — every other stopper normalises onto it. */
37
+ export declare function shouldStop(status: string): boolean;
38
+ /**
39
+ * `Sandbox.list({tags})` is the zero-side-effect peek this hook depends on, and `resume: false` keeps a
40
+ * stopped sandbox stopped. RETAG: `update` REPLACES the tag map, so the restore merges and overrides one key.
41
+ */
42
+ /**
43
+ * The raw Vercel SDK surface `createVercelList` needs — injectable so the OPE-722 augmentation
44
+ * below (falling back to a direct `Sandbox.get` for a name THIS process recorded opening) is
45
+ * unit-testable without live credentials. `defaultVercelListSdk` is the real `@vercel/sandbox`
46
+ * calls; tests inject a fake to prove the merge deterministically.
47
+ */
48
+ export interface VercelListSdk {
49
+ /** The tag-index query. OPE-722 reported this returning empty immediately after
50
+ * `Sandbox.create`, attributed to eventual consistency in the tag index; see the OPE-722
51
+ * doc comment on `createVercelList` below for what a later re-probe actually found. */
52
+ listByTag(sessionId: string): Promise<SandboxListing[]>;
53
+ /** A primary-key lookup by name. `undefined` when the sandbox genuinely does not exist (or the
54
+ * lookup failed) — the caller treats that exactly like "not found by the tag index either". */
55
+ getByName(name: string): Promise<SandboxListing | undefined>;
56
+ }
57
+ /**
58
+ * Augment the tag-index result with a direct `Sandbox.get` for any name THIS process recorded this turn
59
+ * (created-sandbox-registry.ts) — a primary-key read, so the stop never depends on tag-index freshness.
60
+ */
61
+ export declare function createVercelList(sdk?: VercelListSdk): SandboxStopper["list"];
62
+ export declare const vercelStopper: SandboxStopper;
63
+ /**
64
+ * eve labels every session container it CREATES with its diagnostic tags, prefixed
65
+ * `eve.sandbox.tag.` (its docker binding's `startDockerContainer`). That label is the only
66
+ * zero-side-effect handle on a running session container, so `docker ps` by label is the peek.
67
+ *
68
+ * The container is long-lived by construction: eve starts it with a `sleep 2147483647` keepalive
69
+ * and only ever stops it on `handle.stop()` or server shutdown. Without a turn-end stop a
70
+ * self-hosted box therefore accumulates one running container per conversation, indefinitely.
71
+ * `docker stop` (never `rm`) is the right verb: eve's `create` restarts a stopped container by
72
+ * name and the filesystem survives, which is the same stop/resume shape Vercel snapshots give.
73
+ */
74
+ export declare const DOCKER_SESSION_LABEL = "eve.sandbox.tag.sessionId";
75
+ /** The docker CLI as this module needs it. Injected in tests; the default shells out exactly as
76
+ * eve does, honouring `EVE_DOCKER_PATH` so a Podman-shimmed deployment keeps working. */
77
+ export interface DockerRunner {
78
+ (args: readonly string[]): Promise<string>;
79
+ }
80
+ /** Docker's own state vocabulary, mapped onto the shared one `shouldStop` reads. Anything else
81
+ * (exited, dead, removing, paused) passes through unchanged and is left alone. */
82
+ export declare function dockerStatusToSandboxStatus(state: string): string;
83
+ export declare function createDockerStopper(run?: DockerRunner): SandboxStopper;
84
+ /**
85
+ * The just-bash backend is an in-process interpreter — no VM, no container, no metered runtime — so this
86
+ * stopper is deliberately inert. It names itself in the log rather than swallowing an error.
87
+ */
88
+ export declare const justBashStopper: SandboxStopper;
89
+ /**
90
+ * The ONE "who stops the sandbox on this deployment" decision. It reads the SAME two switches the
91
+ * app reads to BUILD the backend — `onVercel()` and `resolveSelfHostBackendKind()` — so the
92
+ * backend that runs and the backend that stops can never disagree. An unknown
93
+ * `OE_SANDBOX_BACKEND` throws here exactly as it throws at boot; the hook's fail-soft catch logs
94
+ * it rather than failing the turn.
95
+ */
96
+ export declare function resolveSandboxStopper(): SandboxStopper;
97
+ export declare function setSandboxStopperForTest(stopper: SandboxStopper | undefined): void;
98
+ //# sourceMappingURL=backend-stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-stop.d.ts","sourceRoot":"","sources":["../../../agent/sandbox/backend-stop.ts"],"names":[],"mappings":"AAQA;wFACwF;AACxF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,0FAA0F;IAC1F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;0EACsE;IACtE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACnD,qFAAqF;IACrF,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC;;;;;OAKG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAED;6FAC6F;AAC7F,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElD;AAID;;;GAGG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;;4FAEwF;IACxF,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACxD;oGACgG;IAChG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;CAC9D;AAqBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,aAAoC,GAAG,cAAc,CAAC,MAAM,CAAC,CAUlG;AAED,eAAO,MAAM,aAAa,EAAE,cAc3B,CAAC;AAIF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAEhE;0FAC0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAWD;mFACmF;AACnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjE;AAOD,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,YAAkC,GAAG,cAAc,CA+C3F;AAID;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,cAc7B,CAAC;AAIF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,cAAc,CAItD;AAKD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAElF"}
@@ -0,0 +1,188 @@
1
+ // WHO OWNS THE TURN-END SANDBOX STOP — one implementation per sandbox backend. Each is a ZERO-SIDE-EFFECT
2
+ // peek first: eve's own `stop()` provisions, and a turn-end hook must never create a sandbox to stop one.
3
+ import { Sandbox } from "@vercel/sandbox";
4
+ import { execFile } from "node:child_process";
5
+ import { onVercel, resolveSelfHostBackendKind } from "@open-everywhere/core/agent/adapter-api.js";
6
+ import { getRecordedSandboxName } from "./created-sandbox-registry.js";
7
+ /** Only a booted (or booting) sandbox is worth stopping; stopped/snapshotting are already done.
8
+ * Vercel's status vocabulary is the shared one — every other stopper normalises onto it. */
9
+ export function shouldStop(status) {
10
+ return status === "running" || status === "pending";
11
+ }
12
+ const defaultVercelListSdk = {
13
+ async listByTag(sessionId) {
14
+ const result = await Sandbox.list({ tags: { sessionId } });
15
+ const out = [];
16
+ for await (const s of result)
17
+ out.push({ name: s.name, status: s.status, createdAt: s.createdAt });
18
+ return out;
19
+ },
20
+ async getByName(name) {
21
+ try {
22
+ const s = await Sandbox.get({ name, resume: false });
23
+ // Sandbox.get()'s `.createdAt` is a Date; Sandbox.list()'s iterated items report a number
24
+ // (epoch ms) for the same field — normalise onto the number SandboxListing already uses.
25
+ return { name: s.name, status: s.status, createdAt: s.createdAt.getTime() };
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ },
31
+ };
32
+ /**
33
+ * Augment the tag-index result with a direct `Sandbox.get` for any name THIS process recorded this turn
34
+ * (created-sandbox-registry.ts) — a primary-key read, so the stop never depends on tag-index freshness.
35
+ */
36
+ export function createVercelList(sdk = defaultVercelListSdk) {
37
+ return async (sessionId) => {
38
+ const out = await sdk.listByTag(sessionId);
39
+ const recordedName = getRecordedSandboxName(sessionId);
40
+ if (recordedName !== undefined && !out.some((s) => s.name === recordedName)) {
41
+ const direct = await sdk.getByName(recordedName);
42
+ if (direct !== undefined)
43
+ out.push(direct);
44
+ }
45
+ return out;
46
+ };
47
+ }
48
+ export const vercelStopper = {
49
+ backend: "vercel",
50
+ metered: true,
51
+ ownership: "stop owner = vercel — @vercel/sandbox stops the session VM at turn end, and its runtime seconds are priced into the spend ledger",
52
+ list: createVercelList(),
53
+ async stop(name) {
54
+ await (await Sandbox.get({ name, resume: false })).stop();
55
+ },
56
+ async retag(name, sessionId) {
57
+ const sandbox = await Sandbox.get({ name, resume: false });
58
+ await sandbox.update({ tags: { ...(sandbox.tags ?? {}), sessionId } });
59
+ return true;
60
+ },
61
+ };
62
+ // ── docker ────────────────────────────────────────────────────────────────────────────────────
63
+ /**
64
+ * eve labels every session container it CREATES with its diagnostic tags, prefixed
65
+ * `eve.sandbox.tag.` (its docker binding's `startDockerContainer`). That label is the only
66
+ * zero-side-effect handle on a running session container, so `docker ps` by label is the peek.
67
+ *
68
+ * The container is long-lived by construction: eve starts it with a `sleep 2147483647` keepalive
69
+ * and only ever stops it on `handle.stop()` or server shutdown. Without a turn-end stop a
70
+ * self-hosted box therefore accumulates one running container per conversation, indefinitely.
71
+ * `docker stop` (never `rm`) is the right verb: eve's `create` restarts a stopped container by
72
+ * name and the filesystem survives, which is the same stop/resume shape Vercel snapshots give.
73
+ */
74
+ export const DOCKER_SESSION_LABEL = "eve.sandbox.tag.sessionId";
75
+ const defaultDockerRunner = async (args) => await new Promise((resolve, reject) => {
76
+ const bin = process.env.EVE_DOCKER_PATH?.trim() || "docker";
77
+ execFile(bin, [...args], { encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }, (err, stdout) => {
78
+ if (err)
79
+ reject(err);
80
+ else
81
+ resolve(stdout);
82
+ });
83
+ });
84
+ /** Docker's own state vocabulary, mapped onto the shared one `shouldStop` reads. Anything else
85
+ * (exited, dead, removing, paused) passes through unchanged and is left alone. */
86
+ export function dockerStatusToSandboxStatus(state) {
87
+ if (state === "running")
88
+ return "running";
89
+ if (state === "created" || state === "restarting")
90
+ return "pending";
91
+ return state;
92
+ }
93
+ /** `docker inspect` reports `0001-01-01T00:00:00Z` for a container that never started. Anything
94
+ * before this floor is not a real start time — report "now" so the window is 0, never a
95
+ * two-thousand-year one. */
96
+ const DOCKER_START_TIME_FLOOR_MS = Date.UTC(2000, 0, 1);
97
+ export function createDockerStopper(run = defaultDockerRunner) {
98
+ return {
99
+ backend: "docker",
100
+ metered: false,
101
+ ownership: "stop owner = docker — eve's session containers are stopped through the docker CLI at turn end. Runtime is NOT metered per second on this backend, so no spend-ledger row is written for it",
102
+ async list(sessionId) {
103
+ const names = (await run(["ps", "-a", "--no-trunc", "--filter", `label=${DOCKER_SESSION_LABEL}=${sessionId}`, "--format", "{{.Names}}"]))
104
+ .split("\n")
105
+ .map((l) => l.trim())
106
+ .filter((l) => l.length > 0);
107
+ if (names.length === 0)
108
+ return [];
109
+ // One inspect for all of them; `{{.Name}}` carries a leading slash, so the name is read back
110
+ // rather than zipped by position. `docker inspect` FAILS THE WHOLE CALL if any one name has
111
+ // gone away since the peek, so a vanished container must not blind the sweep to its
112
+ // siblings: fall back to treating every listed name as running now. `docker stop` on a name
113
+ // that no longer exists then fails soft, per sandbox, in stopSessionSandboxes.
114
+ let inspected;
115
+ try {
116
+ inspected = await run(["inspect", "--format", "{{.Name}}\t{{.State.Status}}\t{{.State.StartedAt}}", ...names]);
117
+ }
118
+ catch {
119
+ const now = Date.now();
120
+ return names.map((name) => ({ name, status: "running", createdAt: now }));
121
+ }
122
+ const out = [];
123
+ for (const line of inspected.split("\n")) {
124
+ const [rawName, state, startedAt] = line.trim().split("\t");
125
+ if (rawName === undefined || state === undefined)
126
+ continue;
127
+ const name = rawName.replace(/^\//, "");
128
+ if (name.length === 0)
129
+ continue;
130
+ const parsed = startedAt === undefined ? Number.NaN : Date.parse(startedAt);
131
+ const createdAt = Number.isFinite(parsed) && parsed >= DOCKER_START_TIME_FLOOR_MS ? parsed : Date.now();
132
+ out.push({ name, status: dockerStatusToSandboxStatus(state), createdAt });
133
+ }
134
+ return out;
135
+ },
136
+ async stop(name) {
137
+ await run(["stop", "-t", "0", name]);
138
+ },
139
+ async retag() {
140
+ // eve's docker binding applies labels ONLY on `docker run`, i.e. when it creates the
141
+ // container. A reattach (`container inspect` then `docker start`) never re-labels, and a
142
+ // running container's labels are immutable anyway. So the OPE-447 re-tag hazard does not
143
+ // exist on this backend and there is nothing to hand back.
144
+ return false;
145
+ },
146
+ };
147
+ }
148
+ // ── just-bash ─────────────────────────────────────────────────────────────────────────────────
149
+ /**
150
+ * The just-bash backend is an in-process interpreter — no VM, no container, no metered runtime — so this
151
+ * stopper is deliberately inert. It names itself in the log rather than swallowing an error.
152
+ */
153
+ export const justBashStopper = {
154
+ backend: "just-bash",
155
+ metered: false,
156
+ ownership: "stop owner = NONE — the just-bash backend runs inside this app process. There is no VM or container to stop and no metered runtime, so the turn-end sweep is inert by design. Set OE_SANDBOX_BACKEND=docker for a backend whose compute is stopped at turn end",
157
+ async list() {
158
+ return [];
159
+ },
160
+ async stop() {
161
+ // Unreachable: list() never yields a name.
162
+ },
163
+ async retag() {
164
+ return false;
165
+ },
166
+ };
167
+ // ── selection ─────────────────────────────────────────────────────────────────────────────────
168
+ /**
169
+ * The ONE "who stops the sandbox on this deployment" decision. It reads the SAME two switches the
170
+ * app reads to BUILD the backend — `onVercel()` and `resolveSelfHostBackendKind()` — so the
171
+ * backend that runs and the backend that stops can never disagree. An unknown
172
+ * `OE_SANDBOX_BACKEND` throws here exactly as it throws at boot; the hook's fail-soft catch logs
173
+ * it rather than failing the turn.
174
+ */
175
+ export function resolveSandboxStopper() {
176
+ if (forcedStopper !== undefined)
177
+ return forcedStopper;
178
+ if (onVercel())
179
+ return vercelStopper;
180
+ return resolveSelfHostBackendKind() === "justbash" ? justBashStopper : createDockerStopper();
181
+ }
182
+ /** Test seam: force the resolved stopper so the hook's own branching can be driven without a
183
+ * platform, credentials or a docker daemon. Pass `undefined` to restore real selection. */
184
+ let forcedStopper;
185
+ export function setSandboxStopperForTest(stopper) {
186
+ forcedStopper = stopper;
187
+ }
188
+ //# sourceMappingURL=backend-stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-stop.js","sourceRoot":"","sources":["../../../agent/sandbox/backend-stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Record the vendor sandbox name eve just opened for `sessionId`, in THIS process. Called from
3
+ * `agent/sandbox/sandbox.ts`'s `onSession` hook. Never throws — a caller that races this against
4
+ * a torn-down process loses nothing beyond falling back to the pre-fix `Sandbox.list` behaviour.
5
+ */
6
+ export declare function recordCreatedSandbox(sessionId: string, name: string): void;
7
+ /**
8
+ * The vendor sandbox name recorded for `sessionId` in THIS process, if any. `undefined` means
9
+ * either no sandbox was opened here this invocation, or it was opened by a different process —
10
+ * both cases fall back to the vendor's tag index, exactly as before this fix.
11
+ */
12
+ export declare function getRecordedSandboxName(sessionId: string): string | undefined;
13
+ /** Test seam: reset between assertions so one test's recording can't leak into the next. */
14
+ export declare function clearRecordedSandboxesForTest(): void;
15
+ //# sourceMappingURL=created-sandbox-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"created-sandbox-registry.d.ts","sourceRoot":"","sources":["../../../agent/sandbox/created-sandbox-registry.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAG1E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,4FAA4F;AAC5F,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
@@ -0,0 +1,26 @@
1
+ // Record the sandbox name THIS process opened, so the stop hook can reach it with a primary-key
2
+ // `Sandbox.get` instead of the tag index. It NARROWS the create-then-stop race, and never replaces `list()`.
3
+ const recordedSandboxNames = new Map();
4
+ /**
5
+ * Record the vendor sandbox name eve just opened for `sessionId`, in THIS process. Called from
6
+ * `agent/sandbox/sandbox.ts`'s `onSession` hook. Never throws — a caller that races this against
7
+ * a torn-down process loses nothing beyond falling back to the pre-fix `Sandbox.list` behaviour.
8
+ */
9
+ export function recordCreatedSandbox(sessionId, name) {
10
+ if (sessionId.length === 0 || name.length === 0)
11
+ return;
12
+ recordedSandboxNames.set(sessionId, name);
13
+ }
14
+ /**
15
+ * The vendor sandbox name recorded for `sessionId` in THIS process, if any. `undefined` means
16
+ * either no sandbox was opened here this invocation, or it was opened by a different process —
17
+ * both cases fall back to the vendor's tag index, exactly as before this fix.
18
+ */
19
+ export function getRecordedSandboxName(sessionId) {
20
+ return recordedSandboxNames.get(sessionId);
21
+ }
22
+ /** Test seam: reset between assertions so one test's recording can't leak into the next. */
23
+ export function clearRecordedSandboxesForTest() {
24
+ recordedSandboxNames.clear();
25
+ }
26
+ //# sourceMappingURL=created-sandbox-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"created-sandbox-registry.js","sourceRoot":"","sources":["../../../agent/sandbox/created-sandbox-registry.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,6GAA6G;AAC7G,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,IAAY;IAClE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACxD,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,OAAO,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,6BAA6B;IAC3C,oBAAoB,CAAC,KAAK,EAAE,CAAC;AAC/B,CAAC"}