@rewind-ai/cli 0.6.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.
Files changed (244) hide show
  1. package/.env.example +8 -0
  2. package/LICENSE +21 -0
  3. package/README.md +39 -0
  4. package/dist/src/action/capture.d.ts +15 -0
  5. package/dist/src/action/capture.js +215 -0
  6. package/dist/src/action/capture.js.map +1 -0
  7. package/dist/src/action/mediate.d.ts +28 -0
  8. package/dist/src/action/mediate.js +109 -0
  9. package/dist/src/action/mediate.js.map +1 -0
  10. package/dist/src/action/mutate.d.ts +11 -0
  11. package/dist/src/action/mutate.js +189 -0
  12. package/dist/src/action/mutate.js.map +1 -0
  13. package/dist/src/action/objects.d.ts +5 -0
  14. package/dist/src/action/objects.js +50 -0
  15. package/dist/src/action/objects.js.map +1 -0
  16. package/dist/src/action/store.d.ts +24 -0
  17. package/dist/src/action/store.js +149 -0
  18. package/dist/src/action/store.js.map +1 -0
  19. package/dist/src/action/types.d.ts +84 -0
  20. package/dist/src/action/types.js +3 -0
  21. package/dist/src/action/types.js.map +1 -0
  22. package/dist/src/action/undo.d.ts +11 -0
  23. package/dist/src/action/undo.js +42 -0
  24. package/dist/src/action/undo.js.map +1 -0
  25. package/dist/src/adapters/filesystem.d.ts +35 -0
  26. package/dist/src/adapters/filesystem.js +499 -0
  27. package/dist/src/adapters/filesystem.js.map +1 -0
  28. package/dist/src/adapters/index.d.ts +7 -0
  29. package/dist/src/adapters/index.js +19 -0
  30. package/dist/src/adapters/index.js.map +1 -0
  31. package/dist/src/adapters/types.d.ts +54 -0
  32. package/dist/src/adapters/types.js +7 -0
  33. package/dist/src/adapters/types.js.map +1 -0
  34. package/dist/src/api/server.d.ts +25 -0
  35. package/dist/src/api/server.js +786 -0
  36. package/dist/src/api/server.js.map +1 -0
  37. package/dist/src/approval/store.d.ts +35 -0
  38. package/dist/src/approval/store.js +113 -0
  39. package/dist/src/approval/store.js.map +1 -0
  40. package/dist/src/checkpoint.d.ts +9 -0
  41. package/dist/src/checkpoint.js +140 -0
  42. package/dist/src/checkpoint.js.map +1 -0
  43. package/dist/src/cli/v5.d.ts +15 -0
  44. package/dist/src/cli/v5.js +110 -0
  45. package/dist/src/cli/v5.js.map +1 -0
  46. package/dist/src/cli.d.ts +2 -0
  47. package/dist/src/cli.js +823 -0
  48. package/dist/src/cli.js.map +1 -0
  49. package/dist/src/clients/types.d.ts +90 -0
  50. package/dist/src/clients/types.js +239 -0
  51. package/dist/src/clients/types.js.map +1 -0
  52. package/dist/src/commercial/auth/provider.d.ts +61 -0
  53. package/dist/src/commercial/auth/provider.js +227 -0
  54. package/dist/src/commercial/auth/provider.js.map +1 -0
  55. package/dist/src/commercial/entitlement/provider.d.ts +27 -0
  56. package/dist/src/commercial/entitlement/provider.js +192 -0
  57. package/dist/src/commercial/entitlement/provider.js.map +1 -0
  58. package/dist/src/commercial/entitlement/signing.d.ts +61 -0
  59. package/dist/src/commercial/entitlement/signing.js +124 -0
  60. package/dist/src/commercial/entitlement/signing.js.map +1 -0
  61. package/dist/src/commercial/env.d.ts +10 -0
  62. package/dist/src/commercial/env.js +40 -0
  63. package/dist/src/commercial/env.js.map +1 -0
  64. package/dist/src/commercial/product.d.ts +26 -0
  65. package/dist/src/commercial/product.js +39 -0
  66. package/dist/src/commercial/product.js.map +1 -0
  67. package/dist/src/commercial/store.d.ts +46 -0
  68. package/dist/src/commercial/store.js +104 -0
  69. package/dist/src/commercial/store.js.map +1 -0
  70. package/dist/src/commercial/stripe/checkout.d.ts +104 -0
  71. package/dist/src/commercial/stripe/checkout.js +469 -0
  72. package/dist/src/commercial/stripe/checkout.js.map +1 -0
  73. package/dist/src/core/compatibility.d.ts +15 -0
  74. package/dist/src/core/compatibility.js +226 -0
  75. package/dist/src/core/compatibility.js.map +1 -0
  76. package/dist/src/core/engine.d.ts +33 -0
  77. package/dist/src/core/engine.js +432 -0
  78. package/dist/src/core/engine.js.map +1 -0
  79. package/dist/src/core/lifecycle.d.ts +17 -0
  80. package/dist/src/core/lifecycle.js +56 -0
  81. package/dist/src/core/lifecycle.js.map +1 -0
  82. package/dist/src/core/types.d.ts +140 -0
  83. package/dist/src/core/types.js +37 -0
  84. package/dist/src/core/types.js.map +1 -0
  85. package/dist/src/destroy.d.ts +21 -0
  86. package/dist/src/destroy.js +219 -0
  87. package/dist/src/destroy.js.map +1 -0
  88. package/dist/src/diff.d.ts +13 -0
  89. package/dist/src/diff.js +251 -0
  90. package/dist/src/diff.js.map +1 -0
  91. package/dist/src/enforcement/detect.d.ts +13 -0
  92. package/dist/src/enforcement/detect.js +75 -0
  93. package/dist/src/enforcement/detect.js.map +1 -0
  94. package/dist/src/enforcement/hook-policy.d.ts +38 -0
  95. package/dist/src/enforcement/hook-policy.js +111 -0
  96. package/dist/src/enforcement/hook-policy.js.map +1 -0
  97. package/dist/src/enforcement/index.d.ts +8 -0
  98. package/dist/src/enforcement/index.js +8 -0
  99. package/dist/src/enforcement/index.js.map +1 -0
  100. package/dist/src/enforcement/perf.d.ts +6 -0
  101. package/dist/src/enforcement/perf.js +18 -0
  102. package/dist/src/enforcement/perf.js.map +1 -0
  103. package/dist/src/enforcement/policy.d.ts +12 -0
  104. package/dist/src/enforcement/policy.js +84 -0
  105. package/dist/src/enforcement/policy.js.map +1 -0
  106. package/dist/src/enforcement/readonly.d.ts +17 -0
  107. package/dist/src/enforcement/readonly.js +124 -0
  108. package/dist/src/enforcement/readonly.js.map +1 -0
  109. package/dist/src/enforcement/sandbox-clone.d.ts +6 -0
  110. package/dist/src/enforcement/sandbox-clone.js +11 -0
  111. package/dist/src/enforcement/sandbox-clone.js.map +1 -0
  112. package/dist/src/enforcement/setup.d.ts +33 -0
  113. package/dist/src/enforcement/setup.js +168 -0
  114. package/dist/src/enforcement/setup.js.map +1 -0
  115. package/dist/src/enforcement/trust.d.ts +10 -0
  116. package/dist/src/enforcement/trust.js +71 -0
  117. package/dist/src/enforcement/trust.js.map +1 -0
  118. package/dist/src/enforcement/types.d.ts +40 -0
  119. package/dist/src/enforcement/types.js +3 -0
  120. package/dist/src/enforcement/types.js.map +1 -0
  121. package/dist/src/entitlement/provider.d.ts +48 -0
  122. package/dist/src/entitlement/provider.js +95 -0
  123. package/dist/src/entitlement/provider.js.map +1 -0
  124. package/dist/src/hash.d.ts +9 -0
  125. package/dist/src/hash.js +23 -0
  126. package/dist/src/hash.js.map +1 -0
  127. package/dist/src/ledger/query.d.ts +19 -0
  128. package/dist/src/ledger/query.js +158 -0
  129. package/dist/src/ledger/query.js.map +1 -0
  130. package/dist/src/manifest.d.ts +32 -0
  131. package/dist/src/manifest.js +242 -0
  132. package/dist/src/manifest.js.map +1 -0
  133. package/dist/src/mcp/server.d.ts +7 -0
  134. package/dist/src/mcp/server.js +364 -0
  135. package/dist/src/mcp/server.js.map +1 -0
  136. package/dist/src/paths.d.ts +94 -0
  137. package/dist/src/paths.js +354 -0
  138. package/dist/src/paths.js.map +1 -0
  139. package/dist/src/permission/engine.d.ts +15 -0
  140. package/dist/src/permission/engine.js +147 -0
  141. package/dist/src/permission/engine.js.map +1 -0
  142. package/dist/src/permission/types.d.ts +42 -0
  143. package/dist/src/permission/types.js +3 -0
  144. package/dist/src/permission/types.js.map +1 -0
  145. package/dist/src/product/setup.d.ts +35 -0
  146. package/dist/src/product/setup.js +300 -0
  147. package/dist/src/product/setup.js.map +1 -0
  148. package/dist/src/protect/audit.d.ts +5 -0
  149. package/dist/src/protect/audit.js +26 -0
  150. package/dist/src/protect/audit.js.map +1 -0
  151. package/dist/src/protect/capture.d.ts +7 -0
  152. package/dist/src/protect/capture.js +250 -0
  153. package/dist/src/protect/capture.js.map +1 -0
  154. package/dist/src/protect/fingerprint.d.ts +4 -0
  155. package/dist/src/protect/fingerprint.js +49 -0
  156. package/dist/src/protect/fingerprint.js.map +1 -0
  157. package/dist/src/protect/hook-cli.d.ts +2 -0
  158. package/dist/src/protect/hook-cli.js +107 -0
  159. package/dist/src/protect/hook-cli.js.map +1 -0
  160. package/dist/src/protect/index.d.ts +12 -0
  161. package/dist/src/protect/index.js +12 -0
  162. package/dist/src/protect/index.js.map +1 -0
  163. package/dist/src/protect/install.d.ts +34 -0
  164. package/dist/src/protect/install.js +293 -0
  165. package/dist/src/protect/install.js.map +1 -0
  166. package/dist/src/protect/intercept.d.ts +11 -0
  167. package/dist/src/protect/intercept.js +390 -0
  168. package/dist/src/protect/intercept.js.map +1 -0
  169. package/dist/src/protect/protect.d.ts +17 -0
  170. package/dist/src/protect/protect.js +194 -0
  171. package/dist/src/protect/protect.js.map +1 -0
  172. package/dist/src/protect/root-paths.d.ts +13 -0
  173. package/dist/src/protect/root-paths.js +140 -0
  174. package/dist/src/protect/root-paths.js.map +1 -0
  175. package/dist/src/protect/shell-policy.d.ts +17 -0
  176. package/dist/src/protect/shell-policy.js +269 -0
  177. package/dist/src/protect/shell-policy.js.map +1 -0
  178. package/dist/src/protect/status.d.ts +11 -0
  179. package/dist/src/protect/status.js +165 -0
  180. package/dist/src/protect/status.js.map +1 -0
  181. package/dist/src/protect/store.d.ts +20 -0
  182. package/dist/src/protect/store.js +170 -0
  183. package/dist/src/protect/store.js.map +1 -0
  184. package/dist/src/protect/types.d.ts +116 -0
  185. package/dist/src/protect/types.js +3 -0
  186. package/dist/src/protect/types.js.map +1 -0
  187. package/dist/src/protect/undo-session.d.ts +14 -0
  188. package/dist/src/protect/undo-session.js +182 -0
  189. package/dist/src/protect/undo-session.js.map +1 -0
  190. package/dist/src/restore.d.ts +39 -0
  191. package/dist/src/restore.js +141 -0
  192. package/dist/src/restore.js.map +1 -0
  193. package/dist/src/sandbox.d.ts +23 -0
  194. package/dist/src/sandbox.js +198 -0
  195. package/dist/src/sandbox.js.map +1 -0
  196. package/dist/src/session/ambient.d.ts +10 -0
  197. package/dist/src/session/ambient.js +53 -0
  198. package/dist/src/session/ambient.js.map +1 -0
  199. package/dist/src/session/attribution.d.ts +27 -0
  200. package/dist/src/session/attribution.js +201 -0
  201. package/dist/src/session/attribution.js.map +1 -0
  202. package/dist/src/session/index.d.ts +25 -0
  203. package/dist/src/session/index.js +472 -0
  204. package/dist/src/session/index.js.map +1 -0
  205. package/dist/src/session/process.d.ts +34 -0
  206. package/dist/src/session/process.js +234 -0
  207. package/dist/src/session/process.js.map +1 -0
  208. package/dist/src/session/store.d.ts +14 -0
  209. package/dist/src/session/store.js +125 -0
  210. package/dist/src/session/store.js.map +1 -0
  211. package/dist/src/session/types.d.ts +111 -0
  212. package/dist/src/session/types.js +3 -0
  213. package/dist/src/session/types.js.map +1 -0
  214. package/dist/src/session/watcher.d.ts +32 -0
  215. package/dist/src/session/watcher.js +186 -0
  216. package/dist/src/session/watcher.js.map +1 -0
  217. package/dist/src/timing.d.ts +7 -0
  218. package/dist/src/timing.js +19 -0
  219. package/dist/src/timing.js.map +1 -0
  220. package/dist/src/types.d.ts +101 -0
  221. package/dist/src/types.js +3 -0
  222. package/dist/src/types.js.map +1 -0
  223. package/dist/src/verify.d.ts +8 -0
  224. package/dist/src/verify.js +126 -0
  225. package/dist/src/verify.js.map +1 -0
  226. package/docs/ADAPTERS.md +37 -0
  227. package/docs/APPROVALS.md +32 -0
  228. package/docs/ARCHITECTURE.md +57 -0
  229. package/docs/ATTRIBUTION.md +179 -0
  230. package/docs/COMMERCIAL.md +51 -0
  231. package/docs/CURSOR-ENFORCEMENT.md +73 -0
  232. package/docs/ENFORCEMENT.md +134 -0
  233. package/docs/FUTURE.md +91 -0
  234. package/docs/HUMAN-SETUP.md +98 -0
  235. package/docs/IDENTITY-AUTHORITY.md +35 -0
  236. package/docs/MCP.md +107 -0
  237. package/docs/PACKAGING.md +77 -0
  238. package/docs/PERMISSIONS.md +53 -0
  239. package/docs/PRODUCT-V5.md +63 -0
  240. package/docs/PRODUCT-V6.md +69 -0
  241. package/docs/PROTECTED-SESSIONS.md +155 -0
  242. package/docs/THREAT-MODEL.md +84 -0
  243. package/docs/TRANSACTIONS.md +57 -0
  244. package/package.json +85 -0
