@sentropic/h2a-runtime 0.81.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account-pool.d.ts +168 -0
- package/dist/account-pool.d.ts.map +1 -0
- package/dist/account-pool.js +385 -0
- package/dist/account-pool.js.map +1 -0
- package/dist/agents-projection.d.ts +56 -0
- package/dist/agents-projection.d.ts.map +1 -0
- package/dist/agents-projection.js +82 -0
- package/dist/agents-projection.js.map +1 -0
- package/dist/attach.d.ts +75 -0
- package/dist/attach.d.ts.map +1 -0
- package/dist/attach.js +432 -0
- package/dist/attach.js.map +1 -0
- package/dist/auth-bundle.d.ts +21 -0
- package/dist/auth-bundle.d.ts.map +1 -0
- package/dist/auth-bundle.js +112 -0
- package/dist/auth-bundle.js.map +1 -0
- package/dist/auth-diagnostics.d.ts +18 -0
- package/dist/auth-diagnostics.d.ts.map +1 -0
- package/dist/auth-diagnostics.js +23 -0
- package/dist/auth-diagnostics.js.map +1 -0
- package/dist/auth-login.d.ts +9 -0
- package/dist/auth-login.d.ts.map +1 -0
- package/dist/auth-login.js +21 -0
- package/dist/auth-login.js.map +1 -0
- package/dist/auth-refresh.d.ts +32 -0
- package/dist/auth-refresh.d.ts.map +1 -0
- package/dist/auth-refresh.js +83 -0
- package/dist/auth-refresh.js.map +1 -0
- package/dist/auth-tools.d.ts +55 -0
- package/dist/auth-tools.d.ts.map +1 -0
- package/dist/auth-tools.js +163 -0
- package/dist/auth-tools.js.map +1 -0
- package/dist/browser-bridge-local.d.ts +27 -0
- package/dist/browser-bridge-local.d.ts.map +1 -0
- package/dist/browser-bridge-local.js +51 -0
- package/dist/browser-bridge-local.js.map +1 -0
- package/dist/browser.d.ts +53 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +61 -0
- package/dist/browser.js.map +1 -0
- package/dist/conductor-launch.d.ts +179 -0
- package/dist/conductor-launch.d.ts.map +1 -0
- package/dist/conductor-launch.js +414 -0
- package/dist/conductor-launch.js.map +1 -0
- package/dist/config.d.ts +182 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +334 -0
- package/dist/config.js.map +1 -0
- package/dist/conv-guard.d.ts +76 -0
- package/dist/conv-guard.d.ts.map +1 -0
- package/dist/conv-guard.js +131 -0
- package/dist/conv-guard.js.map +1 -0
- package/dist/convsync.d.ts +24 -0
- package/dist/convsync.d.ts.map +1 -0
- package/dist/convsync.js +108 -0
- package/dist/convsync.js.map +1 -0
- package/dist/cred-health.d.ts +96 -0
- package/dist/cred-health.d.ts.map +1 -0
- package/dist/cred-health.js +170 -0
- package/dist/cred-health.js.map +1 -0
- package/dist/delegate.d.ts +406 -0
- package/dist/delegate.d.ts.map +1 -0
- package/dist/delegate.js +739 -0
- package/dist/delegate.js.map +1 -0
- package/dist/enroll.d.ts +91 -0
- package/dist/enroll.d.ts.map +1 -0
- package/dist/enroll.js +248 -0
- package/dist/enroll.js.map +1 -0
- package/dist/fanout.d.ts +63 -0
- package/dist/fanout.d.ts.map +1 -0
- package/dist/fanout.js +115 -0
- package/dist/fanout.js.map +1 -0
- package/dist/forward.d.ts +66 -0
- package/dist/forward.d.ts.map +1 -0
- package/dist/forward.js +141 -0
- package/dist/forward.js.map +1 -0
- package/dist/gitdiff.d.ts +31 -0
- package/dist/gitdiff.d.ts.map +1 -0
- package/dist/gitdiff.js +133 -0
- package/dist/gitdiff.js.map +1 -0
- package/dist/h2a-bridge.d.ts +102 -0
- package/dist/h2a-bridge.d.ts.map +1 -0
- package/dist/h2a-bridge.js +333 -0
- package/dist/h2a-bridge.js.map +1 -0
- package/dist/h2a-jobs.d.ts +235 -0
- package/dist/h2a-jobs.d.ts.map +1 -0
- package/dist/h2a-jobs.js +388 -0
- package/dist/h2a-jobs.js.map +1 -0
- package/dist/h2a-ping.d.ts +38 -0
- package/dist/h2a-ping.d.ts.map +1 -0
- package/dist/h2a-ping.js +58 -0
- package/dist/h2a-ping.js.map +1 -0
- package/dist/index.d.ts +98 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5887 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive-throttle.d.ts +164 -0
- package/dist/interactive-throttle.d.ts.map +1 -0
- package/dist/interactive-throttle.js +194 -0
- package/dist/interactive-throttle.js.map +1 -0
- package/dist/lineage-client.d.ts +77 -0
- package/dist/lineage-client.d.ts.map +1 -0
- package/dist/lineage-client.js +117 -0
- package/dist/lineage-client.js.map +1 -0
- package/dist/lineage-lease.d.ts +152 -0
- package/dist/lineage-lease.d.ts.map +1 -0
- package/dist/lineage-lease.js +303 -0
- package/dist/lineage-lease.js.map +1 -0
- package/dist/llm-gateway-runtime/accounts.d.ts +48 -0
- package/dist/llm-gateway-runtime/accounts.d.ts.map +1 -0
- package/dist/llm-gateway-runtime/accounts.js +226 -0
- package/dist/llm-gateway-runtime/accounts.js.map +1 -0
- package/dist/llm-gateway-runtime/index.d.ts +4 -0
- package/dist/llm-gateway-runtime/index.d.ts.map +1 -0
- package/dist/llm-gateway-runtime/index.js +58 -0
- package/dist/llm-gateway-runtime/index.js.map +1 -0
- package/dist/llm-gateway-runtime/model-catalog.d.ts +36 -0
- package/dist/llm-gateway-runtime/model-catalog.d.ts.map +1 -0
- package/dist/llm-gateway-runtime/model-catalog.js +146 -0
- package/dist/llm-gateway-runtime/model-catalog.js.map +1 -0
- package/dist/llm-gateway-runtime/proxy-anthropic.d.ts +3 -0
- package/dist/llm-gateway-runtime/proxy-anthropic.d.ts.map +1 -0
- package/dist/llm-gateway-runtime/proxy-anthropic.js +139 -0
- package/dist/llm-gateway-runtime/proxy-anthropic.js.map +1 -0
- package/dist/llm-gateway-runtime/proxy-openai.d.ts +117 -0
- package/dist/llm-gateway-runtime/proxy-openai.d.ts.map +1 -0
- package/dist/llm-gateway-runtime/proxy-openai.js +1132 -0
- package/dist/llm-gateway-runtime/proxy-openai.js.map +1 -0
- package/dist/llm-gateway-runtime/session-ledger.d.ts +32 -0
- package/dist/llm-gateway-runtime/session-ledger.d.ts.map +1 -0
- package/dist/llm-gateway-runtime/session-ledger.js +62 -0
- package/dist/llm-gateway-runtime/session-ledger.js.map +1 -0
- package/dist/llm-gateway-runtime/sticky.d.ts +40 -0
- package/dist/llm-gateway-runtime/sticky.d.ts.map +1 -0
- package/dist/llm-gateway-runtime/sticky.js +254 -0
- package/dist/llm-gateway-runtime/sticky.js.map +1 -0
- package/dist/llm-mesh.d.ts +102 -0
- package/dist/llm-mesh.d.ts.map +1 -0
- package/dist/llm-mesh.js +433 -0
- package/dist/llm-mesh.js.map +1 -0
- package/dist/migrate-candidates.d.ts +35 -0
- package/dist/migrate-candidates.d.ts.map +1 -0
- package/dist/migrate-candidates.js +128 -0
- package/dist/migrate-candidates.js.map +1 -0
- package/dist/migrate.d.ts +125 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +561 -0
- package/dist/migrate.js.map +1 -0
- package/dist/plugin-manifest.d.ts +143 -0
- package/dist/plugin-manifest.d.ts.map +1 -0
- package/dist/plugin-manifest.js +233 -0
- package/dist/plugin-manifest.js.map +1 -0
- package/dist/plugin.d.ts +274 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +919 -0
- package/dist/plugin.js.map +1 -0
- package/dist/pod-liveness.d.ts +51 -0
- package/dist/pod-liveness.d.ts.map +1 -0
- package/dist/pod-liveness.js +80 -0
- package/dist/pod-liveness.js.map +1 -0
- package/dist/profile-menu.d.ts +7 -0
- package/dist/profile-menu.d.ts.map +1 -0
- package/dist/profile-menu.js +52 -0
- package/dist/profile-menu.js.map +1 -0
- package/dist/profiles.d.ts +23 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +66 -0
- package/dist/profiles.js.map +1 -0
- package/dist/protocol-local.d.ts +27 -0
- package/dist/protocol-local.d.ts.map +1 -0
- package/dist/protocol-local.js +12 -0
- package/dist/protocol-local.js.map +1 -0
- package/dist/pty.d.ts +26 -0
- package/dist/pty.d.ts.map +1 -0
- package/dist/pty.js +45 -0
- package/dist/pty.js.map +1 -0
- package/dist/readiness.d.ts +38 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +169 -0
- package/dist/readiness.js.map +1 -0
- package/dist/registry.d.ts +258 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +570 -0
- package/dist/registry.js.map +1 -0
- package/dist/relaunch.d.ts +52 -0
- package/dist/relaunch.d.ts.map +1 -0
- package/dist/relaunch.js +76 -0
- package/dist/relaunch.js.map +1 -0
- package/dist/restore.d.ts +165 -0
- package/dist/restore.d.ts.map +1 -0
- package/dist/restore.js +530 -0
- package/dist/restore.js.map +1 -0
- package/dist/run.d.ts +29 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +206 -0
- package/dist/run.js.map +1 -0
- package/dist/secrets.d.ts +25 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +98 -0
- package/dist/secrets.js.map +1 -0
- package/dist/session-restore.d.ts +26 -0
- package/dist/session-restore.d.ts.map +1 -0
- package/dist/session-restore.js +122 -0
- package/dist/session-restore.js.map +1 -0
- package/dist/skills-sync.d.ts +126 -0
- package/dist/skills-sync.d.ts.map +1 -0
- package/dist/skills-sync.js +255 -0
- package/dist/skills-sync.js.map +1 -0
- package/dist/smoke.d.ts +23 -0
- package/dist/smoke.d.ts.map +1 -0
- package/dist/smoke.js +138 -0
- package/dist/smoke.js.map +1 -0
- package/dist/soft-refresh.d.ts +107 -0
- package/dist/soft-refresh.d.ts.map +1 -0
- package/dist/soft-refresh.js +426 -0
- package/dist/soft-refresh.js.map +1 -0
- package/dist/sync-status.d.ts +22 -0
- package/dist/sync-status.d.ts.map +1 -0
- package/dist/sync-status.js +41 -0
- package/dist/sync-status.js.map +1 -0
- package/dist/sync.d.ts +77 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +302 -0
- package/dist/sync.js.map +1 -0
- package/dist/throttle-signatures.d.ts +43 -0
- package/dist/throttle-signatures.d.ts.map +1 -0
- package/dist/throttle-signatures.js +116 -0
- package/dist/throttle-signatures.js.map +1 -0
- package/dist/tmux.d.ts +286 -0
- package/dist/tmux.d.ts.map +1 -0
- package/dist/tmux.js +970 -0
- package/dist/tmux.js.map +1 -0
- package/dist/tunnel.d.ts +25 -0
- package/dist/tunnel.d.ts.map +1 -0
- package/dist/tunnel.js +127 -0
- package/dist/tunnel.js.map +1 -0
- package/dist/workspace-merge.d.ts +17 -0
- package/dist/workspace-merge.d.ts.map +1 -0
- package/dist/workspace-merge.js +153 -0
- package/dist/workspace-merge.js.map +1 -0
- package/dist/workspace-sync-incremental.d.ts +64 -0
- package/dist/workspace-sync-incremental.d.ts.map +1 -0
- package/dist/workspace-sync-incremental.js +199 -0
- package/dist/workspace-sync-incremental.js.map +1 -0
- package/dist/workspace-sync.d.ts +3 -0
- package/dist/workspace-sync.d.ts.map +1 -0
- package/dist/workspace-sync.js +187 -0
- package/dist/workspace-sync.js.map +1 -0
- package/dist/workspace.d.ts +70 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +173 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync, statSync } from "node:fs";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
const FILE_SIZE_LIMIT = 10_000_000; // 10 MB per file
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Hashing helpers
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
export function sha256Buf(buf) {
|
|
10
|
+
return createHash("sha256").update(buf).digest("hex");
|
|
11
|
+
}
|
|
12
|
+
export function sha256File(path) {
|
|
13
|
+
return sha256Buf(readFileSync(path));
|
|
14
|
+
}
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Git introspection
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
export function isGitRepo(cwd) {
|
|
19
|
+
return (spawnSync("git", ["rev-parse", "--git-dir"], { cwd, encoding: "utf8" })
|
|
20
|
+
.status === 0);
|
|
21
|
+
}
|
|
22
|
+
export function getHeadSha(cwd) {
|
|
23
|
+
const r = spawnSync("git", ["rev-parse", "HEAD"], {
|
|
24
|
+
cwd,
|
|
25
|
+
encoding: "utf8",
|
|
26
|
+
});
|
|
27
|
+
return r.status === 0 ? r.stdout.trim() : undefined;
|
|
28
|
+
}
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Bootstrap: full git bundle
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/**
|
|
33
|
+
* Create a git bundle of all local refs (HEAD + all branches).
|
|
34
|
+
* Used for the first-time push when no base commit is known on the CP side.
|
|
35
|
+
*/
|
|
36
|
+
export function buildGitBundle(cwd) {
|
|
37
|
+
const r = spawnSync("git", ["bundle", "create", "-", "--all"], {
|
|
38
|
+
cwd,
|
|
39
|
+
maxBuffer: 512 * 1024 * 1024,
|
|
40
|
+
});
|
|
41
|
+
if (r.status !== 0) {
|
|
42
|
+
throw new Error(`git bundle failed: ${r.stderr?.toString()?.slice(0, 200) ?? "unknown error"}`);
|
|
43
|
+
}
|
|
44
|
+
return r.stdout;
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Incremental: tracked diff (committed + staged changes since baseSha)
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* Build a binary git diff between baseSha and HEAD (committed changes) plus
|
|
51
|
+
* staged index changes, combined and base64-encoded for transport.
|
|
52
|
+
*/
|
|
53
|
+
export function buildTrackedDiff(cwd, baseSha) {
|
|
54
|
+
const opts = {
|
|
55
|
+
cwd,
|
|
56
|
+
maxBuffer: 256 * 1024 * 1024,
|
|
57
|
+
};
|
|
58
|
+
// Committed changes between baseSha and HEAD
|
|
59
|
+
const rCommitted = spawnSync("git", ["diff", "--binary", baseSha, "HEAD"], opts);
|
|
60
|
+
// Staged (index) changes not yet committed
|
|
61
|
+
const rStaged = spawnSync("git", ["diff", "--binary", "--cached", "HEAD"], opts);
|
|
62
|
+
const combined = Buffer.concat([
|
|
63
|
+
rCommitted.stdout ?? Buffer.alloc(0),
|
|
64
|
+
rStaged.stdout ?? Buffer.alloc(0),
|
|
65
|
+
]);
|
|
66
|
+
return combined.toString("base64");
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Build the full incremental manifest: tracked diff + untracked file list.
|
|
70
|
+
* Does NOT build the tarball (caller calls buildUntrackedTarball separately).
|
|
71
|
+
*/
|
|
72
|
+
export function buildIncrementalManifest(cwd, baseSha) {
|
|
73
|
+
const tracked = buildTrackedDiff(cwd, baseSha);
|
|
74
|
+
// List untracked files not excluded by .gitignore
|
|
75
|
+
const utR = spawnSync("git", ["ls-files", "-o", "--exclude-standard", "-z"], {
|
|
76
|
+
cwd,
|
|
77
|
+
encoding: "buffer",
|
|
78
|
+
});
|
|
79
|
+
const untrackedPaths = utR.stdout
|
|
80
|
+
.toString("utf8")
|
|
81
|
+
.split("\0")
|
|
82
|
+
.map((p) => p.trim())
|
|
83
|
+
.filter(Boolean);
|
|
84
|
+
const untrackedManifest = untrackedPaths.map((p) => {
|
|
85
|
+
const abs = join(cwd, p);
|
|
86
|
+
return { path: p, sha256: sha256File(abs), size: statSync(abs).size };
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
base: baseSha,
|
|
90
|
+
tracked,
|
|
91
|
+
untrackedManifest,
|
|
92
|
+
deleted: [],
|
|
93
|
+
renames: [],
|
|
94
|
+
modes: [],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Build a gzip tarball of the specified untracked file paths relative to cwd.
|
|
99
|
+
* Returns an empty Buffer if paths is empty.
|
|
100
|
+
*/
|
|
101
|
+
export function buildUntrackedTarball(cwd, paths) {
|
|
102
|
+
if (paths.length === 0)
|
|
103
|
+
return Buffer.alloc(0);
|
|
104
|
+
const input = paths.join("\0");
|
|
105
|
+
// Note: -C must precede -T on GNU tar (positional option ordering).
|
|
106
|
+
const r = spawnSync("tar", ["-czf", "-", "-C", cwd, "--null", "-T", "-"], {
|
|
107
|
+
input: Buffer.from(input),
|
|
108
|
+
maxBuffer: 256 * 1024 * 1024,
|
|
109
|
+
});
|
|
110
|
+
if (r.status !== 0) {
|
|
111
|
+
throw new Error(`tar untracked failed: ${r.stderr?.toString()?.slice(0, 200) ?? "unknown error"}`);
|
|
112
|
+
}
|
|
113
|
+
return r.stdout;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Classifies the working set into hot/cold.
|
|
117
|
+
*
|
|
118
|
+
* Hot = git-tracked modified files (git diff --name-only HEAD)
|
|
119
|
+
* ∪ untracked recent files (mtime < hotSetMtimeSec seconds ago)
|
|
120
|
+
* where size ≤ 10 MB each.
|
|
121
|
+
* Cap: total hot-set bytes ≤ hotSetMaxBytes (default 50 MB).
|
|
122
|
+
* Files exceeding the size limit or pushed beyond the cap go to cold.
|
|
123
|
+
* Within the cap, candidates are sorted by mtime descending (newest first).
|
|
124
|
+
*/
|
|
125
|
+
export async function classifyWorkingSet(args) {
|
|
126
|
+
const { cwd } = args;
|
|
127
|
+
const hotSetMaxBytes = args.hotSetMaxBytes ?? 50_000_000;
|
|
128
|
+
const hotSetMtimeSec = args.hotSetMtimeSec ?? 86_400;
|
|
129
|
+
const nowMs = Date.now();
|
|
130
|
+
const mtimeCutoffMs = nowMs - hotSetMtimeSec * 1000;
|
|
131
|
+
// Tracked modified files (git diff --name-only HEAD)
|
|
132
|
+
const diffR = spawnSync("git", ["diff", "--name-only", "HEAD"], {
|
|
133
|
+
cwd,
|
|
134
|
+
encoding: "utf8",
|
|
135
|
+
maxBuffer: 8 * 1024 * 1024,
|
|
136
|
+
});
|
|
137
|
+
const trackedModified = diffR.status === 0
|
|
138
|
+
? diffR.stdout
|
|
139
|
+
.split("\n")
|
|
140
|
+
.map((p) => p.trim())
|
|
141
|
+
.filter(Boolean)
|
|
142
|
+
: [];
|
|
143
|
+
// Untracked files (not ignored by .gitignore)
|
|
144
|
+
const utR = spawnSync("git", ["ls-files", "-o", "--exclude-standard", "-z"], { cwd, encoding: "buffer", maxBuffer: 8 * 1024 * 1024 });
|
|
145
|
+
const untracked = utR.status === 0
|
|
146
|
+
? utR.stdout
|
|
147
|
+
.toString("utf8")
|
|
148
|
+
.split("\0")
|
|
149
|
+
.map((p) => p.trim())
|
|
150
|
+
.filter(Boolean)
|
|
151
|
+
: [];
|
|
152
|
+
// Filter untracked by mtime recency
|
|
153
|
+
const recentUntracked = untracked.filter((p) => {
|
|
154
|
+
try {
|
|
155
|
+
return statSync(join(cwd, p)).mtimeMs >= mtimeCutoffMs;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
// Union: tracked modified + recent untracked, deduplicated
|
|
162
|
+
const candidateSet = new Set([...trackedModified, ...recentUntracked]);
|
|
163
|
+
const candidates = Array.from(candidateSet);
|
|
164
|
+
const entries = [];
|
|
165
|
+
const coldFromSize = [];
|
|
166
|
+
for (const p of candidates) {
|
|
167
|
+
let st;
|
|
168
|
+
try {
|
|
169
|
+
st = statSync(join(cwd, p));
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
continue; // file disappeared — skip
|
|
173
|
+
}
|
|
174
|
+
if (st.size > FILE_SIZE_LIMIT) {
|
|
175
|
+
coldFromSize.push(p);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
entries.push({ path: p, size: st.size, mtimeMs: st.mtimeMs });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Sort by mtime descending (newest first) to prioritize recent files within cap
|
|
182
|
+
entries.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
183
|
+
// Apply cap: fill hot up to hotSetMaxBytes, overflow → cold
|
|
184
|
+
const hot = [];
|
|
185
|
+
const coldFromCap = [];
|
|
186
|
+
let hotBytes = 0;
|
|
187
|
+
for (const e of entries) {
|
|
188
|
+
if (hotBytes + e.size <= hotSetMaxBytes) {
|
|
189
|
+
hot.push(e.path);
|
|
190
|
+
hotBytes += e.size;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
coldFromCap.push(e.path);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const cold = [...coldFromSize, ...coldFromCap];
|
|
197
|
+
return { hot, cold, estimatedHotBytes: hotBytes };
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=workspace-sync-incremental.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-sync-incremental.js","sourceRoot":"","sources":["../src/workspace-sync-incremental.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,iBAAiB;AAErD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,CACL,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;SACpE,MAAM,KAAK,CAAC,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;QAChD,GAAG;QACH,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAC7D,GAAG;QACH,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;KAC7B,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,sBAAsB,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,eAAe,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC,MAAgB,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAAe;IAC3D,MAAM,IAAI,GAAG;QACX,GAAG;QACH,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;KAC7B,CAAC;IACF,6CAA6C;IAC7C,MAAM,UAAU,GAAG,SAAS,CAC1B,KAAK,EACL,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,EACrC,IAAI,CACL,CAAC;IACF,2CAA2C;IAC3C,MAAM,OAAO,GAAG,SAAS,CACvB,KAAK,EACL,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EACxC,IAAI,CACL,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,UAAU,CAAC,MAAwB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,MAAwB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KACrD,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAiBD;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAAW,EACX,OAAe;IAEf,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAE/C,kDAAkD;IAClD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE;QAC3E,GAAG;QACH,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IACH,MAAM,cAAc,GAAI,GAAG,CAAC,MAAiB;SAC1C,QAAQ,CAAC,MAAM,CAAC;SAChB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,MAAM,iBAAiB,GAAqB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO;QACP,iBAAiB;QACjB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW,EAAE,KAAe;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,oEAAoE;IACpE,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;QACxE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;KAC7B,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,yBAAyB,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,eAAe,EAAE,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC,MAAgB,CAAC;AAC5B,CAAC;AAYD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAIxC;IACC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,UAAU,CAAC;IACzD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;IAEpD,qDAAqD;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE;QAC9D,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC3B,CAAC,CAAC;IACH,MAAM,eAAe,GACnB,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,KAAK,CAAC,MAAM;aACT,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;IAET,8CAA8C;IAC9C,MAAM,GAAG,GAAG,SAAS,CACnB,KAAK,EACL,CAAC,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAC9C,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CACxD,CAAC;IACF,MAAM,SAAS,GACb,GAAG,CAAC,MAAM,KAAK,CAAC;QACd,CAAC,CAAE,GAAG,CAAC,MAAiB;aACnB,QAAQ,CAAC,MAAM,CAAC;aAChB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;IAET,oCAAoC;IACpC,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2DAA2D;IAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAI5C,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,EAA2C,CAAC;QAChD,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,0BAA0B;QACtC,CAAC;QACD,IAAI,EAAE,CAAC,IAAI,GAAG,eAAe,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAE9C,4DAA4D;IAC5D,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC,CAAC;IAE/C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function buildWorkspaceArchive(cwd: string): Promise<Buffer>;
|
|
2
|
+
export declare function uploadWorkspaceArchive(baseUrl: string, sessionId: string, archive: Buffer, fetchImpl?: typeof fetch, extraHeaders?: Record<string, string>): Promise<void>;
|
|
3
|
+
//# sourceMappingURL=workspace-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-sync.d.ts","sourceRoot":"","sources":["../src/workspace-sync.ts"],"names":[],"mappings":"AA8FA,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8FxE;AA6BD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,OAAO,KAAa,EAC/B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { authHeaders } from "./config.js";
|
|
5
|
+
// Largest .git we ship in the workspace archive. Over this, the repo history is
|
|
6
|
+
// not transferred (the user restores it in-Pod via git fetch/clone).
|
|
7
|
+
const MAX_GIT_BYTES = 128 * 1024 * 1024; // 128 MiB
|
|
8
|
+
/** Best-effort directory size in bytes via `du -sk`. Infinity on failure (so we skip). */
|
|
9
|
+
async function dirSizeBytes(absPath) {
|
|
10
|
+
const r = await run("du", ["-sk", absPath], dirname(absPath));
|
|
11
|
+
if (r.status !== 0)
|
|
12
|
+
return Number.POSITIVE_INFINITY;
|
|
13
|
+
const kb = parseInt(r.stdout.toString("utf8").trim().split(/\s+/)[0] ?? "", 10);
|
|
14
|
+
return Number.isFinite(kb) ? kb * 1024 : Number.POSITIVE_INFINITY;
|
|
15
|
+
}
|
|
16
|
+
// Safety cap against accidentally pushing huge directories. Generous because a
|
|
17
|
+
// legitimate migrated conversation (.remote/sessions) can be large — claude
|
|
18
|
+
// transcripts embed base64 images that do not compress.
|
|
19
|
+
const MAX_ARCHIVE_BYTES = 256 * 1024 * 1024; // 256 MiB
|
|
20
|
+
function run(command, args, cwd) {
|
|
21
|
+
return new Promise((resolve) => {
|
|
22
|
+
const child = spawn(command, [...args], { cwd });
|
|
23
|
+
const stdout = [];
|
|
24
|
+
const stderr = [];
|
|
25
|
+
child.stdout.on("data", (c) => stdout.push(c));
|
|
26
|
+
child.stderr.on("data", (c) => stderr.push(c));
|
|
27
|
+
child.on("error", () => resolve({ status: 127, stdout: Buffer.concat(stdout), stderr: "spawn error" }));
|
|
28
|
+
child.on("close", (code) => resolve({
|
|
29
|
+
status: code ?? 1,
|
|
30
|
+
stdout: Buffer.concat(stdout),
|
|
31
|
+
stderr: Buffer.concat(stderr).toString("utf8"),
|
|
32
|
+
}));
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async function isGitRepo(cwd) {
|
|
36
|
+
const result = await run("git", ["rev-parse", "--is-inside-work-tree"], cwd);
|
|
37
|
+
return result.status === 0 && result.stdout.toString("utf8").trim() === "true";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Build a gzip tarball of the working directory to seed a remote /workspace.
|
|
41
|
+
*
|
|
42
|
+
* In a git repo, uses `git ls-files -co --exclude-standard` so the archive
|
|
43
|
+
* honors .gitignore precisely AND includes uncommitted working-tree files.
|
|
44
|
+
* Outside a git repo, falls back to tar with a coarse exclude list.
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* Approximate .gitignore in the non-git tar fallback: each plain pattern of
|
|
48
|
+
* the ROOT .gitignore becomes a tar --exclude. Comments and `!` negations are
|
|
49
|
+
* skipped; a trailing `/` is dropped (tar excludes match path components at
|
|
50
|
+
* any depth, like unanchored gitignore dir patterns); a leading `/` anchors
|
|
51
|
+
* the pattern to the archive root (`./`). Patterns that would drop migrated
|
|
52
|
+
* session state (`.remote`, `.claude`) are ignored — the conversation under
|
|
53
|
+
* .remote/sessions must always travel with the workspace.
|
|
54
|
+
*/
|
|
55
|
+
function rootGitignoreExcludes(cwd) {
|
|
56
|
+
let raw;
|
|
57
|
+
try {
|
|
58
|
+
raw = readFileSync(join(cwd, ".gitignore"), "utf8");
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
const excludes = [];
|
|
64
|
+
for (const line of raw.split("\n")) {
|
|
65
|
+
const pattern = line.trim();
|
|
66
|
+
if (!pattern || pattern.startsWith("#") || pattern.startsWith("!"))
|
|
67
|
+
continue;
|
|
68
|
+
const cleaned = pattern.replace(/\/+$/, "");
|
|
69
|
+
if (!cleaned)
|
|
70
|
+
continue;
|
|
71
|
+
const bare = cleaned.replace(/^\/+/, "");
|
|
72
|
+
if (bare === ".remote" || bare === ".claude")
|
|
73
|
+
continue;
|
|
74
|
+
excludes.push(`--exclude=${cleaned.startsWith("/") ? `./${bare}` : cleaned}`);
|
|
75
|
+
}
|
|
76
|
+
return excludes;
|
|
77
|
+
}
|
|
78
|
+
export async function buildWorkspaceArchive(cwd) {
|
|
79
|
+
const git = await isGitRepo(cwd);
|
|
80
|
+
let archive;
|
|
81
|
+
if (git) {
|
|
82
|
+
const list = await run("git", ["ls-files", "-co", "--exclude-standard", "-z"], cwd);
|
|
83
|
+
if (list.status !== 0) {
|
|
84
|
+
throw new Error(`git ls-files failed: ${list.stderr}`);
|
|
85
|
+
}
|
|
86
|
+
if (list.stdout.byteLength === 0) {
|
|
87
|
+
throw new Error("no files to sync (git ls-files returned nothing)");
|
|
88
|
+
}
|
|
89
|
+
// Force-include persisted conversation state under .remote/sessions even
|
|
90
|
+
// though .gitignore typically excludes it (the nested `.claude/` path
|
|
91
|
+
// segment trips a `.claude/` ignore rule). This is how a migrated session
|
|
92
|
+
// carries its in-progress conversation onto the remote workspace PVC, where
|
|
93
|
+
// the session-agent restores it into HOME before the CLI starts.
|
|
94
|
+
//
|
|
95
|
+
// SECURITY: .claude/settings.local.json is intentionally excluded — it
|
|
96
|
+
// contains machine-local API keys and MCP secrets that must not transit the
|
|
97
|
+
// control-plane. The remote session sources credentials via `remote
|
|
98
|
+
// push-creds` instead.
|
|
99
|
+
const sessionState = await run("git", [
|
|
100
|
+
"ls-files",
|
|
101
|
+
"-o",
|
|
102
|
+
"-z",
|
|
103
|
+
"--",
|
|
104
|
+
".remote/sessions",
|
|
105
|
+
".remote/git.json",
|
|
106
|
+
".claude/settings.json",
|
|
107
|
+
], cwd);
|
|
108
|
+
// Force-include the .git directory (git ls-files never lists it) so the
|
|
109
|
+
// remote workspace is a real git repo — commit/push works in the Pod and
|
|
110
|
+
// the remote/branch config travels. Size-gated: huge histories blow the
|
|
111
|
+
// archive cap and the tunnel, so over MAX_GIT_BYTES we skip the objects and
|
|
112
|
+
// let the user restore git in-Pod (git fetch/clone — gh auth is bundled).
|
|
113
|
+
let gitDir = Buffer.alloc(0);
|
|
114
|
+
if (existsSync(join(cwd, ".git"))) {
|
|
115
|
+
const gitBytes = await dirSizeBytes(join(cwd, ".git"));
|
|
116
|
+
if (gitBytes <= MAX_GIT_BYTES) {
|
|
117
|
+
gitDir = Buffer.from(".git\0", "utf8");
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
process.stderr.write(`[remote] .git is ${(gitBytes / 1024 / 1024).toFixed(0)} MiB (> ${MAX_GIT_BYTES / 1024 / 1024} MiB) — not shipped; ` +
|
|
121
|
+
`restore git in the Pod with 'git fetch'/'git clone' (gh auth is bundled if you pass --with gh)\n`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const fileList = Buffer.concat([
|
|
125
|
+
list.stdout,
|
|
126
|
+
sessionState.status === 0 ? sessionState.stdout : Buffer.alloc(0),
|
|
127
|
+
gitDir,
|
|
128
|
+
]);
|
|
129
|
+
// SECURITY: exclude machine-local secrets even if they slip through
|
|
130
|
+
// git ls-files (e.g. when not in .gitignore). Belt-and-suspenders guard.
|
|
131
|
+
const tar = await runWithStdin("tar", ["-czf", "-", "--exclude=./.claude/settings.local.json", "--null", "-T", "-"], cwd, fileList);
|
|
132
|
+
if (tar.status !== 0)
|
|
133
|
+
throw new Error(`tar failed: ${tar.stderr}`);
|
|
134
|
+
archive = tar.stdout;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
const tar = await run("tar", [
|
|
138
|
+
"-czf",
|
|
139
|
+
"-",
|
|
140
|
+
"--exclude=./.git",
|
|
141
|
+
"--exclude=./node_modules",
|
|
142
|
+
// SECURITY: exclude machine-local secrets regardless of .gitignore state
|
|
143
|
+
"--exclude=./.claude/settings.local.json",
|
|
144
|
+
...rootGitignoreExcludes(cwd),
|
|
145
|
+
".",
|
|
146
|
+
], cwd);
|
|
147
|
+
if (tar.status !== 0)
|
|
148
|
+
throw new Error(`tar failed: ${tar.stderr}`);
|
|
149
|
+
archive = tar.stdout;
|
|
150
|
+
}
|
|
151
|
+
if (archive.byteLength > MAX_ARCHIVE_BYTES) {
|
|
152
|
+
throw new Error(`workspace archive is ${(archive.byteLength / 1024 / 1024).toFixed(1)} MiB, over the ${MAX_ARCHIVE_BYTES / 1024 / 1024} MiB cap; add large paths to .gitignore`);
|
|
153
|
+
}
|
|
154
|
+
return archive;
|
|
155
|
+
}
|
|
156
|
+
function runWithStdin(command, args, cwd, input) {
|
|
157
|
+
return new Promise((resolve) => {
|
|
158
|
+
const child = spawn(command, [...args], { cwd });
|
|
159
|
+
const stdout = [];
|
|
160
|
+
const stderr = [];
|
|
161
|
+
child.stdout.on("data", (c) => stdout.push(c));
|
|
162
|
+
child.stderr.on("data", (c) => stderr.push(c));
|
|
163
|
+
child.on("error", () => resolve({ status: 127, stdout: Buffer.concat(stdout), stderr: "spawn error" }));
|
|
164
|
+
child.on("close", (code) => resolve({
|
|
165
|
+
status: code ?? 1,
|
|
166
|
+
stdout: Buffer.concat(stdout),
|
|
167
|
+
stderr: Buffer.concat(stderr).toString("utf8"),
|
|
168
|
+
}));
|
|
169
|
+
child.stdin.write(input);
|
|
170
|
+
child.stdin.end();
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
export async function uploadWorkspaceArchive(baseUrl, sessionId, archive, fetchImpl = fetch, extraHeaders) {
|
|
174
|
+
const response = await fetchImpl(`${baseUrl.replace(/\/$/, "")}/sessions/${sessionId}/workspace`, {
|
|
175
|
+
method: "POST",
|
|
176
|
+
headers: {
|
|
177
|
+
"content-type": "application/gzip",
|
|
178
|
+
...authHeaders(),
|
|
179
|
+
...(extraHeaders ?? {}),
|
|
180
|
+
},
|
|
181
|
+
body: archive,
|
|
182
|
+
});
|
|
183
|
+
if (!response.ok) {
|
|
184
|
+
throw new Error(`workspace upload failed: ${response.status} ${response.statusText}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=workspace-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-sync.js","sourceRoot":"","sources":["../src/workspace-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export declare function baseSnapshotPath(cwd: string): string;
|
|
2
|
+
export declare function readBaseSnapshot(cwd: string): Buffer | null;
|
|
3
|
+
export declare function writeBaseSnapshot(cwd: string, archive: Buffer): void;
|
|
4
|
+
export type WorkspaceMarker = {
|
|
5
|
+
readonly remote: string;
|
|
6
|
+
readonly workspaceId: string;
|
|
7
|
+
/**
|
|
8
|
+
* Environment parity (the "feel at home" config): the absolute path the
|
|
9
|
+
* project lives at locally, reproduced as the workspace mount path inside the
|
|
10
|
+
* remote Pod, and the local HOME to reproduce. Captured at link/migrate time
|
|
11
|
+
* so every session bound to this workspace resumes with identical paths.
|
|
12
|
+
*/
|
|
13
|
+
readonly path?: string;
|
|
14
|
+
readonly home?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function markerPath(cwd: string): string;
|
|
17
|
+
export declare function readWorkspaceMarker(cwd: string): WorkspaceMarker | undefined;
|
|
18
|
+
export declare function writeWorkspaceMarker(cwd: string, marker: WorkspaceMarker): void;
|
|
19
|
+
export type LineageRecord = {
|
|
20
|
+
readonly lineageId: string;
|
|
21
|
+
readonly remoteSessionId?: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function readLineageRecord(cwd: string, workspaceId: string): LineageRecord | undefined;
|
|
24
|
+
export declare function writeLineageRecord(cwd: string, workspaceId: string, record: LineageRecord): void;
|
|
25
|
+
type WorkspaceDescriptor = {
|
|
26
|
+
id: string;
|
|
27
|
+
createdAt: string;
|
|
28
|
+
displayName?: string;
|
|
29
|
+
};
|
|
30
|
+
export declare function createWorkspace(baseUrl: string, body?: {
|
|
31
|
+
displayName?: string;
|
|
32
|
+
}, fetchImpl?: typeof fetch): Promise<WorkspaceDescriptor>;
|
|
33
|
+
export declare function listWorkspaces(baseUrl: string, fetchImpl?: typeof fetch): Promise<ReadonlyArray<WorkspaceDescriptor>>;
|
|
34
|
+
export declare function deleteWorkspace(baseUrl: string, workspaceId: string, fetchImpl?: typeof fetch): Promise<boolean>;
|
|
35
|
+
export declare function downloadWorkspaceExport(baseUrl: string, sessionId: string, fetchImpl?: typeof fetch): Promise<Buffer | null>;
|
|
36
|
+
export type LockResult = {
|
|
37
|
+
readonly acquired: true;
|
|
38
|
+
} | {
|
|
39
|
+
readonly acquired: false;
|
|
40
|
+
readonly holder: string;
|
|
41
|
+
readonly since: string;
|
|
42
|
+
};
|
|
43
|
+
export declare function acquireWorkspaceLock(baseUrl: string, workspaceId: string, holder: string, ttlSeconds?: number, fetchImpl?: typeof fetch): Promise<LockResult>;
|
|
44
|
+
export declare function releaseWorkspaceLock(baseUrl: string, workspaceId: string, fetchImpl?: typeof fetch): Promise<void>;
|
|
45
|
+
export declare function lockHolderId(): string;
|
|
46
|
+
export type WorkspaceGcCandidate = {
|
|
47
|
+
readonly id: string;
|
|
48
|
+
readonly sizeH: string;
|
|
49
|
+
readonly lastModified: string;
|
|
50
|
+
readonly archivedTo?: string;
|
|
51
|
+
};
|
|
52
|
+
export type WorkspaceGcReport = {
|
|
53
|
+
readonly candidates: ReadonlyArray<WorkspaceGcCandidate>;
|
|
54
|
+
readonly applied: boolean;
|
|
55
|
+
readonly failed?: ReadonlyArray<{
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly reason: string;
|
|
58
|
+
}>;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* POST /workspaces/gc. Without `apply` this is a PURE dry-run on the server
|
|
62
|
+
* (the janitor only lists + sizes candidates); with `apply: true` candidates
|
|
63
|
+
* are archived to the volume's own .trash/ before being removed.
|
|
64
|
+
*/
|
|
65
|
+
export declare function requestWorkspaceGc(baseUrl: string, body: {
|
|
66
|
+
olderThanDays?: number;
|
|
67
|
+
apply?: boolean;
|
|
68
|
+
}, fetchImpl?: typeof fetch): Promise<WorkspaceGcReport>;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|