gencode-ai 0.1.1 → 0.1.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 (263) hide show
  1. package/.gencode/settings.local.json +7 -0
  2. package/README.md +11 -11
  3. package/dist/agent/agent.d.ts +42 -1
  4. package/dist/agent/agent.d.ts.map +1 -1
  5. package/dist/agent/agent.js +82 -15
  6. package/dist/agent/agent.js.map +1 -1
  7. package/dist/cli/components/App.d.ts +8 -1
  8. package/dist/cli/components/App.d.ts.map +1 -1
  9. package/dist/cli/components/App.js +231 -29
  10. package/dist/cli/components/App.js.map +1 -1
  11. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
  12. package/dist/cli/components/CommandSuggestions.js +2 -0
  13. package/dist/cli/components/CommandSuggestions.js.map +1 -1
  14. package/dist/cli/components/Header.d.ts +1 -1
  15. package/dist/cli/components/Header.d.ts.map +1 -1
  16. package/dist/cli/components/Header.js +4 -6
  17. package/dist/cli/components/Header.js.map +1 -1
  18. package/dist/cli/components/Logo.d.ts +1 -0
  19. package/dist/cli/components/Logo.d.ts.map +1 -1
  20. package/dist/cli/components/Logo.js +16 -3
  21. package/dist/cli/components/Logo.js.map +1 -1
  22. package/dist/cli/components/Messages.d.ts +4 -4
  23. package/dist/cli/components/Messages.d.ts.map +1 -1
  24. package/dist/cli/components/Messages.js +51 -25
  25. package/dist/cli/components/Messages.js.map +1 -1
  26. package/dist/cli/components/PermissionPrompt.d.ts +60 -0
  27. package/dist/cli/components/PermissionPrompt.d.ts.map +1 -0
  28. package/dist/cli/components/PermissionPrompt.js +192 -0
  29. package/dist/cli/components/PermissionPrompt.js.map +1 -0
  30. package/dist/cli/components/ProviderManager.js +3 -3
  31. package/dist/cli/components/ProviderManager.js.map +1 -1
  32. package/dist/cli/components/Spinner.d.ts +7 -2
  33. package/dist/cli/components/Spinner.d.ts.map +1 -1
  34. package/dist/cli/components/Spinner.js +116 -25
  35. package/dist/cli/components/Spinner.js.map +1 -1
  36. package/dist/cli/components/TodoList.d.ts +7 -0
  37. package/dist/cli/components/TodoList.d.ts.map +1 -0
  38. package/dist/cli/components/TodoList.js +34 -0
  39. package/dist/cli/components/TodoList.js.map +1 -0
  40. package/dist/cli/components/index.d.ts +1 -0
  41. package/dist/cli/components/index.d.ts.map +1 -1
  42. package/dist/cli/components/index.js +1 -0
  43. package/dist/cli/components/index.js.map +1 -1
  44. package/dist/cli/index.js +47 -7
  45. package/dist/cli/index.js.map +1 -1
  46. package/dist/config/index.d.ts +13 -4
  47. package/dist/config/index.d.ts.map +1 -1
  48. package/dist/config/index.js +18 -3
  49. package/dist/config/index.js.map +1 -1
  50. package/dist/config/levels.d.ts +49 -0
  51. package/dist/config/levels.d.ts.map +1 -0
  52. package/dist/config/levels.js +222 -0
  53. package/dist/config/levels.js.map +1 -0
  54. package/dist/config/loader.d.ts +46 -0
  55. package/dist/config/loader.d.ts.map +1 -0
  56. package/dist/config/loader.js +153 -0
  57. package/dist/config/loader.js.map +1 -0
  58. package/dist/config/manager.d.ts +115 -15
  59. package/dist/config/manager.d.ts.map +1 -1
  60. package/dist/config/manager.js +260 -34
  61. package/dist/config/manager.js.map +1 -1
  62. package/dist/config/manager.test.d.ts +5 -0
  63. package/dist/config/manager.test.d.ts.map +1 -0
  64. package/dist/config/manager.test.js +192 -0
  65. package/dist/config/manager.test.js.map +1 -0
  66. package/dist/config/merger.d.ts +56 -0
  67. package/dist/config/merger.d.ts.map +1 -0
  68. package/dist/config/merger.js +177 -0
  69. package/dist/config/merger.js.map +1 -0
  70. package/dist/config/test-utils.d.ts +24 -0
  71. package/dist/config/test-utils.d.ts.map +1 -0
  72. package/dist/config/test-utils.js +55 -0
  73. package/dist/config/test-utils.js.map +1 -0
  74. package/dist/config/types.d.ts +78 -9
  75. package/dist/config/types.d.ts.map +1 -1
  76. package/dist/config/types.js +52 -2
  77. package/dist/config/types.js.map +1 -1
  78. package/dist/memory/import-resolver.d.ts +46 -0
  79. package/dist/memory/import-resolver.d.ts.map +1 -0
  80. package/dist/memory/import-resolver.js +117 -0
  81. package/dist/memory/import-resolver.js.map +1 -0
  82. package/dist/memory/index.d.ts +7 -6
  83. package/dist/memory/index.d.ts.map +1 -1
  84. package/dist/memory/index.js +7 -5
  85. package/dist/memory/index.js.map +1 -1
  86. package/dist/memory/init-prompt.d.ts +22 -0
  87. package/dist/memory/init-prompt.d.ts.map +1 -0
  88. package/dist/memory/init-prompt.js +103 -0
  89. package/dist/memory/init-prompt.js.map +1 -0
  90. package/dist/memory/memory-manager.d.ts +119 -0
  91. package/dist/memory/memory-manager.d.ts.map +1 -0
  92. package/dist/memory/memory-manager.js +587 -0
  93. package/dist/memory/memory-manager.js.map +1 -0
  94. package/dist/memory/rules-parser.d.ts +38 -0
  95. package/dist/memory/rules-parser.d.ts.map +1 -0
  96. package/dist/memory/rules-parser.js +69 -0
  97. package/dist/memory/rules-parser.js.map +1 -0
  98. package/dist/memory/test-utils.d.ts +20 -0
  99. package/dist/memory/test-utils.d.ts.map +1 -0
  100. package/dist/memory/test-utils.js +44 -0
  101. package/dist/memory/test-utils.js.map +1 -0
  102. package/dist/memory/types.d.ts +70 -63
  103. package/dist/memory/types.d.ts.map +1 -1
  104. package/dist/memory/types.js +42 -2
  105. package/dist/memory/types.js.map +1 -1
  106. package/dist/permissions/audit.d.ts +82 -0
  107. package/dist/permissions/audit.d.ts.map +1 -0
  108. package/dist/permissions/audit.js +229 -0
  109. package/dist/permissions/audit.js.map +1 -0
  110. package/dist/permissions/index.d.ts +11 -1
  111. package/dist/permissions/index.d.ts.map +1 -1
  112. package/dist/permissions/index.js +15 -0
  113. package/dist/permissions/index.js.map +1 -1
  114. package/dist/permissions/manager.d.ts +149 -13
  115. package/dist/permissions/manager.d.ts.map +1 -1
  116. package/dist/permissions/manager.js +480 -35
  117. package/dist/permissions/manager.js.map +1 -1
  118. package/dist/permissions/manager.test.d.ts +5 -0
  119. package/dist/permissions/manager.test.d.ts.map +1 -0
  120. package/dist/permissions/manager.test.js +213 -0
  121. package/dist/permissions/manager.test.js.map +1 -0
  122. package/dist/permissions/persistence.d.ts +74 -0
  123. package/dist/permissions/persistence.d.ts.map +1 -0
  124. package/dist/permissions/persistence.js +248 -0
  125. package/dist/permissions/persistence.js.map +1 -0
  126. package/dist/permissions/persistence.test.d.ts +5 -0
  127. package/dist/permissions/persistence.test.d.ts.map +1 -0
  128. package/dist/permissions/persistence.test.js +171 -0
  129. package/dist/permissions/persistence.test.js.map +1 -0
  130. package/dist/permissions/prompt-matcher.d.ts +64 -0
  131. package/dist/permissions/prompt-matcher.d.ts.map +1 -0
  132. package/dist/permissions/prompt-matcher.js +415 -0
  133. package/dist/permissions/prompt-matcher.js.map +1 -0
  134. package/dist/permissions/prompt-matcher.test.d.ts +5 -0
  135. package/dist/permissions/prompt-matcher.test.d.ts.map +1 -0
  136. package/dist/permissions/prompt-matcher.test.js +107 -0
  137. package/dist/permissions/prompt-matcher.test.js.map +1 -0
  138. package/dist/permissions/types.d.ts +157 -0
  139. package/dist/permissions/types.d.ts.map +1 -1
  140. package/dist/permissions/types.js +43 -8
  141. package/dist/permissions/types.js.map +1 -1
  142. package/dist/prompts/index.d.ts +92 -0
  143. package/dist/prompts/index.d.ts.map +1 -0
  144. package/dist/prompts/index.js +241 -0
  145. package/dist/prompts/index.js.map +1 -0
  146. package/dist/tools/builtin/bash.d.ts.map +1 -1
  147. package/dist/tools/builtin/bash.js +2 -1
  148. package/dist/tools/builtin/bash.js.map +1 -1
  149. package/dist/tools/builtin/edit.d.ts.map +1 -1
  150. package/dist/tools/builtin/edit.js +2 -1
  151. package/dist/tools/builtin/edit.js.map +1 -1
  152. package/dist/tools/builtin/glob.d.ts.map +1 -1
  153. package/dist/tools/builtin/glob.js +2 -1
  154. package/dist/tools/builtin/glob.js.map +1 -1
  155. package/dist/tools/builtin/grep.d.ts.map +1 -1
  156. package/dist/tools/builtin/grep.js +2 -1
  157. package/dist/tools/builtin/grep.js.map +1 -1
  158. package/dist/tools/builtin/read.d.ts.map +1 -1
  159. package/dist/tools/builtin/read.js +2 -1
  160. package/dist/tools/builtin/read.js.map +1 -1
  161. package/dist/tools/builtin/todowrite.d.ts +15 -0
  162. package/dist/tools/builtin/todowrite.d.ts.map +1 -0
  163. package/dist/tools/builtin/todowrite.js +88 -0
  164. package/dist/tools/builtin/todowrite.js.map +1 -0
  165. package/dist/tools/builtin/webfetch.d.ts.map +1 -1
  166. package/dist/tools/builtin/webfetch.js +2 -5
  167. package/dist/tools/builtin/webfetch.js.map +1 -1
  168. package/dist/tools/builtin/websearch.d.ts.map +1 -1
  169. package/dist/tools/builtin/websearch.js +2 -16
  170. package/dist/tools/builtin/websearch.js.map +1 -1
  171. package/dist/tools/builtin/write.d.ts.map +1 -1
  172. package/dist/tools/builtin/write.js +2 -1
  173. package/dist/tools/builtin/write.js.map +1 -1
  174. package/dist/tools/index.d.ts +7 -0
  175. package/dist/tools/index.d.ts.map +1 -1
  176. package/dist/tools/index.js +4 -0
  177. package/dist/tools/index.js.map +1 -1
  178. package/dist/tools/types.d.ts +22 -0
  179. package/dist/tools/types.d.ts.map +1 -1
  180. package/dist/tools/types.js +8 -0
  181. package/dist/tools/types.js.map +1 -1
  182. package/docs/config-system-comparison.md +707 -0
  183. package/docs/memory-system.md +238 -0
  184. package/docs/permissions.md +368 -0
  185. package/docs/proposals/0005-todo-system.md +350 -85
  186. package/docs/proposals/0006-memory-system.md +11 -10
  187. package/docs/proposals/0012-ask-user-question.md +941 -206
  188. package/docs/proposals/0023-permission-enhancements.md +61 -2
  189. package/docs/proposals/0041-configuration-system.md +33 -2
  190. package/docs/proposals/0042-prompt-optimization.md +866 -0
  191. package/docs/proposals/README.md +6 -5
  192. package/jest.config.js +26 -0
  193. package/package.json +8 -2
  194. package/src/agent/agent.ts +111 -16
  195. package/src/cli/components/App.tsx +309 -36
  196. package/src/cli/components/CommandSuggestions.tsx +2 -0
  197. package/src/cli/components/Header.tsx +11 -17
  198. package/src/cli/components/Logo.tsx +76 -9
  199. package/src/cli/components/Messages.tsx +73 -53
  200. package/src/cli/components/PermissionPrompt.tsx +388 -0
  201. package/src/cli/components/ProviderManager.tsx +5 -5
  202. package/src/cli/components/Spinner.tsx +138 -25
  203. package/src/cli/components/TodoList.tsx +54 -0
  204. package/src/cli/components/index.ts +6 -0
  205. package/src/cli/index.tsx +54 -6
  206. package/src/config/index.ts +78 -4
  207. package/src/config/levels.test.ts +163 -0
  208. package/src/config/levels.ts +285 -0
  209. package/src/config/loader.test.ts +120 -0
  210. package/src/config/loader.ts +178 -0
  211. package/src/config/manager.test.ts +215 -0
  212. package/src/config/manager.ts +328 -40
  213. package/src/config/merger.test.ts +360 -0
  214. package/src/config/merger.ts +221 -0
  215. package/src/config/test-utils.ts +79 -0
  216. package/src/config/types.ts +152 -9
  217. package/src/memory/import-resolver.test.ts +117 -0
  218. package/src/memory/import-resolver.ts +149 -0
  219. package/src/memory/index.ts +11 -0
  220. package/src/memory/init-prompt.ts +113 -0
  221. package/src/memory/memory-manager.test.ts +198 -0
  222. package/src/memory/memory-manager.ts +716 -0
  223. package/src/memory/rules-parser.test.ts +182 -0
  224. package/src/memory/rules-parser.ts +82 -0
  225. package/src/memory/test-utils.ts +60 -0
  226. package/src/memory/types.ts +119 -0
  227. package/src/permissions/audit.ts +284 -0
  228. package/src/permissions/index.ts +20 -1
  229. package/src/permissions/manager.test.ts +260 -0
  230. package/src/permissions/manager.ts +592 -40
  231. package/src/permissions/persistence.test.ts +220 -0
  232. package/src/permissions/persistence.ts +301 -0
  233. package/src/permissions/prompt-matcher.test.ts +213 -0
  234. package/src/permissions/prompt-matcher.ts +472 -0
  235. package/src/permissions/types.ts +236 -8
  236. package/src/prompts/index.test.ts +279 -0
  237. package/src/prompts/index.ts +306 -0
  238. package/src/prompts/system/anthropic.txt +29 -0
  239. package/src/prompts/system/base.txt +124 -0
  240. package/src/prompts/system/gemini.txt +35 -0
  241. package/src/prompts/system/generic.txt +128 -0
  242. package/src/prompts/system/openai.txt +29 -0
  243. package/src/prompts/tools/bash.txt +60 -0
  244. package/src/prompts/tools/edit.txt +29 -0
  245. package/src/prompts/tools/glob.txt +35 -0
  246. package/src/prompts/tools/grep.txt +43 -0
  247. package/src/prompts/tools/read.txt +22 -0
  248. package/src/prompts/tools/todowrite.txt +71 -0
  249. package/src/prompts/tools/webfetch.txt +34 -0
  250. package/src/prompts/tools/websearch.txt +41 -0
  251. package/src/prompts/tools/write.txt +23 -0
  252. package/src/tools/builtin/bash.ts +2 -1
  253. package/src/tools/builtin/edit.ts +2 -1
  254. package/src/tools/builtin/glob.ts +2 -1
  255. package/src/tools/builtin/grep.ts +2 -1
  256. package/src/tools/builtin/read.ts +2 -1
  257. package/src/tools/builtin/todowrite.ts +102 -0
  258. package/src/tools/builtin/webfetch.ts +2 -5
  259. package/src/tools/builtin/websearch.ts +2 -16
  260. package/src/tools/builtin/write.ts +2 -1
  261. package/src/tools/index.ts +4 -0
  262. package/src/tools/types.ts +12 -0
  263. package/tsconfig.json +1 -1
