@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
|
@@ -3,19 +3,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.GitSync =
|
|
6
|
+
exports.GitSync = void 0;
|
|
7
7
|
// Durability for a session VM whose disk can vanish (Lambda terminates a long-suspended
|
|
8
8
|
// MicroVM): the workspace is a checkout of branch `session/<id>` on the platform's git
|
|
9
9
|
// server. restore() runs at boot, commit() at every checkpoint. Bulk downloads stay out of
|
|
10
|
-
// git (see
|
|
10
|
+
// git (see EXCLUDES) — the extracted text and the research outputs are what a
|
|
11
11
|
// restored VM needs; attachments can be fetched again.
|
|
12
|
+
//
|
|
13
|
+
// Its git data is kept outside the workspace, in the runtime's state directory. The runtime runs git
|
|
14
|
+
// as root, and a workload owns the workspace: a hook or a .git/config it wrote there would run as
|
|
15
|
+
// root with the token, or send the token to a server of its choosing.
|
|
12
16
|
const child_process_1 = require("child_process");
|
|
13
17
|
const fs_1 = require("fs");
|
|
14
18
|
const path_1 = __importDefault(require("path"));
|
|
15
19
|
const util_1 = require("util");
|
|
16
20
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
17
21
|
const GIT_TIMEOUT_MS = 60000;
|
|
18
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Never committed, whatever a repository's own .gitignore says: bulk downloads and caches, the app's
|
|
24
|
+
* logs (src/app/runner.ts).
|
|
25
|
+
*/
|
|
26
|
+
const EXCLUDES = ['data/attachments/', 'node_modules/', '.venv/', '*.sqlite', '*.sqlite-journal', '.builder/logs/'];
|
|
19
27
|
async function pathExists(target) {
|
|
20
28
|
try {
|
|
21
29
|
await fs_1.promises.access(target);
|
|
@@ -27,30 +35,50 @@ async function pathExists(target) {
|
|
|
27
35
|
}
|
|
28
36
|
class GitSync {
|
|
29
37
|
constructor(config) {
|
|
38
|
+
var _a;
|
|
30
39
|
this.config = config;
|
|
31
40
|
this.busy = Promise.resolve();
|
|
32
41
|
this.remote = `${config.serverUrl}/git/${config.repository}.git`;
|
|
42
|
+
this.gitDir = (_a = config.gitDir) !== null && _a !== void 0 ? _a : `${config.dir}.gitdir`;
|
|
33
43
|
// The token travels as a per-process http.extraheader, never on the remote URL or in
|
|
34
44
|
// .git/config, so a `git remote -v` inside the workspace cannot leak it.
|
|
35
45
|
this.env = {
|
|
36
46
|
...process.env,
|
|
37
47
|
GIT_TERMINAL_PROMPT: '0',
|
|
38
|
-
|
|
48
|
+
// Only this config counts: no user's or system's, and nothing here runs anything found in the
|
|
49
|
+
// workspace. A nested repository's own config can't either, since root doesn't trust its owner.
|
|
50
|
+
GIT_CONFIG_NOSYSTEM: '1',
|
|
51
|
+
GIT_CONFIG_GLOBAL: '/dev/null',
|
|
52
|
+
GIT_CONFIG_COUNT: '6',
|
|
39
53
|
GIT_CONFIG_KEY_0: 'http.extraheader',
|
|
40
54
|
GIT_CONFIG_VALUE_0: `Authorization: Bearer ${config.token}`,
|
|
41
55
|
GIT_CONFIG_KEY_1: 'user.name',
|
|
42
56
|
GIT_CONFIG_VALUE_1: 'session-agent',
|
|
43
57
|
GIT_CONFIG_KEY_2: 'user.email',
|
|
44
58
|
GIT_CONFIG_VALUE_2: 'agent@builder.local',
|
|
59
|
+
GIT_CONFIG_KEY_3: 'core.hooksPath',
|
|
60
|
+
GIT_CONFIG_VALUE_3: '/dev/null',
|
|
61
|
+
GIT_CONFIG_KEY_4: 'core.fsmonitor',
|
|
62
|
+
GIT_CONFIG_VALUE_4: 'false',
|
|
63
|
+
GIT_CONFIG_KEY_5: 'diff.ignoreSubmodules',
|
|
64
|
+
GIT_CONFIG_VALUE_5: 'all',
|
|
45
65
|
};
|
|
46
66
|
}
|
|
47
67
|
get dir() {
|
|
48
68
|
return this.config.dir;
|
|
49
69
|
}
|
|
50
70
|
/** Bounded: an unreachable git server must delay a boot or a checkpoint, never hang it. */
|
|
51
|
-
|
|
71
|
+
run(args, cwd) {
|
|
52
72
|
return execFileAsync('git', args, { cwd, env: this.env, maxBuffer: 8 * 1024 * 1024, timeout: GIT_TIMEOUT_MS });
|
|
53
73
|
}
|
|
74
|
+
git(args) {
|
|
75
|
+
return this.run(['--git-dir', this.gitDir, '--work-tree', this.config.dir, ...args], this.config.dir);
|
|
76
|
+
}
|
|
77
|
+
/** Starts the checkout's git data outside it: `--separate-git-dir` leaves a pointer behind, which nothing needs. */
|
|
78
|
+
async detachGitDir() {
|
|
79
|
+
await fs_1.promises.rm(path_1.default.join(this.config.dir, '.git'), { force: true });
|
|
80
|
+
await this.excludeLocally();
|
|
81
|
+
}
|
|
54
82
|
/** Serializes git operations: a periodic checkpoint must never race a suspend checkpoint. */
|
|
55
83
|
serialize(work) {
|
|
56
84
|
const next = this.busy.then(work, work);
|
|
@@ -61,40 +89,69 @@ class GitSync {
|
|
|
61
89
|
* Clone the session branch into the workspace, or pull it when a checkout already exists.
|
|
62
90
|
* A brand-new session has no branch yet: start an empty repository on it so the first
|
|
63
91
|
* checkpoint can push. Returns true when previous work was restored.
|
|
92
|
+
*
|
|
93
|
+
* Only the latest commit: a VM works on the files, and a project's history can be long. The
|
|
94
|
+
* server keeps all of it; a push only adds to it.
|
|
64
95
|
*/
|
|
65
96
|
restore() {
|
|
66
97
|
return this.serialize(async () => {
|
|
67
98
|
const { dir, branch } = this.config;
|
|
68
99
|
await fs_1.promises.mkdir(dir, { recursive: true });
|
|
69
|
-
if (await pathExists(path_1.default.join(
|
|
100
|
+
if (await pathExists(path_1.default.join(this.gitDir, 'HEAD'))) {
|
|
70
101
|
await this.git(['fetch', 'origin', branch]);
|
|
71
102
|
// Preserve any locally committed checkpoint whose push was interrupted.
|
|
72
103
|
await this.git(['merge', '--ff-only', 'FETCH_HEAD']);
|
|
73
104
|
return true;
|
|
74
105
|
}
|
|
106
|
+
await fs_1.promises.mkdir(path_1.default.dirname(this.gitDir), { recursive: true, mode: 0o700 });
|
|
75
107
|
// Only a successful lookup with no branch means a new session. A network/auth error
|
|
76
108
|
// must never let a replacement agent accept a turn against an empty workspace.
|
|
77
|
-
const remoteBranches = (await this.
|
|
109
|
+
const remoteBranches = (await this.run(['ls-remote', '--heads', this.remote, branch], process.cwd())).stdout.trim();
|
|
78
110
|
if (remoteBranches) {
|
|
79
|
-
await this.
|
|
111
|
+
await this.run(['clone', '--depth', '1', '--branch', branch, '--single-branch', '--separate-git-dir', this.gitDir, this.remote, dir], process.cwd());
|
|
112
|
+
await this.detachGitDir();
|
|
80
113
|
return true;
|
|
81
114
|
}
|
|
82
|
-
await this.
|
|
115
|
+
await this.run(['init', '--initial-branch', branch, '--separate-git-dir', this.gitDir, dir], process.cwd());
|
|
116
|
+
await this.detachGitDir();
|
|
83
117
|
await this.git(['remote', 'add', 'origin', this.remote]);
|
|
84
|
-
await fs_1.promises.writeFile(path_1.default.join(dir, '.gitignore'), exports.WORKSPACE_GITIGNORE);
|
|
85
118
|
return false;
|
|
86
119
|
});
|
|
87
120
|
}
|
|
121
|
+
async excludeLocally() {
|
|
122
|
+
const file = path_1.default.join(this.gitDir, 'info', 'exclude');
|
|
123
|
+
await fs_1.promises.mkdir(path_1.default.dirname(file), { recursive: true });
|
|
124
|
+
await fs_1.promises.writeFile(file, `${EXCLUDES.join('\n')}\n`);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The platform can commit to this branch too, if this VM was paused or still starting when it did.
|
|
128
|
+
* Refused for that, this VM's files win (people's edits reach it through live sync) with that
|
|
129
|
+
* commit kept in the history: pushing must not stay refused, or no checkpoint would ever land again.
|
|
130
|
+
*/
|
|
131
|
+
async push(sha) {
|
|
132
|
+
const push = () => this.git(['push', '-u', 'origin', `HEAD:${this.config.branch}`]);
|
|
133
|
+
try {
|
|
134
|
+
await push();
|
|
135
|
+
return sha;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (!/\[rejected\]|non-fast-forward|fetch first/.test(String(error.stderr)))
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
await this.git(['fetch', 'origin', this.config.branch]);
|
|
142
|
+
await this.git(['merge', '-q', '-s', 'ours', '--allow-unrelated-histories', '-m', 'Keep this session\'s files', 'FETCH_HEAD']);
|
|
143
|
+
await push();
|
|
144
|
+
return (await this.git(['rev-parse', 'HEAD'])).stdout.trim();
|
|
145
|
+
}
|
|
88
146
|
/** Commit everything and push, including commits left by a previously failed push. */
|
|
89
147
|
commit(message) {
|
|
90
148
|
return this.serialize(async () => {
|
|
91
|
-
if (!(await pathExists(path_1.default.join(this.config.dir, '.gitignore')))) {
|
|
92
|
-
await fs_1.promises.writeFile(path_1.default.join(this.config.dir, '.gitignore'), exports.WORKSPACE_GITIGNORE);
|
|
93
|
-
}
|
|
94
149
|
await this.git(['add', '-A']);
|
|
95
150
|
const status = (await this.git(['status', '--porcelain'])).stdout.trim();
|
|
96
|
-
|
|
97
|
-
|
|
151
|
+
// Even with nothing in it, a new session's first checkpoint starts its branch.
|
|
152
|
+
const started = await this.git(['rev-parse', '--verify', '-q', 'HEAD']).then(() => true, () => false);
|
|
153
|
+
if (status || !started)
|
|
154
|
+
await this.git(['commit', '-q', '--allow-empty', '-m', message]);
|
|
98
155
|
const sha = (await this.git(['rev-parse', 'HEAD'])).stdout.trim();
|
|
99
156
|
// No network request for an unchanged, already-pushed workspace. A failed push leaves
|
|
100
157
|
// the upstream behind HEAD, so a later periodic checkpoint still retries it.
|
|
@@ -102,8 +159,7 @@ class GitSync {
|
|
|
102
159
|
if ((upstream === null || upstream === void 0 ? void 0 : upstream.stdout.trim()) === sha)
|
|
103
160
|
return undefined;
|
|
104
161
|
// Propagate failure: checkpointed must mean the commit actually reached durable storage.
|
|
105
|
-
await this.
|
|
106
|
-
return sha;
|
|
162
|
+
return await this.push(sha);
|
|
107
163
|
});
|
|
108
164
|
}
|
|
109
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-sync.js","sourceRoot":"","sources":["../../src/persistence/git-sync.ts"],"names":[],"mappings":";;;;;;AAAA,wFAAwF;AACxF,uFAAuF;AACvF,2FAA2F;AAC3F,
|
|
1
|
+
{"version":3,"file":"git-sync.js","sourceRoot":"","sources":["../../src/persistence/git-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,14 +39,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
40
40
|
const node_child_process_1 = require("node:child_process");
|
|
41
41
|
const node_fs_1 = require("node:fs");
|
|
42
|
+
const node_http_1 = __importDefault(require("node:http"));
|
|
42
43
|
const node_os_1 = __importDefault(require("node:os"));
|
|
43
44
|
const node_path_1 = __importDefault(require("node:path"));
|
|
44
45
|
const node_util_1 = require("node:util");
|
|
45
46
|
const node_test_1 = require("node:test");
|
|
46
47
|
const test_1 = require("ai/test");
|
|
47
48
|
const modelProvider = __importStar(require("../models/resolve-model"));
|
|
49
|
+
const conversation_store_1 = require("./conversation-store");
|
|
48
50
|
const git_sync_1 = require("./git-sync");
|
|
49
51
|
const session_1 = require("../session");
|
|
52
|
+
const conversation_1 = require("../session/conversation");
|
|
50
53
|
const exec = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
51
54
|
(0, node_test_1.describe)('session workspace recovery from Git', () => {
|
|
52
55
|
let root;
|
|
@@ -67,9 +70,26 @@ const exec = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
|
67
70
|
var _a, _b;
|
|
68
71
|
const original = new git_sync_1.GitSync(config);
|
|
69
72
|
strict_1.default.equal(await original.restore(), false);
|
|
73
|
+
// Storage's route for the session's conversation: saved beside the repository, never in it.
|
|
74
|
+
let savedConversation;
|
|
75
|
+
const storage = node_http_1.default.createServer((req, res) => {
|
|
76
|
+
if (req.method === 'PUT') {
|
|
77
|
+
const chunks = [];
|
|
78
|
+
req.on('data', (chunk) => chunks.push(chunk));
|
|
79
|
+
req.on('end', () => {
|
|
80
|
+
savedConversation = Buffer.concat(chunks);
|
|
81
|
+
res.writeHead(204).end();
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else if (savedConversation)
|
|
85
|
+
res.writeHead(200).end(savedConversation);
|
|
86
|
+
else
|
|
87
|
+
res.writeHead(404).end();
|
|
88
|
+
});
|
|
89
|
+
await new Promise((resolve) => storage.listen(0, '127.0.0.1', resolve));
|
|
90
|
+
const storageUrl = `http://127.0.0.1:${storage.address().port}/workspaces/a/chat-1`;
|
|
70
91
|
const conversation = { version: 1, messages: [{ role: 'user', content: 'Research valves' }, { role: 'assistant', content: 'Found three filings' }], usedTokens: 123, budget: 1000, budgetPaused: false };
|
|
71
92
|
const files = {
|
|
72
|
-
'.builder/conversation.json': JSON.stringify(conversation),
|
|
73
93
|
'research/findings.md': '# Three filings',
|
|
74
94
|
'research/results.csv': 'filing,result\na,yes',
|
|
75
95
|
'data/text/filing.txt': 'Extracted evidence',
|
|
@@ -80,11 +100,17 @@ const exec = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
|
80
100
|
await node_fs_1.promises.writeFile(node_path_1.default.join(config.dir, name), contents);
|
|
81
101
|
}
|
|
82
102
|
await original.commit('completed turn');
|
|
103
|
+
const originalState = node_path_1.default.join(root, 'original-state');
|
|
104
|
+
await node_fs_1.promises.mkdir(originalState);
|
|
105
|
+
await node_fs_1.promises.writeFile((0, conversation_1.conversationFile)(originalState), JSON.stringify(conversation));
|
|
106
|
+
await new conversation_store_1.ConversationStore({ url: storageUrl, token: 't', file: (0, conversation_1.conversationFile)(originalState) }).save();
|
|
83
107
|
await node_fs_1.promises.rm(config.dir, { recursive: true }); // The previous VM's entire disk is gone.
|
|
84
108
|
const replacementConfig = {
|
|
85
109
|
sessionId: 'chat-1', mode: 'session', profile: 'coding', model: 'unused', extractionModel: 'unused',
|
|
86
110
|
workspaceDir: node_path_1.default.join(root, 'new-vm'), mcpConnections: [], provider: {},
|
|
87
111
|
git: { ...config, dir: node_path_1.default.join(root, 'new-vm') },
|
|
112
|
+
stateDir: node_path_1.default.join(root, 'new-vm-state'),
|
|
113
|
+
sessionStorage: { url: storageUrl, token: 't', dir: node_path_1.default.join(root, 'new-vm') },
|
|
88
114
|
};
|
|
89
115
|
const events = [];
|
|
90
116
|
let handle;
|
|
@@ -110,7 +136,7 @@ const exec = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
|
110
136
|
strict_1.default.deepEqual(await node_fs_1.promises.readFile(node_path_1.default.join(replacementConfig.workspaceDir, name)), Buffer.from(contents));
|
|
111
137
|
}
|
|
112
138
|
await replacement.checkpoint('continued session');
|
|
113
|
-
strict_1.default.deepEqual(JSON.parse(await node_fs_1.promises.readFile(node_path_1.default.join(
|
|
139
|
+
strict_1.default.deepEqual(JSON.parse(await node_fs_1.promises.readFile((0, conversation_1.conversationFile)(node_path_1.default.join(root, 'new-vm-state')), 'utf8')), conversation);
|
|
114
140
|
const model = new test_1.MockLanguageModelV3({
|
|
115
141
|
doStream: async () => ({
|
|
116
142
|
stream: new ReadableStream({
|
|
@@ -138,11 +164,134 @@ const exec = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
|
138
164
|
strict_1.default.deepEqual(model.doStreamCalls[0].prompt.slice(1).map((message) => message.role), ['user', 'assistant', 'user']);
|
|
139
165
|
strict_1.default.match(JSON.stringify(model.doStreamCalls[0].prompt), /Found three filings/);
|
|
140
166
|
// Completion is published only after the new conversation has reached the remote.
|
|
141
|
-
const
|
|
142
|
-
await another.restore();
|
|
143
|
-
const continued = JSON.parse(await node_fs_1.promises.readFile(node_path_1.default.join(another.dir, '.builder/conversation.json'), 'utf8'));
|
|
167
|
+
const continued = JSON.parse(String(savedConversation));
|
|
144
168
|
strict_1.default.equal(continued.messages.length, 4);
|
|
145
169
|
strict_1.default.match(JSON.stringify(continued.messages[3]), /Continuing from the three filings/);
|
|
170
|
+
await new Promise((resolve) => storage.close(resolve));
|
|
171
|
+
// And none of it ever went near the repository, or the workspace a command can read.
|
|
172
|
+
const everyFile = (await exec('git', ['--git-dir', remote, 'log', '--all', '--name-only', '--format='])).stdout;
|
|
173
|
+
strict_1.default.doesNotMatch(everyFile, /conversation/);
|
|
174
|
+
await strict_1.default.rejects(node_fs_1.promises.access(node_path_1.default.join(replacementConfig.workspaceDir, '.builder/conversation.json')));
|
|
175
|
+
});
|
|
176
|
+
(0, node_test_1.it)('starts a VM from the latest commit: another session\'s chat in the history stays off its disk', async () => {
|
|
177
|
+
const identity = ['-c', 'user.name=test', '-c', 'user.email=test@example.invalid'];
|
|
178
|
+
const inVm = (sync, ...args) => exec('git', [...identity, '--git-dir', sync.gitDir, '--work-tree', sync.dir, ...args], { cwd: sync.dir });
|
|
179
|
+
const count = async (sync) => Number((await inVm(sync, 'rev-list', '--count', 'HEAD')).stdout.trim());
|
|
180
|
+
const onServer = async () => Number((await exec('git', ['--git-dir', remote, 'rev-list', '--count', config.branch])).stdout.trim());
|
|
181
|
+
const hasObject = (sync, sha) => inVm(sync, 'cat-file', '-e', sha).then(() => true, () => false);
|
|
182
|
+
const write = async (dir, name, contents) => {
|
|
183
|
+
await node_fs_1.promises.mkdir(node_path_1.default.dirname(node_path_1.default.join(dir, name)), { recursive: true });
|
|
184
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(dir, name), contents);
|
|
185
|
+
};
|
|
186
|
+
// An older session's checkpoint that did commit its chat, then a merge that took it back out.
|
|
187
|
+
const earlier = new git_sync_1.GitSync({ ...config, branch: 'session/earlier', dir: node_path_1.default.join(root, 'earlier-vm') });
|
|
188
|
+
await earlier.restore();
|
|
189
|
+
await write(earlier.dir, '.builder/conversation.json', 'CHAT OF ANOTHER SESSION');
|
|
190
|
+
await write(earlier.dir, 'index.html', '<h1>app</h1>');
|
|
191
|
+
await inVm(earlier, 'add', '-f', '.');
|
|
192
|
+
await inVm(earlier, 'commit', '-qm', 'checkpoint');
|
|
193
|
+
const chatCommit = (await inVm(earlier, 'rev-parse', 'HEAD')).stdout.trim();
|
|
194
|
+
await inVm(earlier, 'rm', '-q', '--cached', '.builder/conversation.json');
|
|
195
|
+
await inVm(earlier, 'commit', '-qm', 'merge without the chat');
|
|
196
|
+
await inVm(earlier, 'push', '-q', 'origin', `HEAD:${config.branch}`);
|
|
197
|
+
const vm = new git_sync_1.GitSync(config);
|
|
198
|
+
strict_1.default.equal(await vm.restore(), true);
|
|
199
|
+
strict_1.default.equal(await count(vm), 1);
|
|
200
|
+
strict_1.default.equal(await hasObject(earlier, chatCommit), true, 'a full checkout does hold it');
|
|
201
|
+
strict_1.default.equal(await hasObject(vm, chatCommit), false);
|
|
202
|
+
await strict_1.default.rejects(node_fs_1.promises.access(node_path_1.default.join(vm.dir, '.builder/conversation.json')));
|
|
203
|
+
// Its checkpoints push, and the server keeps everything.
|
|
204
|
+
await write(vm.dir, 'work.txt', 'ITS OWN WORK');
|
|
205
|
+
strict_1.default.ok(await vm.commit('turn finished'), 'pushed');
|
|
206
|
+
strict_1.default.equal(await vm.commit('nothing new'), undefined);
|
|
207
|
+
strict_1.default.equal(await onServer(), 3);
|
|
208
|
+
await strict_1.default.rejects(node_fs_1.promises.access(node_path_1.default.join(remote, 'shallow')));
|
|
209
|
+
// A replacement VM restores this session's own work, still without the rest.
|
|
210
|
+
const replacement = new git_sync_1.GitSync({ ...config, dir: node_path_1.default.join(root, 'replacement-vm') });
|
|
211
|
+
strict_1.default.equal(await replacement.restore(), true);
|
|
212
|
+
strict_1.default.equal(await node_fs_1.promises.readFile(node_path_1.default.join(replacement.dir, 'work.txt'), 'utf8'), 'ITS OWN WORK');
|
|
213
|
+
strict_1.default.equal(await count(replacement), 1);
|
|
214
|
+
strict_1.default.equal(await hasObject(replacement, chatCommit), false);
|
|
215
|
+
// A running VM picks up a commit the platform made on its branch.
|
|
216
|
+
await write(replacement.dir, 'merged.txt', 'from the api');
|
|
217
|
+
await replacement.commit('snapshot');
|
|
218
|
+
strict_1.default.equal(await vm.restore(), true);
|
|
219
|
+
strict_1.default.equal(await node_fs_1.promises.readFile(node_path_1.default.join(vm.dir, 'merged.txt'), 'utf8'), 'from the api');
|
|
220
|
+
strict_1.default.equal(await hasObject(vm, chatCommit), false);
|
|
221
|
+
strict_1.default.equal(await onServer(), 4);
|
|
222
|
+
});
|
|
223
|
+
(0, node_test_1.it)('keeps its git data out of the workspace, and runs nothing a workspace asks it to', async () => {
|
|
224
|
+
const vm = new git_sync_1.GitSync(config);
|
|
225
|
+
await vm.restore();
|
|
226
|
+
await strict_1.default.rejects(node_fs_1.promises.access(node_path_1.default.join(vm.dir, '.git')));
|
|
227
|
+
// Everything a workload could plant to run code as the runtime, or to send it the token.
|
|
228
|
+
const pwned = node_path_1.default.join(root, 'pwned');
|
|
229
|
+
const script = node_path_1.default.join(root, 'plant.sh');
|
|
230
|
+
await node_fs_1.promises.writeFile(script, `#!/bin/sh\ntouch ${pwned}\n`, { mode: 0o755 });
|
|
231
|
+
const elsewhere = node_path_1.default.join(root, 'elsewhere.git');
|
|
232
|
+
await exec('git', ['init', '-q', '--bare', elsewhere]);
|
|
233
|
+
await exec('git', ['init', '-q', vm.dir]);
|
|
234
|
+
await node_fs_1.promises.mkdir(node_path_1.default.join(vm.dir, '.git/hooks'), { recursive: true });
|
|
235
|
+
await node_fs_1.promises.copyFile(script, node_path_1.default.join(vm.dir, '.git/hooks/pre-commit'));
|
|
236
|
+
await node_fs_1.promises.appendFile(node_path_1.default.join(vm.dir, '.git/config'), `[core]\n\tfsmonitor = ${script}\n\thooksPath = .git/hooks\n[remote "origin"]\n\turl = file://${elsewhere}\n[filter "x"]\n\tclean = ${script}\n[credential]\n\thelper = ${script}\n`);
|
|
237
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(vm.dir, '.gitattributes'), '* filter=x\n');
|
|
238
|
+
// A nested repository with its own, committed so git takes it in as one.
|
|
239
|
+
const nested = node_path_1.default.join(vm.dir, 'vendor/lib');
|
|
240
|
+
await node_fs_1.promises.mkdir(nested, { recursive: true });
|
|
241
|
+
await exec('git', ['init', '-q', nested]);
|
|
242
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(nested, 'a.txt'), 'a');
|
|
243
|
+
const nestedGit = (...args) => exec('git', ['-c', 'user.name=t', '-c', 'user.email=t@t', ...args], { cwd: nested });
|
|
244
|
+
await nestedGit('add', '.');
|
|
245
|
+
await nestedGit('commit', '-qm', 'nested');
|
|
246
|
+
await node_fs_1.promises.appendFile(node_path_1.default.join(nested, '.git/config'), `[core]\n\tfsmonitor = ${script}\n`);
|
|
247
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(vm.dir, 'work.txt'), 'work');
|
|
248
|
+
const sha = await vm.commit('turn finished');
|
|
249
|
+
strict_1.default.ok(sha);
|
|
250
|
+
await strict_1.default.rejects(node_fs_1.promises.access(pwned), 'nothing planted ran');
|
|
251
|
+
strict_1.default.equal((await exec('git', ['--git-dir', remote, 'rev-parse', config.branch])).stdout.trim(), sha, 'pushed to the real server');
|
|
252
|
+
await strict_1.default.rejects(exec('git', ['--git-dir', elsewhere, 'rev-parse', config.branch]), 'and nowhere else');
|
|
253
|
+
const committed = (await exec('git', ['--git-dir', remote, 'ls-tree', '-r', '--name-only', config.branch])).stdout.split('\n');
|
|
254
|
+
strict_1.default.ok(committed.includes('work.txt'));
|
|
255
|
+
strict_1.default.ok(!committed.some((name) => name.startsWith('.git/')), 'its own .git is not committed');
|
|
256
|
+
});
|
|
257
|
+
(0, node_test_1.it)('keeps saving after the platform commits to its branch, with its own files and that commit in the history', async () => {
|
|
258
|
+
const vm = new git_sync_1.GitSync(config);
|
|
259
|
+
await vm.restore();
|
|
260
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(vm.dir, 'a.txt'), 'turn 1');
|
|
261
|
+
await vm.commit('turn 1');
|
|
262
|
+
const platform = new git_sync_1.GitSync({ ...config, dir: node_path_1.default.join(root, 'platform') });
|
|
263
|
+
await platform.restore();
|
|
264
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(platform.dir, 'edited.txt'), 'from a person');
|
|
265
|
+
const platformCommit = await platform.commit('a person\'s edit');
|
|
266
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(vm.dir, 'a.txt'), 'turn 2');
|
|
267
|
+
const sha = await vm.commit('turn 2');
|
|
268
|
+
strict_1.default.ok(sha, 'pushed, not refused');
|
|
269
|
+
strict_1.default.equal((await exec('git', ['--git-dir', remote, 'rev-parse', config.branch])).stdout.trim(), sha);
|
|
270
|
+
await exec('git', ['--git-dir', remote, 'merge-base', '--is-ancestor', String(platformCommit), config.branch]);
|
|
271
|
+
strict_1.default.equal((await exec('git', ['--git-dir', remote, 'show', `${config.branch}:a.txt`])).stdout, 'turn 2');
|
|
272
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(vm.dir, 'a.txt'), 'turn 3');
|
|
273
|
+
strict_1.default.ok(await vm.commit('turn 3'), 'and goes on as normal');
|
|
274
|
+
strict_1.default.equal((await exec('git', ['--git-dir', remote, 'show', `${config.branch}:a.txt`])).stdout, 'turn 3');
|
|
275
|
+
});
|
|
276
|
+
(0, node_test_1.it)('still fails a checkpoint when the server really is unreachable', async () => {
|
|
277
|
+
const vm = new git_sync_1.GitSync(config);
|
|
278
|
+
await vm.restore();
|
|
279
|
+
await vm.commit('first');
|
|
280
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(vm.dir, 'a.txt'), 'x');
|
|
281
|
+
await node_fs_1.promises.rename(remote, `${remote}.offline`);
|
|
282
|
+
await strict_1.default.rejects(vm.commit('lost'));
|
|
283
|
+
await node_fs_1.promises.rename(`${remote}.offline`, remote);
|
|
284
|
+
});
|
|
285
|
+
(0, node_test_1.it)('never commits bulk downloads, caches or logs, whatever the repository says', async () => {
|
|
286
|
+
const vm = new git_sync_1.GitSync(config);
|
|
287
|
+
await vm.restore();
|
|
288
|
+
for (const name of ['node_modules/x/index.js', 'data/attachments/a.pdf', '.venv/bin/python', 'a.sqlite', '.builder/logs/app.log', 'kept.txt']) {
|
|
289
|
+
await node_fs_1.promises.mkdir(node_path_1.default.dirname(node_path_1.default.join(vm.dir, name)), { recursive: true });
|
|
290
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(vm.dir, name), 'x');
|
|
291
|
+
}
|
|
292
|
+
await vm.commit('turn finished');
|
|
293
|
+
const committed = (await exec('git', ['--git-dir', remote, 'ls-tree', '-r', '--name-only', config.branch])).stdout.trim().split('\n');
|
|
294
|
+
strict_1.default.deepEqual(committed, ['kept.txt']);
|
|
146
295
|
});
|
|
147
296
|
(0, node_test_1.it)('does not announce readiness or initialize an empty repo when restoration fails', async () => {
|
|
148
297
|
await node_fs_1.promises.rename(remote, `${remote}.offline`);
|
|
@@ -175,7 +324,7 @@ const exec = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
|
175
324
|
const sha = await sync.commit('initial');
|
|
176
325
|
await node_fs_1.promises.rename(remote, `${remote}.offline`);
|
|
177
326
|
strict_1.default.equal(await sync.commit('unchanged periodic checkpoint'), undefined);
|
|
178
|
-
strict_1.default.equal((await exec('git', ['rev-parse', 'HEAD']
|
|
327
|
+
strict_1.default.equal((await exec('git', ['--git-dir', sync.gitDir, 'rev-parse', 'HEAD'])).stdout.trim(), sha);
|
|
179
328
|
});
|
|
180
329
|
});
|
|
181
330
|
//# sourceMappingURL=git-sync.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-sync.test.js","sourceRoot":"","sources":["../../src/persistence/git-sync.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git-sync.test.js","sourceRoot":"","sources":["../../src/persistence/git-sync.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,32 @@
|
|
|
1
1
|
import type { SessionStorageConfig } from '../runtime/config';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const MAX_SESSION_FILE_BYTES: number;
|
|
3
|
+
/** Whether the session already holds exactly this version of a mirrored file. */
|
|
4
|
+
export type MirrorCheck = (file: string, content: Buffer) => boolean;
|
|
5
|
+
export declare function fileRoute(relative: string): string;
|
|
6
|
+
/** Runs `work` over `items`, a few at a time; the first failure stops new work and is rethrown. */
|
|
7
|
+
export declare function inPool<T>(items: T[], work: (item: T) => Promise<void>): Promise<void>;
|
|
3
8
|
export declare class SessionStorageSync {
|
|
4
9
|
private readonly config;
|
|
5
|
-
private
|
|
10
|
+
private readonly known;
|
|
11
|
+
private mirror?;
|
|
6
12
|
private busy;
|
|
7
13
|
constructor(config: SessionStorageConfig);
|
|
8
14
|
get dir(): string;
|
|
15
|
+
/** Live sync's answer for mirrored text; without it every changed file is uploaded. */
|
|
16
|
+
setMirror(check: MirrorCheck): void;
|
|
9
17
|
private serialize;
|
|
10
18
|
private request;
|
|
11
19
|
private writeFile;
|
|
20
|
+
/** `atBoot`: restoring, before any workload exists and so still as the runtime. */
|
|
21
|
+
private saveMarker;
|
|
22
|
+
private download;
|
|
23
|
+
private applyExecutables;
|
|
12
24
|
restore(): Promise<boolean>;
|
|
25
|
+
private walk;
|
|
26
|
+
/** Brings the list of executables up to date; whether it changed. */
|
|
27
|
+
private recordExecutables;
|
|
28
|
+
/** Saves `file` if it changed; whether it did. */
|
|
29
|
+
private save;
|
|
13
30
|
commit(_reason: string): Promise<string | undefined>;
|
|
14
31
|
}
|
|
15
32
|
//# sourceMappingURL=snapshot-sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-sync.d.ts","sourceRoot":"","sources":["../../src/persistence/snapshot-sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot-sync.d.ts","sourceRoot":"","sources":["../../src/persistence/snapshot-sync.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAK7D,eAAO,MAAM,sBAAsB,QAAmB,CAAA;AA6BtD,iFAAiF;AACjF,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;AAuBpE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,mGAAmG;AACnG,wBAAsB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3F;AAED,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,IAAI,CAAsC;gBACrB,MAAM,EAAE,oBAAoB;IACzD,IAAI,GAAG,IAAI,MAAM,CAA2B;IAE5C,uFAAuF;IACvF,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAInC,OAAO,CAAC,SAAS;YAMH,OAAO;YAYP,SAAS;IAmBvB,mFAAmF;YACrE,UAAU;YAMV,QAAQ;YAaR,gBAAgB;IAiB9B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;YAyBb,IAAI;IAmBlB,qEAAqE;YACvD,iBAAiB;IAQ/B,kDAAkD;YACpC,IAAI;IAwBlB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAuBrD"}
|