gencode-ai 0.1.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/README.md +2 -1
  2. package/dist/agent/agent.d.ts +44 -2
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +130 -11
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/types.d.ts +11 -1
  7. package/dist/agent/types.d.ts.map +1 -1
  8. package/dist/checkpointing/checkpoint-manager.d.ts +87 -0
  9. package/dist/checkpointing/checkpoint-manager.d.ts.map +1 -0
  10. package/dist/checkpointing/checkpoint-manager.js +281 -0
  11. package/dist/checkpointing/checkpoint-manager.js.map +1 -0
  12. package/dist/checkpointing/index.d.ts +29 -0
  13. package/dist/checkpointing/index.d.ts.map +1 -0
  14. package/dist/checkpointing/index.js +29 -0
  15. package/dist/checkpointing/index.js.map +1 -0
  16. package/dist/checkpointing/types.d.ts +98 -0
  17. package/dist/checkpointing/types.d.ts.map +1 -0
  18. package/dist/checkpointing/types.js +7 -0
  19. package/dist/checkpointing/types.js.map +1 -0
  20. package/dist/cli/components/App.d.ts.map +1 -1
  21. package/dist/cli/components/App.js +171 -14
  22. package/dist/cli/components/App.js.map +1 -1
  23. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
  24. package/dist/cli/components/CommandSuggestions.js +5 -0
  25. package/dist/cli/components/CommandSuggestions.js.map +1 -1
  26. package/dist/cli/components/Messages.d.ts +7 -1
  27. package/dist/cli/components/Messages.d.ts.map +1 -1
  28. package/dist/cli/components/Messages.js +12 -3
  29. package/dist/cli/components/Messages.js.map +1 -1
  30. package/dist/cli/components/ModeIndicator.d.ts +42 -0
  31. package/dist/cli/components/ModeIndicator.d.ts.map +1 -0
  32. package/dist/cli/components/ModeIndicator.js +52 -0
  33. package/dist/cli/components/ModeIndicator.js.map +1 -0
  34. package/dist/cli/components/ModelSelector.d.ts +4 -3
  35. package/dist/cli/components/ModelSelector.d.ts.map +1 -1
  36. package/dist/cli/components/ModelSelector.js +54 -37
  37. package/dist/cli/components/ModelSelector.js.map +1 -1
  38. package/dist/cli/components/PlanApproval.d.ts +36 -0
  39. package/dist/cli/components/PlanApproval.d.ts.map +1 -0
  40. package/dist/cli/components/PlanApproval.js +154 -0
  41. package/dist/cli/components/PlanApproval.js.map +1 -0
  42. package/dist/cli/components/ProviderManager.d.ts +2 -2
  43. package/dist/cli/components/ProviderManager.d.ts.map +1 -1
  44. package/dist/cli/components/ProviderManager.js +137 -156
  45. package/dist/cli/components/ProviderManager.js.map +1 -1
  46. package/dist/cli/components/theme.d.ts +2 -0
  47. package/dist/cli/components/theme.d.ts.map +1 -1
  48. package/dist/cli/components/theme.js +3 -0
  49. package/dist/cli/components/theme.js.map +1 -1
  50. package/dist/cli/index.js +30 -13
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/config/index.d.ts +2 -2
  53. package/dist/config/index.d.ts.map +1 -1
  54. package/dist/config/index.js +1 -1
  55. package/dist/config/index.js.map +1 -1
  56. package/dist/config/levels.d.ts +5 -5
  57. package/dist/config/levels.d.ts.map +1 -1
  58. package/dist/config/levels.js +20 -20
  59. package/dist/config/levels.js.map +1 -1
  60. package/dist/config/merger.js +1 -1
  61. package/dist/config/merger.js.map +1 -1
  62. package/dist/config/providers-config.d.ts +8 -5
  63. package/dist/config/providers-config.d.ts.map +1 -1
  64. package/dist/config/providers-config.js +19 -22
  65. package/dist/config/providers-config.js.map +1 -1
  66. package/dist/config/test-utils.d.ts +2 -2
  67. package/dist/config/test-utils.d.ts.map +1 -1
  68. package/dist/config/test-utils.js +4 -4
  69. package/dist/config/test-utils.js.map +1 -1
  70. package/dist/config/types.d.ts +23 -17
  71. package/dist/config/types.d.ts.map +1 -1
  72. package/dist/config/types.js +14 -14
  73. package/dist/config/types.js.map +1 -1
  74. package/dist/index.d.ts +1 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +2 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/memory/memory-manager.d.ts +25 -12
  79. package/dist/memory/memory-manager.d.ts.map +1 -1
  80. package/dist/memory/memory-manager.js +241 -112
  81. package/dist/memory/memory-manager.js.map +1 -1
  82. package/dist/memory/test-utils.d.ts +1 -1
  83. package/dist/memory/test-utils.d.ts.map +1 -1
  84. package/dist/memory/test-utils.js +3 -3
  85. package/dist/memory/test-utils.js.map +1 -1
  86. package/dist/memory/types.d.ts +20 -10
  87. package/dist/memory/types.d.ts.map +1 -1
  88. package/dist/memory/types.js +13 -13
  89. package/dist/memory/types.js.map +1 -1
  90. package/dist/migration/migrate.d.ts +24 -0
  91. package/dist/migration/migrate.d.ts.map +1 -0
  92. package/dist/migration/migrate.js +164 -0
  93. package/dist/migration/migrate.js.map +1 -0
  94. package/dist/permissions/persistence.d.ts +2 -2
  95. package/dist/permissions/persistence.js +4 -4
  96. package/dist/permissions/persistence.js.map +1 -1
  97. package/dist/planning/index.d.ts +13 -0
  98. package/dist/planning/index.d.ts.map +1 -0
  99. package/dist/planning/index.js +15 -0
  100. package/dist/planning/index.js.map +1 -0
  101. package/dist/planning/plan-file.d.ts +59 -0
  102. package/dist/planning/plan-file.d.ts.map +1 -0
  103. package/dist/planning/plan-file.js +278 -0
  104. package/dist/planning/plan-file.js.map +1 -0
  105. package/dist/planning/state.d.ts +127 -0
  106. package/dist/planning/state.d.ts.map +1 -0
  107. package/dist/planning/state.js +261 -0
  108. package/dist/planning/state.js.map +1 -0
  109. package/dist/planning/tools/enter-plan-mode.d.ts +25 -0
  110. package/dist/planning/tools/enter-plan-mode.d.ts.map +1 -0
  111. package/dist/planning/tools/enter-plan-mode.js +98 -0
  112. package/dist/planning/tools/enter-plan-mode.js.map +1 -0
  113. package/dist/planning/tools/exit-plan-mode.d.ts +24 -0
  114. package/dist/planning/tools/exit-plan-mode.d.ts.map +1 -0
  115. package/dist/planning/tools/exit-plan-mode.js +149 -0
  116. package/dist/planning/tools/exit-plan-mode.js.map +1 -0
  117. package/dist/planning/types.d.ts +100 -0
  118. package/dist/planning/types.d.ts.map +1 -0
  119. package/dist/planning/types.js +28 -0
  120. package/dist/planning/types.js.map +1 -0
  121. package/dist/pricing/calculator.d.ts +21 -0
  122. package/dist/pricing/calculator.d.ts.map +1 -0
  123. package/dist/pricing/calculator.js +59 -0
  124. package/dist/pricing/calculator.js.map +1 -0
  125. package/dist/pricing/index.d.ts +7 -0
  126. package/dist/pricing/index.d.ts.map +1 -0
  127. package/dist/pricing/index.js +7 -0
  128. package/dist/pricing/index.js.map +1 -0
  129. package/dist/pricing/models.d.ts +20 -0
  130. package/dist/pricing/models.d.ts.map +1 -0
  131. package/dist/pricing/models.js +322 -0
  132. package/dist/pricing/models.js.map +1 -0
  133. package/dist/pricing/types.d.ts +30 -0
  134. package/dist/pricing/types.d.ts.map +1 -0
  135. package/dist/pricing/types.js +5 -0
  136. package/dist/pricing/types.js.map +1 -0
  137. package/dist/prompts/index.d.ts +5 -4
  138. package/dist/prompts/index.d.ts.map +1 -1
  139. package/dist/prompts/index.js +11 -8
  140. package/dist/prompts/index.js.map +1 -1
  141. package/dist/providers/anthropic.d.ts +2 -1
  142. package/dist/providers/anthropic.d.ts.map +1 -1
  143. package/dist/providers/anthropic.js +24 -10
  144. package/dist/providers/anthropic.js.map +1 -1
  145. package/dist/providers/gemini.d.ts +2 -1
  146. package/dist/providers/gemini.d.ts.map +1 -1
  147. package/dist/providers/gemini.js +28 -14
  148. package/dist/providers/gemini.js.map +1 -1
  149. package/dist/providers/index.d.ts +20 -10
  150. package/dist/providers/index.d.ts.map +1 -1
  151. package/dist/providers/index.js +48 -24
  152. package/dist/providers/index.js.map +1 -1
  153. package/dist/providers/openai.d.ts +2 -1
  154. package/dist/providers/openai.d.ts.map +1 -1
  155. package/dist/providers/openai.js +19 -8
  156. package/dist/providers/openai.js.map +1 -1
  157. package/dist/providers/registry.d.ts +48 -34
  158. package/dist/providers/registry.d.ts.map +1 -1
  159. package/dist/providers/registry.js +72 -88
  160. package/dist/providers/registry.js.map +1 -1
  161. package/dist/providers/store.d.ts +43 -17
  162. package/dist/providers/store.d.ts.map +1 -1
  163. package/dist/providers/store.js +112 -19
  164. package/dist/providers/store.js.map +1 -1
  165. package/dist/providers/types.d.ts +25 -0
  166. package/dist/providers/types.d.ts.map +1 -1
  167. package/dist/providers/vertex-ai.d.ts +15 -7
  168. package/dist/providers/vertex-ai.d.ts.map +1 -1
  169. package/dist/providers/vertex-ai.js +63 -23
  170. package/dist/providers/vertex-ai.js.map +1 -1
  171. package/dist/session/manager.d.ts +4 -0
  172. package/dist/session/manager.d.ts.map +1 -1
  173. package/dist/session/manager.js +8 -0
  174. package/dist/session/manager.js.map +1 -1
  175. package/dist/session/types.js +1 -1
  176. package/dist/session/types.js.map +1 -1
  177. package/dist/tools/index.d.ts +7 -1
  178. package/dist/tools/index.d.ts.map +1 -1
  179. package/dist/tools/index.js +7 -0
  180. package/dist/tools/index.js.map +1 -1
  181. package/dist/tools/registry.d.ts +13 -0
  182. package/dist/tools/registry.d.ts.map +1 -1
  183. package/dist/tools/registry.js +79 -2
  184. package/dist/tools/registry.js.map +1 -1
  185. package/docs/config-system-comparison.md +50 -50
  186. package/docs/cost-tracking-comparison.md +904 -0
  187. package/docs/memory-system.md +124 -31
  188. package/docs/operating-modes.md +96 -0
  189. package/docs/permissions.md +2 -2
  190. package/docs/proposals/0006-memory-system.md +4 -4
  191. package/docs/proposals/0008-checkpointing.md +109 -2
  192. package/docs/proposals/0011-custom-commands.md +2 -1
  193. package/docs/proposals/0021-skills-system.md +2 -1
  194. package/docs/proposals/0023-permission-enhancements.md +2 -2
  195. package/docs/proposals/0025-cost-tracking.md +60 -2
  196. package/docs/proposals/0033-enterprise-deployment.md +1 -1
  197. package/docs/proposals/0041-configuration-system.md +17 -19
  198. package/docs/proposals/0042-prompt-optimization.md +17 -9
  199. package/docs/proposals/README.md +6 -6
  200. package/docs/providers.md +94 -9
  201. package/examples/test-checkpointing.ts +121 -0
  202. package/examples/test-cost-tracking.ts +77 -0
  203. package/examples/test-interrupt-cleanup.ts +94 -0
  204. package/package.json +3 -2
  205. package/scripts/migrate.ts +449 -0
  206. package/src/agent/agent.ts +161 -12
  207. package/src/agent/types.ts +11 -1
  208. package/src/checkpointing/checkpoint-manager.ts +327 -0
  209. package/src/checkpointing/index.ts +45 -0
  210. package/src/checkpointing/types.ts +104 -0
  211. package/src/cli/components/App.tsx +221 -13
  212. package/src/cli/components/CommandSuggestions.tsx +5 -0
  213. package/src/cli/components/Messages.tsx +24 -5
  214. package/src/cli/components/ModeIndicator.tsx +174 -0
  215. package/src/cli/components/ModelSelector.tsx +62 -43
  216. package/src/cli/components/PlanApproval.tsx +327 -0
  217. package/src/cli/components/ProviderManager.tsx +278 -323
  218. package/src/cli/components/theme.ts +3 -0
  219. package/src/cli/index.tsx +36 -17
  220. package/src/config/index.ts +5 -3
  221. package/src/config/levels.test.ts +22 -22
  222. package/src/config/levels.ts +22 -22
  223. package/src/config/loader.test.ts +14 -14
  224. package/src/config/manager.test.ts +19 -19
  225. package/src/config/merger.test.ts +23 -23
  226. package/src/config/merger.ts +1 -1
  227. package/src/config/providers-config.ts +23 -21
  228. package/src/config/test-utils.ts +6 -6
  229. package/src/config/types.ts +30 -20
  230. package/src/index.ts +15 -0
  231. package/src/memory/memory-manager.test.ts +242 -24
  232. package/src/memory/memory-manager.ts +270 -141
  233. package/src/memory/test-utils.ts +4 -4
  234. package/src/memory/types.ts +28 -17
  235. package/src/permissions/persistence.ts +4 -4
  236. package/src/planning/index.ts +53 -0
  237. package/src/planning/plan-file.ts +326 -0
  238. package/src/planning/state.ts +305 -0
  239. package/src/planning/tools/enter-plan-mode.ts +111 -0
  240. package/src/planning/tools/exit-plan-mode.ts +170 -0
  241. package/src/planning/types.ts +150 -0
  242. package/src/pricing/calculator.ts +71 -0
  243. package/src/pricing/index.ts +7 -0
  244. package/src/pricing/models.ts +334 -0
  245. package/src/pricing/types.ts +32 -0
  246. package/src/prompts/index.ts +13 -9
  247. package/src/providers/anthropic.ts +30 -10
  248. package/src/providers/gemini.ts +34 -14
  249. package/src/providers/index.ts +76 -33
  250. package/src/providers/openai.ts +26 -8
  251. package/src/providers/registry.ts +116 -111
  252. package/src/providers/store.ts +130 -28
  253. package/src/providers/types.ts +36 -1
  254. package/src/providers/vertex-ai.ts +70 -23
  255. package/src/session/manager.ts +9 -0
  256. package/src/session/types.ts +1 -1
  257. package/src/tools/index.ts +8 -0
  258. package/src/tools/registry.ts +95 -2
  259. package/.gencode/settings.local.json +0 -7
  260. package/CLAUDE.md +0 -86
