memorylink 2.1.1 → 2.2.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 (65) hide show
  1. package/README.md +50 -46
  2. package/dist/cli/commands/delete.d.ts +7 -0
  3. package/dist/cli/commands/delete.d.ts.map +1 -0
  4. package/dist/cli/commands/delete.js +106 -0
  5. package/dist/cli/commands/delete.js.map +1 -0
  6. package/dist/cli/commands/gate.d.ts +1 -1
  7. package/dist/cli/commands/gate.d.ts.map +1 -1
  8. package/dist/cli/commands/gate.js +14 -0
  9. package/dist/cli/commands/gate.js.map +1 -1
  10. package/dist/cli/commands/init.d.ts.map +1 -1
  11. package/dist/cli/commands/init.js +17 -75
  12. package/dist/cli/commands/init.js.map +1 -1
  13. package/dist/cli/commands/list.d.ts +7 -0
  14. package/dist/cli/commands/list.d.ts.map +1 -0
  15. package/dist/cli/commands/list.js +129 -0
  16. package/dist/cli/commands/list.js.map +1 -0
  17. package/dist/cli/commands/remember.d.ts +3 -0
  18. package/dist/cli/commands/remember.d.ts.map +1 -0
  19. package/dist/cli/commands/remember.js +61 -0
  20. package/dist/cli/commands/remember.js.map +1 -0
  21. package/dist/cli/commands/retrieve.d.ts +3 -0
  22. package/dist/cli/commands/retrieve.d.ts.map +1 -0
  23. package/dist/cli/commands/retrieve.js +32 -0
  24. package/dist/cli/commands/retrieve.js.map +1 -0
  25. package/dist/cli/commands/scaffold.d.ts +6 -0
  26. package/dist/cli/commands/scaffold.d.ts.map +1 -0
  27. package/dist/cli/commands/scaffold.js +132 -0
  28. package/dist/cli/commands/scaffold.js.map +1 -0
  29. package/dist/cli/index.js +10 -0
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/core/memory/gates.d.ts +17 -0
  32. package/dist/core/memory/gates.d.ts.map +1 -0
  33. package/dist/core/memory/gates.js +75 -0
  34. package/dist/core/memory/gates.js.map +1 -0
  35. package/dist/core/memory/git.d.ts +9 -0
  36. package/dist/core/memory/git.d.ts.map +1 -0
  37. package/dist/core/memory/git.js +57 -0
  38. package/dist/core/memory/git.js.map +1 -0
  39. package/dist/core/memory/storage.d.ts +11 -0
  40. package/dist/core/memory/storage.d.ts.map +1 -0
  41. package/dist/core/memory/storage.js +63 -0
  42. package/dist/core/memory/storage.js.map +1 -0
  43. package/dist/core/memory/structure.d.ts +10 -0
  44. package/dist/core/memory/structure.d.ts.map +1 -0
  45. package/dist/core/memory/structure.js +51 -0
  46. package/dist/core/memory/structure.js.map +1 -0
  47. package/dist/core/types.d.ts +13 -1
  48. package/dist/core/types.d.ts.map +1 -1
  49. package/dist/gate/rules/valid-syntax.d.ts +16 -0
  50. package/dist/gate/rules/valid-syntax.d.ts.map +1 -0
  51. package/dist/gate/rules/valid-syntax.js +76 -0
  52. package/dist/gate/rules/valid-syntax.js.map +1 -0
  53. package/dist/tools/pointer-generator.d.ts.map +1 -1
  54. package/dist/tools/pointer-generator.js +2 -2
  55. package/dist/tools/pointer-generator.js.map +1 -1
  56. package/docs/USER_GUIDE.md +181 -0
  57. package/package.json +2 -2
  58. package/docs/COMPARISONS.md +0 -229
  59. package/docs/FAQ.md +0 -230
  60. package/docs/GETTING_STARTED.md +0 -185
  61. package/docs/PATTERNS.md +0 -206
  62. package/docs/QUICK_REFERENCE.md +0 -209
  63. package/docs/REMEDIATION.md +0 -332
  64. package/docs/THREAT_MODEL.md +0 -279
  65. package/docs/TROUBLESHOOTING.md +0 -280
