cmdr-agent 1.0.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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +238 -0
  3. package/dist/bin/cmdr.d.ts +9 -0
  4. package/dist/bin/cmdr.d.ts.map +1 -0
  5. package/dist/bin/cmdr.js +49 -0
  6. package/dist/bin/cmdr.js.map +1 -0
  7. package/dist/src/cli/args.d.ts +19 -0
  8. package/dist/src/cli/args.d.ts.map +1 -0
  9. package/dist/src/cli/args.js +89 -0
  10. package/dist/src/cli/args.js.map +1 -0
  11. package/dist/src/cli/commands.d.ts +12 -0
  12. package/dist/src/cli/commands.d.ts.map +1 -0
  13. package/dist/src/cli/commands.js +400 -0
  14. package/dist/src/cli/commands.js.map +1 -0
  15. package/dist/src/cli/renderer.d.ts +8 -0
  16. package/dist/src/cli/renderer.d.ts.map +1 -0
  17. package/dist/src/cli/renderer.js +47 -0
  18. package/dist/src/cli/renderer.js.map +1 -0
  19. package/dist/src/cli/repl.d.ts +18 -0
  20. package/dist/src/cli/repl.d.ts.map +1 -0
  21. package/dist/src/cli/repl.js +751 -0
  22. package/dist/src/cli/repl.js.map +1 -0
  23. package/dist/src/cli/spinner.d.ts +16 -0
  24. package/dist/src/cli/spinner.d.ts.map +1 -0
  25. package/dist/src/cli/spinner.js +233 -0
  26. package/dist/src/cli/spinner.js.map +1 -0
  27. package/dist/src/cli/theme.d.ts +95 -0
  28. package/dist/src/cli/theme.d.ts.map +1 -0
  29. package/dist/src/cli/theme.js +178 -0
  30. package/dist/src/cli/theme.js.map +1 -0
  31. package/dist/src/communication/message-bus.d.ts +35 -0
  32. package/dist/src/communication/message-bus.d.ts.map +1 -0
  33. package/dist/src/communication/message-bus.js +60 -0
  34. package/dist/src/communication/message-bus.js.map +1 -0
  35. package/dist/src/communication/shared-memory.d.ts +19 -0
  36. package/dist/src/communication/shared-memory.d.ts.map +1 -0
  37. package/dist/src/communication/shared-memory.js +37 -0
  38. package/dist/src/communication/shared-memory.js.map +1 -0
  39. package/dist/src/communication/task-queue.d.ts +50 -0
  40. package/dist/src/communication/task-queue.d.ts.map +1 -0
  41. package/dist/src/communication/task-queue.js +158 -0
  42. package/dist/src/communication/task-queue.js.map +1 -0
  43. package/dist/src/config/config-loader.d.ts +23 -0
  44. package/dist/src/config/config-loader.d.ts.map +1 -0
  45. package/dist/src/config/config-loader.js +91 -0
  46. package/dist/src/config/config-loader.js.map +1 -0
  47. package/dist/src/config/defaults.d.ts +6 -0
  48. package/dist/src/config/defaults.d.ts.map +1 -0
  49. package/dist/src/config/defaults.js +21 -0
  50. package/dist/src/config/defaults.js.map +1 -0
  51. package/dist/src/config/schema.d.ts +135 -0
  52. package/dist/src/config/schema.d.ts.map +1 -0
  53. package/dist/src/config/schema.js +35 -0
  54. package/dist/src/config/schema.js.map +1 -0
  55. package/dist/src/config/telemetry.d.ts +41 -0
  56. package/dist/src/config/telemetry.d.ts.map +1 -0
  57. package/dist/src/config/telemetry.js +57 -0
  58. package/dist/src/config/telemetry.js.map +1 -0
  59. package/dist/src/core/agent-pool.d.ts +40 -0
  60. package/dist/src/core/agent-pool.d.ts.map +1 -0
  61. package/dist/src/core/agent-pool.js +66 -0
  62. package/dist/src/core/agent-pool.js.map +1 -0
  63. package/dist/src/core/agent-runner.d.ts +51 -0
  64. package/dist/src/core/agent-runner.d.ts.map +1 -0
  65. package/dist/src/core/agent-runner.js +251 -0
  66. package/dist/src/core/agent-runner.js.map +1 -0
  67. package/dist/src/core/agent.d.ts +34 -0
  68. package/dist/src/core/agent.d.ts.map +1 -0
  69. package/dist/src/core/agent.js +143 -0
  70. package/dist/src/core/agent.js.map +1 -0
  71. package/dist/src/core/intent.d.ts +33 -0
  72. package/dist/src/core/intent.d.ts.map +1 -0
  73. package/dist/src/core/intent.js +91 -0
  74. package/dist/src/core/intent.js.map +1 -0
  75. package/dist/src/core/orchestrator.d.ts +43 -0
  76. package/dist/src/core/orchestrator.d.ts.map +1 -0
  77. package/dist/src/core/orchestrator.js +115 -0
  78. package/dist/src/core/orchestrator.js.map +1 -0
  79. package/dist/src/core/permissions.d.ts +36 -0
  80. package/dist/src/core/permissions.d.ts.map +1 -0
  81. package/dist/src/core/permissions.js +129 -0
  82. package/dist/src/core/permissions.js.map +1 -0
  83. package/dist/src/core/presets.d.ts +12 -0
  84. package/dist/src/core/presets.d.ts.map +1 -0
  85. package/dist/src/core/presets.js +148 -0
  86. package/dist/src/core/presets.js.map +1 -0
  87. package/dist/src/core/team.d.ts +44 -0
  88. package/dist/src/core/team.d.ts.map +1 -0
  89. package/dist/src/core/team.js +156 -0
  90. package/dist/src/core/team.js.map +1 -0
  91. package/dist/src/core/types.d.ts +257 -0
  92. package/dist/src/core/types.d.ts.map +1 -0
  93. package/dist/src/core/types.js +7 -0
  94. package/dist/src/core/types.js.map +1 -0
  95. package/dist/src/index.d.ts +44 -0
  96. package/dist/src/index.d.ts.map +1 -0
  97. package/dist/src/index.js +45 -0
  98. package/dist/src/index.js.map +1 -0
  99. package/dist/src/llm/adapter.d.ts +5 -0
  100. package/dist/src/llm/adapter.d.ts.map +1 -0
  101. package/dist/src/llm/adapter.js +5 -0
  102. package/dist/src/llm/adapter.js.map +1 -0
  103. package/dist/src/llm/model-registry.d.ts +14 -0
  104. package/dist/src/llm/model-registry.d.ts.map +1 -0
  105. package/dist/src/llm/model-registry.js +30 -0
  106. package/dist/src/llm/model-registry.js.map +1 -0
  107. package/dist/src/llm/ollama.d.ts +26 -0
  108. package/dist/src/llm/ollama.d.ts.map +1 -0
  109. package/dist/src/llm/ollama.js +375 -0
  110. package/dist/src/llm/ollama.js.map +1 -0
  111. package/dist/src/llm/token-counter.d.ts +11 -0
  112. package/dist/src/llm/token-counter.d.ts.map +1 -0
  113. package/dist/src/llm/token-counter.js +35 -0
  114. package/dist/src/llm/token-counter.js.map +1 -0
  115. package/dist/src/plugins/mcp-client.d.ts +38 -0
  116. package/dist/src/plugins/mcp-client.d.ts.map +1 -0
  117. package/dist/src/plugins/mcp-client.js +113 -0
  118. package/dist/src/plugins/mcp-client.js.map +1 -0
  119. package/dist/src/plugins/plugin-manager.d.ts +37 -0
  120. package/dist/src/plugins/plugin-manager.d.ts.map +1 -0
  121. package/dist/src/plugins/plugin-manager.js +146 -0
  122. package/dist/src/plugins/plugin-manager.js.map +1 -0
  123. package/dist/src/scheduling/semaphore.d.ts +20 -0
  124. package/dist/src/scheduling/semaphore.d.ts.map +1 -0
  125. package/dist/src/scheduling/semaphore.js +52 -0
  126. package/dist/src/scheduling/semaphore.js.map +1 -0
  127. package/dist/src/scheduling/strategies.d.ts +39 -0
  128. package/dist/src/scheduling/strategies.d.ts.map +1 -0
  129. package/dist/src/scheduling/strategies.js +88 -0
  130. package/dist/src/scheduling/strategies.js.map +1 -0
  131. package/dist/src/session/compaction.d.ts +32 -0
  132. package/dist/src/session/compaction.d.ts.map +1 -0
  133. package/dist/src/session/compaction.js +172 -0
  134. package/dist/src/session/compaction.js.map +1 -0
  135. package/dist/src/session/cost-tracker.d.ts +41 -0
  136. package/dist/src/session/cost-tracker.d.ts.map +1 -0
  137. package/dist/src/session/cost-tracker.js +76 -0
  138. package/dist/src/session/cost-tracker.js.map +1 -0
  139. package/dist/src/session/project-context.d.ts +6 -0
  140. package/dist/src/session/project-context.d.ts.map +1 -0
  141. package/dist/src/session/project-context.js +147 -0
  142. package/dist/src/session/project-context.js.map +1 -0
  143. package/dist/src/session/prompt-builder.d.ts +11 -0
  144. package/dist/src/session/prompt-builder.d.ts.map +1 -0
  145. package/dist/src/session/prompt-builder.js +30 -0
  146. package/dist/src/session/prompt-builder.js.map +1 -0
  147. package/dist/src/session/session-manager.d.ts +32 -0
  148. package/dist/src/session/session-manager.d.ts.map +1 -0
  149. package/dist/src/session/session-manager.js +84 -0
  150. package/dist/src/session/session-manager.js.map +1 -0
  151. package/dist/src/session/session-persistence.d.ts +44 -0
  152. package/dist/src/session/session-persistence.d.ts.map +1 -0
  153. package/dist/src/session/session-persistence.js +150 -0
  154. package/dist/src/session/session-persistence.js.map +1 -0
  155. package/dist/src/session/undo-manager.d.ts +35 -0
  156. package/dist/src/session/undo-manager.d.ts.map +1 -0
  157. package/dist/src/session/undo-manager.js +79 -0
  158. package/dist/src/session/undo-manager.js.map +1 -0
  159. package/dist/src/tools/built-in/ask-user.d.ts +7 -0
  160. package/dist/src/tools/built-in/ask-user.d.ts.map +1 -0
  161. package/dist/src/tools/built-in/ask-user.js +28 -0
  162. package/dist/src/tools/built-in/ask-user.js.map +1 -0
  163. package/dist/src/tools/built-in/bash.d.ts +9 -0
  164. package/dist/src/tools/built-in/bash.d.ts.map +1 -0
  165. package/dist/src/tools/built-in/bash.js +67 -0
  166. package/dist/src/tools/built-in/bash.js.map +1 -0
  167. package/dist/src/tools/built-in/file-edit.d.ts +9 -0
  168. package/dist/src/tools/built-in/file-edit.d.ts.map +1 -0
  169. package/dist/src/tools/built-in/file-edit.js +39 -0
  170. package/dist/src/tools/built-in/file-edit.js.map +1 -0
  171. package/dist/src/tools/built-in/file-read.d.ts +9 -0
  172. package/dist/src/tools/built-in/file-read.d.ts.map +1 -0
  173. package/dist/src/tools/built-in/file-read.js +41 -0
  174. package/dist/src/tools/built-in/file-read.js.map +1 -0
  175. package/dist/src/tools/built-in/file-write.d.ts +8 -0
  176. package/dist/src/tools/built-in/file-write.d.ts.map +1 -0
  177. package/dist/src/tools/built-in/file-write.js +29 -0
  178. package/dist/src/tools/built-in/file-write.js.map +1 -0
  179. package/dist/src/tools/built-in/git-commit.d.ts +12 -0
  180. package/dist/src/tools/built-in/git-commit.d.ts.map +1 -0
  181. package/dist/src/tools/built-in/git-commit.js +96 -0
  182. package/dist/src/tools/built-in/git-commit.js.map +1 -0
  183. package/dist/src/tools/built-in/git-diff.d.ts +8 -0
  184. package/dist/src/tools/built-in/git-diff.d.ts.map +1 -0
  185. package/dist/src/tools/built-in/git-diff.js +43 -0
  186. package/dist/src/tools/built-in/git-diff.js.map +1 -0
  187. package/dist/src/tools/built-in/git-log.d.ts +8 -0
  188. package/dist/src/tools/built-in/git-log.d.ts.map +1 -0
  189. package/dist/src/tools/built-in/git-log.js +39 -0
  190. package/dist/src/tools/built-in/git-log.js.map +1 -0
  191. package/dist/src/tools/built-in/glob.d.ts +8 -0
  192. package/dist/src/tools/built-in/glob.d.ts.map +1 -0
  193. package/dist/src/tools/built-in/glob.js +60 -0
  194. package/dist/src/tools/built-in/glob.js.map +1 -0
  195. package/dist/src/tools/built-in/grep.d.ts +9 -0
  196. package/dist/src/tools/built-in/grep.d.ts.map +1 -0
  197. package/dist/src/tools/built-in/grep.js +115 -0
  198. package/dist/src/tools/built-in/grep.js.map +1 -0
  199. package/dist/src/tools/built-in/index.d.ts +21 -0
  200. package/dist/src/tools/built-in/index.d.ts.map +1 -0
  201. package/dist/src/tools/built-in/index.js +30 -0
  202. package/dist/src/tools/built-in/index.js.map +1 -0
  203. package/dist/src/tools/built-in/think.d.ts +7 -0
  204. package/dist/src/tools/built-in/think.d.ts.map +1 -0
  205. package/dist/src/tools/built-in/think.js +18 -0
  206. package/dist/src/tools/built-in/think.js.map +1 -0
  207. package/dist/src/tools/built-in/web-fetch.d.ts +11 -0
  208. package/dist/src/tools/built-in/web-fetch.d.ts.map +1 -0
  209. package/dist/src/tools/built-in/web-fetch.js +70 -0
  210. package/dist/src/tools/built-in/web-fetch.js.map +1 -0
  211. package/dist/src/tools/executor.d.ts +25 -0
  212. package/dist/src/tools/executor.d.ts.map +1 -0
  213. package/dist/src/tools/executor.js +61 -0
  214. package/dist/src/tools/executor.js.map +1 -0
  215. package/dist/src/tools/registry.d.ts +25 -0
  216. package/dist/src/tools/registry.d.ts.map +1 -0
  217. package/dist/src/tools/registry.js +135 -0
  218. package/dist/src/tools/registry.js.map +1 -0
  219. package/package.json +63 -0