@@ -14,6 +14,7 @@ export { websearchTool } from './builtin/websearch.js';
14
14
  export { todowriteTool, getTodos, clearTodos } from './builtin/todowrite.js';
15
15
  export { askUserQuestionTool, formatAnswersForAgent, formatAnswersForDisplay, } from './builtin/ask-user.js';
16
16
  export type { Question as AskUserQuestion, QuestionOption as AskUserQuestionOption, QuestionAnswer as AskUserQuestionAnswer, AskUserQuestionInput, AskUserQuestionResult, } from './builtin/ask-user.js';
17
+ export { enterPlanModeTool, exitPlanModeTool } from '../planning/index.js';
17
18
  import { ToolRegistry } from './registry.js';
18
19
  /**
19
20
  * Create a registry with all built-in tools
@@ -22,7 +23,12 @@ export declare function createDefaultRegistry(): ToolRegistry;
22
23
  /**
23
24
  * All built-in tools
24
25
  */
25
- export declare const builtinTools: (import("./types.js").Tool<{
26
+ export declare const builtinTools: (import("./types.js").Tool<Record<string, never>> | import("./types.js").Tool<{
27
+ allowedPrompts?: {
28
+ tool: "Bash";
29
+ prompt: string;
30
+ }[] | undefined;
31
+ }> | import("./types.js").Tool<{
26
32
  file_path: string;
27
33
  offset?: number | undefined;
28
34
  limit?: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,QAAQ,IAAI,eAAe,EAC3B,cAAc,IAAI,qBAAqB,EACvC,cAAc,IAAI,qBAAqB,EACvC,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAY7C;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAepD;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAWxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,QAAQ,IAAI,eAAe,EAC3B,cAAc,IAAI,qBAAqB,EACvC,cAAc,IAAI,qBAAqB,EACvC,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAa7C;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAiBpD;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAaxB,CAAC"}
@@ -14,6 +14,8 @@ export { webfetchTool } from './builtin/webfetch.js';
14
14
  export { websearchTool } from './builtin/websearch.js';
15
15
  export { todowriteTool, getTodos, clearTodos } from './builtin/todowrite.js';
16
16
  export { askUserQuestionTool, formatAnswersForAgent, formatAnswersForDisplay, } from './builtin/ask-user.js';
17
+ // Plan mode tools
18
+ export { enterPlanModeTool, exitPlanModeTool } from '../planning/index.js';
17
19
  import { ToolRegistry } from './registry.js';
18
20
  import { readTool } from './builtin/read.js';
19
21
  import { writeTool } from './builtin/write.js';
@@ -25,6 +27,7 @@ import { webfetchTool } from './builtin/webfetch.js';
25
27
  import { websearchTool } from './builtin/websearch.js';
26
28
  import { todowriteTool } from './builtin/todowrite.js';
27
29
  import { askUserQuestionTool } from './builtin/ask-user.js';
30
+ import { enterPlanModeTool, exitPlanModeTool } from '../planning/index.js';
28
31
  /**
29
32
  * Create a registry with all built-in tools
30
33
  */
@@ -41,6 +44,8 @@ export function createDefaultRegistry() {
41
44
  websearchTool,
42
45
  todowriteTool,
43
46
  askUserQuestionTool,
47
+ enterPlanModeTool,
48
+ exitPlanModeTool,
44
49
  ]);
45
50
  return registry;
46
51
  }
@@ -58,5 +63,7 @@ export const builtinTools = [
58
63
  websearchTool,
59
64
  todowriteTool,
60
65
  askUserQuestionTool,
66
+ enterPlanModeTool,
67
+ exitPlanModeTool,
61
68
  ];
62
69
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,iBAAiB;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC;QACnB,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,aAAa;QACb,aAAa;QACb,mBAAmB;KACpB,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,aAAa;IACb,mBAAmB;CACpB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,iBAAiB;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAS/B,kBAAkB;AAClB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE3E;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC;QACnB,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,aAAa;QACb,aAAa;QACb,mBAAmB;QACnB,iBAAiB;QACjB,gBAAgB;KACjB,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,iBAAiB;IACjB,gBAAgB;CACjB,CAAC"}
@@ -14,9 +14,22 @@ export declare class ToolRegistry {
14
14
  * Get tool definitions for LLM
15
15
  */
16
16
  getDefinitions(toolNames?: string[]): ToolDefinition[];
17
+ /**
18
+ * Get tool definitions filtered by plan mode
19
+ * In plan mode, only read-only tools are returned
20
+ */
21
+ getFilteredDefinitions(toolNames?: string[]): ToolDefinition[];
17
22
  /**
18
23
  * Execute a tool by name
19
24
  */
20
25
  execute(name: string, input: unknown, context: ToolContext): Promise<ToolResult>;
26
+ /**
27
+ * Capture file state before modification
28
+ */
29
+ private captureFileState;
30
+ /**
31
+ * Record a checkpoint after file modification
32
+ */
33
+ private recordCheckpoint;
21
34
  }
22
35
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgC;IAE7C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI1B,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAMhC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE;IAgBtD;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CA2BvF"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQ5D,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgC;IAE7C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI1B,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAMhC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE;IAgBtD;;;OAGG;IACH,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE;IAU9D;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA6CtF;;OAEG;YACW,gBAAgB;IAc9B;;OAEG;YACW,gBAAgB;CAkC/B"}
@@ -1,7 +1,12 @@
1
1
  /**
2
2
  * Tool Registry - Manages available tools
3
3
  */
4
- import { zodToJsonSchema, getErrorMessage } from './types.js';
4
+ import * as fs from 'fs/promises';
5
+ import { zodToJsonSchema, getErrorMessage, resolvePath } from './types.js';
6
+ import { getPlanModeManager } from '../planning/index.js';
7
+ import { getCheckpointManager } from '../checkpointing/index.js';
8
+ // Tools that modify files and should be tracked for checkpointing
9
+ const CHECKPOINT_TOOLS = ['Write', 'Edit'];
5
10
  export class ToolRegistry {
6
11
  tools = new Map();
7
12
  register(tool) {
@@ -39,6 +44,17 @@ export class ToolRegistry {
39
44
  })
40
45
  .filter((t) => t !== null);
41
46
  }
47
+ /**
48
+ * Get tool definitions filtered by plan mode
49
+ * In plan mode, only read-only tools are returned
50
+ */
51
+ getFilteredDefinitions(toolNames) {
52
+ const planManager = getPlanModeManager();
53
+ const names = toolNames ?? this.list();
54
+ // Filter tools based on plan mode state
55
+ const filteredNames = planManager.filterTools(names);
56
+ return this.getDefinitions(filteredNames);
57
+ }
42
58
  /**
43
59
  * Execute a tool by name
44
60
  */
@@ -61,11 +77,72 @@ export class ToolRegistry {
61
77
  error: `Invalid input: ${parsed.error.message}`,
62
78
  };
63
79
  }
