@hasna/snapshots 0.1.0 → 0.1.2
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 +15 -6
- package/dist/agent/index.js +0 -0
- package/dist/capture/index.d.ts.map +1 -1
- package/dist/capture/index.js +254 -22
- package/dist/capture/index.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +55 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/mcp/index.js +15 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +9 -1
- package/dist/policy.js.map +1 -1
- package/dist/restore.d.ts +1 -0
- package/dist/restore.d.ts.map +1 -1
- package/dist/restore.js +637 -24
- package/dist/restore.js.map +1 -1
- package/dist/runtime.d.ts +12 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +60 -2
- package/dist/runtime.js.map +1 -1
- package/dist/server/index.js +9 -1
- package/dist/server/index.js.map +1 -1
- package/dist/service.d.ts +1 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +107 -3
- package/dist/service.js.map +1 -1
- package/dist/storage.d.ts +3 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +61 -3
- package/dist/storage.js.map +1 -1
- package/dist/types.d.ts +59 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/util.d.ts +3 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +15 -0
- package/dist/util.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -22,10 +22,12 @@ Restore is dry-run by default.
|
|
|
22
22
|
The built-in restore allowlist is intentionally narrow:
|
|
23
23
|
|
|
24
24
|
- `project` resources can plan creation of missing project directories.
|
|
25
|
-
- `tmux-session` resources can plan detached tmux
|
|
25
|
+
- `tmux-session`, `tmux-window`, and `tmux-pane` resources can plan detached tmux layout recreation.
|
|
26
26
|
- other resource kinds are observed and skipped unless future adapters explicitly support them.
|
|
27
27
|
|
|
28
|
-
Execution requires both `--apply` and `--yes`. Restore never kills existing sessions or overwrites existing service files. Existing project directories and tmux sessions become `noop` operations.
|
|
28
|
+
Execution requires both `--apply` and `--yes`. Restore never kills existing sessions or overwrites existing service files. Existing project directories and tmux sessions become `noop` operations, and child tmux resources are blocked by default when the target session already exists. Use `--merge-existing` only when you explicitly want to mutate a live tmux session.
|
|
29
|
+
|
|
30
|
+
tmux restore is best effort. The default mode is `layout-only`: it recreates sessions, windows, panes, working directories, layouts, and active selection where safe, but it does not replay captured commands. Use `--tmux-mode resume-marked` to replay only commands that were explicitly marked restartable.
|
|
29
31
|
|
|
30
32
|
## Install
|
|
31
33
|
|
|
@@ -48,18 +50,25 @@ snapshots capture --name before-upgrade
|
|
|
48
50
|
snapshots list
|
|
49
51
|
snapshots show <snapshot-id>
|
|
50
52
|
snapshots resources --limit 50
|
|
51
|
-
snapshots
|
|
52
|
-
snapshots
|
|
53
|
+
snapshots resources <snapshot-id> --tree
|
|
54
|
+
snapshots plan <snapshot-id> --resource kind:tmux-session --with-dependencies
|
|
55
|
+
snapshots restore <snapshot-id> --resource tmux-session:work --with-dependencies --apply --yes
|
|
56
|
+
snapshots restore --plan <plan-id> --plan-hash <hash> --apply --yes
|
|
53
57
|
snapshots policy list
|
|
54
58
|
snapshots policy set kind:process ignore --reason "processes are observe-only"
|
|
55
|
-
snapshots daemon once
|
|
56
|
-
snapshots daemon run --interval 300
|
|
59
|
+
snapshots daemon once --tmux-tail-lines 0
|
|
60
|
+
snapshots daemon run --interval 300 --tmux-tail-lines 20
|
|
57
61
|
snapshots service plan
|
|
58
62
|
snapshots service install --apply --yes
|
|
63
|
+
snapshots service status
|
|
59
64
|
```
|
|
60
65
|
|
|
61
66
|
All commands emit JSON so agents can consume stable contracts.
|
|
62
67
|
|
|
68
|
+
Snapshot summaries include per-source status, duration, resource count, diagnostic count, and a `degraded` flag when a source returns warnings or errors. Daemon captures can use `--tmux-tail-lines 0` to skip pane scrollback tails for faster topology snapshots.
|
|
69
|
+
|
|
70
|
+
Restore plans include an `autopilot` assessment. By default, only low-risk project directory creation can be marked safe for autopilot. tmux mutations require approval, and shell command replay is forbidden for autopilot.
|
|
71
|
+
|
|
63
72
|
## MCP
|
|
64
73
|
|
|
65
74
|
`snapshots-mcp` provides a minimal stdio JSON-RPC bridge with these tools:
|
package/dist/agent/index.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqB,cAAc,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqB,cAAc,EAAE,aAAa,EAAgE,MAAM,aAAa,CAAC;AAGlJ,wBAAsB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CA6BrF"}
|
package/dist/capture/index.js
CHANGED
|
@@ -1,29 +1,36 @@
|
|
|
1
|
-
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
3
3
|
import { hostname, platform, release, userInfo } from "node:os";
|
|
4
|
-
import { commandExists, defaultDataDir, nowIso, redactJson, redactText, runCommand, runJsonCommand, sha256, slugPart } from "../util.js";
|
|
4
|
+
import { commandExists, defaultDataDir, nowIso, redactJson, redactText, runCommand, runJsonCommand, runTmux, sha256, slugPart } from "../util.js";
|
|
5
5
|
export async function captureAll(options = {}) {
|
|
6
|
-
const include = new Set(options.include ?? ["machine", "tmux", "projects", "processes", "sessions", "browser", "desktop"]);
|
|
6
|
+
const include = new Set(options.include ?? ["machine", "tmux", "projects", "processes", "sessions", "browser", "desktop", "apps"]);
|
|
7
7
|
const now = options.now ?? nowIso();
|
|
8
|
-
const result = { resources: [], diagnostics: [] };
|
|
9
|
-
const append = (capture) => {
|
|
8
|
+
const result = { resources: [], diagnostics: [], sourceStatuses: [] };
|
|
9
|
+
const append = (source, capture, durationMs) => {
|
|
10
10
|
result.resources.push(...capture.resources);
|
|
11
11
|
result.diagnostics.push(...capture.diagnostics);
|
|
12
|
+
result.sourceStatuses?.push(sourceStatus(source, capture, durationMs));
|
|
13
|
+
};
|
|
14
|
+
const captureSource = (source, fn) => {
|
|
15
|
+
const started = performance.now();
|
|
16
|
+
append(source, fn(), Math.round(performance.now() - started));
|
|
12
17
|
};
|
|
13
18
|
if (include.has("machine"))
|
|
14
|
-
|
|
19
|
+
captureSource("machine", () => captureMachine(now, options.cwd));
|
|
15
20
|
if (include.has("tmux"))
|
|
16
|
-
|
|
21
|
+
captureSource("tmux", () => captureTmux(now, options));
|
|
17
22
|
if (include.has("projects"))
|
|
18
|
-
|
|
23
|
+
captureSource("projects", () => captureProjects(now));
|
|
19
24
|
if (include.has("processes"))
|
|
20
|
-
|
|
25
|
+
captureSource("processes", () => captureProcesses(now));
|
|
21
26
|
if (include.has("sessions"))
|
|
22
|
-
|
|
27
|
+
captureSource("sessions", () => captureSessions(now));
|
|
23
28
|
if (include.has("browser"))
|
|
24
|
-
|
|
29
|
+
captureSource("browser", () => captureBrowser(now));
|
|
25
30
|
if (include.has("desktop"))
|
|
26
|
-
|
|
31
|
+
captureSource("desktop", () => captureDesktop(now));
|
|
32
|
+
if (include.has("apps"))
|
|
33
|
+
captureSource("apps", () => captureApps(now));
|
|
27
34
|
for (const diagnostic of result.diagnostics) {
|
|
28
35
|
result.resources.push(diagnosticResource(diagnostic, now));
|
|
29
36
|
}
|
|
@@ -51,11 +58,11 @@ function captureMachine(now, cwd = process.cwd()) {
|
|
|
51
58
|
diagnostics: []
|
|
52
59
|
};
|
|
53
60
|
}
|
|
54
|
-
function captureTmux(now) {
|
|
61
|
+
function captureTmux(now, options = {}) {
|
|
55
62
|
if (!commandExists("tmux")) {
|
|
56
63
|
return diagnostic("tmux", "info", "tmux command not found; tmux resources were not captured.");
|
|
57
64
|
}
|
|
58
|
-
const sessions =
|
|
65
|
+
const sessions = runTmux(["list-sessions", "-F", "#{session_id}\t#{session_name}\t#{session_created}\t#{session_windows}\t#{session_attached}"]);
|
|
59
66
|
if (!sessions.ok) {
|
|
60
67
|
return diagnostic("tmux", "info", "tmux server is not running or cannot be queried.", sessions.stderr.trim());
|
|
61
68
|
}
|
|
@@ -78,28 +85,76 @@ function captureTmux(now) {
|
|
|
78
85
|
observedAt: now
|
|
79
86
|
});
|
|
80
87
|
}
|
|
81
|
-
const
|
|
88
|
+
const windows = runTmux([
|
|
89
|
+
"list-windows",
|
|
90
|
+
"-a",
|
|
91
|
+
"-F",
|
|
92
|
+
"#{session_name}\t#{window_index}\t#{window_name}\t#{window_active}\t#{window_layout}\t#{window_panes}"
|
|
93
|
+
]);
|
|
94
|
+
if (windows.ok) {
|
|
95
|
+
for (const line of windows.stdout.trim().split("\n").filter(Boolean)) {
|
|
96
|
+
const [sessionName, windowIndex, windowName, windowActive, windowLayout, windowPanes] = line.split("\t");
|
|
97
|
+
resources.push({
|
|
98
|
+
id: `tmux-window:${slugPart(sessionName)}:${windowIndex}`,
|
|
99
|
+
kind: "tmux-window",
|
|
100
|
+
name: `${sessionName}:${windowIndex}:${windowName}`,
|
|
101
|
+
source: "tmux",
|
|
102
|
+
parentId: `tmux-session:${slugPart(sessionName)}`,
|
|
103
|
+
attributes: {
|
|
104
|
+
session: sessionName,
|
|
105
|
+
index: Number(windowIndex),
|
|
106
|
+
name: windowName,
|
|
107
|
+
active: windowActive === "1",
|
|
108
|
+
layout: windowLayout,
|
|
109
|
+
pane_count: Number(windowPanes)
|
|
110
|
+
},
|
|
111
|
+
observedAt: now
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const panes = runTmux([
|
|
82
116
|
"list-panes",
|
|
83
117
|
"-a",
|
|
84
118
|
"-F",
|
|
85
|
-
"#{session_name}\t#{window_index}\t#{window_name}\t#{pane_id}\t#{pane_current_path}\t#{pane_current_command}\t#{pane_active}"
|
|
119
|
+
"#{session_name}\t#{window_index}\t#{window_name}\t#{pane_index}\t#{pane_id}\t#{pane_current_path}\t#{pane_current_command}\t#{pane_active}\t#{pane_start_command}"
|
|
86
120
|
]);
|
|
87
121
|
if (panes.ok) {
|
|
88
122
|
for (const line of panes.stdout.trim().split("\n").filter(Boolean)) {
|
|
89
|
-
const [sessionName, windowIndex, windowName, paneId, panePath, paneCommand, paneActive] = line.split("\t");
|
|
123
|
+
const [sessionName, windowIndex, windowName, paneIndex, paneId, panePath, paneCommand, paneActive, paneStartCommand = ""] = line.split("\t");
|
|
90
124
|
const sessionResourceId = `tmux-session:${slugPart(sessionName)}`;
|
|
91
125
|
const windowResourceId = `tmux-window:${slugPart(sessionName)}:${windowIndex}`;
|
|
92
|
-
|
|
126
|
+
const startCommand = redactText(paneStartCommand);
|
|
127
|
+
const windowResource = resources.find((resource) => resource.id === windowResourceId);
|
|
128
|
+
if (windowResource) {
|
|
129
|
+
if (paneActive === "1" || typeof windowResource.attributes.current_path !== "string") {
|
|
130
|
+
windowResource.attributes.current_path = panePath;
|
|
131
|
+
windowResource.attributes.start_command = startCommand;
|
|
132
|
+
windowResource.attributes.restartable = isRestartableCommand(startCommand);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
93
136
|
resources.push({
|
|
94
137
|
id: windowResourceId,
|
|
95
138
|
kind: "tmux-window",
|
|
96
139
|
name: `${sessionName}:${windowIndex}:${windowName}`,
|
|
97
140
|
source: "tmux",
|
|
98
141
|
parentId: sessionResourceId,
|
|
99
|
-
attributes: {
|
|
142
|
+
attributes: {
|
|
143
|
+
session: sessionName,
|
|
144
|
+
index: Number(windowIndex),
|
|
145
|
+
name: windowName,
|
|
146
|
+
current_path: panePath,
|
|
147
|
+
start_command: startCommand,
|
|
148
|
+
restartable: isRestartableCommand(startCommand),
|
|
149
|
+
active: false,
|
|
150
|
+
layout: null,
|
|
151
|
+
pane_count: null
|
|
152
|
+
},
|
|
100
153
|
observedAt: now
|
|
101
154
|
});
|
|
102
155
|
}
|
|
156
|
+
const paneTailLines = tmuxPaneTailLines(options);
|
|
157
|
+
const paneTail = paneTailLines > 0 ? runTmux(["capture-pane", "-p", "-t", paneId, "-S", `-${paneTailLines}`], 2_000) : undefined;
|
|
103
158
|
resources.push({
|
|
104
159
|
id: `tmux-pane:${slugPart(sessionName)}:${paneId.replace("%", "")}`,
|
|
105
160
|
kind: "tmux-pane",
|
|
@@ -109,8 +164,13 @@ function captureTmux(now) {
|
|
|
109
164
|
attributes: {
|
|
110
165
|
session: sessionName,
|
|
111
166
|
window_index: Number(windowIndex),
|
|
167
|
+
pane_index: Number(paneIndex),
|
|
112
168
|
current_path: panePath,
|
|
113
169
|
current_command: paneCommand,
|
|
170
|
+
start_command: redactText(paneStartCommand),
|
|
171
|
+
restartable: isRestartableCommand(startCommand),
|
|
172
|
+
content_tail: paneTail?.ok ? redactText(paneTail.stdout).slice(-16_000) : "",
|
|
173
|
+
content_tail_skipped: paneTailLines === 0,
|
|
114
174
|
active: paneActive === "1"
|
|
115
175
|
},
|
|
116
176
|
observedAt: now
|
|
@@ -147,11 +207,18 @@ function captureProcesses(now) {
|
|
|
147
207
|
if (!ps.ok)
|
|
148
208
|
return diagnostic("processes", "warning", "ps command failed.", ps.stderr.trim());
|
|
149
209
|
const resources = [];
|
|
150
|
-
|
|
210
|
+
let observedProcessCount = 0;
|
|
211
|
+
for (const line of ps.stdout.split("\n").map((entry) => entry.trim()).filter(Boolean)) {
|
|
151
212
|
const match = line.match(/^(\d+)\s+(\d+)\s+(\S+)\s*(.*)$/);
|
|
152
213
|
if (!match)
|
|
153
214
|
continue;
|
|
154
215
|
const [, pid, ppid, command, args] = match;
|
|
216
|
+
const argsText = redactText(args ?? "");
|
|
217
|
+
const restartInfo = parseRestartableCommand(args ?? "");
|
|
218
|
+
const hasSnapshotMarker = (args ?? "").includes("HASNA_SNAPSHOTS_");
|
|
219
|
+
if (!restartInfo && !hasSnapshotMarker && observedProcessCount >= 250)
|
|
220
|
+
continue;
|
|
221
|
+
observedProcessCount += 1;
|
|
155
222
|
resources.push({
|
|
156
223
|
id: `process:${pid}`,
|
|
157
224
|
kind: "process",
|
|
@@ -161,7 +228,10 @@ function captureProcesses(now) {
|
|
|
161
228
|
pid: Number(pid),
|
|
162
229
|
ppid: Number(ppid),
|
|
163
230
|
command,
|
|
164
|
-
args:
|
|
231
|
+
args: argsText,
|
|
232
|
+
restartable: Boolean(restartInfo),
|
|
233
|
+
process_id: restartInfo?.id ?? null,
|
|
234
|
+
restart_command: restartInfo?.command ?? null
|
|
165
235
|
},
|
|
166
236
|
observedAt: now
|
|
167
237
|
});
|
|
@@ -231,9 +301,124 @@ function captureDesktop(now) {
|
|
|
231
301
|
}));
|
|
232
302
|
return { resources, diagnostics: [] };
|
|
233
303
|
}
|
|
304
|
+
function captureApps(now) {
|
|
305
|
+
if (platform() === "darwin")
|
|
306
|
+
return captureMacApps(now);
|
|
307
|
+
if (platform() === "linux")
|
|
308
|
+
return captureLinuxApps(now);
|
|
309
|
+
return diagnostic("apps", "info", `Native app capture is not implemented for ${platform()}.`);
|
|
310
|
+
}
|
|
311
|
+
function captureMacApps(now) {
|
|
312
|
+
const script = 'tell application "System Events" to get name of every application process whose background only is false';
|
|
313
|
+
const result = runCommand("osascript", ["-e", script], 5_000);
|
|
314
|
+
if (!result.ok) {
|
|
315
|
+
const fallback = captureMacAppsFromProcesses(now);
|
|
316
|
+
if (fallback.resources.length) {
|
|
317
|
+
return {
|
|
318
|
+
resources: fallback.resources,
|
|
319
|
+
diagnostics: [{
|
|
320
|
+
source: "apps",
|
|
321
|
+
level: "warning",
|
|
322
|
+
message: "System Events unavailable; captured macOS apps from process paths.",
|
|
323
|
+
detail: result.stderr.trim()
|
|
324
|
+
}]
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
return diagnostic("apps", "warning", "Unable to query macOS application processes.", result.stderr.trim());
|
|
328
|
+
}
|
|
329
|
+
const names = result.stdout.split(",").map((name) => name.trim()).filter(Boolean);
|
|
330
|
+
const resources = names.map((name) => ({
|
|
331
|
+
id: `app:${slugPart(name)}`,
|
|
332
|
+
kind: "app",
|
|
333
|
+
name,
|
|
334
|
+
source: "macos-apps",
|
|
335
|
+
attributes: {
|
|
336
|
+
name,
|
|
337
|
+
platform: "darwin",
|
|
338
|
+
restore_supported: true,
|
|
339
|
+
restore_command: ["open", "-a", name]
|
|
340
|
+
},
|
|
341
|
+
observedAt: now
|
|
342
|
+
}));
|
|
343
|
+
return { resources, diagnostics: [] };
|
|
344
|
+
}
|
|
345
|
+
function captureMacAppsFromProcesses(now) {
|
|
346
|
+
const ps = runCommand("ps", ["-axo", "pid=,args="], 5_000);
|
|
347
|
+
if (!ps.ok)
|
|
348
|
+
return { resources: [], diagnostics: [] };
|
|
349
|
+
const seen = new Set();
|
|
350
|
+
const resources = [];
|
|
351
|
+
for (const line of ps.stdout.split("\n").map((entry) => entry.trim()).filter(Boolean)) {
|
|
352
|
+
const match = line.match(/(\/(?:Applications|System\/Applications|System\/Library|Library\/Apple\/System\/Library)[^\n]*?\.app)\/Contents\/MacOS\//);
|
|
353
|
+
if (!match)
|
|
354
|
+
continue;
|
|
355
|
+
const appPath = match[1];
|
|
356
|
+
if (seen.has(appPath))
|
|
357
|
+
continue;
|
|
358
|
+
seen.add(appPath);
|
|
359
|
+
const name = basename(appPath, ".app");
|
|
360
|
+
resources.push({
|
|
361
|
+
id: `app:${slugPart(name)}`,
|
|
362
|
+
kind: "app",
|
|
363
|
+
name,
|
|
364
|
+
source: "macos-processes",
|
|
365
|
+
attributes: {
|
|
366
|
+
name,
|
|
367
|
+
app_path: appPath,
|
|
368
|
+
platform: "darwin",
|
|
369
|
+
restore_supported: true,
|
|
370
|
+
restore_command: ["open", "-a", name]
|
|
371
|
+
},
|
|
372
|
+
observedAt: now
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
return { resources, diagnostics: [] };
|
|
376
|
+
}
|
|
377
|
+
function captureLinuxApps(now) {
|
|
378
|
+
if (!commandExists("wmctrl")) {
|
|
379
|
+
return diagnostic("apps", "info", "Linux app capture requires wmctrl; no visible app resources captured.");
|
|
380
|
+
}
|
|
381
|
+
const result = runCommand("wmctrl", ["-lx"], 5_000);
|
|
382
|
+
if (!result.ok)
|
|
383
|
+
return diagnostic("apps", "warning", "Unable to query Linux desktop windows with wmctrl.", result.stderr.trim());
|
|
384
|
+
const seen = new Set();
|
|
385
|
+
const resources = [];
|
|
386
|
+
for (const line of result.stdout.split("\n").map((entry) => entry.trim()).filter(Boolean)) {
|
|
387
|
+
const parts = line.split(/\s+/);
|
|
388
|
+
const windowClass = parts[2];
|
|
389
|
+
if (!windowClass || seen.has(windowClass))
|
|
390
|
+
continue;
|
|
391
|
+
seen.add(windowClass);
|
|
392
|
+
const name = windowClass.split(".").at(-1) ?? windowClass;
|
|
393
|
+
resources.push({
|
|
394
|
+
id: `app:${slugPart(windowClass)}`,
|
|
395
|
+
kind: "app",
|
|
396
|
+
name,
|
|
397
|
+
source: "linux-wmctrl",
|
|
398
|
+
attributes: {
|
|
399
|
+
name,
|
|
400
|
+
window_class: windowClass,
|
|
401
|
+
platform: "linux",
|
|
402
|
+
restore_supported: false,
|
|
403
|
+
restore_command: null
|
|
404
|
+
},
|
|
405
|
+
observedAt: now
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
return { resources, diagnostics: [] };
|
|
409
|
+
}
|
|
234
410
|
function diagnostic(source, level, message, detail) {
|
|
235
411
|
return { resources: [], diagnostics: [{ source, level, message, detail }] };
|
|
236
412
|
}
|
|
413
|
+
function sourceStatus(source, capture, durationMs) {
|
|
414
|
+
return {
|
|
415
|
+
source,
|
|
416
|
+
ok: !capture.diagnostics.some((diagnostic) => diagnostic.level === "error" || diagnostic.level === "warning"),
|
|
417
|
+
durationMs,
|
|
418
|
+
resourceCount: capture.resources.length,
|
|
419
|
+
diagnosticCount: capture.diagnostics.length
|
|
420
|
+
};
|
|
421
|
+
}
|
|
237
422
|
function diagnosticResource(diagnostic, now) {
|
|
238
423
|
return {
|
|
239
424
|
id: `diagnostic:${slugPart(`${diagnostic.source}:${diagnostic.message}`)}`,
|
|
@@ -264,4 +449,51 @@ function safeStat(path) {
|
|
|
264
449
|
return undefined;
|
|
265
450
|
}
|
|
266
451
|
}
|
|
452
|
+
function isRestartableCommand(command) {
|
|
453
|
+
if (command.includes("HASNA_SNAPSHOTS_RESTARTABLE=1"))
|
|
454
|
+
return true;
|
|
455
|
+
return /\b(codex|claude|codewith|coders)\b/.test(command) && /\b(--resume|resume)\b/.test(command);
|
|
456
|
+
}
|
|
457
|
+
function tmuxPaneTailLines(options) {
|
|
458
|
+
if (typeof options.tmuxPaneTailLines === "number" && Number.isFinite(options.tmuxPaneTailLines)) {
|
|
459
|
+
return Math.max(0, Math.floor(options.tmuxPaneTailLines));
|
|
460
|
+
}
|
|
461
|
+
const envValue = Number(process.env.HASNA_SNAPSHOTS_TMUX_TAIL_LINES);
|
|
462
|
+
if (Number.isFinite(envValue))
|
|
463
|
+
return Math.max(0, Math.floor(envValue));
|
|
464
|
+
return 100;
|
|
465
|
+
}
|
|
466
|
+
function parseRestartableCommand(args) {
|
|
467
|
+
if (!args.includes("HASNA_SNAPSHOTS_RESTARTABLE=1"))
|
|
468
|
+
return undefined;
|
|
469
|
+
const idMatch = args.match(/HASNA_SNAPSHOTS_PROCESS_ID=([A-Za-z0-9_.:-]+)/);
|
|
470
|
+
const commandB64Match = args.match(/HASNA_SNAPSHOTS_RESTART_COMMAND_B64=([A-Za-z0-9+/=_-]+)/);
|
|
471
|
+
const commandFileMatch = args.match(/HASNA_SNAPSHOTS_RESTART_COMMAND_FILE=([^\s;]+)/);
|
|
472
|
+
return {
|
|
473
|
+
id: idMatch?.[1] ?? sha256(args).slice(0, 12),
|
|
474
|
+
command: commandB64Match
|
|
475
|
+
? redactText(decodeRestartCommand(commandB64Match[1]))
|
|
476
|
+
: commandFileMatch
|
|
477
|
+
? readRestartCommandFile(commandFileMatch[1])
|
|
478
|
+
: undefined
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
function decodeRestartCommand(encoded) {
|
|
482
|
+
try {
|
|
483
|
+
const normalized = encoded.replaceAll("-", "+").replaceAll("_", "/");
|
|
484
|
+
return Buffer.from(normalized, "base64").toString("utf8");
|
|
485
|
+
}
|
|
486
|
+
catch {
|
|
487
|
+
return encoded;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
function readRestartCommandFile(path) {
|
|
491
|
+
try {
|
|
492
|
+
const content = readFileSync(path, "utf8");
|
|
493
|
+
return redactText(content.trim()).slice(0, 16_000);
|
|
494
|
+
}
|
|
495
|
+
catch {
|
|
496
|
+
return undefined;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
267
499
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAqBA,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsItE"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import { captureSnapshot, getSnapshotEnvelope, listPolicies, listResources, listSnapshots, planSnapshotRestore, upsertPolicy } from "../runtime.js";
|
|
2
|
+
import { applySavedRestorePlan, captureSnapshot, getSnapshotEnvelope, listPolicies, listResources, listSnapshotResources, listSnapshots, planSnapshotRestore, upsertPolicy } from "../runtime.js";
|
|
3
3
|
import { normalizePolicyMode } from "../policy.js";
|
|
4
|
-
import { applyServicePlan, planService } from "../service.js";
|
|
4
|
+
import { applyServicePlan, planService, serviceStatus } from "../service.js";
|
|
5
5
|
import { defaultDbPath } from "../util.js";
|
|
6
6
|
export async function main(argv = process.argv.slice(2)) {
|
|
7
7
|
const parsed = parseArgs(argv);
|
|
@@ -14,7 +14,8 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
14
14
|
const result = await captureSnapshot({
|
|
15
15
|
dbPath,
|
|
16
16
|
name: stringFlag(parsed, "name"),
|
|
17
|
-
include
|
|
17
|
+
include,
|
|
18
|
+
tmuxPaneTailLines: numberFlag(parsed, "tmux-tail-lines")
|
|
18
19
|
});
|
|
19
20
|
print(result);
|
|
20
21
|
return;
|
|
@@ -30,19 +31,35 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
32
33
|
case "resources": {
|
|
34
|
+
if (rest[0]) {
|
|
35
|
+
print(listSnapshotResources({ dbPath, id: rest[0], tree: Boolean(parsed.flags.tree) }));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
33
38
|
print(listResources({ dbPath, limit: numberFlag(parsed, "limit") ?? 200 }));
|
|
34
39
|
return;
|
|
35
40
|
}
|
|
36
41
|
case "plan": {
|
|
37
42
|
const id = required(rest[0], "snapshot id");
|
|
38
|
-
print(planSnapshotRestore({ dbPath, id }));
|
|
43
|
+
print(planSnapshotRestore({ dbPath, id, ...restoreRequestFromFlags(parsed) }));
|
|
39
44
|
return;
|
|
40
45
|
}
|
|
41
46
|
case "restore": {
|
|
47
|
+
const planId = stringFlag(parsed, "plan");
|
|
48
|
+
if (planId) {
|
|
49
|
+
print(applySavedRestorePlan({
|
|
50
|
+
dbPath,
|
|
51
|
+
planId,
|
|
52
|
+
planHash: stringFlag(parsed, "plan-hash"),
|
|
53
|
+
apply: Boolean(parsed.flags.apply),
|
|
54
|
+
yes: Boolean(parsed.flags.yes)
|
|
55
|
+
}));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
42
58
|
const id = required(rest[0], "snapshot id");
|
|
43
59
|
print(planSnapshotRestore({
|
|
44
60
|
dbPath,
|
|
45
61
|
id,
|
|
62
|
+
...restoreRequestFromFlags(parsed),
|
|
46
63
|
apply: Boolean(parsed.flags.apply),
|
|
47
64
|
yes: Boolean(parsed.flags.yes)
|
|
48
65
|
}));
|
|
@@ -66,11 +83,15 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
66
83
|
case "daemon": {
|
|
67
84
|
const subcommand = rest[0] ?? "once";
|
|
68
85
|
if (subcommand === "once") {
|
|
69
|
-
print(await captureSnapshot({
|
|
86
|
+
print(await captureSnapshot({
|
|
87
|
+
dbPath,
|
|
88
|
+
name: stringFlag(parsed, "name") ?? "daemon-once",
|
|
89
|
+
tmuxPaneTailLines: numberFlag(parsed, "tmux-tail-lines")
|
|
90
|
+
}));
|
|
70
91
|
return;
|
|
71
92
|
}
|
|
72
93
|
if (subcommand === "run") {
|
|
73
|
-
await runDaemon(dbPath, numberFlag(parsed, "interval") ?? 300, numberFlag(parsed, "max-runs"));
|
|
94
|
+
await runDaemon(dbPath, numberFlag(parsed, "interval") ?? 300, numberFlag(parsed, "max-runs"), numberFlag(parsed, "tmux-tail-lines"));
|
|
74
95
|
return;
|
|
75
96
|
}
|
|
76
97
|
throw new Error(`Unknown daemon command: ${subcommand}`);
|
|
@@ -89,6 +110,10 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
89
110
|
print(applyServicePlan(servicePlan, Boolean(parsed.flags.apply) && Boolean(parsed.flags.yes)));
|
|
90
111
|
return;
|
|
91
112
|
}
|
|
113
|
+
if (subcommand === "status") {
|
|
114
|
+
print(serviceStatus(servicePlan));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
92
117
|
throw new Error(`Unknown service command: ${subcommand}`);
|
|
93
118
|
}
|
|
94
119
|
case "doctor": {
|
|
@@ -114,10 +139,10 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
114
139
|
});
|
|
115
140
|
}
|
|
116
141
|
}
|
|
117
|
-
async function runDaemon(dbPath, intervalSeconds, maxRuns) {
|
|
142
|
+
async function runDaemon(dbPath, intervalSeconds, maxRuns, tmuxPaneTailLines) {
|
|
118
143
|
let runs = 0;
|
|
119
144
|
while (!maxRuns || runs < maxRuns) {
|
|
120
|
-
const result = await captureSnapshot({ dbPath, name: `daemon-${new Date().toISOString()}
|
|
145
|
+
const result = await captureSnapshot({ dbPath, name: `daemon-${new Date().toISOString()}`, tmuxPaneTailLines });
|
|
121
146
|
print({ event: "snapshot", ...result });
|
|
122
147
|
runs += 1;
|
|
123
148
|
if (maxRuns && runs >= maxRuns)
|
|
@@ -162,6 +187,21 @@ function numberFlag(parsed, name) {
|
|
|
162
187
|
throw new Error(`Invalid number for --${name}: ${value}`);
|
|
163
188
|
return parsedValue;
|
|
164
189
|
}
|
|
190
|
+
function listFlag(parsed, name) {
|
|
191
|
+
const value = stringFlag(parsed, name);
|
|
192
|
+
if (!value)
|
|
193
|
+
return undefined;
|
|
194
|
+
return value.split(",").map((part) => part.trim()).filter(Boolean);
|
|
195
|
+
}
|
|
196
|
+
function restoreRequestFromFlags(parsed) {
|
|
197
|
+
return {
|
|
198
|
+
include: listFlag(parsed, "resource") ?? listFlag(parsed, "include"),
|
|
199
|
+
exclude: listFlag(parsed, "exclude"),
|
|
200
|
+
dependencyMode: Boolean(parsed.flags["with-dependencies"]) ? "full" : "none",
|
|
201
|
+
targetMode: Boolean(parsed.flags["merge-existing"]) ? "merge-existing" : "strict",
|
|
202
|
+
tmuxMode: stringFlag(parsed, "tmux-mode") === "resume-marked" ? "resume-marked" : "layout-only"
|
|
203
|
+
};
|
|
204
|
+
}
|
|
165
205
|
function required(value, label) {
|
|
166
206
|
if (!value)
|
|
167
207
|
throw new Error(`Missing ${label}.`);
|
|
@@ -175,16 +215,18 @@ function printHelp(unknown) {
|
|
|
175
215
|
ok: !unknown,
|
|
176
216
|
error: unknown ? `Unknown command: ${unknown}` : undefined,
|
|
177
217
|
usage: [
|
|
178
|
-
"snapshots capture [--name name] [--include machine,tmux,projects,processes,sessions,browser,desktop]",
|
|
218
|
+
"snapshots capture [--name name] [--include machine,tmux,projects,processes,sessions,browser,desktop,apps] [--tmux-tail-lines n]",
|
|
179
219
|
"snapshots list [--limit n]",
|
|
180
220
|
"snapshots show <snapshot-id>",
|
|
181
221
|
"snapshots resources [--limit n]",
|
|
182
|
-
"snapshots
|
|
183
|
-
"snapshots
|
|
222
|
+
"snapshots resources <snapshot-id> [--tree]",
|
|
223
|
+
"snapshots plan <snapshot-id> [--resource selector[,selector]] [--exclude selector[,selector]] [--with-dependencies] [--merge-existing]",
|
|
224
|
+
"snapshots restore <snapshot-id> [--apply --yes] [--resource selector[,selector]] [--exclude selector[,selector]] [--with-dependencies] [--merge-existing]",
|
|
225
|
+
"snapshots restore --plan <plan-id> --plan-hash hash [--apply --yes]",
|
|
184
226
|
"snapshots policy list",
|
|
185
227
|
"snapshots policy set <selector> <observe|restore|ignore> [--reason text]",
|
|
186
|
-
"snapshots daemon once|run [--interval seconds] [--max-runs n]",
|
|
187
|
-
"snapshots service plan|install [--apply --yes]",
|
|
228
|
+
"snapshots daemon once|run [--interval seconds] [--max-runs n] [--tmux-tail-lines n]",
|
|
229
|
+
"snapshots service plan|install|status [--apply --yes]",
|
|
188
230
|
"snapshots doctor"
|
|
189
231
|
]
|
|
190
232
|
});
|