gencode-ai 0.1.1 → 0.1.3

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 (287) hide show
  1. package/.gencode/settings.local.json +7 -0
  2. package/CLAUDE.md +86 -0
  3. package/README.md +13 -16
  4. package/dist/agent/agent.d.ts +50 -1
  5. package/dist/agent/agent.d.ts.map +1 -1
  6. package/dist/agent/agent.js +96 -16
  7. package/dist/agent/agent.js.map +1 -1
  8. package/dist/agent/index.d.ts +1 -0
  9. package/dist/agent/index.d.ts.map +1 -1
  10. package/dist/agent/types.d.ts +14 -1
  11. package/dist/agent/types.d.ts.map +1 -1
  12. package/dist/cli/components/App.d.ts +8 -1
  13. package/dist/cli/components/App.d.ts.map +1 -1
  14. package/dist/cli/components/App.js +266 -29
  15. package/dist/cli/components/App.js.map +1 -1
  16. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
  17. package/dist/cli/components/CommandSuggestions.js +2 -0
  18. package/dist/cli/components/CommandSuggestions.js.map +1 -1
  19. package/dist/cli/components/Header.d.ts +1 -1
  20. package/dist/cli/components/Header.d.ts.map +1 -1
  21. package/dist/cli/components/Header.js +4 -6
  22. package/dist/cli/components/Header.js.map +1 -1
  23. package/dist/cli/components/Logo.d.ts +1 -0
  24. package/dist/cli/components/Logo.d.ts.map +1 -1
  25. package/dist/cli/components/Logo.js +16 -3
  26. package/dist/cli/components/Logo.js.map +1 -1
  27. package/dist/cli/components/Messages.d.ts +4 -4
  28. package/dist/cli/components/Messages.d.ts.map +1 -1
  29. package/dist/cli/components/Messages.js +66 -23
  30. package/dist/cli/components/Messages.js.map +1 -1
  31. package/dist/cli/components/PermissionPrompt.d.ts +60 -0
  32. package/dist/cli/components/PermissionPrompt.d.ts.map +1 -0
  33. package/dist/cli/components/PermissionPrompt.js +192 -0
  34. package/dist/cli/components/PermissionPrompt.js.map +1 -0
  35. package/dist/cli/components/ProviderManager.js +3 -3
  36. package/dist/cli/components/ProviderManager.js.map +1 -1
  37. package/dist/cli/components/QuestionPrompt.d.ts +23 -0
  38. package/dist/cli/components/QuestionPrompt.d.ts.map +1 -0
  39. package/dist/cli/components/QuestionPrompt.js +231 -0
  40. package/dist/cli/components/QuestionPrompt.js.map +1 -0
  41. package/dist/cli/components/Spinner.d.ts +7 -2
  42. package/dist/cli/components/Spinner.d.ts.map +1 -1
  43. package/dist/cli/components/Spinner.js +116 -25
  44. package/dist/cli/components/Spinner.js.map +1 -1
  45. package/dist/cli/components/TodoList.d.ts +7 -0
  46. package/dist/cli/components/TodoList.d.ts.map +1 -0
  47. package/dist/cli/components/TodoList.js +34 -0
  48. package/dist/cli/components/TodoList.js.map +1 -0
  49. package/dist/cli/components/index.d.ts +2 -0
  50. package/dist/cli/components/index.d.ts.map +1 -1
  51. package/dist/cli/components/index.js +2 -0
  52. package/dist/cli/components/index.js.map +1 -1
  53. package/dist/cli/components/theme.d.ts +7 -0
  54. package/dist/cli/components/theme.d.ts.map +1 -1
  55. package/dist/cli/components/theme.js +11 -1
  56. package/dist/cli/components/theme.js.map +1 -1
  57. package/dist/cli/index.js +47 -7
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/config/index.d.ts +13 -4
  60. package/dist/config/index.d.ts.map +1 -1
  61. package/dist/config/index.js +18 -3
  62. package/dist/config/index.js.map +1 -1
  63. package/dist/config/levels.d.ts +49 -0
  64. package/dist/config/levels.d.ts.map +1 -0
  65. package/dist/config/levels.js +222 -0
  66. package/dist/config/levels.js.map +1 -0
  67. package/dist/config/loader.d.ts +46 -0
  68. package/dist/config/loader.d.ts.map +1 -0
  69. package/dist/config/loader.js +153 -0
  70. package/dist/config/loader.js.map +1 -0
  71. package/dist/config/manager.d.ts +115 -15
  72. package/dist/config/manager.d.ts.map +1 -1
  73. package/dist/config/manager.js +260 -34
  74. package/dist/config/manager.js.map +1 -1
  75. package/dist/config/manager.test.d.ts +5 -0
  76. package/dist/config/manager.test.d.ts.map +1 -0
  77. package/dist/config/manager.test.js +192 -0
  78. package/dist/config/manager.test.js.map +1 -0
  79. package/dist/config/merger.d.ts +56 -0
  80. package/dist/config/merger.d.ts.map +1 -0
  81. package/dist/config/merger.js +177 -0
  82. package/dist/config/merger.js.map +1 -0
  83. package/dist/config/test-utils.d.ts +24 -0
  84. package/dist/config/test-utils.d.ts.map +1 -0
  85. package/dist/config/test-utils.js +55 -0
  86. package/dist/config/test-utils.js.map +1 -0
  87. package/dist/config/types.d.ts +78 -9
  88. package/dist/config/types.d.ts.map +1 -1
  89. package/dist/config/types.js +52 -2
  90. package/dist/config/types.js.map +1 -1
  91. package/dist/memory/import-resolver.d.ts +46 -0
  92. package/dist/memory/import-resolver.d.ts.map +1 -0
  93. package/dist/memory/import-resolver.js +117 -0
  94. package/dist/memory/import-resolver.js.map +1 -0
  95. package/dist/memory/index.d.ts +7 -6
  96. package/dist/memory/index.d.ts.map +1 -1
  97. package/dist/memory/index.js +7 -5
  98. package/dist/memory/index.js.map +1 -1
  99. package/dist/memory/init-prompt.d.ts +22 -0
  100. package/dist/memory/init-prompt.d.ts.map +1 -0
  101. package/dist/memory/init-prompt.js +103 -0
  102. package/dist/memory/init-prompt.js.map +1 -0
  103. package/dist/memory/memory-manager.d.ts +119 -0
  104. package/dist/memory/memory-manager.d.ts.map +1 -0
  105. package/dist/memory/memory-manager.js +587 -0
  106. package/dist/memory/memory-manager.js.map +1 -0
  107. package/dist/memory/rules-parser.d.ts +38 -0
  108. package/dist/memory/rules-parser.d.ts.map +1 -0
  109. package/dist/memory/rules-parser.js +69 -0
  110. package/dist/memory/rules-parser.js.map +1 -0
  111. package/dist/memory/test-utils.d.ts +20 -0
  112. package/dist/memory/test-utils.d.ts.map +1 -0
  113. package/dist/memory/test-utils.js +44 -0
  114. package/dist/memory/test-utils.js.map +1 -0
  115. package/dist/memory/types.d.ts +70 -63
  116. package/dist/memory/types.d.ts.map +1 -1
  117. package/dist/memory/types.js +42 -2
  118. package/dist/memory/types.js.map +1 -1
  119. package/dist/permissions/audit.d.ts +82 -0
  120. package/dist/permissions/audit.d.ts.map +1 -0
  121. package/dist/permissions/audit.js +229 -0
  122. package/dist/permissions/audit.js.map +1 -0
  123. package/dist/permissions/index.d.ts +11 -1
  124. package/dist/permissions/index.d.ts.map +1 -1
  125. package/dist/permissions/index.js +15 -0
  126. package/dist/permissions/index.js.map +1 -1
  127. package/dist/permissions/manager.d.ts +149 -13
  128. package/dist/permissions/manager.d.ts.map +1 -1
  129. package/dist/permissions/manager.js +480 -35
  130. package/dist/permissions/manager.js.map +1 -1
  131. package/dist/permissions/manager.test.d.ts +5 -0
  132. package/dist/permissions/manager.test.d.ts.map +1 -0
  133. package/dist/permissions/manager.test.js +213 -0
  134. package/dist/permissions/manager.test.js.map +1 -0
  135. package/dist/permissions/persistence.d.ts +74 -0
  136. package/dist/permissions/persistence.d.ts.map +1 -0
  137. package/dist/permissions/persistence.js +248 -0
  138. package/dist/permissions/persistence.js.map +1 -0
  139. package/dist/permissions/persistence.test.d.ts +5 -0
  140. package/dist/permissions/persistence.test.d.ts.map +1 -0
  141. package/dist/permissions/persistence.test.js +171 -0
  142. package/dist/permissions/persistence.test.js.map +1 -0
  143. package/dist/permissions/prompt-matcher.d.ts +64 -0
  144. package/dist/permissions/prompt-matcher.d.ts.map +1 -0
  145. package/dist/permissions/prompt-matcher.js +415 -0
  146. package/dist/permissions/prompt-matcher.js.map +1 -0
  147. package/dist/permissions/prompt-matcher.test.d.ts +5 -0
  148. package/dist/permissions/prompt-matcher.test.d.ts.map +1 -0
  149. package/dist/permissions/prompt-matcher.test.js +107 -0
  150. package/dist/permissions/prompt-matcher.test.js.map +1 -0
  151. package/dist/permissions/types.d.ts +157 -0
  152. package/dist/permissions/types.d.ts.map +1 -1
  153. package/dist/permissions/types.js +45 -8
  154. package/dist/permissions/types.js.map +1 -1
  155. package/dist/prompts/index.d.ts +92 -0
  156. package/dist/prompts/index.d.ts.map +1 -0
  157. package/dist/prompts/index.js +241 -0
  158. package/dist/prompts/index.js.map +1 -0
  159. package/dist/tools/builtin/ask-user.d.ts +64 -0
  160. package/dist/tools/builtin/ask-user.d.ts.map +1 -0
  161. package/dist/tools/builtin/ask-user.js +148 -0
  162. package/dist/tools/builtin/ask-user.js.map +1 -0
  163. package/dist/tools/builtin/bash.d.ts.map +1 -1
  164. package/dist/tools/builtin/bash.js +2 -1
  165. package/dist/tools/builtin/bash.js.map +1 -1
  166. package/dist/tools/builtin/edit.d.ts.map +1 -1
  167. package/dist/tools/builtin/edit.js +2 -1
  168. package/dist/tools/builtin/edit.js.map +1 -1
  169. package/dist/tools/builtin/glob.d.ts.map +1 -1
  170. package/dist/tools/builtin/glob.js +2 -1
  171. package/dist/tools/builtin/glob.js.map +1 -1
  172. package/dist/tools/builtin/grep.d.ts.map +1 -1
  173. package/dist/tools/builtin/grep.js +2 -1
  174. package/dist/tools/builtin/grep.js.map +1 -1
  175. package/dist/tools/builtin/read.d.ts.map +1 -1
  176. package/dist/tools/builtin/read.js +2 -1
  177. package/dist/tools/builtin/read.js.map +1 -1
  178. package/dist/tools/builtin/todowrite.d.ts +15 -0
  179. package/dist/tools/builtin/todowrite.d.ts.map +1 -0
  180. package/dist/tools/builtin/todowrite.js +88 -0
  181. package/dist/tools/builtin/todowrite.js.map +1 -0
  182. package/dist/tools/builtin/webfetch.d.ts.map +1 -1
  183. package/dist/tools/builtin/webfetch.js +2 -5
  184. package/dist/tools/builtin/webfetch.js.map +1 -1
  185. package/dist/tools/builtin/websearch.d.ts.map +1 -1
  186. package/dist/tools/builtin/websearch.js +2 -16
  187. package/dist/tools/builtin/websearch.js.map +1 -1
  188. package/dist/tools/builtin/write.d.ts.map +1 -1
  189. package/dist/tools/builtin/write.js +2 -1
  190. package/dist/tools/builtin/write.js.map +1 -1
  191. package/dist/tools/index.d.ts +19 -0
  192. package/dist/tools/index.d.ts.map +1 -1
  193. package/dist/tools/index.js +8 -0
  194. package/dist/tools/index.js.map +1 -1
  195. package/dist/tools/types.d.ts +39 -0
  196. package/dist/tools/types.d.ts.map +1 -1
  197. package/dist/tools/types.js +8 -0
  198. package/dist/tools/types.js.map +1 -1
  199. package/docs/config-system-comparison.md +707 -0
  200. package/docs/memory-system.md +238 -0
  201. package/docs/permissions.md +368 -0
  202. package/docs/proposals/0005-todo-system.md +350 -85
  203. package/docs/proposals/0006-memory-system.md +11 -10
  204. package/docs/proposals/0012-ask-user-question.md +1007 -207
  205. package/docs/proposals/0023-permission-enhancements.md +61 -2
  206. package/docs/proposals/0041-configuration-system.md +33 -2
  207. package/docs/proposals/0042-prompt-optimization.md +866 -0
  208. package/docs/proposals/README.md +7 -6
  209. package/examples/test-ask-user.ts +167 -0
  210. package/jest.config.js +26 -0
  211. package/package.json +8 -2
  212. package/src/agent/agent.ts +130 -16
  213. package/src/agent/index.ts +1 -0
  214. package/src/agent/types.ts +13 -1
  215. package/src/cli/components/App.tsx +362 -37
  216. package/src/cli/components/CommandSuggestions.tsx +2 -0
  217. package/src/cli/components/Header.tsx +11 -17
  218. package/src/cli/components/Logo.tsx +76 -9
  219. package/src/cli/components/Messages.tsx +104 -41
  220. package/src/cli/components/PermissionPrompt.tsx +388 -0
  221. package/src/cli/components/ProviderManager.tsx +5 -5
  222. package/src/cli/components/QuestionPrompt.tsx +462 -0
  223. package/src/cli/components/Spinner.tsx +138 -25
  224. package/src/cli/components/TodoList.tsx +54 -0
  225. package/src/cli/components/index.ts +7 -0
  226. package/src/cli/components/theme.ts +11 -1
  227. package/src/cli/index.tsx +54 -6
  228. package/src/config/index.ts +78 -4
  229. package/src/config/levels.test.ts +163 -0
  230. package/src/config/levels.ts +285 -0
  231. package/src/config/loader.test.ts +120 -0
  232. package/src/config/loader.ts +178 -0
  233. package/src/config/manager.test.ts +215 -0
  234. package/src/config/manager.ts +328 -40
  235. package/src/config/merger.test.ts +360 -0
  236. package/src/config/merger.ts +221 -0
  237. package/src/config/test-utils.ts +79 -0
  238. package/src/config/types.ts +152 -9
  239. package/src/memory/import-resolver.test.ts +117 -0
  240. package/src/memory/import-resolver.ts +149 -0
  241. package/src/memory/index.ts +11 -0
  242. package/src/memory/init-prompt.ts +113 -0
  243. package/src/memory/memory-manager.test.ts +198 -0
  244. package/src/memory/memory-manager.ts +716 -0
  245. package/src/memory/rules-parser.test.ts +182 -0
  246. package/src/memory/rules-parser.ts +82 -0
  247. package/src/memory/test-utils.ts +60 -0
  248. package/src/memory/types.ts +119 -0
  249. package/src/permissions/audit.ts +284 -0
  250. package/src/permissions/index.ts +20 -1
  251. package/src/permissions/manager.test.ts +260 -0
  252. package/src/permissions/manager.ts +592 -40
  253. package/src/permissions/persistence.test.ts +220 -0
  254. package/src/permissions/persistence.ts +301 -0
  255. package/src/permissions/prompt-matcher.test.ts +213 -0
  256. package/src/permissions/prompt-matcher.ts +472 -0
  257. package/src/permissions/types.ts +238 -8
  258. package/src/prompts/index.test.ts +279 -0
  259. package/src/prompts/index.ts +306 -0
  260. package/src/prompts/system/anthropic.txt +29 -0
  261. package/src/prompts/system/base.txt +166 -0
  262. package/src/prompts/system/gemini.txt +35 -0
  263. package/src/prompts/system/generic.txt +128 -0
  264. package/src/prompts/system/openai.txt +29 -0
  265. package/src/prompts/tools/ask-user.txt +110 -0
  266. package/src/prompts/tools/bash.txt +60 -0
  267. package/src/prompts/tools/edit.txt +29 -0
  268. package/src/prompts/tools/glob.txt +35 -0
  269. package/src/prompts/tools/grep.txt +43 -0
  270. package/src/prompts/tools/read.txt +22 -0
  271. package/src/prompts/tools/todowrite.txt +71 -0
  272. package/src/prompts/tools/webfetch.txt +34 -0
  273. package/src/prompts/tools/websearch.txt +41 -0
  274. package/src/prompts/tools/write.txt +23 -0
  275. package/src/tools/builtin/ask-user.ts +185 -0
  276. package/src/tools/builtin/bash.ts +2 -1
  277. package/src/tools/builtin/edit.ts +2 -1
  278. package/src/tools/builtin/glob.ts +2 -1
  279. package/src/tools/builtin/grep.ts +2 -1
  280. package/src/tools/builtin/read.ts +2 -1
  281. package/src/tools/builtin/todowrite.ts +102 -0
  282. package/src/tools/builtin/webfetch.ts +2 -5
  283. package/src/tools/builtin/websearch.ts +2 -16
  284. package/src/tools/builtin/write.ts +2 -1
  285. package/src/tools/index.ts +19 -0
  286. package/src/tools/types.ts +30 -0
  287. package/tsconfig.json +1 -1
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Configuration Loader - Load settings from various sources
3
+ *
4
+ * Loads configuration files from all levels and namespaces.
5
+ * Each level loads both .gencode and .claude directories.
6
+ */
7
+ import * as fs from 'fs/promises';
8
+ import { getConfigLevels } from './levels.js';
9
+ /**
10
+ * Load a single JSON settings file
11
+ */
12
+ async function loadJsonFile(filePath) {
13
+ try {
14
+ const content = await fs.readFile(filePath, 'utf-8');
15
+ return JSON.parse(content);
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ /**
22
+ * Load settings from a specific path info
23
+ */
24
+ async function loadFromPathInfo(pathInfo, levelType) {
25
+ const settings = await loadJsonFile(pathInfo.settingsPath);
26
+ if (!settings)
27
+ return null;
28
+ return {
29
+ level: levelType,
30
+ path: pathInfo.settingsPath,
31
+ namespace: pathInfo.namespace,
32
+ settings,
33
+ };
34
+ }
35
+ /**
36
+ * Load all configuration sources in order
37
+ *
38
+ * Returns an array of ConfigSource in priority order (lowest first).
39
+ * Within each level:
40
+ * - .claude is loaded first (lower priority)
41
+ * - .gencode is loaded second (higher priority)
42
+ *
43
+ * This allows proper merging where:
44
+ * - Later sources override earlier ones
45
+ * - GenCode settings override Claude settings at the same level
46
+ */
47
+ export async function loadAllSources(cwd) {
48
+ const levels = await getConfigLevels(cwd);
49
+ const sources = [];
50
+ for (const level of levels) {
51
+ // Load from each path in the level (claude first, then gencode)
52
+ for (const pathInfo of level.paths) {
53
+ const source = await loadFromPathInfo(pathInfo, level.type);
54
+ if (source) {
55
+ sources.push(source);
56
+ }
57
+ }
58
+ }
59
+ return sources;
60
+ }
61
+ /**
62
+ * Load configuration sources grouped by level
63
+ */
64
+ export async function loadSourcesByLevel(cwd) {
65
+ const levels = await getConfigLevels(cwd);
66
+ const sourcesByLevel = new Map();
67
+ for (const level of levels) {
68
+ const levelSources = [];
69
+ for (const pathInfo of level.paths) {
70
+ const source = await loadFromPathInfo(pathInfo, level.type);
71
+ if (source) {
72
+ levelSources.push(source);
73
+ }
74
+ }
75
+ if (levelSources.length > 0) {
76
+ sourcesByLevel.set(level.type, levelSources);
77
+ }
78
+ }
79
+ return sourcesByLevel;
80
+ }
81
+ /**
82
+ * Load only user-level settings
83
+ */
84
+ export async function loadUserSettings(cwd) {
85
+ const levels = await getConfigLevels(cwd);
86
+ const userLevel = levels.find((l) => l.type === 'user');
87
+ if (!userLevel)
88
+ return [];
89
+ const sources = [];
90
+ for (const pathInfo of userLevel.paths) {
91
+ const source = await loadFromPathInfo(pathInfo, 'user');
92
+ if (source) {
93
+ sources.push(source);
94
+ }
95
+ }
96
+ return sources;
97
+ }
98
+ /**
99
+ * Load only project-level settings
100
+ */
101
+ export async function loadProjectSettings(cwd) {
102
+ const levels = await getConfigLevels(cwd);
103
+ const projectLevel = levels.find((l) => l.type === 'project');
104
+ if (!projectLevel)
105
+ return [];
106
+ const sources = [];
107
+ for (const pathInfo of projectLevel.paths) {
108
+ const source = await loadFromPathInfo(pathInfo, 'project');
109
+ if (source) {
110
+ sources.push(source);
111
+ }
112
+ }
113
+ return sources;
114
+ }
115
+ /**
116
+ * Load only managed settings
117
+ */
118
+ export async function loadManagedSettings(cwd) {
119
+ const levels = await getConfigLevels(cwd);
120
+ const managedLevel = levels.find((l) => l.type === 'managed');
121
+ if (!managedLevel)
122
+ return [];
123
+ const sources = [];
124
+ for (const pathInfo of managedLevel.paths) {
125
+ const source = await loadFromPathInfo(pathInfo, 'managed');
126
+ if (source) {
127
+ sources.push(source);
128
+ }
129
+ }
130
+ return sources;
131
+ }
132
+ /**
133
+ * Get information about all configuration levels
134
+ */
135
+ export async function getConfigInfo(cwd) {
136
+ return getConfigLevels(cwd);
137
+ }
138
+ /**
139
+ * Check which config files exist
140
+ */
141
+ export async function getExistingConfigFiles(cwd) {
142
+ const levels = await getConfigLevels(cwd);
143
+ const existingFiles = [];
144
+ for (const level of levels) {
145
+ for (const pathInfo of level.paths) {
146
+ if (pathInfo.exists) {
147
+ existingFiles.push(pathInfo.settingsPath);
148
+ }
149
+ }
150
+ }
151
+ return existingFiles;
152
+ }
153
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,131 @@
1
1
  /**
2
- * Settings Manager - Persists user settings (Claude Code style)
2
+ * Configuration Manager - Unified multi-level configuration (Claude Code compatible)
3
+ *
4
+ * Configuration hierarchy (merged in order, later overrides earlier):
5
+ * 1. User: ~/.claude/ + ~/.gencode/ (gencode wins within level)
6
+ * 2. Extra: GENCODE_CONFIG_DIRS directories
7
+ * 3. Project: .claude/ + .gencode/ (gencode wins within level)
8
+ * 4. Local: *.local.* files (gencode wins within level)
9
+ * 5. CLI: Command line arguments
10
+ * 6. Managed: System-wide enforced settings (cannot be overridden)
11
+ *
12
+ * Within each level, both .claude and .gencode directories are loaded and merged,
13
+ * with .gencode taking higher priority.
3
14
  */
4
- import type { Settings, SettingsManagerOptions } from './types.js';
5
- export declare class SettingsManager {
6
- private settingsDir;
7
- private settingsPath;
8
- private settings;
9
- constructor(options?: SettingsManagerOptions);
15
+ import type { Settings, MergedConfig, ConfigSource, SettingsManagerOptions } from './types.js';
16
+ /**
17
+ * Configuration Manager
18
+ *
19
+ * Manages multi-level configuration loading, merging, and persistence.
20
+ * Compatible with both GenCode (.gencode/) and Claude Code (.claude/) directories.
21
+ */
22
+ export declare class ConfigManager {
23
+ private cwd;
24
+ private projectRoot;
25
+ private mergedConfig;
26
+ private cliArgs;
27
+ constructor(options?: {
28
+ cwd?: string;
29
+ });
10
30
  /**
11
- * Ensure settings directory exists
31
+ * Load and merge all configuration sources
12
32
  */
13
- private ensureDir;
33
+ load(): Promise<MergedConfig>;
14
34
  /**
15
- * Load settings from disk
35
+ * Set CLI argument overrides
16
36
  */
17
- load(): Promise<Settings>;
37
+ setCliArgs(args: Partial<Settings>): void;
38
+ /**
39
+ * Get the current merged settings
40
+ */
41
+ get(): Settings;
42
+ /**
43
+ * Get the full merged config with sources info
44
+ */
45
+ getMergedConfig(): MergedConfig | null;
46
+ /**
47
+ * Get all loaded sources
48
+ */
49
+ getSources(): ConfigSource[];
50
+ /**
51
+ * Get managed deny rules
52
+ */
53
+ getManagedDeny(): string[];
54
+ /**
55
+ * Save settings to a specific level
56
+ */
57
+ saveToLevel(updates: Partial<Settings>, level: 'user' | 'project' | 'local'): Promise<void>;
18
58
  /**
19
- * Save settings to disk (merges with existing)
59
+ * Save to global user settings (default)
20
60
  */
21
61
  save(updates: Partial<Settings>): Promise<void>;
22
62
  /**
23
- * Get current settings
63
+ * Add a permission rule
24
64
  */
25
- get(): Settings;
65
+ addPermissionRule(pattern: string, type: 'allow' | 'deny' | 'ask', level?: 'user' | 'project' | 'local'): Promise<void>;
66
+ /**
67
+ * Get existing config files
68
+ */
69
+ getExistingFiles(): Promise<string[]>;
70
+ /**
71
+ * Get debug summary of configuration
72
+ */
73
+ getDebugSummary(): string;
26
74
  /**
27
- * Get settings file path
75
+ * Get the project root directory
28
76
  */
77
+ getProjectRoot(): string;
78
+ /**
79
+ * Get the current working directory
80
+ */
81
+ getCwd(): string;
82
+ /**
83
+ * Get the primary settings file path for a level
84
+ */
85
+ getSettingsPath(level?: 'user' | 'project' | 'local'): string;
86
+ /**
87
+ * Get effective permissions (merged from all sources)
88
+ */
89
+ getEffectivePermissions(): {
90
+ allow: string[];
91
+ ask: string[];
92
+ deny: string[];
93
+ managedDeny: string[];
94
+ };
95
+ /**
96
+ * Check if a permission pattern is allowed
97
+ */
98
+ isAllowed(pattern: string): boolean;
99
+ /**
100
+ * Check if a permission pattern requires asking
101
+ */
102
+ shouldAsk(pattern: string): boolean;
103
+ /**
104
+ * Simple pattern matching (supports * and :* wildcards)
105
+ */
106
+ private matchPattern;
107
+ }
108
+ /**
109
+ * Legacy SettingsManager for backward compatibility
110
+ *
111
+ * @deprecated Use ConfigManager instead
112
+ */
113
+ export declare class SettingsManager {
114
+ private configManager;
115
+ private globalDir;
116
+ private projectDir;
117
+ constructor(options?: SettingsManagerOptions & {
118
+ cwd?: string;
119
+ });
120
+ load(): Promise<Settings>;
121
+ save(updates: Partial<Settings>): Promise<void>;
122
+ saveToLevel(updates: Partial<Settings>, level: 'global' | 'project' | 'local'): Promise<void>;
123
+ addPermissionRule(pattern: string, type: 'allow' | 'deny', level?: 'global' | 'project' | 'local'): Promise<void>;
124
+ get(): Settings;
29
125
  getPath(): string;
126
+ getProjectPath(): string;
127
+ getLocalPath(): string;
128
+ getCwd(): string;
129
+ getProjectDir(): string;
30
130
  }
31
131
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGnE,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,OAAO,GAAE,sBAA2B;IAMhD;;OAEG;YACW,SAAS;IAQvB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAY/B;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD;;OAEG;IACH,GAAG,IAAI,QAAQ;IAIf;;OAEG;IACH,OAAO,IAAI,MAAM;CAGlB"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -1,65 +1,291 @@
1
1
  /**
2
- * Settings Manager - Persists user settings (Claude Code style)
2
+ * Configuration Manager - Unified multi-level configuration (Claude Code compatible)
3
+ *
4
+ * Configuration hierarchy (merged in order, later overrides earlier):
5
+ * 1. User: ~/.claude/ + ~/.gencode/ (gencode wins within level)
6
+ * 2. Extra: GENCODE_CONFIG_DIRS directories
7
+ * 3. Project: .claude/ + .gencode/ (gencode wins within level)
8
+ * 4. Local: *.local.* files (gencode wins within level)
9
+ * 5. CLI: Command line arguments
10
+ * 6. Managed: System-wide enforced settings (cannot be overridden)
11
+ *
12
+ * Within each level, both .claude and .gencode directories are loaded and merged,
13
+ * with .gencode taking higher priority.
3
14
  */
4
15
  import * as fs from 'fs/promises';
5
16
  import * as path from 'path';
6
- import * as os from 'os';
7
- import { DEFAULT_SETTINGS_DIR, SETTINGS_FILE_NAME } from './types.js';
8
- export class SettingsManager {
9
- settingsDir;
10
- settingsPath;
11
- settings = {};
17
+ import { SETTINGS_FILE_NAME, SETTINGS_LOCAL_FILE_NAME } from './types.js';
18
+ import { loadAllSources, getExistingConfigFiles } from './loader.js';
19
+ import { mergeAllSources, mergeWithCliArgs, deepMerge, createMergeSummary } from './merger.js';
20
+ import { findProjectRoot, getPrimarySettingsDir, getSettingsFilePath } from './levels.js';
21
+ /**
22
+ * Configuration Manager
23
+ *
24
+ * Manages multi-level configuration loading, merging, and persistence.
25
+ * Compatible with both GenCode (.gencode/) and Claude Code (.claude/) directories.
26
+ */
27
+ export class ConfigManager {
28
+ cwd;
29
+ projectRoot = null;
30
+ mergedConfig = null;
31
+ cliArgs = {};
12
32
  constructor(options = {}) {
13
- const dir = options.settingsDir ?? DEFAULT_SETTINGS_DIR;
14
- this.settingsDir = dir.replace('~', os.homedir());
15
- this.settingsPath = path.join(this.settingsDir, SETTINGS_FILE_NAME);
33
+ this.cwd = options.cwd ?? process.cwd();
16
34
  }
17
35
  /**
18
- * Ensure settings directory exists
36
+ * Load and merge all configuration sources
19
37
  */
20
- async ensureDir() {
21
- try {
22
- await fs.mkdir(this.settingsDir, { recursive: true });
38
+ async load() {
39
+ // Find project root
40
+ this.projectRoot = await findProjectRoot(this.cwd);
41
+ // Load all sources
42
+ const sources = await loadAllSources(this.cwd);
43
+ // Merge all sources
44
+ let merged = mergeAllSources(sources);
45
+ // Apply CLI arguments if any
46
+ if (Object.keys(this.cliArgs).length > 0) {
47
+ merged = mergeWithCliArgs(merged, this.cliArgs);
23
48
  }
24
- catch {
25
- // Directory may already exist
49
+ this.mergedConfig = merged;
50
+ return merged;
51
+ }
52
+ /**
53
+ * Set CLI argument overrides
54
+ */
55
+ setCliArgs(args) {
56
+ this.cliArgs = args;
57
+ }
58
+ /**
59
+ * Get the current merged settings
60
+ */
61
+ get() {
62
+ if (!this.mergedConfig) {
63
+ return {};
26
64
  }
65
+ return { ...this.mergedConfig.settings };
27
66
  }
28
67
  /**
29
- * Load settings from disk
68
+ * Get the full merged config with sources info
30
69
  */
31
- async load() {
70
+ getMergedConfig() {
71
+ return this.mergedConfig;
72
+ }
73
+ /**
74
+ * Get all loaded sources
75
+ */
76
+ getSources() {
77
+ return this.mergedConfig?.sources ?? [];
78
+ }
79
+ /**
80
+ * Get managed deny rules
81
+ */
82
+ getManagedDeny() {
83
+ return this.mergedConfig?.managedDeny ?? [];
84
+ }
85
+ /**
86
+ * Save settings to a specific level
87
+ */
88
+ async saveToLevel(updates, level) {
89
+ if (!this.projectRoot) {
90
+ this.projectRoot = await findProjectRoot(this.cwd);
91
+ }
92
+ const dir = getPrimarySettingsDir(level, this.projectRoot);
93
+ const fileName = level === 'local' ? SETTINGS_LOCAL_FILE_NAME : SETTINGS_FILE_NAME;
94
+ const filePath = path.join(dir, fileName);
95
+ // Ensure directory exists
96
+ await fs.mkdir(dir, { recursive: true });
97
+ // Load existing settings for this level
98
+ let existing = {};
32
99
  try {
33
- const content = await fs.readFile(this.settingsPath, 'utf-8');
34
- this.settings = JSON.parse(content);
35
- return this.settings;
100
+ const content = await fs.readFile(filePath, 'utf-8');
101
+ existing = JSON.parse(content);
36
102
  }
37
103
  catch {
38
- // File doesn't exist or is invalid
39
- this.settings = {};
40
- return this.settings;
104
+ // File doesn't exist, start fresh
41
105
  }
106
+ // Merge updates into existing
107
+ const merged = deepMerge(existing, updates);
108
+ // Write back
109
+ await fs.writeFile(filePath, JSON.stringify(merged, null, 2), 'utf-8');
110
+ // Reload configuration
111
+ await this.load();
42
112
  }
43
113
  /**
44
- * Save settings to disk (merges with existing)
114
+ * Save to global user settings (default)
45
115
  */
46
116
  async save(updates) {
47
- await this.ensureDir();
48
- // Merge updates with existing settings
49
- this.settings = { ...this.settings, ...updates };
50
- await fs.writeFile(this.settingsPath, JSON.stringify(this.settings, null, 2), 'utf-8');
117
+ await this.saveToLevel(updates, 'user');
51
118
  }
52
119
  /**
53
- * Get current settings
120
+ * Add a permission rule
54
121
  */
55
- get() {
56
- return { ...this.settings };
122
+ async addPermissionRule(pattern, type, level = 'project') {
123
+ const updates = {
124
+ permissions: {
125
+ [type]: [pattern],
126
+ },
127
+ };
128
+ await this.saveToLevel(updates, level);
57
129
  }
58
130
  /**
59
- * Get settings file path
131
+ * Get existing config files
60
132
  */
133
+ async getExistingFiles() {
134
+ return getExistingConfigFiles(this.cwd);
135
+ }
136
+ /**
137
+ * Get debug summary of configuration
138
+ */
139
+ getDebugSummary() {
140
+ if (!this.mergedConfig) {
141
+ return 'Configuration not loaded';
142
+ }
143
+ return createMergeSummary(this.mergedConfig);
144
+ }
145
+ /**
146
+ * Get the project root directory
147
+ */
148
+ getProjectRoot() {
149
+ return this.projectRoot ?? this.cwd;
150
+ }
151
+ /**
152
+ * Get the current working directory
153
+ */
154
+ getCwd() {
155
+ return this.cwd;
156
+ }
157
+ /**
158
+ * Get the primary settings file path for a level
159
+ */
160
+ getSettingsPath(level = 'user') {
161
+ const projectRoot = this.projectRoot ?? this.cwd;
162
+ return getSettingsFilePath(level, projectRoot);
163
+ }
164
+ /**
165
+ * Get effective permissions (merged from all sources)
166
+ */
167
+ getEffectivePermissions() {
168
+ const settings = this.get();
169
+ const permissions = settings.permissions ?? {};
170
+ return {
171
+ allow: permissions.allow ?? [],
172
+ ask: permissions.ask ?? [],
173
+ deny: permissions.deny ?? [],
174
+ managedDeny: this.getManagedDeny(),
175
+ };
176
+ }
177
+ /**
178
+ * Check if a permission pattern is allowed
179
+ */
180
+ isAllowed(pattern) {
181
+ const { allow, deny, managedDeny } = this.getEffectivePermissions();
182
+ // Managed deny always wins
183
+ if (managedDeny.some((p) => this.matchPattern(pattern, p))) {
184
+ return false;
185
+ }
186
+ // Check deny list
187
+ if (deny.some((p) => this.matchPattern(pattern, p))) {
188
+ return false;
189
+ }
190
+ // Check allow list
191
+ return allow.some((p) => this.matchPattern(pattern, p));
192
+ }
193
+ /**
194
+ * Check if a permission pattern requires asking
195
+ */
196
+ shouldAsk(pattern) {
197
+ const { ask, allow, deny, managedDeny } = this.getEffectivePermissions();
198
+ // Managed deny always wins
199
+ if (managedDeny.some((p) => this.matchPattern(pattern, p))) {
200
+ return false; // Don't ask, just deny
201
+ }
202
+ // If explicitly allowed, don't ask
203
+ if (allow.some((p) => this.matchPattern(pattern, p))) {
204
+ return false;
205
+ }
206
+ // If explicitly denied, don't ask
207
+ if (deny.some((p) => this.matchPattern(pattern, p))) {
208
+ return false;
209
+ }
210
+ // Check ask list
211
+ if (ask.some((p) => this.matchPattern(pattern, p))) {
212
+ return true;
213
+ }
214
+ // Default: ask for unknown patterns
215
+ return true;
216
+ }
217
+ /**
218
+ * Simple pattern matching (supports * and :* wildcards)
219
+ */
220
+ matchPattern(value, pattern) {
221
+ // Exact match
222
+ if (value === pattern)
223
+ return true;
224
+ // Handle :* suffix (e.g., "Bash(git:*)" matches "Bash(git:status)")
225
+ if (pattern.endsWith(':*)')) {
226
+ const prefix = pattern.slice(0, -3); // Remove ":*)"
227
+ const valuePrefix = value.slice(0, value.lastIndexOf(':'));
228
+ return valuePrefix.startsWith(prefix);
229
+ }
230
+ // Handle * wildcards
231
+ if (pattern.includes('*')) {
232
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
233
+ return regex.test(value);
234
+ }
235
+ return false;
236
+ }
237
+ }
238
+ // =============================================================================
239
+ // Legacy SettingsManager (backward compatibility)
240
+ // =============================================================================
241
+ /**
242
+ * Legacy SettingsManager for backward compatibility
243
+ *
244
+ * @deprecated Use ConfigManager instead
245
+ */
246
+ export class SettingsManager {
247
+ configManager;
248
+ globalDir;
249
+ projectDir;
250
+ constructor(options = {}) {
251
+ this.configManager = new ConfigManager({ cwd: options.cwd });
252
+ // For legacy compatibility
253
+ const cwd = options.cwd ?? process.cwd();
254
+ this.globalDir = options.settingsDir ?? getPrimarySettingsDir('user', cwd);
255
+ this.projectDir = getPrimarySettingsDir('project', cwd);
256
+ }
257
+ async load() {
258
+ const merged = await this.configManager.load();
259
+ return merged.settings;
260
+ }
261
+ async save(updates) {
262
+ await this.configManager.save(updates);
263
+ }
264
+ async saveToLevel(updates, level) {
265
+ const mappedLevel = level === 'global' ? 'user' : level;
266
+ await this.configManager.saveToLevel(updates, mappedLevel);
267
+ }
268
+ async addPermissionRule(pattern, type, level = 'project') {
269
+ const mappedLevel = level === 'global' ? 'user' : level;
270
+ await this.configManager.addPermissionRule(pattern, type, mappedLevel);
271
+ }
272
+ get() {
273
+ return this.configManager.get();
274
+ }
61
275
  getPath() {
62
- return this.settingsPath;
276
+ return this.configManager.getSettingsPath('user');
277
+ }
278
+ getProjectPath() {
279
+ return this.configManager.getSettingsPath('project');
280
+ }
281
+ getLocalPath() {
282
+ return this.configManager.getSettingsPath('local');
283
+ }
284
+ getCwd() {
285
+ return this.configManager.getCwd();
286
+ }
287
+ getProjectDir() {
288
+ return this.projectDir;
63
289
  }
64
290
  }
65
291
  //# sourceMappingURL=manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,OAAO,eAAe;IAClB,WAAW,CAAS;IACpB,YAAY,CAAS;IACrB,QAAQ,GAAa,EAAE,CAAC;IAEhC,YAAY,UAAkC,EAAE;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;QACxD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;YACnC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAA0B;QACnC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAEvB,uCAAuC;QACvC,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;QAEjD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACtC,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,GAAG;QACD,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * SettingsManager Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=manager.test.d.ts.map