@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.
- package/.env.example +8 -0
- package/LICENSE +21 -0
- package/README.md +39 -0
- package/dist/src/action/capture.d.ts +15 -0
- package/dist/src/action/capture.js +215 -0
- package/dist/src/action/capture.js.map +1 -0
- package/dist/src/action/mediate.d.ts +28 -0
- package/dist/src/action/mediate.js +109 -0
- package/dist/src/action/mediate.js.map +1 -0
- package/dist/src/action/mutate.d.ts +11 -0
- package/dist/src/action/mutate.js +189 -0
- package/dist/src/action/mutate.js.map +1 -0
- package/dist/src/action/objects.d.ts +5 -0
- package/dist/src/action/objects.js +50 -0
- package/dist/src/action/objects.js.map +1 -0
- package/dist/src/action/store.d.ts +24 -0
- package/dist/src/action/store.js +149 -0
- package/dist/src/action/store.js.map +1 -0
- package/dist/src/action/types.d.ts +84 -0
- package/dist/src/action/types.js +3 -0
- package/dist/src/action/types.js.map +1 -0
- package/dist/src/action/undo.d.ts +11 -0
- package/dist/src/action/undo.js +42 -0
- package/dist/src/action/undo.js.map +1 -0
- package/dist/src/adapters/filesystem.d.ts +35 -0
- package/dist/src/adapters/filesystem.js +499 -0
- package/dist/src/adapters/filesystem.js.map +1 -0
- package/dist/src/adapters/index.d.ts +7 -0
- package/dist/src/adapters/index.js +19 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/adapters/types.d.ts +54 -0
- package/dist/src/adapters/types.js +7 -0
- package/dist/src/adapters/types.js.map +1 -0
- package/dist/src/api/server.d.ts +25 -0
- package/dist/src/api/server.js +786 -0
- package/dist/src/api/server.js.map +1 -0
- package/dist/src/approval/store.d.ts +35 -0
- package/dist/src/approval/store.js +113 -0
- package/dist/src/approval/store.js.map +1 -0
- package/dist/src/checkpoint.d.ts +9 -0
- package/dist/src/checkpoint.js +140 -0
- package/dist/src/checkpoint.js.map +1 -0
- package/dist/src/cli/v5.d.ts +15 -0
- package/dist/src/cli/v5.js +110 -0
- package/dist/src/cli/v5.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +823 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/clients/types.d.ts +90 -0
- package/dist/src/clients/types.js +239 -0
- package/dist/src/clients/types.js.map +1 -0
- package/dist/src/commercial/auth/provider.d.ts +61 -0
- package/dist/src/commercial/auth/provider.js +227 -0
- package/dist/src/commercial/auth/provider.js.map +1 -0
- package/dist/src/commercial/entitlement/provider.d.ts +27 -0
- package/dist/src/commercial/entitlement/provider.js +192 -0
- package/dist/src/commercial/entitlement/provider.js.map +1 -0
- package/dist/src/commercial/entitlement/signing.d.ts +61 -0
- package/dist/src/commercial/entitlement/signing.js +124 -0
- package/dist/src/commercial/entitlement/signing.js.map +1 -0
- package/dist/src/commercial/env.d.ts +10 -0
- package/dist/src/commercial/env.js +40 -0
- package/dist/src/commercial/env.js.map +1 -0
- package/dist/src/commercial/product.d.ts +26 -0
- package/dist/src/commercial/product.js +39 -0
- package/dist/src/commercial/product.js.map +1 -0
- package/dist/src/commercial/store.d.ts +46 -0
- package/dist/src/commercial/store.js +104 -0
- package/dist/src/commercial/store.js.map +1 -0
- package/dist/src/commercial/stripe/checkout.d.ts +104 -0
- package/dist/src/commercial/stripe/checkout.js +469 -0
- package/dist/src/commercial/stripe/checkout.js.map +1 -0
- package/dist/src/core/compatibility.d.ts +15 -0
- package/dist/src/core/compatibility.js +226 -0
- package/dist/src/core/compatibility.js.map +1 -0
- package/dist/src/core/engine.d.ts +33 -0
- package/dist/src/core/engine.js +432 -0
- package/dist/src/core/engine.js.map +1 -0
- package/dist/src/core/lifecycle.d.ts +17 -0
- package/dist/src/core/lifecycle.js +56 -0
- package/dist/src/core/lifecycle.js.map +1 -0
- package/dist/src/core/types.d.ts +140 -0
- package/dist/src/core/types.js +37 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/destroy.d.ts +21 -0
- package/dist/src/destroy.js +219 -0
- package/dist/src/destroy.js.map +1 -0
- package/dist/src/diff.d.ts +13 -0
- package/dist/src/diff.js +251 -0
- package/dist/src/diff.js.map +1 -0
- package/dist/src/enforcement/detect.d.ts +13 -0
- package/dist/src/enforcement/detect.js +75 -0
- package/dist/src/enforcement/detect.js.map +1 -0
- package/dist/src/enforcement/hook-policy.d.ts +38 -0
- package/dist/src/enforcement/hook-policy.js +111 -0
- package/dist/src/enforcement/hook-policy.js.map +1 -0
- package/dist/src/enforcement/index.d.ts +8 -0
- package/dist/src/enforcement/index.js +8 -0
- package/dist/src/enforcement/index.js.map +1 -0
- package/dist/src/enforcement/perf.d.ts +6 -0
- package/dist/src/enforcement/perf.js +18 -0
- package/dist/src/enforcement/perf.js.map +1 -0
- package/dist/src/enforcement/policy.d.ts +12 -0
- package/dist/src/enforcement/policy.js +84 -0
- package/dist/src/enforcement/policy.js.map +1 -0
- package/dist/src/enforcement/readonly.d.ts +17 -0
- package/dist/src/enforcement/readonly.js +124 -0
- package/dist/src/enforcement/readonly.js.map +1 -0
- package/dist/src/enforcement/sandbox-clone.d.ts +6 -0
- package/dist/src/enforcement/sandbox-clone.js +11 -0
- package/dist/src/enforcement/sandbox-clone.js.map +1 -0
- package/dist/src/enforcement/setup.d.ts +33 -0
- package/dist/src/enforcement/setup.js +168 -0
- package/dist/src/enforcement/setup.js.map +1 -0
- package/dist/src/enforcement/trust.d.ts +10 -0
- package/dist/src/enforcement/trust.js +71 -0
- package/dist/src/enforcement/trust.js.map +1 -0
- package/dist/src/enforcement/types.d.ts +40 -0
- package/dist/src/enforcement/types.js +3 -0
- package/dist/src/enforcement/types.js.map +1 -0
- package/dist/src/entitlement/provider.d.ts +48 -0
- package/dist/src/entitlement/provider.js +95 -0
- package/dist/src/entitlement/provider.js.map +1 -0
- package/dist/src/hash.d.ts +9 -0
- package/dist/src/hash.js +23 -0
- package/dist/src/hash.js.map +1 -0
- package/dist/src/ledger/query.d.ts +19 -0
- package/dist/src/ledger/query.js +158 -0
- package/dist/src/ledger/query.js.map +1 -0
- package/dist/src/manifest.d.ts +32 -0
- package/dist/src/manifest.js +242 -0
- package/dist/src/manifest.js.map +1 -0
- package/dist/src/mcp/server.d.ts +7 -0
- package/dist/src/mcp/server.js +364 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/paths.d.ts +94 -0
- package/dist/src/paths.js +354 -0
- package/dist/src/paths.js.map +1 -0
- package/dist/src/permission/engine.d.ts +15 -0
- package/dist/src/permission/engine.js +147 -0
- package/dist/src/permission/engine.js.map +1 -0
- package/dist/src/permission/types.d.ts +42 -0
- package/dist/src/permission/types.js +3 -0
- package/dist/src/permission/types.js.map +1 -0
- package/dist/src/product/setup.d.ts +35 -0
- package/dist/src/product/setup.js +300 -0
- package/dist/src/product/setup.js.map +1 -0
- package/dist/src/protect/audit.d.ts +5 -0
- package/dist/src/protect/audit.js +26 -0
- package/dist/src/protect/audit.js.map +1 -0
- package/dist/src/protect/capture.d.ts +7 -0
- package/dist/src/protect/capture.js +250 -0
- package/dist/src/protect/capture.js.map +1 -0
- package/dist/src/protect/fingerprint.d.ts +4 -0
- package/dist/src/protect/fingerprint.js +49 -0
- package/dist/src/protect/fingerprint.js.map +1 -0
- package/dist/src/protect/hook-cli.d.ts +2 -0
- package/dist/src/protect/hook-cli.js +107 -0
- package/dist/src/protect/hook-cli.js.map +1 -0
- package/dist/src/protect/index.d.ts +12 -0
- package/dist/src/protect/index.js +12 -0
- package/dist/src/protect/index.js.map +1 -0
- package/dist/src/protect/install.d.ts +34 -0
- package/dist/src/protect/install.js +293 -0
- package/dist/src/protect/install.js.map +1 -0
- package/dist/src/protect/intercept.d.ts +11 -0
- package/dist/src/protect/intercept.js +390 -0
- package/dist/src/protect/intercept.js.map +1 -0
- package/dist/src/protect/protect.d.ts +17 -0
- package/dist/src/protect/protect.js +194 -0
- package/dist/src/protect/protect.js.map +1 -0
- package/dist/src/protect/root-paths.d.ts +13 -0
- package/dist/src/protect/root-paths.js +140 -0
- package/dist/src/protect/root-paths.js.map +1 -0
- package/dist/src/protect/shell-policy.d.ts +17 -0
- package/dist/src/protect/shell-policy.js +269 -0
- package/dist/src/protect/shell-policy.js.map +1 -0
- package/dist/src/protect/status.d.ts +11 -0
- package/dist/src/protect/status.js +165 -0
- package/dist/src/protect/status.js.map +1 -0
- package/dist/src/protect/store.d.ts +20 -0
- package/dist/src/protect/store.js +170 -0
- package/dist/src/protect/store.js.map +1 -0
- package/dist/src/protect/types.d.ts +116 -0
- package/dist/src/protect/types.js +3 -0
- package/dist/src/protect/types.js.map +1 -0
- package/dist/src/protect/undo-session.d.ts +14 -0
- package/dist/src/protect/undo-session.js +182 -0
- package/dist/src/protect/undo-session.js.map +1 -0
- package/dist/src/restore.d.ts +39 -0
- package/dist/src/restore.js +141 -0
- package/dist/src/restore.js.map +1 -0
- package/dist/src/sandbox.d.ts +23 -0
- package/dist/src/sandbox.js +198 -0
- package/dist/src/sandbox.js.map +1 -0
- package/dist/src/session/ambient.d.ts +10 -0
- package/dist/src/session/ambient.js +53 -0
- package/dist/src/session/ambient.js.map +1 -0
- package/dist/src/session/attribution.d.ts +27 -0
- package/dist/src/session/attribution.js +201 -0
- package/dist/src/session/attribution.js.map +1 -0
- package/dist/src/session/index.d.ts +25 -0
- package/dist/src/session/index.js +472 -0
- package/dist/src/session/index.js.map +1 -0
- package/dist/src/session/process.d.ts +34 -0
- package/dist/src/session/process.js +234 -0
- package/dist/src/session/process.js.map +1 -0
- package/dist/src/session/store.d.ts +14 -0
- package/dist/src/session/store.js +125 -0
- package/dist/src/session/store.js.map +1 -0
- package/dist/src/session/types.d.ts +111 -0
- package/dist/src/session/types.js +3 -0
- package/dist/src/session/types.js.map +1 -0
- package/dist/src/session/watcher.d.ts +32 -0
- package/dist/src/session/watcher.js +186 -0
- package/dist/src/session/watcher.js.map +1 -0
- package/dist/src/timing.d.ts +7 -0
- package/dist/src/timing.js +19 -0
- package/dist/src/timing.js.map +1 -0
- package/dist/src/types.d.ts +101 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/verify.d.ts +8 -0
- package/dist/src/verify.js +126 -0
- package/dist/src/verify.js.map +1 -0
- package/docs/ADAPTERS.md +37 -0
- package/docs/APPROVALS.md +32 -0
- package/docs/ARCHITECTURE.md +57 -0
- package/docs/ATTRIBUTION.md +179 -0
- package/docs/COMMERCIAL.md +51 -0
- package/docs/CURSOR-ENFORCEMENT.md +73 -0
- package/docs/ENFORCEMENT.md +134 -0
- package/docs/FUTURE.md +91 -0
- package/docs/HUMAN-SETUP.md +98 -0
- package/docs/IDENTITY-AUTHORITY.md +35 -0
- package/docs/MCP.md +107 -0
- package/docs/PACKAGING.md +77 -0
- package/docs/PERMISSIONS.md +53 -0
- package/docs/PRODUCT-V5.md +63 -0
- package/docs/PRODUCT-V6.md +69 -0
- package/docs/PROTECTED-SESSIONS.md +155 -0
- package/docs/THREAT-MODEL.md +84 -0
- package/docs/TRANSACTIONS.md +57 -0
- package/package.json +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../../src/action/mutate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Shared content-addressable object store under .rewind/objects/ */
|
|
2
|
+
export declare function objectAbsPath(hash: string, projectRoot?: string): string;
|
|
3
|
+
export declare function storeObject(data: Buffer, projectRoot?: string): Promise<string>;
|
|
4
|
+
export declare function readObject(hash: string, projectRoot?: string): Promise<Buffer>;
|
|
5
|
+
export declare function objectExists(hash: string, projectRoot?: string): Promise<boolean>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { mkdir, writeFile, readFile, lstat, rm } from "node:fs/promises";
|
|
3
|
+
import { getObjectsDir, getProjectRoot } from "../paths.js";
|
|
4
|
+
import { sha256 } from "../hash.js";
|
|
5
|
+
/** Shared content-addressable object store under .rewind/objects/ */
|
|
6
|
+
export function objectAbsPath(hash, projectRoot = getProjectRoot()) {
|
|
7
|
+
return path.join(getObjectsDir(projectRoot), hash.slice(0, 2), hash);
|
|
8
|
+
}
|
|
9
|
+
export async function storeObject(data, projectRoot = getProjectRoot()) {
|
|
10
|
+
const hash = sha256(data);
|
|
11
|
+
const dest = objectAbsPath(hash, projectRoot);
|
|
12
|
+
await mkdir(path.dirname(dest), { recursive: true });
|
|
13
|
+
try {
|
|
14
|
+
await lstat(dest);
|
|
15
|
+
return hash;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
/* create */
|
|
19
|
+
}
|
|
20
|
+
const tmp = `${dest}.tmp-${process.pid}-${Date.now()}`;
|
|
21
|
+
await writeFile(tmp, data);
|
|
22
|
+
const { rename } = await import("node:fs/promises");
|
|
23
|
+
try {
|
|
24
|
+
await rename(tmp, dest);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
await rm(tmp, { force: true }).catch(() => undefined);
|
|
28
|
+
try {
|
|
29
|
+
await lstat(dest);
|
|
30
|
+
return hash;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return hash;
|
|
37
|
+
}
|
|
38
|
+
export async function readObject(hash, projectRoot = getProjectRoot()) {
|
|
39
|
+
return readFile(objectAbsPath(hash, projectRoot));
|
|
40
|
+
}
|
|
41
|
+
export async function objectExists(hash, projectRoot = getProjectRoot()) {
|
|
42
|
+
try {
|
|
43
|
+
await lstat(objectAbsPath(hash, projectRoot));
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=objects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/action/objects.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,qEAAqE;AAErE,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,WAAW,GAAG,cAAc,EAAE;IAE9B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,WAAW,GAAG,cAAc,EAAE;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACvD,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,WAAW,GAAG,cAAc,EAAE;IAE9B,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,WAAW,GAAG,cAAc,EAAE;IAE9B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ActionRecord } from "./types.js";
|
|
2
|
+
export declare function newActionId(): string;
|
|
3
|
+
export declare function actionPath(id: string, projectRoot?: string): string;
|
|
4
|
+
export declare function saveAction(action: ActionRecord, projectRoot?: string): Promise<void>;
|
|
5
|
+
export declare function loadAction(id: string, projectRoot?: string): Promise<ActionRecord>;
|
|
6
|
+
export declare function listActions(projectRoot?: string): Promise<ActionRecord[]>;
|
|
7
|
+
export declare function listIncompleteActions(projectRoot?: string): Promise<ActionRecord[]>;
|
|
8
|
+
export declare function markIncompleteFailed(projectRoot?: string): Promise<number>;
|
|
9
|
+
export interface McpSessionMeta {
|
|
10
|
+
id: string;
|
|
11
|
+
startedAt: string;
|
|
12
|
+
endedAt: string | null;
|
|
13
|
+
client: ActionRecord["client"];
|
|
14
|
+
actionCount: number;
|
|
15
|
+
nextSequence: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function newMcpSessionId(): string;
|
|
18
|
+
export declare function loadOrCreateMcpSession(projectRoot: string | undefined, client: ActionRecord["client"]): Promise<McpSessionMeta>;
|
|
19
|
+
export declare function saveMcpSession(meta: McpSessionMeta, projectRoot?: string): Promise<void>;
|
|
20
|
+
export declare function nextSequence(projectRoot: string | undefined, client: ActionRecord["client"]): Promise<{
|
|
21
|
+
session: McpSessionMeta;
|
|
22
|
+
sequence: number;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function endMcpSession(projectRoot?: string): Promise<McpSessionMeta | null>;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { mkdir, writeFile, readFile, readdir, rm, appendFile, } from "node:fs/promises";
|
|
3
|
+
import { getActionsDir, getMcpSessionsDir, getProjectRoot, PathSafetyError, } from "../paths.js";
|
|
4
|
+
import { randomBytes } from "node:crypto";
|
|
5
|
+
function assertSafeActionId(id) {
|
|
6
|
+
if (!/^act_[A-Za-z0-9]+$/.test(id)) {
|
|
7
|
+
throw new PathSafetyError(`Invalid action id: ${id}`);
|
|
8
|
+
}
|
|
9
|
+
return id;
|
|
10
|
+
}
|
|
11
|
+
export function newActionId() {
|
|
12
|
+
return `act_${randomBytes(8).toString("hex")}`;
|
|
13
|
+
}
|
|
14
|
+
async function writeJsonAtomic(file, data) {
|
|
15
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
16
|
+
const tmp = `${file}.tmp-${process.pid}`;
|
|
17
|
+
await writeFile(tmp, JSON.stringify(data, null, 2) + "\n", "utf8");
|
|
18
|
+
const { rename } = await import("node:fs/promises");
|
|
19
|
+
await rename(tmp, file);
|
|
20
|
+
}
|
|
21
|
+
export function actionPath(id, projectRoot = getProjectRoot()) {
|
|
22
|
+
return path.join(getActionsDir(projectRoot), `${assertSafeActionId(id)}.json`);
|
|
23
|
+
}
|
|
24
|
+
export async function saveAction(action, projectRoot = getProjectRoot()) {
|
|
25
|
+
await mkdir(getActionsDir(projectRoot), { recursive: true });
|
|
26
|
+
await writeJsonAtomic(actionPath(action.id, projectRoot), action);
|
|
27
|
+
await appendFile(path.join(getActionsDir(projectRoot), "index.jsonl"), JSON.stringify({
|
|
28
|
+
id: action.id,
|
|
29
|
+
sessionId: action.sessionId,
|
|
30
|
+
sequence: action.sequence,
|
|
31
|
+
tool: action.tool,
|
|
32
|
+
target: action.target,
|
|
33
|
+
status: action.status,
|
|
34
|
+
at: action.completedAt ?? action.requestedAt,
|
|
35
|
+
}) + "\n", "utf8").catch(async () => {
|
|
36
|
+
// index is best-effort; recreate if missing
|
|
37
|
+
await appendFile(path.join(getActionsDir(projectRoot), "index.jsonl"), JSON.stringify({
|
|
38
|
+
id: action.id,
|
|
39
|
+
sessionId: action.sessionId,
|
|
40
|
+
sequence: action.sequence,
|
|
41
|
+
tool: action.tool,
|
|
42
|
+
target: action.target,
|
|
43
|
+
status: action.status,
|
|
44
|
+
at: action.completedAt ?? action.requestedAt,
|
|
45
|
+
}) + "\n", "utf8");
|
|
46
|
+
});
|
|
47
|
+
await writeJsonAtomic(path.join(getActionsDir(projectRoot), "latest.json"), {
|
|
48
|
+
id: action.id,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export async function loadAction(id, projectRoot = getProjectRoot()) {
|
|
52
|
+
try {
|
|
53
|
+
const raw = await readFile(actionPath(id, projectRoot), "utf8");
|
|
54
|
+
return JSON.parse(raw);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
throw new PathSafetyError(`Action not found: ${id}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export async function listActions(projectRoot = getProjectRoot()) {
|
|
61
|
+
const dir = getActionsDir(projectRoot);
|
|
62
|
+
let names;
|
|
63
|
+
try {
|
|
64
|
+
names = await readdir(dir);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
const ids = names
|
|
70
|
+
.filter((n) => n.startsWith("act_") && n.endsWith(".json"))
|
|
71
|
+
.map((n) => n.replace(/\.json$/, ""));
|
|
72
|
+
const actions = [];
|
|
73
|
+
for (const id of ids) {
|
|
74
|
+
try {
|
|
75
|
+
actions.push(await loadAction(id, projectRoot));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
/* skip corrupt */
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
actions.sort((a, b) => a.sequence - b.sequence || a.id.localeCompare(b.id));
|
|
82
|
+
return actions;
|
|
83
|
+
}
|
|
84
|
+
export async function listIncompleteActions(projectRoot = getProjectRoot()) {
|
|
85
|
+
const all = await listActions(projectRoot);
|
|
86
|
+
return all.filter((a) => a.status === "PREPARED" || a.status === "EXECUTING");
|
|
87
|
+
}
|
|
88
|
+
export async function markIncompleteFailed(projectRoot = getProjectRoot()) {
|
|
89
|
+
// V5: skip AWAITING_APPROVAL; recover PREPARED/EXECUTING/UNDOING only.
|
|
90
|
+
const { recoverIncompleteTransactions } = await import("../core/engine.js");
|
|
91
|
+
return recoverIncompleteTransactions(projectRoot);
|
|
92
|
+
}
|
|
93
|
+
export function newMcpSessionId() {
|
|
94
|
+
return `msess_${randomBytes(4).toString("hex")}`;
|
|
95
|
+
}
|
|
96
|
+
export async function loadOrCreateMcpSession(projectRoot = getProjectRoot(), client) {
|
|
97
|
+
const dir = getMcpSessionsDir(projectRoot);
|
|
98
|
+
await mkdir(dir, { recursive: true });
|
|
99
|
+
const activePath = path.join(dir, "active.json");
|
|
100
|
+
try {
|
|
101
|
+
const raw = await readFile(activePath, "utf8");
|
|
102
|
+
const meta = JSON.parse(raw);
|
|
103
|
+
if (!meta.endedAt)
|
|
104
|
+
return meta;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
/* create */
|
|
108
|
+
}
|
|
109
|
+
const meta = {
|
|
110
|
+
id: newMcpSessionId(),
|
|
111
|
+
startedAt: new Date().toISOString(),
|
|
112
|
+
endedAt: null,
|
|
113
|
+
client,
|
|
114
|
+
actionCount: 0,
|
|
115
|
+
nextSequence: 1,
|
|
116
|
+
};
|
|
117
|
+
await writeJsonAtomic(activePath, meta);
|
|
118
|
+
await writeJsonAtomic(path.join(dir, `${meta.id}.json`), meta);
|
|
119
|
+
return meta;
|
|
120
|
+
}
|
|
121
|
+
export async function saveMcpSession(meta, projectRoot = getProjectRoot()) {
|
|
122
|
+
const dir = getMcpSessionsDir(projectRoot);
|
|
123
|
+
await writeJsonAtomic(path.join(dir, "active.json"), meta);
|
|
124
|
+
await writeJsonAtomic(path.join(dir, `${meta.id}.json`), meta);
|
|
125
|
+
}
|
|
126
|
+
export async function nextSequence(projectRoot = getProjectRoot(), client) {
|
|
127
|
+
const session = await loadOrCreateMcpSession(projectRoot, client);
|
|
128
|
+
const sequence = session.nextSequence;
|
|
129
|
+
session.nextSequence += 1;
|
|
130
|
+
session.actionCount += 1;
|
|
131
|
+
session.client = client;
|
|
132
|
+
await saveMcpSession(session, projectRoot);
|
|
133
|
+
return { session, sequence };
|
|
134
|
+
}
|
|
135
|
+
export async function endMcpSession(projectRoot = getProjectRoot()) {
|
|
136
|
+
const dir = getMcpSessionsDir(projectRoot);
|
|
137
|
+
try {
|
|
138
|
+
const raw = await readFile(path.join(dir, "active.json"), "utf8");
|
|
139
|
+
const meta = JSON.parse(raw);
|
|
140
|
+
meta.endedAt = new Date().toISOString();
|
|
141
|
+
await saveMcpSession(meta, projectRoot);
|
|
142
|
+
await rm(path.join(dir, "active.json"), { force: true });
|
|
143
|
+
return meta;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/action/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** V2/V3 mediated action types. */
|
|
2
|
+
import type { SandboxName } from "../paths.js";
|
|
3
|
+
export type ActionStatus = "PREPARED" | "EXECUTING" | "COMPLETED" | "FAILED" | "UNDONE" | "CONFLICTED";
|
|
4
|
+
export type ActionReversibility = "REVERSIBLE" | "COMPENSABLE" | "IRREVERSIBLE";
|
|
5
|
+
export type ActionTool = "rewind_write_file" | "rewind_create_file" | "rewind_delete_file" | "rewind_move_file" | "rewind_create_directory" | "rewind_delete_directory";
|
|
6
|
+
export type EntrySnapshotKind = "file" | "directory" | "symlink" | "absent";
|
|
7
|
+
export interface EntrySnapshot {
|
|
8
|
+
exists: boolean;
|
|
9
|
+
kind: EntrySnapshotKind;
|
|
10
|
+
hash: string | null;
|
|
11
|
+
size: number;
|
|
12
|
+
mode: number | null;
|
|
13
|
+
linkTarget: string | null;
|
|
14
|
+
/** Content-addressable object id (SHA-256) when a file blob was stored. */
|
|
15
|
+
objectId: string | null;
|
|
16
|
+
/** For directory delete: relative paths of captured subtree entries. */
|
|
17
|
+
subtree?: SubtreeEntry[];
|
|
18
|
+
}
|
|
19
|
+
export interface SubtreeEntry {
|
|
20
|
+
path: string;
|
|
21
|
+
kind: "file" | "directory" | "symlink";
|
|
22
|
+
hash: string | null;
|
|
23
|
+
size: number;
|
|
24
|
+
mode: number;
|
|
25
|
+
linkTarget: string | null;
|
|
26
|
+
objectId: string | null;
|
|
27
|
+
}
|
|
28
|
+
export interface McpClientInfo {
|
|
29
|
+
name: string;
|
|
30
|
+
version: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ActionRecord {
|
|
33
|
+
id: string;
|
|
34
|
+
version: 2;
|
|
35
|
+
sessionId: string;
|
|
36
|
+
sequence: number;
|
|
37
|
+
source: "MCP";
|
|
38
|
+
tool: ActionTool;
|
|
39
|
+
/** Which approved sandbox this action targeted. Absent ⇒ sandbox-test-project. */
|
|
40
|
+
sandbox?: SandboxName;
|
|
41
|
+
requestedAt: string;
|
|
42
|
+
completedAt: string | null;
|
|
43
|
+
/** Primary target path (POSIX relative to sandbox). */
|
|
44
|
+
target: string;
|
|
45
|
+
/** Secondary path for moves. */
|
|
46
|
+
targetSecondary: string | null;
|
|
47
|
+
before: EntrySnapshot;
|
|
48
|
+
after: EntrySnapshot;
|
|
49
|
+
/** Destination before-state for moves (overwrite protection). */
|
|
50
|
+
beforeSecondary: EntrySnapshot | null;
|
|
51
|
+
afterSecondary: EntrySnapshot | null;
|
|
52
|
+
reversibility: ActionReversibility;
|
|
53
|
+
status: ActionStatus;
|
|
54
|
+
client: McpClientInfo | {
|
|
55
|
+
name: "UNKNOWN_MCP_CLIENT";
|
|
56
|
+
version: "unknown";
|
|
57
|
+
};
|
|
58
|
+
error: string | null;
|
|
59
|
+
undoneAt: string | null;
|
|
60
|
+
undoVerification: {
|
|
61
|
+
expectedAfterHash: string | null;
|
|
62
|
+
actualBeforeUndoHash: string | null;
|
|
63
|
+
restoredHash: string | null;
|
|
64
|
+
ok: boolean;
|
|
65
|
+
} | null;
|
|
66
|
+
conflict: {
|
|
67
|
+
expectedHash: string | null;
|
|
68
|
+
actualHash: string | null;
|
|
69
|
+
message: string;
|
|
70
|
+
} | null;
|
|
71
|
+
}
|
|
72
|
+
export interface UndoResult {
|
|
73
|
+
ok: boolean;
|
|
74
|
+
conflict: boolean;
|
|
75
|
+
action: ActionRecord;
|
|
76
|
+
message: string;
|
|
77
|
+
}
|
|
78
|
+
export interface MediateContext {
|
|
79
|
+
projectRoot: string;
|
|
80
|
+
sessionId: string;
|
|
81
|
+
client: ActionRecord["client"];
|
|
82
|
+
/** Defaults to sandbox-test-project when omitted. */
|
|
83
|
+
sandboxName?: SandboxName;
|
|
84
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/action/types.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Undo a COMPLETED mediated action — delegates to V5 transaction engine.
|
|
3
|
+
* Conflict-aware: refuses when current != recorded after.
|
|
4
|
+
*/
|
|
5
|
+
import type { UndoResult } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Undo a COMPLETED mediated action iff current state still equals action.after.
|
|
8
|
+
* Never blindly overwrite newer work.
|
|
9
|
+
*/
|
|
10
|
+
export declare function undoAction(actionId: string, projectRoot: string): Promise<UndoResult>;
|
|
11
|
+
export declare function formatUndoConflict(result: UndoResult): string;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Undo a COMPLETED mediated action — delegates to V5 transaction engine.
|
|
3
|
+
* Conflict-aware: refuses when current != recorded after.
|
|
4
|
+
*/
|
|
5
|
+
import { PathSafetyError } from "../paths.js";
|
|
6
|
+
import { undoTransaction, loadTransaction, transactionToLegacyAction, } from "../core/engine.js";
|
|
7
|
+
/**
|
|
8
|
+
* Undo a COMPLETED mediated action iff current state still equals action.after.
|
|
9
|
+
* Never blindly overwrite newer work.
|
|
10
|
+
*/
|
|
11
|
+
export async function undoAction(actionId, projectRoot) {
|
|
12
|
+
try {
|
|
13
|
+
await loadTransaction(actionId, projectRoot);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
throw new PathSafetyError(`Action not found: ${actionId}`);
|
|
17
|
+
}
|
|
18
|
+
const result = await undoTransaction(actionId, projectRoot);
|
|
19
|
+
const action = transactionToLegacyAction(result.transaction);
|
|
20
|
+
// Ensure conflict fields mirror v2 shape for callers
|
|
21
|
+
if (result.conflict && result.transaction.undo.conflict) {
|
|
22
|
+
action.status = "CONFLICTED";
|
|
23
|
+
action.conflict = {
|
|
24
|
+
expectedHash: result.transaction.undo.conflict.expected,
|
|
25
|
+
actualHash: result.transaction.undo.conflict.actual,
|
|
26
|
+
message: result.transaction.undo.conflict.message,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
ok: result.ok,
|
|
31
|
+
conflict: result.conflict,
|
|
32
|
+
action,
|
|
33
|
+
message: result.message,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function formatUndoConflict(result) {
|
|
37
|
+
if (result.conflict && result.action.conflict) {
|
|
38
|
+
return result.action.conflict.message;
|
|
39
|
+
}
|
|
40
|
+
return result.message;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=undo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undo.js","sourceRoot":"","sources":["../../../src/action/undo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,eAAe,EACf,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAgB,EAChB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,eAAe,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAiB,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE3E,qDAAqD;IACrD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxD,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;QAC7B,MAAM,CAAC,QAAQ,GAAG;YAChB,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;YACvD,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YACnD,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO;SAClD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FilesystemAdapter — wraps proven V2 FS mediation (capture / mutate / undo).
|
|
3
|
+
* Does not duplicate mutation paths; reuses action/* primitives.
|
|
4
|
+
*/
|
|
5
|
+
import type { AdapterStatePayload, Transaction, TransactionIntent, TransactionTarget } from "../core/types.js";
|
|
6
|
+
import type { AdapterCompareResult, AdapterDescribe, AdapterExecuteResult, AdapterPrepareResult, AdapterReverseResult, AdapterValidation, RewindAdapter } from "./types.js";
|
|
7
|
+
export type FilesystemOperation = "write" | "create" | "delete" | "move" | "create_directory" | "delete_directory";
|
|
8
|
+
export interface FilesystemWriteInput {
|
|
9
|
+
path: string;
|
|
10
|
+
content: string;
|
|
11
|
+
createOnly?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface FilesystemDeleteInput {
|
|
14
|
+
path: string;
|
|
15
|
+
}
|
|
16
|
+
export interface FilesystemMoveInput {
|
|
17
|
+
from: string;
|
|
18
|
+
to: string;
|
|
19
|
+
}
|
|
20
|
+
export interface FilesystemDirInput {
|
|
21
|
+
path: string;
|
|
22
|
+
}
|
|
23
|
+
export declare class FilesystemAdapter implements RewindAdapter {
|
|
24
|
+
readonly id = "filesystem";
|
|
25
|
+
identifyTarget(intent: TransactionIntent): TransactionTarget;
|
|
26
|
+
validateOperation(intent: TransactionIntent): Promise<AdapterValidation>;
|
|
27
|
+
inspectCurrent(intent: TransactionIntent): Promise<AdapterStatePayload>;
|
|
28
|
+
captureBefore(intent: TransactionIntent): Promise<AdapterPrepareResult>;
|
|
29
|
+
execute(intent: TransactionIntent, txn: Transaction): Promise<AdapterExecuteResult>;
|
|
30
|
+
captureAfter(intent: TransactionIntent, txn: Transaction): Promise<AdapterStatePayload>;
|
|
31
|
+
compareExpectedCurrent(txn: Transaction): Promise<AdapterCompareResult>;
|
|
32
|
+
reverse(txn: Transaction): Promise<AdapterReverseResult>;
|
|
33
|
+
describe(txn: Transaction): AdapterDescribe;
|
|
34
|
+
}
|
|
35
|
+
export declare const filesystemAdapter: FilesystemAdapter;
|