gencode-ai 0.1.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 (274) hide show
  1. package/.env.example +11 -0
  2. package/CLAUDE.md +70 -0
  3. package/LICENSE +21 -0
  4. package/README.md +117 -0
  5. package/dist/agent/agent.d.ts +84 -0
  6. package/dist/agent/agent.d.ts.map +1 -0
  7. package/dist/agent/agent.js +233 -0
  8. package/dist/agent/agent.js.map +1 -0
  9. package/dist/agent/index.d.ts +6 -0
  10. package/dist/agent/index.d.ts.map +1 -0
  11. package/dist/agent/index.js +6 -0
  12. package/dist/agent/index.js.map +1 -0
  13. package/dist/agent/types.d.ts +47 -0
  14. package/dist/agent/types.d.ts.map +1 -0
  15. package/dist/agent/types.js +5 -0
  16. package/dist/agent/types.js.map +1 -0
  17. package/dist/cli/components/App.d.ts +14 -0
  18. package/dist/cli/components/App.d.ts.map +1 -0
  19. package/dist/cli/components/App.js +395 -0
  20. package/dist/cli/components/App.js.map +1 -0
  21. package/dist/cli/components/CommandSuggestions.d.ts +13 -0
  22. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -0
  23. package/dist/cli/components/CommandSuggestions.js +32 -0
  24. package/dist/cli/components/CommandSuggestions.js.map +1 -0
  25. package/dist/cli/components/Header.d.ts +9 -0
  26. package/dist/cli/components/Header.d.ts.map +1 -0
  27. package/dist/cli/components/Header.js +13 -0
  28. package/dist/cli/components/Header.js.map +1 -0
  29. package/dist/cli/components/Input.d.ts +13 -0
  30. package/dist/cli/components/Input.d.ts.map +1 -0
  31. package/dist/cli/components/Input.js +27 -0
  32. package/dist/cli/components/Input.js.map +1 -0
  33. package/dist/cli/components/Logo.d.ts +2 -0
  34. package/dist/cli/components/Logo.d.ts.map +1 -0
  35. package/dist/cli/components/Logo.js +8 -0
  36. package/dist/cli/components/Logo.js.map +1 -0
  37. package/dist/cli/components/Messages.d.ts +37 -0
  38. package/dist/cli/components/Messages.d.ts.map +1 -0
  39. package/dist/cli/components/Messages.js +106 -0
  40. package/dist/cli/components/Messages.js.map +1 -0
  41. package/dist/cli/components/ModelSelector.d.ts +13 -0
  42. package/dist/cli/components/ModelSelector.d.ts.map +1 -0
  43. package/dist/cli/components/ModelSelector.js +72 -0
  44. package/dist/cli/components/ModelSelector.js.map +1 -0
  45. package/dist/cli/components/Spinner.d.ts +12 -0
  46. package/dist/cli/components/Spinner.d.ts.map +1 -0
  47. package/dist/cli/components/Spinner.js +45 -0
  48. package/dist/cli/components/Spinner.js.map +1 -0
  49. package/dist/cli/components/index.d.ts +12 -0
  50. package/dist/cli/components/index.d.ts.map +1 -0
  51. package/dist/cli/components/index.js +12 -0
  52. package/dist/cli/components/index.js.map +1 -0
  53. package/dist/cli/components/theme.d.ts +31 -0
  54. package/dist/cli/components/theme.d.ts.map +1 -0
  55. package/dist/cli/components/theme.js +36 -0
  56. package/dist/cli/components/theme.js.map +1 -0
  57. package/dist/cli/index-legacy.d.ts +7 -0
  58. package/dist/cli/index-legacy.d.ts.map +1 -0
  59. package/dist/cli/index-legacy.js +431 -0
  60. package/dist/cli/index-legacy.js.map +1 -0
  61. package/dist/cli/index.d.ts +7 -0
  62. package/dist/cli/index.d.ts.map +1 -0
  63. package/dist/cli/index.js +116 -0
  64. package/dist/cli/index.js.map +1 -0
  65. package/dist/cli/ink-cli.d.ts +7 -0
  66. package/dist/cli/ink-cli.d.ts.map +1 -0
  67. package/dist/cli/ink-cli.js +105 -0
  68. package/dist/cli/ink-cli.js.map +1 -0
  69. package/dist/cli/session-picker.d.ts +16 -0
  70. package/dist/cli/session-picker.d.ts.map +1 -0
  71. package/dist/cli/session-picker.js +280 -0
  72. package/dist/cli/session-picker.js.map +1 -0
  73. package/dist/cli/ui.d.ts +61 -0
  74. package/dist/cli/ui.d.ts.map +1 -0
  75. package/dist/cli/ui.js +364 -0
  76. package/dist/cli/ui.js.map +1 -0
  77. package/dist/config/index.d.ts +7 -0
  78. package/dist/config/index.d.ts.map +1 -0
  79. package/dist/config/index.js +6 -0
  80. package/dist/config/index.js.map +1 -0
  81. package/dist/config/manager.d.ts +31 -0
  82. package/dist/config/manager.d.ts.map +1 -0
  83. package/dist/config/manager.js +65 -0
  84. package/dist/config/manager.js.map +1 -0
  85. package/dist/config/types.d.ts +22 -0
  86. package/dist/config/types.d.ts.map +1 -0
  87. package/dist/config/types.js +6 -0
  88. package/dist/config/types.js.map +1 -0
  89. package/dist/index.d.ts +12 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +21 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/memory/index.d.ts +10 -0
  94. package/dist/memory/index.d.ts.map +1 -0
  95. package/dist/memory/index.js +9 -0
  96. package/dist/memory/index.js.map +1 -0
  97. package/dist/memory/init.d.ts +20 -0
  98. package/dist/memory/init.d.ts.map +1 -0
  99. package/dist/memory/init.js +332 -0
  100. package/dist/memory/init.js.map +1 -0
  101. package/dist/memory/manager.d.ts +85 -0
  102. package/dist/memory/manager.d.ts.map +1 -0
  103. package/dist/memory/manager.js +234 -0
  104. package/dist/memory/manager.js.map +1 -0
  105. package/dist/memory/types.d.ts +74 -0
  106. package/dist/memory/types.d.ts.map +1 -0
  107. package/dist/memory/types.js +6 -0
  108. package/dist/memory/types.js.map +1 -0
  109. package/dist/permissions/index.d.ts +7 -0
  110. package/dist/permissions/index.d.ts.map +1 -0
  111. package/dist/permissions/index.js +6 -0
  112. package/dist/permissions/index.js.map +1 -0
  113. package/dist/permissions/manager.d.ts +32 -0
  114. package/dist/permissions/manager.d.ts.map +1 -0
  115. package/dist/permissions/manager.js +79 -0
  116. package/dist/permissions/manager.js.map +1 -0
  117. package/dist/permissions/types.d.ts +14 -0
  118. package/dist/permissions/types.d.ts.map +1 -0
  119. package/dist/permissions/types.js +17 -0
  120. package/dist/permissions/types.js.map +1 -0
  121. package/dist/providers/anthropic.d.ts +20 -0
  122. package/dist/providers/anthropic.d.ts.map +1 -0
  123. package/dist/providers/anthropic.js +185 -0
  124. package/dist/providers/anthropic.js.map +1 -0
  125. package/dist/providers/gemini.d.ts +21 -0
  126. package/dist/providers/gemini.d.ts.map +1 -0
  127. package/dist/providers/gemini.js +241 -0
  128. package/dist/providers/gemini.js.map +1 -0
  129. package/dist/providers/index.d.ts +34 -0
  130. package/dist/providers/index.d.ts.map +1 -0
  131. package/dist/providers/index.js +72 -0
  132. package/dist/providers/index.js.map +1 -0
  133. package/dist/providers/openai.d.ts +19 -0
  134. package/dist/providers/openai.d.ts.map +1 -0
  135. package/dist/providers/openai.js +221 -0
  136. package/dist/providers/openai.js.map +1 -0
  137. package/dist/providers/types.d.ts +125 -0
  138. package/dist/providers/types.d.ts.map +1 -0
  139. package/dist/providers/types.js +6 -0
  140. package/dist/providers/types.js.map +1 -0
  141. package/dist/session/index.d.ts +6 -0
  142. package/dist/session/index.d.ts.map +1 -0
  143. package/dist/session/index.js +6 -0
  144. package/dist/session/index.js.map +1 -0
  145. package/dist/session/manager.d.ts +101 -0
  146. package/dist/session/manager.d.ts.map +1 -0
  147. package/dist/session/manager.js +295 -0
  148. package/dist/session/manager.js.map +1 -0
  149. package/dist/session/types.d.ts +39 -0
  150. package/dist/session/types.d.ts.map +1 -0
  151. package/dist/session/types.js +10 -0
  152. package/dist/session/types.js.map +1 -0
  153. package/dist/tools/builtin/bash.d.ts +7 -0
  154. package/dist/tools/builtin/bash.d.ts.map +1 -0
  155. package/dist/tools/builtin/bash.js +80 -0
  156. package/dist/tools/builtin/bash.js.map +1 -0
  157. package/dist/tools/builtin/edit.d.ts +7 -0
  158. package/dist/tools/builtin/edit.d.ts.map +1 -0
  159. package/dist/tools/builtin/edit.js +32 -0
  160. package/dist/tools/builtin/edit.js.map +1 -0
  161. package/dist/tools/builtin/glob.d.ts +7 -0
  162. package/dist/tools/builtin/glob.d.ts.map +1 -0
  163. package/dist/tools/builtin/glob.js +36 -0
  164. package/dist/tools/builtin/glob.js.map +1 -0
  165. package/dist/tools/builtin/grep.d.ts +7 -0
  166. package/dist/tools/builtin/grep.d.ts.map +1 -0
  167. package/dist/tools/builtin/grep.js +59 -0
  168. package/dist/tools/builtin/grep.js.map +1 -0
  169. package/dist/tools/builtin/read.d.ts +7 -0
  170. package/dist/tools/builtin/read.d.ts.map +1 -0
  171. package/dist/tools/builtin/read.js +29 -0
  172. package/dist/tools/builtin/read.js.map +1 -0
  173. package/dist/tools/builtin/write.d.ts +7 -0
  174. package/dist/tools/builtin/write.d.ts.map +1 -0
  175. package/dist/tools/builtin/write.js +24 -0
  176. package/dist/tools/builtin/write.js.map +1 -0
  177. package/dist/tools/index.d.ts +38 -0
  178. package/dist/tools/index.d.ts.map +1 -0
  179. package/dist/tools/index.js +32 -0
  180. package/dist/tools/index.js.map +1 -0
  181. package/dist/tools/registry.d.ts +22 -0
  182. package/dist/tools/registry.d.ts.map +1 -0
  183. package/dist/tools/registry.js +71 -0
  184. package/dist/tools/registry.js.map +1 -0
  185. package/dist/tools/types.d.ts +62 -0
  186. package/dist/tools/types.d.ts.map +1 -0
  187. package/dist/tools/types.js +126 -0
  188. package/dist/tools/types.js.map +1 -0
  189. package/docs/README.md +16 -0
  190. package/docs/proposals/0001-web-fetch-tool.md +293 -0
  191. package/docs/proposals/0002-web-search-tool.md +306 -0
  192. package/docs/proposals/0003-task-subagents.md +333 -0
  193. package/docs/proposals/0004-plan-mode.md +338 -0
  194. package/docs/proposals/0005-todo-system.md +299 -0
  195. package/docs/proposals/0006-memory-system.md +539 -0
  196. package/docs/proposals/0007-context-management.md +429 -0
  197. package/docs/proposals/0008-checkpointing.md +327 -0
  198. package/docs/proposals/0009-hooks-system.md +343 -0
  199. package/docs/proposals/0010-mcp-integration.md +382 -0
  200. package/docs/proposals/0011-custom-commands.md +374 -0
  201. package/docs/proposals/0012-ask-user-question.md +317 -0
  202. package/docs/proposals/0013-multi-edit-tool.md +345 -0
  203. package/docs/proposals/0014-lsp-tool.md +478 -0
  204. package/docs/proposals/0015-ls-tool.md +407 -0
  205. package/docs/proposals/0016-kill-shell-tool.md +455 -0
  206. package/docs/proposals/0017-background-tasks.md +489 -0
  207. package/docs/proposals/0018-parallel-tool-execution.md +415 -0
  208. package/docs/proposals/0019-session-enhancements.md +462 -0
  209. package/docs/proposals/0020-session-summarization.md +447 -0
  210. package/docs/proposals/0021-skills-system.md +409 -0
  211. package/docs/proposals/0022-plugin-system.md +467 -0
  212. package/docs/proposals/0023-permission-enhancements.md +470 -0
  213. package/docs/proposals/0024-keyboard-shortcuts.md +443 -0
  214. package/docs/proposals/0025-cost-tracking.md +447 -0
  215. package/docs/proposals/0026-git-integration.md +475 -0
  216. package/docs/proposals/0027-enhanced-read-tool.md +514 -0
  217. package/docs/proposals/0028-enhanced-bash-tool.md +511 -0
  218. package/docs/proposals/0029-notebook-edit-tool.md +413 -0
  219. package/docs/proposals/0030-plugin-marketplace.md +360 -0
  220. package/docs/proposals/0031-command-suggestions.md +295 -0
  221. package/docs/proposals/0032-ide-integrations.md +328 -0
  222. package/docs/proposals/0033-enterprise-deployment.md +221 -0
  223. package/docs/proposals/0034-sandboxing.md +273 -0
  224. package/docs/proposals/0035-auto-updater.md +311 -0
  225. package/docs/proposals/0036-enhanced-glob-tool.md +267 -0
  226. package/docs/proposals/0037-enhanced-grep-tool.md +360 -0
  227. package/docs/proposals/0038-interactive-cli-ui.md +373 -0
  228. package/docs/proposals/0039-streaming-enhancements.md +359 -0
  229. package/docs/proposals/0040-multi-provider-enhancements.md +369 -0
  230. package/docs/proposals/README.md +84 -0
  231. package/docs/proposals/TEMPLATE.md +57 -0
  232. package/docs/proposals/research/claude-code-research.md +307 -0
  233. package/examples/agent-demo.ts +115 -0
  234. package/examples/basic.ts +166 -0
  235. package/package.json +50 -0
  236. package/src/agent/agent.ts +276 -0
  237. package/src/agent/index.ts +6 -0
  238. package/src/agent/types.ts +62 -0
  239. package/src/cli/components/App.tsx +565 -0
  240. package/src/cli/components/CommandSuggestions.tsx +58 -0
  241. package/src/cli/components/Header.tsx +36 -0
  242. package/src/cli/components/Input.tsx +60 -0
  243. package/src/cli/components/Logo.tsx +16 -0
  244. package/src/cli/components/Messages.tsx +210 -0
  245. package/src/cli/components/ModelSelector.tsx +135 -0
  246. package/src/cli/components/Spinner.tsx +72 -0
  247. package/src/cli/components/index.ts +21 -0
  248. package/src/cli/components/theme.ts +36 -0
  249. package/src/cli/index.tsx +136 -0
  250. package/src/config/index.ts +7 -0
  251. package/src/config/manager.ts +77 -0
  252. package/src/config/types.ts +25 -0
  253. package/src/index.ts +86 -0
  254. package/src/permissions/index.ts +7 -0
  255. package/src/permissions/manager.ts +97 -0
  256. package/src/permissions/types.ts +29 -0
  257. package/src/providers/anthropic.ts +224 -0
  258. package/src/providers/gemini.ts +295 -0
  259. package/src/providers/index.ts +97 -0
  260. package/src/providers/openai.ts +261 -0
  261. package/src/providers/types.ts +181 -0
  262. package/src/session/index.ts +6 -0
  263. package/src/session/manager.ts +354 -0
  264. package/src/session/types.ts +49 -0
  265. package/src/tools/builtin/bash.ts +92 -0
  266. package/src/tools/builtin/edit.ts +37 -0
  267. package/src/tools/builtin/glob.ts +42 -0
  268. package/src/tools/builtin/grep.ts +67 -0
  269. package/src/tools/builtin/read.ts +34 -0
  270. package/src/tools/builtin/write.ts +27 -0
  271. package/src/tools/index.ts +36 -0
  272. package/src/tools/registry.ts +83 -0
  273. package/src/tools/types.ts +172 -0
  274. package/tsconfig.json +21 -0
