@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.
- package/README.md +258 -105
- package/dist/branching.d.ts +56 -0
- package/dist/branching.d.ts.map +1 -0
- package/dist/branching.js +211 -0
- package/dist/branching.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +235 -2
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +75 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +234 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -0
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +73 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +317 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +199 -0
- package/dist/errors.js.map +1 -0
- package/dist/file-watcher.d.ts +91 -0
- package/dist/file-watcher.d.ts.map +1 -0
- package/dist/file-watcher.js +269 -0
- package/dist/file-watcher.js.map +1 -0
- package/dist/files.d.ts +49 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +191 -0
- package/dist/files.js.map +1 -0
- package/dist/fuzzy-search.d.ts +75 -0
- package/dist/fuzzy-search.d.ts.map +1 -0
- package/dist/fuzzy-search.js +240 -0
- package/dist/fuzzy-search.js.map +1 -0
- package/dist/hooks.d.ts +79 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +271 -0
- package/dist/hooks.js.map +1 -0
- package/dist/keyboard.d.ts +57 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +265 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/markdown.d.ts +14 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +248 -0
- package/dist/markdown.js.map +1 -0
- package/dist/mcp.d.ts +90 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +290 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +104 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +394 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +67 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +289 -0
- package/dist/model-router.js.map +1 -0
- package/dist/parallel-tools.d.ts +51 -0
- package/dist/parallel-tools.d.ts.map +1 -0
- package/dist/parallel-tools.js +278 -0
- package/dist/parallel-tools.js.map +1 -0
- package/dist/project-config.d.ts +84 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +250 -0
- package/dist/project-config.js.map +1 -0
- package/dist/providers.d.ts +10 -2
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +240 -38
- package/dist/providers.js.map +1 -1
- package/dist/risk.d.ts +31 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +367 -0
- package/dist/risk.js.map +1 -0
- package/dist/sandbox.d.ts +49 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +347 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/skills.d.ts +71 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +383 -0
- package/dist/skills.js.map +1 -0
- package/dist/storage.d.ts +139 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +508 -0
- package/dist/storage.js.map +1 -0
- package/dist/streaming.d.ts +94 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +305 -0
- package/dist/streaming.js.map +1 -0
- package/dist/summarization.d.ts +76 -0
- package/dist/summarization.d.ts.map +1 -0
- package/dist/summarization.js +242 -0
- package/dist/summarization.js.map +1 -0
- package/dist/themes.d.ts +110 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +329 -0
- package/dist/themes.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +335 -1
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +56 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +105 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-cli.d.ts +9 -2
- package/dist/ui-cli.d.ts.map +1 -1
- package/dist/ui-cli.js +1315 -220
- package/dist/ui-cli.js.map +1 -1
- package/package.json +1 -1
package/dist/keyboard.js
ADDED
|
@@ -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"}
|
package/dist/markdown.js
ADDED
|
@@ -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"}
|