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,177 @@
1
+ /**
2
+ * Configuration Merger - Merge settings from multiple sources
3
+ *
4
+ * Implements the merge strategy:
5
+ * - Scalar values: Higher priority replaces lower
6
+ * - Arrays (permissions.allow, permissions.deny): Concatenate with deduplication
7
+ * - Objects: Deep merge recursively
8
+ * - Managed deny rules: Cannot be overridden by any level
9
+ */
10
+ /**
11
+ * Check if a value is a plain object
12
+ */
13
+ function isPlainObject(value) {
14
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
15
+ }
16
+ /**
17
+ * Deep merge two objects
18
+ *
19
+ * - Arrays are concatenated and deduplicated
20
+ * - Objects are recursively merged
21
+ * - Scalars from override replace base
22
+ */
23
+ export function deepMerge(base, override) {
24
+ const result = { ...base };
25
+ for (const key in override) {
26
+ const baseValue = result[key];
27
+ const overrideValue = override[key];
28
+ if (overrideValue === undefined) {
29
+ continue;
30
+ }
31
+ if (isPlainObject(baseValue) && isPlainObject(overrideValue)) {
32
+ // Recursively merge objects
33
+ result[key] = deepMerge(baseValue, overrideValue);
34
+ }
35
+ else if (Array.isArray(baseValue) && Array.isArray(overrideValue)) {
36
+ // Concatenate arrays and deduplicate
37
+ result[key] = deduplicateArray([
38
+ ...baseValue,
39
+ ...overrideValue,
40
+ ]);
41
+ }
42
+ else {
43
+ // Override scalar values
44
+ result[key] = overrideValue;
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ /**
50
+ * Deduplicate an array while preserving order
51
+ */
52
+ function deduplicateArray(arr) {
53
+ const seen = new Set();
54
+ const result = [];
55
+ for (const item of arr) {
56
+ const key = typeof item === 'object' ? JSON.stringify(item) : String(item);
57
+ if (!seen.has(key)) {
58
+ seen.add(key);
59
+ result.push(item);
60
+ }
61
+ }
62
+ return result;
63
+ }
64
+ /**
65
+ * Merge all configuration sources into a single settings object
66
+ *
67
+ * Sources should be in priority order (lowest first).
68
+ * Each source is merged on top of the previous result.
69
+ */
70
+ export function mergeSettings(sources) {
71
+ let merged = {};
72
+ for (const source of sources) {
73
+ merged = deepMerge(merged, source.settings);
74
+ }
75
+ return merged;
76
+ }
77
+ /**
78
+ * Extract managed deny rules from sources
79
+ *
80
+ * These rules are extracted from managed-level sources and cannot be
81
+ * overridden by any lower-level configuration.
82
+ */
83
+ export function extractManagedDeny(sources) {
84
+ const managedDeny = [];
85
+ for (const source of sources) {
86
+ if (source.level === 'managed') {
87
+ const deny = source.settings.permissions?.deny;
88
+ if (deny) {
89
+ managedDeny.push(...deny);
90
+ }
91
+ }
92
+ }
93
+ return deduplicateArray(managedDeny);
94
+ }
95
+ /**
96
+ * Apply managed restrictions to the merged settings
97
+ *
98
+ * - Ensures managed deny rules are always in the deny list
99
+ * - Removes managed deny patterns from allow list
100
+ */
101
+ export function applyManagedRestrictions(settings, managedDeny) {
102
+ if (managedDeny.length === 0) {
103
+ return settings;
104
+ }
105
+ const result = { ...settings };
106
+ const permissions = { ...(result.permissions || {}) };
107
+ // Ensure deny list includes all managed deny rules
108
+ const currentDeny = permissions.deny || [];
109
+ permissions.deny = deduplicateArray([...currentDeny, ...managedDeny]);
110
+ // Remove managed deny patterns from allow list
111
+ if (permissions.allow) {
112
+ permissions.allow = permissions.allow.filter((pattern) => !managedDeny.includes(pattern));
113
+ }
114
+ result.permissions = permissions;
115
+ return result;
116
+ }
117
+ /**
118
+ * Merge all configuration sources and apply restrictions
119
+ *
120
+ * This is the main entry point for configuration merging.
121
+ */
122
+ export function mergeAllSources(sources) {
123
+ // Extract managed deny rules first
124
+ const managedDeny = extractManagedDeny(sources);
125
+ // Merge all settings
126
+ let settings = mergeSettings(sources);
127
+ // Apply managed restrictions
128
+ settings = applyManagedRestrictions(settings, managedDeny);
129
+ return {
130
+ settings,
131
+ sources,
132
+ managedDeny,
133
+ };
134
+ }
135
+ /**
136
+ * Merge settings with CLI arguments
137
+ *
138
+ * CLI arguments have the highest priority (except managed restrictions).
139
+ */
140
+ export function mergeWithCliArgs(merged, cliArgs) {
141
+ // Merge CLI args as a virtual source
142
+ const settings = deepMerge(merged.settings, cliArgs);
143
+ // Re-apply managed restrictions to ensure they're not overridden
144
+ const finalSettings = applyManagedRestrictions(settings, merged.managedDeny);
145
+ return {
146
+ ...merged,
147
+ settings: finalSettings,
148
+ sources: [
149
+ ...merged.sources,
150
+ {
151
+ level: 'cli',
152
+ path: '<cli>',
153
+ namespace: 'gencode',
154
+ settings: cliArgs,
155
+ },
156
+ ],
157
+ };
158
+ }
159
+ /**
160
+ * Create a debug summary of the merge process
161
+ */
162
+ export function createMergeSummary(merged) {
163
+ const lines = ['Configuration Sources (in priority order):'];
164
+ for (const source of merged.sources) {
165
+ const marker = source.level === 'managed' ? ' [enforced]' : '';
166
+ lines.push(` ${source.level}:${source.namespace} - ${source.path}${marker}`);
167
+ }
168
+ if (merged.managedDeny.length > 0) {
169
+ lines.push('');
170
+ lines.push('Managed Deny Rules (cannot be overridden):');
171
+ for (const rule of merged.managedDeny) {
172
+ lines.push(` - ${rule}`);
173
+ }
174
+ }
175
+ return lines.join('\n');
176
+ }
177
+ //# sourceMappingURL=merger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merger.js","sourceRoot":"","sources":["../../src/config/merger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Shared test utilities for config tests
3
+ */
4
+ export interface TestProject {
5
+ tempDir: string;
6
+ projectDir: string;
7
+ cleanup: () => Promise<void>;
8
+ }
9
+ /**
10
+ * Create a test project with temp directory and git marker
11
+ */
12
+ export declare function createTestProject(prefix?: string): Promise<TestProject>;
13
+ /**
14
+ * Write JSON settings to a config directory
15
+ */
16
+ export declare function writeSettings(projectDir: string, namespace: 'claude' | 'gencode', settings: Record<string, unknown>, local?: boolean): Promise<string>;
17
+ /**
18
+ * Write memory file to a directory
19
+ */
20
+ export declare function writeMemory(projectDir: string, namespace: 'claude' | 'gencode', content: string, options?: {
21
+ local?: boolean;
22
+ inDir?: boolean;
23
+ }): Promise<string>;
24
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/config/test-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,SAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAetF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,QAAQ,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,UAAQ,GACZ,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,QAAQ,GAAG,SAAS,EAC/B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACjD,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Shared test utilities for config tests
3
+ */
4
+ import * as fs from 'fs/promises';
5
+ import * as path from 'path';
6
+ import * as os from 'os';
7
+ /**
8
+ * Create a test project with temp directory and git marker
9
+ */
10
+ export async function createTestProject(prefix = 'gencode-test-') {
11
+ const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), prefix));
12
+ const projectDir = path.join(tempDir, 'project');
13
+ await fs.mkdir(projectDir, { recursive: true });
14
+ await fs.mkdir(path.join(projectDir, '.git'));
15
+ return {
16
+ tempDir,
17
+ projectDir,
18
+ cleanup: async () => {
19
+ await fs.rm(tempDir, { recursive: true, force: true });
20
+ delete process.env.GENCODE_CONFIG_DIRS;
21
+ },
22
+ };
23
+ }
24
+ /**
25
+ * Write JSON settings to a config directory
26
+ */
27
+ export async function writeSettings(projectDir, namespace, settings, local = false) {
28
+ const dir = path.join(projectDir, namespace === 'claude' ? '.claude' : '.gencode');
29
+ await fs.mkdir(dir, { recursive: true });
30
+ const filename = local ? 'settings.local.json' : 'settings.json';
31
+ const filePath = path.join(dir, filename);
32
+ await fs.writeFile(filePath, JSON.stringify(settings));
33
+ return filePath;
34
+ }
35
+ /**
36
+ * Write memory file to a directory
37
+ */
38
+ export async function writeMemory(projectDir, namespace, content, options = {}) {
39
+ const { local = false, inDir = true } = options;
40
+ const filename = namespace === 'claude'
41
+ ? (local ? 'CLAUDE.local.md' : 'CLAUDE.md')
42
+ : (local ? 'AGENT.local.md' : 'AGENT.md');
43
+ let filePath;
44
+ if (inDir) {
45
+ const dir = path.join(projectDir, namespace === 'claude' ? '.claude' : '.gencode');
46
+ await fs.mkdir(dir, { recursive: true });
47
+ filePath = path.join(dir, filename);
48
+ }
49
+ else {
50
+ filePath = path.join(projectDir, filename);
51
+ }
52
+ await fs.writeFile(filePath, content);
53
+ return filePath;
54
+ }
55
+ //# sourceMappingURL=test-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/config/test-utils.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,94 @@
1
1
  /**
2
- * Settings Types - User settings persistence (Claude Code style)
2
+ * Configuration Types - Multi-level configuration system (Claude Code compatible)
3
+ *
4
+ * Configuration hierarchy (priority from low to high):
5
+ * 1. User Level: ~/.gencode/ + ~/.claude/ (merged, gencode wins)
6
+ * 2. Extra Dirs: GENCODE_CONFIG_DIRS environment variable
7
+ * 3. Project Level: .gencode/ + .claude/ (merged, gencode wins)
8
+ * 4. Local Level: .gencode/*.local.* + .claude/*.local.* (merged, gencode wins)
9
+ * 5. CLI Arguments: Command line overrides
10
+ * 6. Managed Level: System-wide enforced settings (cannot be overridden)
3
11
  */