@@ -0,0 +1,587 @@
1
+ /**
2
+ * Memory Manager - Core memory system implementation
3
+ *
4
+ * Implements Claude Code compatible memory loading with merge semantics:
5
+ * At each level, both .gencode and .claude directories are loaded.
6
+ * Content from .gencode appears later in the context (higher priority for LLM).
7
+ *
8
+ * Loading order within each level:
9
+ * 1. .claude files first (lower priority - LLM sees earlier)
10
+ * 2. .gencode files second (higher priority - LLM sees later)
11
+ *
12
+ * Level loading order:
13
+ * 1. Enterprise (system-wide managed, enforced)
14
+ * 2. User (~/.gencode/ + ~/.claude/)
15
+ * 3. User Rules
16
+ * 4. Extra (GENCODE_CONFIG_DIRS)
17
+ * 5. Project (recursive upward search)
18
+ * 6. Project Rules
19
+ * 7. Local (*.local.md files)
20
+ */
21
+ import * as fs from 'fs/promises';
22
+ import * as path from 'path';
23
+ import * as os from 'os';
24
+ import { glob } from 'glob';
25
+ import { ImportResolver } from './import-resolver.js';
26
+ import { parseRuleFrontmatter, activateRules } from './rules-parser.js';
27
+ import { DEFAULT_MEMORY_CONFIG } from './types.js';
28
+ import { getManagedPaths, GENCODE_CONFIG_DIRS_ENV } from '../config/types.js';
29
+ export class MemoryManager {
30
+ config;
31
+ importResolver;
32
+ loadedMemory = null;
33
+ constructor(config) {
34
+ this.config = { ...DEFAULT_MEMORY_CONFIG, ...config };
35
+ // Create import resolver with the config
36
+ this.importResolver = new ImportResolver(this.config);
37
+ }
38
+ /**
39
+ * Load all memory files for the given working directory
40
+ */
41
+ async load(options) {
42
+ const { cwd, currentFile } = options;
43
+ const files = [];
44
+ const rules = [];
45
+ const errors = [];
46
+ const sources = [];
47
+ let totalSize = 0;
48
+ this.importResolver.reset();
49
+ const projectRoot = await this.findProjectRoot(cwd);
50
+ this.importResolver.setProjectRoot(projectRoot);
51
+ // 1. Load enterprise memory (system-wide, enforced)
52
+ const enterpriseFiles = await this.loadEnterpriseMemory();
53
+ for (const file of enterpriseFiles) {
54
+ files.push(file);
55
+ totalSize += file.content.length;
56
+ sources.push({
57
+ level: 'enterprise',
58
+ namespace: file.namespace,
59
+ path: file.path,
60
+ type: 'file',
61
+ size: file.content.length,
62
+ });
63
+ }
64
+ // 2. Load user-level memory (both claude and gencode)
65
+ const userFiles = await this.loadUserMemory();
66
+ for (const file of userFiles) {
67
+ if (totalSize + file.content.length <= this.config.maxTotalSize) {
68
+ files.push(file);
69
+ totalSize += file.content.length;
70
+ sources.push({
71
+ level: 'user',
72
+ namespace: file.namespace,
73
+ path: file.path,
74
+ type: 'file',
75
+ size: file.content.length,
76
+ });
77
+ }
78
+ else {
79
+ errors.push(`Skipped ${file.path}: would exceed max total size`);
80
+ }
81
+ }
82
+ // 3. Load user-level rules (both claude and gencode)
83
+ const userRules = await this.loadUserRules();
84
+ for (const rule of userRules) {
85
+ rules.push(rule);
86
+ sources.push({
87
+ level: 'user-rules',
88
+ namespace: rule.namespace,
89
+ path: rule.path,
90
+ type: 'rule',
91
+ size: rule.content.length,
92
+ });
93
+ }
94
+ // 4. Load extra config dirs memory
95
+ const extraFiles = await this.loadExtraMemory();
96
+ for (const file of extraFiles) {
97
+ if (totalSize + file.content.length <= this.config.maxTotalSize) {
98
+ files.push(file);
99
+ totalSize += file.content.length;
100
+ sources.push({
101
+ level: 'extra',
102
+ namespace: file.namespace,
103
+ path: file.path,
104
+ type: 'file',
105
+ size: file.content.length,
106
+ });
107
+ }
108
+ else {
109
+ errors.push(`Skipped ${file.path}: would exceed max total size`);
110
+ }
111
+ }
112
+ // 5. Load project-level memory (both claude and gencode, recursive upward)
113
+ const projectFiles = await this.loadProjectMemory(cwd, projectRoot);
114
+ for (const file of projectFiles) {
115
+ if (totalSize + file.content.length <= this.config.maxTotalSize) {
116
+ files.push(file);
117
+ totalSize += file.content.length;
118
+ sources.push({
119
+ level: 'project',
120
+ namespace: file.namespace,
121
+ path: file.path,
122
+ type: 'file',
123
+ size: file.content.length,
124
+ });
125
+ }
126
+ else {
127
+ errors.push(`Skipped ${file.path}: would exceed max total size`);
128
+ }
129
+ }
130
+ // 6. Load project-level rules (both claude and gencode)
131
+ const projectRules = await this.loadProjectRules(projectRoot);
132
+ for (const rule of projectRules) {
133
+ rules.push(rule);
134
+ sources.push({
135
+ level: 'project-rules',
136
+ namespace: rule.namespace,
137
+ path: rule.path,
138
+ type: 'rule',
139
+ size: rule.content.length,
140
+ });
141
+ }
142
+ // 7. Load local memory (both claude and gencode)
143
+ const localFiles = await this.loadLocalMemory(projectRoot);
144
+ for (const file of localFiles) {
145
+ if (totalSize + file.content.length <= this.config.maxTotalSize) {
146
+ files.push(file);
147
+ totalSize += file.content.length;
148
+ sources.push({
149
+ level: 'local',
150
+ namespace: file.namespace,
151
+ path: file.path,
152
+ type: 'file',
153
+ size: file.content.length,
154
+ });
155
+ }
156
+ else {
157
+ errors.push(`Skipped ${file.path}: would exceed max total size`);
158
+ }
159
+ }
160
+ // Activate rules based on current file
161
+ const activatedRules = activateRules(rules, currentFile);
162
+ // Build combined context
163
+ const context = this.buildContext(files, activatedRules);
164
+ this.loadedMemory = {
165
+ files,
166
+ rules: activatedRules,
167
+ totalSize,
168
+ context,
169
+ errors,
170
+ sources,
171
+ };
172
+ return this.loadedMemory;
173
+ }
174
+ /**
175
+ * Get the current loaded memory
176
+ */
177
+ getLoaded() {
178
+ return this.loadedMemory;
179
+ }
180
+ /**
181
+ * Check if any memory is loaded
182
+ */
183
+ hasMemory() {
184
+ return (this.loadedMemory !== null &&
185
+ (this.loadedMemory.files.length > 0 || this.loadedMemory.rules.length > 0));
186
+ }
187
+ /**
188
+ * Build combined context string for system prompt injection
189
+ */
190
+ buildContext(files, rules) {
191
+ const parts = [];
192
+ // Add regular memory files
193
+ for (const file of files) {
194
+ const label = this.getLevelLabel(file.level, file.namespace);
195
+ const enforced = file.enforced ? ' [ENFORCED]' : '';
196
+ parts.push(`Contents of ${file.path} (${label}${enforced}):\n\n${file.content}`);
197
+ }
198
+ // Add active rules
199
+ const activeRules = rules.filter((r) => r.isActive);
200
+ for (const rule of activeRules) {
201
+ const patterns = rule.patterns.length > 0 ? ` (applies to: ${rule.patterns.join(', ')})` : '';
202
+ parts.push(`Rule from ${rule.path}${patterns}:\n\n${rule.content}`);
203
+ }
204
+ if (parts.length === 0) {
205
+ return '';
206
+ }
207
+ return parts.join('\n\n---\n\n');
208
+ }
209
+ getLevelLabel(level, namespace) {
210
+ const levelLabels = {
211
+ enterprise: 'enterprise policy',
212
+ user: "user's private global instructions",
213
+ 'user-rules': 'user rules',
214
+ extra: 'extra config',
215
+ project: 'project instructions',
216
+ 'project-rules': 'project rules',
217
+ local: 'local personal notes',
218
+ };
219
+ const namespaceLabel = namespace === 'gencode' ? 'gencode' : namespace === 'claude' ? 'claude' : 'extra';
220
+ return `${levelLabels[level]} - ${namespaceLabel}`;
221
+ }
222
+ /**
223
+ * Load enterprise-level memory files
224
+ */
225
+ async loadEnterpriseMemory() {
226
+ const files = [];
227
+ const managedPaths = getManagedPaths();
228
+ // Load Claude first (lower priority)
229
+ const claudeFile = await this.loadFile(path.join(managedPaths.claude, this.config.claudeFilename), 'enterprise', 'claude');
230
+ if (claudeFile) {
231
+ claudeFile.enforced = true;
232
+ files.push(claudeFile);
233
+ }
234
+ // Load GenCode second (higher priority)
235
+ const gencodeFile = await this.loadFile(path.join(managedPaths.gencode, this.config.gencodeFilename), 'enterprise', 'gencode');
236
+ if (gencodeFile) {
237
+ gencodeFile.enforced = true;
238
+ files.push(gencodeFile);
239
+ }
240
+ return files;
241
+ }
242
+ /**
243
+ * Load user-level memory files (both claude and gencode)
244
+ */
245
+ async loadUserMemory() {
246
+ const home = os.homedir();
247
+ const files = [];
248
+ // Load Claude first (lower priority)
249
+ const claudeFile = await this.loadFile(path.join(home, this.config.claudeDir, this.config.claudeFilename), 'user', 'claude');
250
+ if (claudeFile)
251
+ files.push(claudeFile);
252
+ // Load GenCode second (higher priority)
253
+ const gencodeFile = await this.loadFile(path.join(home, this.config.gencodeDir, this.config.gencodeFilename), 'user', 'gencode');
254
+ if (gencodeFile)
255
+ files.push(gencodeFile);
256
+ return files;
257
+ }
258
+ /**
259
+ * Load user-level rules (both claude and gencode)
260
+ */
261
+ async loadUserRules() {
262
+ const home = os.homedir();
263
+ const rules = [];
264
+ // Load Claude rules first (lower priority)
265
+ const claudeRulesDir = path.join(home, this.config.claudeDir, this.config.rulesDir);
266
+ const claudeRules = await this.loadRulesFromDir(claudeRulesDir, 'user-rules', 'claude');
267
+ rules.push(...claudeRules);
268
+ // Load GenCode rules second (higher priority)
269
+ const gencodeRulesDir = path.join(home, this.config.gencodeDir, this.config.rulesDir);
270
+ const gencodeRules = await this.loadRulesFromDir(gencodeRulesDir, 'user-rules', 'gencode');
271
+ rules.push(...gencodeRules);
272
+ return rules;
273
+ }
274
+ /**
275
+ * Load extra config dirs memory
276
+ */
277
+ async loadExtraMemory() {
278
+ const extraDirs = this.parseExtraConfigDirs();
279
+ const files = [];
280
+ for (const dir of extraDirs) {
281
+ // Try CLAUDE.md
282
+ const claudeFile = await this.loadFile(path.join(dir, this.config.claudeFilename), 'extra', 'extra');
283
+ if (claudeFile)
284
+ files.push(claudeFile);
285
+ // Try AGENT.md
286
+ const gencodeFile = await this.loadFile(path.join(dir, this.config.gencodeFilename), 'extra', 'extra');
287
+ if (gencodeFile)
288
+ files.push(gencodeFile);
289
+ }
290
+ return files;
291
+ }
292
+ /**
293
+ * Parse GENCODE_CONFIG_DIRS environment variable
294
+ */
295
+ parseExtraConfigDirs() {
296
+ const value = process.env[GENCODE_CONFIG_DIRS_ENV];
297
+ if (!value)
298
+ return [];
299
+ return value
300
+ .split(':')
301
+ .map((dir) => dir.trim())
302
+ .filter((dir) => dir.length > 0)
303
+ .map((dir) => dir.replace(/^~/, os.homedir()));
304
+ }
305
+ /**
306
+ * Load project-level memory files (both claude and gencode)
307
+ */
308
+ async loadProjectMemory(cwd, projectRoot) {
309
+ const files = [];
310
+ // Load from project root - Claude files first
311
+ const claudeCandidates = [
312
+ path.join(projectRoot, this.config.claudeFilename),
313
+ path.join(projectRoot, this.config.claudeDir, this.config.claudeFilename),
314
+ ];
315
+ for (const filePath of claudeCandidates) {
316
+ const file = await this.loadFile(filePath, 'project', 'claude');
317
+ if (file) {
318
+ files.push(file);
319
+ break; // Only load one claude file
320
+ }
321
+ }
322
+ // Load from project root - GenCode files second
323
+ const gencodeCandidates = [
324
+ path.join(projectRoot, this.config.gencodeFilename),
325
+ path.join(projectRoot, this.config.gencodeDir, this.config.gencodeFilename),
326
+ ];
327
+ for (const filePath of gencodeCandidates) {
328
+ const file = await this.loadFile(filePath, 'project', 'gencode');
329
+ if (file) {
330
+ files.push(file);
331
+ break; // Only load one gencode file
332
+ }
333
+ }
334
+ return files;
335
+ }
336
+ /**
337
+ * Load project-level rules (both claude and gencode)
338
+ */
339
+ async loadProjectRules(projectRoot) {
340
+ const rules = [];
341
+ // Load Claude rules first (lower priority)
342
+ const claudeRulesDir = path.join(projectRoot, this.config.claudeDir, this.config.rulesDir);
343
+ const claudeRules = await this.loadRulesFromDir(claudeRulesDir, 'project-rules', 'claude');
344
+ rules.push(...claudeRules);
345
+ // Load GenCode rules second (higher priority)
346
+ const gencodeRulesDir = path.join(projectRoot, this.config.gencodeDir, this.config.rulesDir);
347
+ const gencodeRules = await this.loadRulesFromDir(gencodeRulesDir, 'project-rules', 'gencode');
348
+ rules.push(...gencodeRules);
349
+ return rules;
350
+ }
351
+ /**
352
+ * Load local memory files (both claude and gencode)
353
+ */
354
+ async loadLocalMemory(projectRoot) {
355
+ const files = [];
356
+ // Load Claude local files first
357
+ const claudeCandidates = [
358
+ path.join(projectRoot, this.config.claudeLocalFilename),
359
+ path.join(projectRoot, this.config.claudeDir, this.config.claudeLocalFilename),
360
+ ];
361
+ for (const filePath of claudeCandidates) {
362
+ const file = await this.loadFile(filePath, 'local', 'claude');
363
+ if (file) {
364
+ files.push(file);
365
+ break;
366
+ }
367
+ }
368
+ // Load GenCode local files second
369
+ const gencodeCandidates = [
370
+ path.join(projectRoot, this.config.gencodeLocalFilename),
371
+ path.join(projectRoot, this.config.gencodeDir, this.config.gencodeLocalFilename),
372
+ ];
373
+ for (const filePath of gencodeCandidates) {
374
+ const file = await this.loadFile(filePath, 'local', 'gencode');
375
+ if (file) {
376
+ files.push(file);
377
+ break;
378
+ }
379
+ }
380
+ return files;
381
+ }
382
+ /**
383
+ * Load rules from a directory
384
+ */
385
+ async loadRulesFromDir(rulesDir, level, namespace) {
386
+ const rules = [];
387
+ try {
388
+ const files = await glob('**/*.md', { cwd: rulesDir, absolute: true });
389
+ for (const filePath of files) {
390
+ try {
391
+ const stat = await fs.stat(filePath);
392
+ if (stat.size > this.config.maxFileSize) {
393
+ continue; // Skip files that are too large
394
+ }
395
+ const content = await fs.readFile(filePath, 'utf-8');
396
+ const parsed = parseRuleFrontmatter(content);
397
+ rules.push({
398
+ path: filePath,
399
+ content: parsed.content,
400
+ patterns: parsed.paths,
401
+ isActive: false, // Will be set by activateRules
402
+ level,
403
+ namespace,
404
+ });
405
+ }
406
+ catch {
407
+ // Skip invalid rule files
408
+ }
409
+ }
410
+ }
411
+ catch {
412
+ // Rules directory doesn't exist
413
+ }
414
+ return rules;
415
+ }
416
+ /**
417
+ * Load a single file with import resolution
418
+ */
419
+ async loadFile(filePath, level, namespace) {
420
+ try {
421
+ const stat = await fs.stat(filePath);
422
+ if (stat.size > this.config.maxFileSize) {
423
+ return null;
424
+ }
425
+ let content = await fs.readFile(filePath, 'utf-8');
426
+ const result = await this.importResolver.resolve(content, path.dirname(filePath));
427
+ content = result.content;
428
+ return {
429
+ path: filePath,
430
+ content,
431
+ level,
432
+ namespace,
433
+ loadedAt: new Date(),
434
+ resolvedImports: result.importedPaths,
435
+ };
436
+ }
437
+ catch {
438
+ return null;
439
+ }
440
+ }
441
+ /**
442
+ * Find project root (git root or cwd)
443
+ */
444
+ async findProjectRoot(cwd) {
445
+ let current = cwd;
446
+ while (current !== '/') {
447
+ try {
448
+ await fs.access(path.join(current, '.git'));
449
+ return current;
450
+ }
451
+ catch {
452
+ const parent = path.dirname(current);
453
+ if (parent === current)
454
+ break;
455
+ current = parent;
456
+ }
457
+ }
458
+ return cwd;
459
+ }
460
+ /**
461
+ * Quick add content to memory file
462
+ */
463
+ async quickAdd(content, level, cwd) {
464
+ let filePath;
465
+ const home = os.homedir();
466
+ if (level === 'user') {
467
+ const dir = path.join(home, this.config.gencodeDir);
468
+ await fs.mkdir(dir, { recursive: true });
469
+ filePath = path.join(dir, this.config.gencodeFilename);
470
+ }
471
+ else {
472
+ const projectRoot = await this.findProjectRoot(cwd);
473
+ filePath = path.join(projectRoot, this.config.gencodeFilename);
474
+ }
475
+ // Read existing content
476
+ let existing = '';
477
+ try {
478
+ existing = await fs.readFile(filePath, 'utf-8');
479
+ }
480
+ catch {
481
+ // File doesn't exist, create with header
482
+ existing = `# ${this.config.gencodeFilename.replace('.md', '')}\n\nThis file provides guidance when working with code in this repository.\n\n`;
483
+ }
484
+ // Append new content
485
+ const newContent = `${existing.trimEnd()}\n\n${content}\n`;
486
+ await fs.writeFile(filePath, newContent, 'utf-8');
487
+ return filePath;
488
+ }
489
+ /**
490
+ * Get list of loaded files for /memory command
491
+ */
492
+ getLoadedFileList() {
493
+ if (!this.loadedMemory)
494
+ return [];
495
+ const list = [];
496
+ for (const f of this.loadedMemory.files) {
497
+ list.push({
498
+ path: f.path,
499
+ level: f.level,
500
+ namespace: f.namespace,
501
+ size: f.content.length,
502
+ type: 'file',
503
+ });
504
+ }
505
+ for (const r of this.loadedMemory.rules) {
506
+ list.push({
507
+ path: r.path,
508
+ level: r.level,
509
+ namespace: r.namespace,
510
+ size: r.content.length,
511
+ type: 'rule',
512
+ });
513
+ }
514
+ return list;
515
+ }
516
+ /**
517
+ * Get the path where /init would create a file
518
+ */
519
+ getInitFilePath(cwd) {
520
+ return path.join(cwd, this.config.gencodeFilename);
521
+ }
522
+ /**
523
+ * Check if project memory already exists
524
+ */
525
+ async hasProjectMemory(cwd) {
526
+ const projectRoot = await this.findProjectRoot(cwd);
527
+ const candidates = [
528
+ path.join(projectRoot, this.config.gencodeFilename),
529
+ path.join(projectRoot, this.config.gencodeDir, this.config.gencodeFilename),
530
+ path.join(projectRoot, this.config.claudeFilename),
531
+ path.join(projectRoot, this.config.claudeDir, this.config.claudeFilename),
532
+ ];
533
+ for (const filePath of candidates) {
534
+ try {
535
+ await fs.access(filePath);
536
+ return true;
537
+ }
538
+ catch {
539
+ continue;
540
+ }
541
+ }
542
+ return false;
543
+ }
544
+ /**
545
+ * Get the path of existing project memory file
546
+ */
547
+ async getExistingProjectMemoryPath(cwd) {
548
+ const projectRoot = await this.findProjectRoot(cwd);
549
+ const candidates = [
550
+ path.join(projectRoot, this.config.gencodeFilename),
551
+ path.join(projectRoot, this.config.gencodeDir, this.config.gencodeFilename),
552
+ path.join(projectRoot, this.config.claudeFilename),
553
+ path.join(projectRoot, this.config.claudeDir, this.config.claudeFilename),
554
+ ];
555
+ for (const filePath of candidates) {
556
+ try {
557
+ await fs.access(filePath);
558
+ return filePath;
559
+ }
560
+ catch {
561
+ continue;
562
+ }
563
+ }
564
+ return null;
565
+ }
566
+ /**
567
+ * Get debug summary of loaded memory
568
+ */
569
+ getDebugSummary() {
570
+ if (!this.loadedMemory)
571
+ return 'Memory not loaded';
572
+ const lines = ['Memory Sources (in load order):'];
573
+ for (const source of this.loadedMemory.sources) {
574
+ const marker = source.level === 'enterprise' ? ' [enforced]' : '';
575
+ lines.push(` ${source.level}:${source.namespace} - ${source.path} (${source.size} bytes)${marker}`);
576
+ }
577
+ if (this.loadedMemory.errors.length > 0) {
578
+ lines.push('');
579
+ lines.push('Errors:');
580
+ for (const error of this.loadedMemory.errors) {
581
+ lines.push(` - ${error}`);
582
+ }
583
+ }
584
+ return lines.join('\n');
585
+ }
586
+ }
587
+ //# sourceMappingURL=memory-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../src/memory/memory-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Rules Parser - Parse frontmatter from rules files
3
+ *
4
+ * Uses gray-matter for YAML frontmatter parsing.
5
+ * Supports 'paths:' frontmatter for glob-based rule scoping.
6
+ *
7
+ * Example rule file:
8
+ * ---
9
+ * paths:
10
+ * - "src/api/**\/*.ts"
11
+ * - "src/routes/**\/*.ts"
12
+ * ---
13
+ *
14
+ * # API Development Rules
15
+ * - Use async/await consistently
16
+ */
17
+ import type { MemoryRule } from './types.js';
18
+ export interface ParsedRule {
19
+ paths: string[];
20
+ content: string;
21
+ }
22
+ /**
23
+ * Parse frontmatter from a rule file
24
+ */
25
+ export declare function parseRuleFrontmatter(fileContent: string): ParsedRule;
26
+ /**
27
+ * Check if a file path matches any of the glob patterns
28
+ */
29
+ export declare function matchesPatterns(filePath: string, patterns: string[]): boolean;
30
+ /**
31
+ * Activate rules based on current file context
32
+ */
33
+ export declare function activateRules(rules: MemoryRule[], currentFile?: string): MemoryRule[];
34
+ /**
35
+ * Get only active rules
36
+ */
37
+ export declare function getActiveRules(rules: MemoryRule[]): MemoryRule[];
38
+ //# sourceMappingURL=rules-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-parser.d.ts","sourceRoot":"","sources":["../../src/memory/rules-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAmBpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAW7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAKrF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAEhE"}