@weaaare/mcp-nvda-auditor 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 @@
1
+ {"version":3,"file":"nvda.adapter.js","sourceRoot":"","sources":["../../../src/screen-readers/nvda/nvda.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAO1C,MAAM,eAAe,GAAG,GAA4B,EAAE;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACjC,OAAO;QACL,6EAA6E;QAC7E,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,cAAc,EAAE,EAAE,CAAC,cAAc;QACjC,qBAAqB,EAAE,EAAE,CAAC,qBAAqB;QAC/C,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,QAAQ,EAAE,EAAE,CAAC,QAAQ;QAErB,6EAA6E;QAC7E,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;QACvC,qBAAqB,EAAE,EAAE,CAAC,qBAAqB;QAC/C,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAE3D,6EAA6E;QAC7E,cAAc,EAAE,EAAE,CAAC,cAAc;QACjC,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,qBAAqB,EAAE,EAAE,CAAC,qBAAqB;QAC/C,yBAAyB,EAAE,EAAE,CAAC,yBAAyB;QAEvD,6EAA6E;QAC7E,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;QAC3C,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;QACrC,oBAAoB,EAAE,EAAE,CAAC,oBAAoB;QAC7C,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,sBAAsB,EAAE,EAAE,CAAC,sBAAsB;QACjD,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,sBAAsB,EAAE,EAAE,CAAC,sBAAsB;QACjD,qBAAqB,EAAE,EAAE,CAAC,qBAAqB;QAC/C,yBAAyB,EAAE,EAAE,CAAC,yBAAyB;QACvD,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;QAC3C,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QAEnD,6EAA6E;QAC7E,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,sBAAsB,EAAE,EAAE,CAAC,sBAAsB;QAEjD,6EAA6E;QAC7E,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;QAC3C,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;QACrC,oBAAoB,EAAE,EAAE,CAAC,oBAAoB;QAC7C,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;QAEvC,6EAA6E;QAC7E,cAAc,EAAE,EAAE,CAAC,cAAc;QACjC,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,sBAAsB,EAAE,EAAE,CAAC,sBAAsB;QAEjD,6EAA6E;QAC7E,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;QACvC,qBAAqB,EAAE,EAAE,CAAC,qBAAqB;QAC/C,oBAAoB,EAAE,EAAE,CAAC,oBAAoB;QAC7C,wBAAwB,EAAE,EAAE,CAAC,wBAAwB;QACrD,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;QAC3C,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;QAC3C,oBAAoB,EAAE,EAAE,CAAC,oBAAoB;QAC7C,wBAAwB,EAAE,EAAE,CAAC,wBAAwB;QACrD,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;QACnD,2BAA2B,EAAE,EAAE,CAAC,2BAA2B;QAC3D,wBAAwB,EAAE,EAAE,CAAC,wBAAwB;QACrD,4BAA4B,EAAE,EAAE,CAAC,4BAA4B;QAC7D,sBAAsB,EAAE,EAAE,CAAC,sBAAsB;QACjD,sBAAsB,EAAE,EAAE,CAAC,sBAAsB;QAEjD,6EAA6E;QAC7E,+BAA+B,EAAE,EAAE,CAAC,+BAA+B;QACnE,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,sBAAsB,EAAE,EAAE,CAAC,sBAAsB;QACjD,4BAA4B,EAAE,EAAE,CAAC,4BAA4B;QAC7D,qBAAqB,EAAE,EAAE,CAAC,qBAAqB;QAE/C,6EAA6E;QAC7E,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,oBAAoB,EAAE,EAAE,CAAC,oBAAoB;QAC7C,oBAAoB,EAAE,EAAE,CAAC,oBAAoB;QAC7C,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;QACrC,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,cAAc,EAAE,EAAE,CAAC,cAAc;QACjC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;QAE3C,6EAA6E;QAC7E,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;QAE3C,6EAA6E;QAC7E,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,WAAW,EAAE,EAAE,CAAC,WAAW;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,WAAW;IACtB,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,YAAY,EAAE,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,YAAY,EAAE,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,iCAAiC,EAAE,YAAY,EAAE,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,gBAAgB,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,oBAAoB,OAAO,gBAAgB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,eAAqD,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,sBAAsB,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,iFAAiF;QACjF,yDAAyD;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,oBAAoB;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAsB;QAChC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;QACzC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAuB,EAAE,CAAC,CAAC;QAClE,OAAO;YACL,MAAM,EAAE,eAAe;YACvB,YAAY,EAAE,GAAG,MAAM,WAAW,UAAU,EAAE;SAC/C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { ScreenReaderPort, ToolModule } from '@weaaare/mcp-auditor-core';
2
+ export declare const createNvdaTools: (screenReader: ScreenReaderPort) => ToolModule;
3
+ //# sourceMappingURL=nvda.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nvda.tools.d.ts","sourceRoot":"","sources":["../../../src/screen-readers/nvda/nvda.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAe,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA0d3F,eAAO,MAAM,eAAe,GAAI,cAAc,gBAAgB,KAAG,UAG/D,CAAC"}
@@ -0,0 +1,442 @@
1
+ import { result } from '@weaaare/mcp-auditor-core';
2
+ const PERFORM_COMMAND_NAMES = [
3
+ // Basic navigation
4
+ 'moveToNext',
5
+ 'moveToPrevious',
6
+ 'readNextFocusableItem',
7
+ 'performDefaultActionForItem',
8
+ 'activate',
9
+ // Headings
10
+ 'moveToNextHeading',
11
+ 'moveToPreviousHeading',
12
+ 'moveToNextHeadingLevel1',
13
+ 'moveToPreviousHeadingLevel1',
14
+ 'moveToNextHeadingLevel2',
15
+ 'moveToPreviousHeadingLevel2',
16
+ 'moveToNextHeadingLevel3',
17
+ 'moveToPreviousHeadingLevel3',
18
+ 'moveToNextHeadingLevel4',
19
+ 'moveToPreviousHeadingLevel4',
20
+ 'moveToNextHeadingLevel5',
21
+ 'moveToPreviousHeadingLevel5',
22
+ 'moveToNextHeadingLevel6',
23
+ 'moveToPreviousHeadingLevel6',
24
+ // Links
25
+ 'moveToNextLink',
26
+ 'moveToPreviousLink',
27
+ 'moveToNextUnvisitedLink',
28
+ 'moveToPreviousUnvisitedLink',
29
+ 'moveToNextVisitedLink',
30
+ 'moveToPreviousVisitedLink',
31
+ // Forms
32
+ 'moveToNextFormField',
33
+ 'moveToPreviousFormField',
34
+ 'moveToNextButton',
35
+ 'moveToPreviousButton',
36
+ 'moveToNextCheckbox',
37
+ 'moveToPreviousCheckbox',
38
+ 'moveToNextComboBox',
39
+ 'moveToPreviousComboBox',
40
+ 'moveToNextRadioButton',
41
+ 'moveToPreviousRadioButton',
42
+ 'moveToNextEditField',
43
+ 'moveToPreviousEditField',
44
+ // Landmarks
45
+ 'moveToNextLandmark',
46
+ 'moveToPreviousLandmark',
47
+ // Tables
48
+ 'moveToNextTable',
49
+ 'moveToPreviousTable',
50
+ 'moveToNextColumn',
51
+ 'moveToPreviousColumn',
52
+ 'moveToNextRow',
53
+ 'moveToPreviousRow',
54
+ // Lists
55
+ 'moveToNextList',
56
+ 'moveToPreviousList',
57
+ 'moveToNextListItem',
58
+ 'moveToPreviousListItem',
59
+ // Other browse mode elements
60
+ 'moveToNextGraphic',
61
+ 'moveToPreviousGraphic',
62
+ 'moveToNextBlockQuote',
63
+ 'moveToPreviousBlockQuote',
64
+ 'moveToNextNonLinkedText',
65
+ 'moveToPreviousNonLinkedText',
66
+ 'moveToNextSeparator',
67
+ 'moveToPreviousSeparator',
68
+ 'moveToNextFrame',
69
+ 'moveToPreviousFrame',
70
+ 'moveToNextAnnotation',
71
+ 'moveToPreviousAnnotation',
72
+ 'moveToNextSpellingError',
73
+ 'moveToPreviousSpellingError',
74
+ 'moveToNextEmbeddedObject',
75
+ 'moveToPreviousEmbeddedObject',
76
+ 'moveToStartOfContainer',
77
+ 'movePastEndOfContainer',
78
+ // Browse mode control
79
+ 'toggleBetweenBrowseAndFocusMode',
80
+ 'exitFocusMode',
81
+ 'browseModeElementsList',
82
+ 'toggleSingleLetterNavigation',
83
+ 'refreshBrowseDocument',
84
+ // Reading and reporting
85
+ 'sayAll',
86
+ 'readLine',
87
+ 'readCurrentSelection',
88
+ 'reportTextFormatting',
89
+ 'reportTitle',
90
+ 'reportCurrentFocus',
91
+ 'readActiveWindow',
92
+ 'reportStatusBar',
93
+ 'reportDateTime',
94
+ 'reportClipboardText',
95
+ // Find
96
+ 'find',
97
+ 'findNext',
98
+ 'findPrevious',
99
+ 'openLongDescription',
100
+ // Speech
101
+ 'stopSpeech',
102
+ 'pauseSpeech',
103
+ ];
104
+ function defineTools() {
105
+ return [
106
+ {
107
+ name: 'nvda_start',
108
+ description: 'Start NVDA screen reader. Must be called before any other NVDA commands. Requires Windows.',
109
+ inputSchema: {
110
+ type: 'object',
111
+ properties: {},
112
+ },
113
+ },
114
+ {
115
+ name: 'nvda_stop',
116
+ description: 'Stop NVDA screen reader. Call when done to properly clean up.',
117
+ inputSchema: {
118
+ type: 'object',
119
+ properties: {},
120
+ },
121
+ },
122
+ {
123
+ name: 'nvda_next',
124
+ description: 'Move the NVDA cursor to the next item. Equivalent to pressing Down Arrow in browse mode.',
125
+ inputSchema: {
126
+ type: 'object',
127
+ properties: {},
128
+ },
129
+ },
130
+ {
131
+ name: 'nvda_previous',
132
+ description: 'Move the NVDA cursor to the previous item. Equivalent to pressing Up Arrow in browse mode.',
133
+ inputSchema: {
134
+ type: 'object',
135
+ properties: {},
136
+ },
137
+ },
138
+ {
139
+ name: 'nvda_act',
140
+ description: 'Perform the default action for the current item. Equivalent to pressing Enter.',
141
+ inputSchema: {
142
+ type: 'object',
143
+ properties: {},
144
+ },
145
+ },
146
+ {
147
+ name: 'nvda_interact',
148
+ description: 'Interact with the current item. No-op on NVDA (provided for cross-screen-reader API compatibility).',
149
+ inputSchema: {
150
+ type: 'object',
151
+ properties: {},
152
+ },
153
+ },
154
+ {
155
+ name: 'nvda_stop_interacting',
156
+ description: 'Stop interacting with the current item. No-op on NVDA (provided for cross-screen-reader API compatibility).',
157
+ inputSchema: {
158
+ type: 'object',
159
+ properties: {},
160
+ },
161
+ },
162
+ {
163
+ name: 'nvda_press',
164
+ description: [
165
+ "Press a key on the focused item (e.g., 'Enter', 'Tab', 'ArrowDown', 'Control+f').",
166
+ '',
167
+ 'NVDA single-letter browse mode shortcuts (work in browse mode directly via nvda_press):',
168
+ ' h / Shift+h — next/previous heading',
169
+ ' 1-6 / Shift+1-6 — next/previous heading at level 1-6',
170
+ ' k / Shift+k — next/previous link',
171
+ ' f / Shift+f — next/previous form field',
172
+ ' d / Shift+d — next/previous landmark region',
173
+ ' b / Shift+b — next/previous button',
174
+ ' x / Shift+x — next/previous checkbox',
175
+ ' r / Shift+r — next/previous radio button',
176
+ ' e / Shift+e — next/previous edit field',
177
+ ' c / Shift+c — next/previous combo box',
178
+ ' t / Shift+t — next/previous table',
179
+ ' l / Shift+l — next/previous list',
180
+ ' i / Shift+i — next/previous list item',
181
+ ' g / Shift+g — next/previous graphic',
182
+ 'Prefer nvda_perform for semantic navigation commands (cross-platform named commands).',
183
+ ].join('\n'),
184
+ inputSchema: {
185
+ type: 'object',
186
+ properties: {
187
+ key: {
188
+ type: 'string',
189
+ description: "Key to press (e.g., 'Enter', 'Tab', 'ArrowDown', 'h', 'Control+f'). Use modifier+key syntax for combinations.",
190
+ },
191
+ },
192
+ required: ['key'],
193
+ },
194
+ },
195
+ {
196
+ name: 'nvda_type',
197
+ description: 'Type text into the focused item.',
198
+ inputSchema: {
199
+ type: 'object',
200
+ properties: {
201
+ text: {
202
+ type: 'string',
203
+ description: 'Text to type into the focused item',
204
+ },
205
+ },
206
+ required: ['text'],
207
+ },
208
+ },
209
+ {
210
+ name: 'nvda_perform',
211
+ description: [
212
+ 'Perform a named NVDA keyboard command for semantic navigation.',
213
+ '',
214
+ 'KEY COMMANDS FOR WEB AUDITING:',
215
+ ' Headings: moveToNextHeading / moveToPreviousHeading',
216
+ ' Heading levels: moveToNextHeadingLevel1..6 / moveToPreviousHeadingLevel1..6',
217
+ ' Links: moveToNextLink / moveToPreviousLink',
218
+ ' Unvisited links: moveToNextUnvisitedLink / moveToPreviousUnvisitedLink',
219
+ ' Landmarks: moveToNextLandmark / moveToPreviousLandmark',
220
+ ' Form fields: moveToNextFormField / moveToPreviousFormField',
221
+ ' Buttons: moveToNextButton / moveToPreviousButton',
222
+ ' Checkboxes: moveToNextCheckbox / moveToPreviousCheckbox',
223
+ ' Combo boxes: moveToNextComboBox / moveToPreviousComboBox',
224
+ ' Radio buttons: moveToNextRadioButton / moveToPreviousRadioButton',
225
+ ' Edit fields: moveToNextEditField / moveToPreviousEditField',
226
+ ' Tables: moveToNextTable / moveToPreviousTable',
227
+ ' Table navigation: moveToNextColumn / moveToPreviousColumn / moveToNextRow / moveToPreviousRow',
228
+ ' Lists: moveToNextList / moveToPreviousList',
229
+ ' List items: moveToNextListItem / moveToPreviousListItem',
230
+ ' Graphics: moveToNextGraphic / moveToPreviousGraphic',
231
+ ' Elements list dialog: browseModeElementsList (NVDA+F7 — shows all headings/links/forms)',
232
+ ' Toggle browse/focus mode: toggleBetweenBrowseAndFocusMode',
233
+ ' Say all: sayAll',
234
+ ' Report title: reportTitle',
235
+ ' Report focus: reportCurrentFocus',
236
+ ' Find text: find / findNext / findPrevious',
237
+ ' Text formatting: reportTextFormatting',
238
+ ' Stop speech: stopSpeech',
239
+ ].join('\n'),
240
+ inputSchema: {
241
+ type: 'object',
242
+ properties: {
243
+ command: {
244
+ type: 'string',
245
+ enum: [...PERFORM_COMMAND_NAMES],
246
+ description: 'Named NVDA keyboard command to execute',
247
+ },
248
+ },
249
+ required: ['command'],
250
+ },
251
+ },
252
+ {
253
+ name: 'nvda_item_text',
254
+ description: 'Get the text of the item currently in the NVDA cursor. On NVDA this is the same as the last spoken phrase.',
255
+ inputSchema: {
256
+ type: 'object',
257
+ properties: {},
258
+ },
259
+ },
260
+ {
261
+ name: 'nvda_last_spoken_phrase',
262
+ description: 'Get the last phrase spoken by NVDA.',
263
+ inputSchema: {
264
+ type: 'object',
265
+ properties: {},
266
+ },
267
+ },
268
+ {
269
+ name: 'nvda_spoken_phrase_log',
270
+ description: 'Get the log of all spoken phrases for this NVDA session.',
271
+ inputSchema: {
272
+ type: 'object',
273
+ properties: {},
274
+ },
275
+ },
276
+ {
277
+ name: 'nvda_item_text_log',
278
+ description: 'Get the log of all visited item text for this NVDA session. On NVDA this is the same as the spoken phrase log.',
279
+ inputSchema: {
280
+ type: 'object',
281
+ properties: {},
282
+ },
283
+ },
284
+ {
285
+ name: 'nvda_clear_spoken_phrase_log',
286
+ description: 'Clear the log of all spoken phrases for this NVDA session.',
287
+ inputSchema: {
288
+ type: 'object',
289
+ properties: {},
290
+ },
291
+ },
292
+ {
293
+ name: 'nvda_clear_item_text_log',
294
+ description: 'Clear the log of all visited item text for this NVDA session.',
295
+ inputSchema: {
296
+ type: 'object',
297
+ properties: {},
298
+ },
299
+ },
300
+ {
301
+ name: 'nvda_click',
302
+ description: 'Click the mouse at the current NVDA cursor position.',
303
+ inputSchema: {
304
+ type: 'object',
305
+ properties: {
306
+ button: {
307
+ type: 'string',
308
+ enum: ['left', 'right'],
309
+ description: 'Mouse button to click (default: left)',
310
+ },
311
+ clickCount: {
312
+ type: 'number',
313
+ description: 'Number of times to click: 1, 2, or 3 (default: 1)',
314
+ },
315
+ },
316
+ },
317
+ },
318
+ {
319
+ name: 'nvda_detect',
320
+ description: 'Detect whether NVDA is supported on the current system. Returns true on Windows, false on macOS or Linux.',
321
+ inputSchema: {
322
+ type: 'object',
323
+ properties: {},
324
+ },
325
+ },
326
+ {
327
+ name: 'nvda_default',
328
+ description: 'Check whether NVDA is the default screen reader for this OS. Returns true on Windows, false elsewhere.',
329
+ inputSchema: {
330
+ type: 'object',
331
+ properties: {},
332
+ },
333
+ },
334
+ ];
335
+ }
336
+ function buildHandlers(screenReader) {
337
+ const handlers = new Map();
338
+ handlers.set('nvda_start', async () => {
339
+ const res = await screenReader.start();
340
+ return result.json(res);
341
+ });
342
+ handlers.set('nvda_stop', async () => {
343
+ const res = await screenReader.stop();
344
+ return result.json(res);
345
+ });
346
+ handlers.set('nvda_next', async () => {
347
+ const res = await screenReader.next();
348
+ return result.json(res);
349
+ });
350
+ handlers.set('nvda_previous', async () => {
351
+ const res = await screenReader.previous();
352
+ return result.json(res);
353
+ });
354
+ handlers.set('nvda_act', async () => {
355
+ const res = await screenReader.act();
356
+ return result.json(res);
357
+ });
358
+ handlers.set('nvda_interact', async () => {
359
+ const res = await screenReader.interact();
360
+ return result.json(res);
361
+ });
362
+ handlers.set('nvda_stop_interacting', async () => {
363
+ const res = await screenReader.stopInteracting();
364
+ return result.json(res);
365
+ });
366
+ handlers.set('nvda_press', async (args) => {
367
+ if (!args.key) {
368
+ throw new Error('key parameter is required');
369
+ }
370
+ const res = await screenReader.press(args.key);
371
+ return result.json(res);
372
+ });
373
+ handlers.set('nvda_type', async (args) => {
374
+ if (!args.text) {
375
+ throw new Error('text parameter is required');
376
+ }
377
+ const res = await screenReader.type(args.text);
378
+ return result.json(res);
379
+ });
380
+ handlers.set('nvda_perform', async (args) => {
381
+ if (!args.command) {
382
+ throw new Error('command parameter is required');
383
+ }
384
+ const res = await screenReader.perform(args.command);
385
+ return result.json(res);
386
+ });
387
+ handlers.set('nvda_item_text', async () => {
388
+ const text = await screenReader.itemText();
389
+ return result.text(text);
390
+ });
391
+ handlers.set('nvda_last_spoken_phrase', async () => {
392
+ const phrase = await screenReader.lastSpokenPhrase();
393
+ return result.text(phrase);
394
+ });
395
+ handlers.set('nvda_spoken_phrase_log', async () => {
396
+ const log = await screenReader.spokenPhraseLog();
397
+ return result.json(log);
398
+ });
399
+ handlers.set('nvda_item_text_log', async () => {
400
+ const log = await screenReader.itemTextLog();
401
+ return result.json(log);
402
+ });
403
+ handlers.set('nvda_clear_spoken_phrase_log', async () => {
404
+ await screenReader.clearSpokenPhraseLog();
405
+ return result.text('Spoken phrase log cleared');
406
+ });
407
+ handlers.set('nvda_clear_item_text_log', async () => {
408
+ await screenReader.clearItemTextLog();
409
+ return result.text('Item text log cleared');
410
+ });
411
+ handlers.set('nvda_click', async (args) => {
412
+ const res = await screenReader.click({
413
+ button: args.button ?? 'left',
414
+ clickCount: args.clickCount ?? 1,
415
+ });
416
+ return result.json(res);
417
+ });
418
+ handlers.set('nvda_detect', async () => {
419
+ const supported = await screenReader.detect();
420
+ return result.json({
421
+ supported,
422
+ message: supported
423
+ ? 'NVDA is supported on this Windows system'
424
+ : 'NVDA is not supported on this system (Windows required)',
425
+ });
426
+ });
427
+ handlers.set('nvda_default', async () => {
428
+ const isDefault = await screenReader.isDefault();
429
+ return result.json({
430
+ isDefault,
431
+ message: isDefault
432
+ ? 'NVDA is the default screen reader for this OS'
433
+ : 'NVDA is not the default screen reader for this OS',
434
+ });
435
+ });
436
+ return handlers;
437
+ }
438
+ export const createNvdaTools = (screenReader) => ({
439
+ tools: defineTools(),
440
+ handlers: buildHandlers(screenReader),
441
+ });
442
+ //# sourceMappingURL=nvda.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nvda.tools.js","sourceRoot":"","sources":["../../../src/screen-readers/nvda/nvda.tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD,MAAM,qBAAqB,GAAG;IAC5B,mBAAmB;IACnB,YAAY;IACZ,gBAAgB;IAChB,uBAAuB;IACvB,6BAA6B;IAC7B,UAAU;IACV,WAAW;IACX,mBAAmB;IACnB,uBAAuB;IACvB,yBAAyB;IACzB,6BAA6B;IAC7B,yBAAyB;IACzB,6BAA6B;IAC7B,yBAAyB;IACzB,6BAA6B;IAC7B,yBAAyB;IACzB,6BAA6B;IAC7B,yBAAyB;IACzB,6BAA6B;IAC7B,yBAAyB;IACzB,6BAA6B;IAC7B,QAAQ;IACR,gBAAgB;IAChB,oBAAoB;IACpB,yBAAyB;IACzB,6BAA6B;IAC7B,uBAAuB;IACvB,2BAA2B;IAC3B,QAAQ;IACR,qBAAqB;IACrB,yBAAyB;IACzB,kBAAkB;IAClB,sBAAsB;IACtB,oBAAoB;IACpB,wBAAwB;IACxB,oBAAoB;IACpB,wBAAwB;IACxB,uBAAuB;IACvB,2BAA2B;IAC3B,qBAAqB;IACrB,yBAAyB;IACzB,YAAY;IACZ,oBAAoB;IACpB,wBAAwB;IACxB,SAAS;IACT,iBAAiB;IACjB,qBAAqB;IACrB,kBAAkB;IAClB,sBAAsB;IACtB,eAAe;IACf,mBAAmB;IACnB,QAAQ;IACR,gBAAgB;IAChB,oBAAoB;IACpB,oBAAoB;IACpB,wBAAwB;IACxB,6BAA6B;IAC7B,mBAAmB;IACnB,uBAAuB;IACvB,sBAAsB;IACtB,0BAA0B;IAC1B,yBAAyB;IACzB,6BAA6B;IAC7B,qBAAqB;IACrB,yBAAyB;IACzB,iBAAiB;IACjB,qBAAqB;IACrB,sBAAsB;IACtB,0BAA0B;IAC1B,yBAAyB;IACzB,6BAA6B;IAC7B,0BAA0B;IAC1B,8BAA8B;IAC9B,wBAAwB;IACxB,wBAAwB;IACxB,sBAAsB;IACtB,iCAAiC;IACjC,eAAe;IACf,wBAAwB;IACxB,8BAA8B;IAC9B,uBAAuB;IACvB,wBAAwB;IACxB,QAAQ;IACR,UAAU;IACV,sBAAsB;IACtB,sBAAsB;IACtB,aAAa;IACb,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;IACjB,gBAAgB;IAChB,qBAAqB;IACrB,OAAO;IACP,MAAM;IACN,UAAU;IACV,cAAc;IACd,qBAAqB;IACrB,SAAS;IACT,YAAY;IACZ,aAAa;CACL,CAAC;AAIX,SAAS,WAAW;IAClB,OAAO;QACL;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EACT,4FAA4F;YAC9F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,+DAA+D;YAC5E,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EACT,0FAA0F;YAC5F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,eAAe;YACrB,WAAW,EACT,4FAA4F;YAC9F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,gFAAgF;YAC7F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,eAAe;YACrB,WAAW,EACT,qGAAqG;YACvG,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EACT,6GAA6G;YAC/G,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE;gBACX,mFAAmF;gBACnF,EAAE;gBACF,yFAAyF;gBACzF,uCAAuC;gBACvC,wDAAwD;gBACxD,oCAAoC;gBACpC,0CAA0C;gBAC1C,+CAA+C;gBAC/C,sCAAsC;gBACtC,wCAAwC;gBACxC,4CAA4C;gBAC5C,0CAA0C;gBAC1C,yCAAyC;gBACzC,qCAAqC;gBACrC,oCAAoC;gBACpC,yCAAyC;gBACzC,uCAAuC;gBACvC,uFAAuF;aACxF,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,GAAG,EAAE;wBACH,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,+GAA+G;qBAClH;iBACF;gBACD,QAAQ,EAAE,CAAC,KAAK,CAAC;aAClB;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,kCAAkC;YAC/C,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oCAAoC;qBAClD;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB;SACF;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE;gBACX,gEAAgE;gBAChE,EAAE;gBACF,gCAAgC;gBAChC,uDAAuD;gBACvD,+EAA+E;gBAC/E,8CAA8C;gBAC9C,0EAA0E;gBAC1E,0DAA0D;gBAC1D,8DAA8D;gBAC9D,oDAAoD;gBACpD,2DAA2D;gBAC3D,4DAA4D;gBAC5D,oEAAoE;gBACpE,8DAA8D;gBAC9D,iDAAiD;gBACjD,iGAAiG;gBACjG,8CAA8C;gBAC9C,2DAA2D;gBAC3D,uDAAuD;gBACvD,2FAA2F;gBAC3F,6DAA6D;gBAC7D,mBAAmB;gBACnB,6BAA6B;gBAC7B,oCAAoC;gBACpC,6CAA6C;gBAC7C,yCAAyC;gBACzC,2BAA2B;aAC5B,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,GAAG,qBAAqB,CAAyB;wBACxD,WAAW,EAAE,wCAAwC;qBACtD;iBACF;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;aACtB;SACF;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,4GAA4G;YAC9G,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EAAE,qCAAqC;YAClD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,0DAA0D;YACvE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EACT,gHAAgH;YAClH,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,8BAA8B;YACpC,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,WAAW,EAAE,+DAA+D;YAC5E,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,sDAAsD;YACnE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;wBACvB,WAAW,EAAE,uCAAuC;qBACrD;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mDAAmD;qBACjE;iBACF;aACF;SACF;QACD;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EACT,2GAA2G;YAC7G,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,wGAAwG;YAC1G,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,YAA8B;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEhD,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACxC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAiB,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;QACrD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,YAAY,CAAC,oBAAoB,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC;YACnC,MAAM,EAAG,IAAI,CAAC,MAA2B,IAAI,MAAM;YACnD,UAAU,EAAG,IAAI,CAAC,UAAqB,IAAI,CAAC;SAC7C,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,IAAI,CAAC;YACjB,SAAS;YACT,OAAO,EAAE,SAAS;gBAChB,CAAC,CAAC,0CAA0C;gBAC5C,CAAC,CAAC,yDAAyD;SAC9D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,IAAI,CAAC;YACjB,SAAS;YACT,OAAO,EAAE,SAAS;gBAChB,CAAC,CAAC,+CAA+C;gBACjD,CAAC,CAAC,mDAAmD;SACxD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,YAA8B,EAAc,EAAE,CAAC,CAAC;IAC9E,KAAK,EAAE,WAAW,EAAE;IACpB,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC;CACtC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ export declare const createServer: () => Server;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAuBnE,eAAO,MAAM,YAAY,QAAO,MA8D/B,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,57 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
3
+ import { AuditSession, createAuditTools, createReportTools, listResources, readResource, ToolRegistry, } from '@weaaare/mcp-auditor-core';
4
+ import packageVersion from '../package.json' with { type: 'json' };
5
+ import { getNvdaPromptMessages, listNvdaPrompts } from './prompts/audit-prompts.js';
6
+ import { NvdaAdapter } from './screen-readers/nvda/nvda.adapter.js';
7
+ import { createNvdaTools } from './screen-readers/nvda/nvda.tools.js';
8
+ import { createSetupTools } from './setup/setup-check.tools.js';
9
+ export const createServer = () => {
10
+ const server = new Server({
11
+ name: 'mcp-nvda-auditor',
12
+ version: packageVersion.version,
13
+ }, {
14
+ capabilities: {
15
+ tools: {},
16
+ prompts: {},
17
+ resources: {},
18
+ },
19
+ });
20
+ const nvdaAdapter = new NvdaAdapter();
21
+ const auditSession = new AuditSession();
22
+ const registry = new ToolRegistry();
23
+ registry.register(createNvdaTools(nvdaAdapter));
24
+ registry.register(createSetupTools(nvdaAdapter));
25
+ registry.register(createAuditTools(auditSession));
26
+ registry.register(createReportTools(auditSession));
27
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
28
+ tools: registry.listTools(),
29
+ }));
30
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
31
+ const { name, arguments: args } = request.params;
32
+ return registry.callTool(name, args ?? {});
33
+ });
34
+ server.setRequestHandler(ListPromptsRequestSchema, async () => ({
35
+ prompts: listNvdaPrompts(),
36
+ }));
37
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
38
+ const { name, arguments: args } = request.params;
39
+ const messages = getNvdaPromptMessages(name, args ?? {});
40
+ return {
41
+ description: `NVDA audit prompt: ${name}`,
42
+ messages,
43
+ };
44
+ });
45
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({
46
+ resources: listResources(auditSession),
47
+ }));
48
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
49
+ const { uri } = request.params;
50
+ const content = readResource(uri, auditSession);
51
+ return {
52
+ contents: [content],
53
+ };
54
+ });
55
+ return server;
56
+ };
57
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ScreenReaderPort, ToolModule } from '@weaaare/mcp-auditor-core';
2
+ export declare const createSetupTools: (screenReader: ScreenReaderPort) => ToolModule;
3
+ //# sourceMappingURL=setup-check.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-check.tools.d.ts","sourceRoot":"","sources":["../../src/setup/setup-check.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAe,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA0D3F,eAAO,MAAM,gBAAgB,GAAI,cAAc,gBAAgB,KAAG,UAGhE,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { result } from '@weaaare/mcp-auditor-core';
2
+ function defineTools() {
3
+ return [
4
+ {
5
+ name: 'check_setup',
6
+ description: 'Check if the NVDA environment is properly configured. Verifies Windows platform, NVDA support, and whether NVDA is the default screen reader. Run this before starting an audit.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {},
10
+ },
11
+ },
12
+ ];
13
+ }
14
+ function buildHandlers(screenReader) {
15
+ const handlers = new Map();
16
+ handlers.set('check_setup', async () => {
17
+ const checks = {};
18
+ checks.platform = process.platform;
19
+ checks.isWindows = process.platform === 'win32';
20
+ if (!checks.isWindows) {
21
+ checks.warning =
22
+ 'NVDA requires Windows. This server can run on other platforms for development purposes, but nvda_start will fail on non-Windows systems.';
23
+ }
24
+ try {
25
+ checks.nvdaDetected = await screenReader.detect();
26
+ }
27
+ catch {
28
+ checks.nvdaDetected = false;
29
+ checks.nvdaDetectError = 'Could not detect NVDA (expected on non-Windows platforms)';
30
+ }
31
+ try {
32
+ checks.nvdaIsDefault = await screenReader.isDefault();
33
+ }
34
+ catch {
35
+ checks.nvdaIsDefault = false;
36
+ }
37
+ const ready = checks.isWindows === true && checks.nvdaDetected === true;
38
+ return result.json({
39
+ ready,
40
+ checks,
41
+ recommendation: ready
42
+ ? 'Environment is ready. Call nvda_start to begin the audit.'
43
+ : 'Environment is not ready. Ensure you are running on Windows with NVDA installed. Download NVDA at https://www.nvaccess.org/',
44
+ });
45
+ });
46
+ return handlers;
47
+ }
48
+ export const createSetupTools = (screenReader) => ({
49
+ tools: defineTools(),
50
+ handlers: buildHandlers(screenReader),
51
+ });
52
+ //# sourceMappingURL=setup-check.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-check.tools.js","sourceRoot":"","sources":["../../src/setup/setup-check.tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD,SAAS,WAAW;IAClB,OAAO;QACL;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EACT,kLAAkL;YACpL,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,YAA8B;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEhD,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACnC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO;gBACZ,0IAA0I,CAAC;QAC/I,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,YAAY,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;YAC5B,MAAM,CAAC,eAAe,GAAG,2DAA2D,CAAC;QACvF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,aAAa,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;QAC/B,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC;QAExE,OAAO,MAAM,CAAC,IAAI,CAAC;YACjB,KAAK;YACL,MAAM;YACN,cAAc,EAAE,KAAK;gBACnB,CAAC,CAAC,2DAA2D;gBAC7D,CAAC,CAAC,6HAA6H;SAClI,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,YAA8B,EAAc,EAAE,CAAC,CAAC;IAC/E,KAAK,EAAE,WAAW,EAAE;IACpB,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC;CACtC,CAAC,CAAC"}