@anastops/mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,94 @@
1
+ /**
2
+ * CLI Response Formatters for anastops MCP server
3
+ *
4
+ * Provides beautiful ASCII table and status formatting
5
+ * for command-line interfaces instead of raw JSON.
6
+ */
7
+ import chalk from 'chalk';
8
+ export interface TableColumn {
9
+ header: string;
10
+ width: number;
11
+ align?: 'left' | 'center' | 'right';
12
+ }
13
+ export interface TableOptions {
14
+ columns: TableColumn[];
15
+ borderColor?: typeof chalk.gray;
16
+ }
17
+ /**
18
+ * Renders a table with borders
19
+ */
20
+ export declare function renderTable(options: TableOptions, rows: string[][]): string;
21
+ /**
22
+ * Symbols for status display
23
+ */
24
+ export declare const symbols: {
25
+ success: string;
26
+ failure: string;
27
+ warning: string;
28
+ info: string;
29
+ pending: string;
30
+ };
31
+ /**
32
+ * Format status with color and symbol
33
+ */
34
+ export declare function formatStatus(status: string): string;
35
+ /**
36
+ * Format session list as ASCII table
37
+ */
38
+ export declare function formatSessionTable(sessions: Array<{
39
+ id: string;
40
+ objective: string;
41
+ status: string;
42
+ created_at: Date | string;
43
+ }>): string;
44
+ /**
45
+ * Format task execution result nicely
46
+ */
47
+ export declare function formatTaskResult(task: {
48
+ task_id: string;
49
+ status: string;
50
+ routing?: {
51
+ tier: number;
52
+ provider: string;
53
+ model: string;
54
+ };
55
+ result?: string;
56
+ error?: string;
57
+ token_usage?: {
58
+ prompt_tokens: number;
59
+ completion_tokens: number;
60
+ total_tokens: number;
61
+ cost?: number;
62
+ };
63
+ safety?: {
64
+ rate_limit_usage?: number;
65
+ circuit_state?: string;
66
+ };
67
+ }): string;
68
+ /**
69
+ * Format task list as ASCII table
70
+ */
71
+ export declare function formatTaskTable(tasks: Array<{
72
+ id: string;
73
+ type: string;
74
+ status: string;
75
+ description: string;
76
+ }>): string;
77
+ /**
78
+ * Format agent list as ASCII table
79
+ */
80
+ export declare function formatAgentTable(agents: Array<{
81
+ id: string;
82
+ name: string;
83
+ role: string;
84
+ status: string;
85
+ }>): string;
86
+ /**
87
+ * Type for output format preference
88
+ */
89
+ export type OutputFormat = 'table' | 'json';
90
+ /**
91
+ * Get the format from args, defaulting to 'json' for backward compatibility
92
+ */
93
+ export declare function getOutputFormat(args: Record<string, unknown>): OutputFormat;
94
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC;CACjC;AAyBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CA0C3E;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;CAMnB,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAYnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,KAAK,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC;CAC3B,CAAC,GACD,MAAM,CAuBR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE;QACZ,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE;QACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH,GAAG,MAAM,CA+DT;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,GACD,MAAM,CAuBR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,GACD,MAAM,CAkBR;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5C;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAI3E"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * CLI Response Formatters for anastops MCP server
3
+ *
4
+ * Provides beautiful ASCII table and status formatting
5
+ * for command-line interfaces instead of raw JSON.
6
+ */
7
+ import chalk from 'chalk';
8
+ /**
9
+ * Pads a string to the specified width with the specified alignment
10
+ */
11
+ function padString(str, width, align = 'left') {
12
+ // Strip ANSI codes for length calculation
13
+ // eslint-disable-next-line no-control-regex -- Required to match ANSI escape sequences for accurate string length calculation
14
+ const strippedLength = str.replace(/\x1B\[[0-9;]*m/g, '').length;
15
+ const padding = Math.max(0, width - strippedLength);
16
+ switch (align) {
17
+ case 'center': {
18
+ const leftPad = Math.floor(padding / 2);
19
+ const rightPad = padding - leftPad;
20
+ return ' '.repeat(leftPad) + str + ' '.repeat(rightPad);
21
+ }
22
+ case 'right':
23
+ return ' '.repeat(padding) + str;
24
+ case 'left':
25
+ default:
26
+ return str + ' '.repeat(padding);
27
+ }
28
+ }
29
+ /**
30
+ * Renders a table with borders
31
+ */
32
+ export function renderTable(options, rows) {
33
+ const { columns, borderColor = chalk.gray } = options;
34
+ const lines = [];
35
+ // Build horizontal borders
36
+ const topBorder = borderColor('┌') +
37
+ columns.map((col) => borderColor('─'.repeat(col.width + 2))).join(borderColor('┬')) +
38
+ borderColor('┐');
39
+ const middleBorder = borderColor('├') +
40
+ columns.map((col) => borderColor('─'.repeat(col.width + 2))).join(borderColor('┼')) +
41
+ borderColor('┤');
42
+ const bottomBorder = borderColor('└') +
43
+ columns.map((col) => borderColor('─'.repeat(col.width + 2))).join(borderColor('┴')) +
44
+ borderColor('┘');
45
+ // Build header row
46
+ const headerRow = borderColor('│') +
47
+ columns.map((col) => ' ' + chalk.bold(padString(col.header, col.width, col.align)) + ' ').join(borderColor('│')) +
48
+ borderColor('│');
49
+ lines.push(topBorder);
50
+ lines.push(headerRow);
51
+ lines.push(middleBorder);
52
+ // Build data rows
53
+ for (const row of rows) {
54
+ const dataRow = borderColor('│') +
55
+ columns.map((col, i) => ' ' + padString(row[i] ?? '', col.width, col.align) + ' ').join(borderColor('│')) +
56
+ borderColor('│');
57
+ lines.push(dataRow);
58
+ }
59
+ lines.push(bottomBorder);
60
+ return lines.join('\n');
61
+ }
62
+ /**
63
+ * Symbols for status display
64
+ */
65
+ export const symbols = {
66
+ success: chalk.green('✓'),
67
+ failure: chalk.red('✗'),
68
+ warning: chalk.yellow('!'),
69
+ info: chalk.blue('i'),
70
+ pending: chalk.gray('●'),
71
+ };
72
+ /**
73
+ * Format status with color and symbol
74
+ */
75
+ export function formatStatus(status) {
76
+ const statusLower = status.toLowerCase();
77
+ if (statusLower === 'active')
78
+ return `${symbols.success} Active`;
79
+ if (statusLower === 'completed')
80
+ return `${symbols.success} ${chalk.green('Completed')}`;
81
+ if (statusLower === 'failed')
82
+ return `${symbols.failure} Failed`;
83
+ if (statusLower === 'pending')
84
+ return `${symbols.pending} Pending`;
85
+ if (statusLower === 'running')
86
+ return `${chalk.cyan('⟳')} Running`;
87
+ if (statusLower === 'queued')
88
+ return `${chalk.yellow('◉')} Queued`;
89
+ if (statusLower === 'archived')
90
+ return `${chalk.gray('▣')} Archived`;
91
+ return status;
92
+ }
93
+ /**
94
+ * Format session list as ASCII table
95
+ */
96
+ export function formatSessionTable(sessions) {
97
+ if (sessions.length === 0) {
98
+ return chalk.yellow('No sessions found');
99
+ }
100
+ const rows = sessions.map((s) => [
101
+ s.id.slice(0, 8) + '...',
102
+ s.objective.length > 40 ? s.objective.slice(0, 37) + '...' : s.objective,
103
+ formatStatus(s.status),
104
+ new Date(s.created_at).toLocaleString(),
105
+ ]);
106
+ return renderTable({
107
+ columns: [
108
+ { header: 'Session ID', width: 11, align: 'left' },
109
+ { header: 'Objective', width: 40, align: 'left' },
110
+ { header: 'Status', width: 12, align: 'center' },
111
+ { header: 'Created', width: 20, align: 'left' },
112
+ ],
113
+ }, rows);
114
+ }
115
+ /**
116
+ * Format task execution result nicely
117
+ */
118
+ export function formatTaskResult(task) {
119
+ const lines = [];
120
+ // Header
121
+ lines.push(chalk.bold(`Task ${task.task_id}`));
122
+ lines.push('─'.repeat(50));
123
+ // Status
124
+ lines.push(`${chalk.dim('Status:')} ${formatStatus(task.status)}`);
125
+ // Routing info
126
+ if (task.routing !== undefined) {
127
+ lines.push(`${chalk.dim('Provider:')} ${task.routing.provider} (${task.routing.model})`);
128
+ lines.push(`${chalk.dim('Tier:')} ${task.routing.tier}`);
129
+ }
130
+ // Token usage
131
+ if (task.token_usage !== undefined) {
132
+ lines.push('');
133
+ lines.push(chalk.bold('Token Usage:'));
134
+ lines.push(` ${chalk.dim('Input:')} ${task.token_usage.prompt_tokens.toLocaleString()}`);
135
+ lines.push(` ${chalk.dim('Output:')} ${task.token_usage.completion_tokens.toLocaleString()}`);
136
+ lines.push(` ${chalk.dim('Total:')} ${task.token_usage.total_tokens.toLocaleString()}`);
137
+ if (task.token_usage.cost !== undefined) {
138
+ lines.push(` ${chalk.dim('Cost:')} $${task.token_usage.cost.toFixed(4)}`);
139
+ }
140
+ }
141
+ // Safety info
142
+ if (task.safety !== undefined) {
143
+ if (task.safety.rate_limit_usage !== undefined) {
144
+ const usage = task.safety.rate_limit_usage;
145
+ let usageColor = chalk.green;
146
+ if (usage >= 85)
147
+ usageColor = chalk.red;
148
+ else if (usage >= 70)
149
+ usageColor = chalk.yellow;
150
+ lines.push(`${chalk.dim('Rate Limit:')} ${usageColor(`${usage.toFixed(1)}%`)}`);
151
+ }
152
+ if (task.safety.circuit_state !== undefined) {
153
+ lines.push(`${chalk.dim('Circuit:')} ${task.safety.circuit_state}`);
154
+ }
155
+ }
156
+ // Error
157
+ if (task.error !== undefined) {
158
+ lines.push('');
159
+ lines.push(`${symbols.failure} ${chalk.red('Error:')} ${task.error}`);
160
+ }
161
+ // Result
162
+ if (task.result !== undefined) {
163
+ lines.push('');
164
+ lines.push(chalk.bold('Result:'));
165
+ lines.push('─'.repeat(50));
166
+ // Truncate very long results
167
+ const maxLength = 2000;
168
+ if (task.result.length > maxLength) {
169
+ lines.push(task.result.slice(0, maxLength) + chalk.dim('\n... (truncated)'));
170
+ }
171
+ else {
172
+ lines.push(task.result);
173
+ }
174
+ }
175
+ return lines.join('\n');
176
+ }
177
+ /**
178
+ * Format task list as ASCII table
179
+ */
180
+ export function formatTaskTable(tasks) {
181
+ if (tasks.length === 0) {
182
+ return chalk.yellow('No tasks found');
183
+ }
184
+ const rows = tasks.map((t) => [
185
+ t.id.slice(0, 8) + '...',
186
+ t.type,
187
+ formatStatus(t.status),
188
+ t.description.length > 35 ? t.description.slice(0, 32) + '...' : t.description,
189
+ ]);
190
+ return renderTable({
191
+ columns: [
192
+ { header: 'Task ID', width: 11, align: 'left' },
193
+ { header: 'Type', width: 12, align: 'left' },
194
+ { header: 'Status', width: 12, align: 'center' },
195
+ { header: 'Description', width: 35, align: 'left' },
196
+ ],
197
+ }, rows);
198
+ }
199
+ /**
200
+ * Format agent list as ASCII table
201
+ */
202
+ export function formatAgentTable(agents) {
203
+ if (agents.length === 0) {
204
+ return chalk.yellow('No agents found');
205
+ }
206
+ const rows = agents.map((a) => [a.id.slice(0, 8) + '...', a.name, a.role, formatStatus(a.status)]);
207
+ return renderTable({
208
+ columns: [
209
+ { header: 'Agent ID', width: 11, align: 'left' },
210
+ { header: 'Name', width: 20, align: 'left' },
211
+ { header: 'Role', width: 14, align: 'left' },
212
+ { header: 'Status', width: 12, align: 'center' },
213
+ ],
214
+ }, rows);
215
+ }
216
+ /**
217
+ * Get the format from args, defaulting to 'json' for backward compatibility
218
+ */
219
+ export function getOutputFormat(args) {
220
+ const format = args['format'];
221
+ if (format === 'table')
222
+ return 'table';
223
+ return 'json';
224
+ }
225
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"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"}