@@ -0,0 +1,400 @@
1
+ /**
2
+ * Slash command registry and handlers.
3
+ */
4
+ import { PURPLE, GREEN, DIM, WHITE, commandText, dimText, YELLOW, RED, renderSessionStatus, renderContextWindow, SEPARATOR, renderInfo, } from './theme.js';
5
+ import { getDefaultContextLength } from '../llm/model-registry.js';
6
+ import { countTokens } from '../llm/token-counter.js';
7
+ import { listSessions } from '../session/session-persistence.js';
8
+ import { listTeamPresets } from '../core/presets.js';
9
+ import { writeFile, mkdir, stat } from 'fs/promises';
10
+ import { join } from 'path';
11
+ const commands = new Map();
12
+ function registerCommand(cmd) {
13
+ commands.set(cmd.name, cmd);
14
+ }
15
+ export function getCommand(name) {
16
+ return commands.get(name);
17
+ }
18
+ export function getAllCommands() {
19
+ return Array.from(commands.values());
20
+ }
21
+ export function isSlashCommand(input) {
22
+ return input.trim().startsWith('/');
23
+ }
24
+ export function parseSlashCommand(input) {
25
+ const trimmed = input.trim();
26
+ const spaceIndex = trimmed.indexOf(' ');
27
+ if (spaceIndex === -1) {
28
+ return { name: trimmed.slice(1), args: '' };
29
+ }
30
+ return {
31
+ name: trimmed.slice(1, spaceIndex),
32
+ args: trimmed.slice(spaceIndex + 1).trim(),
33
+ };
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Built-in slash commands
37
+ // ---------------------------------------------------------------------------
38
+ registerCommand({
39
+ name: 'help',
40
+ description: 'Show available commands',
41
+ execute: async () => {
42
+ const lines = [
43
+ '',
44
+ ` ${PURPLE.bold('cmdr')} ${DIM('— available commands')}`,
45
+ '',
46
+ ];
47
+ for (const cmd of commands.values()) {
48
+ lines.push(` ${commandText('/' + cmd.name.padEnd(12))} ${dimText(cmd.description)}`);
49
+ }
50
+ lines.push('');
51
+ lines.push(SEPARATOR);
52
+ return lines.join('\n');
53
+ },
54
+ });
55
+ registerCommand({
56
+ name: 'clear',
57
+ description: 'Clear conversation history',
58
+ execute: async (_args, context) => {
59
+ context.clearHistory();
60
+ return renderInfo('Conversation cleared.');
61
+ },
62
+ });
63
+ registerCommand({
64
+ name: 'model',
65
+ description: 'Switch model (e.g. /model qwen2.5-coder:32b)',
66
+ execute: async (args, context) => {
67
+ if (!args) {
68
+ return renderInfo('Usage: /model <model-name>');
69
+ }
70
+ context.switchModel(args);
71
+ return renderInfo(`Switched to model: ${GREEN(args)}`);
72
+ },
73
+ });
74
+ registerCommand({
75
+ name: 'models',
76
+ description: 'List available Ollama models',
77
+ execute: async (_args, context) => {
78
+ try {
79
+ const adapter = context.adapter;
80
+ if (!adapter?.listModels) {
81
+ return renderInfo('Model listing not supported for this adapter.');
82
+ }
83
+ const models = await adapter.listModels();
84
+ if (models.length === 0) {
85
+ return renderInfo('No models found. Run: ollama pull qwen2.5-coder:14b');
86
+ }
87
+ const lines = [
88
+ '',
89
+ ` ${PURPLE.bold('Available models')}`,
90
+ '',
91
+ ...models.map((m) => ` ${GREEN('•')} ${WHITE(m)}`),
92
+ '',
93
+ ];
94
+ return lines.join('\n');
95
+ }
96
+ catch {
97
+ return ` ${DIM('Could not connect to Ollama. Is it running?')}`;
98
+ }
99
+ },
100
+ });
101
+ registerCommand({
102
+ name: 'status',
103
+ description: 'Show session info: tokens, turns, model',
104
+ execute: async (_args, context) => {
105
+ const session = context.session;
106
+ const turns = Math.floor(session.messages.length / 2);
107
+ return '\n' + renderSessionStatus('current model', turns, { input: session.tokenCount, output: 0 }) + '\n';
108
+ },
109
+ });
110
+ registerCommand({
111
+ name: 'context',
112
+ description: 'Show context window usage and remaining tokens',
113
+ execute: async (_args, context) => {
114
+ const session = context.session;
115
+ const model = context.model;
116
+ const maxTokens = session.maxContextTokens || getDefaultContextLength(model);
117
+ // Estimate system prompt tokens (the prompt builder output)
118
+ // We approximate from the first system-like content or fixed estimate
119
+ const systemPromptTokens = countTokens(context.session.projectContext.rootDir) + 500;
120
+ const conversationTokens = session.tokenCount;
121
+ const usedTokens = systemPromptTokens + conversationTokens;
122
+ const apiTokens = context.agentTokenUsage;
123
+ const turns = Math.floor(session.messages.length / 2);
124
+ return renderContextWindow({
125
+ model,
126
+ usedTokens,
127
+ maxTokens,
128
+ inputTokens: apiTokens.input_tokens,
129
+ outputTokens: apiTokens.output_tokens,
130
+ systemPromptTokens,
131
+ conversationTokens,
132
+ turns,
133
+ messageCount: session.messages.length,
134
+ });
135
+ },
136
+ });
137
+ registerCommand({
138
+ name: 'init',
139
+ description: 'Create CMDR.md and .cmdr/ in current project',
140
+ execute: async (_args, context) => {
141
+ const root = context.session.projectContext.rootDir;
142
+ const cmdrMdPath = join(root, 'CMDR.md');
143
+ const cmdrDir = join(root, '.cmdr');
144
+ let created = [];
145
+ // Create .cmdr/ directory
146
+ try {
147
+ await stat(cmdrDir);
148
+ }
149
+ catch {
150
+ await mkdir(cmdrDir, { recursive: true });
151
+ created.push('.cmdr/');
152
+ }
153
+ // Create CMDR.md template
154
+ try {
155
+ await stat(cmdrMdPath);
156
+ }
157
+ catch {
158
+ const template = `# CMDR Instructions
159
+
160
+ <!-- cmdr reads this file on every session start. Add project-specific rules here. -->
161
+
162
+ ## Project Overview
163
+ <!-- Describe what this project does -->
164
+
165
+ ## Code Style
166
+ <!-- e.g., "Use bun instead of npm", "Prefer functional style", "Always add JSDoc comments" -->
167
+
168
+ ## Testing
169
+ <!-- e.g., "Run \`vitest\` after every change", "Tests are in __tests__/ directories" -->
170
+
171
+ ## Rules
172
+ <!-- e.g., "Never modify files in /core without asking first", "Always run linting before committing" -->
173
+ `;
174
+ await writeFile(cmdrMdPath, template, 'utf-8');
175
+ created.push('CMDR.md');
176
+ }
177
+ if (created.length === 0) {
178
+ return renderInfo('CMDR.md and .cmdr/ already exist.');
179
+ }
180
+ return renderInfo(`Created: ${created.join(', ')}`);
181
+ },
182
+ });
183
+ registerCommand({
184
+ name: 'compact',
185
+ description: 'Manually trigger history compaction',
186
+ execute: async () => {
187
+ // This will be handled by the REPL directly
188
+ return '__COMPACT__';
189
+ },
190
+ });
191
+ registerCommand({
192
+ name: 'diff',
193
+ description: 'Show git diff of changes this session',
194
+ execute: async () => {
195
+ // Handled by REPL which has access to tools
196
+ return '__DIFF__';
197
+ },
198
+ });
199
+ registerCommand({
200
+ name: 'sessions',
201
+ description: 'List saved sessions (resume with --resume <id>)',
202
+ execute: async () => {
203
+ const sessions = await listSessions();
204
+ if (sessions.length === 0) {
205
+ return renderInfo('No saved sessions.');
206
+ }
207
+ const lines = [
208
+ '',
209
+ ` ${PURPLE.bold('Saved sessions')}`,
210
+ '',
211
+ ];
212
+ for (const s of sessions.slice(0, 10)) {
213
+ const date = new Date(s.lastActivity);
214
+ const timeStr = date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
215
+ const dir = s.projectRoot.split('/').pop() || s.projectRoot;
216
+ lines.push(` ${GREEN('•')} ${DIM(s.id.slice(0, 20))} ${WHITE(dir)} ${DIM(s.model)} ${DIM(timeStr)} ${DIM(`${s.messageCount} msgs`)}`);
217
+ }
218
+ lines.push('');
219
+ lines.push(` ${DIM('Resume with: cmdr --resume <session-id>')}`);
220
+ lines.push('');
221
+ return lines.join('\n');
222
+ },
223
+ });
224
+ registerCommand({
225
+ name: 'permissions',
226
+ description: 'View or change permission mode (normal/yolo/strict)',
227
+ execute: async (args, context) => {
228
+ const pm = context.permissionManager;
229
+ if (!pm) {
230
+ return renderInfo('Permission manager not available.');
231
+ }
232
+ if (!args) {
233
+ const mode = pm.getMode();
234
+ const modeColor = mode === 'yolo' ? YELLOW : mode === 'strict' ? RED : GREEN;
235
+ const lines = [
236
+ '',
237
+ ` ${PURPLE.bold('Permissions')}`,
238
+ '',
239
+ ` ${DIM('Current mode:')} ${modeColor(mode)}`,
240
+ '',
241
+ ` ${DIM('Modes:')}`,
242
+ ` ${GREEN('normal')} ${DIM('— read-only tools auto-approved, write/bash require confirmation')}`,
243
+ ` ${YELLOW('yolo')} ${DIM('— all tools auto-approved (dangerous)')}`,
244
+ ` ${RED('strict')} ${DIM('— all tools require approval')}`,
245
+ '',
246
+ ` ${DIM('Usage: /permissions <mode>')}`,
247
+ '',
248
+ ];
249
+ return lines.join('\n');
250
+ }
251
+ const newMode = args.trim().toLowerCase();
252
+ if (newMode !== 'normal' && newMode !== 'yolo' && newMode !== 'strict') {
253
+ return renderInfo(`Invalid mode: ${args}. Use normal, yolo, or strict.`);
254
+ }
255
+ pm.setMode(newMode);
256
+ const modeColor = newMode === 'yolo' ? YELLOW : newMode === 'strict' ? RED : GREEN;
257
+ return renderInfo(`Permission mode set to ${modeColor(newMode)}`);
258
+ },
259
+ });
260
+ registerCommand({
261
+ name: 'session',
262
+ description: 'Session management: /session save, /session resume <id>',
263
+ execute: async (args, context) => {
264
+ const sub = args.trim().split(/\s+/);
265
+ const action = sub[0]?.toLowerCase();
266
+ if (!action || action === 'list') {
267
+ // Default: list sessions
268
+ const sessions = await listSessions();
269
+ if (sessions.length === 0) {
270
+ return renderInfo('No saved sessions.');
271
+ }
272
+ const lines = [
273
+ '',
274
+ ` ${PURPLE.bold('Saved sessions')}`,
275
+ '',
276
+ ];
277
+ for (const s of sessions.slice(0, 10)) {
278
+ const date = new Date(s.lastActivity);
279
+ const timeStr = date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
280
+ const dir = s.projectRoot.split('/').pop() || s.projectRoot;
281
+ const summaryText = s.summary ? ` ${DIM(s.summary.slice(0, 40))}` : '';
282
+ lines.push(` ${GREEN('•')} ${DIM(s.id.slice(0, 20))} ${WHITE(dir)} ${DIM(s.model)} ${DIM(timeStr)} ${DIM(`${s.messageCount} msgs`)}${summaryText}`);
283
+ }
284
+ lines.push('');
285
+ return lines.join('\n');
286
+ }
287
+ if (action === 'save') {
288
+ return '__SESSION_SAVE__';
289
+ }
290
+ if (action === 'resume') {
291
+ const sessionId = sub[1];
292
+ if (!sessionId) {
293
+ return renderInfo('Usage: /session resume <session-id>');
294
+ }
295
+ return `__SESSION_RESUME__:${sessionId}`;
296
+ }
297
+ return renderInfo('Usage: /session [save|resume <id>|list]');
298
+ },
299
+ });
300
+ registerCommand({
301
+ name: 'team',
302
+ description: 'Switch to team mode (review, fullstack, security)',
303
+ execute: async (args) => {
304
+ if (!args) {
305
+ const presets = listTeamPresets();
306
+ const lines = [
307
+ '',
308
+ ` ${PURPLE.bold('Team presets')}`,
309
+ '',
310
+ ...presets.map(p => ` ${GREEN('•')} ${WHITE(p)}`),
311
+ '',
312
+ ` ${DIM('Usage: /team <preset> or cmdr --team <preset>')}`,
313
+ '',
314
+ ];
315
+ return lines.join('\n');
316
+ }
317
+ return `__TEAM_SWITCH__:${args.trim()}`;
318
+ },
319
+ });
320
+ registerCommand({
321
+ name: 'agents',
322
+ description: 'Show active agents and their status',
323
+ execute: async () => {
324
+ return '__AGENTS_STATUS__';
325
+ },
326
+ });
327
+ registerCommand({
328
+ name: 'tasks',
329
+ description: 'Show task queue status',
330
+ execute: async () => {
331
+ return '__TASKS_STATUS__';
332
+ },
333
+ });
334
+ registerCommand({
335
+ name: 'config',
336
+ description: 'View or set configuration',
337
+ execute: async (args, context) => {
338
+ if (!args) {
339
+ const lines = [
340
+ '',
341
+ ` ${PURPLE.bold('Configuration')}`,
342
+ '',
343
+ ` ${DIM('Model:')} ${WHITE(context.model)}`,
344
+ ` ${DIM('Ollama:')} ${WHITE(context.ollamaUrl)}`,
345
+ '',
346
+ ` ${DIM('Config files:')}`,
347
+ ` ${DIM(' User:')} ~/.cmdr/config.toml`,
348
+ ` ${DIM(' Project:')} .cmdr.toml`,
349
+ '',
350
+ ` ${DIM('Env vars: CMDR_MODEL, CMDR_OLLAMA_URL, CMDR_PROVIDER')}`,
351
+ '',
352
+ ];
353
+ return lines.join('\n');
354
+ }
355
+ return renderInfo(`Config editing not yet supported. Edit ~/.cmdr/config.toml directly.`);
356
+ },
357
+ });
358
+ registerCommand({
359
+ name: 'plugin',
360
+ description: 'Manage plugins: /plugin list',
361
+ execute: async (args) => {
362
+ return `__PLUGIN__:${args || 'list'}`;
363
+ },
364
+ });
365
+ registerCommand({
366
+ name: 'mcp',
367
+ description: 'Manage MCP servers: /mcp list, /mcp connect <url>',
368
+ execute: async (args) => {
369
+ return `__MCP__:${args || 'list'}`;
370
+ },
371
+ });
372
+ registerCommand({
373
+ name: 'cost',
374
+ description: 'Show token usage breakdown for this session',
375
+ execute: async () => {
376
+ return '__COST__';
377
+ },
378
+ });
379
+ registerCommand({
380
+ name: 'undo',
381
+ description: 'Revert the last file change made by the agent',
382
+ execute: async () => {
383
+ return '__UNDO__';
384
+ },
385
+ });
386
+ registerCommand({
387
+ name: 'quit',
388
+ description: 'Exit cmdr',
389
+ execute: async () => {
390
+ return '__QUIT__';
391
+ },
392
+ });
393
+ registerCommand({
394
+ name: 'exit',
395
+ description: 'Exit cmdr',
396
+ execute: async () => {
397
+ return '__QUIT__';
398
+ },
399
+ });
400
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/cli/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Markdown renderer for terminal output.
3
+ *
4
+ * Uses marked + marked-terminal for rich terminal rendering with
5
+ * cmdr's AMOLED black + green/purple theme.
6
+ */
7
+ export declare function renderMarkdown(text: string): string;
8
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/cli/renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwCH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMnD"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Markdown renderer for terminal output.
3
+ *
4
+ * Uses marked + marked-terminal for rich terminal rendering with
5
+ * cmdr's AMOLED black + green/purple theme.
6
+ */
7
+ import { Marked } from 'marked';
8
+ import { markedTerminal } from 'marked-terminal';
9
+ import chalk from 'chalk';
10
+ // AMOLED green/purple palette for marked-terminal
11
+ const green = chalk.hex('#00FF41');
12
+ const purple = chalk.hex('#BF40FF');
13
+ const cyan = chalk.hex('#00FFFF');
14
+ const white = chalk.hex('#E0E0E0');
15
+ const dim = chalk.hex('#555555');
16
+ const marked = new Marked();
17
+ marked.use(markedTerminal({
18
+ code: chalk.hex('#00FF41'),
19
+ codespan: chalk.hex('#00FF41'),
20
+ strong: chalk.hex('#FFFFFF').bold,
21
+ em: chalk.hex('#BF40FF').italic,
22
+ heading: chalk.hex('#BF40FF').bold,
23
+ firstHeading: chalk.hex('#BF40FF').underline.bold,
24
+ href: chalk.hex('#00FFFF').underline,
25
+ link: chalk.hex('#00FFFF'),
26
+ listitem: chalk.reset,
27
+ blockquote: chalk.hex('#555555').italic,
28
+ hr: chalk.hex('#00BB30'),
29
+ paragraph: chalk.reset,
30
+ table: chalk.reset,
31
+ text: chalk.hex('#E0E0E0'),
32
+ unescape: true,
33
+ emoji: false,
34
+ showSectionPrefix: false,
35
+ reflowText: false,
36
+ width: 80,
37
+ tab: 2,
38
+ }));
39
+ export function renderMarkdown(text) {
40
+ try {
41
+ return marked.parse(text);
42
+ }
43
+ catch {
44
+ return text;
45
+ }
46
+ }
47
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/cli/renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,kDAAkD;AAClD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAClC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACnC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACjC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAClC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAEhC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;AAE3B,MAAM,CAAC,GAAG,CACR,cAAc,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC9B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI;IACjC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM;IAC/B,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI;IAClC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI;IACjD,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS;IACpC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,KAAK;IACrB,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM;IACvC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IACxB,SAAS,EAAE,KAAK,CAAC,KAAK;IACtB,KAAK,EAAE,KAAK,CAAC,KAAK;IAClB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,KAAK;IACZ,iBAAiB,EAAE,KAAK;IACxB,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,CAAC;CACP,CAAC,CACH,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAW,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Interactive REPL — the primary cmdr interface.
3
+ *
4
+ * Streaming output, tool execution display, markdown rendering,
5
+ * AMOLED black + green/purple aesthetic.
6
+ */
7
+ export interface ReplOptions {
8
+ model: string;
9
+ ollamaUrl: string;
10
+ initialPrompt?: string;
11
+ dangerouslySkipPermissions?: boolean;
12
+ resume?: string;
13
+ continue?: boolean;
14
+ verbose?: boolean;
15
+ team?: string;
16
+ }
17
+ export declare function startRepl(options: ReplOptions): Promise<void>;
18
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/cli/repl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,0BAA0B,CAAC,EAAE,OAAO,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0enE"}