@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 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 session creation.
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 plan <snapshot-id>
52
- snapshots restore <snapshot-id> --apply --yes
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:
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,EAA2C,MAAM,aAAa,CAAC;AAG7H,wBAAsB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAuBrF"}
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"}
@@ -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
- append(captureMachine(now, options.cwd));
19
+ captureSource("machine", () => captureMachine(now, options.cwd));
15
20
  if (include.has("tmux"))
16
- append(captureTmux(now));
21
+ captureSource("tmux", () => captureTmux(now, options));
17
22
  if (include.has("projects"))
18
- append(captureProjects(now));
23
+ captureSource("projects", () => captureProjects(now));
19
24
  if (include.has("processes"))
20
- append(captureProcesses(now));
25
+ captureSource("processes", () => captureProcesses(now));
21
26
  if (include.has("sessions"))
22
- append(captureSessions(now));
27
+ captureSource("sessions", () => captureSessions(now));
23
28
  if (include.has("browser"))
24
- append(captureBrowser(now));
29
+ captureSource("browser", () => captureBrowser(now));
25
30
  if (include.has("desktop"))
26
- append(captureDesktop(now));
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 = runCommand("tmux", ["list-sessions", "-F", "#{session_id}\t#{session_name}\t#{session_created}\t#{session_windows}\t#{session_attached}"]);
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 panes = runCommand("tmux", [
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
- if (!resources.some((resource) => resource.id === windowResourceId)) {
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: { session: sessionName, index: Number(windowIndex), name: windowName },
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
- for (const line of ps.stdout.split("\n").map((entry) => entry.trim()).filter(Boolean).slice(0, 250)) {
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: redactText(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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAWA,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GtE"}
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({ dbPath, name: stringFlag(parsed, "name") ?? "daemon-once" }));
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 plan <snapshot-id>",
183
- "snapshots restore <snapshot-id> [--apply --yes]",
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
  });