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
@@ -0,0 +1,328 @@
1
+ # Proposal: IDE Integrations
2
+
3
+ - **Proposal ID**: 0032
4
+ - **Author**: mycode team
5
+ - **Status**: Draft
6
+ - **Created**: 2025-01-15
7
+ - **Updated**: 2025-01-15
8
+
9
+ ## Summary
10
+
11
+ Implement IDE integrations for VS Code, JetBrains IDEs, and other editors, allowing users to interact with mycode from within their development environment.
12
+
13
+ ## Motivation
14
+
15
+ CLI-only usage has limitations:
16
+
17
+ 1. **Context switching**: Switch between editor and terminal
18
+ 2. **No visual integration**: Can't see code in context
19
+ 3. **Limited selection**: Can't select code to discuss
20
+ 4. **No inline suggestions**: Suggestions not in editor
21
+ 5. **Workflow friction**: Extra steps for common tasks
22
+
23
+ IDE integrations enable seamless development workflows.
24
+
25
+ ## Claude Code Reference
26
+
27
+ Claude Code offers VS Code integration:
28
+
29
+ ### Features
30
+ - Sidebar panel for chat
31
+ - Code selection context
32
+ - Inline completions
33
+ - Terminal integration
34
+ - File context awareness
35
+
36
+ ## Detailed Design
37
+
38
+ ### API Design
39
+
40
+ ```typescript
41
+ // src/ide/types.ts
42
+ interface IDEConnection {
43
+ id: string;
44
+ type: 'vscode' | 'jetbrains' | 'vim' | 'emacs';
45
+ version: string;
46
+ capabilities: string[];
47
+ }
48
+
49
+ interface IDEMessage {
50
+ type: 'request' | 'response' | 'event';
51
+ id: string;
52
+ method: string;
53
+ params?: unknown;
54
+ }
55
+
56
+ interface CodeContext {
57
+ filePath: string;
58
+ language: string;
59
+ selection?: {
60
+ start: { line: number; character: number };
61
+ end: { line: number; character: number };
62
+ text: string;
63
+ };
64
+ visibleRange?: {
65
+ start: number;
66
+ end: number;
67
+ };
68
+ diagnostics?: Diagnostic[];
69
+ }
70
+ ```
71
+
72
+ ### IDE Server
73
+
74
+ ```typescript
75
+ // src/ide/server.ts
76
+ class IDEServer {
77
+ private connections: Map<string, IDEConnection> = new Map();
78
+ private wss: WebSocketServer;
79
+
80
+ constructor(port: number = 9876) {
81
+ this.wss = new WebSocketServer({ port });
82
+ this.setupHandlers();
83
+ }
84
+
85
+ private setupHandlers(): void {
86
+ this.wss.on('connection', (ws) => {
87
+ const id = generateId();
88
+
89
+ ws.on('message', async (data) => {
90
+ const message = JSON.parse(data.toString()) as IDEMessage;
91
+ const response = await this.handleMessage(id, message);
92
+ ws.send(JSON.stringify(response));
93
+ });
94
+
95
+ ws.on('close', () => {
96
+ this.connections.delete(id);
97
+ });
98
+ });
99
+ }
100
+
101
+ private async handleMessage(
102
+ connectionId: string,
103
+ message: IDEMessage
104
+ ): Promise<IDEMessage> {
105
+ switch (message.method) {
106
+ case 'initialize':
107
+ return this.handleInitialize(connectionId, message);
108
+ case 'chat':
109
+ return this.handleChat(connectionId, message);
110
+ case 'complete':
111
+ return this.handleComplete(connectionId, message);
112
+ case 'explain':
113
+ return this.handleExplain(connectionId, message);
114
+ case 'fix':
115
+ return this.handleFix(connectionId, message);
116
+ default:
117
+ return {
118
+ type: 'response',
119
+ id: message.id,
120
+ method: 'error',
121
+ params: { error: 'Unknown method' }
122
+ };
123
+ }
124
+ }
125
+
126
+ private async handleChat(
127
+ connectionId: string,
128
+ message: IDEMessage
129
+ ): Promise<IDEMessage> {
130
+ const { prompt, context } = message.params as {
131
+ prompt: string;
132
+ context?: CodeContext;
133
+ };
134
+
135
+ // Build context-aware prompt
136
+ let fullPrompt = prompt;
137
+ if (context?.selection?.text) {
138
+ fullPrompt = `Regarding this code:\n\`\`\`${context.language}\n${context.selection.text}\n\`\`\`\n\n${prompt}`;
139
+ }
140
+
141
+ // Run agent
142
+ const response = await this.runAgent(fullPrompt, context);
143
+
144
+ return {
145
+ type: 'response',
146
+ id: message.id,
147
+ method: 'chat',
148
+ params: { response }
149
+ };
150
+ }
151
+ }
152
+ ```
153
+
154
+ ### VS Code Extension
155
+
156
+ ```typescript
157
+ // vscode-extension/src/extension.ts
158
+ import * as vscode from 'vscode';
159
+
160
+ let connection: WebSocket | null = null;
161
+
162
+ export function activate(context: vscode.ExtensionContext) {
163
+ // Register chat panel
164
+ const provider = new MycodeViewProvider(context.extensionUri);
165
+ context.subscriptions.push(
166
+ vscode.window.registerWebviewViewProvider('mycode.chatView', provider)
167
+ );
168
+
169
+ // Register commands
170
+ context.subscriptions.push(
171
+ vscode.commands.registerCommand('mycode.explain', explainSelection),
172
+ vscode.commands.registerCommand('mycode.fix', fixSelection),
173
+ vscode.commands.registerCommand('mycode.chat', openChat),
174
+ vscode.commands.registerCommand('mycode.terminal', openTerminal)
175
+ );
176
+
177
+ // Connect to mycode server
178
+ connectToServer();
179
+ }
180
+
181
+ async function explainSelection() {
182
+ const editor = vscode.window.activeTextEditor;
183
+ if (!editor) return;
184
+
185
+ const selection = editor.document.getText(editor.selection);
186
+ const language = editor.document.languageId;
187
+
188
+ const response = await sendMessage('explain', {
189
+ code: selection,
190
+ language,
191
+ filePath: editor.document.uri.fsPath
192
+ });
193
+
194
+ showResponse(response);
195
+ }
196
+
197
+ async function fixSelection() {
198
+ const editor = vscode.window.activeTextEditor;
199
+ if (!editor) return;
200
+
201
+ const diagnostics = vscode.languages.getDiagnostics(editor.document.uri);
202
+ const selection = editor.document.getText(editor.selection);
203
+
204
+ const response = await sendMessage('fix', {
205
+ code: selection,
206
+ language: editor.document.languageId,
207
+ diagnostics: diagnostics.map(d => ({
208
+ message: d.message,
209
+ severity: d.severity,
210
+ range: d.range
211
+ }))
212
+ });
213
+
214
+ if (response.fix) {
215
+ await editor.edit(builder => {
216
+ builder.replace(editor.selection, response.fix);
217
+ });
218
+ }
219
+ }
220
+
221
+ class MycodeViewProvider implements vscode.WebviewViewProvider {
222
+ resolveWebviewView(webviewView: vscode.WebviewView) {
223
+ webviewView.webview.html = this.getHtml();
224
+
225
+ webviewView.webview.onDidReceiveMessage(async (message) => {
226
+ if (message.type === 'chat') {
227
+ const context = this.getEditorContext();
228
+ const response = await sendMessage('chat', {
229
+ prompt: message.prompt,
230
+ context
231
+ });
232
+ webviewView.webview.postMessage({ type: 'response', content: response });
233
+ }
234
+ });
235
+ }
236
+ }
237
+ ```
238
+
239
+ ### File Changes
240
+
241
+ | File | Action | Description |
242
+ |------|--------|-------------|
243
+ | `src/ide/types.ts` | Create | Type definitions |
244
+ | `src/ide/server.ts` | Create | WebSocket server |
245
+ | `src/ide/handlers/*.ts` | Create | Request handlers |
246
+ | `src/ide/index.ts` | Create | Module exports |
247
+ | `vscode-extension/` | Create | VS Code extension |
248
+ | `jetbrains-plugin/` | Create | JetBrains plugin |
249
+
250
+ ## User Experience
251
+
252
+ ### VS Code Sidebar
253
+ ```
254
+ ┌─ mycode ───────────────────────────────────┐
255
+ │ │
256
+ │ [Select code and ask questions] │
257
+ │ │
258
+ │ ┌────────────────────────────────────────┐ │
259
+ │ │ Type your question... │ │
260
+ │ └────────────────────────────────────────┘ │
261
+ │ │
262
+ │ Recent: │
263
+ │ • Explain this function │
264
+ │ • Fix the type error │
265
+ │ • Add error handling │
266
+ │ │
267
+ └────────────────────────────────────────────┘
268
+ ```
269
+
270
+ ### Context Menu
271
+ ```
272
+ Right-click on selected code:
273
+ ├─ mycode: Explain Selection
274
+ ├─ mycode: Fix Issues
275
+ ├─ mycode: Add Tests
276
+ ├─ mycode: Refactor
277
+ └─ mycode: Ask...
278
+ ```
279
+
280
+ ### Keyboard Shortcuts
281
+ ```
282
+ Ctrl+Shift+M Open mycode chat
283
+ Ctrl+Shift+E Explain selection
284
+ Ctrl+Shift+F Fix selection
285
+ ```
286
+
287
+ ## Alternatives Considered
288
+
289
+ ### Alternative 1: Language Server
290
+ Implement as LSP server.
291
+
292
+ **Pros**: Standard protocol
293
+ **Cons**: Limited to LSP capabilities
294
+ **Decision**: WebSocket for flexibility
295
+
296
+ ### Alternative 2: Editor Plugins Only
297
+ No server, direct API calls.
298
+
299
+ **Pros**: Simpler architecture
300
+ **Cons**: No session sharing
301
+ **Decision**: Server enables session persistence
302
+
303
+ ## Security Considerations
304
+
305
+ 1. Local-only connections
306
+ 2. Authentication tokens
307
+ 3. No remote code execution
308
+ 4. Sandboxed extension
309
+
310
+ ## Testing Strategy
311
+
312
+ 1. Unit tests for server
313
+ 2. Extension integration tests
314
+ 3. Manual UX testing
315
+
316
+ ## Migration Path
317
+
318
+ 1. **Phase 1**: VS Code extension
319
+ 2. **Phase 2**: JetBrains plugin
320
+ 3. **Phase 3**: Vim/Neovim plugin
321
+ 4. **Phase 4**: Emacs package
322
+ 5. **Phase 5**: LSP server mode
323
+
324
+ ## References
325
+
326
+ - [VS Code Extension API](https://code.visualstudio.com/api)
327
+ - [IntelliJ Plugin Development](https://plugins.jetbrains.com/docs/intellij/)
328
+ - [Language Server Protocol](https://microsoft.github.io/language-server-protocol/)
@@ -0,0 +1,221 @@
1
+ # Proposal: Enterprise Deployment
2
+
3
+ - **Proposal ID**: 0033
4
+ - **Author**: mycode team
5
+ - **Status**: Draft
6
+ - **Created**: 2025-01-15
7
+ - **Updated**: 2025-01-15
8
+
9
+ ## Summary
10
+
11
+ Implement enterprise deployment features including centralized configuration, SSO authentication, audit logging, and policy management for organizational deployments of mycode.
12
+
13
+ ## Motivation
14
+
15
+ Enterprise environments have unique requirements:
16
+
17
+ 1. **Centralized config**: Organization-wide settings
18
+ 2. **Authentication**: SSO/SAML integration
19
+ 3. **Audit logging**: Compliance requirements
20
+ 4. **Policy enforcement**: Usage restrictions
21
+ 5. **License management**: Seat-based licensing
22
+
23
+ Enterprise features enable organizational adoption.
24
+
25
+ ## Detailed Design
26
+
27
+ ### API Design
28
+
29
+ ```typescript
30
+ // src/enterprise/types.ts
31
+ interface EnterpriseConfig {
32
+ orgId: string;
33
+ configUrl?: string;
34
+ sso?: SSOConfig;
35
+ policies: PolicyConfig;
36
+ audit: AuditConfig;
37
+ features: FeatureFlags;
38
+ }
39
+
40
+ interface SSOConfig {
41
+ provider: 'saml' | 'oidc' | 'ldap';
42
+ issuer: string;
43
+ clientId: string;
44
+ redirectUri: string;
45
+ scopes: string[];
46
+ }
47
+
48
+ interface PolicyConfig {
49
+ allowedProviders: string[];
50
+ allowedModels: string[];
51
+ maxTokensPerDay?: number;
52
+ blockedTools?: string[];
53
+ requireApproval?: string[];
54
+ dataRetention: number; // Days
55
+ }
56
+
57
+ interface AuditConfig {
58
+ enabled: boolean;
59
+ destination: 'local' | 'remote' | 'siem';
60
+ endpoint?: string;
61
+ events: AuditEventType[];
62
+ }
63
+
64
+ type AuditEventType =
65
+ | 'session_start'
66
+ | 'session_end'
67
+ | 'tool_execution'
68
+ | 'message_sent'
69
+ | 'file_access'
70
+ | 'permission_granted';
71
+
72
+ interface AuditEvent {
73
+ timestamp: Date;
74
+ type: AuditEventType;
75
+ userId: string;
76
+ sessionId: string;
77
+ details: Record<string, unknown>;
78
+ ip?: string;
79
+ }
80
+ ```
81
+
82
+ ### Enterprise Manager
83
+
84
+ ```typescript
85
+ // src/enterprise/manager.ts
86
+ class EnterpriseManager {
87
+ private config: EnterpriseConfig | null = null;
88
+ private authenticated: boolean = false;
89
+
90
+ async initialize(): Promise<void> {
91
+ // Check for enterprise config
92
+ const configPath = process.env.MYCODE_ENTERPRISE_CONFIG;
93
+ if (!configPath) return;
94
+
95
+ this.config = await this.loadConfig(configPath);
96
+
97
+ if (this.config.sso) {
98
+ await this.authenticateSSO();
99
+ }
100
+ }
101
+
102
+ async enforcePolicy(action: string, context: unknown): Promise<boolean> {
103
+ if (!this.config) return true;
104
+
105
+ const policies = this.config.policies;
106
+
107
+ // Check provider restrictions
108
+ if (action === 'use_provider') {
109
+ const provider = context as string;
110
+ if (!policies.allowedProviders.includes(provider)) {
111
+ throw new Error(`Provider ${provider} not allowed by policy`);
112
+ }
113
+ }
114
+
115
+ // Check tool restrictions
116
+ if (action === 'execute_tool') {
117
+ const tool = (context as { tool: string }).tool;
118
+ if (policies.blockedTools?.includes(tool)) {
119
+ throw new Error(`Tool ${tool} blocked by policy`);
120
+ }
121
+ }
122
+
123
+ return true;
124
+ }
125
+
126
+ async logAudit(event: AuditEvent): Promise<void> {
127
+ if (!this.config?.audit.enabled) return;
128
+
129
+ switch (this.config.audit.destination) {
130
+ case 'local':
131
+ await this.logLocal(event);
132
+ break;
133
+ case 'remote':
134
+ await this.logRemote(event);
135
+ break;
136
+ case 'siem':
137
+ await this.logSIEM(event);
138
+ break;
139
+ }
140
+ }
141
+
142
+ private async authenticateSSO(): Promise<void> {
143
+ const sso = this.config!.sso!;
144
+
145
+ switch (sso.provider) {
146
+ case 'oidc':
147
+ await this.authenticateOIDC(sso);
148
+ break;
149
+ case 'saml':
150
+ await this.authenticateSAML(sso);
151
+ break;
152
+ case 'ldap':
153
+ await this.authenticateLDAP(sso);
154
+ break;
155
+ }
156
+ }
157
+ }
158
+
159
+ export const enterpriseManager = new EnterpriseManager();
160
+ ```
161
+
162
+ ### File Changes
163
+
164
+ | File | Action | Description |
165
+ |------|--------|-------------|
166
+ | `src/enterprise/types.ts` | Create | Type definitions |
167
+ | `src/enterprise/manager.ts` | Create | Enterprise management |
168
+ | `src/enterprise/auth/*.ts` | Create | SSO providers |
169
+ | `src/enterprise/audit.ts` | Create | Audit logging |
170
+ | `src/enterprise/policy.ts` | Create | Policy enforcement |
171
+
172
+ ## User Experience
173
+
174
+ ### Enterprise Login
175
+ ```
176
+ $ mycode
177
+
178
+ Enterprise Mode: Acme Corp
179
+ Authenticating via SSO...
180
+
181
+ Opening browser for authentication...
182
+ ✓ Authenticated as john.doe@acme.com
183
+
184
+ Session policies:
185
+ - Allowed providers: anthropic, openai
186
+ - Daily token limit: 100,000
187
+ - Audit logging: enabled
188
+ ```
189
+
190
+ ### Policy Violation
191
+ ```
192
+ Agent: [Bash: rm -rf /tmp/data]
193
+
194
+ ⚠️ Policy Violation
195
+
196
+ This operation is blocked by organization policy.
197
+ Reason: Bash tool restricted for security
198
+
199
+ Contact your administrator for access.
200
+ ```
201
+
202
+ ## Security Considerations
203
+
204
+ 1. Secure config transmission
205
+ 2. Token encryption
206
+ 3. Audit log integrity
207
+ 4. Policy tampering prevention
208
+ 5. Session isolation
209
+
210
+ ## Migration Path
211
+
212
+ 1. **Phase 1**: Centralized config
213
+ 2. **Phase 2**: SSO authentication
214
+ 3. **Phase 3**: Policy enforcement
215
+ 4. **Phase 4**: Audit logging
216
+ 5. **Phase 5**: SIEM integration
217
+
218
+ ## References
219
+
220
+ - [OIDC Specification](https://openid.net/connect/)
221
+ - [SAML 2.0](https://docs.oasis-open.org/security/saml/v2.0/)