package/.env.example ADDED
@@ -0,0 +1,11 @@
1
+ # GenCode - Environment Variables
2
+ # Copy this file to .env and fill in your API keys
3
+
4
+ # OpenAI API Key (for GPT-4, GPT-4o, etc.)
5
+ OPENAI_API_KEY=sk-xxx
6
+
7
+ # Anthropic API Key (for Claude models)
8
+ ANTHROPIC_API_KEY=sk-ant-xxx
9
+
10
+ # Google Gemini API Key
11
+ GOOGLE_API_KEY=xxx
package/CLAUDE.md ADDED
@@ -0,0 +1,70 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ **GenCode** (npm: `gencode`) is an open-source, provider-agnostic AI coding assistant. It brings Claude Code's excellent interactive CLI experience while allowing flexible switching between different LLM providers (OpenAI, Anthropic, Google Gemini).
8
+
9
+ ## Build & Run Commands
10
+
11
+ ```bash
12
+ npm install # Install dependencies
13
+ npm run build # Compile TypeScript to dist/
14
+ npm run dev # Watch mode compilation
15
+ npm start # Run CLI directly via tsx
16
+ npm run example # Run examples/basic.ts
17
+ ```
18
+
19
+ ## Architecture
20
+
21
+ ### Provider Abstraction Layer (`src/providers/`)
22
+
23
+ Unified `LLMProvider` interface abstracts API differences:
24
+ - `complete()` - Non-streaming completion
25
+ - `stream()` - Streaming completion (AsyncGenerator)
26
+
27
+ Each provider (OpenAI, Anthropic, Gemini) translates the unified message format to its native API format and back. The `createProvider()` factory instantiates providers by name.
28
+
29
+ ### Tool System (`src/tools/`)
30
+
31
+ Tools are defined with Zod schemas for input validation:
32
+ ```typescript
33
+ interface Tool<TInput> {
34
+ name: string;
35
+ description: string;
36
+ parameters: z.ZodSchema<TInput>;
37
+ execute(input: TInput, context: ToolContext): Promise<ToolResult>;
38
+ }
39
+ ```
40
+
41
+ `ToolRegistry` manages tools and converts Zod schemas to JSON Schema for LLM consumption via `zodToJsonSchema()`.
42
+
43
+ ### Agent Loop (`src/agent/agent.ts`)
44
+
45
+ The `Agent` class implements the core conversation loop:
46
+ 1. User message → LLM with tools
47
+ 2. If `stopReason === 'tool_use'`: execute tools, append results, loop back
48
+ 3. If `stopReason !== 'tool_use'`: done
49
+
50
+ Events are yielded as `AgentEvent` (text, tool_start, tool_result, done, error).
51
+
52
+ ### Session Management (`src/session/`)
53
+
54
+ Sessions persist conversation history to `~/.gencode/sessions/` as JSON files. Supports resume, fork, list, and delete operations.
55
+
56
+ ## Configuration
57
+
58
+ Provider/model selection priority:
59
+ 1. `GENCODE_PROVIDER` / `GENCODE_MODEL` env vars
60
+ 2. Auto-detect from available API keys (ANTHROPIC_API_KEY → OPENAI_API_KEY → GOOGLE_API_KEY)
61
+ 3. Default: Gemini
62
+
63
+ Proxy: Set `HTTP_PROXY` or `HTTPS_PROXY` for network proxy support.
64
+
65
+ ## Key Patterns
66
+
67
+ - All file paths in tools should be resolved relative to `ToolContext.cwd`
68
+ - Tool input validation uses Zod; errors returned as `ToolResult.error`
69
+ - Provider implementations handle message format conversion internally
70
+ - CLI commands start with `/` (e.g., `/sessions`, `/resume`, `/help`)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Meng Yan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,117 @@
1
+ # GenCode
2
+
3
+ An open-source, provider-agnostic AI coding assistant.
4
+
5
+ ## Why GenCode?
6
+
7
+ Claude Code is excellent - its interactive CLI experience, tool integration, and agent loop design are impressive. However, it's locked to Anthropic's Claude models.
8
+
9
+ **GenCode** brings that same great experience while giving you the freedom to:
10
+
11
+ - **Switch providers freely** - Use OpenAI, Anthropic, Google Gemini, or any OpenAI-compatible API
12
+ - **Control your costs** - Choose models that fit your budget and use case
13
+ - **Stay flexible** - No vendor lock-in, use local models or any cloud provider
14
+ - **Keep the experience** - Same intuitive CLI workflow inspired by Claude Code
15
+
16
+ ## Quick Start
17
+
18
+ ```bash
19
+ # Install globally
20
+ npm install -g gencode
21
+
22
+ # Run
23
+ gencode
24
+ ```
25
+
26
+ Or run from source:
27
+
28
+ ```bash
29
+ # Install dependencies
30
+ npm install
31
+
32
+ # Build
33
+ npm run build
34
+
35
+ # Run CLI
36
+ npm start
37
+ ```
38
+
39
+ ## Usage
40
+
41
+ ### CLI Mode
42
+
43
+ ```bash
44
+ # Start interactive CLI
45
+ gencode
46
+
47
+ # Resume last session
48
+ gencode -c
49
+
50
+ # Select from recent sessions
51
+ gencode -r
52
+ ```
53
+
54
+ ### Programmatic Usage
55
+
56
+ ```typescript
57
+ import { Agent } from 'gencode';
58
+
59
+ const agent = new Agent({
60
+ provider: 'gemini', // 'openai' | 'anthropic' | 'gemini'
61
+ model: 'gemini-2.0-flash',
62
+ });
63
+
64
+ for await (const event of agent.run('List files in current directory')) {
65
+ if (event.type === 'text') {
66
+ console.log(event.text);
67
+ }
68
+ }
69
+ ```
70
+
71
+ ## Configuration
72
+
73
+ Create a `.env` file:
74
+
75
+ ```bash
76
+ # Choose one or more providers
77
+ OPENAI_API_KEY=sk-xxx
78
+ ANTHROPIC_API_KEY=sk-ant-xxx
79
+ GOOGLE_API_KEY=xxx
80
+
81
+ # Optional: override provider/model
82
+ GENCODE_PROVIDER=anthropic
83
+ GENCODE_MODEL=claude-sonnet-4-20250514
84
+
85
+ # Optional proxy
86
+ HTTP_PROXY=http://proxy:3128
87
+ HTTPS_PROXY=http://proxy:3128
88
+ ```
89
+
90
+ ## Features
91
+
92
+ | Feature | Status |
93
+ |---------|--------|
94
+ | Multi-LLM Support (OpenAI/Anthropic/Gemini) | ✅ |
95
+ | Built-in Tools (Read/Write/Edit/Bash/Glob/Grep) | ✅ |
96
+ | Permission System (auto/confirm/deny) | ✅ |
97
+ | Agent Loop (multi-turn + tool calls) | ✅ |
98
+ | Streaming Output | ✅ |
99
+ | Interactive CLI | ✅ |
100
+ | Session Management | ✅ |
101
+ | Proxy Support | ✅ |
102
+
103
+ ## Project Structure
104
+
105
+ ```
106
+ src/
107
+ ├── agent/ # Agent system (tool loop)
108
+ ├── providers/ # LLM providers (OpenAI, Anthropic, Gemini)
109
+ ├── tools/ # Built-in tools
110
+ ├── permissions/ # Permission management
111
+ ├── session/ # Session persistence
112
+ └── cli/ # Interactive CLI
113
+ ```
114
+
115
+ ## License
116
+
117
+ MIT
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Agent - Core agent implementation with tool loop and session support
3
+ */
4
+ import type { Message } from '../providers/types.js';
5
+ import { SessionManager } from '../session/index.js';
6
+ import type { AgentConfig, AgentEvent } from './types.js';
7
+ export declare class Agent {
8
+ private provider;
9
+ private registry;
10
+ private permissions;
11
+ private sessionManager;
12
+ private config;
13
+ private messages;
14
+ private sessionId;
15
+ constructor(config: AgentConfig);
16
+ /**
17
+ * Set permission confirmation callback
18
+ */
19
+ setConfirmCallback(callback: (tool: string, input: unknown) => Promise<boolean>): void;
20
+ /**
21
+ * Get current session ID
22
+ */
23
+ getSessionId(): string | null;
24
+ /**
25
+ * Get session manager for external access
26
+ */
27
+ getSessionManager(): SessionManager;
28
+ /**
29
+ * Set the model to use
30
+ */
31
+ setModel(model: string): void;
32
+ /**
33
+ * Get current model
34
+ */
35
+ getModel(): string;
36
+ /**
37
+ * List available models from the provider API
38
+ */
39
+ listModels(): Promise<{
40
+ id: string;
41
+ name: string;
42
+ }[]>;
43
+ /**
44
+ * Start a new session
45
+ */
46
+ startSession(title?: string): Promise<string>;
47
+ /**
48
+ * Resume an existing session
49
+ */
50
+ resumeSession(sessionId: string): Promise<boolean>;
51
+ /**
52
+ * Resume the most recent session
53
+ */
54
+ resumeLatest(): Promise<boolean>;
55
+ /**
56
+ * Fork current session
57
+ */
58
+ forkSession(title?: string): Promise<string | null>;
59
+ /**
60
+ * List all sessions
61
+ */
62
+ listSessions(): Promise<import("../session/types.js").SessionListItem[]>;
63
+ /**
64
+ * Delete a session
65
+ */
66
+ deleteSession(sessionId: string): Promise<boolean>;
67
+ /**
68
+ * Save current session
69
+ */
70
+ saveSession(): Promise<void>;
71
+ /**
72
+ * Run a single query through the agent
73
+ */
74
+ run(prompt: string): AsyncGenerator<AgentEvent, void, unknown>;
75
+ /**
76
+ * Clear conversation history
77
+ */
78
+ clearHistory(): void;
79
+ /**
80
+ * Get conversation history
81
+ */
82
+ getHistory(): Message[];
83
+ }
84
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAe,OAAO,EAAqB,MAAM,uBAAuB,CAAC;AAIrF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAa1D,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,EAAE,WAAW;IAa/B;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAItF;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAI3D;;OAEG;IACG,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnD;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYxD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAYtC;;OAEG;IACG,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWzD;;OAEG;IACG,YAAY;IAIlB;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC;;OAEG;IACI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC;IAsFrE;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,UAAU,IAAI,OAAO,EAAE;CAGxB"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Agent - Core agent implementation with tool loop and session support
3
+ */
4
+ import { createProvider } from '../providers/index.js';
5
+ import { createDefaultRegistry } from '../tools/index.js';
6
+ import { PermissionManager } from '../permissions/index.js';
7
+ import { SessionManager } from '../session/index.js';
8
+ const DEFAULT_SYSTEM_PROMPT = `You are a helpful AI assistant with access to tools for reading, writing, and executing code.
9
+
10
+ When using tools:
11
+ - Use Read to view file contents before editing
12
+ - Use Glob/Grep to find files
13
+ - Use Edit for precise changes (old_string must be unique)
14
+ - Use Write for new files or full rewrites
15
+ - Use Bash for commands, git operations, etc.
16
+
17
+ Be concise and focus on completing the user's task.`;
18
+ export class Agent {
19
+ provider;
20
+ registry;
21
+ permissions;
22
+ sessionManager;
23
+ config;
24
+ messages = [];
25
+ sessionId = null;
26
+ constructor(config) {
27
+ this.config = {
28
+ maxTurns: 10,
29
+ cwd: process.cwd(),
30
+ ...config,
31
+ };
32
+ this.provider = createProvider({ provider: config.provider });
33
+ this.registry = createDefaultRegistry();
34
+ this.permissions = new PermissionManager(config.permissions);
35
+ this.sessionManager = new SessionManager();
36
+ }
37
+ /**
38
+ * Set permission confirmation callback
39
+ */
40
+ setConfirmCallback(callback) {
41
+ this.permissions.setConfirmCallback(callback);
42
+ }
43
+ /**
44
+ * Get current session ID
45
+ */
46
+ getSessionId() {
47
+ return this.sessionId;
48
+ }
49
+ /**
50
+ * Get session manager for external access
51
+ */
52
+ getSessionManager() {
53
+ return this.sessionManager;
54
+ }
55
+ /**
56
+ * Set the model to use
57
+ */
58
+ setModel(model) {
59
+ this.config.model = model;
60
+ }
61
+ /**
62
+ * Get current model
63
+ */
64
+ getModel() {
65
+ return this.config.model;
66
+ }
67
+ /**
68
+ * List available models from the provider API
69
+ */
70
+ async listModels() {
71
+ return this.provider.listModels();
72
+ }
73
+ /**
74
+ * Start a new session
75
+ */
76
+ async startSession(title) {
77
+ const session = await this.sessionManager.create({
78
+ provider: this.config.provider,
79
+ model: this.config.model,
80
+ cwd: this.config.cwd,
81
+ title,
82
+ });
83
+ this.sessionId = session.metadata.id;
84
+ this.messages = [];
85
+ return this.sessionId;
86
+ }
87
+ /**
88
+ * Resume an existing session
89
+ */
90
+ async resumeSession(sessionId) {
91
+ const session = await this.sessionManager.load(sessionId);
92
+ if (!session) {
93
+ return false;
94
+ }
95
+ this.sessionId = session.metadata.id;
96
+ this.messages = session.messages;
97
+ return true;
98
+ }
99
+ /**
100
+ * Resume the most recent session
101
+ */
102
+ async resumeLatest() {
103
+ const session = await this.sessionManager.resumeLatest();
104
+ if (!session) {
105
+ return false;
106
+ }
107
+ this.sessionId = session.metadata.id;
108
+ this.messages = session.messages;
109
+ return true;
110
+ }
111
+ /**
112
+ * Fork current session
113
+ */
114
+ async forkSession(title) {
115
+ if (!this.sessionId) {
116
+ return null;
117
+ }
118
+ const forked = await this.sessionManager.fork(this.sessionId, title);
119
+ this.sessionId = forked.metadata.id;
120
+ return this.sessionId;
121
+ }
122
+ /**
123
+ * List all sessions
124
+ */
125
+ async listSessions() {
126
+ return this.sessionManager.list();
127
+ }
128
+ /**
129
+ * Delete a session
130
+ */
131
+ async deleteSession(sessionId) {
132
+ return this.sessionManager.delete(sessionId);
133
+ }
134
+ /**
135
+ * Save current session
136
+ */
137
+ async saveSession() {
138
+ const current = this.sessionManager.getCurrent();
139
+ if (current) {
140
+ current.messages = this.messages;
141
+ await this.sessionManager.save(current);
142
+ }
143
+ }
144
+ /**
145
+ * Run a single query through the agent
146
+ */
147
+ async *run(prompt) {
148
+ // Auto-create session if none exists
149
+ if (!this.sessionId) {
150
+ await this.startSession();
151
+ }
152
+ // Add user message
153
+ const userMessage = { role: 'user', content: prompt };
154
+ this.messages.push(userMessage);
155
+ await this.sessionManager.addMessage(userMessage);
156
+ let turns = 0;
157
+ const maxTurns = this.config.maxTurns ?? 10;
158
+ while (turns < maxTurns) {
159
+ turns++;
160
+ // Get tool definitions
161
+ const toolDefs = this.registry.getDefinitions(this.config.tools);
162
+ // Call LLM
163
+ let response;
164
+ try {
165
+ response = await this.provider.complete({
166
+ model: this.config.model,
167
+ messages: this.messages,
168
+ tools: toolDefs,
169
+ systemPrompt: this.config.systemPrompt ?? DEFAULT_SYSTEM_PROMPT,
170
+ maxTokens: 4096,
171
+ });
172
+ }
173
+ catch (error) {
174
+ yield { type: 'error', error: error };
175
+ return;
176
+ }
177
+ // Process response content
178
+ const toolCalls = [];
179
+ let textContent = '';
180
+ for (const content of response.content) {
181
+ if (content.type === 'text') {
182
+ textContent += content.text;
183
+ yield { type: 'text', text: content.text };
184
+ }
185
+ else if (content.type === 'tool_use') {
186
+ toolCalls.push({ id: content.id, name: content.name, input: content.input });
187
+ }
188
+ }
189
+ // Add assistant message and check if done
190
+ this.messages.push({ role: 'assistant', content: response.content });
191
+ await this.sessionManager.addMessage({ role: 'assistant', content: response.content });
192
+ if (response.stopReason !== 'tool_use' || toolCalls.length === 0) {
193
+ yield { type: 'done', text: textContent };
194
+ return;
195
+ }
196
+ // Execute tool calls
197
+ const toolResults = [];
198
+ const cwd = this.config.cwd ?? process.cwd();
199
+ for (const call of toolCalls) {
200
+ yield { type: 'tool_start', id: call.id, name: call.name, input: call.input };
201
+ const allowed = await this.permissions.checkPermission(call.name, call.input);
202
+ const result = allowed
203
+ ? await this.registry.execute(call.name, call.input, { cwd })
204
+ : { success: false, output: '', error: 'Permission denied by user' };
205
+ yield { type: 'tool_result', id: call.id, name: call.name, result };
206
+ toolResults.push({
207
+ type: 'tool_result',
208
+ toolUseId: call.id,
209
+ content: result.success ? result.output : (result.error ?? 'Unknown error'),
210
+ isError: !result.success,
211
+ });
212
+ }
213
+ // Add tool results as user message
214
+ this.messages.push({ role: 'user', content: toolResults });
215
+ await this.sessionManager.addMessage({ role: 'user', content: toolResults });
216
+ }
217
+ yield { type: 'error', error: new Error(`Max turns (${maxTurns}) exceeded`) };
218
+ }
219
+ /**
220
+ * Clear conversation history
221
+ */
222
+ clearHistory() {
223
+ this.messages = [];
224
+ this.sessionManager.clearMessages();
225
+ }
226
+ /**
227
+ * Get conversation history
228
+ */
229
+ getHistory() {
230
+ return [...this.messages];
231
+ }
232
+ }
233
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Agent System
3
+ */
4
+ export * from './types.js';
5
+ export { Agent } from './agent.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Agent System
3
+ */
4
+ export * from './types.js';
5
+ export { Agent } from './agent.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Agent Types
3
+ */
4
+ import type { PermissionConfig } from '../permissions/types.js';
5
+ export interface AgentConfig {
6
+ provider: 'openai' | 'anthropic' | 'gemini';
7
+ model: string;
8
+ systemPrompt?: string;
9
+ tools?: string[];
10
+ cwd?: string;
11
+ maxTurns?: number;
12
+ permissions?: Partial<PermissionConfig>;
13
+ }
14
+ export interface AgentEventText {
15
+ type: 'text';
16
+ text: string;
17
+ }
18
+ export interface AgentEventToolStart {
19
+ type: 'tool_start';
20
+ id: string;
21
+ name: string;
22
+ input: unknown;
23
+ }
24
+ export interface AgentEventToolResult {
25
+ type: 'tool_result';
26
+ id: string;
27
+ name: string;
28
+ result: {
29
+ success: boolean;
30
+ output: string;
31
+ error?: string;
32
+ };
33
+ }
34
+ export interface AgentEventThinking {
35
+ type: 'thinking';
36
+ text: string;
37
+ }
38
+ export interface AgentEventError {
39
+ type: 'error';
40
+ error: Error;
41
+ }
42
+ export interface AgentEventDone {
43
+ type: 'done';
44
+ text: string;
45
+ }
46
+ export type AgentEvent = AgentEventText | AgentEventToolStart | AgentEventToolResult | AgentEventThinking | AgentEventError | AgentEventDone;
47
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzC;AAGD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,mBAAmB,GACnB,oBAAoB,GACpB,kBAAkB,GAClB,eAAe,GACf,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Agent Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,14 @@
1
+ import type { AgentConfig } from '../../agent/types.js';
2
+ interface SettingsManager {
3
+ save: (settings: {
4
+ model?: string;
5
+ }) => Promise<void>;
6
+ }
7
+ interface AppProps {
8
+ config: AgentConfig;
9
+ settingsManager?: SettingsManager;
10
+ resumeLatest?: boolean;
11
+ }
12
+ export declare function App({ config, settingsManager, resumeLatest }: AppProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/cli/components/App.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA+BxD,UAAU,eAAe;IACvB,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAQD,UAAU,QAAQ;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAqED,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,QAAQ,2CA2btE"}