@multiplayer-app/agent 0.1.19 → 0.1.21
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/README.md +14 -7
- package/dist/agent/definition.d.ts +13 -0
- package/dist/agent/definition.d.ts.map +1 -1
- package/dist/agent/definition.test.js +8 -3
- package/dist/agent/definition.test.js.map +1 -1
- package/dist/agent/profiles/coding.d.ts +1 -1
- package/dist/agent/profiles/coding.d.ts.map +1 -1
- package/dist/agent/profiles/coding.js +21 -4
- package/dist/agent/profiles/coding.js.map +1 -1
- package/dist/agent/profiles/index.js +1 -1
- package/dist/agent/profiles/index.js.map +1 -1
- package/dist/agent/profiles/research.d.ts.map +1 -1
- package/dist/agent/profiles/research.js +23 -1
- package/dist/agent/profiles/research.js.map +1 -1
- package/dist/agent/turn-history.d.ts +40 -0
- package/dist/agent/turn-history.d.ts.map +1 -0
- package/dist/agent/turn-history.js +167 -0
- package/dist/agent/turn-history.js.map +1 -0
- package/dist/agent/turn-runner.d.ts +22 -1
- package/dist/agent/turn-runner.d.ts.map +1 -1
- package/dist/agent/turn-runner.js +162 -79
- package/dist/agent/turn-runner.js.map +1 -1
- package/dist/app/app-host.d.ts +57 -0
- package/dist/app/app-host.d.ts.map +1 -0
- package/dist/app/app-host.js +252 -0
- package/dist/app/app-host.js.map +1 -0
- package/dist/app/app-host.test.d.ts +2 -0
- package/dist/app/app-host.test.d.ts.map +1 -0
- package/dist/app/app-host.test.js +639 -0
- package/dist/app/app-host.test.js.map +1 -0
- package/dist/app/config.d.ts +196 -0
- package/dist/app/config.d.ts.map +1 -0
- package/dist/app/config.js +362 -0
- package/dist/app/config.js.map +1 -0
- package/dist/app/config.test.d.ts +2 -0
- package/dist/app/config.test.d.ts.map +1 -0
- package/dist/app/config.test.js +224 -0
- package/dist/app/config.test.js.map +1 -0
- package/dist/app/detect.d.ts +68 -0
- package/dist/app/detect.d.ts.map +1 -0
- package/dist/app/detect.js +449 -0
- package/dist/app/detect.js.map +1 -0
- package/dist/app/detect.test.d.ts +2 -0
- package/dist/app/detect.test.d.ts.map +1 -0
- package/dist/app/detect.test.js +267 -0
- package/dist/app/detect.test.js.map +1 -0
- package/dist/app/env.d.ts +5 -0
- package/dist/app/env.d.ts.map +1 -0
- package/dist/app/env.js +22 -0
- package/dist/app/env.js.map +1 -0
- package/dist/app/functions-cli.d.ts +3 -0
- package/dist/app/functions-cli.d.ts.map +1 -0
- package/dist/app/functions-cli.js +27 -0
- package/dist/app/functions-cli.js.map +1 -0
- package/dist/app/functions-host.d.ts +15 -0
- package/dist/app/functions-host.d.ts.map +1 -0
- package/dist/app/functions-host.js +276 -0
- package/dist/app/functions-host.js.map +1 -0
- package/dist/app/functions-host.test.d.ts +2 -0
- package/dist/app/functions-host.test.d.ts.map +1 -0
- package/dist/app/functions-host.test.js +117 -0
- package/dist/app/functions-host.test.js.map +1 -0
- package/dist/app/functions-routes.d.ts +23 -0
- package/dist/app/functions-routes.d.ts.map +1 -0
- package/dist/app/functions-routes.js +85 -0
- package/dist/app/functions-routes.js.map +1 -0
- package/dist/app/functions-routes.test.d.ts +2 -0
- package/dist/app/functions-routes.test.d.ts.map +1 -0
- package/dist/app/functions-routes.test.js +40 -0
- package/dist/app/functions-routes.test.js.map +1 -0
- package/dist/app/manifest.d.ts +17 -0
- package/dist/app/manifest.d.ts.map +1 -0
- package/dist/app/manifest.js +64 -0
- package/dist/app/manifest.js.map +1 -0
- package/dist/app/manifest.test.d.ts +2 -0
- package/dist/app/manifest.test.d.ts.map +1 -0
- package/dist/app/manifest.test.js +173 -0
- package/dist/app/manifest.test.js.map +1 -0
- package/dist/app/release-artifacts.d.ts +39 -0
- package/dist/app/release-artifacts.d.ts.map +1 -0
- package/dist/app/release-artifacts.js +229 -0
- package/dist/app/release-artifacts.js.map +1 -0
- package/dist/app/release-artifacts.test.d.ts +2 -0
- package/dist/app/release-artifacts.test.d.ts.map +1 -0
- package/dist/app/release-artifacts.test.js +295 -0
- package/dist/app/release-artifacts.test.js.map +1 -0
- package/dist/app/route-pattern.d.ts +23 -0
- package/dist/app/route-pattern.d.ts.map +1 -0
- package/dist/app/route-pattern.js +339 -0
- package/dist/app/route-pattern.js.map +1 -0
- package/dist/app/route-pattern.test.d.ts +2 -0
- package/dist/app/route-pattern.test.d.ts.map +1 -0
- package/dist/app/route-pattern.test.js +187 -0
- package/dist/app/route-pattern.test.js.map +1 -0
- package/dist/app/rules.d.ts +61 -0
- package/dist/app/rules.d.ts.map +1 -0
- package/dist/app/rules.js +90 -0
- package/dist/app/rules.js.map +1 -0
- package/dist/app/rules.test.d.ts +2 -0
- package/dist/app/rules.test.d.ts.map +1 -0
- package/dist/app/rules.test.js +69 -0
- package/dist/app/rules.test.js.map +1 -0
- package/dist/app/runner.d.ts +109 -0
- package/dist/app/runner.d.ts.map +1 -0
- package/dist/app/runner.js +429 -0
- package/dist/app/runner.js.map +1 -0
- package/dist/app/site.d.ts +73 -0
- package/dist/app/site.d.ts.map +1 -0
- package/dist/app/site.js +161 -0
- package/dist/app/site.js.map +1 -0
- package/dist/app/site.test.d.ts +2 -0
- package/dist/app/site.test.d.ts.map +1 -0
- package/dist/app/site.test.js +291 -0
- package/dist/app/site.test.js.map +1 -0
- package/dist/app/static-server.d.ts +20 -0
- package/dist/app/static-server.d.ts.map +1 -0
- package/dist/app/static-server.js +145 -0
- package/dist/app/static-server.js.map +1 -0
- package/dist/context-pruning.d.ts +2 -0
- package/dist/context-pruning.d.ts.map +1 -1
- package/dist/context-pruning.js +3 -2
- package/dist/context-pruning.js.map +1 -1
- package/dist/models/usage.d.ts +6 -0
- package/dist/models/usage.d.ts.map +1 -1
- package/dist/models/usage.js +13 -0
- package/dist/models/usage.js.map +1 -1
- package/dist/persistence/conversation-store.d.ts +21 -0
- package/dist/persistence/conversation-store.d.ts.map +1 -0
- package/dist/persistence/conversation-store.js +59 -0
- package/dist/persistence/conversation-store.js.map +1 -0
- package/dist/persistence/conversation-store.test.d.ts +2 -0
- package/dist/persistence/conversation-store.test.d.ts.map +1 -0
- package/dist/persistence/conversation-store.test.js +98 -0
- package/dist/persistence/conversation-store.test.js.map +1 -0
- package/dist/persistence/git-sync.d.ts +14 -1
- package/dist/persistence/git-sync.d.ts.map +1 -1
- package/dist/persistence/git-sync.js +73 -17
- package/dist/persistence/git-sync.js.map +1 -1
- package/dist/persistence/git-sync.test.js +155 -6
- package/dist/persistence/git-sync.test.js.map +1 -1
- package/dist/persistence/snapshot-sync.d.ts +19 -2
- package/dist/persistence/snapshot-sync.d.ts.map +1 -1
- package/dist/persistence/snapshot-sync.js +194 -83
- package/dist/persistence/snapshot-sync.js.map +1 -1
- package/dist/persistence/snapshot-sync.test.js +145 -27
- package/dist/persistence/snapshot-sync.test.js.map +1 -1
- package/dist/persistence/workspace.d.ts +3 -0
- package/dist/persistence/workspace.d.ts.map +1 -1
- package/dist/persistence/workspace.js +1 -0
- package/dist/persistence/workspace.js.map +1 -1
- package/dist/research/extract-texts.d.ts.map +1 -1
- package/dist/research/extract-texts.js +34 -16
- package/dist/research/extract-texts.js.map +1 -1
- package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
- package/dist/research/filingramp/attachment-tools.js +7 -4
- package/dist/research/filingramp/attachment-tools.js.map +1 -1
- package/dist/research/filingramp/shared.d.ts.map +1 -1
- package/dist/research/filingramp/shared.js +5 -5
- package/dist/research/filingramp/shared.js.map +1 -1
- package/dist/research/prompt.d.ts.map +1 -1
- package/dist/research/prompt.js +2 -1
- package/dist/research/prompt.js.map +1 -1
- package/dist/runtime/app-mode.d.ts +10 -0
- package/dist/runtime/app-mode.d.ts.map +1 -0
- package/dist/runtime/app-mode.js +172 -0
- package/dist/runtime/app-mode.js.map +1 -0
- package/dist/runtime/app-mode.test.d.ts +2 -0
- package/dist/runtime/app-mode.test.d.ts.map +1 -0
- package/dist/runtime/app-mode.test.js +130 -0
- package/dist/runtime/app-mode.test.js.map +1 -0
- package/dist/runtime/app-rehearsal.d.ts +2 -0
- package/dist/runtime/app-rehearsal.d.ts.map +1 -0
- package/dist/runtime/app-rehearsal.js +56 -0
- package/dist/runtime/app-rehearsal.js.map +1 -0
- package/dist/runtime/build-mode.d.ts +12 -0
- package/dist/runtime/build-mode.d.ts.map +1 -0
- package/dist/runtime/build-mode.js +116 -0
- package/dist/runtime/build-mode.js.map +1 -0
- package/dist/runtime/build-mode.test.d.ts +2 -0
- package/dist/runtime/build-mode.test.d.ts.map +1 -0
- package/dist/runtime/build-mode.test.js +121 -0
- package/dist/runtime/build-mode.test.js.map +1 -0
- package/dist/runtime/cli.js +7 -2
- package/dist/runtime/cli.js.map +1 -1
- package/dist/runtime/config.d.ts +4 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +13 -2
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/guest-server.d.ts +3 -0
- package/dist/runtime/guest-server.d.ts.map +1 -0
- package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
- package/dist/runtime/guest-server.js.map +1 -0
- package/dist/runtime/image-hooks.d.ts +5 -0
- package/dist/runtime/image-hooks.d.ts.map +1 -0
- package/dist/runtime/image-hooks.js +68 -0
- package/dist/runtime/image-hooks.js.map +1 -0
- package/dist/runtime/image-hooks.test.d.ts +2 -0
- package/dist/runtime/image-hooks.test.d.ts.map +1 -0
- package/dist/runtime/image-hooks.test.js +74 -0
- package/dist/runtime/image-hooks.test.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -3
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +53 -35
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/listening-ports.d.ts +13 -0
- package/dist/runtime/listening-ports.d.ts.map +1 -0
- package/dist/runtime/listening-ports.js +78 -0
- package/dist/runtime/listening-ports.js.map +1 -0
- package/dist/runtime/listening-ports.test.d.ts +2 -0
- package/dist/runtime/listening-ports.test.d.ts.map +1 -0
- package/dist/runtime/listening-ports.test.js +39 -0
- package/dist/runtime/listening-ports.test.js.map +1 -0
- package/dist/runtime/preview-proxy.d.ts +56 -0
- package/dist/runtime/preview-proxy.d.ts.map +1 -0
- package/dist/runtime/preview-proxy.js +302 -0
- package/dist/runtime/preview-proxy.js.map +1 -0
- package/dist/runtime/preview-proxy.test.d.ts +2 -0
- package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
- package/dist/runtime/preview-proxy.test.js +122 -0
- package/dist/runtime/preview-proxy.test.js.map +1 -0
- package/dist/runtime/session-mode.d.ts +3 -0
- package/dist/runtime/session-mode.d.ts.map +1 -0
- package/dist/runtime/session-mode.js +60 -0
- package/dist/runtime/session-mode.js.map +1 -0
- package/dist/runtime/workload.d.ts +44 -0
- package/dist/runtime/workload.d.ts.map +1 -0
- package/dist/runtime/workload.js +222 -0
- package/dist/runtime/workload.js.map +1 -0
- package/dist/runtime/workload.test.d.ts +2 -0
- package/dist/runtime/workload.test.d.ts.map +1 -0
- package/dist/runtime/workload.test.js +235 -0
- package/dist/runtime/workload.test.js.map +1 -0
- package/dist/session/conversation.d.ts +10 -2
- package/dist/session/conversation.d.ts.map +1 -1
- package/dist/session/conversation.js +40 -12
- package/dist/session/conversation.js.map +1 -1
- package/dist/session/conversation.test.js +2 -3
- package/dist/session/conversation.test.js.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +2 -1
- package/dist/session/index.js.map +1 -1
- package/dist/session/runtime.d.ts +20 -3
- package/dist/session/runtime.d.ts.map +1 -1
- package/dist/session/runtime.js +97 -16
- package/dist/session/runtime.js.map +1 -1
- package/dist/session/runtime.test.js +18 -7
- package/dist/session/runtime.test.js.map +1 -1
- package/dist/session/tools.d.ts.map +1 -1
- package/dist/session/tools.js +5 -4
- package/dist/session/tools.js.map +1 -1
- package/dist/task/loop.d.ts.map +1 -1
- package/dist/task/loop.js +6 -4
- package/dist/task/loop.js.map +1 -1
- package/dist/tools/exec-tools.d.ts +12 -0
- package/dist/tools/exec-tools.d.ts.map +1 -1
- package/dist/tools/exec-tools.js +46 -3
- package/dist/tools/exec-tools.js.map +1 -1
- package/dist/tools/exec-tools.test.d.ts +2 -0
- package/dist/tools/exec-tools.test.d.ts.map +1 -0
- package/dist/tools/exec-tools.test.js +48 -0
- package/dist/tools/exec-tools.test.js.map +1 -0
- package/dist/tools/fs-tools.d.ts.map +1 -1
- package/dist/tools/fs-tools.js +5 -5
- package/dist/tools/fs-tools.js.map +1 -1
- package/dist/transport/link.d.ts.map +1 -1
- package/dist/transport/link.js +16 -5
- package/dist/transport/link.js.map +1 -1
- package/dist/transport/link.test.js +24 -0
- package/dist/transport/link.test.js.map +1 -1
- package/dist/transport/protocol.d.ts +190 -3
- package/dist/transport/protocol.d.ts.map +1 -1
- package/dist/transport/protocol.js +147 -7
- package/dist/transport/protocol.js.map +1 -1
- package/dist/transport/protocol.test.js +41 -0
- package/dist/transport/protocol.test.js.map +1 -1
- package/dist/workspace-sync/eligibility.d.ts +14 -0
- package/dist/workspace-sync/eligibility.d.ts.map +1 -0
- package/dist/workspace-sync/eligibility.js +53 -0
- package/dist/workspace-sync/eligibility.js.map +1 -0
- package/dist/workspace-sync/merge.d.ts +15 -0
- package/dist/workspace-sync/merge.d.ts.map +1 -0
- package/dist/workspace-sync/merge.js +66 -0
- package/dist/workspace-sync/merge.js.map +1 -0
- package/dist/workspace-sync/merge.test.d.ts +2 -0
- package/dist/workspace-sync/merge.test.d.ts.map +1 -0
- package/dist/workspace-sync/merge.test.js +28 -0
- package/dist/workspace-sync/merge.test.js.map +1 -0
- package/dist/workspace-sync/workspace-sync.d.ts +48 -0
- package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
- package/dist/workspace-sync/workspace-sync.js +308 -0
- package/dist/workspace-sync/workspace-sync.js.map +1 -0
- package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
- package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
- package/dist/workspace-sync/workspace-sync.test.js +111 -0
- package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
- package/dist/workspace-sync/write-drafts.d.ts +24 -0
- package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
- package/dist/workspace-sync/write-drafts.js +87 -0
- package/dist/workspace-sync/write-drafts.js.map +1 -0
- package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
- package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
- package/dist/workspace-sync/write-drafts.test.js +36 -0
- package/dist/workspace-sync/write-drafts.test.js.map +1 -0
- package/package.json +12 -2
- package/dist/runtime/lambda-microvm.d.ts +0 -3
- package/dist/runtime/lambda-microvm.d.ts.map +0 -1
- package/dist/runtime/lambda-microvm.js.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_http_1 = __importDefault(require("node:http"));
|
|
9
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const node_test_1 = require("node:test");
|
|
12
|
+
const protocol_1 = require("../transport/protocol");
|
|
13
|
+
const build_mode_1 = require("./build-mode");
|
|
14
|
+
(0, node_test_1.describe)('building a release (AGENT_MODE=build)', () => {
|
|
15
|
+
/** A build that prints a line, then waits for its folder to hold `go`. */
|
|
16
|
+
const printsThenWaits = 'node -e "console.log(\'compiling page 1\'); const fs=require(\'fs\'); const t=setInterval(()=>{ if (fs.existsSync(\'go\')) { clearInterval(t); fs.mkdirSync(\'dist\',{recursive:true}); fs.writeFileSync(\'dist/index.html\',\'\') } },50)"';
|
|
17
|
+
let dir;
|
|
18
|
+
let server;
|
|
19
|
+
let url;
|
|
20
|
+
let received;
|
|
21
|
+
(0, node_test_1.before)(async () => {
|
|
22
|
+
server = node_http_1.default.createServer((req, res) => {
|
|
23
|
+
const chunks = [];
|
|
24
|
+
req.on('data', (chunk) => chunks.push(chunk));
|
|
25
|
+
req.on('end', () => {
|
|
26
|
+
// As the git service: a release with a manifest is finished, and takes nothing more.
|
|
27
|
+
if (received.has('/manifest.json'))
|
|
28
|
+
return void res.writeHead(409).end();
|
|
29
|
+
received.set(req.url, Buffer.concat(chunks).toString('utf8'));
|
|
30
|
+
res.writeHead(204).end();
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
|
|
34
|
+
url = `http://127.0.0.1:${server.address().port}`;
|
|
35
|
+
});
|
|
36
|
+
(0, node_test_1.after)(() => {
|
|
37
|
+
server.closeAllConnections();
|
|
38
|
+
server.close();
|
|
39
|
+
});
|
|
40
|
+
(0, node_test_1.beforeEach)(async () => {
|
|
41
|
+
received = new Map();
|
|
42
|
+
dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'builder-build-'));
|
|
43
|
+
});
|
|
44
|
+
(0, node_test_1.afterEach)(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
|
|
45
|
+
const app = async (manifest, files = {}) => {
|
|
46
|
+
for (const [name, content] of Object.entries({ [protocol_1.APP_CONFIG_FILE]: JSON.stringify(manifest), ...files })) {
|
|
47
|
+
await node_fs_1.promises.mkdir(node_path_1.default.dirname(node_path_1.default.join(dir, name)), { recursive: true });
|
|
48
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(dir, name), content);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const env = (extra = {}) => ({
|
|
52
|
+
APP_WORK_DIR: dir,
|
|
53
|
+
PATH: process.env.PATH,
|
|
54
|
+
RELEASE_UPLOAD_URL: url,
|
|
55
|
+
RELEASE_UPLOAD_TOKEN: 'secret-upload-token',
|
|
56
|
+
...extra,
|
|
57
|
+
});
|
|
58
|
+
const BUILD = `node -e "const fs = require('fs'); fs.mkdirSync('dist'); fs.writeFileSync('dist/index.html', 'built:' + (process.env.RELEASE_UPLOAD_TOKEN || 'no token'))"`;
|
|
59
|
+
(0, node_test_1.it)('builds the source and uploads the output, with the logs and a manifest', async () => {
|
|
60
|
+
await app({ services: { web: { buildCommand: BUILD, outputDirectory: 'dist' } } }, { 'src/app.js': '' });
|
|
61
|
+
const status = await (0, build_mode_1.runReleaseBuild)(env({ GIT_COMMIT: 'abc' })).finished;
|
|
62
|
+
strict_1.default.deepEqual(status, { phase: 'done', serves: 'files' });
|
|
63
|
+
strict_1.default.ok(received.has('/manifest.json'));
|
|
64
|
+
strict_1.default.ok(received.has('/logs/web.build.log'));
|
|
65
|
+
strict_1.default.ok(received.has('/files/.builder/builder.json'), 'what the VM runs and the gateway routes by');
|
|
66
|
+
strict_1.default.ok(![...received.keys()].some((route) => route.includes('src/app.js')));
|
|
67
|
+
});
|
|
68
|
+
(0, node_test_1.it)('keeps the upload token from the build', async () => {
|
|
69
|
+
await app({ services: { web: { buildCommand: BUILD, outputDirectory: 'dist' } } });
|
|
70
|
+
await (0, build_mode_1.runReleaseBuild)(env()).finished;
|
|
71
|
+
strict_1.default.equal(received.get('/site/dist/index.html'), 'built:no token');
|
|
72
|
+
});
|
|
73
|
+
(0, node_test_1.it)('reports a failed build with its log, uploads the log, and writes no manifest', async () => {
|
|
74
|
+
await app({ services: { web: { buildCommand: `node -e "console.error('compile error in app.ts'); process.exit(3)"`, outputDirectory: 'dist' } } });
|
|
75
|
+
const status = await (0, build_mode_1.runReleaseBuild)(env()).finished;
|
|
76
|
+
strict_1.default.equal(status.phase, 'failed');
|
|
77
|
+
strict_1.default.match(status.error, /Build of web failed \(exit 3\)/);
|
|
78
|
+
strict_1.default.match(status.log, /compile error in app\.ts/);
|
|
79
|
+
strict_1.default.match(received.get('/logs/web.build.log'), /compile error/);
|
|
80
|
+
strict_1.default.ok(!received.has('/manifest.json'));
|
|
81
|
+
});
|
|
82
|
+
(0, node_test_1.it)('fails when a build succeeds and leaves nothing to serve', async () => {
|
|
83
|
+
await app({ services: { web: { buildCommand: 'node -e ""', outputDirectory: 'dist' } } });
|
|
84
|
+
const status = await (0, build_mode_1.runReleaseBuild)(env()).finished;
|
|
85
|
+
strict_1.default.equal(status.phase, 'failed');
|
|
86
|
+
strict_1.default.match(status.error, /web: its build left nothing to serve in dist/);
|
|
87
|
+
});
|
|
88
|
+
(0, node_test_1.it)('says so when the files hold no app, or the settings are incomplete', async () => {
|
|
89
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'notes.txt'), '');
|
|
90
|
+
strict_1.default.match((await (0, build_mode_1.runReleaseBuild)(env()).finished).error, /No app found/);
|
|
91
|
+
strict_1.default.match((await (0, build_mode_1.runReleaseBuild)(env({ RELEASE_UPLOAD_TOKEN: '' })).finished).error, /incomplete/);
|
|
92
|
+
});
|
|
93
|
+
(0, node_test_1.it)('reports an invalid builder.json as the reason', async () => {
|
|
94
|
+
await app({ services: { api: { runtime: 'container', entrypoint: 'Dockerfile' } } });
|
|
95
|
+
const status = await (0, build_mode_1.runReleaseBuild)(env()).finished;
|
|
96
|
+
strict_1.default.equal(status.phase, 'failed');
|
|
97
|
+
strict_1.default.match(status.error, /builder\.json/);
|
|
98
|
+
});
|
|
99
|
+
(0, node_test_1.it)('reports its log while it runs, and what the release answers with once it\'s done', { timeout: 30000 }, async () => {
|
|
100
|
+
var _a, _b;
|
|
101
|
+
await app({ services: { web: { buildCommand: printsThenWaits, outputDirectory: 'dist' } } });
|
|
102
|
+
const build = (0, build_mode_1.runReleaseBuild)(env());
|
|
103
|
+
for (let waited = 0; waited < 100 && !((_a = build.status().log) === null || _a === void 0 ? void 0 : _a.includes('compiling page 1')); waited++) {
|
|
104
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
105
|
+
}
|
|
106
|
+
strict_1.default.equal(build.status().phase, 'building');
|
|
107
|
+
strict_1.default.match((_b = build.status().log) !== null && _b !== void 0 ? _b : '', /compiling page 1/);
|
|
108
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'go'), '');
|
|
109
|
+
strict_1.default.deepEqual(await build.finished, { phase: 'done', serves: 'files' });
|
|
110
|
+
await build.close();
|
|
111
|
+
});
|
|
112
|
+
(0, node_test_1.it)('says a release with a server answers with processes, or with both when it also has a site', async () => {
|
|
113
|
+
const server = { startCommand: 'node server.js' };
|
|
114
|
+
await app({ services: { api: server } }, { 'server.js': '' });
|
|
115
|
+
strict_1.default.equal((await (0, build_mode_1.runReleaseBuild)(env()).finished).serves, 'processes');
|
|
116
|
+
received = new Map();
|
|
117
|
+
await app({ services: { web: { buildCommand: BUILD, outputDirectory: 'dist' }, api: { root: 'api', ...server } }, rewrites: [{ source: '/api/(.*)', destination: { service: 'api' } }, { source: '/(.*)', destination: { service: 'web' } }] }, { 'api/server.js': '' });
|
|
118
|
+
strict_1.default.equal((await (0, build_mode_1.runReleaseBuild)(env()).finished).serves, 'both');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=build-mode.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-mode.test.js","sourceRoot":"","sources":["../../src/runtime/build-mode.test.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/cli.js
CHANGED
|
@@ -4,11 +4,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
// Generic entrypoint — reads its whole config from real process.env (already materialized by
|
|
5
5
|
// the time this runs: QEMU's init script exports ENV_B64 before launching the entrypoint, and
|
|
6
6
|
// Docker/Fargate pass env directly). Lambda MicroVM's own entrypoint
|
|
7
|
-
// (
|
|
7
|
+
// (guest-server.ts) has to materialize env from the /run lifecycle hook payload
|
|
8
8
|
// first, then calls the same startAgent — this file's job is intentionally just "trust
|
|
9
9
|
// process.env and go".
|
|
10
10
|
const index_1 = require("./index");
|
|
11
|
+
const preview_proxy_1 = require("./preview-proxy");
|
|
11
12
|
async function main() {
|
|
13
|
+
// Nothing else holds the guest's port 8080 on these engines; guest-server.ts's hook server
|
|
14
|
+
// serves the preview there itself.
|
|
15
|
+
(0, preview_proxy_1.startPreviewServer)();
|
|
12
16
|
const starting = (0, index_1.startAgent)();
|
|
13
17
|
let shuttingDown = false;
|
|
14
18
|
const shutdown = async (signal) => {
|
|
@@ -27,7 +31,8 @@ async function main() {
|
|
|
27
31
|
}));
|
|
28
32
|
}
|
|
29
33
|
const running = await starting;
|
|
30
|
-
|
|
34
|
+
// A one-shot task is done; a session and a deployed app stay up.
|
|
35
|
+
if (!running.session && !running.app && !shuttingDown)
|
|
31
36
|
process.exit(0);
|
|
32
37
|
}
|
|
33
38
|
main().catch((error) => {
|
package/dist/runtime/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/runtime/cli.ts"],"names":[],"mappings":";;;AACA,6FAA6F;AAC7F,8FAA8F;AAC9F,qEAAqE;AACrE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/runtime/cli.ts"],"names":[],"mappings":";;;AACA,6FAA6F;AAC7F,8FAA8F;AAC9F,qEAAqE;AACrE,gFAAgF;AAChF,uFAAuF;AACvF,uBAAuB;AACvB,mCAAoC;AACpC,mDAAoD;AAEpD,KAAK,UAAU,IAAI;IACjB,2FAA2F;IAC3F,mCAAmC;IACnC,IAAA,kCAAkB,GAAE,CAAA;IACpB,MAAM,QAAQ,GAAG,IAAA,kBAAU,GAAE,CAAA;IAC7B,IAAI,YAAY,GAAG,KAAK,CAAA;IACxB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACxC,IAAI,YAAY;YAAE,OAAM;QACxB,YAAY,GAAG,IAAI,CAAA;QACnB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,0BAA0B,CAAC,CAAA;QACxD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAA;QAC9B,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAA;IACD,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACtE,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAA;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC,CAAC,CAAC,CAAA;IACL,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAA;IAC9B,iEAAiE;IACjE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACxE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/dist/runtime/config.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export interface GitSyncConfig {
|
|
|
25
25
|
repository: string;
|
|
26
26
|
/** Where the repository is checked out — the session workspace itself. */
|
|
27
27
|
dir: string;
|
|
28
|
+
/** Its git data: outside the workspace, since the runtime runs git as root on what's in it. */
|
|
29
|
+
gitDir?: string;
|
|
28
30
|
branch: string;
|
|
29
31
|
token: string;
|
|
30
32
|
}
|
|
@@ -49,6 +51,8 @@ export interface AgentRuntimeConfig {
|
|
|
49
51
|
/** Total tokens the session may spend before asking the user whether to continue. */
|
|
50
52
|
tokenBudget?: number;
|
|
51
53
|
workspaceDir: string;
|
|
54
|
+
/** The runtime's own files; set from the env, or beside the workspace when a test builds a config. */
|
|
55
|
+
stateDir?: string;
|
|
52
56
|
mcpConnections: McpConnectionRecord[];
|
|
53
57
|
/** Gateway's agent-socket-server endpoint (ws(s)://.../agent-sessions/ws), not the api directly. */
|
|
54
58
|
socketUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAGhE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;AAC1C,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,4DAA4D;IAC5D,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,+FAA+F;AAC/F,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAA;IACX,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAKD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,YAAY,CAAA;IACrB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAA;IACvB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,mBAAmB,EAAE,CAAA;IACrC,oGAAoG;IACpG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,cAAc,CAAC,EAAE,oBAAoB,CAAA;CACtC;AAgED,2GAA2G;AAC3G,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CAuC1F"}
|
package/dist/runtime/config.js
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.loadConfigFromEnv = loadConfigFromEnv;
|
|
7
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
4
9
|
const protocol_1 = require("../transport/protocol");
|
|
10
|
+
/** Root's alone: the runtime's files, out of reach of everything it runs. */
|
|
11
|
+
const DEFAULT_STATE_DIR = '/var/lib/agent';
|
|
5
12
|
const DEFAULT_MODEL = 'anthropic/claude-sonnet-5.5';
|
|
6
13
|
const DEFAULT_WORKSPACE_DIR = '/workspace';
|
|
7
14
|
function decodeMcpConnections(raw) {
|
|
@@ -49,7 +56,7 @@ function filingRampFromEnv(env) {
|
|
|
49
56
|
industryData: env[protocol_1.AGENT_ENV.FILINGRAMP_INDUSTRY_DATA] === 'true',
|
|
50
57
|
};
|
|
51
58
|
}
|
|
52
|
-
function gitFromEnv(env, sessionId, workspaceDir) {
|
|
59
|
+
function gitFromEnv(env, sessionId, workspaceDir, stateDir) {
|
|
53
60
|
const serverUrl = env[protocol_1.AGENT_ENV.GIT_SERVER_URL];
|
|
54
61
|
const repository = env[protocol_1.AGENT_ENV.GIT_REPOSITORY];
|
|
55
62
|
const token = env[protocol_1.AGENT_ENV.ACCESS_TOKEN];
|
|
@@ -61,12 +68,14 @@ function gitFromEnv(env, sessionId, workspaceDir) {
|
|
|
61
68
|
serverUrl: serverUrl.replace(/\/+$/, ''),
|
|
62
69
|
repository,
|
|
63
70
|
dir: env[protocol_1.AGENT_ENV.GIT_REPOSITORY_DIR] || workspaceDir,
|
|
71
|
+
gitDir: node_path_1.default.join(stateDir, 'git'),
|
|
64
72
|
branch: env[protocol_1.AGENT_ENV.GIT_BRANCH] || `session/${sessionId}`,
|
|
65
73
|
token,
|
|
66
74
|
};
|
|
67
75
|
}
|
|
68
76
|
/** Reads the full run config from process.env — the guest's own contract, see AGENT_ENV in protocol.ts. */
|
|
69
77
|
function loadConfigFromEnv(env = process.env) {
|
|
78
|
+
var _a;
|
|
70
79
|
const sessionId = env[protocol_1.AGENT_ENV.SESSION_ID];
|
|
71
80
|
if (!sessionId)
|
|
72
81
|
throw new Error('SESSION_ID is required');
|
|
@@ -76,6 +85,7 @@ function loadConfigFromEnv(env = process.env) {
|
|
|
76
85
|
if (mode === 'task' && !task)
|
|
77
86
|
throw new Error('AGENT_TASK is required in task mode');
|
|
78
87
|
const workspaceDir = env[protocol_1.AGENT_ENV.AGENT_WORKSPACE_DIR] || DEFAULT_WORKSPACE_DIR;
|
|
88
|
+
const stateDir = env[protocol_1.AGENT_ENV.AGENT_STATE_DIR] || (((_a = process.getuid) === null || _a === void 0 ? void 0 : _a.call(process)) === 0 ? DEFAULT_STATE_DIR : node_path_1.default.join(node_os_1.default.tmpdir(), `agent-state-${sessionId}`));
|
|
79
89
|
const model = env[protocol_1.AGENT_ENV.AGENT_MODEL] || DEFAULT_MODEL;
|
|
80
90
|
const storageUrl = env[protocol_1.AGENT_ENV.SESSION_STORAGE_URL];
|
|
81
91
|
// The same ACCESS_TOKEN serves Git or storage, so only a storage URL without it is incomplete.
|
|
@@ -100,7 +110,8 @@ function loadConfigFromEnv(env = process.env) {
|
|
|
100
110
|
},
|
|
101
111
|
filingRamp: filingRampFromEnv(env),
|
|
102
112
|
researchScope: parseScope(env[protocol_1.AGENT_ENV.FILINGRAMP_RESEARCH_SCOPE_JSON]),
|
|
103
|
-
|
|
113
|
+
stateDir,
|
|
114
|
+
git: gitFromEnv(env, sessionId, workspaceDir, stateDir),
|
|
104
115
|
sessionStorage: storageUrl && storageToken ? { url: storageUrl, token: storageToken, dir: workspaceDir } : undefined,
|
|
105
116
|
};
|
|
106
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-server.d.ts","sourceRoot":"","sources":["../../src/runtime/guest-server.ts"],"names":[],"mappings":""}
|
|
@@ -4,8 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
//
|
|
8
|
-
//
|
|
7
|
+
// The guest's main process, on every engine: it holds port 8080 and starts the agent. On Lambda
|
|
8
|
+
// MicroVM, AWS's platform calls the lifecycle hooks
|
|
9
|
+
// (/aws/lambda-microvms/runtime/v1/{run,resume,suspend,terminate}) on that port and expects a
|
|
9
10
|
// response before it considers the instance up (createMicrovmImages registers every image with
|
|
10
11
|
// hooks: { run/resume/suspend/terminate: 'ENABLED' } — libs/sandbox/src/microvm-images.ts —
|
|
11
12
|
// this isn't optional). Per-run config (env vars) arrives as the /run hook's runHookPayload,
|
|
@@ -13,20 +14,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
14
|
//
|
|
14
15
|
// The hook server stays up for the whole life of the VM: `suspend` and `terminate` checkpoint
|
|
15
16
|
// the session (conversation + workspace to the git server), `resume` re-announces the agent.
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
// directly.
|
|
17
|
+
// Apps never get port 8080: it also serves the live preview (preview-proxy.ts), which forwards to
|
|
18
|
+
// the port an app actually listens on. Engines without a hook caller (Docker, Fargate) set
|
|
19
|
+
// SESSION_ID in the real env at boot, which starts the agent directly.
|
|
19
20
|
const child_process_1 = require("child_process");
|
|
20
21
|
const fs_1 = __importDefault(require("fs"));
|
|
21
22
|
const http_1 = __importDefault(require("http"));
|
|
23
|
+
const image_hooks_1 = require("./image-hooks");
|
|
22
24
|
const index_1 = require("./index");
|
|
23
25
|
const microvm_bootstrap_1 = require("./microvm-bootstrap");
|
|
26
|
+
const preview_proxy_1 = require("./preview-proxy");
|
|
24
27
|
const HOOK_PREFIX = '/aws/lambda-microvms/runtime/v1/';
|
|
25
|
-
const PORT = 8080;
|
|
26
28
|
let running;
|
|
27
29
|
let starting;
|
|
28
30
|
const bootstrap = new microvm_bootstrap_1.MicrovmBootstrap();
|
|
29
31
|
const DROPBEAR_HOST_KEY = '/etc/dropbear/dropbear_rsa_host_key';
|
|
32
|
+
const imageHook = (0, image_hooks_1.imageHooks)();
|
|
30
33
|
/**
|
|
31
34
|
* entrypoint.sh starts dropbear only when the keys are in the boot env (Docker, Fargate). A
|
|
32
35
|
* Lambda MicroVM boots while its image is built, before any session exists, so its keys arrive
|
|
@@ -50,7 +53,12 @@ function configured() {
|
|
|
50
53
|
catch (error) {
|
|
51
54
|
console.error('ssh setup failed:', error instanceof Error ? error.message : error);
|
|
52
55
|
}
|
|
53
|
-
|
|
56
|
+
if (hasSomethingToRun())
|
|
57
|
+
void start().catch(() => undefined);
|
|
58
|
+
}
|
|
59
|
+
/** A VM from an image with no run configuration, as AWS starts one to validate a new image: nothing to do. */
|
|
60
|
+
function hasSomethingToRun() {
|
|
61
|
+
return Boolean(process.env.SESSION_ID || process.env.AGENT_MODE);
|
|
54
62
|
}
|
|
55
63
|
function start() {
|
|
56
64
|
if (!starting) {
|
|
@@ -70,6 +78,10 @@ function start() {
|
|
|
70
78
|
async function onHook(hook, body) {
|
|
71
79
|
switch (hook) {
|
|
72
80
|
case 'run': {
|
|
81
|
+
// Anything in the VM can reach this port. Once the agent is starting, the only caller left
|
|
82
|
+
// is a workload, and this configures the VM (its SSH keys among it).
|
|
83
|
+
if (starting)
|
|
84
|
+
return;
|
|
73
85
|
let payload;
|
|
74
86
|
try {
|
|
75
87
|
const parsed = JSON.parse(body);
|
|
@@ -85,7 +97,8 @@ async function onHook(hook, body) {
|
|
|
85
97
|
}
|
|
86
98
|
case 'suspend':
|
|
87
99
|
case 'terminate':
|
|
88
|
-
|
|
100
|
+
if (hasSomethingToRun())
|
|
101
|
+
await (0, index_1.checkpointBeforeFreeze)(starting, hook);
|
|
89
102
|
return;
|
|
90
103
|
case 'resume':
|
|
91
104
|
// Memory and disk survived. The socket reconnects on its own, and the link re-announces
|
|
@@ -95,8 +108,11 @@ async function onHook(hook, body) {
|
|
|
95
108
|
return;
|
|
96
109
|
}
|
|
97
110
|
}
|
|
98
|
-
const server = http_1.default.createServer((req, res) => {
|
|
99
|
-
var _a, _b;
|
|
111
|
+
const server = http_1.default.createServer((0, preview_proxy_1.guardRequests)((req, res) => {
|
|
112
|
+
var _a, _b, _c, _d;
|
|
113
|
+
// First: a preview request belongs to the app whatever its path, never to the hooks below.
|
|
114
|
+
if ((0, preview_proxy_1.proxyPreviewRequest)(req, res))
|
|
115
|
+
return;
|
|
100
116
|
if (req.url === '/internal/bootstrap' && req.method === 'POST') {
|
|
101
117
|
if (!bootstrap.authorized(req.headers.authorization)) {
|
|
102
118
|
res.writeHead(401, { Connection: 'close' });
|
|
@@ -134,7 +150,13 @@ const server = http_1.default.createServer((req, res) => {
|
|
|
134
150
|
});
|
|
135
151
|
return;
|
|
136
152
|
}
|
|
137
|
-
|
|
153
|
+
const asked = ((_a = req.url) === null || _a === void 0 ? void 0 : _a.startsWith(HOOK_PREFIX)) ? imageHook[req.url.slice(HOOK_PREFIX.length)] : undefined;
|
|
154
|
+
if (asked) {
|
|
155
|
+
res.writeHead(asked(), { 'Content-Type': 'application/json' });
|
|
156
|
+
res.end('{}');
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (((_b = req.url) === null || _b === void 0 ? void 0 : _b.startsWith(HOOK_PREFIX)) && req.method === 'POST') {
|
|
138
160
|
const hook = req.url.slice(HOOK_PREFIX.length);
|
|
139
161
|
const chunks = [];
|
|
140
162
|
req.on('data', (chunk) => chunks.push(chunk));
|
|
@@ -157,13 +179,22 @@ const server = http_1.default.createServer((req, res) => {
|
|
|
157
179
|
});
|
|
158
180
|
return;
|
|
159
181
|
}
|
|
182
|
+
// A deployment (AGENT_MODE=app): everything else is its app's.
|
|
183
|
+
if ((0, preview_proxy_1.proxyAppRequest)(req, res))
|
|
184
|
+
return;
|
|
160
185
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
161
|
-
res.end(JSON.stringify({ status: 'ok', path: req.url, session: (
|
|
162
|
-
});
|
|
163
|
-
server.
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
186
|
+
res.end(JSON.stringify({ status: 'ok', path: req.url, session: (_d = (_c = running === null || running === void 0 ? void 0 : running.config) === null || _c === void 0 ? void 0 : _c.sessionId) !== null && _d !== void 0 ? _d : null }));
|
|
187
|
+
}));
|
|
188
|
+
server.on('upgrade', (0, preview_proxy_1.guardUpgrades)((req, socket, head) => {
|
|
189
|
+
if (!(0, preview_proxy_1.proxyPreviewUpgrade)(req, socket, head))
|
|
190
|
+
socket.destroy();
|
|
191
|
+
}));
|
|
192
|
+
server.listen(preview_proxy_1.GUEST_HTTP_PORT, () => {
|
|
193
|
+
console.log(`agent lifecycle hook server listening on ${preview_proxy_1.GUEST_HTTP_PORT}`);
|
|
194
|
+
// Ahead of the build's first /ready, and of a VM's first request on the engines that have no hooks.
|
|
195
|
+
imageHook.ready();
|
|
196
|
+
// Docker / Fargate: no lifecycle hook caller, so what's already in the env drives startup.
|
|
197
|
+
if (hasSomethingToRun())
|
|
167
198
|
setImmediate(() => void start().catch(() => undefined));
|
|
168
199
|
});
|
|
169
200
|
let shuttingDown = false;
|
|
@@ -183,4 +214,4 @@ for (const signal of ['SIGTERM', 'SIGINT']) {
|
|
|
183
214
|
});
|
|
184
215
|
});
|
|
185
216
|
}
|
|
186
|
-
//# sourceMappingURL=
|
|
217
|
+
//# sourceMappingURL=guest-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-server.js","sourceRoot":"","sources":["../../src/runtime/guest-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type ImageHookStatus = 200 | 500 | 503;
|
|
2
|
+
/** Asking starts `work`, once. Then it's 503 until it's over, and how that went from there on. */
|
|
3
|
+
export declare function polledHook(work: () => Promise<void>): () => ImageHookStatus;
|
|
4
|
+
export declare function imageHooks(env?: NodeJS.ProcessEnv): Record<string, () => ImageHookStatus>;
|
|
5
|
+
//# sourceMappingURL=image-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-hooks.d.ts","sourceRoot":"","sources":["../../src/runtime/image-hooks.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,eAAe,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAE7C,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,eAAe,CAiB3E;AAQD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,eAAe,CAAC,CAEtG"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.polledHook = polledHook;
|
|
37
|
+
exports.imageHooks = imageHooks;
|
|
38
|
+
// What a Lambda MicroVM image's build asks the guest. /ready: can this be snapshotted yet? The code a
|
|
39
|
+
// VM from this image runs loads first, so it's in the snapshot rather than read at every start.
|
|
40
|
+
// /validate, on a VM started from the result: does it work? They answer 503 until they know, as AWS
|
|
41
|
+
// asks, rather than hold the request open: past its timeout that ends the build.
|
|
42
|
+
const index_1 = require("./index");
|
|
43
|
+
/** Asking starts `work`, once. Then it's 503 until it's over, and how that went from there on. */
|
|
44
|
+
function polledHook(work) {
|
|
45
|
+
let status;
|
|
46
|
+
return () => {
|
|
47
|
+
if (!status) {
|
|
48
|
+
status = 503;
|
|
49
|
+
work().then(() => {
|
|
50
|
+
status = 200;
|
|
51
|
+
}, (error) => {
|
|
52
|
+
status = 500;
|
|
53
|
+
console.error('image hook failed:', error instanceof Error ? error.message : error);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return status;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function validateImage(env) {
|
|
60
|
+
if (env.GUEST_IMAGE !== 'app')
|
|
61
|
+
return;
|
|
62
|
+
const { rehearseColdStart } = await Promise.resolve().then(() => __importStar(require('./app-rehearsal')));
|
|
63
|
+
await rehearseColdStart();
|
|
64
|
+
}
|
|
65
|
+
function imageHooks(env = process.env) {
|
|
66
|
+
return { ready: polledHook(() => (0, index_1.loadImageCode)(env)), validate: polledHook(() => validateImage(env)) };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=image-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-hooks.js","sourceRoot":"","sources":["../../src/runtime/image-hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,gCAiBC;AAQD,gCAEC;AApCD,sGAAsG;AACtG,gGAAgG;AAChG,oGAAoG;AACpG,iFAAiF;AACjF,mCAAuC;AAIvC,kGAAkG;AAClG,SAAgB,UAAU,CAAC,IAAyB;IAClD,IAAI,MAAmC,CAAA;IACvC,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,CAAA;YACZ,IAAI,EAAE,CAAC,IAAI,CACT,GAAG,EAAE;gBACH,MAAM,GAAG,GAAG,CAAA;YACd,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;gBACjB,MAAM,GAAG,GAAG,CAAA;gBACZ,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YACrF,CAAC,CACF,CAAA;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAsB;IACjD,IAAI,GAAG,CAAC,WAAW,KAAK,KAAK;QAAE,OAAM;IACrC,MAAM,EAAE,iBAAiB,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAA;IAC7D,MAAM,iBAAiB,EAAE,CAAA;AAC3B,CAAC;AAED,SAAgB,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,IAAA,qBAAa,EAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;AACxG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-hooks.test.d.ts","sourceRoot":"","sources":["../../src/runtime/image-hooks.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_test_1 = require("node:test");
|
|
10
|
+
const image_hooks_1 = require("./image-hooks");
|
|
11
|
+
const until = async (hook, status) => {
|
|
12
|
+
for (let tries = 0; tries < 2000 && hook() !== status; tries += 1)
|
|
13
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
14
|
+
strict_1.default.equal(hook(), status);
|
|
15
|
+
};
|
|
16
|
+
(0, node_test_1.describe)('a hook the image build polls', () => {
|
|
17
|
+
(0, node_test_1.it)('answers 503 while it works, rather than hold the request open, and runs once', async () => {
|
|
18
|
+
let runs = 0;
|
|
19
|
+
let finish;
|
|
20
|
+
const hook = (0, image_hooks_1.polledHook)(() => {
|
|
21
|
+
runs += 1;
|
|
22
|
+
return new Promise((resolve) => {
|
|
23
|
+
finish = resolve;
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
strict_1.default.equal(hook(), 503);
|
|
27
|
+
strict_1.default.equal(hook(), 503);
|
|
28
|
+
finish();
|
|
29
|
+
await until(hook, 200);
|
|
30
|
+
strict_1.default.equal(runs, 1);
|
|
31
|
+
});
|
|
32
|
+
(0, node_test_1.it)('fails the build when the work fails', async () => {
|
|
33
|
+
const hook = (0, image_hooks_1.polledHook)(() => Promise.reject(new Error('no tar')));
|
|
34
|
+
hook();
|
|
35
|
+
await until(hook, 500);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
(0, node_test_1.describe)('what an image loads ahead of its snapshot', () => {
|
|
39
|
+
const loaded = (script) => {
|
|
40
|
+
var _a;
|
|
41
|
+
return JSON.parse((0, node_child_process_1.execFileSync)(process.execPath, ['-e', `
|
|
42
|
+
const hooks = require(${JSON.stringify(node_path_1.default.join(__dirname, 'image-hooks.js'))}).imageHooks();
|
|
43
|
+
${script}
|
|
44
|
+
const wait = setInterval(() => {
|
|
45
|
+
if (hooks.ready() === 503) return
|
|
46
|
+
clearInterval(wait)
|
|
47
|
+
console.log(JSON.stringify(Object.keys(require.cache)))
|
|
48
|
+
}, 5)
|
|
49
|
+
`], { encoding: 'utf8', env: { PATH: process.env.PATH, NODE_PATH: (_a = process.env.NODE_PATH) !== null && _a !== void 0 ? _a : '', GUEST_IMAGE: script.includes('app') ? 'app' : '' } }))
|
|
50
|
+
.map((file) => node_path_1.default.relative(node_path_1.default.resolve(__dirname, '..'), file));
|
|
51
|
+
};
|
|
52
|
+
(0, node_test_1.it)('is an app\'s code in the app image, with no session agent in its memory', () => {
|
|
53
|
+
const files = loaded('// app');
|
|
54
|
+
strict_1.default.ok(files.includes(node_path_1.default.join('runtime', 'app-mode.js')));
|
|
55
|
+
strict_1.default.ok(!files.some((file) => file.startsWith(`session${node_path_1.default.sep}`) || file.includes('session-mode')), 'session code loaded');
|
|
56
|
+
strict_1.default.ok(!files.some((file) => file.includes('socket.io')), 'its link loaded');
|
|
57
|
+
});
|
|
58
|
+
(0, node_test_1.it)('is the session agent in the agent image', () => {
|
|
59
|
+
strict_1.default.ok(loaded('').includes(node_path_1.default.join('runtime', 'session-mode.js')));
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
(0, node_test_1.describe)('validating a new image', () => {
|
|
63
|
+
(0, node_test_1.it)('rehearses a real cold start of an app: an archive unpacked, a server started and asked', async () => {
|
|
64
|
+
const hook = (0, image_hooks_1.imageHooks)({ GUEST_IMAGE: 'app' }).validate;
|
|
65
|
+
strict_1.default.equal(hook(), 503);
|
|
66
|
+
await until(hook, 200);
|
|
67
|
+
});
|
|
68
|
+
(0, node_test_1.it)('has nothing to rehearse in the agent image', async () => {
|
|
69
|
+
const hook = (0, image_hooks_1.imageHooks)({}).validate;
|
|
70
|
+
hook();
|
|
71
|
+
await until(hook, 200);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=image-hooks.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-hooks.test.js","sourceRoot":"","sources":["../../src/runtime/image-hooks.test.ts"],"names":[],"mappings":"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"}
|