@flyingrobots/bijou-mcp 4.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.
- package/LICENSE +159 -0
- package/README.md +161 -0
- package/bin/bijou-mcp.js +2 -0
- package/dist/context.d.ts +11 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +16 -0
- package/dist/context.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +67 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/accordion.d.ts +3 -0
- package/dist/tools/accordion.d.ts.map +1 -0
- package/dist/tools/accordion.js +24 -0
- package/dist/tools/accordion.js.map +1 -0
- package/dist/tools/alert.d.ts +3 -0
- package/dist/tools/alert.d.ts.map +1 -0
- package/dist/tools/alert.js +22 -0
- package/dist/tools/alert.js.map +1 -0
- package/dist/tools/badge.d.ts +3 -0
- package/dist/tools/badge.d.ts.map +1 -0
- package/dist/tools/badge.js +24 -0
- package/dist/tools/badge.js.map +1 -0
- package/dist/tools/box.d.ts +4 -0
- package/dist/tools/box.d.ts.map +1 -0
- package/dist/tools/box.js +54 -0
- package/dist/tools/box.js.map +1 -0
- package/dist/tools/breadcrumb.d.ts +3 -0
- package/dist/tools/breadcrumb.d.ts.map +1 -0
- package/dist/tools/breadcrumb.js +21 -0
- package/dist/tools/breadcrumb.js.map +1 -0
- package/dist/tools/constrain.d.ts +3 -0
- package/dist/tools/constrain.d.ts.map +1 -0
- package/dist/tools/constrain.js +25 -0
- package/dist/tools/constrain.js.map +1 -0
- package/dist/tools/dag.d.ts +3 -0
- package/dist/tools/dag.d.ts.map +1 -0
- package/dist/tools/dag.js +27 -0
- package/dist/tools/dag.js.map +1 -0
- package/dist/tools/enumerated-list.d.ts +3 -0
- package/dist/tools/enumerated-list.d.ts.map +1 -0
- package/dist/tools/enumerated-list.js +26 -0
- package/dist/tools/enumerated-list.js.map +1 -0
- package/dist/tools/explainability.d.ts +3 -0
- package/dist/tools/explainability.d.ts.map +1 -0
- package/dist/tools/explainability.js +40 -0
- package/dist/tools/explainability.js.map +1 -0
- package/dist/tools/hyperlink.d.ts +3 -0
- package/dist/tools/hyperlink.d.ts.map +1 -0
- package/dist/tools/hyperlink.js +23 -0
- package/dist/tools/hyperlink.js.map +1 -0
- package/dist/tools/inspector.d.ts +3 -0
- package/dist/tools/inspector.d.ts.map +1 -0
- package/dist/tools/inspector.js +36 -0
- package/dist/tools/inspector.js.map +1 -0
- package/dist/tools/kbd.d.ts +3 -0
- package/dist/tools/kbd.d.ts.map +1 -0
- package/dist/tools/kbd.js +20 -0
- package/dist/tools/kbd.js.map +1 -0
- package/dist/tools/log.d.ts +3 -0
- package/dist/tools/log.d.ts.map +1 -0
- package/dist/tools/log.js +25 -0
- package/dist/tools/log.js.map +1 -0
- package/dist/tools/markdown.d.ts +3 -0
- package/dist/tools/markdown.d.ts.map +1 -0
- package/dist/tools/markdown.js +22 -0
- package/dist/tools/markdown.js.map +1 -0
- package/dist/tools/paginator.d.ts +3 -0
- package/dist/tools/paginator.d.ts.map +1 -0
- package/dist/tools/paginator.js +22 -0
- package/dist/tools/paginator.js.map +1 -0
- package/dist/tools/progress.d.ts +3 -0
- package/dist/tools/progress.d.ts.map +1 -0
- package/dist/tools/progress.js +27 -0
- package/dist/tools/progress.js.map +1 -0
- package/dist/tools/separator.d.ts +3 -0
- package/dist/tools/separator.d.ts.map +1 -0
- package/dist/tools/separator.js +21 -0
- package/dist/tools/separator.js.map +1 -0
- package/dist/tools/skeleton.d.ts +3 -0
- package/dist/tools/skeleton.d.ts.map +1 -0
- package/dist/tools/skeleton.js +21 -0
- package/dist/tools/skeleton.js.map +1 -0
- package/dist/tools/stepper.d.ts +3 -0
- package/dist/tools/stepper.d.ts.map +1 -0
- package/dist/tools/stepper.js +23 -0
- package/dist/tools/stepper.js.map +1 -0
- package/dist/tools/table.d.ts +3 -0
- package/dist/tools/table.d.ts.map +1 -0
- package/dist/tools/table.js +24 -0
- package/dist/tools/table.js.map +1 -0
- package/dist/tools/tabs.d.ts +3 -0
- package/dist/tools/tabs.d.ts.map +1 -0
- package/dist/tools/tabs.js +24 -0
- package/dist/tools/tabs.js.map +1 -0
- package/dist/tools/timeline.d.ts +3 -0
- package/dist/tools/timeline.d.ts.map +1 -0
- package/dist/tools/timeline.js +25 -0
- package/dist/tools/timeline.js.map +1 -0
- package/dist/tools/tree.d.ts +3 -0
- package/dist/tools/tree.d.ts.map +1 -0
- package/dist/tools/tree.js +24 -0
- package/dist/tools/tree.js.map +1 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { breadcrumb } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
items: z.array(z.string()).describe('Breadcrumb path segments (e.g. ["Home", "Docs", "API"]).'),
|
|
6
|
+
separator: z.string().optional().describe('Separator between items (default " > ").'),
|
|
7
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
8
|
+
};
|
|
9
|
+
const inputSchema = z.object(inputShape);
|
|
10
|
+
export const breadcrumbTool = {
|
|
11
|
+
name: 'bijou_breadcrumb',
|
|
12
|
+
description: 'Render a breadcrumb navigation trail. The last item is highlighted as the current location.',
|
|
13
|
+
inputSchema: inputShape,
|
|
14
|
+
handler: async (args) => {
|
|
15
|
+
const input = inputSchema.parse(args);
|
|
16
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
17
|
+
const result = breadcrumb(input.items, { separator: input.separator, ctx });
|
|
18
|
+
return { content: [{ type: 'text', text: result }] };
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=breadcrumb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb.js","sourceRoot":"","sources":["../../src/tools/breadcrumb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACrF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,6FAA6F;IAC1G,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constrain.d.ts","sourceRoot":"","sources":["../../src/tools/constrain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYpD,eAAO,MAAM,aAAa,EAAE,gBAY3B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { constrain } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
content: z.string().describe('Text content to constrain.'),
|
|
6
|
+
maxWidth: z.number().optional().describe('Maximum width in columns.'),
|
|
7
|
+
maxHeight: z.number().optional().describe('Maximum height in lines.'),
|
|
8
|
+
ellipsis: z.string().optional().describe('Ellipsis string for truncation (default "...").'),
|
|
9
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
10
|
+
};
|
|
11
|
+
const inputSchema = z.object(inputShape);
|
|
12
|
+
export const constrainTool = {
|
|
13
|
+
name: 'bijou_constrain',
|
|
14
|
+
description: 'Constrain text to a maximum width and/or height, truncating with ellipsis if needed.',
|
|
15
|
+
inputSchema: inputShape,
|
|
16
|
+
handler: async (args) => {
|
|
17
|
+
const input = inputSchema.parse(args);
|
|
18
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
19
|
+
const result = constrain(input.content, {
|
|
20
|
+
maxWidth: input.maxWidth, maxHeight: input.maxHeight, ellipsis: input.ellipsis, ctx,
|
|
21
|
+
});
|
|
22
|
+
return { content: [{ type: 'text', text: result }] };
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=constrain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constrain.js","sourceRoot":"","sources":["../../src/tools/constrain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC1D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAC3F,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,sFAAsF;IACnG,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;YACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG;SACpF,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../../src/tools/dag.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAepD,eAAO,MAAM,OAAO,EAAE,gBAWrB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { dag } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
nodes: z.array(z.object({
|
|
6
|
+
id: z.string().describe('Unique node identifier.'),
|
|
7
|
+
label: z.string().describe('Display text for the node.'),
|
|
8
|
+
edges: z.array(z.string()).optional().describe('IDs of child nodes this node connects to.'),
|
|
9
|
+
badge: z.string().optional().describe('Short annotation (e.g. status or count).'),
|
|
10
|
+
})).describe('Array of DAG nodes with edges.'),
|
|
11
|
+
maxWidth: z.number().optional().describe('Maximum render width (default 80).'),
|
|
12
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
13
|
+
};
|
|
14
|
+
const inputSchema = z.object(inputShape);
|
|
15
|
+
export const dagTool = {
|
|
16
|
+
name: 'bijou_dag',
|
|
17
|
+
description: 'Render a directed acyclic graph with boxed nodes and edge lines. Returns plain-text with Unicode box-drawing characters.',
|
|
18
|
+
inputSchema: inputShape,
|
|
19
|
+
handler: async (args) => {
|
|
20
|
+
const input = inputSchema.parse(args);
|
|
21
|
+
const tw = input.terminalWidth ?? input.maxWidth ?? 80;
|
|
22
|
+
const ctx = mcpContext(tw);
|
|
23
|
+
const result = dag(input.nodes, { maxWidth: input.maxWidth, ctx });
|
|
24
|
+
return { content: [{ type: 'text', text: result }] };
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=dag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag.js","sourceRoot":"","sources":["../../src/tools/dag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACtB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACxD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAC3F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KAClF,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC9E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,0HAA0H;IACvI,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enumerated-list.d.ts","sourceRoot":"","sources":["../../src/tools/enumerated-list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAapD,eAAO,MAAM,kBAAkB,EAAE,gBAYhC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { enumeratedList } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
items: z.array(z.string()).describe('List items to render.'),
|
|
6
|
+
style: z.enum(['arabic', 'alpha', 'roman', 'bullet', 'dash', 'none'])
|
|
7
|
+
.optional().describe('Bullet/numbering style (default "bullet").'),
|
|
8
|
+
indent: z.number().optional().describe('Indentation level in spaces.'),
|
|
9
|
+
start: z.number().optional().describe('Starting number for ordered styles.'),
|
|
10
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
11
|
+
};
|
|
12
|
+
const inputSchema = z.object(inputShape);
|
|
13
|
+
export const enumeratedListTool = {
|
|
14
|
+
name: 'bijou_enumerated_list',
|
|
15
|
+
description: 'Render a list with bullets, numbers (arabic), letters (alpha), roman numerals, or dashes.',
|
|
16
|
+
inputSchema: inputShape,
|
|
17
|
+
handler: async (args) => {
|
|
18
|
+
const input = inputSchema.parse(args);
|
|
19
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
20
|
+
const result = enumeratedList(input.items, {
|
|
21
|
+
style: input.style, indent: input.indent, start: input.start, ctx,
|
|
22
|
+
});
|
|
23
|
+
return { content: [{ type: 'text', text: result }] };
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=enumerated-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enumerated-list.js","sourceRoot":"","sources":["../../src/tools/enumerated-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC5D,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAClE,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACtE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC5E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAClD,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,2FAA2F;IACxG,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE;YACzC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG;SAClE,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainability.d.ts","sourceRoot":"","sources":["../../src/tools/explainability.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAuBpD,eAAO,MAAM,kBAAkB,EAAE,gBAgBhC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { explainability } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
title: z.string().describe('Decision or artifact title.'),
|
|
6
|
+
label: z.string().optional().describe('Short label (e.g. "Decision", "Recommendation").'),
|
|
7
|
+
artifactKind: z.string().optional().describe('Kind of artifact being explained.'),
|
|
8
|
+
source: z.string().optional().describe('Source of the decision (e.g. model name, system).'),
|
|
9
|
+
sourceMode: z.string().optional().describe('Mode indicator for the source.'),
|
|
10
|
+
rationale: z.string().optional().describe('Explanation of why this decision was made.'),
|
|
11
|
+
evidence: z.array(z.object({
|
|
12
|
+
label: z.string().describe('Evidence item label.'),
|
|
13
|
+
value: z.string().describe('Evidence item value.'),
|
|
14
|
+
})).optional().describe('Supporting evidence items.'),
|
|
15
|
+
nextAction: z.string().optional().describe('Suggested next action.'),
|
|
16
|
+
governance: z.string().optional().describe('Governance or compliance note.'),
|
|
17
|
+
confidence: z.union([z.number(), z.string()]).optional()
|
|
18
|
+
.describe('Confidence level (number 0-1 or descriptive string).'),
|
|
19
|
+
width: z.number().optional().describe('Box width.'),
|
|
20
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
21
|
+
};
|
|
22
|
+
const inputSchema = z.object(inputShape);
|
|
23
|
+
export const explainabilityTool = {
|
|
24
|
+
name: 'bijou_explainability',
|
|
25
|
+
description: 'Render an AI explainability card showing a decision with rationale, evidence, confidence, and governance.',
|
|
26
|
+
inputSchema: inputShape,
|
|
27
|
+
handler: async (args) => {
|
|
28
|
+
const input = inputSchema.parse(args);
|
|
29
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
30
|
+
const result = explainability({
|
|
31
|
+
title: input.title, label: input.label, artifactKind: input.artifactKind,
|
|
32
|
+
source: input.source, sourceMode: input.sourceMode, rationale: input.rationale,
|
|
33
|
+
evidence: input.evidence?.map((e) => ({ label: e.label, detail: e.value })),
|
|
34
|
+
nextAction: input.nextAction, governance: input.governance,
|
|
35
|
+
confidence: input.confidence, width: input.width, ctx,
|
|
36
|
+
});
|
|
37
|
+
return { content: [{ type: 'text', text: result }] };
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=explainability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainability.js","sourceRoot":"","sources":["../../src/tools/explainability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyperlink.d.ts","sourceRoot":"","sources":["../../src/tools/hyperlink.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYpD,eAAO,MAAM,aAAa,EAAE,gBAU3B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { hyperlink } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
text: z.string().describe('Display text for the hyperlink.'),
|
|
6
|
+
url: z.string().describe('URL target.'),
|
|
7
|
+
fallback: z.enum(['url', 'text', 'both']).optional()
|
|
8
|
+
.describe('Fallback rendering when hyperlinks are unsupported (default "both").'),
|
|
9
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
10
|
+
};
|
|
11
|
+
const inputSchema = z.object(inputShape);
|
|
12
|
+
export const hyperlinkTool = {
|
|
13
|
+
name: 'bijou_hyperlink',
|
|
14
|
+
description: 'Render a terminal hyperlink (OSC 8). Falls back to text + URL in plain mode.',
|
|
15
|
+
inputSchema: inputShape,
|
|
16
|
+
handler: async (args) => {
|
|
17
|
+
const input = inputSchema.parse(args);
|
|
18
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
19
|
+
const result = hyperlink(input.text, input.url, { fallback: input.fallback, ctx });
|
|
20
|
+
return { content: [{ type: 'text', text: result }] };
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=hyperlink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyperlink.js","sourceRoot":"","sources":["../../src/tools/hyperlink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC5D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;SACjD,QAAQ,CAAC,sEAAsE,CAAC;IACnF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,8EAA8E;IAC3F,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACnF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/tools/inspector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAoBpD,eAAO,MAAM,aAAa,EAAE,gBAe3B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { inspector } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
title: z.string().describe('Inspector panel title.'),
|
|
6
|
+
currentValue: z.string().optional().describe('Primary value to display prominently.'),
|
|
7
|
+
currentValueLabel: z.string().optional().describe('Label for the current value.'),
|
|
8
|
+
supportingText: z.string().optional().describe('Additional supporting text.'),
|
|
9
|
+
supportingTextLabel: z.string().optional().describe('Label for supporting text.'),
|
|
10
|
+
sections: z.array(z.object({
|
|
11
|
+
title: z.string().describe('Section heading.'),
|
|
12
|
+
content: z.string().describe('Section body text.'),
|
|
13
|
+
tone: z.enum(['default', 'muted']).optional().describe('Section tone.'),
|
|
14
|
+
})).optional().describe('Additional detail sections.'),
|
|
15
|
+
chrome: z.enum(['boxed', 'none']).optional().describe('Border chrome style (default "boxed").'),
|
|
16
|
+
width: z.number().optional().describe('Panel width.'),
|
|
17
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
18
|
+
};
|
|
19
|
+
const inputSchema = z.object(inputShape);
|
|
20
|
+
export const inspectorTool = {
|
|
21
|
+
name: 'bijou_inspector',
|
|
22
|
+
description: 'Render an inspector panel with a title, primary value, supporting text, and detail sections.',
|
|
23
|
+
inputSchema: inputShape,
|
|
24
|
+
handler: async (args) => {
|
|
25
|
+
const input = inputSchema.parse(args);
|
|
26
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
27
|
+
const result = inspector({
|
|
28
|
+
title: input.title, currentValue: input.currentValue,
|
|
29
|
+
currentValueLabel: input.currentValueLabel, supportingText: input.supportingText,
|
|
30
|
+
supportingTextLabel: input.supportingTextLabel, sections: input.sections,
|
|
31
|
+
chrome: input.chrome, width: input.width, ctx,
|
|
32
|
+
});
|
|
33
|
+
return { content: [{ type: 'text', text: result }] };
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/tools/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACrF,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACjF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC7E,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACjF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC9C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KACxE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACtD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC/F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACrD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,8FAA8F;IAC3G,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC;YACvB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY;YACpD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc;YAChF,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG;SAC9C,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../src/tools/kbd.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AASpD,eAAO,MAAM,OAAO,EAAE,gBAUrB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { kbd } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
key: z.string().describe('Key label to render (e.g. "Ctrl+C", "Enter").'),
|
|
6
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
7
|
+
};
|
|
8
|
+
const inputSchema = z.object(inputShape);
|
|
9
|
+
export const kbdTool = {
|
|
10
|
+
name: 'bijou_kbd',
|
|
11
|
+
description: 'Render a keyboard key indicator (like an HTML <kbd> element). Shows a styled key label.',
|
|
12
|
+
inputSchema: inputShape,
|
|
13
|
+
handler: async (args) => {
|
|
14
|
+
const input = inputSchema.parse(args);
|
|
15
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
16
|
+
const result = kbd(input.key, { ctx });
|
|
17
|
+
return { content: [{ type: 'text', text: result }] };
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=kbd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.js","sourceRoot":"","sources":["../../src/tools/kbd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACzE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,yFAAyF;IACtG,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/tools/log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYpD,eAAO,MAAM,OAAO,EAAE,gBAYrB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { log } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
level: z.enum(['debug', 'info', 'warn', 'error']).describe('Log severity level.'),
|
|
6
|
+
message: z.string().describe('Log message text.'),
|
|
7
|
+
timestamp: z.boolean().optional().describe('Show timestamp prefix (default false).'),
|
|
8
|
+
prefix: z.boolean().optional().describe('Show level prefix (default true).'),
|
|
9
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
10
|
+
};
|
|
11
|
+
const inputSchema = z.object(inputShape);
|
|
12
|
+
export const logTool = {
|
|
13
|
+
name: 'bijou_log',
|
|
14
|
+
description: 'Render a styled log line with level icon and optional timestamp. Levels: debug, info, warn, error.',
|
|
15
|
+
inputSchema: inputShape,
|
|
16
|
+
handler: async (args) => {
|
|
17
|
+
const input = inputSchema.parse(args);
|
|
18
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
19
|
+
const result = log(input.level, input.message, {
|
|
20
|
+
timestamp: input.timestamp, prefix: input.prefix, ctx,
|
|
21
|
+
});
|
|
22
|
+
return { content: [{ type: 'text', text: result }] };
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/tools/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACjF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACpF,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC5E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,oGAAoG;IACjH,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE;YAC7C,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG;SACtD,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/tools/markdown.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAUpD,eAAO,MAAM,YAAY,EAAE,gBAW1B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { markdown } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
source: z.string().describe('Raw markdown source text.'),
|
|
6
|
+
width: z.number().optional().describe('Wrap width in columns (default 80).'),
|
|
7
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
8
|
+
};
|
|
9
|
+
const inputSchema = z.object(inputShape);
|
|
10
|
+
export const markdownTool = {
|
|
11
|
+
name: 'bijou_markdown',
|
|
12
|
+
description: 'Render markdown for terminal display with headings, lists, code blocks, bold, italic, links, blockquotes, and horizontal rules. Returns plain-text with Unicode formatting.',
|
|
13
|
+
inputSchema: inputShape,
|
|
14
|
+
handler: async (args) => {
|
|
15
|
+
const input = inputSchema.parse(args);
|
|
16
|
+
const tw = input.terminalWidth ?? input.width ?? 80;
|
|
17
|
+
const ctx = mcpContext(tw);
|
|
18
|
+
const result = markdown(input.source, { width: input.width, ctx });
|
|
19
|
+
return { content: [{ type: 'text', text: result }] };
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/tools/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC5E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,6KAA6K;IAC1L,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginator.d.ts","sourceRoot":"","sources":["../../src/tools/paginator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAWpD,eAAO,MAAM,aAAa,EAAE,gBAU3B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { paginator } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
current: z.number().describe('Current page number (1-based).'),
|
|
6
|
+
total: z.number().describe('Total number of pages.'),
|
|
7
|
+
style: z.enum(['dots', 'text']).optional().describe('Paginator style (default "dots").'),
|
|
8
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
9
|
+
};
|
|
10
|
+
const inputSchema = z.object(inputShape);
|
|
11
|
+
export const paginatorTool = {
|
|
12
|
+
name: 'bijou_paginator',
|
|
13
|
+
description: 'Render a page indicator showing current position. Styles: dots or text.',
|
|
14
|
+
inputSchema: inputShape,
|
|
15
|
+
handler: async (args) => {
|
|
16
|
+
const input = inputSchema.parse(args);
|
|
17
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
18
|
+
const result = paginator({ current: input.current, total: input.total, style: input.style, ctx });
|
|
19
|
+
return { content: [{ type: 'text', text: result }] };
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=paginator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginator.js","sourceRoot":"","sources":["../../src/tools/paginator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACxF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,yEAAyE;IACtF,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAClG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/tools/progress.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAapD,eAAO,MAAM,eAAe,EAAE,gBAa7B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { progressBar } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
percent: z.number().min(0).max(100).describe('Progress percentage (0-100).'),
|
|
6
|
+
width: z.number().optional().describe('Bar width in characters.'),
|
|
7
|
+
showPercent: z.boolean().optional().describe('Show percentage label (default true).'),
|
|
8
|
+
filled: z.string().optional().describe('Character for filled portion.'),
|
|
9
|
+
empty: z.string().optional().describe('Character for empty portion.'),
|
|
10
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
11
|
+
};
|
|
12
|
+
const inputSchema = z.object(inputShape);
|
|
13
|
+
export const progressBarTool = {
|
|
14
|
+
name: 'bijou_progress_bar',
|
|
15
|
+
description: 'Render a static progress bar showing completion percentage.',
|
|
16
|
+
inputSchema: inputShape,
|
|
17
|
+
handler: async (args) => {
|
|
18
|
+
const input = inputSchema.parse(args);
|
|
19
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
20
|
+
const result = progressBar(input.percent, {
|
|
21
|
+
width: input.width, showPercent: input.showPercent,
|
|
22
|
+
filled: input.filled, empty: input.empty, ctx,
|
|
23
|
+
});
|
|
24
|
+
return { content: [{ type: 'text', text: result }] };
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/tools/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC5E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACjE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACvE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACrE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,6DAA6D;IAC1E,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;YACxC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW;YAClD,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG;SAC9C,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"separator.d.ts","sourceRoot":"","sources":["../../src/tools/separator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAUpD,eAAO,MAAM,aAAa,EAAE,gBAU3B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { separator } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
label: z.string().optional().describe('Optional centered label text.'),
|
|
6
|
+
width: z.number().optional().describe('Line width (default terminal width).'),
|
|
7
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
8
|
+
};
|
|
9
|
+
const inputSchema = z.object(inputShape);
|
|
10
|
+
export const separatorTool = {
|
|
11
|
+
name: 'bijou_separator',
|
|
12
|
+
description: 'Render a horizontal separator line with an optional centered label.',
|
|
13
|
+
inputSchema: inputShape,
|
|
14
|
+
handler: async (args) => {
|
|
15
|
+
const input = inputSchema.parse(args);
|
|
16
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
17
|
+
const result = separator({ label: input.label, width: input.width, ctx });
|
|
18
|
+
return { content: [{ type: 'text', text: result }] };
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=separator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"separator.js","sourceRoot":"","sources":["../../src/tools/separator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACtE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC7E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,qEAAqE;IAClF,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/tools/skeleton.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAUpD,eAAO,MAAM,YAAY,EAAE,gBAU1B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { skeleton } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
width: z.number().optional().describe('Width of each skeleton line in characters.'),
|
|
6
|
+
lines: z.number().optional().describe('Number of skeleton lines (default 1).'),
|
|
7
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
8
|
+
};
|
|
9
|
+
const inputSchema = z.object(inputShape);
|
|
10
|
+
export const skeletonTool = {
|
|
11
|
+
name: 'bijou_skeleton',
|
|
12
|
+
description: 'Render a placeholder skeleton loader (shimmering block characters). Useful for showing loading state.',
|
|
13
|
+
inputSchema: inputShape,
|
|
14
|
+
handler: async (args) => {
|
|
15
|
+
const input = inputSchema.parse(args);
|
|
16
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
17
|
+
const result = skeleton({ width: input.width, lines: input.lines, ctx });
|
|
18
|
+
return { content: [{ type: 'text', text: result }] };
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/tools/skeleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACnF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC9E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,uGAAuG;IACpH,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../../src/tools/stepper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYpD,eAAO,MAAM,WAAW,EAAE,gBAUzB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { stepper } from '@flyingrobots/bijou';
|
|
3
|
+
import { mcpContext } from '../context.js';
|
|
4
|
+
const inputShape = {
|
|
5
|
+
steps: z.array(z.object({
|
|
6
|
+
label: z.string().describe('Display text for this step.'),
|
|
7
|
+
})).describe('Array of steps in the process.'),
|
|
8
|
+
current: z.number().describe('Zero-based index of the current (active) step.'),
|
|
9
|
+
terminalWidth: z.number().optional().describe('Terminal width override (default 80).'),
|
|
10
|
+
};
|
|
11
|
+
const inputSchema = z.object(inputShape);
|
|
12
|
+
export const stepperTool = {
|
|
13
|
+
name: 'bijou_stepper',
|
|
14
|
+
description: 'Render a horizontal step-progress indicator with checkmarks, dots, and connectors. Returns plain-text with Unicode characters.',
|
|
15
|
+
inputSchema: inputShape,
|
|
16
|
+
handler: async (args) => {
|
|
17
|
+
const input = inputSchema.parse(args);
|
|
18
|
+
const ctx = mcpContext(input.terminalWidth);
|
|
19
|
+
const result = stepper(input.steps, { current: input.current, ctx });
|
|
20
|
+
return { content: [{ type: 'text', text: result }] };
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=stepper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.js","sourceRoot":"","sources":["../../src/tools/stepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC1D,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC9E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAqB;IAC3C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,gIAAgI;IAC7I,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACF,CAAC"}
|