64
- return await tool.execute(parsed.data, context);
80
+ // Capture pre-execution state for checkpointing
81
+ let preState = null;
82
+ if (CHECKPOINT_TOOLS.includes(name) && parsed.data && typeof parsed.data === 'object') {
83
+ const filePath = parsed.data.file_path;
84
+ if (filePath) {
85
+ preState = await this.captureFileState(filePath, context.cwd);
86
+ }
87
+ }
88
+ // Execute the tool
89
+ const result = await tool.execute(parsed.data, context);
90
+ // Record checkpoint on successful file modification
91
+ if (result.success && preState) {
92
+ await this.recordCheckpoint(name, preState, context.cwd);
93
+ }
94
+ return result;
65
95
  }
66
96
  catch (error) {
67
97
  return { success: false, output: '', error: `Tool execution failed: ${getErrorMessage(error)}` };
68
98
  }
69
99
  }
100
+ /**
101
+ * Capture file state before modification
102
+ */
103
+ async captureFileState(filePath, cwd) {
104
+ const resolvedPath = resolvePath(filePath, cwd);
105
+ try {
106
+ const content = await fs.readFile(resolvedPath, 'utf-8');
107
+ return { filePath: resolvedPath, content, existed: true };
108
+ }
109
+ catch {
110
+ // File doesn't exist
111
+ return { filePath: resolvedPath, content: null, existed: false };
112
+ }
113
+ }
114
+ /**
115
+ * Record a checkpoint after file modification
116
+ */
117
+ async recordCheckpoint(toolName, preState, cwd) {
118
+ const checkpointManager = getCheckpointManager();
119
+ // Read current file content
120
+ let newContent = null;
121
+ try {
122
+ newContent = await fs.readFile(preState.filePath, 'utf-8');
123
+ }
124
+ catch {
125
+ // File was deleted or doesn't exist
126
+ }
127
+ // Determine change type
128
+ let changeType;
129
+ if (!preState.existed && newContent !== null) {
130
+ changeType = 'create';
131
+ }
132
+ else if (preState.existed && newContent === null) {
133
+ changeType = 'delete';
134
+ }
135
+ else {
136
+ changeType = 'modify';
137
+ }
138
+ // Record the change
139
+ checkpointManager.recordChange({
140
+ path: preState.filePath,
141
+ changeType,
142
+ previousContent: preState.content,
143
+ newContent,
144
+ toolName,
145
+ });
146
+ }
70
147
  }