4
12
  export type ProviderName = 'openai' | 'anthropic' | 'gemini' | 'vertex-ai';
5
13
  /**
6
- * Settings file structure (~/.gencode/settings.json)
7
- * Similar to Claude Code's settings.json
14
+ * Permission rules for tools
15
+ */
16
+ export interface PermissionRules {
17
+ allow?: string[];
18
+ ask?: string[];
19
+ deny?: string[];
20
+ }
21
+ /**
22
+ * Settings file structure
23
+ * Compatible with Claude Code's settings.json
8
24
  */
9
25
  export interface Settings {
10
26
  model?: string;
11
27
  provider?: ProviderName;
12
- permissions?: {
13
- allow?: string[];
14
- deny?: string[];
28
+ permissions?: PermissionRules;
29
+ theme?: string;
30
+ language?: string;
31
+ alwaysThinkingEnabled?: boolean;
32
+ env?: Record<string, string>;
33
+ attribution?: {
34
+ commit?: string;
35
+ pr?: string;
15
36
  };
37
+ enabledPlugins?: Record<string, boolean>;
38
+ extraKnownMarketplaces?: Record<string, unknown>;
39
+ strictKnownMarketplaces?: unknown[];
40
+ [key: string]: unknown;
16
41
  }
17
- export interface SettingsManagerOptions {
18
- settingsDir?: string;
42
+ /**
43
+ * Configuration level identifiers
44
+ */
45
+ export type ConfigLevelType = 'managed' | 'user' | 'extra' | 'project' | 'local' | 'cli';
46
+ /**
47
+ * Represents a configuration level with its metadata
48
+ */
49
+ export interface ConfigLevel {
50
+ type: ConfigLevelType;
51
+ priority: number;
52
+ paths: string[];
53
+ description: string;
19
54
  }
20
- export declare const DEFAULT_SETTINGS_DIR = "~/.gencode";
55
+ /**
56
+ * A loaded configuration source
57
+ */
58
+ export interface ConfigSource {
59
+ level: ConfigLevelType;
60
+ path: string;
61
+ namespace: 'gencode' | 'claude' | 'extra';
62
+ settings: Settings;
63
+ }
64
+ /**
65
+ * Result of merging all configuration sources
66
+ */
67
+ export interface MergedConfig {
68
+ settings: Settings;
69
+ sources: ConfigSource[];
70
+ managedDeny: string[];
71
+ }
72
+ export declare const GENCODE_CONFIG_DIRS_ENV = "GENCODE_CONFIG_DIRS";
21
73
  export declare const SETTINGS_FILE_NAME = "settings.json";
74
+ export declare const SETTINGS_LOCAL_FILE_NAME = "settings.local.json";
75
+ export declare const MANAGED_SETTINGS_FILE_NAME = "managed-settings.json";
22
76
  export declare const PROVIDERS_FILE_NAME = "providers.json";
77
+ export declare const GENCODE_DIR = ".gencode";
78
+ export declare const CLAUDE_DIR = ".claude";
79
+ export declare const USER_GENCODE_DIR: string;
80
+ export declare const USER_CLAUDE_DIR: string;
81
+ export declare function getManagedPaths(): {
82
+ gencode: string;
83
+ claude: string;
84
+ };
85
+ export interface SettingsManagerOptions {
86
+ settingsDir?: string;
87
+ }
88
+ export declare const DEFAULT_SETTINGS_DIR = "~/.claude";
89
+ export declare const PROJECT_SETTINGS_DIR = ".claude";
90
+ export declare const FALLBACK_SETTINGS_DIR = "~/.gencode";
91
+ export declare const FALLBACK_PROJECT_DIR = ".gencode";
23
92
  /**
24
93
  * Provider connection info
25
94
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3E;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,57 @@
1
1
  /**
2
- * Settings Types - User settings persistence (Claude Code style)
2
+ * Configuration Types - Multi-level configuration system (Claude Code compatible)
3
+ *
4
+ * Configuration hierarchy (priority from low to high):
5
+ * 1. User Level: ~/.gencode/ + ~/.claude/ (merged, gencode wins)
6
+ * 2. Extra Dirs: GENCODE_CONFIG_DIRS environment variable
7
+ * 3. Project Level: .gencode/ + .claude/ (merged, gencode wins)
8
+ * 4. Local Level: .gencode/*.local.* + .claude/*.local.* (merged, gencode wins)
9
+ * 5. CLI Arguments: Command line overrides
10
+ * 6. Managed Level: System-wide enforced settings (cannot be overridden)
3
11
  */
4
- export const DEFAULT_SETTINGS_DIR = '~/.gencode';
12
+ import * as os from 'os';
13
+ import * as path from 'path';
14
+ // =============================================================================
15
+ // Constants
16
+ // =============================================================================
17
+ export const GENCODE_CONFIG_DIRS_ENV = 'GENCODE_CONFIG_DIRS';
18
+ // File names
5
19
  export const SETTINGS_FILE_NAME = 'settings.json';
20
+ export const SETTINGS_LOCAL_FILE_NAME = 'settings.local.json';
21
+ export const MANAGED_SETTINGS_FILE_NAME = 'managed-settings.json';
6
22
  export const PROVIDERS_FILE_NAME = 'providers.json';
23
+ // Directory names
24
+ export const GENCODE_DIR = '.gencode';
25
+ export const CLAUDE_DIR = '.claude';
26
+ // User directory paths
27
+ export const USER_GENCODE_DIR = path.join(os.homedir(), GENCODE_DIR);
28
+ export const USER_CLAUDE_DIR = path.join(os.homedir(), CLAUDE_DIR);
29
+ // Managed settings locations by platform
30
+ export function getManagedPaths() {
31
+ const platform = os.platform();
32
+ if (platform === 'darwin') {
33
+ return {
34
+ gencode: '/Library/Application Support/GenCode',
35
+ claude: '/Library/Application Support/ClaudeCode',
36
+ };
37
+ }
38
+ else if (platform === 'win32') {
39
+ return {
40
+ gencode: 'C:\\Program Files\\GenCode',
41
+ claude: 'C:\\Program Files\\ClaudeCode',
42
+ };
43
+ }
44
+ else {
45
+ // Linux and other Unix-like systems
46
+ return {
47
+ gencode: '/etc/gencode',
48
+ claude: '/etc/claude-code',
49
+ };
50
+ }
51
+ }
52
+ // Legacy exports
53
+ export const DEFAULT_SETTINGS_DIR = '~/.claude';
54
+ export const PROJECT_SETTINGS_DIR = '.claude';
55
+ export const FALLBACK_SETTINGS_DIR = '~/.gencode';
56
+ export const FALLBACK_PROJECT_DIR = '.gencode';
7
57
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAClD,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAgG7B,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D,aAAa;AACb,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AAEpC,uBAAuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAEnE,yCAAyC;AACzC,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,sCAAsC;YAC/C,MAAM,EAAE,yCAAyC;SAClD,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,4BAA4B;YACrC,MAAM,EAAE,+BAA+B;SACxC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,kBAAkB;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC;AAUD,iBAAiB;AACjB,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAClD,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Import Resolver - Handle @import syntax in memory files
3
+ *
4
+ * Supports:
5
+ * - @path/to/file.md - Relative imports
6
+ * - @./file.md - Current directory imports
7
+ * - @../parent/file.md - Parent directory imports
8
+ *
9
+ * Security:
10
+ * - Circular import detection
11
+ * - Max depth limit (5 levels)
12
+ * - Path traversal protection
13
+ */
14
+ import type { MemoryConfig } from './types.js';
15
+ export interface ImportResult {
16
+ content: string;
17
+ importedPaths: string[];
18
+ errors: string[];
19
+ }
20
+ export declare class ImportResolver {
21
+ private config;
22
+ private resolvedPaths;
23
+ private projectRoot;
24
+ constructor(config: MemoryConfig);
25
+ /**
26
+ * Set the project root for path traversal protection
27
+ */
28
+ setProjectRoot(root: string): void;
29
+ /**
30
+ * Resolve all @imports in content
31
+ */
32
+ resolve(content: string, basePath: string, depth?: number): Promise<ImportResult>;
33
+ /**
34
+ * Resolve import path to absolute path
35
+ */
36
+ private resolvePath;
37
+ /**
38
+ * Check if path is safe (within project or home directory)
39
+ */
40
+ private isPathSafe;
41
+ /**
42
+ * Reset resolver state for new file
43
+ */
44
+ reset(): void;
45
+ }
46
+ //# sourceMappingURL=import-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../src/memory/import-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE,YAAY;IAIhC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,YAAY,CAAC;IAiExB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAiBlB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Import Resolver - Handle @import syntax in memory files
3
+ *
4
+ * Supports:
5
+ * - @path/to/file.md - Relative imports
6
+ * - @./file.md - Current directory imports
7
+ * - @../parent/file.md - Parent directory imports
8
+ *
9
+ * Security:
10
+ * - Circular import detection
11
+ * - Max depth limit (5 levels)
12
+ * - Path traversal protection
13
+ */
14
+ import * as fs from 'fs/promises';
15
+ import * as path from 'path';
16
+ export class ImportResolver {
17
+ config;
18
+ resolvedPaths = new Set();
19
+ projectRoot = '';
20
+ constructor(config) {
21
+ this.config = config;
22
+ }
23
+ /**
24
+ * Set the project root for path traversal protection
25
+ */
26
+ setProjectRoot(root) {
27
+ this.projectRoot = root;
28
+ }
29
+ /**
30
+ * Resolve all @imports in content
31
+ */
32
+ async resolve(content, basePath, depth = 0) {
33
+ const importedPaths = [];
34
+ const errors = [];
35
+ if (depth >= this.config.maxImportDepth) {
36
+ errors.push(`Max import depth (${this.config.maxImportDepth}) exceeded`);
37
+ return { content, importedPaths, errors };
38
+ }
39
+ // Match @import lines: lines starting with @ followed by a path
40
+ // Pattern: @path/to/file or @./file or @../file
41
+ const importRegex = /^@([^\s]+\.md)$/gm;
42
+ let resolvedContent = content;
43
+ const matches = [...content.matchAll(importRegex)];
44
+ for (const match of matches) {
45
+ const importPath = match[1].trim();
46
+ const absolutePath = this.resolvePath(importPath, basePath);
47
+ // Circular import detection
48
+ if (this.resolvedPaths.has(absolutePath)) {
49
+ errors.push(`Circular import detected: ${importPath}`);
50
+ resolvedContent = resolvedContent.replace(match[0], `<!-- Circular import: ${importPath} -->`);
51
+ continue;
52
+ }
53
+ // Path traversal security check
54
+ if (!this.isPathSafe(absolutePath)) {
55
+ errors.push(`Import path outside allowed scope: ${importPath}`);
56
+ resolvedContent = resolvedContent.replace(match[0], `<!-- Blocked import: ${importPath} -->`);
57
+ continue;
58
+ }
59
+ try {
60
+ const stat = await fs.stat(absolutePath);
61
+ // Size limit check
62
+ if (stat.size > this.config.maxFileSize) {
63
+ errors.push(`Import too large (${Math.round(stat.size / 1024)}KB): ${importPath}`);
64
+ resolvedContent = resolvedContent.replace(match[0], `<!-- Import too large: ${importPath} -->`);
65
+ continue;
66
+ }
67
+ this.resolvedPaths.add(absolutePath);
68
+ let importedContent = await fs.readFile(absolutePath, 'utf-8');
69
+ importedPaths.push(absolutePath);
70
+ // Recursively resolve imports in the imported file
71
+ const nested = await this.resolve(importedContent, path.dirname(absolutePath), depth + 1);
72
+ importedContent = nested.content;
73
+ importedPaths.push(...nested.importedPaths);
74
+ errors.push(...nested.errors);
75
+ // Replace @import with content
76
+ resolvedContent = resolvedContent.replace(match[0], importedContent);
77
+ }
78
+ catch {
79
+ errors.push(`Failed to import: ${importPath}`);
80
+ resolvedContent = resolvedContent.replace(match[0], `<!-- Failed to import: ${importPath} -->`);
81
+ }
82
+ }
83
+ return { content: resolvedContent, importedPaths, errors };
84
+ }
85
+ /**
86
+ * Resolve import path to absolute path
87
+ */
88
+ resolvePath(importPath, basePath) {
89
+ if (path.isAbsolute(importPath)) {
90
+ return importPath;
91
+ }
92
+ return path.resolve(basePath, importPath);
93
+ }
94
+ /**
95
+ * Check if path is safe (within project or home directory)
96
+ */
97
+ isPathSafe(targetPath) {
98
+ const home = process.env.HOME || '';
99
+ const normalized = path.normalize(targetPath);
100
+ // Allow imports within project root
101
+ if (this.projectRoot && normalized.startsWith(this.projectRoot)) {
102
+ return true;
103
+ }
104
+ // Allow imports from home directory (for user-level imports)
105
+ if (home && normalized.startsWith(home)) {
106
+ return true;
107
+ }
108
+ return false;
109
+ }
110
+ /**
111
+ * Reset resolver state for new file
112
+ */
113
+ reset() {
114
+ this.resolvedPaths.clear();
115
+ }
116
+ }
117
+ //# sourceMappingURL=import-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-resolver.js","sourceRoot":"","sources":["../../src/memory/import-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAS7B,MAAM,OAAO,cAAc;IACjB,MAAM,CAAe;IACrB,aAAa,GAAgB,IAAI,GAAG,EAAE,CAAC;IACvC,WAAW,GAAW,EAAE,CAAC;IAEjC,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,OAAe,EACf,QAAgB,EAChB,QAAgB,CAAC;QAEjB,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,cAAc,YAAY,CAAC,CAAC;YACzE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QAC5C,CAAC;QAED,gEAAgE;QAChE,gDAAgD;QAChD,MAAM,WAAW,GAAG,mBAAmB,CAAC;QACxC,IAAI,eAAe,GAAG,OAAO,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAEnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAE5D,4BAA4B;YAC5B,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;gBACvD,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,yBAAyB,UAAU,MAAM,CAAC,CAAC;gBAC/F,SAAS;YACX,CAAC;YAED,gCAAgC;YAChC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;gBAChE,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,wBAAwB,UAAU,MAAM,CAAC,CAAC;gBAC9F,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEzC,mBAAmB;gBACnB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBACxC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC;oBACnF,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,0BAA0B,UAAU,MAAM,CAAC,CAAC;oBAChG,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACrC,IAAI,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBAC/D,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEjC,mDAAmD;gBACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAE1F,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;gBACjC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE9B,+BAA+B;gBAC/B,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;gBAC/C,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,0BAA0B,UAAU,MAAM,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,UAAkB,EAAE,QAAgB;QACtD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,UAAkB;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE9C,oCAAoC;QACpC,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,6DAA6D;QAC7D,IAAI,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -1,10 +1,11 @@
1
1
  /**
2
- * Memory System Module
2
+ * Memory System - Claude Code compatible memory management
3
3
  *
4
- * Provides context management for AI conversations through
5
- * hierarchical memory files (CLAUDE.md, AGENT.md, etc.)
4
+ * Provides hierarchical memory loading with AGENT.md (primary) and CLAUDE.md (fallback)
6
5
  */
7
- export { MemoryManager } from './manager.js';
8
- export { analyzeProject, generateMemoryContent, runInit } from './init.js';
9
- export type { MemoryFile, MemoryType, ProjectAnalysis, InitOptions, InitResult, ConflictResolution, } from './types.js';
6
+ export * from './types.js';
7
+ export { MemoryManager } from './memory-manager.js';
8
+ export { ImportResolver } from './import-resolver.js';
9
+ export { parseRuleFrontmatter, matchesPatterns, activateRules, getActiveRules } from './rules-parser.js';
10
+ export { gatherContextFiles, buildInitPrompt, getContextSummary } from './init-prompt.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EACV,UAAU,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,UAAU,EACV,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}