yuangs 2.38.0 → 2.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/Capabilities.js +39 -0
  2. package/dist/Governance.d.ts +9 -0
  3. package/dist/Governance.js +25 -0
  4. package/dist/Kernel.d.ts +13 -0
  5. package/dist/Kernel.js +53 -0
  6. package/dist/agent/AgentRuntime.d.ts +6 -0
  7. package/dist/agent/AgentRuntime.js +78 -0
  8. package/dist/agent/AgentRuntime.js.map +1 -0
  9. package/dist/agent/governance/bridge.d.ts +5 -0
  10. package/dist/agent/governance/bridge.js +38 -0
  11. package/dist/agent/governance/bridge.js.map +1 -0
  12. package/dist/agent/governance/core.d.ts +19 -0
  13. package/dist/agent/governance/core.js +21 -0
  14. package/dist/agent/governance/core.js.map +1 -0
  15. package/dist/agent/governance/ledger.d.ts +7 -0
  16. package/dist/agent/governance/ledger.js +22 -0
  17. package/dist/agent/governance/ledger.js.map +1 -0
  18. package/dist/agent/governance/sandbox/core.as.d.ts +11 -0
  19. package/dist/agent/governance/sandbox/core.as.js +33 -0
  20. package/dist/agent/governance/sandbox/core.as.js.map +1 -0
  21. package/dist/agent/governance.d.ts +11 -8
  22. package/dist/agent/governance.js +48 -135
  23. package/dist/agent/governance.js.map +1 -1
  24. package/dist/agent/index.d.ts +2 -6
  25. package/dist/agent/index.js +4 -10
  26. package/dist/agent/index.js.map +1 -1
  27. package/dist/agent/llmAdapter.d.ts +1 -1
  28. package/dist/agent/llmAdapter.js +4 -5
  29. package/dist/agent/llmAdapter.js.map +1 -1
  30. package/dist/agent/skills.d.ts +2 -4
  31. package/dist/agent/skills.js.map +1 -1
  32. package/dist/agent/types.d.ts +1 -2
  33. package/dist/cli.js +10 -9
  34. package/dist/cli.js.map +1 -1
  35. package/dist/legacy/governance/GovernanceEngine.d.ts +20 -0
  36. package/dist/legacy/governance/GovernanceEngine.js +95 -0
  37. package/dist/legacy/governance/GovernanceEngine.js.map +1 -0
  38. package/dist/legacy/governance/GovernedAction.d.ts +107 -0
  39. package/dist/legacy/governance/GovernedAction.js +9 -0
  40. package/dist/legacy/governance/GovernedAction.js.map +1 -0
  41. package/dist/legacy/governance/actions/CodeChangeAction.d.ts +28 -0
  42. package/dist/legacy/governance/actions/CodeChangeAction.js +139 -0
  43. package/dist/legacy/governance/actions/CodeChangeAction.js.map +1 -0
  44. package/dist/legacy/governance/capability/token.d.ts +45 -0
  45. package/dist/legacy/governance/capability/token.js +103 -0
  46. package/dist/legacy/governance/capability/token.js.map +1 -0
  47. package/dist/legacy/governance/commands/diffEdit.d.ts +2 -0
  48. package/dist/legacy/governance/commands/diffEdit.js +245 -0
  49. package/dist/legacy/governance/commands/diffEdit.js.map +1 -0
  50. package/dist/legacy/governance/execution/sandbox.d.ts +12 -0
  51. package/dist/legacy/governance/execution/sandbox.js +76 -0
  52. package/dist/legacy/governance/execution/sandbox.js.map +1 -0
  53. package/dist/legacy/governance/fsm/stateMachine.d.ts +40 -0
  54. package/dist/legacy/governance/fsm/stateMachine.js +93 -0
  55. package/dist/legacy/governance/fsm/stateMachine.js.map +1 -0
  56. package/dist/legacy/governance/index.d.ts +9 -0
  57. package/dist/legacy/governance/index.js +26 -0
  58. package/dist/legacy/governance/index.js.map +1 -0
  59. package/dist/legacy/governance/review/diffParser.d.ts +12 -0
  60. package/dist/legacy/governance/review/diffParser.js +61 -0
  61. package/dist/legacy/governance/review/diffParser.js.map +1 -0
  62. package/dist/legacy/governance/review/render.d.ts +5 -0
  63. package/dist/legacy/governance/review/render.js +58 -0
  64. package/dist/legacy/governance/review/render.js.map +1 -0
  65. package/dist/legacy/governance/storage/store.d.ts +16 -0
  66. package/dist/legacy/governance/storage/store.js +110 -0
  67. package/dist/legacy/governance/storage/store.js.map +1 -0
  68. package/package.json +7 -5
  69. package/dist/agent/AgentPipeline.js.map +0 -1
  70. package/dist/agent/fsm.js.map +0 -1
  71. package/dist/agent/intent.js.map +0 -1
  72. package/dist/agent/interpret.js.map +0 -1
  73. package/dist/agent/loop.js.map +0 -1
  74. package/dist/agent/plan.js.map +0 -1
  75. package/dist/agent/planExecutor.js.map +0 -1
  76. package/dist/agent/record.js.map +0 -1
  77. package/dist/agent/replay.js.map +0 -1
  78. package/dist/governance/GovernanceEngine.js.map +0 -1
  79. package/dist/governance/GovernedAction.js.map +0 -1
  80. package/dist/governance/actions/CodeChangeAction.js.map +0 -1
  81. package/dist/governance/capability/token.js.map +0 -1
  82. package/dist/governance/commands/diffEdit.js.map +0 -1
  83. package/dist/governance/execution/sandbox.js.map +0 -1
  84. package/dist/governance/fsm/stateMachine.js.map +0 -1
  85. package/dist/governance/index.js.map +0 -1
  86. package/dist/governance/review/diffParser.js.map +0 -1
  87. package/dist/governance/review/render.js.map +0 -1
  88. package/dist/governance/storage/store.js.map +0 -1
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CodeChangeAction = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ class CodeChangeAction {
9
+ id;
10
+ payload;
11
+ rationale;
12
+ provenance;
13
+ kind = "code_change";
14
+ state = "DRAFT";
15
+ updatedAt = Date.now();
16
+ constructor(id, payload, rationale, provenance) {
17
+ this.id = id;
18
+ this.payload = payload;
19
+ this.rationale = rationale;
20
+ this.provenance = provenance;
21
+ this.updatedAt = provenance.createdAt;
22
+ }
23
+ propose() {
24
+ if (this.state !== "DRAFT") {
25
+ throw new Error(`Governance violation: propose() called from ${this.state}, must be DRAFT`);
26
+ }
27
+ this.state = "PROPOSED";
28
+ this.updatedAt = Date.now();
29
+ }
30
+ approve(by) {
31
+ if (this.state !== "PROPOSED") {
32
+ throw new Error(`Governance violation: approve() called from ${this.state}, must be PROPOSED`);
33
+ }
34
+ if (by !== "human") {
35
+ throw new Error(`Governance violation: only human can approve, got ${by}`);
36
+ }
37
+ this.state = "APPROVED";
38
+ this.updatedAt = Date.now();
39
+ }
40
+ reject(reason) {
41
+ if (this.state === "REJECTED") {
42
+ throw new Error(`Governance violation: reject() called from ${this.state}, already rejected`);
43
+ }
44
+ this.state = "REJECTED";
45
+ this.updatedAt = Date.now();
46
+ }
47
+ async execute(ctx) {
48
+ if (this.state !== "APPROVED") {
49
+ throw new Error(`Governance violation: execute() called from ${this.state}, must be APPROVED`);
50
+ }
51
+ const startTime = Date.now();
52
+ try {
53
+ await ctx.executor.applyDiff(this.payload.diff);
54
+ this.state = "EXECUTED";
55
+ this.updatedAt = Date.now();
56
+ return {
57
+ ok: true,
58
+ executedAt: Date.now(),
59
+ snapshotAfter: ctx.snapshot,
60
+ };
61
+ }
62
+ catch (error) {
63
+ this.state = "REJECTED";
64
+ this.updatedAt = Date.now();
65
+ return {
66
+ ok: false,
67
+ error: error instanceof Error ? error.message : String(error),
68
+ };
69
+ }
70
+ }
71
+ async observe() {
72
+ if (this.state !== "EXECUTED") {
73
+ throw new Error(`Governance violation: observe() called from ${this.state}, must be EXECUTED`);
74
+ }
75
+ const { execSync } = require("child_process");
76
+ const changedFiles = execSync("git diff --name-only", {
77
+ encoding: "utf-8",
78
+ })
79
+ .trim()
80
+ .split("\n")
81
+ .filter((f) => f);
82
+ const gitDiff = execSync("git diff", { encoding: "utf-8" });
83
+ this.state = "OBSERVED";
84
+ this.updatedAt = Date.now();
85
+ return {
86
+ gitDiff,
87
+ changedFiles,
88
+ executionTime: Date.now(),
89
+ };
90
+ }
91
+ verify(obs) {
92
+ if (this.state !== "OBSERVED") {
93
+ throw new Error(`Governance violation: verify() called from ${this.state}, must be OBSERVED`);
94
+ }
95
+ const changedFiles = new Set(obs.changedFiles);
96
+ const declaredFiles = new Set(this.payload.files);
97
+ const extraFiles = obs.changedFiles.filter((f) => !declaredFiles.has(f));
98
+ if (extraFiles.length > 0) {
99
+ throw new Error(`Governance violation: execution modified undeclared files: ${extraFiles.join(", ")}`);
100
+ }
101
+ this.state = "VERIFIED";
102
+ this.updatedAt = Date.now();
103
+ return true;
104
+ }
105
+ summarize() {
106
+ const changeSize = this.calculateChangeSize();
107
+ return {
108
+ id: this.id,
109
+ kind: this.kind,
110
+ state: this.state,
111
+ rationale: this.rationale,
112
+ filesAffected: this.payload.files,
113
+ changeSize,
114
+ };
115
+ }
116
+ calculateChangeSize() {
117
+ let additions = 0;
118
+ let deletions = 0;
119
+ for (const line of this.payload.diff.split("\n")) {
120
+ if (line.startsWith("+") && !line.startsWith("+++"))
121
+ additions++;
122
+ if (line.startsWith("-") && !line.startsWith("---"))
123
+ deletions++;
124
+ }
125
+ return additions + deletions;
126
+ }
127
+ static create(payload, rationale, agentId, planHash, parentAction) {
128
+ const id = crypto_1.default.randomUUID();
129
+ const provenance = {
130
+ agentId,
131
+ planHash,
132
+ parentAction,
133
+ createdAt: Date.now(),
134
+ };
135
+ return new CodeChangeAction(id, payload, rationale, provenance);
136
+ }
137
+ }
138
+ exports.CodeChangeAction = CodeChangeAction;
139
+ //# sourceMappingURL=CodeChangeAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeChangeAction.js","sourceRoot":"","sources":["../../../../src/legacy/governance/actions/CodeChangeAction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export type Right = {
2
+ type: "APPLY_DIFF";
3
+ } | {
4
+ type: "READ_FILE";
5
+ path: string;
6
+ } | {
7
+ type: "EXECUTE_ACTION";
8
+ actionId: string;
9
+ };
10
+ export type Scope = {
11
+ type: "ACTION";
12
+ id: string;
13
+ } | {
14
+ type: "PATH_PREFIX";
15
+ prefix: string;
16
+ } | {
17
+ type: "REPO";
18
+ };
19
+ export interface Capability {
20
+ id: string;
21
+ subject: string;
22
+ rights: Right[];
23
+ scope: Scope;
24
+ issuedAt: number;
25
+ expiresAt: number;
26
+ maxUses: number;
27
+ used: number;
28
+ signature: string;
29
+ }
30
+ export declare function sign(data: string): string;
31
+ export declare function verify(cap: Capability): boolean;
32
+ export declare function issue(input: {
33
+ subject: string;
34
+ rights: Right[];
35
+ scope: Scope;
36
+ ttlMs: number;
37
+ maxUses?: number;
38
+ }): Capability;
39
+ export declare function checkCapability(cap: Capability, want: Right, context: {
40
+ actionId?: string;
41
+ path?: string;
42
+ }): void;
43
+ export declare function attenuate(cap: Capability, limits: Partial<Pick<Capability, "expiresAt" | "maxUses">>): Capability;
44
+ export declare function revoke(capId: string): void;
45
+ export declare function checkRevoked(cap: Capability): void;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.sign = sign;
7
+ exports.verify = verify;
8
+ exports.issue = issue;
9
+ exports.checkCapability = checkCapability;
10
+ exports.attenuate = attenuate;
11
+ exports.revoke = revoke;
12
+ exports.checkRevoked = checkRevoked;
13
+ const crypto_1 = __importDefault(require("crypto"));
14
+ const SECRET = process.env.CAP_SECRET || "default-secret-change-in-production";
15
+ function sign(data) {
16
+ return crypto_1.default
17
+ .createHmac("sha256", SECRET)
18
+ .update(data)
19
+ .digest("hex");
20
+ }
21
+ function verify(cap) {
22
+ const { signature, ...rest } = cap;
23
+ const payload = JSON.stringify(rest);
24
+ const computed = sign(payload);
25
+ return computed === signature;
26
+ }
27
+ function issue(input) {
28
+ const base = {
29
+ id: crypto_1.default.randomUUID(),
30
+ subject: input.subject,
31
+ rights: input.rights,
32
+ scope: input.scope,
33
+ issuedAt: Date.now(),
34
+ expiresAt: Date.now() + input.ttlMs,
35
+ maxUses: input.maxUses ?? 1,
36
+ used: 0,
37
+ };
38
+ const payload = JSON.stringify(base);
39
+ return {
40
+ ...base,
41
+ signature: sign(payload),
42
+ };
43
+ }
44
+ function checkCapability(cap, want, context) {
45
+ if (!verify(cap)) {
46
+ throw new Error("Invalid capability: signature verification failed");
47
+ }
48
+ if (Date.now() > cap.expiresAt) {
49
+ throw new Error("Capability expired");
50
+ }
51
+ if (cap.used >= cap.maxUses) {
52
+ throw new Error("Capability exhausted (max uses reached)");
53
+ }
54
+ const rightMatch = cap.rights.some((r) => JSON.stringify(r) === JSON.stringify(want));
55
+ if (!rightMatch) {
56
+ throw new Error(`Capability does not grant right: ${JSON.stringify(want)}`);
57
+ }
58
+ if (cap.scope.type === "ACTION" && context.actionId !== cap.scope.id) {
59
+ throw new Error(`Scope violation: capability scoped to action ${cap.scope.id}, used on ${context.actionId}`);
60
+ }
61
+ if (cap.scope.type === "PATH_PREFIX" &&
62
+ context.path &&
63
+ !context.path.startsWith(cap.scope.prefix)) {
64
+ throw new Error(`Scope violation: capability scoped to ${cap.scope.prefix}, used on ${context.path}`);
65
+ }
66
+ cap.used++;
67
+ }
68
+ function attenuate(cap, limits) {
69
+ if (!verify(cap)) {
70
+ throw new Error("Cannot attenuate invalid capability");
71
+ }
72
+ const reduced = {
73
+ ...cap,
74
+ expiresAt: Math.min(cap.expiresAt, limits.expiresAt ?? cap.expiresAt),
75
+ maxUses: Math.min(cap.maxUses, limits.maxUses ?? cap.maxUses),
76
+ used: 0,
77
+ signature: "",
78
+ };
79
+ const payload = JSON.stringify({
80
+ id: reduced.id,
81
+ subject: reduced.subject,
82
+ rights: reduced.rights,
83
+ scope: reduced.scope,
84
+ issuedAt: reduced.issuedAt,
85
+ expiresAt: reduced.expiresAt,
86
+ maxUses: reduced.maxUses,
87
+ used: 0,
88
+ });
89
+ return {
90
+ ...reduced,
91
+ signature: sign(payload),
92
+ };
93
+ }
94
+ const revokedCaps = new Set();
95
+ function revoke(capId) {
96
+ revokedCaps.add(capId);
97
+ }
98
+ function checkRevoked(cap) {
99
+ if (revokedCaps.has(cap.id)) {
100
+ throw new Error(`Capability ${cap.id} has been revoked`);
101
+ }
102
+ }
103
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/legacy/governance/capability/token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function createDiffEditCommand(): Command;
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createDiffEditCommand = createDiffEditCommand;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const child_process_1 = require("child_process");
11
+ const GovernanceEngine_1 = require("../GovernanceEngine");
12
+ const CodeChangeAction_1 = require("../actions/CodeChangeAction");
13
+ const diffParser_1 = require("../review/diffParser");
14
+ const render_1 = require("../review/render");
15
+ const sandbox_1 = require("../execution/sandbox");
16
+ const store_1 = require("../storage/store");
17
+ const engine = new GovernanceEngine_1.GovernanceEngine();
18
+ (0, store_1.auditActions)((0, store_1.loadActions)());
19
+ function collectGitResult(commitHash) {
20
+ try {
21
+ const output = (0, child_process_1.execSync)(`git show --stat --oneline ${commitHash}`, {
22
+ encoding: "utf-8",
23
+ });
24
+ const files = [];
25
+ let insertions = 0;
26
+ let deletions = 0;
27
+ for (const line of output.split("\n")) {
28
+ const fileMatch = line.match(/^\s*(.+?)\s+\|\s+\d+/);
29
+ if (fileMatch) {
30
+ files.push(fileMatch[1].trim());
31
+ }
32
+ const insMatch = line.match(/(\d+)\s+insertions?\(\+\)/);
33
+ const delMatch = line.match(/(\d+)\s+deletions?\(-\)/);
34
+ if (insMatch)
35
+ insertions = parseInt(insMatch[1], 10);
36
+ if (delMatch)
37
+ deletions = parseInt(delMatch[1], 10);
38
+ }
39
+ return {
40
+ commits: commitHash ? 1 : 0,
41
+ files,
42
+ insertions,
43
+ deletions,
44
+ };
45
+ }
46
+ catch {
47
+ return {
48
+ commits: 1,
49
+ files: [],
50
+ insertions: 0,
51
+ deletions: 0,
52
+ warning: "Unable to derive git stats",
53
+ };
54
+ }
55
+ }
56
+ class GitExecutor {
57
+ async applyDiff(diff) {
58
+ // execSync is imported at top level
59
+ try {
60
+ (0, child_process_1.execSync)("git apply --index", {
61
+ input: diff,
62
+ stdio: "pipe",
63
+ });
64
+ }
65
+ catch (error) {
66
+ throw new Error(`Failed to apply diff: ${error}`);
67
+ }
68
+ }
69
+ async readFile(path) {
70
+ return fs_1.default.promises.readFile(path, "utf-8");
71
+ }
72
+ async writeFile(path, content) {
73
+ await fs_1.default.promises.writeFile(path, content, "utf-8");
74
+ }
75
+ async deleteFile(path) {
76
+ await fs_1.default.promises.unlink(path);
77
+ }
78
+ }
79
+ function createDiffEditCommand() {
80
+ const program = new commander_1.Command("diff-edit");
81
+ program
82
+ .description("Governed code change CLI - review before executing")
83
+ .version("1.0.0");
84
+ program
85
+ .command("propose <diff-file>")
86
+ .option("-r, --rationale <text>", "Why this change is needed")
87
+ .action(async (diffFile, options) => {
88
+ if (!fs_1.default.existsSync(diffFile)) {
89
+ console.error(chalk_1.default.red(`Diff file not found: ${diffFile}`));
90
+ process.exit(1);
91
+ }
92
+ const diff = fs_1.default.readFileSync(diffFile, "utf-8");
93
+ const rationale = options.rationale || "Manual diff submission";
94
+ const files = (0, diffParser_1.extractFilesFromDiff)(diff);
95
+ const payload = { files, diff };
96
+ const action = CodeChangeAction_1.CodeChangeAction.create(payload, rationale, "cli", "manual-" + Date.now());
97
+ action.propose();
98
+ const actions = (0, store_1.loadActions)();
99
+ actions[action.id] = action;
100
+ (0, store_1.saveActions)(actions);
101
+ console.log(chalk_1.default.green(`[PROPOSED] ${action.id}`));
102
+ console.log(chalk_1.default.cyan("Files:"));
103
+ for (const f of files) {
104
+ console.log(` - ${chalk_1.default.yellow(f)}`);
105
+ }
106
+ console.log(`\n${chalk_1.default.bold("Rationale:")} ${rationale}`);
107
+ });
108
+ program
109
+ .command("list")
110
+ .description("List all proposed actions")
111
+ .action(() => {
112
+ const actions = (0, store_1.loadActions)();
113
+ console.log(chalk_1.default.bold("\n" + "=".repeat(60)));
114
+ console.log(chalk_1.default.bold("Actions"));
115
+ console.log(chalk_1.default.bold("=".repeat(60)) + "\n");
116
+ const table = [];
117
+ for (const [id, a] of Object.entries(actions)) {
118
+ table.push({
119
+ id,
120
+ kind: a.kind,
121
+ state: a.state,
122
+ rationale: a.rationale.substring(0, 50),
123
+ });
124
+ }
125
+ console.table(table);
126
+ });
127
+ program
128
+ .command("approve <id>")
129
+ .description("Review and approve a proposed action")
130
+ .action(async (id) => {
131
+ const actions = (0, store_1.loadActions)();
132
+ const action = actions[id];
133
+ if (!action) {
134
+ console.error(chalk_1.default.red(`Action not found: ${id}`));
135
+ process.exit(1);
136
+ }
137
+ const files = (0, diffParser_1.parseUnifiedDiff)(action.payload.diff);
138
+ (0, render_1.renderDiffForReview)(files, action.rationale);
139
+ const { level, warnings } = (0, diffParser_1.assessRisk)(files);
140
+ (0, render_1.renderRiskAssessment)(level, warnings);
141
+ const approved = await (0, render_1.promptForApproval)();
142
+ if (!approved) {
143
+ console.log(chalk_1.default.red("\n[REJECTED] Approval aborted"));
144
+ action.state = "REJECTED";
145
+ (0, store_1.saveActions)(actions);
146
+ return;
147
+ }
148
+ action.state = "APPROVED";
149
+ (0, store_1.saveActions)(actions);
150
+ console.log(chalk_1.default.green(`\n[APPROVED] ${id}`));
151
+ });
152
+ program
153
+ .command("exec <id>")
154
+ .description("Execute an approved action")
155
+ .action(async (id) => {
156
+ const actions = (0, store_1.loadActions)();
157
+ const action = actions[id];
158
+ if (!action) {
159
+ console.error(chalk_1.default.red(`Action not found: ${id}`));
160
+ process.exit(1);
161
+ }
162
+ if (action.state !== "APPROVED") {
163
+ console.error(chalk_1.default.red(`Action not approved (state: ${action.state})`));
164
+ process.exit(1);
165
+ }
166
+ console.log(chalk_1.default.cyan(`\n[EXECUTING] ${id}...`));
167
+ const snapshot = (0, sandbox_1.createSnapshot)();
168
+ const executor = new GitExecutor();
169
+ const ctx = { executor, snapshot: snapshot.id };
170
+ try {
171
+ // === PRE-EXEC: Snapshot Validation ===
172
+ await executor.applyDiff(action.payload.diff);
173
+ const changedFiles = (0, sandbox_1.getChangedFiles)();
174
+ (0, sandbox_1.assertNoExtraChanges)(action.payload.files, changedFiles);
175
+ const snapshotResult = {
176
+ changedFiles,
177
+ unexpectedFiles: changedFiles.filter((f) => !action.payload.files.includes(f)),
178
+ matchedBySandbox: changedFiles.length === action.payload.files.length,
179
+ };
180
+ // === EXEC: Commit ===
181
+ (0, sandbox_1.commitChanges)(`EXECUTED action ${id}`, snapshot.id);
182
+ const commitHash = (0, child_process_1.execSync)("git rev-parse HEAD", {
183
+ encoding: "utf-8",
184
+ }).trim();
185
+ action.state = "EXECUTED";
186
+ action.executedAt = Date.now();
187
+ (0, store_1.saveActions)(actions);
188
+ // === POST-EXEC: Reporting ===
189
+ const gitResult = collectGitResult(commitHash);
190
+ console.log(chalk_1.default.green("\n[EXECUTED]"));
191
+ console.log(chalk_1.default.green(`Action ID: ${id}`));
192
+ console.log(chalk_1.default.cyan("\nSnapshot Verification (pre-commit):"));
193
+ console.log(chalk_1.default.cyan(` - Files changed: ${snapshotResult.changedFiles.length}`));
194
+ for (const f of snapshotResult.changedFiles) {
195
+ console.log(chalk_1.default.cyan(` - ${f}`));
196
+ }
197
+ if (snapshotResult.unexpectedFiles.length > 0) {
198
+ console.log(chalk_1.default.yellow(" - Unexpected files:"));
199
+ for (const f of snapshotResult.unexpectedFiles) {
200
+ console.log(chalk_1.default.yellow(` - ${f}`));
201
+ }
202
+ }
203
+ console.log(chalk_1.default.cyan(` - Status: ${snapshotResult.matchedBySandbox ? "✅ MATCHED" : "⚠️ DEVIATION"}`));
204
+ console.log(chalk_1.default.cyan("\nGit Result:"));
205
+ console.log(chalk_1.default.cyan(` - Commit: ${commitHash.substring(0, 7)}`));
206
+ console.log(chalk_1.default.cyan(` - Files changed: ${gitResult.files.length}`));
207
+ console.log(chalk_1.default.cyan(` - Insertions: ${gitResult.insertions}`));
208
+ console.log(chalk_1.default.cyan(` - Deletions: ${gitResult.deletions}`));
209
+ console.log(chalk_1.default.green("\nStatus:"));
210
+ console.log(chalk_1.default.green(" ✅ EXECUTED (validated + committed)"));
211
+ }
212
+ catch (error) {
213
+ console.error(chalk_1.default.red(`\n[FAILED] ${error}`));
214
+ console.log(chalk_1.default.yellow("\nRolling back to snapshot..."));
215
+ (0, sandbox_1.rollbackToSnapshot)(snapshot.id);
216
+ action.state = "REJECTED";
217
+ (0, store_1.saveActions)(actions);
218
+ console.log(chalk_1.default.cyan("\nRolled back successfully"));
219
+ process.exit(1);
220
+ }
221
+ });
222
+ program
223
+ .command("status <id>")
224
+ .description("Show status of an action")
225
+ .action((id) => {
226
+ const actions = (0, store_1.loadActions)();
227
+ const action = actions[id];
228
+ if (!action) {
229
+ console.error(chalk_1.default.red(`Action not found: ${id}`));
230
+ process.exit(1);
231
+ }
232
+ console.log(chalk_1.default.bold("\n" + "=".repeat(60)));
233
+ console.log(chalk_1.default.bold(`Action: ${id}`));
234
+ console.log(chalk_1.default.bold("=".repeat(60)) + "\n");
235
+ console.log(`${chalk_1.default.bold("Kind:")} ${action.kind}`);
236
+ console.log(`${chalk_1.default.bold("State:")} ${action.state}`);
237
+ console.log(`${chalk_1.default.bold("Rationale:")} ${action.rationale}`);
238
+ console.log(`${chalk_1.default.bold("Updated:")} ${new Date(action.updatedAt).toLocaleString()}`);
239
+ if (action.state === "EXECUTED" && action.executedAt) {
240
+ console.log(`${chalk_1.default.bold("Executed:")} ${new Date(action.executedAt).toLocaleString()}`);
241
+ }
242
+ });
243
+ return program;
244
+ }
245
+ //# sourceMappingURL=diffEdit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffEdit.js","sourceRoot":"","sources":["../../../../src/legacy/governance/commands/diffEdit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface ExecutionSnapshot {
2
+ id: string;
3
+ commitHash: string;
4
+ timestamp: number;
5
+ isClean: boolean;
6
+ }
7
+ export declare function createSnapshot(): ExecutionSnapshot;
8
+ export declare function verifySnapshot(snapshotId: string): boolean;
9
+ export declare function rollbackToSnapshot(snapshotId: string): void;
10
+ export declare function commitChanges(message: string, snapshotId: string): void;
11
+ export declare function getChangedFiles(): string[];
12
+ export declare function assertNoExtraChanges(approvedFiles: string[], actualFiles: string[]): void;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSnapshot = createSnapshot;
4
+ exports.verifySnapshot = verifySnapshot;
5
+ exports.rollbackToSnapshot = rollbackToSnapshot;
6
+ exports.commitChanges = commitChanges;
7
+ exports.getChangedFiles = getChangedFiles;
8
+ exports.assertNoExtraChanges = assertNoExtraChanges;
9
+ const child_process_1 = require("child_process");
10
+ function createSnapshot() {
11
+ const statusOutput = (0, child_process_1.execSync)("git status --porcelain", {
12
+ encoding: "utf-8",
13
+ }).trim();
14
+ const isClean = statusOutput.length === 0;
15
+ if (!isClean) {
16
+ throw new Error("Cannot create snapshot: working tree is dirty. Commit or stash changes first.");
17
+ }
18
+ const commitHash = (0, child_process_1.execSync)("git rev-parse HEAD", {
19
+ encoding: "utf-8",
20
+ }).trim();
21
+ return {
22
+ id: commitHash,
23
+ commitHash,
24
+ timestamp: Date.now(),
25
+ isClean,
26
+ };
27
+ }
28
+ function verifySnapshot(snapshotId) {
29
+ try {
30
+ const current = (0, child_process_1.execSync)("git rev-parse HEAD", {
31
+ encoding: "utf-8",
32
+ }).trim();
33
+ return current === snapshotId;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ function rollbackToSnapshot(snapshotId) {
40
+ try {
41
+ (0, child_process_1.execSync)(`git reset --hard ${snapshotId}`, {
42
+ stdio: "inherit",
43
+ });
44
+ console.log(`Rolled back to snapshot ${snapshotId}`);
45
+ }
46
+ catch (error) {
47
+ throw new Error(`Failed to rollback to snapshot ${snapshotId}: ${error}`);
48
+ }
49
+ }
50
+ function commitChanges(message, snapshotId) {
51
+ try {
52
+ (0, child_process_1.execSync)(`git commit -am "${message}"`, {
53
+ stdio: "inherit",
54
+ });
55
+ }
56
+ catch (error) {
57
+ throw new Error(`Failed to commit changes: ${error}`);
58
+ }
59
+ }
60
+ function getChangedFiles() {
61
+ const output = (0, child_process_1.execSync)("git diff --name-only HEAD", {
62
+ encoding: "utf-8",
63
+ });
64
+ return output
65
+ .trim()
66
+ .split("\n")
67
+ .filter((f) => f.length > 0);
68
+ }
69
+ function assertNoExtraChanges(approvedFiles, actualFiles) {
70
+ const approvedSet = new Set(approvedFiles);
71
+ const extraFiles = actualFiles.filter((f) => !approvedSet.has(f));
72
+ if (extraFiles.length > 0) {
73
+ throw new Error(`Governance violation: execution modified undeclared files:\n${extraFiles.join("\n")}`);
74
+ }
75
+ }
76
+ //# sourceMappingURL=sandbox.js.map