gencode-ai 0.1.0 → 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 (356) hide show
  1. package/.gencode/settings.local.json +7 -0
  2. package/README.md +20 -102
  3. package/dist/agent/agent.d.ts +43 -2
  4. package/dist/agent/agent.d.ts.map +1 -1
  5. package/dist/agent/agent.js +90 -17
  6. package/dist/agent/agent.js.map +1 -1
  7. package/dist/agent/types.d.ts +9 -1
  8. package/dist/agent/types.d.ts.map +1 -1
  9. package/dist/cli/components/AllModelsSelector.d.ts +11 -0
  10. package/dist/cli/components/AllModelsSelector.d.ts.map +1 -0
  11. package/dist/cli/components/AllModelsSelector.js +153 -0
  12. package/dist/cli/components/AllModelsSelector.js.map +1 -0
  13. package/dist/cli/components/App.d.ts +8 -1
  14. package/dist/cli/components/App.d.ts.map +1 -1
  15. package/dist/cli/components/App.js +276 -40
  16. package/dist/cli/components/App.js.map +1 -1
  17. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
  18. package/dist/cli/components/CommandSuggestions.js +3 -0
  19. package/dist/cli/components/CommandSuggestions.js.map +1 -1
  20. package/dist/cli/components/Header.d.ts +1 -1
  21. package/dist/cli/components/Header.d.ts.map +1 -1
  22. package/dist/cli/components/Header.js +4 -6
  23. package/dist/cli/components/Header.js.map +1 -1
  24. package/dist/cli/components/Logo.d.ts +1 -0
  25. package/dist/cli/components/Logo.d.ts.map +1 -1
  26. package/dist/cli/components/Logo.js +16 -3
  27. package/dist/cli/components/Logo.js.map +1 -1
  28. package/dist/cli/components/Messages.d.ts +17 -3
  29. package/dist/cli/components/Messages.d.ts.map +1 -1
  30. package/dist/cli/components/Messages.js +70 -18
  31. package/dist/cli/components/Messages.js.map +1 -1
  32. package/dist/cli/components/ModelSelector.d.ts +7 -7
  33. package/dist/cli/components/ModelSelector.d.ts.map +1 -1
  34. package/dist/cli/components/ModelSelector.js +116 -33
  35. package/dist/cli/components/ModelSelector.js.map +1 -1
  36. package/dist/cli/components/PermissionPrompt.d.ts +60 -0
  37. package/dist/cli/components/PermissionPrompt.d.ts.map +1 -0
  38. package/dist/cli/components/PermissionPrompt.js +192 -0
  39. package/dist/cli/components/PermissionPrompt.js.map +1 -0
  40. package/dist/cli/components/ProviderManager.d.ts +8 -0
  41. package/dist/cli/components/ProviderManager.d.ts.map +1 -0
  42. package/dist/cli/components/ProviderManager.js +280 -0
  43. package/dist/cli/components/ProviderManager.js.map +1 -0
  44. package/dist/cli/components/Spinner.d.ts +7 -2
  45. package/dist/cli/components/Spinner.d.ts.map +1 -1
  46. package/dist/cli/components/Spinner.js +116 -25
  47. package/dist/cli/components/Spinner.js.map +1 -1
  48. package/dist/cli/components/TodoList.d.ts +7 -0
  49. package/dist/cli/components/TodoList.d.ts.map +1 -0
  50. package/dist/cli/components/TodoList.js +34 -0
  51. package/dist/cli/components/TodoList.js.map +1 -0
  52. package/dist/cli/components/index.d.ts +1 -0
  53. package/dist/cli/components/index.d.ts.map +1 -1
  54. package/dist/cli/components/index.js +1 -0
  55. package/dist/cli/components/index.js.map +1 -1
  56. package/dist/cli/components/markdown.d.ts +9 -0
  57. package/dist/cli/components/markdown.d.ts.map +1 -0
  58. package/dist/cli/components/markdown.js +129 -0
  59. package/dist/cli/components/markdown.js.map +1 -0
  60. package/dist/cli/components/theme.d.ts +5 -0
  61. package/dist/cli/components/theme.d.ts.map +1 -1
  62. package/dist/cli/components/theme.js +7 -0
  63. package/dist/cli/components/theme.js.map +1 -1
  64. package/dist/cli/index.js +66 -12
  65. package/dist/cli/index.js.map +1 -1
  66. package/dist/config/index.d.ts +14 -4
  67. package/dist/config/index.d.ts.map +1 -1
  68. package/dist/config/index.js +19 -3
  69. package/dist/config/index.js.map +1 -1
  70. package/dist/config/levels.d.ts +49 -0
  71. package/dist/config/levels.d.ts.map +1 -0
  72. package/dist/config/levels.js +222 -0
  73. package/dist/config/levels.js.map +1 -0
  74. package/dist/config/loader.d.ts +46 -0
  75. package/dist/config/loader.d.ts.map +1 -0
  76. package/dist/config/loader.js +153 -0
  77. package/dist/config/loader.js.map +1 -0
  78. package/dist/config/manager.d.ts +115 -15
  79. package/dist/config/manager.d.ts.map +1 -1
  80. package/dist/config/manager.js +260 -34
  81. package/dist/config/manager.js.map +1 -1
  82. package/dist/config/manager.test.d.ts +5 -0
  83. package/dist/config/manager.test.d.ts.map +1 -0
  84. package/dist/config/manager.test.js +192 -0
  85. package/dist/config/manager.test.js.map +1 -0
  86. package/dist/config/merger.d.ts +56 -0
  87. package/dist/config/merger.d.ts.map +1 -0
  88. package/dist/config/merger.js +177 -0
  89. package/dist/config/merger.js.map +1 -0
  90. package/dist/config/providers-config.d.ts +28 -0
  91. package/dist/config/providers-config.d.ts.map +1 -0
  92. package/dist/config/providers-config.js +79 -0
  93. package/dist/config/providers-config.js.map +1 -0
  94. package/dist/config/test-utils.d.ts +24 -0
  95. package/dist/config/test-utils.d.ts.map +1 -0
  96. package/dist/config/test-utils.js +55 -0
  97. package/dist/config/test-utils.js.map +1 -0
  98. package/dist/config/types.d.ts +108 -9
  99. package/dist/config/types.d.ts.map +1 -1
  100. package/dist/config/types.js +53 -2
  101. package/dist/config/types.js.map +1 -1
  102. package/dist/memory/import-resolver.d.ts +46 -0
  103. package/dist/memory/import-resolver.d.ts.map +1 -0
  104. package/dist/memory/import-resolver.js +117 -0
  105. package/dist/memory/import-resolver.js.map +1 -0
  106. package/dist/memory/index.d.ts +7 -6
  107. package/dist/memory/index.d.ts.map +1 -1
  108. package/dist/memory/index.js +7 -5
  109. package/dist/memory/index.js.map +1 -1
  110. package/dist/memory/init-prompt.d.ts +22 -0
  111. package/dist/memory/init-prompt.d.ts.map +1 -0
  112. package/dist/memory/init-prompt.js +103 -0
  113. package/dist/memory/init-prompt.js.map +1 -0
  114. package/dist/memory/memory-manager.d.ts +119 -0
  115. package/dist/memory/memory-manager.d.ts.map +1 -0
  116. package/dist/memory/memory-manager.js +587 -0
  117. package/dist/memory/memory-manager.js.map +1 -0
  118. package/dist/memory/rules-parser.d.ts +38 -0
  119. package/dist/memory/rules-parser.d.ts.map +1 -0
  120. package/dist/memory/rules-parser.js +69 -0
  121. package/dist/memory/rules-parser.js.map +1 -0
  122. package/dist/memory/test-utils.d.ts +20 -0
  123. package/dist/memory/test-utils.d.ts.map +1 -0
  124. package/dist/memory/test-utils.js +44 -0
  125. package/dist/memory/test-utils.js.map +1 -0
  126. package/dist/memory/types.d.ts +70 -63
  127. package/dist/memory/types.d.ts.map +1 -1
  128. package/dist/memory/types.js +42 -2
  129. package/dist/memory/types.js.map +1 -1
  130. package/dist/permissions/audit.d.ts +82 -0
  131. package/dist/permissions/audit.d.ts.map +1 -0
  132. package/dist/permissions/audit.js +229 -0
  133. package/dist/permissions/audit.js.map +1 -0
  134. package/dist/permissions/index.d.ts +11 -1
  135. package/dist/permissions/index.d.ts.map +1 -1
  136. package/dist/permissions/index.js +15 -0
  137. package/dist/permissions/index.js.map +1 -1
  138. package/dist/permissions/manager.d.ts +149 -13
  139. package/dist/permissions/manager.d.ts.map +1 -1
  140. package/dist/permissions/manager.js +480 -35
  141. package/dist/permissions/manager.js.map +1 -1
  142. package/dist/permissions/manager.test.d.ts +5 -0
  143. package/dist/permissions/manager.test.d.ts.map +1 -0
  144. package/dist/permissions/manager.test.js +213 -0
  145. package/dist/permissions/manager.test.js.map +1 -0
  146. package/dist/permissions/persistence.d.ts +74 -0
  147. package/dist/permissions/persistence.d.ts.map +1 -0
  148. package/dist/permissions/persistence.js +248 -0
  149. package/dist/permissions/persistence.js.map +1 -0
  150. package/dist/permissions/persistence.test.d.ts +5 -0
  151. package/dist/permissions/persistence.test.d.ts.map +1 -0
  152. package/dist/permissions/persistence.test.js +171 -0
  153. package/dist/permissions/persistence.test.js.map +1 -0
  154. package/dist/permissions/prompt-matcher.d.ts +64 -0
  155. package/dist/permissions/prompt-matcher.d.ts.map +1 -0
  156. package/dist/permissions/prompt-matcher.js +415 -0
  157. package/dist/permissions/prompt-matcher.js.map +1 -0
  158. package/dist/permissions/prompt-matcher.test.d.ts +5 -0
  159. package/dist/permissions/prompt-matcher.test.d.ts.map +1 -0
  160. package/dist/permissions/prompt-matcher.test.js +107 -0
  161. package/dist/permissions/prompt-matcher.test.js.map +1 -0
  162. package/dist/permissions/types.d.ts +157 -0
  163. package/dist/permissions/types.d.ts.map +1 -1
  164. package/dist/permissions/types.js +43 -8
  165. package/dist/permissions/types.js.map +1 -1
  166. package/dist/prompts/index.d.ts +92 -0
  167. package/dist/prompts/index.d.ts.map +1 -0
  168. package/dist/prompts/index.js +241 -0
  169. package/dist/prompts/index.js.map +1 -0
  170. package/dist/providers/gemini.d.ts.map +1 -1
  171. package/dist/providers/gemini.js +14 -3
  172. package/dist/providers/gemini.js.map +1 -1
  173. package/dist/providers/index.d.ts +5 -3
  174. package/dist/providers/index.d.ts.map +1 -1
  175. package/dist/providers/index.js +13 -1
  176. package/dist/providers/index.js.map +1 -1
  177. package/dist/providers/registry.d.ts +66 -0
  178. package/dist/providers/registry.d.ts.map +1 -0
  179. package/dist/providers/registry.js +158 -0
  180. package/dist/providers/registry.js.map +1 -0
  181. package/dist/providers/search/brave.d.ts +14 -0
  182. package/dist/providers/search/brave.d.ts.map +1 -0
  183. package/dist/providers/search/brave.js +87 -0
  184. package/dist/providers/search/brave.js.map +1 -0
  185. package/dist/providers/search/exa.d.ts +12 -0
  186. package/dist/providers/search/exa.d.ts.map +1 -0
  187. package/dist/providers/search/exa.js +158 -0
  188. package/dist/providers/search/exa.js.map +1 -0
  189. package/dist/providers/search/index.d.ts +31 -0
  190. package/dist/providers/search/index.d.ts.map +1 -0
  191. package/dist/providers/search/index.js +75 -0
  192. package/dist/providers/search/index.js.map +1 -0
  193. package/dist/providers/search/serper.d.ts +14 -0
  194. package/dist/providers/search/serper.d.ts.map +1 -0
  195. package/dist/providers/search/serper.js +87 -0
  196. package/dist/providers/search/serper.js.map +1 -0
  197. package/dist/providers/search/types.d.ts +21 -0
  198. package/dist/providers/search/types.d.ts.map +1 -0
  199. package/dist/providers/search/types.js +5 -0
  200. package/dist/providers/search/types.js.map +1 -0
  201. package/dist/providers/store.d.ts +104 -0
  202. package/dist/providers/store.d.ts.map +1 -0
  203. package/dist/providers/store.js +171 -0
  204. package/dist/providers/store.js.map +1 -0
  205. package/dist/providers/types.d.ts +7 -1
  206. package/dist/providers/types.d.ts.map +1 -1
  207. package/dist/providers/vertex-ai.d.ts +33 -0
  208. package/dist/providers/vertex-ai.d.ts.map +1 -0
  209. package/dist/providers/vertex-ai.js +407 -0
  210. package/dist/providers/vertex-ai.js.map +1 -0
  211. package/dist/tools/builtin/bash.d.ts.map +1 -1
  212. package/dist/tools/builtin/bash.js +2 -1
  213. package/dist/tools/builtin/bash.js.map +1 -1
  214. package/dist/tools/builtin/edit.d.ts.map +1 -1
  215. package/dist/tools/builtin/edit.js +2 -1
  216. package/dist/tools/builtin/edit.js.map +1 -1
  217. package/dist/tools/builtin/glob.d.ts.map +1 -1
  218. package/dist/tools/builtin/glob.js +2 -1
  219. package/dist/tools/builtin/glob.js.map +1 -1
  220. package/dist/tools/builtin/grep.d.ts.map +1 -1
  221. package/dist/tools/builtin/grep.js +2 -1
  222. package/dist/tools/builtin/grep.js.map +1 -1
  223. package/dist/tools/builtin/read.d.ts.map +1 -1
  224. package/dist/tools/builtin/read.js +2 -1
  225. package/dist/tools/builtin/read.js.map +1 -1
  226. package/dist/tools/builtin/todowrite.d.ts +15 -0
  227. package/dist/tools/builtin/todowrite.d.ts.map +1 -0
  228. package/dist/tools/builtin/todowrite.js +88 -0
  229. package/dist/tools/builtin/todowrite.js.map +1 -0
  230. package/dist/tools/builtin/webfetch.d.ts +20 -0
  231. package/dist/tools/builtin/webfetch.d.ts.map +1 -0
  232. package/dist/tools/builtin/webfetch.js +228 -0
  233. package/dist/tools/builtin/webfetch.js.map +1 -0
  234. package/dist/tools/builtin/websearch.d.ts +17 -0
  235. package/dist/tools/builtin/websearch.d.ts.map +1 -0
  236. package/dist/tools/builtin/websearch.js +87 -0
  237. package/dist/tools/builtin/websearch.js.map +1 -0
  238. package/dist/tools/builtin/write.d.ts.map +1 -1
  239. package/dist/tools/builtin/write.js +2 -1
  240. package/dist/tools/builtin/write.js.map +1 -1
  241. package/dist/tools/index.d.ts +18 -0
  242. package/dist/tools/index.d.ts.map +1 -1
  243. package/dist/tools/index.js +28 -2
  244. package/dist/tools/index.js.map +1 -1
  245. package/dist/tools/types.d.ts +41 -0
  246. package/dist/tools/types.d.ts.map +1 -1
  247. package/dist/tools/types.js +16 -0
  248. package/dist/tools/types.js.map +1 -1
  249. package/dist/tools/utils/ssrf.d.ts +18 -0
  250. package/dist/tools/utils/ssrf.d.ts.map +1 -0
  251. package/dist/tools/utils/ssrf.js +70 -0
  252. package/dist/tools/utils/ssrf.js.map +1 -0
  253. package/docs/README.md +5 -4
  254. package/docs/config-system-comparison.md +707 -0
  255. package/docs/memory-system.md +238 -0
  256. package/docs/permissions.md +368 -0
  257. package/docs/proposals/0001-web-fetch-tool.md +32 -2
  258. package/docs/proposals/0002-web-search-tool.md +59 -2
  259. package/docs/proposals/0005-todo-system.md +350 -85
  260. package/docs/proposals/0006-memory-system.md +11 -10
  261. package/docs/proposals/0012-ask-user-question.md +941 -206
  262. package/docs/proposals/0023-permission-enhancements.md +61 -2
  263. package/docs/proposals/0041-configuration-system.md +587 -0
  264. package/docs/proposals/0042-prompt-optimization.md +866 -0
  265. package/docs/proposals/README.md +8 -6
  266. package/docs/providers.md +220 -0
  267. package/jest.config.js +26 -0
  268. package/package.json +14 -3
  269. package/src/agent/agent.ts +120 -18
  270. package/src/agent/types.ts +9 -1
  271. package/src/cli/components/App.tsx +369 -47
  272. package/src/cli/components/CommandSuggestions.tsx +3 -0
  273. package/src/cli/components/Header.tsx +11 -17
  274. package/src/cli/components/Logo.tsx +76 -9
  275. package/src/cli/components/Messages.tsx +146 -38
  276. package/src/cli/components/ModelSelector.tsx +169 -52
  277. package/src/cli/components/PermissionPrompt.tsx +388 -0
  278. package/src/cli/components/ProviderManager.tsx +534 -0
  279. package/src/cli/components/Spinner.tsx +138 -25
  280. package/src/cli/components/TodoList.tsx +54 -0
  281. package/src/cli/components/index.ts +6 -0
  282. package/src/cli/components/markdown.ts +157 -0
  283. package/src/cli/components/theme.ts +7 -0
  284. package/src/cli/index.tsx +76 -13
  285. package/src/config/index.ts +79 -4
  286. package/src/config/levels.test.ts +163 -0
  287. package/src/config/levels.ts +285 -0
  288. package/src/config/loader.test.ts +120 -0
  289. package/src/config/loader.ts +178 -0
  290. package/src/config/manager.test.ts +215 -0
  291. package/src/config/manager.ts +328 -40
  292. package/src/config/merger.test.ts +360 -0
  293. package/src/config/merger.ts +221 -0
  294. package/src/config/providers-config.ts +85 -0
  295. package/src/config/test-utils.ts +79 -0
  296. package/src/config/types.ts +186 -9
  297. package/src/memory/import-resolver.test.ts +117 -0
  298. package/src/memory/import-resolver.ts +149 -0
  299. package/src/memory/index.ts +11 -0
  300. package/src/memory/init-prompt.ts +113 -0
  301. package/src/memory/memory-manager.test.ts +198 -0
  302. package/src/memory/memory-manager.ts +716 -0
  303. package/src/memory/rules-parser.test.ts +182 -0
  304. package/src/memory/rules-parser.ts +82 -0
  305. package/src/memory/test-utils.ts +60 -0
  306. package/src/memory/types.ts +119 -0
  307. package/src/permissions/audit.ts +284 -0
  308. package/src/permissions/index.ts +20 -1
  309. package/src/permissions/manager.test.ts +260 -0
  310. package/src/permissions/manager.ts +592 -40
  311. package/src/permissions/persistence.test.ts +220 -0
  312. package/src/permissions/persistence.ts +301 -0
  313. package/src/permissions/prompt-matcher.test.ts +213 -0
  314. package/src/permissions/prompt-matcher.ts +472 -0
  315. package/src/permissions/types.ts +236 -8
  316. package/src/prompts/index.test.ts +279 -0
  317. package/src/prompts/index.ts +306 -0
  318. package/src/prompts/system/anthropic.txt +29 -0
  319. package/src/prompts/system/base.txt +124 -0
  320. package/src/prompts/system/gemini.txt +35 -0
  321. package/src/prompts/system/generic.txt +128 -0
  322. package/src/prompts/system/openai.txt +29 -0
  323. package/src/prompts/tools/bash.txt +60 -0
  324. package/src/prompts/tools/edit.txt +29 -0
  325. package/src/prompts/tools/glob.txt +35 -0
  326. package/src/prompts/tools/grep.txt +43 -0
  327. package/src/prompts/tools/read.txt +22 -0
  328. package/src/prompts/tools/todowrite.txt +71 -0
  329. package/src/prompts/tools/webfetch.txt +34 -0
  330. package/src/prompts/tools/websearch.txt +41 -0
  331. package/src/prompts/tools/write.txt +23 -0
  332. package/src/providers/gemini.ts +20 -4
  333. package/src/providers/index.ts +18 -3
  334. package/src/providers/registry.ts +198 -0
  335. package/src/providers/search/brave.ts +132 -0
  336. package/src/providers/search/exa.ts +217 -0
  337. package/src/providers/search/index.ts +79 -0
  338. package/src/providers/search/serper.ts +133 -0
  339. package/src/providers/search/types.ts +24 -0
  340. package/src/providers/store.ts +216 -0
  341. package/src/providers/types.ts +9 -1
  342. package/src/providers/vertex-ai.ts +594 -0
  343. package/src/tools/builtin/bash.ts +2 -1
  344. package/src/tools/builtin/edit.ts +2 -1
  345. package/src/tools/builtin/glob.ts +2 -1
  346. package/src/tools/builtin/grep.ts +2 -1
  347. package/src/tools/builtin/read.ts +2 -1
  348. package/src/tools/builtin/todowrite.ts +102 -0
  349. package/src/tools/builtin/webfetch.ts +261 -0
  350. package/src/tools/builtin/websearch.ts +103 -0
  351. package/src/tools/builtin/write.ts +2 -1
  352. package/src/tools/index.ts +28 -2
  353. package/src/tools/types.ts +32 -0
  354. package/src/tools/utils/ssrf.ts +79 -0
  355. package/tsconfig.json +1 -1
  356. package/CLAUDE.md +0 -70
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Permission Audit - Log permission decisions for transparency
3
+ *
4
+ * Maintains an in-memory audit log with optional file persistence.
5
+ * Useful for debugging, security review, and compliance.
6
+ */
7
+ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ const AUDIT_FILE = 'permission-audit.json';
11
+ const MAX_MEMORY_ENTRIES = 1000;
12
+ const MAX_FILE_ENTRIES = 10000;
13
+ const GLOBAL_DIR = path.join(os.homedir(), '.gencode');
14
+ /**
15
+ * Summarize tool input for audit (avoid storing sensitive data)
16
+ */
17
+ function summarizeInput(tool, input) {
18
+ if (input === null || input === undefined)
19
+ return '';
20
+ if (typeof input === 'string') {
21
+ return input.slice(0, 100);
22
+ }
23
+ if (typeof input !== 'object') {
24
+ return String(input).slice(0, 100);
25
+ }
26
+ const obj = input;
27
+ // Tool-specific summaries
28
+ switch (tool) {
29
+ case 'Bash':
30
+ return obj.command?.slice(0, 100) ?? '';
31
+ case 'Read':
32
+ case 'Write':
33
+ case 'Edit':
34
+ case 'Glob':
35
+ return obj.file_path ?? obj.path ?? '';
36
+ case 'Grep':
37
+ return `${obj.pattern ?? ''} in ${obj.path ?? '.'}`;
38
+ case 'WebFetch':
39
+ return obj.url?.slice(0, 100) ?? '';
40
+ case 'WebSearch':
41
+ return obj.query?.slice(0, 100) ?? '';
42
+ default:
43
+ // Generic summary
44
+ const keys = Object.keys(obj).slice(0, 3);
45
+ return keys.map((k) => `${k}:${String(obj[k]).slice(0, 20)}`).join(', ');
46
+ }
47
+ }
48
+ /**
49
+ * Permission Audit Logger
50
+ */
51
+ export class PermissionAudit {
52
+ entries = [];
53
+ persistToFile;
54
+ filePath;
55
+ constructor(options = {}) {
56
+ this.persistToFile = options.persistToFile ?? false;
57
+ const dir = options.auditDir ?? GLOBAL_DIR;
58
+ this.filePath = path.join(dir, AUDIT_FILE);
59
+ }
60
+ /**
61
+ * Log a permission decision
62
+ */
63
+ async log(tool, input, decision, reason, options = {}) {
64
+ const entry = {
65
+ timestamp: new Date(),
66
+ tool,
67
+ inputSummary: summarizeInput(tool, input),
68
+ decision,
69
+ reason,
70
+ matchedRule: options.matchedRule,
71
+ sessionId: options.sessionId,
72
+ };
73
+ // Add to memory
74
+ this.entries.push(entry);
75
+ // Trim if too large
76
+ if (this.entries.length > MAX_MEMORY_ENTRIES) {
77
+ this.entries = this.entries.slice(-MAX_MEMORY_ENTRIES);
78
+ }
79
+ // Persist if enabled
80
+ if (this.persistToFile) {
81
+ await this.appendToFile(entry);
82
+ }
83
+ }
84
+ /**
85
+ * Append entry to file
86
+ */
87
+ async appendToFile(entry) {
88
+ try {
89
+ // Ensure directory exists
90
+ const dir = path.dirname(this.filePath);
91
+ await fs.mkdir(dir, { recursive: true });
92
+ // Load existing entries
93
+ let fileEntries = [];
94
+ try {
95
+ const content = await fs.readFile(this.filePath, 'utf-8');
96
+ fileEntries = JSON.parse(content);
97
+ }
98
+ catch {
99
+ // File doesn't exist
100
+ }
101
+ // Add new entry
102
+ fileEntries.push(entry);
103
+ // Trim if too large
104
+ if (fileEntries.length > MAX_FILE_ENTRIES) {
105
+ fileEntries = fileEntries.slice(-MAX_FILE_ENTRIES);
106
+ }
107
+ // Write back
108
+ await fs.writeFile(this.filePath, JSON.stringify(fileEntries, null, 2), 'utf-8');
109
+ }
110
+ catch {
111
+ // Silently fail - audit should not break the app
112
+ }
113
+ }
114
+ /**
115
+ * Get recent audit entries
116
+ */
117
+ getRecent(count = 50) {
118
+ return this.entries.slice(-count);
119
+ }
120
+ /**
121
+ * Get all entries in memory
122
+ */
123
+ getAll() {
124
+ return [...this.entries];
125
+ }
126
+ /**
127
+ * Get entries by tool
128
+ */
129
+ getByTool(tool) {
130
+ return this.entries.filter((e) => e.tool === tool);
131
+ }
132
+ /**
133
+ * Get entries by decision
134
+ */
135
+ getByDecision(decision) {
136
+ return this.entries.filter((e) => e.decision === decision);
137
+ }
138
+ /**
139
+ * Get entries by session
140
+ */
141
+ getBySession(sessionId) {
142
+ return this.entries.filter((e) => e.sessionId === sessionId);
143
+ }
144
+ /**
145
+ * Get statistics
146
+ */
147
+ getStats() {
148
+ const stats = {
149
+ total: this.entries.length,
150
+ allowed: 0,
151
+ denied: 0,
152
+ confirmed: 0,
153
+ rejected: 0,
154
+ byTool: {},
155
+ };
156
+ for (const entry of this.entries) {
157
+ // Count by decision
158
+ switch (entry.decision) {
159
+ case 'allowed':
160
+ stats.allowed++;
161
+ break;
162
+ case 'denied':
163
+ stats.denied++;
164
+ break;
165
+ case 'confirmed':
166
+ stats.confirmed++;
167
+ break;
168
+ case 'rejected':
169
+ stats.rejected++;
170
+ break;
171
+ }
172
+ // Count by tool
173
+ stats.byTool[entry.tool] = (stats.byTool[entry.tool] ?? 0) + 1;
174
+ }
175
+ return stats;
176
+ }
177
+ /**
178
+ * Clear in-memory entries
179
+ */
180
+ clear() {
181
+ this.entries = [];
182
+ }
183
+ /**
184
+ * Load entries from file
185
+ */
186
+ async loadFromFile() {
187
+ try {
188
+ const content = await fs.readFile(this.filePath, 'utf-8');
189
+ return JSON.parse(content);
190
+ }
191
+ catch {
192
+ return [];
193
+ }
194
+ }
195
+ /**
196
+ * Clear file entries
197
+ */
198
+ async clearFile() {
199
+ try {
200
+ await fs.writeFile(this.filePath, '[]', 'utf-8');
201
+ }
202
+ catch {
203
+ // Silently fail
204
+ }
205
+ }
206
+ /**
207
+ * Format entry for display
208
+ */
209
+ formatEntry(entry) {
210
+ const time = entry.timestamp.toLocaleTimeString('en-US', {
211
+ hour: '2-digit',
212
+ minute: '2-digit',
213
+ });
214
+ const decision = entry.decision.toUpperCase().padEnd(9);
215
+ const tool = entry.tool.padEnd(10);
216
+ const input = entry.inputSummary.slice(0, 40).padEnd(40);
217
+ return `${time} ${decision} ${tool} ${input}`;
218
+ }
219
+ /**
220
+ * Format entries as table
221
+ */
222
+ formatTable(entries) {
223
+ const header = 'Time Decision Tool Input';
224
+ const separator = '─'.repeat(header.length);
225
+ const rows = entries.map((e) => this.formatEntry(e));
226
+ return [header, separator, ...rows].join('\n');
227
+ }
228
+ }
229
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/permissions/audit.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,17 @@
1
1
  /**
2
2
  * Permission System
3
+ *
4
+ * Enhanced permission management with:
5
+ * - Pattern-based rules (Claude Code style: "Bash(git add:*)")
6
+ * - Prompt-based permissions (ExitPlanMode style)
7
+ * - Session/project/global scopes
8
+ * - Persistent allowlists
9
+ * - Audit trail
3
10
  */
