gencode-ai 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gencode/settings.local.json +7 -0
- package/README.md +11 -11
- package/dist/agent/agent.d.ts +42 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +82 -15
- package/dist/agent/agent.js.map +1 -1
- package/dist/cli/components/App.d.ts +8 -1
- package/dist/cli/components/App.d.ts.map +1 -1
- package/dist/cli/components/App.js +231 -29
- 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 +2 -0
- package/dist/cli/components/CommandSuggestions.js.map +1 -1
- package/dist/cli/components/Header.d.ts +1 -1
- package/dist/cli/components/Header.d.ts.map +1 -1
- package/dist/cli/components/Header.js +4 -6
- package/dist/cli/components/Header.js.map +1 -1
- package/dist/cli/components/Logo.d.ts +1 -0
- package/dist/cli/components/Logo.d.ts.map +1 -1
- package/dist/cli/components/Logo.js +16 -3
- package/dist/cli/components/Logo.js.map +1 -1
- package/dist/cli/components/Messages.d.ts +4 -4
- package/dist/cli/components/Messages.d.ts.map +1 -1
- package/dist/cli/components/Messages.js +51 -25
- package/dist/cli/components/Messages.js.map +1 -1
- package/dist/cli/components/PermissionPrompt.d.ts +60 -0
- package/dist/cli/components/PermissionPrompt.d.ts.map +1 -0
- package/dist/cli/components/PermissionPrompt.js +192 -0
- package/dist/cli/components/PermissionPrompt.js.map +1 -0
- package/dist/cli/components/ProviderManager.js +3 -3
- package/dist/cli/components/ProviderManager.js.map +1 -1
- package/dist/cli/components/Spinner.d.ts +7 -2
- package/dist/cli/components/Spinner.d.ts.map +1 -1
- package/dist/cli/components/Spinner.js +116 -25
- package/dist/cli/components/Spinner.js.map +1 -1
- package/dist/cli/components/TodoList.d.ts +7 -0
- package/dist/cli/components/TodoList.d.ts.map +1 -0
- package/dist/cli/components/TodoList.js +34 -0
- package/dist/cli/components/TodoList.js.map +1 -0
- package/dist/cli/components/index.d.ts +1 -0
- package/dist/cli/components/index.d.ts.map +1 -1
- package/dist/cli/components/index.js +1 -0
- package/dist/cli/components/index.js.map +1 -1
- package/dist/cli/index.js +47 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +13 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +18 -3
- package/dist/config/index.js.map +1 -1
- package/dist/config/levels.d.ts +49 -0
- package/dist/config/levels.d.ts.map +1 -0
- package/dist/config/levels.js +222 -0
- package/dist/config/levels.js.map +1 -0
- package/dist/config/loader.d.ts +46 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +153 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/manager.d.ts +115 -15
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +260 -34
- package/dist/config/manager.js.map +1 -1
- package/dist/config/manager.test.d.ts +5 -0
- package/dist/config/manager.test.d.ts.map +1 -0
- package/dist/config/manager.test.js +192 -0
- package/dist/config/manager.test.js.map +1 -0
- package/dist/config/merger.d.ts +56 -0
- package/dist/config/merger.d.ts.map +1 -0
- package/dist/config/merger.js +177 -0
- package/dist/config/merger.js.map +1 -0
- package/dist/config/test-utils.d.ts +24 -0
- package/dist/config/test-utils.d.ts.map +1 -0
- package/dist/config/test-utils.js +55 -0
- package/dist/config/test-utils.js.map +1 -0
- package/dist/config/types.d.ts +78 -9
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +52 -2
- package/dist/config/types.js.map +1 -1
- package/dist/memory/import-resolver.d.ts +46 -0
- package/dist/memory/import-resolver.d.ts.map +1 -0
- package/dist/memory/import-resolver.js +117 -0
- package/dist/memory/import-resolver.js.map +1 -0
- package/dist/memory/index.d.ts +7 -6
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +7 -5
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/init-prompt.d.ts +22 -0
- package/dist/memory/init-prompt.d.ts.map +1 -0
- package/dist/memory/init-prompt.js +103 -0
- package/dist/memory/init-prompt.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +119 -0
- package/dist/memory/memory-manager.d.ts.map +1 -0
- package/dist/memory/memory-manager.js +587 -0
- package/dist/memory/memory-manager.js.map +1 -0
- package/dist/memory/rules-parser.d.ts +38 -0
- package/dist/memory/rules-parser.d.ts.map +1 -0
- package/dist/memory/rules-parser.js +69 -0
- package/dist/memory/rules-parser.js.map +1 -0
- package/dist/memory/test-utils.d.ts +20 -0
- package/dist/memory/test-utils.d.ts.map +1 -0
- package/dist/memory/test-utils.js +44 -0
- package/dist/memory/test-utils.js.map +1 -0
- package/dist/memory/types.d.ts +70 -63
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +42 -2
- package/dist/memory/types.js.map +1 -1
- package/dist/permissions/audit.d.ts +82 -0
- package/dist/permissions/audit.d.ts.map +1 -0
- package/dist/permissions/audit.js +229 -0
- package/dist/permissions/audit.js.map +1 -0
- package/dist/permissions/index.d.ts +11 -1
- package/dist/permissions/index.d.ts.map +1 -1
- package/dist/permissions/index.js +15 -0
- package/dist/permissions/index.js.map +1 -1
- package/dist/permissions/manager.d.ts +149 -13
- package/dist/permissions/manager.d.ts.map +1 -1
- package/dist/permissions/manager.js +480 -35
- package/dist/permissions/manager.js.map +1 -1
- package/dist/permissions/manager.test.d.ts +5 -0
- package/dist/permissions/manager.test.d.ts.map +1 -0
- package/dist/permissions/manager.test.js +213 -0
- package/dist/permissions/manager.test.js.map +1 -0
- package/dist/permissions/persistence.d.ts +74 -0
- package/dist/permissions/persistence.d.ts.map +1 -0
- package/dist/permissions/persistence.js +248 -0
- package/dist/permissions/persistence.js.map +1 -0
- package/dist/permissions/persistence.test.d.ts +5 -0
- package/dist/permissions/persistence.test.d.ts.map +1 -0
- package/dist/permissions/persistence.test.js +171 -0
- package/dist/permissions/persistence.test.js.map +1 -0
- package/dist/permissions/prompt-matcher.d.ts +64 -0
- package/dist/permissions/prompt-matcher.d.ts.map +1 -0
- package/dist/permissions/prompt-matcher.js +415 -0
- package/dist/permissions/prompt-matcher.js.map +1 -0
- package/dist/permissions/prompt-matcher.test.d.ts +5 -0
- package/dist/permissions/prompt-matcher.test.d.ts.map +1 -0
- package/dist/permissions/prompt-matcher.test.js +107 -0
- package/dist/permissions/prompt-matcher.test.js.map +1 -0
- package/dist/permissions/types.d.ts +157 -0
- package/dist/permissions/types.d.ts.map +1 -1
- package/dist/permissions/types.js +43 -8
- package/dist/permissions/types.js.map +1 -1
- package/dist/prompts/index.d.ts +92 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +241 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/tools/builtin/bash.d.ts.map +1 -1
- package/dist/tools/builtin/bash.js +2 -1
- package/dist/tools/builtin/bash.js.map +1 -1
- package/dist/tools/builtin/edit.d.ts.map +1 -1
- package/dist/tools/builtin/edit.js +2 -1
- package/dist/tools/builtin/edit.js.map +1 -1
- package/dist/tools/builtin/glob.d.ts.map +1 -1
- package/dist/tools/builtin/glob.js +2 -1
- package/dist/tools/builtin/glob.js.map +1 -1
- package/dist/tools/builtin/grep.d.ts.map +1 -1
- package/dist/tools/builtin/grep.js +2 -1
- package/dist/tools/builtin/grep.js.map +1 -1
- package/dist/tools/builtin/read.d.ts.map +1 -1
- package/dist/tools/builtin/read.js +2 -1
- package/dist/tools/builtin/read.js.map +1 -1
- package/dist/tools/builtin/todowrite.d.ts +15 -0
- package/dist/tools/builtin/todowrite.d.ts.map +1 -0
- package/dist/tools/builtin/todowrite.js +88 -0
- package/dist/tools/builtin/todowrite.js.map +1 -0
- package/dist/tools/builtin/webfetch.d.ts.map +1 -1
- package/dist/tools/builtin/webfetch.js +2 -5
- package/dist/tools/builtin/webfetch.js.map +1 -1
- package/dist/tools/builtin/websearch.d.ts.map +1 -1
- package/dist/tools/builtin/websearch.js +2 -16
- package/dist/tools/builtin/websearch.js.map +1 -1
- package/dist/tools/builtin/write.d.ts.map +1 -1
- package/dist/tools/builtin/write.js +2 -1
- package/dist/tools/builtin/write.js.map +1 -1
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.d.ts +22 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +8 -0
- package/dist/tools/types.js.map +1 -1
- package/docs/config-system-comparison.md +707 -0
- package/docs/memory-system.md +238 -0
- package/docs/permissions.md +368 -0
- package/docs/proposals/0005-todo-system.md +350 -85
- package/docs/proposals/0006-memory-system.md +11 -10
- package/docs/proposals/0012-ask-user-question.md +941 -206
- package/docs/proposals/0023-permission-enhancements.md +61 -2
- package/docs/proposals/0041-configuration-system.md +33 -2
- package/docs/proposals/0042-prompt-optimization.md +866 -0
- package/docs/proposals/README.md +6 -5
- package/jest.config.js +26 -0
- package/package.json +8 -2
- package/src/agent/agent.ts +111 -16
- package/src/cli/components/App.tsx +309 -36
- package/src/cli/components/CommandSuggestions.tsx +2 -0
- package/src/cli/components/Header.tsx +11 -17
- package/src/cli/components/Logo.tsx +76 -9
- package/src/cli/components/Messages.tsx +73 -53
- package/src/cli/components/PermissionPrompt.tsx +388 -0
- package/src/cli/components/ProviderManager.tsx +5 -5
- package/src/cli/components/Spinner.tsx +138 -25
- package/src/cli/components/TodoList.tsx +54 -0
- package/src/cli/components/index.ts +6 -0
- package/src/cli/index.tsx +54 -6
- package/src/config/index.ts +78 -4
- package/src/config/levels.test.ts +163 -0
- package/src/config/levels.ts +285 -0
- package/src/config/loader.test.ts +120 -0
- package/src/config/loader.ts +178 -0
- package/src/config/manager.test.ts +215 -0
- package/src/config/manager.ts +328 -40
- package/src/config/merger.test.ts +360 -0
- package/src/config/merger.ts +221 -0
- package/src/config/test-utils.ts +79 -0
- package/src/config/types.ts +152 -9
- package/src/memory/import-resolver.test.ts +117 -0
- package/src/memory/import-resolver.ts +149 -0
- package/src/memory/index.ts +11 -0
- package/src/memory/init-prompt.ts +113 -0
- package/src/memory/memory-manager.test.ts +198 -0
- package/src/memory/memory-manager.ts +716 -0
- package/src/memory/rules-parser.test.ts +182 -0
- package/src/memory/rules-parser.ts +82 -0
- package/src/memory/test-utils.ts +60 -0
- package/src/memory/types.ts +119 -0
- package/src/permissions/audit.ts +284 -0
- package/src/permissions/index.ts +20 -1
- package/src/permissions/manager.test.ts +260 -0
- package/src/permissions/manager.ts +592 -40
- package/src/permissions/persistence.test.ts +220 -0
- package/src/permissions/persistence.ts +301 -0
- package/src/permissions/prompt-matcher.test.ts +213 -0
- package/src/permissions/prompt-matcher.ts +472 -0
- package/src/permissions/types.ts +236 -8
- package/src/prompts/index.test.ts +279 -0
- package/src/prompts/index.ts +306 -0
- package/src/prompts/system/anthropic.txt +29 -0
- package/src/prompts/system/base.txt +124 -0
- package/src/prompts/system/gemini.txt +35 -0
- package/src/prompts/system/generic.txt +128 -0
- package/src/prompts/system/openai.txt +29 -0
- package/src/prompts/tools/bash.txt +60 -0
- package/src/prompts/tools/edit.txt +29 -0
- package/src/prompts/tools/glob.txt +35 -0
- package/src/prompts/tools/grep.txt +43 -0
- package/src/prompts/tools/read.txt +22 -0
- package/src/prompts/tools/todowrite.txt +71 -0
- package/src/prompts/tools/webfetch.txt +34 -0
- package/src/prompts/tools/websearch.txt +41 -0
- package/src/prompts/tools/write.txt +23 -0
- package/src/tools/builtin/bash.ts +2 -1
- package/src/tools/builtin/edit.ts +2 -1
- package/src/tools/builtin/glob.ts +2 -1
- package/src/tools/builtin/grep.ts +2 -1
- package/src/tools/builtin/read.ts +2 -1
- package/src/tools/builtin/todowrite.ts +102 -0
- package/src/tools/builtin/webfetch.ts +2 -5
- package/src/tools/builtin/websearch.ts +2 -16
- package/src/tools/builtin/write.ts +2 -1
- package/src/tools/index.ts +4 -0
- package/src/tools/types.ts +12 -0
- package/tsconfig.json +1 -1
package/docs/proposals/README.md
CHANGED
|
@@ -16,19 +16,20 @@ This directory contains enhancement proposals for the gencode project. Each prop
|
|
|
16
16
|
|
|
17
17
|
| ID | Title | Status |
|
|
18
18
|
|----|-------|--------|
|
|
19
|
-
| [0001](./0001-web-fetch-tool.md) | WebFetch Tool |
|
|
20
|
-
| [0002](./0002-web-search-tool.md) | WebSearch Tool |
|
|
19
|
+
| [0001](./0001-web-fetch-tool.md) | WebFetch Tool | Implemented |
|
|
20
|
+
| [0002](./0002-web-search-tool.md) | WebSearch Tool | Implemented |
|
|
21
21
|
| [0003](./0003-task-subagents.md) | Task Tool & Subagents | Draft |
|
|
22
22
|
| [0004](./0004-plan-mode.md) | Plan Mode | Draft |
|
|
23
|
-
| [0005](./0005-todo-system.md) | Todo System |
|
|
24
|
-
| [0006](./0006-memory-system.md) | Memory System (MYCODE.md) |
|
|
23
|
+
| [0005](./0005-todo-system.md) | Todo System | Implemented |
|
|
24
|
+
| [0006](./0006-memory-system.md) | Memory System (MYCODE.md) | Implemented |
|
|
25
25
|
| [0007](./0007-context-management.md) | Context Management | Draft |
|
|
26
26
|
| [0008](./0008-checkpointing.md) | Checkpointing | Draft |
|
|
27
27
|
| [0009](./0009-hooks-system.md) | Hooks System | Draft |
|
|
28
28
|
| [0010](./0010-mcp-integration.md) | MCP Integration | Draft |
|
|
29
29
|
| [0011](./0011-custom-commands.md) | Custom Commands | Draft |
|
|
30
30
|
| [0012](./0012-ask-user-question.md) | AskUserQuestion Tool | Draft |
|
|
31
|
-
| [0041](./0041-configuration-system.md) | Configuration System |
|
|
31
|
+
| [0041](./0041-configuration-system.md) | Configuration System | Implemented |
|
|
32
|
+
| [0042](./0042-prompt-optimization.md) | Prompt System Optimization | Implemented |
|
|
32
33
|
|
|
33
34
|
### P2 Priority - Enhanced Features
|
|
34
35
|
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
|
2
|
+
export default {
|
|
3
|
+
preset: 'ts-jest/presets/default-esm',
|
|
4
|
+
testEnvironment: 'node',
|
|
5
|
+
extensionsToTreatAsEsm: ['.ts'],
|
|
6
|
+
moduleNameMapper: {
|
|
7
|
+
'^(\\.{1,2}/.*)\\.js$': '$1',
|
|
8
|
+
},
|
|
9
|
+
transform: {
|
|
10
|
+
'^.+\\.tsx?$': [
|
|
11
|
+
'ts-jest',
|
|
12
|
+
{
|
|
13
|
+
useESM: true,
|
|
14
|
+
isolatedModules: true,
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
testMatch: ['**/*.test.ts'],
|
|
19
|
+
collectCoverageFrom: [
|
|
20
|
+
'src/**/*.ts',
|
|
21
|
+
'!src/**/*.d.ts',
|
|
22
|
+
'!src/**/*.test.ts',
|
|
23
|
+
],
|
|
24
|
+
coverageDirectory: 'coverage',
|
|
25
|
+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
|
|
26
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gencode-ai",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "An open-source AI assistant for your terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -35,10 +35,12 @@
|
|
|
35
35
|
"fast-glob": "^3.3.3",
|
|
36
36
|
"glob": "^13.0.0",
|
|
37
37
|
"google-auth-library": "^10.5.0",
|
|
38
|
+
"gray-matter": "^4.0.3",
|
|
38
39
|
"ink": "^6.6.0",
|
|
39
40
|
"ink-spinner": "^5.0.0",
|
|
40
41
|
"ink-text-input": "^6.0.0",
|
|
41
42
|
"marked": "^17.0.1",
|
|
43
|
+
"minimatch": "^10.1.1",
|
|
42
44
|
"openai": "^6.16.0",
|
|
43
45
|
"ora": "^9.0.0",
|
|
44
46
|
"react": "^19.2.3",
|
|
@@ -47,8 +49,12 @@
|
|
|
47
49
|
"zod": "^4.3.5"
|
|
48
50
|
},
|
|
49
51
|
"devDependencies": {
|
|
52
|
+
"@types/jest": "^30.0.0",
|
|
53
|
+
"@types/minimatch": "^5.1.2",
|
|
50
54
|
"@types/node": "^25.0.8",
|
|
51
55
|
"@types/react": "^19.2.8",
|
|
56
|
+
"jest": "^30.2.0",
|
|
57
|
+
"ts-jest": "^29.4.6",
|
|
52
58
|
"tsx": "^4.21.0",
|
|
53
59
|
"typescript": "^5.9.3"
|
|
54
60
|
}
|
package/src/agent/agent.ts
CHANGED
|
@@ -5,29 +5,28 @@
|
|
|
5
5
|
import type { LLMProvider, Message, ToolResultContent } from '../providers/types.js';
|
|
6
6
|
import { createProvider, inferProvider } from '../providers/index.js';
|
|
7
7
|
import { ToolRegistry, createDefaultRegistry } from '../tools/index.js';
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
PermissionManager,
|
|
10
|
+
type ApprovalAction,
|
|
11
|
+
type ApprovalSuggestion,
|
|
12
|
+
type PromptPermission,
|
|
13
|
+
type PermissionSettings,
|
|
14
|
+
} from '../permissions/index.js';
|
|
9
15
|
import { SessionManager } from '../session/index.js';
|
|
16
|
+
import { MemoryManager, type LoadedMemory } from '../memory/index.js';
|
|
10
17
|
import type { AgentConfig, AgentEvent } from './types.js';
|
|
11
|
-
|
|
12
|
-
const DEFAULT_SYSTEM_PROMPT = `You are a helpful AI assistant with access to tools for reading, writing, and executing code.
|
|
13
|
-
|
|
14
|
-
When using tools:
|
|
15
|
-
- Use Read to view file contents before editing
|
|
16
|
-
- Use Glob/Grep to find files
|
|
17
|
-
- Use Edit for precise changes (old_string must be unique)
|
|
18
|
-
- Use Write for new files or full rewrites
|
|
19
|
-
- Use Bash for commands, git operations, etc.
|
|
20
|
-
|
|
21
|
-
Be concise and focus on completing the user's task.`;
|
|
18
|
+
import { buildSystemPromptForModel, debugPromptLoading } from '../prompts/index.js';
|
|
22
19
|
|
|
23
20
|
export class Agent {
|
|
24
21
|
private provider: LLMProvider;
|
|
25
22
|
private registry: ToolRegistry;
|
|
26
23
|
private permissions: PermissionManager;
|
|
27
24
|
private sessionManager: SessionManager;
|
|
25
|
+
private memoryManager: MemoryManager;
|
|
28
26
|
private config: AgentConfig;
|
|
29
27
|
private messages: Message[] = [];
|
|
30
28
|
private sessionId: string | null = null;
|
|
29
|
+
private loadedMemory: LoadedMemory | null = null;
|
|
31
30
|
|
|
32
31
|
constructor(config: AgentConfig) {
|
|
33
32
|
this.config = {
|
|
@@ -38,17 +37,93 @@ export class Agent {
|
|
|
38
37
|
|
|
39
38
|
this.provider = createProvider({ provider: config.provider });
|
|
40
39
|
this.registry = createDefaultRegistry();
|
|
41
|
-
this.permissions = new PermissionManager(
|
|
40
|
+
this.permissions = new PermissionManager({
|
|
41
|
+
config: config.permissions,
|
|
42
|
+
projectPath: config.cwd,
|
|
43
|
+
});
|
|
42
44
|
this.sessionManager = new SessionManager();
|
|
45
|
+
this.memoryManager = new MemoryManager();
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
/**
|
|
46
|
-
*
|
|
49
|
+
* Initialize permission system (load persisted rules)
|
|
50
|
+
*/
|
|
51
|
+
async initializePermissions(settings?: PermissionSettings): Promise<void> {
|
|
52
|
+
await this.permissions.initialize(settings);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Set simple permission confirmation callback (backward compatible)
|
|
47
57
|
*/
|
|
48
58
|
setConfirmCallback(callback: (tool: string, input: unknown) => Promise<boolean>): void {
|
|
59
|
+
this.permissions.setSimpleConfirmCallback(callback);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Set enhanced permission confirmation callback with approval options
|
|
64
|
+
*/
|
|
65
|
+
setEnhancedConfirmCallback(
|
|
66
|
+
callback: (
|
|
67
|
+
tool: string,
|
|
68
|
+
input: unknown,
|
|
69
|
+
suggestions: ApprovalSuggestion[]
|
|
70
|
+
) => Promise<ApprovalAction>
|
|
71
|
+
): void {
|
|
49
72
|
this.permissions.setConfirmCallback(callback);
|
|
50
73
|
}
|
|
51
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Add prompt-based permissions (Claude Code ExitPlanMode style)
|
|
77
|
+
*/
|
|
78
|
+
addAllowedPrompts(prompts: PromptPermission[]): void {
|
|
79
|
+
this.permissions.addAllowedPrompts(prompts);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Clear prompt-based permissions
|
|
84
|
+
*/
|
|
85
|
+
clearAllowedPrompts(): void {
|
|
86
|
+
this.permissions.clearAllowedPrompts();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Set callback to save permission rules to settings
|
|
91
|
+
* This enables saving rules to settings.local.json instead of permissions.json
|
|
92
|
+
*/
|
|
93
|
+
setSaveRuleCallback(callback: (tool: string, pattern?: string) => Promise<void>): void {
|
|
94
|
+
this.permissions.setSaveRuleCallback(callback);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Get permission manager for direct access
|
|
99
|
+
*/
|
|
100
|
+
getPermissionManager(): PermissionManager {
|
|
101
|
+
return this.permissions;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Get memory manager for direct access
|
|
106
|
+
*/
|
|
107
|
+
getMemoryManager(): MemoryManager {
|
|
108
|
+
return this.memoryManager;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get loaded memory (null if not loaded yet)
|
|
113
|
+
*/
|
|
114
|
+
getLoadedMemory(): LoadedMemory | null {
|
|
115
|
+
return this.loadedMemory;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Load memory for the current working directory
|
|
120
|
+
*/
|
|
121
|
+
async loadMemory(): Promise<LoadedMemory> {
|
|
122
|
+
const cwd = this.config.cwd ?? process.cwd();
|
|
123
|
+
this.loadedMemory = await this.memoryManager.load({ cwd });
|
|
124
|
+
return this.loadedMemory;
|
|
125
|
+
}
|
|
126
|
+
|
|
52
127
|
/**
|
|
53
128
|
* Get current session ID
|
|
54
129
|
*/
|
|
@@ -186,6 +261,11 @@ export class Agent {
|
|
|
186
261
|
await this.startSession();
|
|
187
262
|
}
|
|
188
263
|
|
|
264
|
+
// Load memory if not already loaded
|
|
265
|
+
if (!this.loadedMemory) {
|
|
266
|
+
await this.loadMemory();
|
|
267
|
+
}
|
|
268
|
+
|
|
189
269
|
// Add user message
|
|
190
270
|
const userMessage: Message = { role: 'user', content: prompt };
|
|
191
271
|
this.messages.push(userMessage);
|
|
@@ -203,11 +283,26 @@ export class Agent {
|
|
|
203
283
|
// Call LLM
|
|
204
284
|
let response;
|
|
205
285
|
try {
|
|
286
|
+
// Debug prompt loading (enabled with GENCODE_DEBUG_PROMPTS=1)
|
|
287
|
+
debugPromptLoading(this.config.model, this.config.provider);
|
|
288
|
+
|
|
289
|
+
// Build system prompt based on model → provider → prompt flow
|
|
290
|
+
// Looks up provider from ~/.gencode/providers.json, falls back to config.provider
|
|
291
|
+
const systemPrompt =
|
|
292
|
+
this.config.systemPrompt ??
|
|
293
|
+
buildSystemPromptForModel(
|
|
294
|
+
this.config.model,
|
|
295
|
+
this.config.cwd ?? process.cwd(),
|
|
296
|
+
true, // Assume git repo for now
|
|
297
|
+
this.loadedMemory?.context,
|
|
298
|
+
this.config.provider // Fallback provider if model lookup fails
|
|
299
|
+
);
|
|
300
|
+
|
|
206
301
|
response = await this.provider.complete({
|
|
207
302
|
model: this.config.model,
|
|
208
303
|
messages: this.messages,
|
|
209
304
|
tools: toolDefs,
|
|
210
|
-
systemPrompt
|
|
305
|
+
systemPrompt,
|
|
211
306
|
maxTokens: 4096,
|
|
212
307
|
});
|
|
213
308
|
} catch (error) {
|
|
@@ -244,7 +339,7 @@ export class Agent {
|
|
|
244
339
|
for (const call of toolCalls) {
|
|
245
340
|
yield { type: 'tool_start', id: call.id, name: call.name, input: call.input };
|
|
246
341
|
|
|
247
|
-
const allowed = await this.permissions.
|
|
342
|
+
const allowed = await this.permissions.requestPermission(call.name, call.input);
|
|
248
343
|
const result = allowed
|
|
249
344
|
? await this.registry.execute(call.name, call.input, { cwd })
|
|
250
345
|
: { success: false, output: '', error: 'Permission denied by user' };
|