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.
- package/README.md +2 -1
- package/dist/agent/agent.d.ts +44 -2
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +130 -11
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/types.d.ts +11 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/checkpointing/checkpoint-manager.d.ts +87 -0
- package/dist/checkpointing/checkpoint-manager.d.ts.map +1 -0
- package/dist/checkpointing/checkpoint-manager.js +281 -0
- package/dist/checkpointing/checkpoint-manager.js.map +1 -0
- package/dist/checkpointing/index.d.ts +29 -0
- package/dist/checkpointing/index.d.ts.map +1 -0
- package/dist/checkpointing/index.js +29 -0
- package/dist/checkpointing/index.js.map +1 -0
- package/dist/checkpointing/types.d.ts +98 -0
- package/dist/checkpointing/types.d.ts.map +1 -0
- package/dist/checkpointing/types.js +7 -0
- package/dist/checkpointing/types.js.map +1 -0
- package/dist/cli/components/App.d.ts.map +1 -1
- package/dist/cli/components/App.js +171 -14
- package/dist/cli/components/App.js.map +1 -1
- package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
- package/dist/cli/components/CommandSuggestions.js +5 -0
- package/dist/cli/components/CommandSuggestions.js.map +1 -1
- package/dist/cli/components/Messages.d.ts +7 -1
- package/dist/cli/components/Messages.d.ts.map +1 -1
- package/dist/cli/components/Messages.js +12 -3
- package/dist/cli/components/Messages.js.map +1 -1
- package/dist/cli/components/ModeIndicator.d.ts +42 -0
- package/dist/cli/components/ModeIndicator.d.ts.map +1 -0
- package/dist/cli/components/ModeIndicator.js +52 -0
- package/dist/cli/components/ModeIndicator.js.map +1 -0
- package/dist/cli/components/ModelSelector.d.ts +4 -3
- package/dist/cli/components/ModelSelector.d.ts.map +1 -1
- package/dist/cli/components/ModelSelector.js +54 -37
- package/dist/cli/components/ModelSelector.js.map +1 -1
- package/dist/cli/components/PlanApproval.d.ts +36 -0
- package/dist/cli/components/PlanApproval.d.ts.map +1 -0
- package/dist/cli/components/PlanApproval.js +154 -0
- package/dist/cli/components/PlanApproval.js.map +1 -0
- package/dist/cli/components/ProviderManager.d.ts +2 -2
- package/dist/cli/components/ProviderManager.d.ts.map +1 -1
- package/dist/cli/components/ProviderManager.js +137 -156
- package/dist/cli/components/ProviderManager.js.map +1 -1
- package/dist/cli/components/theme.d.ts +2 -0
- package/dist/cli/components/theme.d.ts.map +1 -1
- package/dist/cli/components/theme.js +3 -0
- package/dist/cli/components/theme.js.map +1 -1
- package/dist/cli/index.js +30 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/levels.d.ts +5 -5
- package/dist/config/levels.d.ts.map +1 -1
- package/dist/config/levels.js +20 -20
- package/dist/config/levels.js.map +1 -1
- package/dist/config/merger.js +1 -1
- package/dist/config/merger.js.map +1 -1
- package/dist/config/providers-config.d.ts +8 -5
- package/dist/config/providers-config.d.ts.map +1 -1
- package/dist/config/providers-config.js +19 -22
- package/dist/config/providers-config.js.map +1 -1
- package/dist/config/test-utils.d.ts +2 -2
- package/dist/config/test-utils.d.ts.map +1 -1
- package/dist/config/test-utils.js +4 -4
- package/dist/config/test-utils.js.map +1 -1
- package/dist/config/types.d.ts +23 -17
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +14 -14
- package/dist/config/types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/memory-manager.d.ts +25 -12
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +241 -112
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/test-utils.d.ts +1 -1
- package/dist/memory/test-utils.d.ts.map +1 -1
- package/dist/memory/test-utils.js +3 -3
- package/dist/memory/test-utils.js.map +1 -1
- package/dist/memory/types.d.ts +20 -10
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +13 -13
- package/dist/memory/types.js.map +1 -1
- package/dist/migration/migrate.d.ts +24 -0
- package/dist/migration/migrate.d.ts.map +1 -0
- package/dist/migration/migrate.js +164 -0
- package/dist/migration/migrate.js.map +1 -0
- package/dist/permissions/persistence.d.ts +2 -2
- package/dist/permissions/persistence.js +4 -4
- package/dist/permissions/persistence.js.map +1 -1
- package/dist/planning/index.d.ts +13 -0
- package/dist/planning/index.d.ts.map +1 -0
- package/dist/planning/index.js +15 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/plan-file.d.ts +59 -0
- package/dist/planning/plan-file.d.ts.map +1 -0
- package/dist/planning/plan-file.js +278 -0
- package/dist/planning/plan-file.js.map +1 -0
- package/dist/planning/state.d.ts +127 -0
- package/dist/planning/state.d.ts.map +1 -0
- package/dist/planning/state.js +261 -0
- package/dist/planning/state.js.map +1 -0
- package/dist/planning/tools/enter-plan-mode.d.ts +25 -0
- package/dist/planning/tools/enter-plan-mode.d.ts.map +1 -0
- package/dist/planning/tools/enter-plan-mode.js +98 -0
- package/dist/planning/tools/enter-plan-mode.js.map +1 -0
- package/dist/planning/tools/exit-plan-mode.d.ts +24 -0
- package/dist/planning/tools/exit-plan-mode.d.ts.map +1 -0
- package/dist/planning/tools/exit-plan-mode.js +149 -0
- package/dist/planning/tools/exit-plan-mode.js.map +1 -0
- package/dist/planning/types.d.ts +100 -0
- package/dist/planning/types.d.ts.map +1 -0
- package/dist/planning/types.js +28 -0
- package/dist/planning/types.js.map +1 -0
- package/dist/pricing/calculator.d.ts +21 -0
- package/dist/pricing/calculator.d.ts.map +1 -0
- package/dist/pricing/calculator.js +59 -0
- package/dist/pricing/calculator.js.map +1 -0
- package/dist/pricing/index.d.ts +7 -0
- package/dist/pricing/index.d.ts.map +1 -0
- package/dist/pricing/index.js +7 -0
- package/dist/pricing/index.js.map +1 -0
- package/dist/pricing/models.d.ts +20 -0
- package/dist/pricing/models.d.ts.map +1 -0
- package/dist/pricing/models.js +322 -0
- package/dist/pricing/models.js.map +1 -0
- package/dist/pricing/types.d.ts +30 -0
- package/dist/pricing/types.d.ts.map +1 -0
- package/dist/pricing/types.js +5 -0
- package/dist/pricing/types.js.map +1 -0
- package/dist/prompts/index.d.ts +5 -4
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +11 -8
- package/dist/prompts/index.js.map +1 -1
- package/dist/providers/anthropic.d.ts +2 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +24 -10
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/gemini.d.ts +2 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +28 -14
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/index.d.ts +20 -10
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +48 -24
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +19 -8
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +48 -34
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +72 -88
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/store.d.ts +43 -17
- package/dist/providers/store.d.ts.map +1 -1
- package/dist/providers/store.js +112 -19
- package/dist/providers/store.js.map +1 -1
- package/dist/providers/types.d.ts +25 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/vertex-ai.d.ts +15 -7
- package/dist/providers/vertex-ai.d.ts.map +1 -1
- package/dist/providers/vertex-ai.js +63 -23
- package/dist/providers/vertex-ai.js.map +1 -1
- package/dist/session/manager.d.ts +4 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +8 -0
- package/dist/session/manager.js.map +1 -1
- package/dist/session/types.js +1 -1
- package/dist/session/types.js.map +1 -1
- package/dist/tools/index.d.ts +7 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +13 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +79 -2
- package/dist/tools/registry.js.map +1 -1
- package/docs/config-system-comparison.md +50 -50
- package/docs/cost-tracking-comparison.md +904 -0
- package/docs/memory-system.md +124 -31
- package/docs/operating-modes.md +96 -0
- package/docs/permissions.md +2 -2
- package/docs/proposals/0006-memory-system.md +4 -4
- package/docs/proposals/0008-checkpointing.md +109 -2
- package/docs/proposals/0011-custom-commands.md +2 -1
- package/docs/proposals/0021-skills-system.md +2 -1
- package/docs/proposals/0023-permission-enhancements.md +2 -2
- package/docs/proposals/0025-cost-tracking.md +60 -2
- package/docs/proposals/0033-enterprise-deployment.md +1 -1
- package/docs/proposals/0041-configuration-system.md +17 -19
- package/docs/proposals/0042-prompt-optimization.md +17 -9
- package/docs/proposals/README.md +6 -6
- package/docs/providers.md +94 -9
- package/examples/test-checkpointing.ts +121 -0
- package/examples/test-cost-tracking.ts +77 -0
- package/examples/test-interrupt-cleanup.ts +94 -0
- package/package.json +3 -2
- package/scripts/migrate.ts +449 -0
- package/src/agent/agent.ts +161 -12
- package/src/agent/types.ts +11 -1
- package/src/checkpointing/checkpoint-manager.ts +327 -0
- package/src/checkpointing/index.ts +45 -0
- package/src/checkpointing/types.ts +104 -0
- package/src/cli/components/App.tsx +221 -13
- package/src/cli/components/CommandSuggestions.tsx +5 -0
- package/src/cli/components/Messages.tsx +24 -5
- package/src/cli/components/ModeIndicator.tsx +174 -0
- package/src/cli/components/ModelSelector.tsx +62 -43
- package/src/cli/components/PlanApproval.tsx +327 -0
- package/src/cli/components/ProviderManager.tsx +278 -323
- package/src/cli/components/theme.ts +3 -0
- package/src/cli/index.tsx +36 -17
- package/src/config/index.ts +5 -3
- package/src/config/levels.test.ts +22 -22
- package/src/config/levels.ts +22 -22
- package/src/config/loader.test.ts +14 -14
- package/src/config/manager.test.ts +19 -19
- package/src/config/merger.test.ts +23 -23
- package/src/config/merger.ts +1 -1
- package/src/config/providers-config.ts +23 -21
- package/src/config/test-utils.ts +6 -6
- package/src/config/types.ts +30 -20
- package/src/index.ts +15 -0
- package/src/memory/memory-manager.test.ts +242 -24
- package/src/memory/memory-manager.ts +270 -141
- package/src/memory/test-utils.ts +4 -4
- package/src/memory/types.ts +28 -17
- package/src/permissions/persistence.ts +4 -4
- package/src/planning/index.ts +53 -0
- package/src/planning/plan-file.ts +326 -0
- package/src/planning/state.ts +305 -0
- package/src/planning/tools/enter-plan-mode.ts +111 -0
- package/src/planning/tools/exit-plan-mode.ts +170 -0
- package/src/planning/types.ts +150 -0
- package/src/pricing/calculator.ts +71 -0
- package/src/pricing/index.ts +7 -0
- package/src/pricing/models.ts +334 -0
- package/src/pricing/types.ts +32 -0
- package/src/prompts/index.ts +13 -9
- package/src/providers/anthropic.ts +30 -10
- package/src/providers/gemini.ts +34 -14
- package/src/providers/index.ts +76 -33
- package/src/providers/openai.ts +26 -8
- package/src/providers/registry.ts +116 -111
- package/src/providers/store.ts +130 -28
- package/src/providers/types.ts +36 -1
- package/src/providers/vertex-ai.ts +70 -23
- package/src/session/manager.ts +9 -0
- package/src/session/types.ts +1 -1
- package/src/tools/index.ts +8 -0
- package/src/tools/registry.ts +95 -2
- package/.gencode/settings.local.json +0 -7
- package/CLAUDE.md +0 -86
package/dist/tools/index.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/tools/registry.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool Registry - Manages available tools
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
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
|
-
|
|
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;
|
|
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 `
|
|
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: .
|
|
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: .
|
|
36
|
+
│ Location: .gen/ + .claude/ (MERGED) │
|
|
37
37
|
│ Scope: All collaborators (committed to git) │
|
|
38
38
|
├─────────────────────────────────────────────────────────────────────┤
|
|
39
|
-
│ Level 2: Extra 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: ~/.
|
|
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("~/.
|
|
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 (可选,
|
|
83
|
+
║ STEP 2: Load EXTRA Config Dirs (可选,GEN_CONFIG) ║
|
|
84
84
|
╠═════════════════════════════════════════════════════════════════════════════╣
|
|
85
85
|
║ ║
|
|
86
|
-
║ 环境变量:
|
|
86
|
+
║ 环境变量: GEN_CONFIG="/team/config:~/shared-rules" ║
|
|
87
87
|
║ ║
|
|
88
|
-
║ For each dir in
|
|
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(".
|
|
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(".
|
|
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/
|
|
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("~/.
|
|
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
|
-
║ │ ~/.
|
|
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
|
|
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}/
|
|
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("./
|
|
234
|
-
║ │ else if exists: memories.push(load("./.
|
|
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
|
-
║ │ .
|
|
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("./
|
|
266
|
-
║ │ if exists: memories.push(load("./.
|
|
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** | `~/.
|
|
369
|
-
| **Project Config Dir** | `.
|
|
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** | `
|
|
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/ + ~/.
|
|
394
|
-
│ 2. Extra (
|
|
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/ + .
|
|
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** `.
|
|
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("~/.
|
|
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 `
|
|
422
|
+
GenCode supports `GEN_CONFIG` for team/organization config:
|
|
423
423
|
|
|
424
424
|
```bash
|
|
425
|
-
export
|
|
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
|
-
- `
|
|
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 - ~/.
|
|
515
|
+
// user:gencode - ~/.gen/settings.json
|
|
516
516
|
// project:claude - .claude/settings.json
|
|
517
|
-
// project:gencode - .
|
|
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 - ~/.
|
|
536
|
+
// user:gencode - ~/.gen/GEN.md (512 bytes)
|
|
537
537
|
// project:claude - ./CLAUDE.md (2048 bytes)
|
|
538
|
-
// project:gencode - ./
|
|
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
|
|
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/
|
|
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 `
|
|
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 `.
|
|
565
|
-
2. Optionally rename `CLAUDE.md` to `
|
|
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("~/.
|
|
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 (
|
|
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(".
|
|
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/
|
|
674
|
+
║ /Library/.../GenCode/GEN.md → push ║
|
|
675
675
|
╚══════════════════════════════════╤══════════════════════════════════════════╝
|
|
676
676
|
│
|
|
677
677
|
╔══════════════════════════════════▼══════════════════════════════════════════╗
|
|
678
678
|
║ 2. USER Memory ║
|
|
679
679
|
║ ~/.claude/CLAUDE.md → push ║
|
|
680
|
-
║ ~/.
|
|
680
|
+
║ ~/.gen/GEN.md → push ║
|
|
681
681
|
╚══════════════════════════════════╤══════════════════════════════════════════╝
|
|
682
682
|
│
|
|
683
683
|
╔══════════════════════════════════▼══════════════════════════════════════════╗
|
|
684
|
-
║ 3. EXTRA Memory (
|
|
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
|
-
║ ./
|
|
690
|
+
║ ./GEN.md or .gen/GEN.md → push ║
|
|
691
691
|
╚══════════════════════════════════╤══════════════════════════════════════════╝
|
|
692
692
|
│
|
|
693
693
|
╔══════════════════════════════════▼══════════════════════════════════════════╗
|
|
694
|
-
║ 5. RULES (.claude/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
|
-
║ ./
|
|
700
|
+
║ ./GEN.local.md → push ║
|
|
701
701
|
╚══════════════════════════════════╤══════════════════════════════════════════╝
|
|
702
702
|
│
|
|
703
703
|
┌────────▼────────┐
|