4
11
  export * from './types.js';
5
12
  export { PermissionManager } from './manager.js';
6
- export type { ConfirmCallback } from './manager.js';
13
+ export type { ConfirmCallback, SimpleConfirmCallback } from './manager.js';
14
+ export { PromptMatcher, parsePatternString, matchesPatternString } from './prompt-matcher.js';
15
+ export { PermissionPersistence } from './persistence.js';
16
+ export { PermissionAudit } from './audit.js';
7
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG3E,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -1,6 +1,21 @@
1
1
  /**
2
2
  * Permission System
3
+ *
4
+ * Enhanced permission management with:
5
+ * - Pattern-based rules (Claude Code style: "Bash(git add:*)")
6
+ * - Prompt-based permissions (ExitPlanMode style)
7
+ * - Session/project/global scopes
8
+ * - Persistent allowlists
9
+ * - Audit trail
3
10
  */
11
+ // Types
4
12
  export * from './types.js';
13
+ // Core Manager
5
14
  export { PermissionManager } from './manager.js';
15
+ // Prompt Matching
16
+ export { PromptMatcher, parsePatternString, matchesPatternString } from './prompt-matcher.js';
17
+ // Persistence
18
+ export { PermissionPersistence } from './persistence.js';
19
+ // Audit
20
+ export { PermissionAudit } from './audit.js';
6
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGjD,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,cAAc;AACd,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,QAAQ;AACR,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -1,32 +1,168 @@
1
1
  /**
2
- * Permission Manager - Controls tool execution permissions
2
+ * Permission Manager - Enhanced permission control with pattern matching,
3
+ * prompt-based approvals, persistence, and audit logging.
4
+ *
5
+ * Claude Code compatible design with:
6
+ * - Pattern-based rules (e.g., "Bash(git add:*)")
7
+ * - Prompt-based permissions (e.g., { tool: "Bash", prompt: "run tests" })
8
+ * - Session/project/global scopes
9
+ * - Persistent allowlists
10
+ * - Audit trail
11
+ */
12
+ import type { PermissionConfig, PermissionContext, PermissionDecision, PermissionMode, PermissionRule, PromptPermission, ConfirmCallback, SimpleConfirmCallback, PermissionSettings } from './types.js';
13
+ import { PermissionPersistence } from './persistence.js';
14
+ import { PermissionAudit } from './audit.js';
15
+ /**
16
+ * Enhanced Permission Manager
3
17
  */