71
148
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,OAAO,YAAY;IACf,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAE7C,QAAQ,CAAC,IAAU;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,SAAoB;QACjC,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;aAC7C,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,KAAc,EAAE,OAAoB;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,iBAAiB,IAAI,EAAE;aAC/B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,iBAAiB;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,kBAAkB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;iBAChD,CAAC;YACJ,CAAC;YAED,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,0BAA0B,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACnG,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- GenCode implements a multi-level configuration system compatible with Claude Code, while also supporting OpenCode-style flexibility through the `GENCODE_CONFIG_DIRS` environment variable.
5
+ GenCode implements a multi-level configuration system compatible with Claude Code, while also supporting OpenCode-style flexibility through the `GEN_CONFIG` environment variable.
6
6
 
7
7
  ## Table of Contents
8
8
 
@@ -29,19 +29,19 @@ Priority (High → Low):
29
29
  │ Scope: Current session only │
30
30
  ├─────────────────────────────────────────────────────────────────────┤
31
31
  │ Level 4: Local (Personal) │
32
- │ Location: .gencode/*.local.* + .claude/*.local.* │
32
+ │ Location: .gen/*.local.* + .claude/*.local.* │
33
33
  │ Scope: Current user, current project only (gitignored) │
34
34
  ├─────────────────────────────────────────────────────────────────────┤
35
35
  │ Level 3: Project (Shared) │
36
- │ Location: .gencode/ + .claude/ (MERGED) │
36
+ │ Location: .gen/ + .claude/ (MERGED) │
37
37
  │ Scope: All collaborators (committed to git) │
38
38
  ├─────────────────────────────────────────────────────────────────────┤
39
- │ Level 2: Extra Dirs (GENCODE_CONFIG_DIRS) │
39
+ │ Level 2: Extra Dirs (GEN_CONFIG) │
40
40
  │ Location: Colon-separated paths from environment variable │
41
41
  │ Scope: Team/organization shared configs │
42
42
  ├─────────────────────────────────────────────────────────────────────┤
43
43
  │ Level 1: User (Global) - LOWEST PRIORITY │
44
- │ Location: ~/.gencode/ + ~/.claude/ (MERGED) │
44
+ │ Location: ~/.gen/ + ~/.claude/ (MERGED) │
45
45
  │ Scope: Current user, all projects │
46
46
  └─────────────────────────────────────────────────────────────────────┘
47
47
  ```
@@ -69,7 +69,7 @@ Priority (High → Low):
69
69
  ║ 同层级内合并 (claude 先加载,gencode 后加载覆盖): ║
70
70
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
71
71
  ║ │ claude = load("~/.claude/settings.json") // 低优先级 │ ║
72
- ║ │ gencode = load("~/.gencode/settings.json") // 高优先级 │ ║
72
+ ║ │ gencode = load("~/.gen/settings.json") // 高优先级 │ ║
73
73
  ║ │ user = deepMerge(claude, gencode) // gencode 覆盖 │ ║
74
74
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
75
75
  ║ ║
@@ -80,12 +80,12 @@ Priority (High → Low):
80
80
  └──────────────────┬──────────────────┘
81
81
 
82
82
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
83
- ║ STEP 2: Load EXTRA Config Dirs (可选,GENCODE_CONFIG_DIRS) ║
83
+ ║ STEP 2: Load EXTRA Config Dirs (可选,GEN_CONFIG) ║
84
84
  ╠═════════════════════════════════════════════════════════════════════════════╣
85
85
  ║ ║
86
- ║ 环境变量: GENCODE_CONFIG_DIRS="/team/config:~/shared-rules" ║
86
+ ║ 环境变量: GEN_CONFIG="/team/config:~/shared-rules" ║
87
87
  ║ ║
88
- ║ For each dir in GENCODE_CONFIG_DIRS.split(':'): ║
88
+ ║ For each dir in GEN_CONFIG.split(':'): ║
89
89
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
90
90
  ║ │ extra = load("{dir}/settings.json") │ ║
91
91
  ║ │ settings = deepMerge(settings, extra) │ ║
@@ -100,7 +100,7 @@ Priority (High → Low):
100
100
  ║ 同层级内合并: ║
101
101
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
102
102
  ║ │ claude = load(".claude/settings.json") // 低优先级 │ ║
103
- ║ │ gencode = load(".gencode/settings.json") // 高优先级 │ ║
103
+ ║ │ gencode = load(".gen/settings.json") // 高优先级 │ ║
104
104
  ║ │ project = deepMerge(claude, gencode) // gencode 覆盖 │ ║
105
105
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
106
106
  ║ ║
@@ -118,7 +118,7 @@ Priority (High → Low):
118
118
  ║ 同层级内合并: ║
119
119
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
120
120
  ║ │ claude = load(".claude/settings.local.json") // 低优先级 │ ║
121
- ║ │ gencode = load(".gencode/settings.local.json") // 高优先级 │ ║
121
+ ║ │ gencode = load(".gen/settings.local.json") // 高优先级 │ ║
122
122
  ║ │ local = deepMerge(claude, gencode) // gencode 覆盖 │ ║
123
123
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
124
124
  ║ ║
@@ -181,7 +181,7 @@ Priority (High → Low):
181
181
  ║ │ namespace: "claude", enforced: true │ ║
182
182
  ║ │ }) │ ║
183
183
  ║ │ if exists: memories.push({ │ ║
184
- ║ │ content: load("/Library/.../GenCode/AGENT.md"), │ ║
184
+ ║ │ content: load("/Library/.../GenCode/GEN.md"), │ ║
185
185
  ║ │ namespace: "gencode", enforced: true │ ║
186
186
  ║ │ }) │ ║
187
187
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
@@ -195,13 +195,13 @@ Priority (High → Low):
195
195
  ║ 都加载 (先 claude 后 gencode): ║
196
196
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
197
197
  ║ │ if exists: memories.push(load("~/.claude/CLAUDE.md")) │ ║
198
- ║ │ if exists: memories.push(load("~/.gencode/AGENT.md")) │ ║
198
+ ║ │ if exists: memories.push(load("~/.gen/GEN.md")) │ ║
199
199
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
200
200
  ║ ║
201
201
  ║ 同样加载 rules: ║
202
202
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
203
203
  ║ │ ~/.claude/rules/*.md → memories.push(each) │ ║
204
- ║ │ ~/.gencode/rules/*.md → memories.push(each) │ ║
204
+ ║ │ ~/.gen/rules/*.md → memories.push(each) │ ║
205
205
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
206
206
  ║ ║
207
207
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
@@ -210,10 +210,10 @@ Priority (High → Low):
210
210
  ║ STEP 3: Load EXTRA Config Dirs Memory (可选) ║
211
211
  ╠═════════════════════════════════════════════════════════════════════════════╣
212
212
  ║ ║
213
- ║ For each dir in GENCODE_CONFIG_DIRS: ║
213
+ ║ For each dir in GEN_CONFIG: ║
214
214
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
215
215
  ║ │ if exists: memories.push(load("{dir}/CLAUDE.md")) │ ║
216
- ║ │ if exists: memories.push(load("{dir}/AGENT.md")) │ ║
216
+ ║ │ if exists: memories.push(load("{dir}/GEN.md")) │ ║
217
217
  ║ │ for each: memories.push(load("{dir}/rules/*.md")) │ ║
218
218
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
219
219
  ║ ║
@@ -230,8 +230,8 @@ Priority (High → Low):
230
230
  ║ │ else if exists: memories.push(load("./.claude/CLAUDE.md")) │ ║
231
231
  ║ │ │ ║
232
232
  ║ │ # GenCode files (pick first found) │ ║
233
- ║ │ if exists: memories.push(load("./AGENT.md")) │ ║
234
- ║ │ else if exists: memories.push(load("./.gencode/AGENT.md")) │ ║
233
+ ║ │ if exists: memories.push(load("./GEN.md")) │ ║
234
+ ║ │ else if exists: memories.push(load("./.gen/GEN.md")) │ ║
235
235
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
236
236
  ║ ║
237
237
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
@@ -243,7 +243,7 @@ Priority (High → Low):
243
243
  ║ 加载规则目录 (都加载): ║
244
244
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
245
245
  ║ │ .claude/rules/*.md → memories.push(each, namespace: "claude") │ ║
246
- ║ │ .gencode/rules/*.md → memories.push(each, namespace: "gencode") │ ║
246
+ ║ │ .gen/rules/*.md → memories.push(each, namespace: "gencode") │ ║
247
247
  ║ │ │ ║
248
248
  ║ │ 支持 paths frontmatter 条件加载: │ ║
249
249
  ║ │ --- │ ║
@@ -262,8 +262,8 @@ Priority (High → Low):
262
262
  ║ ┌─────────────────────────────────────────────────────────────────────┐ ║
263
263
  ║ │ if exists: memories.push(load("./CLAUDE.local.md")) │ ║
264
264
  ║ │ if exists: memories.push(load("./.claude/CLAUDE.local.md")) │ ║
265
- ║ │ if exists: memories.push(load("./AGENT.local.md")) │ ║
266
- ║ │ if exists: memories.push(load("./.gencode/AGENT.local.md")) │ ║
265
+ ║ │ if exists: memories.push(load("./GEN.local.md")) │ ║
266
+ ║ │ if exists: memories.push(load("./.gen/GEN.local.md")) │ ║
267
267
  ║ └─────────────────────────────────────────────────────────────────────┘ ║
268
268
  ║ ║
269
269
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
@@ -365,10 +365,10 @@ src/memory/
365
365
 
366
366
  | Aspect | GenCode | OpenCode | Claude Code |
367
367
  |--------|---------|----------|-------------|
368
- | **User Config Dir** | `~/.gencode/` + `~/.claude/` (merge) | `~/.config/opencode/` (XDG) | `~/.claude/` |
369
- | **Project Config Dir** | `.gencode/` + `.claude/` (merge) | `.opencode/` | `.claude/` |
368
+ | **User Config Dir** | `~/.gen/` + `~/.claude/` (merge) | `~/.config/opencode/` (XDG) | `~/.claude/` |
369
+ | **Project Config Dir** | `.gen/` + `.claude/` (merge) | `.opencode/` | `.claude/` |
370
370
  | **Config File Format** | JSON | JSON/JSONC/TOML | JSON |
371
- | **Memory File** | `AGENT.md` / `CLAUDE.md` | N/A (uses instructions) | `CLAUDE.md` |
371
+ | **Memory File** | `GEN.md` / `CLAUDE.md` | N/A (uses instructions) | `CLAUDE.md` |
372
372
  | **Rules Dir** | `rules/*.md` | N/A | `rules/*.md` |
373
373
 
374
374
  ### Loading Semantics
@@ -390,10 +390,10 @@ src/memory/
390
390
  │ GenCode (6 levels): OpenCode (6 levels): Claude Code (5): │
391
391
  │ ───────────────── ──────────────────── ─────────────── │
392
392
  │ 1. User 1. Remote (well-known) 1. User │
393
- │ ~/.claude/ + ~/.gencode/ 2. Global (~/.config/) 2. Project │
394
- │ 2. Extra (GENCODE_CONFIG_DIRS) 3. OPENCODE_CONFIG 3. Local │
393
+ │ ~/.claude/ + ~/.gen/ 2. Global (~/.config/) 2. Project │
394
+ │ 2. Extra (GEN_CONFIG) 3. OPENCODE_CONFIG 3. Local │
395
395
  │ 3. Project 4. Project 4. CLI │
396
- │ .claude/ + .gencode/ 5. .opencode/ 5. Managed │
396
+ │ .claude/ + .gen/ 5. .opencode/ 5. Managed │
397
397
  │ 4. Local 6. OPENCODE_CONFIG_CONTENT │
398
398
  │ *.local.json │
399
399
  │ 5. CLI │
@@ -406,12 +406,12 @@ src/memory/
406
406
 
407
407
  #### 1. Dual Namespace Merge (GenCode Unique)
408
408
 
409
- GenCode loads **both** `.gencode/` and `.claude/` directories at each level and merges them:
409
+ GenCode loads **both** `.gen/` and `.claude/` directories at each level and merges them:
410
410
 
411
411
  ```typescript
412
412
  // At User level:
413
413
  claude = load("~/.claude/settings.json") // lower priority
414
- gencode = load("~/.gencode/settings.json") // higher priority
414
+ gencode = load("~/.gen/settings.json") // higher priority
415
415
  result = deepMerge(claude, gencode) // gencode wins on conflicts
416
416
  ```
417
417
 
@@ -419,10 +419,10 @@ OpenCode and Claude Code only use their own namespace.
419
419
 
420
420
  #### 2. Extra Config Dirs (GenCode Feature)
421
421
 
422
- GenCode supports `GENCODE_CONFIG_DIRS` for team/organization config:
422
+ GenCode supports `GEN_CONFIG` for team/organization config:
423
423
 
424
424
  ```bash
425
- export GENCODE_CONFIG_DIRS="/team/shared-config:~/my-custom-rules"
425
+ export GEN_CONFIG="/team/shared-config:~/my-custom-rules"
426
426
  ```
427
427
 
428
428
  OpenCode has `OPENCODE_CONFIG` for single file and `OPENCODE_CONFIG_CONTENT` for inline JSON.
@@ -430,7 +430,7 @@ OpenCode has `OPENCODE_CONFIG` for single file and `OPENCODE_CONFIG_CONTENT` for
430
430
  #### 3. Memory System (GenCode/Claude Code Feature)
431
431
 
432
432
  GenCode implements a full memory system like Claude Code:
433
- - `AGENT.md` / `CLAUDE.md` files
433
+ - `GEN.md` / `CLAUDE.md` files
434
434
  - `rules/*.md` with path-scoped activation
435
435
  - `@import` syntax for file references
436
436
 
@@ -512,9 +512,9 @@ console.log(config.getDebugSummary());
512
512
  // Output:
513
513
  // Configuration Sources (in priority order):
514
514
  // user:claude - ~/.claude/settings.json
515
- // user:gencode - ~/.gencode/settings.json
515
+ // user:gencode - ~/.gen/settings.json
516
516
  // project:claude - .claude/settings.json
517
- // project:gencode - .gencode/settings.json
517
+ // project:gencode - .gen/settings.json
518
518
  ```
519
519
 
520
520
  ### Loading Memory
@@ -533,20 +533,20 @@ console.log(memory.getDebugSummary());
533
533
  // Output:
534
534
  // Memory Sources (in load order):
535
535
  // user:claude - ~/.claude/CLAUDE.md (1024 bytes)
536
- // user:gencode - ~/.gencode/AGENT.md (512 bytes)
536
+ // user:gencode - ~/.gen/GEN.md (512 bytes)
537
537
  // project:claude - ./CLAUDE.md (2048 bytes)
538
- // project:gencode - ./AGENT.md (1024 bytes)
538
+ // project:gencode - ./GEN.md (1024 bytes)
539
539
  ```
540
540
 
541
541
  ### Using Extra Config Dirs
542
542
 
543
543
  ```bash
544
544
  # Set up team config
545
- export GENCODE_CONFIG_DIRS="/team/shared-config"
545
+ export GEN_CONFIG="/team/shared-config"
546
546
 
547
547
  # Create team settings
548
548
  echo '{"provider": "anthropic"}' > /team/shared-config/settings.json
549
- echo '# Team Guidelines' > /team/shared-config/AGENT.md
549
+ echo '# Team Guidelines' > /team/shared-config/GEN.md
550
550
 
551
551
  # Run GenCode - it will merge team config
552
552
  npx gencode
@@ -557,12 +557,12 @@ npx gencode
557
557
  GenCode is fully backward compatible with Claude Code:
558
558
 
559
559
  1. Existing `.claude/` directories work automatically
560
- 2. `CLAUDE.md` files are loaded alongside `AGENT.md`
560
+ 2. `CLAUDE.md` files are loaded alongside `GEN.md`
561
561
  3. No changes needed for existing Claude Code users
562
562
 
563
563
  To migrate:
564
- 1. Optionally rename `.claude/` to `.gencode/`
565
- 2. Optionally rename `CLAUDE.md` to `AGENT.md`
564
+ 1. Optionally rename `.claude/` to `.gen/`
565
+ 2. Optionally rename `CLAUDE.md` to `GEN.md`
566
566
  3. Or keep both - GenCode will merge them
567
567
 
568
568
  ## API Reference
@@ -626,19 +626,19 @@ class MemoryManager {
626
626
  ║ LEVEL 1: USER Settings ║
627
627
  ╠═════════════════════════════════════════════════════════════════════════════╣
628
628
  ║ claude = load("~/.claude/settings.json") // lower priority ║
629
- ║ gencode = load("~/.gencode/settings.json") // higher priority ║
629
+ ║ gencode = load("~/.gen/settings.json") // higher priority ║
630
630
  ║ user = deepMerge(claude, gencode) ║
631
631
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
632
632
 
633
633
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
634
- ║ LEVEL 2: EXTRA Config Dirs (GENCODE_CONFIG_DIRS) ║
634
+ ║ LEVEL 2: EXTRA Config Dirs (GEN_CONFIG) ║
635
635
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
636
636
 
637
637
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
638
638
  ║ LEVEL 3: PROJECT Settings ║
639
639
  ╠═════════════════════════════════════════════════════════════════════════════╣
640
640
  ║ claude = load(".claude/settings.json") // lower priority ║
641
- ║ gencode = load(".gencode/settings.json") // higher priority ║
641
+ ║ gencode = load(".gen/settings.json") // higher priority ║
642
642
  ║ project = deepMerge(claude, gencode) ║
643
643
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
644
644
 
@@ -671,33 +671,33 @@ class MemoryManager {
671
671
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
672
672
  ║ 1. ENTERPRISE Memory (enforced) ║
673
673
  ║ /Library/.../ClaudeCode/CLAUDE.md → push ║
674
- ║ /Library/.../GenCode/AGENT.md → push ║
674
+ ║ /Library/.../GenCode/GEN.md → push ║
675
675
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
676
676
 
677
677
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
678
678
  ║ 2. USER Memory ║
679
679
  ║ ~/.claude/CLAUDE.md → push ║
680
- ║ ~/.gencode/AGENT.md → push ║
680
+ ║ ~/.gen/GEN.md → push ║
681
681
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
682
682
 
683
683
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
684
- ║ 3. EXTRA Memory (GENCODE_CONFIG_DIRS) ║
684
+ ║ 3. EXTRA Memory (GEN_CONFIG) ║
685
685
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
686
686
 
687
687
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
688
688
  ║ 4. PROJECT Memory ║
689
689
  ║ ./CLAUDE.md or .claude/CLAUDE.md → push ║
690
- ║ ./AGENT.md or .gencode/AGENT.md → push ║
690
+ ║ ./GEN.md or .gen/GEN.md → push ║
691
691
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
692
692
 
693
693
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
694
- ║ 5. RULES (.claude/rules/ + .gencode/rules/) ║
694
+ ║ 5. RULES (.claude/rules/ + .gen/rules/) ║
695
695
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
696
696
 
697
697
  ╔══════════════════════════════════▼══════════════════════════════════════════╗
698
698
  ║ 6. LOCAL Memory (*.local.md) ║
699
699
  ║ ./CLAUDE.local.md → push ║
700
- ║ ./AGENT.local.md → push ║
700
+ ║ ./GEN.local.md → push ║
701
701
  ╚══════════════════════════════════╤══════════════════════════════════════════╝
702
702
 
703
703
  ┌────────▼────────┐