@@ -0,0 +1,472 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { writeFile, mkdir } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { getProjectRoot, getSandboxPath, assertApprovedSandbox, PathSafetyError, } from "../paths.js";
5
+ import { createSandbox } from "../sandbox.js";
6
+ import { createCheckpoint, loadCheckpoint } from "../checkpoint.js";
7
+ import { buildManifest } from "../manifest.js";
8
+ import { diffManifests } from "../diff.js";
9
+ import { restoreSandbox } from "../restore.js";
10
+ import { Timer, formatMs } from "../timing.js";
11
+ import { SandboxWatcher } from "./watcher.js";
12
+ import { attributeChanges, printAttributionReport, } from "./attribution.js";
13
+ import { captureProcessSnapshot, formatProcessTree, lsofSandboxHolders, probeEndpointSecurityAccess, probeFsUsage, } from "./process.js";
14
+ import { appendEvent, clearActivePointer, clearStopFlag, loadSession, readActivePointer, requestStop, saveSession, sessionDir, stopFlagExists, writeActivePointer, } from "./store.js";
15
+ function newSessionId() {
16
+ return `sess-${randomBytes(3).toString("hex").toUpperCase()}`;
17
+ }
18
+ function formatClock(d = new Date()) {
19
+ return d.toTimeString().slice(0, 8);
20
+ }
21
+ function rssMb() {
22
+ return process.memoryUsage().rss / (1024 * 1024);
23
+ }
24
+ function durationLabel(startedAt, endedAt) {
25
+ const ms = Date.parse(endedAt) - Date.parse(startedAt);
26
+ if (!Number.isFinite(ms) || ms < 0)
27
+ return "unknown";
28
+ const s = Math.round(ms / 1000);
29
+ if (s < 60)
30
+ return `${s}s`;
31
+ const m = Math.floor(s / 60);
32
+ const rem = s % 60;
33
+ return `${m}m ${String(rem).padStart(2, "0")}s`;
34
+ }
35
+ function printLiveEvent(sessionId, ev) {
36
+ const tag = ev.ambientSuspect ? " AMBIENT?" : "";
37
+ const actor = ev.actor === "UNKNOWN" ? "" : ` ${ev.actor}/${ev.confidence}`;
38
+ console.log(`${formatClock(new Date(ev.at))} ${ev.type.padEnd(16)} ${ev.path}${tag}${actor}`);
39
+ void sessionId;
40
+ }
41
+ export async function startSession(options = {}) {
42
+ const projectRoot = options.projectRoot ?? getProjectRoot();
43
+ const sandbox = getSandboxPath(projectRoot);
44
+ const existing = await readActivePointer(projectRoot);
45
+ if (existing) {
46
+ // Crash recovery: if PID is dead, clear; else refuse
47
+ let alive = false;
48
+ try {
49
+ process.kill(existing.watcherPid, 0);
50
+ alive = true;
51
+ }
52
+ catch {
53
+ alive = false;
54
+ }
55
+ if (alive) {
56
+ throw new PathSafetyError(`Session ${existing.id} already active (pid ${existing.watcherPid}). Stop it first.`);
57
+ }
58
+ await clearActivePointer(projectRoot);
59
+ }
60
+ if (options.recreateSandbox) {
61
+ await createSandbox(projectRoot);
62
+ }
63
+ try {
64
+ await assertApprovedSandbox(sandbox, projectRoot);
65
+ }
66
+ catch {
67
+ await createSandbox(projectRoot);
68
+ }
69
+ const cpTimer = new Timer();
70
+ const checkpoint = await createCheckpoint(projectRoot);
71
+ const checkpointMs = cpTimer.elapsedMs();
72
+ const id = newSessionId();
73
+ const snapshots = [];
74
+ const events = [];
75
+ if (!options.skipProcessSnapshots) {
76
+ snapshots.push(await captureProcessSnapshot());
77
+ }
78
+ const metrics = {
79
+ eventsObserved: 0,
80
+ eventsPerSecondPeak: 0,
81
+ memoryRssMbStart: rssMb(),
82
+ watchDurationMs: 0,
83
+ checkpointMs,
84
+ };
85
+ const session = {
86
+ id,
87
+ version: 1,
88
+ targetPath: sandbox,
89
+ checkpointId: checkpoint.meta.id,
90
+ checkpointFingerprint: checkpoint.meta.fingerprint,
91
+ startedAt: new Date().toISOString(),
92
+ endedAt: null,
93
+ watcherPid: process.pid,
94
+ observedEvents: [],
95
+ finalChanges: [],
96
+ attributedChanges: [],
97
+ processes: snapshots,
98
+ attributionConfidenceOverall: "NONE",
99
+ attributionSummary: null,
100
+ status: "watching",
101
+ metrics,
102
+ notes: [
103
+ "Live FSEvents/chokidar observation started. Actor unknown unless proven.",
104
+ "Final manifest diff is the source of truth for what changed.",
105
+ ],
106
+ selectiveRewindEnabled: false,
107
+ selectiveRewindReason: "Disabled: without responsible-process metadata, agent-only rewind can destroy human edits.",
108
+ };
109
+ await mkdir(sessionDir(id, projectRoot), { recursive: true });
110
+ await clearStopFlag(id, projectRoot);
111
+ await saveSession(session, projectRoot);
112
+ await writeActivePointer({
113
+ id,
114
+ watcherPid: process.pid,
115
+ startedAt: session.startedAt,
116
+ targetPath: sandbox,
117
+ checkpointId: checkpoint.meta.id,
118
+ stopRequested: false,
119
+ }, projectRoot);
120
+ if (!options.quiet) {
121
+ console.log("REWIND");
122
+ console.log("");
123
+ console.log(`Session ${id}`);
124
+ console.log("");
125
+ console.log("Watching:");
126
+ console.log("sandbox-test-project");
127
+ console.log("");
128
+ console.log("Checkpoint:");
129
+ console.log(checkpoint.meta.fingerprint);
130
+ console.log("");
131
+ console.log("────────────────────────────");
132
+ console.log("");
133
+ console.log("Press Ctrl+C or run `npm run session:stop` in another terminal.");
134
+ console.log("Actor UNKNOWN unless evidence proves otherwise.");
135
+ console.log("");
136
+ }
137
+ const watchTimer = new Timer();
138
+ const watcher = new SandboxWatcher(sandbox, (ev) => {
139
+ events.push(ev);
140
+ void appendEvent(id, ev, projectRoot);
141
+ options.onEvent?.(ev);
142
+ if (!options.quiet)
143
+ printLiveEvent(id, ev);
144
+ });
145
+ await watcher.start(projectRoot);
146
+ // Periodic process snapshot (every 15s) — weak correlative context only
147
+ let snapTimer = null;
148
+ if (!options.skipProcessSnapshots) {
149
+ snapTimer = setInterval(() => {
150
+ void captureProcessSnapshot().then((s) => {
151
+ snapshots.push(s);
152
+ });
153
+ }, 15_000);
154
+ snapTimer.unref?.();
155
+ }
156
+ const stopPromise = new Promise((resolve) => {
157
+ const check = async () => {
158
+ if (await stopFlagExists(id, projectRoot)) {
159
+ resolve();
160
+ return;
161
+ }
162
+ setTimeout(() => {
163
+ void check();
164
+ }, 250);
165
+ };
166
+ void check();
167
+ const onSig = () => resolve();
168
+ process.once("SIGINT", onSig);
169
+ process.once("SIGTERM", onSig);
170
+ if (options.autoStopMs && options.autoStopMs > 0) {
171
+ setTimeout(() => resolve(), options.autoStopMs).unref?.();
172
+ }
173
+ });
174
+ await stopPromise;
175
+ if (snapTimer)
176
+ clearInterval(snapTimer);
177
+ session.status = "stopping";
178
+ await saveSession(session, projectRoot);
179
+ const watchStats = await watcher.stop();
180
+ metrics.watchDurationMs = watchTimer.elapsedMs();
181
+ metrics.eventsObserved = events.length;
182
+ metrics.eventsPerSecondPeak = watchStats.peakEventsPerSec;
183
+ metrics.memoryRssMbEnd = rssMb();
184
+ // Final process + lsof probes
185
+ if (!options.skipProcessSnapshots) {
186
+ snapshots.push(await captureProcessSnapshot());
187
+ const lsof = await lsofSandboxHolders(sandbox);
188
+ session.notes.push(`lsof: ${lsof.note}`);
189
+ if (lsof.error)
190
+ session.notes.push(`lsof error: ${lsof.error}`);
191
+ }
192
+ const diffTimer = new Timer();
193
+ const current = await buildManifest(sandbox, "sandbox-test-project");
194
+ const cp = await loadCheckpoint(checkpoint.meta.id, projectRoot);
195
+ const changes = diffManifests(cp.manifest, current);
196
+ metrics.finalDiffMs = diffTimer.elapsedMs();
197
+ const attr = attributeChanges({
198
+ changes,
199
+ events,
200
+ processSnapshots: snapshots,
201
+ ...(options.knownHumanPaths
202
+ ? { knownHumanPaths: options.knownHumanPaths }
203
+ : {}),
204
+ });
205
+ session.endedAt = new Date().toISOString();
206
+ session.observedEvents = events;
207
+ session.finalChanges = changes;
208
+ session.attributedChanges = attr.attributed;
209
+ session.processes = snapshots;
210
+ session.attributionSummary = attr.summary;
211
+ session.attributionConfidenceOverall = attr.overall;
212
+ session.notes.push(...attr.notes);
213
+ session.status = "completed";
214
+ session.metrics = metrics;
215
+ session.watcherPid = process.pid;
216
+ await saveSession(session, projectRoot);
217
+ await clearActivePointer(projectRoot);
218
+ await clearStopFlag(id, projectRoot);
219
+ // Write a human-readable report
220
+ await writeFile(path.join(sessionDir(id, projectRoot), "report.txt"), buildReportText(session), "utf8");
221
+ if (!options.quiet) {
222
+ console.log("");
223
+ console.log("────────────────────────────");
224
+ console.log("");
225
+ console.log(`${events.length} observed filesystem events`);
226
+ console.log("");
227
+ printAttributionReport(attr.summary, durationLabel(session.startedAt, session.endedAt));
228
+ console.log("");
229
+ console.log(`Final diff time: ${formatMs(metrics.finalDiffMs ?? 0)}`);
230
+ console.log(`Watcher peak events/sec: ${metrics.eventsPerSecondPeak} | RSS ${metrics.memoryRssMbStart?.toFixed(1)}→${metrics.memoryRssMbEnd?.toFixed(1)} MB`);
231
+ console.log("");
232
+ console.log("SESSION CHANGES / AMBIENT / UNKNOWN:");
233
+ printGroupedChanges(session);
234
+ console.log("");
235
+ console.log("Selective agent-only rewind: DISABLED — " + session.selectiveRewindReason);
236
+ }
237
+ return session;
238
+ }
239
+ function printGroupedChanges(session) {
240
+ const groups = {
241
+ SESSION: session.attributedChanges.filter((a) => a.actor === "AGENT" || a.actor === "USER"),
242
+ AMBIENT: session.attributedChanges.filter((a) => a.ambient || a.actor === "SYSTEM"),
243
+ UNKNOWN: session.attributedChanges.filter((a) => a.actor === "UNKNOWN" && !a.ambient),
244
+ };
245
+ for (const [label, list] of Object.entries(groups)) {
246
+ console.log("");
247
+ console.log(`${label} (${list.length})`);
248
+ for (const a of list.slice(0, 20)) {
249
+ const p = a.change.pathAfter ?? a.change.pathBefore ?? "?";
250
+ console.log(` ${a.change.type.padEnd(8)} ${p} [${a.actor}/${a.confidence}]`);
251
+ }
252
+ if (list.length > 20)
253
+ console.log(` … ${list.length - 20} more`);
254
+ }
255
+ }
256
+ function buildReportText(session) {
257
+ const s = session.attributionSummary;
258
+ return [
259
+ `Session ${session.id}`,
260
+ `Status: ${session.status}`,
261
+ `Checkpoint: ${session.checkpointId}`,
262
+ `Fingerprint: ${session.checkpointFingerprint}`,
263
+ `Events: ${session.observedEvents.length}`,
264
+ `Final changes: ${session.finalChanges.length}`,
265
+ s
266
+ ? `Agent=${s.likelyAgent} Human=${s.likelyHuman} Ambient=${s.ambientSystem} Unknown=${s.unknown}`
267
+ : "",
268
+ `Selective rewind: ${session.selectiveRewindEnabled ? "ENABLED" : "DISABLED"}`,
269
+ ...session.notes,
270
+ ].join("\n");
271
+ }
272
+ export async function stopSession(projectRoot = getProjectRoot()) {
273
+ const active = await requestStop(projectRoot);
274
+ console.log("REWIND");
275
+ console.log("");
276
+ console.log(`Stop requested for session ${active.id} (pid ${active.watcherPid})`);
277
+ console.log("The watching process will finalize shortly.");
278
+ }
279
+ export async function sessionStatus(projectRoot = getProjectRoot()) {
280
+ const active = await readActivePointer(projectRoot);
281
+ console.log("REWIND SESSION STATUS");
282
+ console.log("");
283
+ if (active) {
284
+ let alive = false;
285
+ try {
286
+ process.kill(active.watcherPid, 0);
287
+ alive = true;
288
+ }
289
+ catch {
290
+ alive = false;
291
+ }
292
+ console.log(`Active: ${active.id}`);
293
+ console.log(`Watcher: pid ${active.watcherPid} (${alive ? "alive" : "dead/stale"})`);
294
+ console.log(`Started: ${active.startedAt}`);
295
+ console.log(`Checkpoint: ${active.checkpointId}`);
296
+ console.log(`Stop flag: ${active.stopRequested ? "yes" : "no"}`);
297
+ if (!alive) {
298
+ console.log("");
299
+ console.log("Watcher appears dead — run session start to recover (stale pointer cleared on next start).");
300
+ }
301
+ }
302
+ else {
303
+ console.log("No active session.");
304
+ try {
305
+ const latest = await loadSession("latest", projectRoot);
306
+ console.log("");
307
+ console.log(`Latest completed: ${latest.id} (${latest.status})`);
308
+ console.log(`Fingerprint: ${latest.checkpointFingerprint}`);
309
+ console.log(`Final changes: ${latest.finalChanges.length}`);
310
+ }
311
+ catch {
312
+ console.log("No prior sessions.");
313
+ }
314
+ }
315
+ }
316
+ export async function rewindSession(sessionId = "latest", projectRoot = getProjectRoot()) {
317
+ const session = await loadSession(sessionId, projectRoot);
318
+ console.log("REWIND SESSION");
319
+ console.log("");
320
+ console.log(`Session: ${session.id}`);
321
+ console.log(`Checkpoint: ${session.checkpointId}`);
322
+ console.log("");
323
+ console.log("Restoring ENTIRE session (full sandbox → checkpoint).");
324
+ console.log("Selective agent-only rewind is disabled.");
325
+ console.log("");
326
+ const timer = new Timer();
327
+ const result = await restoreSandbox(session.checkpointId, projectRoot);
328
+ const ms = timer.elapsedMs();
329
+ session.status = "rewound";
330
+ session.metrics.rewindMs = ms;
331
+ session.notes.push(`Full session rewind at ${new Date().toISOString()}`);
332
+ await saveSession(session, projectRoot);
333
+ console.log(`Rewind time: ${formatMs(ms)}`);
334
+ console.log("");
335
+ if (result.verification.ok) {
336
+ console.log("✓ EXACT MATCH");
337
+ console.log("");
338
+ console.log("REWIND SUCCESSFUL");
339
+ }
340
+ else {
341
+ console.log("✗ RESTORE FAILED");
342
+ process.exitCode = 1;
343
+ }
344
+ console.log("");
345
+ console.log("Expected:");
346
+ console.log(result.verification.expectedFingerprint);
347
+ console.log("Actual:");
348
+ console.log(result.verification.actualFingerprint);
349
+ }
350
+ export async function showSessionReport(sessionId = "latest", projectRoot = getProjectRoot()) {
351
+ const session = await loadSession(sessionId, projectRoot);
352
+ if (!session.attributionSummary) {
353
+ console.log("Session has no attribution summary yet.");
354
+ return;
355
+ }
356
+ printAttributionReport(session.attributionSummary, session.endedAt
357
+ ? durationLabel(session.startedAt, session.endedAt)
358
+ : "in progress");
359
+ console.log("");
360
+ printGroupedChanges(session);
361
+ console.log("");
362
+ console.log("Notes:");
363
+ for (const n of session.notes)
364
+ console.log(`- ${n}`);
365
+ }
366
+ export async function printProcessProbe(projectRoot = getProjectRoot()) {
367
+ console.log("REWIND PROCESS ATTRIBUTION PROBE");
368
+ console.log("");
369
+ console.log("TESTED on this machine (no special entitlements):");
370
+ console.log("");
371
+ const snap = await captureProcessSnapshot();
372
+ console.log(`Processes sampled: ${snap.processes.length}`);
373
+ console.log(`Cursor-related: ${snap.cursorRelated.length}`);
374
+ for (const n of snap.notes)
375
+ console.log(`- ${n}`);
376
+ for (const e of snap.errors)
377
+ console.log(`! ${e}`);
378
+ console.log("");
379
+ if (snap.treeRoots.length) {
380
+ console.log("Cursor process tree (heuristic roots):");
381
+ console.log(formatProcessTree(snap.treeRoots));
382
+ }
383
+ else {
384
+ console.log("No Cursor tree roots discovered.");
385
+ }
386
+ console.log("");
387
+ const sandbox = getSandboxPath(projectRoot);
388
+ try {
389
+ await assertApprovedSandbox(sandbox, projectRoot);
390
+ const lsof = await lsofSandboxHolders(sandbox);
391
+ console.log("lsof sandbox holders:");
392
+ console.log(`- ${lsof.note}`);
393
+ if (lsof.error)
394
+ console.log(`- error: ${lsof.error}`);
395
+ for (const line of lsof.lines.slice(0, 15))
396
+ console.log(` ${line}`);
397
+ }
398
+ catch {
399
+ console.log("Sandbox missing — skip lsof path probe.");
400
+ }
401
+ console.log("");
402
+ const es = await probeEndpointSecurityAccess();
403
+ console.log("eslogger / Endpoint Security:");
404
+ console.log(`- available without privilege: ${es.available}`);
405
+ console.log(`- ${es.detail}`);
406
+ console.log("");
407
+ const fsUsage = await probeFsUsage();
408
+ console.log("fs_usage:");
409
+ console.log(`- usable without root: ${fsUsage.usable}`);
410
+ console.log(`- ${fsUsage.detail}`);
411
+ console.log("");
412
+ console.log("Conclusion: FSEvents/chokidar observe WHAT changed; they do not expose WHO. Process table + lsof are correlative only.");
413
+ }
414
+ /**
415
+ * Automated V1 demo: watch + synthetic writes + ambient + human marker + full rewind.
416
+ */
417
+ export async function demoV1(projectRoot = getProjectRoot()) {
418
+ console.log("⸻");
419
+ console.log("");
420
+ console.log("REWIND V1 — LIVE OBSERVATION DEMO");
421
+ console.log("");
422
+ const humanPath = "notes-from-jack.txt";
423
+ const agentish = "src/index.ts";
424
+ // Run session with auto-stop; mutate while watching via on ready race
425
+ let mutated = false;
426
+ const sessionPromise = startSession({
427
+ projectRoot,
428
+ recreateSandbox: true,
429
+ autoStopMs: 2500,
430
+ knownHumanPaths: [humanPath],
431
+ skipProcessSnapshots: false,
432
+ onEvent: () => {
433
+ /* live */
434
+ },
435
+ });
436
+ // Perform mutations after short delay (watcher should be up)
437
+ await new Promise((r) => setTimeout(r, 600));
438
+ const sandbox = getSandboxPath(projectRoot);
439
+ await assertApprovedSandbox(sandbox, projectRoot);
440
+ // "Agent-like" edit (still UNKNOWN without markers — we do NOT mark as agent)
441
+ const indexFile = path.join(sandbox, agentish);
442
+ const { readFile } = await import("node:fs/promises");
443
+ const prev = await readFile(indexFile);
444
+ await writeFile(indexFile, Buffer.concat([prev, Buffer.from("\n// v1 demo agent-like edit\n")]));
445
+ // Human concurrent file
446
+ await writeFile(path.join(sandbox, humanPath), "manual note from jack during agent session\n", "utf8");
447
+ // Ambient
448
+ await writeFile(path.join(sandbox, ".DS_Store"), Buffer.from("dsstore"));
449
+ // Nested create
450
+ await mkdir(path.join(sandbox, "v1-created/nested"), { recursive: true });
451
+ await writeFile(path.join(sandbox, "v1-created/nested/file.ts"), "export {};\n", "utf8");
452
+ mutated = true;
453
+ const session = await sessionPromise;
454
+ console.log("");
455
+ console.log(`Mutations applied: ${mutated}`);
456
+ console.log(`Observed events: ${session.observedEvents.length}`);
457
+ console.log(`Final changes: ${session.finalChanges.length}`);
458
+ console.log("");
459
+ // Show that human path got USER/HIGH and .DS_Store SYSTEM, others UNKNOWN
460
+ const human = session.attributedChanges.find((a) => a.change.pathAfter === humanPath);
461
+ const ambient = session.attributedChanges.find((a) => (a.change.pathAfter ?? a.change.pathBefore) === ".DS_Store");
462
+ const unknownish = session.attributedChanges.find((a) => (a.change.pathAfter ?? a.change.pathBefore) === agentish);
463
+ console.log(`Human file attribution: ${human?.actor}/${human?.confidence ?? "missing"}`);
464
+ console.log(`Ambient .DS_Store: ${ambient?.actor}/${ambient?.confidence ?? "missing"}`);
465
+ console.log(`Agent-like edit without proof: ${unknownish?.actor}/${unknownish?.confidence ?? "missing"}`);
466
+ console.log("");
467
+ console.log("Full session rewind…");
468
+ await rewindSession(session.id, projectRoot);
469
+ console.log("");
470
+ console.log("⸻");
471
+ }
472
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { ProcessSnapshot, ProcessTreeNode } from "./types.js";
2
+ export declare function formatProcessTree(nodes: ProcessTreeNode[], indent?: string): string;
3
+ /**
4
+ * Snapshot process table and attempt to identify Cursor-related hierarchy.
5
+ * Honest: may fail under sandbox/TCC; errors are recorded, not invented.
6
+ */
7
+ export declare function captureProcessSnapshot(): Promise<ProcessSnapshot>;
8
+ /**
9
+ * Use lsof to find processes with open handles under a path.
10
+ * This is correlative / weak: short writes often leave no open handle.
11
+ * Avoid `lsof +D` — it recursively walks and can hang on large trees.
12
+ */
13
+ export declare function lsofSandboxHolders(sandboxPath: string): Promise<{
14
+ lines: string[];
15
+ pids: number[];
16
+ error?: string;
17
+ note: string;
18
+ }>;
19
+ /**
20
+ * Probe whether eslogger / Endpoint Security is usable without entitlements.
21
+ */
22
+ export declare function probeEndpointSecurityAccess(): Promise<{
23
+ available: boolean;
24
+ detail: string;
25
+ tested: true;
26
+ }>;
27
+ /**
28
+ * Try fs_usage briefly — usually requires root.
29
+ */
30
+ export declare function probeFsUsage(): Promise<{
31
+ usable: boolean;
32
+ detail: string;
33
+ tested: true;
34
+ }>;