@axiom-lattice/microsandbox-service 0.0.1 → 0.0.3
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/.turbo/turbo-build.log +24 -16
- package/CHANGELOG.md +12 -0
- package/README.md +130 -0
- package/dist/chunk-KRXZP6OH.mjs +76 -0
- package/dist/chunk-KRXZP6OH.mjs.map +1 -0
- package/dist/{chunk-2W4CTYPX.mjs → chunk-VM3OJT5V.mjs} +267 -51
- package/dist/chunk-VM3OJT5V.mjs.map +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +773 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.mjs +12 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/index.d.mts +172 -18
- package/dist/index.d.ts +172 -18
- package/dist/index.js +264 -42
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/server.js +264 -48
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +3 -77
- package/dist/server.mjs.map +1 -1
- package/package.json +10 -5
- package/src/__tests__/ImageService.test.ts +50 -0
- package/src/__tests__/MicrosandboxRuntimeService.test.ts +138 -6
- package/src/__tests__/SandboxMetadataStore.test.ts +87 -0
- package/src/__tests__/SandboxRegistry.test.ts +17 -1
- package/src/__tests__/app.test.ts +174 -0
- package/src/__tests__/index.test.ts +4 -3
- package/src/__tests__/server-cli.test.ts +61 -0
- package/src/app.ts +5 -0
- package/src/cli.ts +8 -0
- package/src/controllers/images.ts +38 -0
- package/src/controllers/sandbox.ts +27 -0
- package/src/routes/images.ts +12 -0
- package/src/routes/sandbox.ts +2 -0
- package/src/schemas/images.ts +12 -0
- package/src/schemas/sandbox.ts +11 -0
- package/src/server.ts +0 -7
- package/src/services/ImageService.ts +54 -0
- package/src/services/MicrosandboxRuntimeService.ts +109 -7
- package/src/services/SandboxMetadataStore.ts +97 -0
- package/src/types/runtime-service.ts +40 -17
- package/dist/chunk-2W4CTYPX.mjs.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,29 +1,37 @@
|
|
|
1
1
|
|
|
2
|
-
> @axiom-lattice/microsandbox-service@0.0.
|
|
3
|
-
> tsup src/index.ts src/server.ts --format cjs,esm --dts --clean --sourcemap
|
|
2
|
+
> @axiom-lattice/microsandbox-service@0.0.3 build /home/runner/work/agentic/agentic/packages/microsandbox-service
|
|
3
|
+
> tsup src/index.ts src/server.ts src/cli.ts --format cjs,esm --dts --clean --sourcemap
|
|
4
4
|
|
|
5
|
-
[34mCLI[39m Building entry: src/index.ts, src/server.ts
|
|
5
|
+
[34mCLI[39m Building entry: src/cli.ts, src/index.ts, src/server.ts
|
|
6
6
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
7
|
[34mCLI[39m tsup v8.5.0
|
|
8
8
|
[34mCLI[39m Target: es2020
|
|
9
9
|
[34mCLI[39m Cleaning output folder
|
|
10
10
|
[34mCJS[39m Build start
|
|
11
11
|
[34mESM[39m Build start
|
|
12
|
+
[32mCJS[39m [1mdist/cli.js [22m[32m25.40 KB[39m
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m24.26 KB[39m
|
|
14
|
+
[32mCJS[39m [1mdist/server.js [22m[32m25.71 KB[39m
|
|
15
|
+
[32mCJS[39m [1mdist/cli.js.map [22m[32m53.23 KB[39m
|
|
16
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m49.47 KB[39m
|
|
17
|
+
[32mCJS[39m [1mdist/server.js.map [22m[32m52.95 KB[39m
|
|
18
|
+
[32mCJS[39m ⚡️ Build success in 174ms
|
|
19
|
+
[32mESM[39m [1mdist/cli.mjs [22m[32m277.00 B[39m
|
|
12
20
|
[32mESM[39m [1mdist/index.mjs [22m[32m206.00 B[39m
|
|
13
|
-
[32mESM[39m [1mdist/server.mjs [22m[
|
|
14
|
-
[32mESM[39m [1mdist/chunk-
|
|
21
|
+
[32mESM[39m [1mdist/server.mjs [22m[32m146.00 B[39m
|
|
22
|
+
[32mESM[39m [1mdist/chunk-KRXZP6OH.mjs [22m[32m1.71 KB[39m
|
|
23
|
+
[32mESM[39m [1mdist/chunk-VM3OJT5V.mjs [22m[32m21.33 KB[39m
|
|
24
|
+
[32mESM[39m [1mdist/cli.mjs.map [22m[32m389.00 B[39m
|
|
15
25
|
[32mESM[39m [1mdist/index.mjs.map [22m[32m71.00 B[39m
|
|
16
|
-
[32mESM[39m [1mdist/server.mjs.map [22m[
|
|
17
|
-
[32mESM[39m [1mdist/chunk-
|
|
18
|
-
[32mESM[39m
|
|
19
|
-
[
|
|
20
|
-
[32mCJS[39m [1mdist/server.js [22m[32m18.43 KB[39m
|
|
21
|
-
[32mCJS[39m [1mdist/index.js.map [22m[32m32.19 KB[39m
|
|
22
|
-
[32mCJS[39m [1mdist/server.js.map [22m[32m35.96 KB[39m
|
|
23
|
-
[32mCJS[39m ⚡️ Build success in 139ms
|
|
26
|
+
[32mESM[39m [1mdist/server.mjs.map [22m[32m71.00 B[39m
|
|
27
|
+
[32mESM[39m [1mdist/chunk-KRXZP6OH.mjs.map [22m[32m3.76 KB[39m
|
|
28
|
+
[32mESM[39m [1mdist/chunk-VM3OJT5V.mjs.map [22m[32m48.91 KB[39m
|
|
29
|
+
[32mESM[39m ⚡️ Build success in 177ms
|
|
24
30
|
[34mDTS[39m Build start
|
|
25
|
-
[32mDTS[39m ⚡️ Build success in
|
|
26
|
-
[32mDTS[39m [1mdist/
|
|
31
|
+
[32mDTS[39m ⚡️ Build success in 21471ms
|
|
32
|
+
[32mDTS[39m [1mdist/cli.d.ts [22m[32m20.00 B[39m
|
|
27
33
|
[32mDTS[39m [1mdist/server.d.ts [22m[32m281.00 B[39m
|
|
28
|
-
[32mDTS[39m [1mdist/index.d.
|
|
34
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m10.21 KB[39m
|
|
35
|
+
[32mDTS[39m [1mdist/cli.d.mts [22m[32m20.00 B[39m
|
|
29
36
|
[32mDTS[39m [1mdist/server.d.mts [22m[32m281.00 B[39m
|
|
37
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m10.21 KB[39m
|
package/CHANGELOG.md
CHANGED
package/README.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# @axiom-lattice/microsandbox-service
|
|
2
|
+
|
|
3
|
+
`@axiom-lattice/microsandbox-service` runs an HTTP service for managing microsandbox-backed sandbox lifecycle operations.
|
|
4
|
+
|
|
5
|
+
This package is intended to be deployed as a long-running process. Its primary runtime entrypoint is the `lattice-microsandbox-service` CLI.
|
|
6
|
+
|
|
7
|
+
## Install and Build
|
|
8
|
+
|
|
9
|
+
Build the package from the monorepo root:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm --filter @axiom-lattice/microsandbox-service build
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
After building, you can start the service through the package CLI or the package `start` script.
|
|
16
|
+
|
|
17
|
+
## CLI Usage
|
|
18
|
+
|
|
19
|
+
The package exposes this executable:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
lattice-microsandbox-service
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Supported flags:
|
|
26
|
+
|
|
27
|
+
- `--host <string>`
|
|
28
|
+
- `--port <number>`
|
|
29
|
+
|
|
30
|
+
Example:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
lattice-microsandbox-service --host 0.0.0.0 --port 4002
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Configuration
|
|
37
|
+
|
|
38
|
+
Runtime configuration is resolved in this order:
|
|
39
|
+
|
|
40
|
+
1. CLI arguments
|
|
41
|
+
2. Environment variables
|
|
42
|
+
3. Defaults
|
|
43
|
+
|
|
44
|
+
Supported environment variables:
|
|
45
|
+
|
|
46
|
+
- `HOST` default: `0.0.0.0`
|
|
47
|
+
- `PORT` default: `4002`
|
|
48
|
+
|
|
49
|
+
Example:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
HOST=0.0.0.0 PORT=4002 lattice-microsandbox-service
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Startup Examples
|
|
56
|
+
|
|
57
|
+
Start with CLI flags:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
lattice-microsandbox-service --host 127.0.0.1 --port 4002
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Start with environment variables:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
HOST=127.0.0.1 PORT=4002 lattice-microsandbox-service
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Start through the package script:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pnpm --filter @axiom-lattice/microsandbox-service start
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Check service health:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
curl http://127.0.0.1:4002/health
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Process Manager Examples
|
|
82
|
+
|
|
83
|
+
### systemd
|
|
84
|
+
|
|
85
|
+
```ini
|
|
86
|
+
[Unit]
|
|
87
|
+
Description=Axiom Lattice Microsandbox Service
|
|
88
|
+
After=network.target
|
|
89
|
+
|
|
90
|
+
[Service]
|
|
91
|
+
ExecStart=/usr/local/bin/lattice-microsandbox-service --host 0.0.0.0 --port 4002
|
|
92
|
+
Restart=on-failure
|
|
93
|
+
Environment=HOST=0.0.0.0
|
|
94
|
+
Environment=PORT=4002
|
|
95
|
+
|
|
96
|
+
[Install]
|
|
97
|
+
WantedBy=multi-user.target
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### supervisor
|
|
101
|
+
|
|
102
|
+
```ini
|
|
103
|
+
[program:microsandbox-service]
|
|
104
|
+
command=/usr/local/bin/lattice-microsandbox-service --host 0.0.0.0 --port 4002
|
|
105
|
+
autostart=true
|
|
106
|
+
autorestart=true
|
|
107
|
+
environment=HOST="0.0.0.0",PORT="4002"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### docker
|
|
111
|
+
|
|
112
|
+
```dockerfile
|
|
113
|
+
CMD ["lattice-microsandbox-service", "--host", "0.0.0.0", "--port", "4002"]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Local Development
|
|
117
|
+
|
|
118
|
+
Run the package in watch mode from the monorepo root:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
pnpm --filter @axiom-lattice/microsandbox-service dev
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
This command watches source files, rebuilds the package, and restarts the service automatically.
|
|
125
|
+
|
|
126
|
+
## Operational Notes
|
|
127
|
+
|
|
128
|
+
- Invalid startup configuration exits non-zero.
|
|
129
|
+
- Startup failures exit non-zero.
|
|
130
|
+
- `SIGINT` and `SIGTERM` trigger graceful shutdown.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildApp
|
|
3
|
+
} from "./chunk-VM3OJT5V.mjs";
|
|
4
|
+
|
|
5
|
+
// src/lib/server-cli.ts
|
|
6
|
+
function parsePort(raw, source) {
|
|
7
|
+
const value = Number(raw);
|
|
8
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
9
|
+
throw new Error(`Invalid value for ${source}: ${raw}`);
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
function parseServerArgs(argv) {
|
|
14
|
+
const parsed = {};
|
|
15
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
16
|
+
const token = argv[index];
|
|
17
|
+
if (token === "--port") {
|
|
18
|
+
const raw = argv[index + 1];
|
|
19
|
+
if (!raw) {
|
|
20
|
+
throw new Error("Missing value for --port");
|
|
21
|
+
}
|
|
22
|
+
parsed.port = parsePort(raw, "--port");
|
|
23
|
+
index += 1;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (token === "--host") {
|
|
27
|
+
const raw = argv[index + 1];
|
|
28
|
+
if (!raw) {
|
|
29
|
+
throw new Error("Missing value for --host");
|
|
30
|
+
}
|
|
31
|
+
parsed.host = raw;
|
|
32
|
+
index += 1;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return parsed;
|
|
36
|
+
}
|
|
37
|
+
function resolveServerConfig({
|
|
38
|
+
args,
|
|
39
|
+
env
|
|
40
|
+
}) {
|
|
41
|
+
return {
|
|
42
|
+
host: args.host ?? env.HOST ?? "0.0.0.0",
|
|
43
|
+
port: args.port ?? (env.PORT ? parsePort(env.PORT, "PORT") : 4002)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// src/server.ts
|
|
48
|
+
async function startServer({
|
|
49
|
+
argv = process.argv.slice(2),
|
|
50
|
+
env = process.env,
|
|
51
|
+
app = buildApp()
|
|
52
|
+
} = {}) {
|
|
53
|
+
const config = resolveServerConfig({ args: parseServerArgs(argv), env });
|
|
54
|
+
const shutdown = async (code) => {
|
|
55
|
+
try {
|
|
56
|
+
await app.close();
|
|
57
|
+
process.exit(code);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error("Failed to shutdown microsandbox-service cleanly", error);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
process.once("SIGINT", () => {
|
|
64
|
+
void shutdown(0);
|
|
65
|
+
});
|
|
66
|
+
process.once("SIGTERM", () => {
|
|
67
|
+
void shutdown(0);
|
|
68
|
+
});
|
|
69
|
+
await app.listen({ port: config.port, host: config.host });
|
|
70
|
+
return app;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export {
|
|
74
|
+
startServer
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=chunk-KRXZP6OH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/server-cli.ts","../src/server.ts"],"sourcesContent":["export interface ParsedServerArgs {\n host?: string;\n port?: number;\n}\n\nexport interface ResolvedServerConfig {\n host: string;\n port: number;\n}\n\nfunction parsePort(raw: string, source: string): number {\n const value = Number(raw);\n if (!Number.isInteger(value) || value <= 0) {\n throw new Error(`Invalid value for ${source}: ${raw}`);\n }\n return value;\n}\n\nexport function parseServerArgs(argv: string[]): ParsedServerArgs {\n const parsed: ParsedServerArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--port\") {\n const raw = argv[index + 1];\n if (!raw) {\n throw new Error(\"Missing value for --port\");\n }\n parsed.port = parsePort(raw, \"--port\");\n index += 1;\n continue;\n }\n\n if (token === \"--host\") {\n const raw = argv[index + 1];\n if (!raw) {\n throw new Error(\"Missing value for --host\");\n }\n parsed.host = raw;\n index += 1;\n }\n }\n\n return parsed;\n}\n\nexport function resolveServerConfig({\n args,\n env,\n}: {\n args: ParsedServerArgs;\n env: NodeJS.ProcessEnv;\n}): ResolvedServerConfig {\n return {\n host: args.host ?? env.HOST ?? \"0.0.0.0\",\n port: args.port ?? (env.PORT ? parsePort(env.PORT, \"PORT\") : 4002),\n };\n}\n","import type { FastifyInstance } from \"fastify\";\nimport { buildApp } from \"./app\";\nimport { parseServerArgs, resolveServerConfig } from \"./lib/server-cli\";\n\nexport async function startServer({\n argv = process.argv.slice(2),\n env = process.env,\n app = buildApp(),\n}: {\n argv?: string[];\n env?: NodeJS.ProcessEnv;\n app?: Pick<FastifyInstance, \"listen\" | \"close\">;\n} = {}): Promise<Pick<FastifyInstance, \"listen\" | \"close\">> {\n const config = resolveServerConfig({ args: parseServerArgs(argv), env });\n\n const shutdown = async (code: number): Promise<void> => {\n try {\n await app.close();\n process.exit(code);\n } catch (error) {\n console.error(\"Failed to shutdown microsandbox-service cleanly\", error);\n process.exit(1);\n }\n };\n\n process.once(\"SIGINT\", () => {\n void shutdown(0);\n });\n\n process.once(\"SIGTERM\", () => {\n void shutdown(0);\n });\n\n await app.listen({ port: config.port, host: config.host });\n return app;\n}\n"],"mappings":";;;;;AAUA,SAAS,UAAU,KAAa,QAAwB;AACtD,QAAM,QAAQ,OAAO,GAAG;AACxB,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,SAAS,GAAG;AAC1C,UAAM,IAAI,MAAM,qBAAqB,MAAM,KAAK,GAAG,EAAE;AAAA,EACvD;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,MAAkC;AAChE,QAAM,SAA2B,CAAC;AAElC,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,UAAM,QAAQ,KAAK,KAAK;AAExB,QAAI,UAAU,UAAU;AACtB,YAAM,MAAM,KAAK,QAAQ,CAAC;AAC1B,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AACA,aAAO,OAAO,UAAU,KAAK,QAAQ;AACrC,eAAS;AACT;AAAA,IACF;AAEA,QAAI,UAAU,UAAU;AACtB,YAAM,MAAM,KAAK,QAAQ,CAAC;AAC1B,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AACA,aAAO,OAAO;AACd,eAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AACF,GAGyB;AACvB,SAAO;AAAA,IACL,MAAM,KAAK,QAAQ,IAAI,QAAQ;AAAA,IAC/B,MAAM,KAAK,SAAS,IAAI,OAAO,UAAU,IAAI,MAAM,MAAM,IAAI;AAAA,EAC/D;AACF;;;ACtDA,eAAsB,YAAY;AAAA,EAChC,OAAO,QAAQ,KAAK,MAAM,CAAC;AAAA,EAC3B,MAAM,QAAQ;AAAA,EACd,MAAM,SAAS;AACjB,IAII,CAAC,GAAuD;AAC1D,QAAM,SAAS,oBAAoB,EAAE,MAAM,gBAAgB,IAAI,GAAG,IAAI,CAAC;AAEvE,QAAM,WAAW,OAAO,SAAgC;AACtD,QAAI;AACF,YAAM,IAAI,MAAM;AAChB,cAAQ,KAAK,IAAI;AAAA,IACnB,SAAS,OAAO;AACd,cAAQ,MAAM,mDAAmD,KAAK;AACtE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAEA,UAAQ,KAAK,UAAU,MAAM;AAC3B,SAAK,SAAS,CAAC;AAAA,EACjB,CAAC;AAED,UAAQ,KAAK,WAAW,MAAM;AAC5B,SAAK,SAAS,CAAC;AAAA,EACjB,CAAC;AAED,QAAM,IAAI,OAAO,EAAE,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AACzD,SAAO;AACT;","names":[]}
|