youmd 0.10.0 → 0.10.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 (130) hide show
  1. package/dist/commands/brain.d.ts +25 -0
  2. package/dist/commands/brain.d.ts.map +1 -0
  3. package/dist/commands/brain.js +683 -0
  4. package/dist/commands/brain.js.map +1 -0
  5. package/dist/commands/doctor.d.ts.map +1 -1
  6. package/dist/commands/doctor.js +4 -0
  7. package/dist/commands/doctor.js.map +1 -1
  8. package/dist/commands/machine.d.ts +3 -0
  9. package/dist/commands/machine.d.ts.map +1 -1
  10. package/dist/commands/machine.js +73 -4
  11. package/dist/commands/machine.js.map +1 -1
  12. package/dist/commands/orchestrate.d.ts.map +1 -1
  13. package/dist/commands/orchestrate.js +4 -3
  14. package/dist/commands/orchestrate.js.map +1 -1
  15. package/dist/commands/project.d.ts.map +1 -1
  16. package/dist/commands/project.js +24 -0
  17. package/dist/commands/project.js.map +1 -1
  18. package/dist/commands/remote.d.ts.map +1 -1
  19. package/dist/commands/remote.js +42 -13
  20. package/dist/commands/remote.js.map +1 -1
  21. package/dist/commands/skill.d.ts.map +1 -1
  22. package/dist/commands/skill.js +2 -0
  23. package/dist/commands/skill.js.map +1 -1
  24. package/dist/commands/tasks.d.ts +23 -3
  25. package/dist/commands/tasks.d.ts.map +1 -1
  26. package/dist/commands/tasks.js +179 -49
  27. package/dist/commands/tasks.js.map +1 -1
  28. package/dist/generated/capability-registry.d.ts +1096 -0
  29. package/dist/generated/capability-registry.d.ts.map +1 -0
  30. package/dist/generated/capability-registry.js +1204 -0
  31. package/dist/generated/capability-registry.js.map +1 -0
  32. package/dist/index.js +42 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/api.d.ts +84 -0
  35. package/dist/lib/api.d.ts.map +1 -1
  36. package/dist/lib/api.js +26 -0
  37. package/dist/lib/api.js.map +1 -1
  38. package/dist/lib/brain/adapters.d.ts +34 -0
  39. package/dist/lib/brain/adapters.d.ts.map +1 -0
  40. package/dist/lib/brain/adapters.js +362 -0
  41. package/dist/lib/brain/adapters.js.map +1 -0
  42. package/dist/lib/brain/apply-control-plane.d.ts +17 -0
  43. package/dist/lib/brain/apply-control-plane.d.ts.map +1 -0
  44. package/dist/lib/brain/apply-control-plane.js +117 -0
  45. package/dist/lib/brain/apply-control-plane.js.map +1 -0
  46. package/dist/lib/brain/cache.d.ts +25 -0
  47. package/dist/lib/brain/cache.d.ts.map +1 -0
  48. package/dist/lib/brain/cache.js +99 -0
  49. package/dist/lib/brain/cache.js.map +1 -0
  50. package/dist/lib/brain/canonical.d.ts +5 -0
  51. package/dist/lib/brain/canonical.d.ts.map +1 -0
  52. package/dist/lib/brain/canonical.js +38 -0
  53. package/dist/lib/brain/canonical.js.map +1 -0
  54. package/dist/lib/brain/discovery.d.ts +9 -0
  55. package/dist/lib/brain/discovery.d.ts.map +1 -0
  56. package/dist/lib/brain/discovery.js +560 -0
  57. package/dist/lib/brain/discovery.js.map +1 -0
  58. package/dist/lib/brain/index.d.ts +55 -0
  59. package/dist/lib/brain/index.d.ts.map +1 -0
  60. package/dist/lib/brain/index.js +384 -0
  61. package/dist/lib/brain/index.js.map +1 -0
  62. package/dist/lib/brain/proposal.d.ts +179 -0
  63. package/dist/lib/brain/proposal.d.ts.map +1 -0
  64. package/dist/lib/brain/proposal.js +694 -0
  65. package/dist/lib/brain/proposal.js.map +1 -0
  66. package/dist/lib/brain/render.d.ts +33 -0
  67. package/dist/lib/brain/render.d.ts.map +1 -0
  68. package/dist/lib/brain/render.js +515 -0
  69. package/dist/lib/brain/render.js.map +1 -0
  70. package/dist/lib/brain/safe-file.d.ts +110 -0
  71. package/dist/lib/brain/safe-file.d.ts.map +1 -0
  72. package/dist/lib/brain/safe-file.js +564 -0
  73. package/dist/lib/brain/safe-file.js.map +1 -0
  74. package/dist/lib/brain/safety.d.ts +8 -0
  75. package/dist/lib/brain/safety.d.ts.map +1 -0
  76. package/dist/lib/brain/safety.js +42 -0
  77. package/dist/lib/brain/safety.js.map +1 -0
  78. package/dist/lib/brain/staged-apply.d.ts +57 -0
  79. package/dist/lib/brain/staged-apply.d.ts.map +1 -0
  80. package/dist/lib/brain/staged-apply.js +336 -0
  81. package/dist/lib/brain/staged-apply.js.map +1 -0
  82. package/dist/lib/brain/store.d.ts +26 -0
  83. package/dist/lib/brain/store.d.ts.map +1 -0
  84. package/dist/lib/brain/store.js +504 -0
  85. package/dist/lib/brain/store.js.map +1 -0
  86. package/dist/lib/brain/types.d.ts +160 -0
  87. package/dist/lib/brain/types.d.ts.map +1 -0
  88. package/dist/lib/brain/types.js +24 -0
  89. package/dist/lib/brain/types.js.map +1 -0
  90. package/dist/lib/config.d.ts +22 -1
  91. package/dist/lib/config.d.ts.map +1 -1
  92. package/dist/lib/config.js +70 -14
  93. package/dist/lib/config.js.map +1 -1
  94. package/dist/lib/daemon.d.ts +27 -0
  95. package/dist/lib/daemon.d.ts.map +1 -1
  96. package/dist/lib/daemon.js +57 -0
  97. package/dist/lib/daemon.js.map +1 -1
  98. package/dist/lib/machine-identity.d.ts +16 -0
  99. package/dist/lib/machine-identity.d.ts.map +1 -0
  100. package/dist/lib/machine-identity.js +101 -0
  101. package/dist/lib/machine-identity.js.map +1 -0
  102. package/dist/lib/orchestrator/loop.d.ts +1 -0
  103. package/dist/lib/orchestrator/loop.d.ts.map +1 -1
  104. package/dist/lib/orchestrator/loop.js +16 -0
  105. package/dist/lib/orchestrator/loop.js.map +1 -1
  106. package/dist/lib/orchestrator/tools.d.ts +11 -0
  107. package/dist/lib/orchestrator/tools.d.ts.map +1 -1
  108. package/dist/lib/orchestrator/tools.js +143 -0
  109. package/dist/lib/orchestrator/tools.js.map +1 -1
  110. package/dist/lib/project-strategy.d.ts +38 -0
  111. package/dist/lib/project-strategy.d.ts.map +1 -1
  112. package/dist/lib/project-strategy.js +91 -0
  113. package/dist/lib/project-strategy.js.map +1 -1
  114. package/dist/lib/projectContext.d.ts +6 -4
  115. package/dist/lib/projectContext.d.ts.map +1 -1
  116. package/dist/lib/projectContext.js +19 -17
  117. package/dist/lib/projectContext.js.map +1 -1
  118. package/dist/lib/tasksFile.d.ts +27 -32
  119. package/dist/lib/tasksFile.d.ts.map +1 -1
  120. package/dist/lib/tasksFile.js +359 -163
  121. package/dist/lib/tasksFile.js.map +1 -1
  122. package/dist/mcp/registry.d.ts +8 -2
  123. package/dist/mcp/registry.d.ts.map +1 -1
  124. package/dist/mcp/registry.js +189 -2
  125. package/dist/mcp/registry.js.map +1 -1
  126. package/dist/mcp/server.d.ts +1 -0
  127. package/dist/mcp/server.d.ts.map +1 -1
  128. package/dist/mcp/server.js +3 -2
  129. package/dist/mcp/server.js.map +1 -1
  130. package/package.json +1 -1
