@calliopelabs/cli 0.4.6 → 0.6.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 (112) hide show
  1. package/README.md +258 -105
  2. package/dist/branching.d.ts +56 -0
  3. package/dist/branching.d.ts.map +1 -0
  4. package/dist/branching.js +211 -0
  5. package/dist/branching.js.map +1 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +235 -2
  8. package/dist/cli.js.map +1 -1
  9. package/dist/completion.d.ts +75 -0
  10. package/dist/completion.d.ts.map +1 -0
  11. package/dist/completion.js +234 -0
  12. package/dist/completion.js.map +1 -0
  13. package/dist/config.d.ts +36 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +90 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/diff.d.ts +73 -0
  18. package/dist/diff.d.ts.map +1 -0
  19. package/dist/diff.js +317 -0
  20. package/dist/diff.js.map +1 -0
  21. package/dist/errors.d.ts +41 -0
  22. package/dist/errors.d.ts.map +1 -0
  23. package/dist/errors.js +199 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/file-watcher.d.ts +91 -0
  26. package/dist/file-watcher.d.ts.map +1 -0
  27. package/dist/file-watcher.js +269 -0
  28. package/dist/file-watcher.js.map +1 -0
  29. package/dist/files.d.ts +49 -0
  30. package/dist/files.d.ts.map +1 -0
  31. package/dist/files.js +191 -0
  32. package/dist/files.js.map +1 -0
  33. package/dist/fuzzy-search.d.ts +75 -0
  34. package/dist/fuzzy-search.d.ts.map +1 -0
  35. package/dist/fuzzy-search.js +240 -0
  36. package/dist/fuzzy-search.js.map +1 -0
  37. package/dist/hooks.d.ts +79 -0
  38. package/dist/hooks.d.ts.map +1 -0
  39. package/dist/hooks.js +271 -0
  40. package/dist/hooks.js.map +1 -0
  41. package/dist/keyboard.d.ts +57 -0
  42. package/dist/keyboard.d.ts.map +1 -0
  43. package/dist/keyboard.js +265 -0
  44. package/dist/keyboard.js.map +1 -0
  45. package/dist/markdown.d.ts +14 -0
  46. package/dist/markdown.d.ts.map +1 -0
  47. package/dist/markdown.js +248 -0
  48. package/dist/markdown.js.map +1 -0
  49. package/dist/mcp.d.ts +90 -0
  50. package/dist/mcp.d.ts.map +1 -0
  51. package/dist/mcp.js +290 -0
  52. package/dist/mcp.js.map +1 -0
  53. package/dist/memory.d.ts +104 -0
  54. package/dist/memory.d.ts.map +1 -0
  55. package/dist/memory.js +394 -0
  56. package/dist/memory.js.map +1 -0
  57. package/dist/model-router.d.ts +67 -0
  58. package/dist/model-router.d.ts.map +1 -0
  59. package/dist/model-router.js +289 -0
  60. package/dist/model-router.js.map +1 -0
  61. package/dist/parallel-tools.d.ts +51 -0
  62. package/dist/parallel-tools.d.ts.map +1 -0
  63. package/dist/parallel-tools.js +278 -0
  64. package/dist/parallel-tools.js.map +1 -0
  65. package/dist/project-config.d.ts +84 -0
  66. package/dist/project-config.d.ts.map +1 -0
  67. package/dist/project-config.js +250 -0
  68. package/dist/project-config.js.map +1 -0
  69. package/dist/providers.d.ts +10 -2
  70. package/dist/providers.d.ts.map +1 -1
  71. package/dist/providers.js +240 -38
  72. package/dist/providers.js.map +1 -1
  73. package/dist/risk.d.ts +31 -0
  74. package/dist/risk.d.ts.map +1 -0
  75. package/dist/risk.js +367 -0
  76. package/dist/risk.js.map +1 -0
  77. package/dist/sandbox.d.ts +49 -0
  78. package/dist/sandbox.d.ts.map +1 -0
  79. package/dist/sandbox.js +347 -0
  80. package/dist/sandbox.js.map +1 -0
  81. package/dist/skills.d.ts +71 -0
  82. package/dist/skills.d.ts.map +1 -0
  83. package/dist/skills.js +383 -0
  84. package/dist/skills.js.map +1 -0
  85. package/dist/storage.d.ts +139 -0
  86. package/dist/storage.d.ts.map +1 -0
  87. package/dist/storage.js +508 -0
  88. package/dist/storage.js.map +1 -0
  89. package/dist/streaming.d.ts +94 -0
  90. package/dist/streaming.d.ts.map +1 -0
  91. package/dist/streaming.js +305 -0
  92. package/dist/streaming.js.map +1 -0
  93. package/dist/summarization.d.ts +76 -0
  94. package/dist/summarization.d.ts.map +1 -0
  95. package/dist/summarization.js +242 -0
  96. package/dist/summarization.js.map +1 -0
  97. package/dist/themes.d.ts +110 -0
  98. package/dist/themes.d.ts.map +1 -0
  99. package/dist/themes.js +329 -0
  100. package/dist/themes.js.map +1 -0
  101. package/dist/tools.d.ts.map +1 -1
  102. package/dist/tools.js +335 -1
  103. package/dist/tools.js.map +1 -1
  104. package/dist/types.d.ts +56 -1
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/types.js +105 -0
  107. package/dist/types.js.map +1 -1
  108. package/dist/ui-cli.d.ts +9 -2
  109. package/dist/ui-cli.d.ts.map +1 -1
  110. package/dist/ui-cli.js +1315 -220
  111. package/dist/ui-cli.js.map +1 -1
  112. package/package.json +1 -1
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Calliope CLI - Keyboard Shortcuts
3
+ *
4
+ * Vim-like keybindings and keyboard shortcuts.
5
+ */
6
+ // ============================================================================
7
+ // Default Keybindings
8
+ // ============================================================================
9
+ const DEFAULT_BINDINGS = [
10
+ // Standard bindings
11
+ { key: 'return', action: 'submit', description: 'Submit input' },
12
+ { key: 'c', ctrl: true, action: 'cancel', description: 'Cancel' },
13
+ { key: 'l', ctrl: true, action: 'clear', description: 'Clear screen' },
14
+ { key: 'up', action: 'historyUp', description: 'Previous history' },
15
+ { key: 'down', action: 'historyDown', description: 'Next history' },
16
+ { key: 'tab', action: 'complete', description: 'Tab completion' },
17
+ { key: 'tab', shift: true, action: 'completePrev', description: 'Previous completion' },
18
+ // Cursor movement
19
+ { key: 'left', action: 'cursorLeft' },
20
+ { key: 'right', action: 'cursorRight' },
21
+ { key: 'left', ctrl: true, action: 'cursorWordLeft' },
22
+ { key: 'right', ctrl: true, action: 'cursorWordRight' },
23
+ { key: 'a', ctrl: true, action: 'cursorHome' },
24
+ { key: 'e', ctrl: true, action: 'cursorEnd' },
25
+ { key: 'home', action: 'cursorHome' },
26
+ { key: 'end', action: 'cursorEnd' },
27
+ // Editing
28
+ { key: 'backspace', action: 'deleteChar' },
29
+ { key: 'delete', action: 'deleteChar' },
30
+ { key: 'w', ctrl: true, action: 'deleteWord' },
31
+ { key: 'u', ctrl: true, action: 'deleteLine' },
32
+ { key: 'k', ctrl: true, action: 'deleteToEnd' },
33
+ // Clipboard
34
+ { key: 'v', ctrl: true, action: 'paste' },
35
+ { key: 'c', ctrl: true, shift: true, action: 'copy' },
36
+ // Undo/Redo
37
+ { key: 'z', ctrl: true, action: 'undo' },
38
+ { key: 'z', ctrl: true, shift: true, action: 'redo' },
39
+ { key: 'y', ctrl: true, action: 'redo' },
40
+ // Escape
41
+ { key: 'escape', action: 'escape' },
42
+ // Multi-line
43
+ { key: 'return', shift: true, action: 'newline' },
44
+ { key: 'return', alt: true, action: 'newline' },
45
+ ];
46
+ // ============================================================================
47
+ // Vim Keybindings
48
+ // ============================================================================
49
+ const VIM_NORMAL_BINDINGS = [
50
+ // Mode switching
51
+ { key: 'i', action: 'vimInsert', description: 'Insert mode' },
52
+ { key: 'a', action: 'vimAppend', description: 'Append mode' },
53
+ { key: 'A', action: 'vimAppend', description: 'Append at end' },
54
+ { key: 'I', action: 'vimInsert', description: 'Insert at start' },
55
+ // Movement
56
+ { key: 'h', action: 'cursorLeft' },
57
+ { key: 'j', action: 'historyDown' },
58
+ { key: 'k', action: 'historyUp' },
59
+ { key: 'l', action: 'cursorRight' },
60
+ { key: 'w', action: 'cursorWordRight' },
61
+ { key: 'b', action: 'cursorWordLeft' },
62
+ { key: '0', action: 'cursorHome' },
63
+ { key: '$', action: 'cursorEnd' },
64
+ { key: '^', action: 'cursorHome' },
65
+ // Editing
66
+ { key: 'x', action: 'deleteChar' },
67
+ { key: 'd', action: 'vimDelete' }, // Starts delete command
68
+ { key: 'c', action: 'vimChange' }, // Starts change command
69
+ { key: 'y', action: 'vimYank' }, // Starts yank command
70
+ { key: 'p', action: 'paste' },
71
+ { key: 'u', action: 'undo' },
72
+ { key: 'r', ctrl: true, action: 'redo' },
73
+ // Submit
74
+ { key: 'return', action: 'submit' },
75
+ ];
76
+ const VIM_INSERT_BINDINGS = [
77
+ { key: 'escape', action: 'vimNormal' },
78
+ { key: 'c', ctrl: true, action: 'vimNormal' }, // Also exit with Ctrl+C
79
+ { key: '[', ctrl: true, action: 'vimNormal' }, // Also exit with Ctrl+[
80
+ ];
81
+ // ============================================================================
82
+ // Key Matching
83
+ // ============================================================================
84
+ /**
85
+ * Check if key event matches a binding
86
+ */
87
+ export function matchBinding(key, ctrl, alt, shift, bindings) {
88
+ for (const binding of bindings) {
89
+ if (binding.key.toLowerCase() === key.toLowerCase() &&
90
+ (binding.ctrl || false) === ctrl &&
91
+ (binding.alt || false) === alt &&
92
+ (binding.shift || false) === shift) {
93
+ return binding;
94
+ }
95
+ }
96
+ return null;
97
+ }
98
+ /**
99
+ * Get action for key event
100
+ */
101
+ export function getKeyAction(key, ctrl, alt, shift, state) {
102
+ // Check vim bindings first if enabled
103
+ if (state.vimEnabled) {
104
+ if (state.vimMode === 'normal') {
105
+ const vimBinding = matchBinding(key, ctrl, alt, shift, VIM_NORMAL_BINDINGS);
106
+ if (vimBinding)
107
+ return vimBinding.action;
108
+ }
109
+ else if (state.vimMode === 'insert') {
110
+ const insertBinding = matchBinding(key, ctrl, alt, shift, VIM_INSERT_BINDINGS);
111
+ if (insertBinding)
112
+ return insertBinding.action;
113
+ }
114
+ }
115
+ // Check default bindings
116
+ const binding = matchBinding(key, ctrl, alt, shift, DEFAULT_BINDINGS);
117
+ if (binding)
118
+ return binding.action;
119
+ return 'none';
120
+ }
121
+ // ============================================================================
122
+ // Keyboard State Management
123
+ // ============================================================================
124
+ /**
125
+ * Create initial keyboard state
126
+ */
127
+ export function createKeyboardState(vimEnabled = false) {
128
+ return {
129
+ vimMode: vimEnabled ? 'normal' : 'insert',
130
+ vimEnabled,
131
+ pendingKeys: '',
132
+ };
133
+ }
134
+ /**
135
+ * Update state after action
136
+ */
137
+ export function updateState(state, action) {
138
+ const newState = { ...state, lastAction: action };
139
+ switch (action) {
140
+ case 'vimNormal':
141
+ return { ...newState, vimMode: 'normal', pendingKeys: '' };
142
+ case 'vimInsert':
143
+ case 'vimAppend':
144
+ return { ...newState, vimMode: 'insert', pendingKeys: '' };
145
+ case 'escape':
146
+ if (state.vimEnabled && state.vimMode !== 'normal') {
147
+ return { ...newState, vimMode: 'normal', pendingKeys: '' };
148
+ }
149
+ return { ...newState, pendingKeys: '' };
150
+ default:
151
+ return newState;
152
+ }
153
+ }
154
+ /**
155
+ * Toggle vim mode
156
+ */
157
+ export function toggleVimMode(state) {
158
+ return {
159
+ ...state,
160
+ vimEnabled: !state.vimEnabled,
161
+ vimMode: !state.vimEnabled ? 'normal' : 'insert',
162
+ pendingKeys: '',
163
+ };
164
+ }
165
+ // ============================================================================
166
+ // Vim Command Processing
167
+ // ============================================================================
168
+ /**
169
+ * Process vim command key sequence
170
+ */
171
+ export function processVimCommand(state, key) {
172
+ if (!state.vimEnabled || state.vimMode !== 'normal') {
173
+ return { state, actions: [] };
174
+ }
175
+ const pending = state.pendingKeys + key;
176
+ const actions = [];
177
+ // Two-character commands
178
+ if (pending === 'dd') {
179
+ actions.push('deleteLine');
180
+ return { state: { ...state, pendingKeys: '' }, actions };
181
+ }
182
+ if (pending === 'cc') {
183
+ actions.push('deleteLine', 'vimInsert');
184
+ return { state: { ...state, pendingKeys: '', vimMode: 'insert' }, actions };
185
+ }
186
+ if (pending === 'yy') {
187
+ actions.push('copy');
188
+ return { state: { ...state, pendingKeys: '' }, actions };
189
+ }
190
+ if (pending === 'dw') {
191
+ actions.push('deleteWord');
192
+ return { state: { ...state, pendingKeys: '' }, actions };
193
+ }
194
+ if (pending === 'cw') {
195
+ actions.push('deleteWord', 'vimInsert');
196
+ return { state: { ...state, pendingKeys: '', vimMode: 'insert' }, actions };
197
+ }
198
+ if (pending === 'd$') {
199
+ actions.push('deleteToEnd');
200
+ return { state: { ...state, pendingKeys: '' }, actions };
201
+ }
202
+ if (pending === 'c$') {
203
+ actions.push('deleteToEnd', 'vimInsert');
204
+ return { state: { ...state, pendingKeys: '', vimMode: 'insert' }, actions };
205
+ }
206
+ // Pending commands (d, c, y)
207
+ if (pending === 'd' || pending === 'c' || pending === 'y') {
208
+ return { state: { ...state, pendingKeys: pending }, actions: [] };
209
+ }
210
+ // Number prefix (for repeat counts) - simplified
211
+ if (/^\d+$/.test(pending) && pending.length < 3) {
212
+ return { state: { ...state, pendingKeys: pending }, actions: [] };
213
+ }
214
+ // Unknown sequence, reset
215
+ return { state: { ...state, pendingKeys: '' }, actions: [] };
216
+ }
217
+ // ============================================================================
218
+ // Keybinding Display
219
+ // ============================================================================
220
+ /**
221
+ * Format keybinding for display
222
+ */
223
+ export function formatBinding(binding) {
224
+ const parts = [];
225
+ if (binding.ctrl)
226
+ parts.push('Ctrl');
227
+ if (binding.alt)
228
+ parts.push('Alt');
229
+ if (binding.shift)
230
+ parts.push('Shift');
231
+ parts.push(binding.key.charAt(0).toUpperCase() + binding.key.slice(1));
232
+ return parts.join('+');
233
+ }
234
+ /**
235
+ * Get all keybindings for display
236
+ */
237
+ export function getBindingsHelp(vimEnabled) {
238
+ const lines = ['Keyboard Shortcuts:', ''];
239
+ const bindings = vimEnabled
240
+ ? [...DEFAULT_BINDINGS, ...VIM_NORMAL_BINDINGS]
241
+ : DEFAULT_BINDINGS;
242
+ const groups = {
243
+ 'Navigation': bindings.filter(b => ['historyUp', 'historyDown', 'cursorLeft', 'cursorRight',
244
+ 'cursorWordLeft', 'cursorWordRight', 'cursorHome', 'cursorEnd'].includes(b.action)),
245
+ 'Editing': bindings.filter(b => ['deleteChar', 'deleteWord', 'deleteLine', 'deleteToEnd',
246
+ 'paste', 'copy', 'undo', 'redo'].includes(b.action)),
247
+ 'Actions': bindings.filter(b => ['submit', 'cancel', 'clear', 'complete', 'escape'].includes(b.action)),
248
+ };
249
+ for (const [group, groupBindings] of Object.entries(groups)) {
250
+ if (groupBindings.length === 0)
251
+ continue;
252
+ lines.push(`${group}:`);
253
+ for (const binding of groupBindings) {
254
+ if (binding.description) {
255
+ lines.push(` ${formatBinding(binding).padEnd(15)} ${binding.description}`);
256
+ }
257
+ }
258
+ lines.push('');
259
+ }
260
+ if (vimEnabled) {
261
+ lines.push('Vim Mode: Enabled (press i for insert, Esc for normal)');
262
+ }
263
+ return lines.join('\n');
264
+ }
265
+ //# sourceMappingURL=keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Calliope CLI - Markdown Rendering
3
+ *
4
+ * Simple markdown to ANSI terminal rendering with syntax highlighting.
5
+ */
6
+ /**
7
+ * Render markdown to ANSI terminal output
8
+ */
9
+ export declare function renderMarkdown(text: string): string;
10
+ /**
11
+ * Strip markdown formatting (for plain text output)
12
+ */
13
+ export declare function stripMarkdown(text: string): string;
14
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0IH;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2GnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBlD"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Calliope CLI - Markdown Rendering
3
+ *
4
+ * Simple markdown to ANSI terminal rendering with syntax highlighting.
5
+ */
6
+ // ANSI color codes
7
+ const COLORS = {
8
+ reset: '\x1b[0m',
9
+ bold: '\x1b[1m',
10
+ dim: '\x1b[2m',
11
+ italic: '\x1b[3m',
12
+ underline: '\x1b[4m',
13
+ // Foreground colors
14
+ black: '\x1b[30m',
15
+ red: '\x1b[31m',
16
+ green: '\x1b[32m',
17
+ yellow: '\x1b[33m',
18
+ blue: '\x1b[34m',
19
+ magenta: '\x1b[35m',
20
+ cyan: '\x1b[36m',
21
+ white: '\x1b[37m',
22
+ gray: '\x1b[90m',
23
+ // Bright colors
24
+ brightRed: '\x1b[91m',
25
+ brightGreen: '\x1b[92m',
26
+ brightYellow: '\x1b[93m',
27
+ brightBlue: '\x1b[94m',
28
+ brightMagenta: '\x1b[95m',
29
+ brightCyan: '\x1b[96m',
30
+ // Background
31
+ bgGray: '\x1b[100m',
32
+ };
33
+ // Language-specific syntax patterns
34
+ const SYNTAX_PATTERNS = {
35
+ javascript: [
36
+ { pattern: /\b(const|let|var|function|return|if|else|for|while|class|import|export|from|async|await|try|catch|throw|new|this|typeof|instanceof)\b/g, color: 'magenta' },
37
+ { pattern: /\b(true|false|null|undefined|NaN|Infinity)\b/g, color: 'yellow' },
38
+ { pattern: /(["'`])(?:(?!\1)[^\\]|\\.)*\1/g, color: 'green' },
39
+ { pattern: /\/\/.*$/gm, color: 'gray' },
40
+ { pattern: /\/\*[\s\S]*?\*\//g, color: 'gray' },
41
+ { pattern: /\b\d+\.?\d*\b/g, color: 'cyan' },
42
+ { pattern: /[{}[\]();,]/g, color: 'white' },
43
+ ],
44
+ typescript: [
45
+ { pattern: /\b(const|let|var|function|return|if|else|for|while|class|import|export|from|async|await|try|catch|throw|new|this|typeof|instanceof|interface|type|enum|implements|extends|public|private|protected|readonly|as|is)\b/g, color: 'magenta' },
46
+ { pattern: /\b(true|false|null|undefined|NaN|Infinity)\b/g, color: 'yellow' },
47
+ { pattern: /:\s*(string|number|boolean|void|any|never|unknown|object)\b/g, color: 'cyan' },
48
+ { pattern: /(["'`])(?:(?!\1)[^\\]|\\.)*\1/g, color: 'green' },
49
+ { pattern: /\/\/.*$/gm, color: 'gray' },
50
+ { pattern: /\/\*[\s\S]*?\*\//g, color: 'gray' },
51
+ { pattern: /\b\d+\.?\d*\b/g, color: 'cyan' },
52
+ ],
53
+ python: [
54
+ { pattern: /\b(def|class|return|if|elif|else|for|while|import|from|as|try|except|finally|raise|with|lambda|yield|pass|break|continue|and|or|not|in|is|None|True|False|self)\b/g, color: 'magenta' },
55
+ { pattern: /(["'])(?:(?!\1)[^\\]|\\.)*\1/g, color: 'green' },
56
+ { pattern: /"""[\s\S]*?"""|'''[\s\S]*?'''/g, color: 'green' },
57
+ { pattern: /#.*$/gm, color: 'gray' },
58
+ { pattern: /\b\d+\.?\d*\b/g, color: 'cyan' },
59
+ { pattern: /@\w+/g, color: 'yellow' },
60
+ ],
61
+ bash: [
62
+ { pattern: /\b(if|then|else|elif|fi|for|while|do|done|case|esac|function|return|exit|echo|read|local|export|source)\b/g, color: 'magenta' },
63
+ { pattern: /(["'])(?:(?!\1)[^\\]|\\.)*\1/g, color: 'green' },
64
+ { pattern: /#.*$/gm, color: 'gray' },
65
+ { pattern: /\$\w+|\$\{[^}]+\}/g, color: 'cyan' },
66
+ { pattern: /\b\d+\b/g, color: 'cyan' },
67
+ ],
68
+ json: [
69
+ { pattern: /"[^"]*"\s*:/g, color: 'cyan' },
70
+ { pattern: /:\s*"[^"]*"/g, color: 'green' },
71
+ { pattern: /\b(true|false|null)\b/g, color: 'yellow' },
72
+ { pattern: /\b-?\d+\.?\d*\b/g, color: 'magenta' },
73
+ ],
74
+ rust: [
75
+ { pattern: /\b(fn|let|mut|const|struct|enum|impl|trait|pub|use|mod|match|if|else|for|while|loop|return|break|continue|self|Self|where|async|await|move|ref|static|unsafe|extern)\b/g, color: 'magenta' },
76
+ { pattern: /\b(true|false|None|Some|Ok|Err)\b/g, color: 'yellow' },
77
+ { pattern: /(["'])(?:(?!\1)[^\\]|\\.)*\1/g, color: 'green' },
78
+ { pattern: /\/\/.*$/gm, color: 'gray' },
79
+ { pattern: /\b\d+\.?\d*\b/g, color: 'cyan' },
80
+ ],
81
+ go: [
82
+ { pattern: /\b(func|return|if|else|for|range|switch|case|default|var|const|type|struct|interface|package|import|go|defer|chan|select|make|new|nil|true|false)\b/g, color: 'magenta' },
83
+ { pattern: /(["'`])(?:(?!\1)[^\\]|\\.)*\1/g, color: 'green' },
84
+ { pattern: /\/\/.*$/gm, color: 'gray' },
85
+ { pattern: /\b\d+\.?\d*\b/g, color: 'cyan' },
86
+ ],
87
+ };
88
+ // Map common language aliases
89
+ const LANGUAGE_ALIASES = {
90
+ js: 'javascript',
91
+ ts: 'typescript',
92
+ py: 'python',
93
+ sh: 'bash',
94
+ shell: 'bash',
95
+ zsh: 'bash',
96
+ rs: 'rust',
97
+ golang: 'go',
98
+ };
99
+ /**
100
+ * Apply syntax highlighting to code
101
+ */
102
+ function highlightCode(code, language) {
103
+ const lang = LANGUAGE_ALIASES[language.toLowerCase()] || language.toLowerCase();
104
+ const patterns = SYNTAX_PATTERNS[lang];
105
+ if (!patterns) {
106
+ // No highlighting for unknown languages - just dim it slightly
107
+ return `${COLORS.white}${code}${COLORS.reset}`;
108
+ }
109
+ // Apply patterns in order (later patterns can override)
110
+ let result = code;
111
+ const colorMap = new Map();
112
+ for (const { pattern, color } of patterns) {
113
+ pattern.lastIndex = 0;
114
+ let match;
115
+ while ((match = pattern.exec(code)) !== null) {
116
+ const start = match.index;
117
+ const end = start + match[0].length;
118
+ colorMap.set(start, { end, color });
119
+ }
120
+ }
121
+ // Build result string with colors
122
+ const positions = Array.from(colorMap.keys()).sort((a, b) => b - a);
123
+ for (const start of positions) {
124
+ const { end, color } = colorMap.get(start);
125
+ const colorCode = COLORS[color] || COLORS.white;
126
+ result = result.slice(0, start) + colorCode + result.slice(start, end) + COLORS.reset + result.slice(end);
127
+ }
128
+ return result;
129
+ }
130
+ /**
131
+ * Render markdown to ANSI terminal output
132
+ */
133
+ export function renderMarkdown(text) {
134
+ const lines = text.split('\n');
135
+ const result = [];
136
+ let inCodeBlock = false;
137
+ let codeBlockLang = '';
138
+ let codeBlockContent = [];
139
+ for (const line of lines) {
140
+ // Code block handling
141
+ if (line.startsWith('```')) {
142
+ if (inCodeBlock) {
143
+ // End of code block - render it
144
+ const code = codeBlockContent.join('\n');
145
+ const highlighted = highlightCode(code, codeBlockLang);
146
+ result.push(`${COLORS.bgGray}${COLORS.white} ${codeBlockLang || 'code'} ${COLORS.reset}`);
147
+ for (const codeLine of highlighted.split('\n')) {
148
+ result.push(`${COLORS.dim}│${COLORS.reset} ${codeLine}`);
149
+ }
150
+ result.push(`${COLORS.dim}╰${'─'.repeat(40)}${COLORS.reset}`);
151
+ inCodeBlock = false;
152
+ codeBlockContent = [];
153
+ codeBlockLang = '';
154
+ }
155
+ else {
156
+ // Start of code block
157
+ inCodeBlock = true;
158
+ codeBlockLang = line.slice(3).trim();
159
+ }
160
+ continue;
161
+ }
162
+ if (inCodeBlock) {
163
+ codeBlockContent.push(line);
164
+ continue;
165
+ }
166
+ // Headers
167
+ if (line.startsWith('### ')) {
168
+ result.push(`${COLORS.bold}${COLORS.cyan}${line.slice(4)}${COLORS.reset}`);
169
+ continue;
170
+ }
171
+ if (line.startsWith('## ')) {
172
+ result.push(`${COLORS.bold}${COLORS.brightCyan}${line.slice(3)}${COLORS.reset}`);
173
+ continue;
174
+ }
175
+ if (line.startsWith('# ')) {
176
+ result.push(`${COLORS.bold}${COLORS.brightCyan}${COLORS.underline}${line.slice(2)}${COLORS.reset}`);
177
+ continue;
178
+ }
179
+ // Horizontal rule
180
+ if (/^[-*_]{3,}$/.test(line.trim())) {
181
+ result.push(`${COLORS.dim}${'─'.repeat(40)}${COLORS.reset}`);
182
+ continue;
183
+ }
184
+ // Blockquote
185
+ if (line.startsWith('> ')) {
186
+ result.push(`${COLORS.dim}│${COLORS.reset} ${COLORS.italic}${line.slice(2)}${COLORS.reset}`);
187
+ continue;
188
+ }
189
+ // Lists
190
+ if (/^[\s]*[-*+]\s/.test(line)) {
191
+ const indent = line.match(/^(\s*)/)?.[1] || '';
192
+ const content = line.replace(/^[\s]*[-*+]\s/, '');
193
+ result.push(`${indent}${COLORS.cyan}•${COLORS.reset} ${content}`);
194
+ continue;
195
+ }
196
+ if (/^[\s]*\d+\.\s/.test(line)) {
197
+ const match = line.match(/^(\s*)(\d+)\.\s(.*)$/);
198
+ if (match) {
199
+ result.push(`${match[1]}${COLORS.cyan}${match[2]}.${COLORS.reset} ${match[3]}`);
200
+ continue;
201
+ }
202
+ }
203
+ // Inline formatting
204
+ let formattedLine = line;
205
+ // Inline code
206
+ formattedLine = formattedLine.replace(/`([^`]+)`/g, `${COLORS.bgGray}${COLORS.white} $1 ${COLORS.reset}`);
207
+ // Bold
208
+ formattedLine = formattedLine.replace(/\*\*([^*]+)\*\*/g, `${COLORS.bold}$1${COLORS.reset}`);
209
+ formattedLine = formattedLine.replace(/__([^_]+)__/g, `${COLORS.bold}$1${COLORS.reset}`);
210
+ // Italic
211
+ formattedLine = formattedLine.replace(/\*([^*]+)\*/g, `${COLORS.italic}$1${COLORS.reset}`);
212
+ formattedLine = formattedLine.replace(/_([^_]+)_/g, `${COLORS.italic}$1${COLORS.reset}`);
213
+ // Links [text](url)
214
+ formattedLine = formattedLine.replace(/\[([^\]]+)\]\(([^)]+)\)/g, `${COLORS.underline}${COLORS.blue}$1${COLORS.reset}${COLORS.dim} ($2)${COLORS.reset}`);
215
+ result.push(formattedLine);
216
+ }
217
+ // Handle unclosed code block
218
+ if (inCodeBlock && codeBlockContent.length > 0) {
219
+ const code = codeBlockContent.join('\n');
220
+ const highlighted = highlightCode(code, codeBlockLang);
221
+ result.push(`${COLORS.bgGray}${COLORS.white} ${codeBlockLang || 'code'} ${COLORS.reset}`);
222
+ for (const codeLine of highlighted.split('\n')) {
223
+ result.push(`${COLORS.dim}│${COLORS.reset} ${codeLine}`);
224
+ }
225
+ }
226
+ return result.join('\n');
227
+ }
228
+ /**
229
+ * Strip markdown formatting (for plain text output)
230
+ */
231
+ export function stripMarkdown(text) {
232
+ return text
233
+ .replace(/```[\s\S]*?```/g, (match) => {
234
+ // Keep code content, remove backticks
235
+ return match.replace(/```\w*\n?/g, '').trim();
236
+ })
237
+ .replace(/`([^`]+)`/g, '$1')
238
+ .replace(/\*\*([^*]+)\*\*/g, '$1')
239
+ .replace(/__([^_]+)__/g, '$1')
240
+ .replace(/\*([^*]+)\*/g, '$1')
241
+ .replace(/_([^_]+)_/g, '$1')
242
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
243
+ .replace(/^#+\s+/gm, '')
244
+ .replace(/^>\s+/gm, '')
245
+ .replace(/^[-*+]\s+/gm, '• ')
246
+ .replace(/^\d+\.\s+/gm, (match) => match);
247
+ }
248
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Calliope CLI - MCP (Model Context Protocol) Support
3
+ *
4
+ * Implements MCP client for connecting to external tool servers.
5
+ * Supports self-registering MCP servers from URLs.
6
+ */
7
+ import type { Tool } from './types.js';
8
+ export interface MCPServer {
9
+ id: string;
10
+ name: string;
11
+ url: string;
12
+ description?: string;
13
+ tools: MCPTool[];
14
+ status: 'connected' | 'disconnected' | 'error';
15
+ lastConnected?: string;
16
+ autoConnect: boolean;
17
+ }
18
+ export interface MCPTool {
19
+ name: string;
20
+ description: string;
21
+ inputSchema: {
22
+ type: 'object';
23
+ properties: Record<string, {
24
+ type: string;
25
+ description?: string;
26
+ enum?: string[];
27
+ }>;
28
+ required?: string[];
29
+ };
30
+ }
31
+ export interface MCPManifest {
32
+ name: string;
33
+ version: string;
34
+ description?: string;
35
+ tools: MCPTool[];
36
+ resources?: MCPResource[];
37
+ prompts?: MCPPrompt[];
38
+ }
39
+ export interface MCPResource {
40
+ uri: string;
41
+ name: string;
42
+ description?: string;
43
+ mimeType?: string;
44
+ }
45
+ export interface MCPPrompt {
46
+ name: string;
47
+ description?: string;
48
+ arguments?: Array<{
49
+ name: string;
50
+ description?: string;
51
+ required?: boolean;
52
+ }>;
53
+ }
54
+ /**
55
+ * Load registered MCP servers
56
+ */
57
+ export declare function loadServers(): MCPServer[];
58
+ /**
59
+ * Save MCP servers
60
+ */
61
+ export declare function saveServers(servers: MCPServer[]): void;
62
+ /**
63
+ * Fetch MCP manifest from a URL
64
+ */
65
+ export declare function fetchManifest(url: string): Promise<MCPManifest>;
66
+ /**
67
+ * Register an MCP server from URL
68
+ */
69
+ export declare function registerServer(url: string, autoConnect?: boolean): Promise<MCPServer>;
70
+ /**
71
+ * Unregister an MCP server
72
+ */
73
+ export declare function unregisterServer(idOrUrl: string): boolean;
74
+ /**
75
+ * Get all registered MCP tools as Calliope tools
76
+ */
77
+ export declare function getMCPTools(): Tool[];
78
+ /**
79
+ * Execute an MCP tool call
80
+ */
81
+ export declare function executeMCPTool(toolName: string, args: Record<string, unknown>): Promise<string>;
82
+ /**
83
+ * List all registered servers
84
+ */
85
+ export declare function listServers(): MCPServer[];
86
+ /**
87
+ * Refresh server connection status
88
+ */
89
+ export declare function refreshServer(idOrUrl: string): Promise<MCPServer | null>;
90
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AASvC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;YACzB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ;AAgBD;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,EAAE,CAWzC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAGtD;AAMD;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA+DrE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,UAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAyBxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASzD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,EAAE,CA8BpC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAyBjB;AA4DD;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,EAAE,CAEzC;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAmB9E"}