4
- import type { PermissionConfig, PermissionMode } from './types.js';
5
- export type ConfirmCallback = (tool: string, input: unknown) => Promise<boolean>;
6
18
  export declare class PermissionManager {
7
19
  private config;
20
+ private promptMatcher;
21
+ private persistence;
22
+ private audit;
23
+ private sessionApprovals;
24
+ private sessionRejections;
8
25
  private confirmCallback?;
9
- private approvedTools;
10
- constructor(config?: Partial<PermissionConfig>);
26
+ private simpleConfirmCallback?;
27
+ private saveRuleCallback?;
28
+ private sessionId?;
29
+ private projectPath?;
30
+ constructor(options?: {
31
+ config?: Partial<PermissionConfig>;
32
+ projectPath?: string;
33
+ enableAudit?: boolean;
34
+ });
35
+ /**
36
+ * Initialize - load persisted rules and settings
37
+ */
38
+ initialize(settings?: PermissionSettings): Promise<void>;
11
39
  /**
12
- * Set the confirmation callback
40
+ * Set session ID for tracking
41
+ */
42
+ setSessionId(sessionId: string): void;
43
+ /**
44
+ * Set enhanced confirmation callback
13
45
  */
14
46
  setConfirmCallback(callback: ConfirmCallback): void;
15
47
  /**
16
- * Get the permission mode for a tool
48
+ * Set simple yes/no confirmation callback (backward compatible)
17
49
  */
18
- getModeForTool(tool: string): PermissionMode;
50
+ setSimpleConfirmCallback(callback: SimpleConfirmCallback): void;
51
+ /**
52
+ * Set callback to save permission rules to settings
53
+ * This allows integration with SettingsManager for settings.local.json persistence
54
+ */
55
+ setSaveRuleCallback(callback: (tool: string, pattern?: string) => Promise<void>): void;
56
+ /**
57
+ * Add prompt-based permissions (Claude Code ExitPlanMode style)
58
+ */
59
+ addAllowedPrompts(prompts: PromptPermission[]): void;
60
+ /**
61
+ * Clear prompt-based permissions
62
+ */
63
+ clearAllowedPrompts(): void;
64
+ /**
65
+ * Get current allowed prompts
66
+ */
67
+ getAllowedPrompts(): PromptPermission[];
68
+ /**
69
+ * Get all rules
70
+ */
71
+ getRules(): PermissionRule[];
72
+ /**
73
+ * Check permission (without prompting user)
74
+ *
75
+ * Flow matches Claude Code official design:
76
+ * 1. DENY rules → block immediately
77
+ * 2. ALLOW rules → auto-approve (includes prompt-based & session cache)
78
+ * 3. ASK rules → force prompt
79
+ * 4. Default behavior (read-only → auto, write → prompt)
80
+ */
81
+ checkPermission(context: PermissionContext): Promise<PermissionDecision>;
82
+ /**
83
+ * Request permission (prompts user if needed)
84
+ */
85
+ requestPermission(tool: string, input: unknown): Promise<boolean>;
19
86
  /**
20
- * Check if a tool can be executed
87
+ * Backward-compatible check method
21
88
  */
22
- checkPermission(tool: string, input: unknown): Promise<boolean>;
89
+ check(tool: string, input: unknown): Promise<boolean>;
90
+ /**
91
+ * Get permission mode for a tool (for simple queries)
92
+ */
93
+ getModeForTool(tool: string): PermissionMode;
23
94
  /**
24
95
  * Approve a tool for this session
25
96
  */
26
- approveToolForSession(tool: string): void;
97
+ approveForSession(tool: string, pattern?: string): void;
98
+ /**
99
+ * Add a persistent allow rule
100
+ */
101
+ addAllowRule(tool: string, pattern?: string, scope?: 'project' | 'global'): Promise<void>;
102
+ /**
103
+ * Add a persistent deny rule
104
+ */
105
+ addDenyRule(tool: string, pattern?: string, scope?: 'project' | 'global'): Promise<void>;
106
+ /**
107
+ * Clear session approvals
108
+ */
109
+ clearSessionApprovals(): void;
110
+ /**
111
+ * Get audit log
112
+ */
113
+ getAuditLog(count?: number): ReturnType<PermissionAudit['getRecent']>;
114
+ /**
115
+ * Get audit statistics
116
+ */
117
+ getAuditStats(): ReturnType<PermissionAudit['getStats']>;
118
+ /**
119
+ * Get persistence manager (for direct access)
120
+ */
121
+ getPersistence(): PermissionPersistence;
122
+ /**
123
+ * Find a matching rule for the given context and mode
124
+ */
125
+ private findMatchingRule;
126
+ /**
127
+ * Check if tool matches rule
128
+ */
129
+ private matchesTool;
130
+ /**
131
+ * Check if input matches pattern
132
+ */
133
+ private matchesPattern;
134
+ /**
135
+ * Match against prompt-based permissions
136
+ */
137
+ private matchPrompt;
138
+ /**
139
+ * Generate cache key for session approvals
140
+ */
141
+ private getCacheKey;
142
+ /**
143
+ * Get approval suggestions for a context
144
+ */
145
+ private getSuggestions;
146
+ /**
147
+ * Prompt user for approval
148
+ */
149
+ private promptUser;
150
+ /**
151
+ * Handle the user's approval action
152
+ */
153
+ private handleApprovalAction;
154
+ /**
155
+ * Extract a pattern from tool input for persistent rules
156
+ */
157
+ private extractPattern;
158
+ /**
159
+ * Describe a rule for logging
160
+ */
161
+ private describeRule;
27
162
  /**
28
- * Clear all session approvals
163
+ * Log audit entry
29
164
  */
30
- clearApprovals(): void;
165
+ private logAudit;
31
166
  }
167
+ export type { ConfirmCallback, SimpleConfirmCallback };
32
168
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/permissions/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGnE,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,aAAa,CAA0B;gBAEnC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAO9C;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAInD;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAa5C;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCrE;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,cAAc,IAAI,IAAI;CAGvB"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/permissions/manager.ts"],"names":[],"mappings":"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"}