@@ -0,0 +1,564 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BrainApplyInterruptedError = exports.BrainSafeFileError = exports.PROJECT_BRAIN_APPLY_JOURNAL_VERSION = exports.PROJECT_BRAIN_APPROVAL_VERSION = void 0;
37
+ exports.readProjectBrainTrustedDeviceIdentity = readProjectBrainTrustedDeviceIdentity;
38
+ exports.deriveProjectBrainApplyCredential = deriveProjectBrainApplyCredential;
39
+ exports.applyProjectBrainSafeFile = applyProjectBrainSafeFile;
40
+ exports.recoverProjectBrainSafeFile = recoverProjectBrainSafeFile;
41
+ exports.projectBrainApplyJournalPath = projectBrainApplyJournalPath;
42
+ const crypto = __importStar(require("crypto"));
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const config_1 = require("../config");
46
+ const vault_1 = require("../vault");
47
+ const canonical_1 = require("./canonical");
48
+ const discovery_1 = require("./discovery");
49
+ const proposal_1 = require("./proposal");
50
+ const types_1 = require("./types");
51
+ exports.PROJECT_BRAIN_APPROVAL_VERSION = "you-md/project-brain-approval/v1";
52
+ exports.PROJECT_BRAIN_APPLY_JOURNAL_VERSION = "you-md/project-brain-apply-journal/v1";
53
+ class BrainSafeFileError extends Error {
54
+ constructor(code, message) {
55
+ super(message);
56
+ this.code = code;
57
+ this.name = "BrainSafeFileError";
58
+ }
59
+ }
60
+ exports.BrainSafeFileError = BrainSafeFileError;
61
+ class BrainApplyInterruptedError extends BrainSafeFileError {
62
+ constructor(phase) {
63
+ super("PROJECT_BRAIN_APPLY_INTERRUPTED", `project brain apply interrupted at ${phase}`);
64
+ this.phase = phase;
65
+ }
66
+ }
67
+ exports.BrainApplyInterruptedError = BrainApplyInterruptedError;
68
+ function brainRoot(value) { return value ? path.resolve(value) : path.join((0, config_1.getWritableHomeBundleDir)(), "brain"); }
69
+ function proposalHex(ref) {
70
+ const match = /^proposal:brain\/([a-f0-9]{64})$/.exec(ref);
71
+ if (!match)
72
+ throw new BrainSafeFileError("PROJECT_BRAIN_INVALID_PROPOSAL", "proposalRef is invalid");
73
+ return match[1];
74
+ }
75
+ function artifactHex(ref) { return (0, canonical_1.sha256)(ref); }
76
+ function contentHash(value) { return `sha256:${crypto.createHash("sha256").update(value, "utf8").digest("hex")}`; }
77
+ function nonceHash(value) { return `sha256:${(0, canonical_1.sha256)(value)}`; }
78
+ function fsyncDirectory(dir) {
79
+ let fd;
80
+ try {
81
+ fd = fs.openSync(dir, fs.constants.O_RDONLY);
82
+ fs.fsyncSync(fd);
83
+ }
84
+ finally {
85
+ if (fd !== undefined)
86
+ fs.closeSync(fd);
87
+ }
88
+ }
89
+ function ensurePrivateDirectory(dir) {
90
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
91
+ const stat = fs.lstatSync(dir);
92
+ if (!stat.isDirectory() || stat.isSymbolicLink())
93
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNSAFE_PATH", "private state directory is unsafe");
94
+ try {
95
+ fs.chmodSync(dir, 0o700);
96
+ }
97
+ catch { /* non-POSIX */ }
98
+ }
99
+ function atomicWrite(file, data, mode = 0o600, privateDirectory = true) {
100
+ if (privateDirectory)
101
+ ensurePrivateDirectory(path.dirname(file));
102
+ else {
103
+ const directory = fs.lstatSync(path.dirname(file));
104
+ if (!directory.isDirectory() || directory.isSymbolicLink())
105
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNSAFE_PATH", "target directory is unsafe");
106
+ }
107
+ if (fs.existsSync(file)) {
108
+ const stat = fs.lstatSync(file);
109
+ if (!stat.isFile() || stat.isSymbolicLink())
110
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNSAFE_PATH", "atomic target is unsafe");
111
+ }
112
+ const temporary = path.join(path.dirname(file), `.${path.basename(file)}.${process.pid}.${crypto.randomBytes(8).toString("hex")}.tmp`);
113
+ let fd;
114
+ try {
115
+ fd = fs.openSync(temporary, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL, mode);
116
+ fs.writeFileSync(fd, data);
117
+ fs.fsyncSync(fd);
118
+ fs.closeSync(fd);
119
+ fd = undefined;
120
+ fs.renameSync(temporary, file);
121
+ try {
122
+ fs.chmodSync(file, mode);
123
+ }
124
+ catch { /* non-POSIX */ }
125
+ fsyncDirectory(path.dirname(file));
126
+ }
127
+ catch (error) {
128
+ if (fd !== undefined)
129
+ try {
130
+ fs.closeSync(fd);
131
+ }
132
+ catch { /* closed */ }
133
+ try {
134
+ fs.unlinkSync(temporary);
135
+ }
136
+ catch { /* absent */ }
137
+ throw error;
138
+ }
139
+ }
140
+ function atomicJson(file, value) { atomicWrite(file, `${JSON.stringify(value, null, 2)}\n`); }
141
+ function safeReadRegular(file, maxBytes) {
142
+ const stat = fs.lstatSync(file);
143
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.size > maxBytes)
144
+ throw new BrainSafeFileError("PROJECT_BRAIN_SAFE_OPEN_FAILED", "target is not a bounded regular file");
145
+ const noFollow = fs.constants.O_NOFOLLOW || 0;
146
+ let fd;
147
+ try {
148
+ fd = fs.openSync(file, fs.constants.O_RDONLY | noFollow);
149
+ const opened = fs.fstatSync(fd);
150
+ if (!opened.isFile() || opened.dev !== stat.dev || opened.ino !== stat.ino || opened.size !== stat.size) {
151
+ throw new BrainSafeFileError("PROJECT_BRAIN_SAFE_OPEN_FAILED", "target changed during safe open");
152
+ }
153
+ const buffer = Buffer.alloc(opened.size);
154
+ let offset = 0;
155
+ while (offset < opened.size) {
156
+ const count = fs.readSync(fd, buffer, offset, opened.size - offset, offset);
157
+ if (!count)
158
+ break;
159
+ offset += count;
160
+ }
161
+ if (offset !== opened.size)
162
+ throw new BrainSafeFileError("PROJECT_BRAIN_SAFE_OPEN_FAILED", "target safe read was incomplete");
163
+ const content = buffer.toString("utf8");
164
+ if (Buffer.from(content, "utf8").length !== buffer.length || content.includes("\0"))
165
+ throw new BrainSafeFileError("PROJECT_BRAIN_SAFE_OPEN_FAILED", "target is not safe UTF-8 text");
166
+ return { content, mode: stat.mode & 0o777 };
167
+ }
168
+ finally {
169
+ if (fd !== undefined)
170
+ fs.closeSync(fd);
171
+ }
172
+ }
173
+ function assertSafeRootAndTarget(rootValue, relative) {
174
+ if (!(0, discovery_1.isSafeRelativePath)(relative) || relative.startsWith(".git/") || relative === ".git") {
175
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNSAFE_PATH", "target path is unsafe");
176
+ }
177
+ const root = path.resolve(rootValue);
178
+ const rootStat = fs.lstatSync(root);
179
+ if (!rootStat.isDirectory() || rootStat.isSymbolicLink())
180
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNSAFE_PATH", "repository root is unsafe");
181
+ let current = root;
182
+ for (const segment of relative.split("/")) {
183
+ current = path.join(current, segment);
184
+ const stat = fs.lstatSync(current);
185
+ if (stat.isSymbolicLink())
186
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNSAFE_PATH", "target path crosses a symlink");
187
+ if (current !== path.join(root, relative) && !stat.isDirectory())
188
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNSAFE_PATH", "target parent is not a directory");
189
+ }
190
+ return { root, target: current };
191
+ }
192
+ function matchesGenerated(relative, pattern) {
193
+ if (pattern.startsWith("**/")) {
194
+ const segment = pattern.slice(3).replace(/\/\*\*$/, "");
195
+ return relative === segment || relative.startsWith(`${segment}/`) || relative.includes(`/${segment}/`);
196
+ }
197
+ const prefix = pattern.replace(/\/\*\*$/, "");
198
+ return relative === prefix || relative.startsWith(`${prefix}/`);
199
+ }
200
+ function applyUnifiedDiff(base, patch) {
201
+ if (!base.endsWith("\n") || patch.hunks.some((hunk) => hunk.lines.some((line) => line.startsWith("\\")))) {
202
+ throw new BrainSafeFileError("PROJECT_BRAIN_PATCH_UNSUPPORTED", "safe apply requires newline-terminated text without no-newline directives");
203
+ }
204
+ const source = base.slice(0, -1).split("\n");
205
+ const output = [];
206
+ let cursor = 0;
207
+ for (const hunk of patch.hunks) {
208
+ const start = hunk.oldStart === 0 ? 0 : hunk.oldStart - 1;
209
+ if (start < cursor || start > source.length)
210
+ throw new BrainSafeFileError("PROJECT_BRAIN_PATCH_MISMATCH", "unified diff hunks overlap or exceed the base");
211
+ output.push(...source.slice(cursor, start));
212
+ let sourceIndex = start;
213
+ for (const line of hunk.lines) {
214
+ const marker = line[0];
215
+ const text = line.slice(1);
216
+ if (marker === " " || marker === "-") {
217
+ if (source[sourceIndex] !== text)
218
+ throw new BrainSafeFileError("PROJECT_BRAIN_PATCH_MISMATCH", "unified diff context does not match the exact base");
219
+ if (marker === " ")
220
+ output.push(text);
221
+ sourceIndex += 1;
222
+ }
223
+ else if (marker === "+")
224
+ output.push(text);
225
+ else
226
+ throw new BrainSafeFileError("PROJECT_BRAIN_PATCH_UNSUPPORTED", "unified diff line marker is unsupported");
227
+ }
228
+ cursor = sourceIndex;
229
+ }
230
+ output.push(...source.slice(cursor));
231
+ return `${output.join("\n")}\n`;
232
+ }
233
+ function assertMarkerBounded(before, after, artifactRef) {
234
+ const start = `<!-- you.md:managed:start ${artifactRef} -->`;
235
+ const end = `<!-- you.md:managed:end ${artifactRef} -->`;
236
+ const beforeStart = before.indexOf(start);
237
+ const beforeEnd = before.indexOf(end);
238
+ const afterStart = after.indexOf(start);
239
+ const afterEnd = after.indexOf(end);
240
+ if (beforeStart < 0 || beforeEnd <= beforeStart || afterStart < 0 || afterEnd <= afterStart
241
+ || before.indexOf(start, beforeStart + 1) >= 0 || before.indexOf(end, beforeEnd + 1) >= 0
242
+ || after.indexOf(start, afterStart + 1) >= 0 || after.indexOf(end, afterEnd + 1) >= 0) {
243
+ throw new BrainSafeFileError("PROJECT_BRAIN_MARKER_REQUIRED", "managed_write requires exactly one matching marker boundary");
244
+ }
245
+ const beforePrefix = before.slice(0, beforeStart + start.length);
246
+ const afterPrefix = after.slice(0, afterStart + start.length);
247
+ const beforeSuffix = before.slice(beforeEnd);
248
+ const afterSuffix = after.slice(afterEnd);
249
+ if (beforePrefix !== afterPrefix || beforeSuffix !== afterSuffix) {
250
+ throw new BrainSafeFileError("PROJECT_BRAIN_MARKER_ESCAPE", "unified diff changes content outside the managed marker boundary");
251
+ }
252
+ }
253
+ function deviceKeyPath() { return path.join((0, config_1.getWritableHomeBundleDir)(), "secret-vault", "devices", "current-device-key.json"); }
254
+ function loadTrustedDeviceKey() {
255
+ const file = deviceKeyPath();
256
+ const read = safeReadRegular(file, 128 * 1024);
257
+ const stat = fs.statSync(file);
258
+ if (process.platform !== "win32" && (stat.mode & 0o077) !== 0)
259
+ throw new BrainSafeFileError("PROJECT_BRAIN_ENCRYPTION_REQUIRED", "trusted-device key permissions are unsafe");
260
+ let key;
261
+ try {
262
+ key = JSON.parse(read.content);
263
+ }
264
+ catch {
265
+ throw new BrainSafeFileError("PROJECT_BRAIN_ENCRYPTION_REQUIRED", "trusted-device key is invalid");
266
+ }
267
+ if (key.schemaVersion !== "you-md/secret-vault-device-key/v1" || key.keyAlgorithm !== "rsa-oaep-sha256"
268
+ || !key.deviceId || !key.publicKeyPem || !key.privateKeyPem)
269
+ throw new BrainSafeFileError("PROJECT_BRAIN_ENCRYPTION_REQUIRED", "trusted-device key is incomplete");
270
+ return key;
271
+ }
272
+ function readProjectBrainTrustedDeviceIdentity() {
273
+ const key = loadTrustedDeviceKey();
274
+ return {
275
+ deviceId: key.deviceId,
276
+ deviceKeyFingerprint: `sha256:${(0, canonical_1.sha256)(key.publicKeyPem)}`,
277
+ };
278
+ }
279
+ /**
280
+ * Derive a retry-stable, device-bound apply credential without persisting its
281
+ * preimage. Only the SHA-256 hash is sent during claim; the credential itself
282
+ * is used for that exact attempt's lifecycle events.
283
+ */
284
+ function deriveProjectBrainApplyCredential(proposalId, applyId) {
285
+ const key = loadTrustedDeviceKey();
286
+ const digest = crypto.createHmac("sha256", key.privateKeyPem)
287
+ .update(`you-md/project-brain-apply-credential/v1\0${proposalId}\0${applyId}`, "utf8")
288
+ .digest("hex");
289
+ return `apply_${digest}`;
290
+ }
291
+ function encryptRollback(content, key) {
292
+ const dataKey = (0, vault_1.generateVaultKey)();
293
+ const encrypted = (0, vault_1.encryptData)(content, dataKey);
294
+ const wrapped = crypto.publicEncrypt({ key: key.publicKeyPem, oaepHash: "sha256", padding: crypto.constants.RSA_PKCS1_OAEP_PADDING }, Buffer.from(dataKey));
295
+ return {
296
+ schemaVersion: "you-md/project-brain-rollback/v1",
297
+ deviceId: key.deviceId,
298
+ algorithm: "rsa-oaep-sha256+aes-256-gcm",
299
+ wrappedKeyBase64: wrapped.toString("base64"),
300
+ ivBase64: Buffer.from(encrypted.iv).toString("base64"),
301
+ ciphertextBase64: Buffer.from(encrypted.ciphertext).toString("base64"),
302
+ plaintextHash: contentHash(content),
303
+ };
304
+ }
305
+ function decryptRollback(envelope, key) {
306
+ if (envelope.schemaVersion !== "you-md/project-brain-rollback/v1" || envelope.deviceId !== key.deviceId
307
+ || envelope.algorithm !== "rsa-oaep-sha256+aes-256-gcm")
308
+ throw new BrainSafeFileError("PROJECT_BRAIN_ROLLBACK_FAILED", "rollback envelope is invalid for this trusted device");
309
+ const dataKey = crypto.privateDecrypt({ key: key.privateKeyPem, oaepHash: "sha256", padding: crypto.constants.RSA_PKCS1_OAEP_PADDING }, Buffer.from(envelope.wrappedKeyBase64, "base64"));
310
+ const plaintext = (0, vault_1.decryptData)(Buffer.from(envelope.ciphertextBase64, "base64"), Buffer.from(envelope.ivBase64, "base64"), dataKey);
311
+ if (contentHash(plaintext) !== envelope.plaintextHash)
312
+ throw new BrainSafeFileError("PROJECT_BRAIN_ROLLBACK_FAILED", "rollback plaintext hash does not match");
313
+ return plaintext;
314
+ }
315
+ function journalPaths(root, proposalRef, artifactRef) {
316
+ const hex = proposalHex(proposalRef);
317
+ return {
318
+ journal: path.join(root, "audit", "apply", `${hex}.json`),
319
+ rollback: path.join(root, "audit", "apply", `${hex}.rollback.enc.json`),
320
+ freeze: artifactRef ? path.join(root, "failures", `frozen-${artifactHex(artifactRef)}.json`) : undefined,
321
+ };
322
+ }
323
+ function readJsonSafe(file, maxBytes = 1024 * 1024) {
324
+ return JSON.parse(safeReadRegular(file, maxBytes).content);
325
+ }
326
+ function assertApproval(proposal, approval, now, root) {
327
+ const exact = approval?.schemaVersion === exports.PROJECT_BRAIN_APPROVAL_VERSION && approval.kind === "project-brain-approval"
328
+ && approval.proposalRef === proposal.proposalRef && approval.decision === "approved" && approval.revoked === false
329
+ && approval.bindings?.projectRef === proposal.projectRef && approval.bindings.machineRef === proposal.machineRef
330
+ && approval.bindings.workspaceRef === proposal.workspaceRef && approval.bindings.baseRevision === proposal.baseRevision
331
+ && approval.bindings.baseContentHash === proposal.target.baseContentHash
332
+ && approval.bindings.sourceRevision === proposal.source.sourceRevision && approval.bindings.patchFormat === proposal.patchFormat
333
+ && approval.bindings.patchDigest === proposal.patchDigest && /^[A-Za-z0-9._:-]{8,160}$/.test(approval.approverRef || "")
334
+ && /^[A-Za-z0-9_-]{24,160}$/.test(approval.nonce || "");
335
+ const approvedAt = Date.parse(approval?.approvedAt || "");
336
+ const expiresAt = Date.parse(approval?.expiresAt || "");
337
+ if (!exact || !Number.isFinite(approvedAt) || !Number.isFinite(expiresAt) || approvedAt > now.getTime()
338
+ || expiresAt < now.getTime() || expiresAt - approvedAt > 900000) {
339
+ throw new BrainSafeFileError("PROJECT_BRAIN_APPROVAL_INVALID", "fresh exact approval is missing, expired, revoked, or mismatched");
340
+ }
341
+ const used = nonceHash(approval.nonce);
342
+ const audit = path.join(root, "audit", "apply");
343
+ try {
344
+ for (const name of fs.readdirSync(audit)) {
345
+ if (!/^[a-f0-9]{64}\.json$/.test(name))
346
+ continue;
347
+ const journal = readJsonSafe(path.join(audit, name));
348
+ if (journal.nonceHash === used)
349
+ throw new BrainSafeFileError("PROJECT_BRAIN_APPROVAL_REPLAY", "approval nonce was already consumed");
350
+ }
351
+ }
352
+ catch (error) {
353
+ if (error instanceof BrainSafeFileError)
354
+ throw error;
355
+ }
356
+ }
357
+ function validateGrant(options) {
358
+ const { proposal, scan } = options;
359
+ const validation = (0, proposal_1.validateProjectBrainProposal)(proposal);
360
+ if (!validation.valid || proposal.proposalType !== "artifact_update" || proposal.patchFormat !== "unified_diff") {
361
+ throw new BrainSafeFileError("PROJECT_BRAIN_APPLY_NOT_SUPPORTED", "safe apply accepts only valid unified-diff artifact_update proposals");
362
+ }
363
+ if (proposal.machineRef !== scan.workspaceIdentity.machineRef || proposal.workspaceRef !== scan.workspaceRef
364
+ || proposal.baseRevision !== scan.revision.digest)
365
+ throw new BrainSafeFileError("PROJECT_BRAIN_STALE_BASE", "proposal is not bound to this exact machine, worktree, branch, and scan revision");
366
+ const project = scan.projects.find((candidate) => candidate.projectRef === proposal.projectRef);
367
+ const artifact = project?.artifacts.find((candidate) => candidate.artifactRef === proposal.target.artifactRef);
368
+ if (!project || project.management !== "declared" || !artifact || artifact.path !== proposal.target.path
369
+ || artifact.owner !== proposal.target.owner || artifact.authority !== proposal.target.authority
370
+ || artifact.provenance.sourceRevision !== proposal.source.sourceRevision) {
371
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNGRANTED_CAPABILITY", "proposal target is not the exact declared artifact evidence");
372
+ }
373
+ if (types_1.GENERATED_EXCLUDES.some((pattern) => matchesGenerated(artifact.path, pattern))) {
374
+ throw new BrainSafeFileError("PROJECT_BRAIN_GENERATED_ARTIFACT", "generated paths are never writable through Project Brain apply");
375
+ }
376
+ if (artifact.writePolicy === "managed_write")
377
+ return { artifactRef: artifact.artifactRef, targetPath: artifact.path, policy: "managed_write" };
378
+ if (artifact.writePolicy === "task_write" && artifact.kind === "tasks" && artifact.path === `${project.contextRoot}/tasks.json`
379
+ && project.taskWrite.enabled && project.taskWrite.artifactRef === artifact.artifactRef) {
380
+ return { artifactRef: artifact.artifactRef, targetPath: artifact.path, policy: "task_write" };
381
+ }
382
+ throw new BrainSafeFileError("PROJECT_BRAIN_UNGRANTED_CAPABILITY", "artifact lacks managed_write or exact task_write authority");
383
+ }
384
+ function result(journal) {
385
+ return {
386
+ status: journal.state,
387
+ proposalRef: journal.proposalRef,
388
+ artifactRef: journal.artifactRef,
389
+ targetPath: journal.targetPath,
390
+ beforeHash: journal.beforeHash,
391
+ afterHash: journal.afterHash,
392
+ rollbackCiphertextHash: journal.rollbackCiphertextHash,
393
+ manualRecoveryRequired: journal.manualRecoveryRequired,
394
+ };
395
+ }
396
+ function writeTarget(target, content, mode) {
397
+ const current = safeReadRegular(target, 16 * 1024 * 1024);
398
+ void current;
399
+ atomicWrite(target, content, mode || 0o600, false);
400
+ }
401
+ function freeze(paths, journal) {
402
+ const updated = {
403
+ ...journal, state: "rollback_failed", manualRecoveryRequired: true,
404
+ errorCode: "manual_recovery_required", updatedAt: new Date().toISOString(),
405
+ };
406
+ atomicJson(paths.journal, updated);
407
+ if (paths.freeze)
408
+ atomicJson(paths.freeze, {
409
+ schemaVersion: "you-md/project-brain-write-freeze/v1",
410
+ artifactRef: journal.artifactRef,
411
+ proposalRef: journal.proposalRef,
412
+ code: "manual_recovery_required",
413
+ beforeHash: journal.beforeHash,
414
+ afterHash: journal.afterHash,
415
+ });
416
+ }
417
+ async function applyProjectBrainSafeFile(options) {
418
+ const stateRoot = brainRoot(options.brainRoot);
419
+ const grant = validateGrant(options);
420
+ const paths = journalPaths(stateRoot, options.proposal.proposalRef, grant.artifactRef);
421
+ if (paths.freeze && fs.existsSync(paths.freeze))
422
+ throw new BrainSafeFileError("PROJECT_BRAIN_ARTIFACT_FROZEN", "artifact is frozen pending manual recovery");
423
+ if (fs.existsSync(paths.journal))
424
+ throw new BrainSafeFileError("PROJECT_BRAIN_PROPOSAL_REPLAY", "proposal already has an apply journal");
425
+ const safe = assertSafeRootAndTarget(options.root, grant.targetPath);
426
+ const before = safeReadRegular(safe.target, 16 * 1024 * 1024);
427
+ if (contentHash(before.content) !== options.proposal.target.baseContentHash)
428
+ throw new BrainSafeFileError("PROJECT_BRAIN_BASE_CONTENT_MISMATCH", "target content no longer matches the exact proposal base");
429
+ const normalized = (0, proposal_1.validateProjectBrainUnifiedDiffPatch)(options.proposal.patch, options.proposal.proposalRef);
430
+ if (!normalized.valid || !normalized.patch || normalized.patchDigest !== options.proposal.patchDigest) {
431
+ throw new BrainSafeFileError("PROJECT_BRAIN_PATCH_MISMATCH", "unified diff is invalid or its digest changed");
432
+ }
433
+ const after = applyUnifiedDiff(before.content, normalized.patch);
434
+ if (contentHash(after) !== options.proposal.diff.afterDigest)
435
+ throw new BrainSafeFileError("PROJECT_BRAIN_PATCH_MISMATCH", "patched content does not match the approved result digest");
436
+ if (grant.policy === "managed_write")
437
+ assertMarkerBounded(before.content, after, grant.artifactRef);
438
+ assertApproval(options.proposal, options.approval, options.now || new Date(), stateRoot);
439
+ const device = loadTrustedDeviceKey();
440
+ const rollback = encryptRollback(before.content, device);
441
+ const rollbackCiphertextHash = `sha256:${(0, canonical_1.sha256)(Buffer.from(rollback.ciphertextBase64, "base64"))}`;
442
+ const now = (options.now || new Date()).toISOString();
443
+ const journal = {
444
+ schemaVersion: exports.PROJECT_BRAIN_APPLY_JOURNAL_VERSION,
445
+ kind: "project-brain-apply-journal",
446
+ proposalRef: options.proposal.proposalRef,
447
+ projectRef: options.proposal.projectRef,
448
+ artifactRef: grant.artifactRef,
449
+ targetPath: grant.targetPath,
450
+ machineRef: options.scan.workspaceIdentity.machineRef,
451
+ workspaceRef: options.scan.workspaceRef,
452
+ repositoryRef: options.scan.workspaceIdentity.repositoryRef,
453
+ branchRef: options.scan.workspaceIdentity.branchRef,
454
+ baseRevision: options.scan.revision.digest,
455
+ sourceRevision: options.proposal.source.sourceRevision,
456
+ beforeHash: contentHash(before.content),
457
+ afterHash: contentHash(after),
458
+ patchDigest: options.proposal.patchDigest,
459
+ nonceHash: nonceHash(options.approval.nonce),
460
+ rollbackFile: path.basename(paths.rollback),
461
+ rollbackCiphertextHash,
462
+ state: "prepared",
463
+ preparedAt: now,
464
+ updatedAt: now,
465
+ manualRecoveryRequired: false,
466
+ };
467
+ atomicJson(paths.rollback, rollback);
468
+ atomicJson(paths.journal, journal);
469
+ await options.onPrepared?.({
470
+ proposalRef: journal.proposalRef,
471
+ artifactRef: journal.artifactRef,
472
+ targetPath: journal.targetPath,
473
+ beforeHash: journal.beforeHash,
474
+ afterHash: journal.afterHash,
475
+ rollbackCiphertextHash: journal.rollbackCiphertextHash,
476
+ });
477
+ if (options.faultInjection === "after_journal")
478
+ throw new BrainApplyInterruptedError("after_journal");
479
+ try {
480
+ const recheck = safeReadRegular(safe.target, 16 * 1024 * 1024);
481
+ if (contentHash(recheck.content) !== journal.beforeHash)
482
+ throw new BrainSafeFileError("PROJECT_BRAIN_BASE_CONTENT_MISMATCH", "target changed after journal preparation");
483
+ writeTarget(safe.target, after, before.mode);
484
+ if (options.faultInjection === "crash_after_target")
485
+ throw new BrainApplyInterruptedError("after_target");
486
+ if (options.faultInjection === "rollback_failure")
487
+ throw new Error("fault after target");
488
+ const applied = { ...journal, state: "applied", updatedAt: new Date().toISOString() };
489
+ atomicJson(paths.journal, applied);
490
+ return result(applied);
491
+ }
492
+ catch (error) {
493
+ if (error instanceof BrainApplyInterruptedError)
494
+ throw error;
495
+ try {
496
+ if (options.faultInjection === "rollback_failure")
497
+ throw new Error("injected rollback failure");
498
+ const current = safeReadRegular(safe.target, 16 * 1024 * 1024);
499
+ if (contentHash(current.content) === journal.afterHash)
500
+ writeTarget(safe.target, before.content, before.mode);
501
+ }
502
+ catch {
503
+ freeze(paths, journal);
504
+ throw new BrainSafeFileError("PROJECT_BRAIN_ROLLBACK_FAILED", "rollback failed; artifact is frozen for manual recovery");
505
+ }
506
+ throw error;
507
+ }
508
+ }
509
+ function recoverProjectBrainSafeFile(options) {
510
+ const stateRoot = brainRoot(options.brainRoot);
511
+ const preliminary = journalPaths(stateRoot, options.proposalRef);
512
+ const journal = readJsonSafe(preliminary.journal);
513
+ const paths = journalPaths(stateRoot, options.proposalRef, journal.artifactRef);
514
+ if (journal.schemaVersion !== exports.PROJECT_BRAIN_APPLY_JOURNAL_VERSION || journal.proposalRef !== options.proposalRef
515
+ || journal.machineRef !== options.scan.workspaceIdentity.machineRef || journal.workspaceRef !== options.scan.workspaceRef
516
+ || journal.repositoryRef !== options.scan.workspaceIdentity.repositoryRef || journal.branchRef !== options.scan.workspaceIdentity.branchRef) {
517
+ throw new BrainSafeFileError("PROJECT_BRAIN_RECOVERY_BINDING_MISMATCH", "journal is not bound to this exact machine, repository, worktree, and branch");
518
+ }
519
+ if (journal.state === "applied" || journal.state === "rolled_back" || journal.state === "recovered_noop")
520
+ return result(journal);
521
+ const safe = assertSafeRootAndTarget(options.root, journal.targetPath);
522
+ try {
523
+ const current = safeReadRegular(safe.target, 16 * 1024 * 1024);
524
+ const currentHash = contentHash(current.content);
525
+ if (currentHash === journal.beforeHash) {
526
+ const recovered = { ...journal, state: "recovered_noop", manualRecoveryRequired: false, errorCode: undefined, updatedAt: new Date().toISOString() };
527
+ atomicJson(paths.journal, recovered);
528
+ if (paths.freeze)
529
+ try {
530
+ fs.unlinkSync(paths.freeze);
531
+ }
532
+ catch { /* absent */ }
533
+ return result(recovered);
534
+ }
535
+ if (currentHash !== journal.afterHash)
536
+ throw new Error("target is neither approved before nor after state");
537
+ if (options.faultInjection === "rollback_failure")
538
+ throw new Error("injected rollback failure");
539
+ const device = loadTrustedDeviceKey();
540
+ const rollback = decryptRollback(readJsonSafe(paths.rollback), device);
541
+ if (contentHash(rollback) !== journal.beforeHash)
542
+ throw new Error("rollback does not match journal");
543
+ writeTarget(safe.target, rollback, current.mode);
544
+ const restored = safeReadRegular(safe.target, 16 * 1024 * 1024);
545
+ if (contentHash(restored.content) !== journal.beforeHash)
546
+ throw new Error("rollback verification failed");
547
+ const recovered = { ...journal, state: "rolled_back", manualRecoveryRequired: false, errorCode: undefined, updatedAt: new Date().toISOString() };
548
+ atomicJson(paths.journal, recovered);
549
+ if (paths.freeze)
550
+ try {
551
+ fs.unlinkSync(paths.freeze);
552
+ }
553
+ catch { /* absent */ }
554
+ return result(recovered);
555
+ }
556
+ catch {
557
+ freeze(paths, journal);
558
+ throw new BrainSafeFileError("PROJECT_BRAIN_ROLLBACK_FAILED", "recovery failed; artifact remains frozen for manual recovery");
559
+ }
560
+ }
561
+ function projectBrainApplyJournalPath(brainRootValue, proposalRef) {
562
+ return journalPaths(path.resolve(brainRootValue), proposalRef).journal;
563
+ }
564
+ //# sourceMappingURL=safe-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-file.js","sourceRoot":"","sources":["../../../src/lib/brain/safe-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ProjectBrainScan } from "./types";
2
+ export declare class BrainSafetyError extends Error {
3
+ readonly code = "brain_safety_gate_failed";
4
+ constructor(message: string);
5
+ }
6
+ /** Must run over the complete payload before any persistent path is created. */
7
+ export declare function assertBrainPayloadSafe(scan: ProjectBrainScan, canaries?: string[]): string;
8
+ //# sourceMappingURL=safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../../src/lib/brain/safety.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,8BAA8B;gBAC/B,OAAO,EAAE,MAAM;CAC5B;AAeD,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,CAQ9F"}