@@ -0,0 +1,57 @@
1
+ import { execa } from 'execa';
2
+ export class Git {
3
+ basePath;
4
+ constructor(basePath = process.cwd()) {
5
+ this.basePath = basePath;
6
+ }
7
+ async getHeadHash() {
8
+ try {
9
+ const { stdout } = await execa('git', ['rev-parse', 'HEAD'], { cwd: this.basePath });
10
+ return stdout.trim();
11
+ }
12
+ catch (e) {
13
+ return '0000000000000000000000000000000000000000'; // No commit yet
14
+ }
15
+ }
16
+ async getDiff(target, filePath) {
17
+ const args = ['diff'];
18
+ if (target === 'staged')
19
+ args.push('--cached');
20
+ if (target === 'last-commit')
21
+ args.push('HEAD^', 'HEAD');
22
+ // Minimal context to save tokens, but enough to apply
23
+ args.push('--minimal');
24
+ if (filePath) {
25
+ args.push('--', filePath);
26
+ }
27
+ try {
28
+ const { stdout } = await execa('git', args, { cwd: this.basePath });
29
+ return stdout;
30
+ }
31
+ catch (e) {
32
+ return '';
33
+ }
34
+ }
35
+ async getFileStatus(filePath) {
36
+ // Check status using git status --porcelain
37
+ try {
38
+ const { stdout } = await execa('git', ['status', '--porcelain', filePath], { cwd: this.basePath });
39
+ if (!stdout)
40
+ return 'unknown'; // Unchanged or untracked (if ignored)
41
+ const code = stdout.substring(0, 2);
42
+ if (code.includes('M'))
43
+ return 'modified';
44
+ if (code.includes('A') || code.includes('?'))
45
+ return 'added'; // ? is untracked
46
+ if (code.includes('D'))
47
+ return 'deleted';
48
+ if (code.includes('R'))
49
+ return 'renamed';
50
+ return 'unknown';
51
+ }
52
+ catch (e) {
53
+ return 'unknown';
54
+ }
55
+ }
56
+ }
57
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/core/memory/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAI9B,MAAM,OAAO,GAAG;IACZ,QAAQ,CAAS;IAEjB,YAAY,WAAmB,OAAO,CAAC,GAAG,EAAE;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAI,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,0CAA0C,CAAC,CAAC,gBAAgB;QACvE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAA4C,EAAE,QAAiB;QACzE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtB,IAAI,MAAM,KAAK,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,MAAM,KAAK,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzD,sDAAsD;QACtD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvB,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAChC,4CAA4C;QAC5C,IAAI,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnG,IAAI,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAC,CAAC,sCAAsC;YAErE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,UAAU,CAAC;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC,CAAC,iBAAiB;YAC/E,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzC,OAAO,SAAS,CAAC;QACrB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,11 @@
1
+ import { MemoryEntry } from '../types.js';
2
+ export declare class MemoryStorage {
3
+ basePath: string;
4
+ constructor(basePath?: string);
5
+ get memoryPath(): string;
6
+ get configPath(): string;
7
+ init(): Promise<boolean>;
8
+ append(entry: MemoryEntry): Promise<void>;
9
+ readAll(): Promise<MemoryEntry[]>;
10
+ }
11
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/core/memory/storage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM1C,qBAAa,aAAa;IACtB,QAAQ,EAAE,MAAM,CAAC;gBAEL,QAAQ,GAAE,MAAsB;IAI5C,IAAI,UAAU,WAEb;IAED,IAAI,UAAU,WAEb;IAEK,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IA2BxB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAe1C"}
@@ -0,0 +1,63 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ const MEMORY_DIR = '.memorylink';
4
+ const MEMORY_FILE = 'memory.jsonl';
5
+ const CONFIG_FILE = 'config.json';
6
+ export class MemoryStorage {
7
+ basePath;
8
+ constructor(basePath = process.cwd()) {
9
+ this.basePath = basePath;
10
+ }
11
+ get memoryPath() {
12
+ return path.join(this.basePath, MEMORY_DIR, MEMORY_FILE);
13
+ }
14
+ get configPath() {
15
+ return path.join(this.basePath, MEMORY_DIR, CONFIG_FILE);
16
+ }
17
+ async init() {
18
+ const dir = path.join(this.basePath, MEMORY_DIR);
19
+ if (await fs.pathExists(dir)) {
20
+ // Check if memory file exists, if not create it
21
+ if (!await fs.pathExists(this.memoryPath)) {
22
+ await fs.ensureFile(this.memoryPath);
23
+ return true;
24
+ }
25
+ return false; // Already initialized fully
26
+ }
27
+ await fs.ensureDir(dir);
28
+ await fs.ensureFile(this.memoryPath);
29
+ // Default Config
30
+ const defaultConfig = {
31
+ version: "1.6.0",
32
+ policies: ["no-secrets", "no-large-files"],
33
+ gates: {
34
+ stale_threshold_hours: 24
35
+ }
36
+ };
37
+ await fs.writeJson(this.configPath, defaultConfig, { spaces: 2 });
38
+ return true;
39
+ }
40
+ async append(entry) {
41
+ // Append as single line JSON
42
+ const line = JSON.stringify(entry) + '\n';
43
+ await fs.appendFile(this.memoryPath, line);
44
+ }
45
+ async readAll() {
46
+ if (!await fs.pathExists(this.memoryPath))
47
+ return [];
48
+ const content = await fs.readFile(this.memoryPath, 'utf8');
49
+ return content
50
+ .split('\n')
51
+ .filter(line => line.trim())
52
+ .map(line => {
53
+ try {
54
+ return JSON.parse(line);
55
+ }
56
+ catch (e) {
57
+ return null;
58
+ }
59
+ })
60
+ .filter(e => e !== null);
61
+ }
62
+ }
63
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/core/memory/storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,WAAW,GAAG,cAAc,CAAC;AACnC,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,MAAM,OAAO,aAAa;IACtB,QAAQ,CAAS;IAEjB,YAAY,WAAmB,OAAO,CAAC,GAAG,EAAE;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,gDAAgD;YAChD,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACxC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACrC,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,4BAA4B;QAC9C,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErC,iBAAiB;QACjB,MAAM,aAAa,GAAG;YAClB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;YAC1C,KAAK,EAAE;gBACH,qBAAqB,EAAE,EAAE;aAC5B;SACJ,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC3B,6BAA6B;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC1C,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,OAAO;aACT,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC3B,GAAG,CAAC,IAAI,CAAC,EAAE;YACR,IAAI,CAAC;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAkB,CAAC;IAClD,CAAC;CACJ"}
@@ -0,0 +1,10 @@
1
+ export interface CodeSymbol {
2
+ name: string;
3
+ type: 'class' | 'function' | 'interface' | 'variable' | 'method';
4
+ line: number;
5
+ signature?: string;
6
+ }
7
+ export declare class StructureAnalyzer {
8
+ analyze(filePath: string): Promise<CodeSymbol[]>;
9
+ }
10
+ //# sourceMappingURL=structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../../src/core/memory/structure.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,iBAAiB;IAEpB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAqDzD"}
@@ -0,0 +1,51 @@
1
+ import ts from 'typescript';
2
+ import fs from 'fs-extra';
3
+ export class StructureAnalyzer {
4
+ async analyze(filePath) {
5
+ if (!await fs.pathExists(filePath))
6
+ return [];
7
+ const content = await fs.readFile(filePath, 'utf8');
8
+ const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
9
+ if (sourceFile.parseDiagnostics && sourceFile.parseDiagnostics.length > 0) {
10
+ const diags = sourceFile.parseDiagnostics;
11
+ throw new Error(`Parse error: ${diags[0].messageText}`);
12
+ }
13
+ const symbols = [];
14
+ const visit = (node) => {
15
+ if (ts.isClassDeclaration(node) && node.name) {
16
+ symbols.push({
17
+ name: node.name.text,
18
+ type: 'class',
19
+ line: sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1
20
+ });
21
+ }
22
+ else if (ts.isFunctionDeclaration(node) && node.name) {
23
+ symbols.push({
24
+ name: node.name.text,
25
+ type: 'function',
26
+ line: sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1,
27
+ signature: content.substring(node.getStart(), node.body?.getStart() || node.getEnd()).trim()
28
+ });
29
+ }
30
+ else if (ts.isInterfaceDeclaration(node) && node.name) {
31
+ symbols.push({
32
+ name: node.name.text,
33
+ type: 'interface',
34
+ line: sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1
35
+ });
36
+ }
37
+ else if (ts.isMethodDeclaration(node) && ts.isIdentifier(node.name)) {
38
+ symbols.push({
39
+ name: node.name.text,
40
+ type: 'method',
41
+ line: sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1
42
+ });
43
+ }
44
+ // Add more types as needed (variables, enums)
45
+ ts.forEachChild(node, visit);
46
+ };
47
+ visit(sourceFile);
48
+ return symbols;
49
+ }
50
+ }
51
+ //# sourceMappingURL=structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/core/memory/structure.ts"],"names":[],"mappings":"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"}
@@ -91,7 +91,7 @@ export interface AuditEvent {
91
91
  /**
92
92
  * Gate rule types
93
93
  */
94
- export type GateRule = 'block-quarantined' | 'require-e2-for-topics';
94
+ export type GateRule = 'block-quarantined' | 'require-e2-for-topics' | 'valid-syntax';
95
95
  /**
96
96
  * Gate result
97
97
  */
@@ -143,4 +143,16 @@ export type Result<T, E = Error> = {
143
143
  */
144
144
  export declare function Ok<T>(value: T): Result<T, never>;
145
145
  export declare function Err<E>(error: E): Result<never, E>;
146
+ export type MemoryGate = 'GREEN' | 'YELLOW' | 'RED';
147
+ export interface MemoryEntry {
148
+ id: string;
149
+ path: string;
150
+ summary: string;
151
+ diff_ref: string;
152
+ status: MemoryStatus;
153
+ gate: MemoryGate;
154
+ policies: string[];
155
+ agent_id: string;
156
+ timestamp: string;
157
+ }
146
158
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * valid-syntax gate rule (Blue Gate)
3
+ * Week 3: Deep Logic
4
+ * Based on SPEC.md v4.3.10
5
+ *
6
+ * Rule: FAIL if code has Syntax Errors (AST Parse Failures)
7
+ */
8
+ import type { Scope, GateResult } from '../../core/types.js';
9
+ /**
10
+ * Check for syntax errors in staged/project files
11
+ */
12
+ export declare function checkValidSyntax(cwd: string, _scope?: Scope, options?: {
13
+ diff?: boolean;
14
+ files?: string[];
15
+ }): Promise<GateResult>;
16
+ //# sourceMappingURL=valid-syntax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valid-syntax.d.ts","sourceRoot":"","sources":["../../../src/gate/rules/valid-syntax.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAW5E;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,KAAK,EACd,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACnD,OAAO,CAAC,UAAU,CAAC,CA6DrB"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * valid-syntax gate rule (Blue Gate)
3
+ * Week 3: Deep Logic
4
+ * Based on SPEC.md v4.3.10
5
+ *
6
+ * Rule: FAIL if code has Syntax Errors (AST Parse Failures)
7
+ */
8
+ import { EXIT_CODES } from '../../core/exit-codes.js';
9
+ import { readFile } from 'fs/promises';
10
+ import { join } from 'path';
11
+ import ts from 'typescript';
12
+ // @ts-ignore - glob types missing
13
+ import glob from 'glob';
14
+ import { promisify } from 'util';
15
+ const globAsync = promisify(glob);
16
+ /**
17
+ * Check for syntax errors in staged/project files
18
+ */
19
+ export async function checkValidSyntax(cwd, _scope, options = {}) {
20
+ const violations = [];
21
+ const filesToCheck = [];
22
+ try {
23
+ // 1. Determine files to check
24
+ if (options.files && options.files.length > 0) {
25
+ filesToCheck.push(...options.files);
26
+ }
27
+ else {
28
+ // Scan all .ts/.js files in src needed
29
+ // Production: specific focus on source code to save time
30
+ const matches = await globAsync('src/**/*.{ts,js,tsx,jsx}', { cwd, ignore: ['node_modules/**'] });
31
+ filesToCheck.push(...matches);
32
+ }
33
+ // 2. Parse each file
34
+ for (const file of filesToCheck) {
35
+ const fullPath = join(cwd, file);
36
+ try {
37
+ const content = await readFile(fullPath, 'utf-8');
38
+ // Better approach for speed:
39
+ // Use transpileModule to check for syntax errors
40
+ const result = ts.transpileModule(content, {
41
+ compilerOptions: { noEmit: true, skipLibCheck: true },
42
+ reportDiagnostics: true
43
+ });
44
+ if (result.diagnostics && result.diagnostics.length > 0) {
45
+ // Found syntax errors
46
+ violations.push({
47
+ record_id: 'syntax-error',
48
+ conflict_key: file,
49
+ created_at: new Date().toISOString(),
50
+ quarantine_ref: result.diagnostics[0].messageText.toString()
51
+ });
52
+ }
53
+ }
54
+ catch (e) {
55
+ // file reading error or general failure
56
+ console.warn(`Skipping syntax check for ${file}: ${e.message}`);
57
+ }
58
+ }
59
+ const passed = violations.length === 0;
60
+ return {
61
+ passed,
62
+ rule: 'valid-syntax',
63
+ violations,
64
+ exitCode: passed ? EXIT_CODES.SUCCESS : EXIT_CODES.FAILURE,
65
+ };
66
+ }
67
+ catch (error) {
68
+ return {
69
+ passed: false,
70
+ rule: 'valid-syntax',
71
+ violations: [],
72
+ exitCode: EXIT_CODES.ERROR
73
+ };
74
+ }
75
+ }
76
+ //# sourceMappingURL=valid-syntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valid-syntax.js","sourceRoot":"","sources":["../../../src/gate/rules/valid-syntax.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,kCAAkC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,GAAW,EACX,MAAc,EACd,UAAgD,EAAE;IAElD,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,IAAI,CAAC;QACD,8BAA8B;QAC9B,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,uCAAuC;YACvC,yDAAyD;YACzD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAClG,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAClC,CAAC;QAED,qBAAqB;QACrB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAElD,6BAA6B;gBAC7B,iDAAiD;gBACjD,MAAM,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE;oBACvC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;oBACrD,iBAAiB,EAAE,IAAI;iBAC1B,CAAC,CAAC;gBAEH,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtD,sBAAsB;oBACtB,UAAU,CAAC,IAAI,CAAC;wBACZ,SAAS,EAAE,cAAc;wBACzB,YAAY,EAAE,IAAI;wBAClB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACpC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE;qBAC/D,CAAC,CAAC;gBACP,CAAC;YAEL,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,wCAAwC;gBACxC,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;QAEvC,OAAO;YACH,MAAM;YACN,IAAI,EAAE,cAAc;YACpB,UAAU;YACV,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO;SAC7D,CAAC;IAEN,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO;YACH,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,UAAU,CAAC,KAAK;SAC7B,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pointer-generator.d.ts","sourceRoot":"","sources":["../../src/tools/pointer-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,MAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAsBrC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,MAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAsBrC;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,MAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CA6BrC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAoBrC"}
1
+ {"version":3,"file":"pointer-generator.d.ts","sourceRoot":"","sources":["../../src/tools/pointer-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,MAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAsBrC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,MAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAsBrC;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,MAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CA6BrC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAoBrC"}
@@ -37,7 +37,7 @@ This file points to the universal hub to ensure consistency across all AI tools.
37
37
  /**
38
38
  * Generate CLAUDE.md file
39
39
  */
40
- export async function generateClaudeMd(cwd = process.cwd(), hubName = 'AGENTS.md') {
40
+ export async function generateClaudeMd(cwd = process.cwd(), hubName = 'AGENT.md') {
41
41
  try {
42
42
  const claudePath = resolve(cwd, 'CLAUDE.md');
43
43
  const content = `# Claude Code Configuration
@@ -60,7 +60,7 @@ This file points to the universal hub to ensure consistency across all AI tools.
60
60
  /**
61
61
  * Generate GitHub Copilot instructions
62
62
  */
63
- export async function generateCopilotInstructions(cwd = process.cwd(), hubName = 'AGENTS.md') {
63
+ export async function generateCopilotInstructions(cwd = process.cwd(), hubName = 'AGENT.md') {
64
64
  try {
65
65
  const copilotDir = resolve(cwd, '.github');
66
66
  if (!existsSync(copilotDir)) {
@@ -1 +1 @@
1
- {"version":3,"file":"pointer-generator.js","sourceRoot":"","sources":["../../src/tools/pointer-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pointer-generator.js","sourceRoot":"","sources":["../../src/tools/pointer-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ # MemoryLink User Guide
2
+
3
+ > **The Active Gatekeeper for AI Agents**
4
+ > Version 1.7.0
5
+
6
+ ---
7
+
8
+ ## What is MemoryLink?
9
+
10
+ MemoryLink is a **governance layer** for AI coding assistants. It provides:
11
+
12
+ 1. **Memory** - Persistent knowledge that survives across sessions
13
+ 2. **Gates** - Security checks that block dangerous code before commit
14
+
15
+ ### Why You Need This
16
+
17
+ | Problem | Solution |
18
+ |:---|:---|
19
+ | AI forgets fixes after 20 days | `ml capture` stores rules permanently |
20
+ | AI commits API keys accidentally | **Red Gate** blocks secrets |
21
+ | AI writes code with syntax errors | **Blue Gate** blocks broken code |
22
+ | Different AI tools have different rules | `.agent/constitution.md` = single truth |
23
+
24
+ ---
25
+
26
+ ## Installation
27
+
28
+ ```bash
29
+ npm install -g memorylink
30
+ ```
31
+
32
+ ## Quick Start
33
+
34
+ ```bash
35
+ cd your-project
36
+ ml init # Initialize MemoryLink
37
+ ml scan # Scan for existing secrets
38
+ ml hooks --install # Install Git hooks (blocks bad commits)
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Core Commands
44
+
45
+ ### Memory Commands
46
+
47
+ ```bash
48
+ # Capture a memory
49
+ ml capture -t "api_guidelines" -c "Always use environment variables for API keys"
50
+
51
+ # Query a memory
52
+ ml query -t "api_guidelines"
53
+
54
+ # List all memories
55
+ ml list
56
+ ml list --since 7d # Only recent
57
+ ml list --before 30d # Only old
58
+
59
+ # Delete a memory
60
+ ml delete -t "api_guidelines" -f
61
+ ml delete --id "mem_abc123" -f
62
+ ```
63
+
64
+ ### Gate Commands
65
+
66
+ ```bash
67
+ # Check for secrets (Red Gate)
68
+ ml gate --rule block-quarantined
69
+
70
+ # Check for syntax errors (Blue Gate)
71
+ ml gate --rule valid-syntax
72
+
73
+ # Scan entire project
74
+ ml scan
75
+ ```
76
+
77
+ ### Management Commands
78
+
79
+ ```bash
80
+ ml mode active # Block mode (strict)
81
+ ml mode inactive # Warn mode (permissive)
82
+ ml self-check # Verify installation
83
+ ml doctor # Health check
84
+ ```
85
+
86
+ ---
87
+
88
+ ## How Memory Works
89
+
90
+ **The Recency Rule:** If you have multiple memories for the same topic, the newest one wins.
91
+
92
+ ```bash
93
+ # Day 1
94
+ ml capture -t "framework" -c "Use React Class components"
95
+
96
+ # Day 30
97
+ ml capture -t "framework" -c "Use React Hooks"
98
+
99
+ # Query returns "Use React Hooks" (newer)
100
+ ml query -t "framework"
101
+ ```
102
+
103
+ **Update:** Just capture again with the same topic.
104
+ **Delete:** Use `ml delete -t "topic" -f`
105
+
106
+ ---
107
+
108
+ ## How Gates Work
109
+
110
+ ### Red Gate (Secrets)
111
+ - Detects API keys, passwords, private keys
112
+ - Blocks commits with `ml gate --rule block-quarantined`
113
+ - Installed automatically via `ml hooks --install`
114
+
115
+ ### Blue Gate (Syntax)
116
+ - Detects broken code (parse errors)
117
+ - Blocks commits with `ml gate --rule valid-syntax`
118
+
119
+ ---
120
+
121
+ ## Universal Context (.agent/ folder)
122
+
123
+ Create a `.agent/` folder in your project root:
124
+
125
+ ```
126
+ .agent/
127
+ ├── memory/
128
+ │ └── constitution.md # Project rules (ALL agents read this)
129
+ └── context.md # Current project context
130
+ ```
131
+
132
+ All AI tools (Cursor, Antigravity, VS Code) will read these files automatically.
133
+
134
+ ---
135
+
136
+ ## Time-Based Memory Management
137
+
138
+ ```bash
139
+ # See memories from last week
140
+ ml list --since 7d
141
+
142
+ # Clean up old memories (older than 60 days)
143
+ ml delete --before 60d -f
144
+
145
+ # Delete all memories for old project
146
+ ml delete -t "old_project_name" -f
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Troubleshooting
152
+
153
+ ### "No memories found"
154
+ - Run `ml init` first
155
+ - Check that `.memorylink/` folder exists
156
+
157
+ ### "Gate fails but I want to commit anyway"
158
+ - Use `git commit --no-verify` (emergency bypass)
159
+ - Or run `ml mode inactive` to switch to warn-only mode
160
+
161
+ ### "False positive on secret detection"
162
+ - Run `ml gate --mark-false <id>` to whitelist it
163
+
164
+ ---
165
+
166
+ ## Summary
167
+
168
+ | Command | Purpose |
169
+ |:---|:---|
170
+ | `ml init` | Setup MemoryLink |
171
+ | `ml capture` | Save a memory |
172
+ | `ml query` | Retrieve a memory |
173
+ | `ml list` | Show all memories |
174
+ | `ml delete` | Remove a memory |
175
+ | `ml gate` | Run security checks |
176
+ | `ml scan` | Scan for secrets |
177
+ | `ml mode` | Switch active/inactive |
178
+
179
+ ---
180
+
181
+ **Built with love for the AI-First Developer.** 🚀
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorylink",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "description": "MemoryLink - Prevent secret leaks in AI-assisted development. 127 patterns including India-specific (Aadhaar, PAN, UPI).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -72,4 +72,4 @@
72
72
  "engines": {
73
73
  "node": ">=18.0.0"
74
74
  }
75
- }
75
+ }