mrmd-server 0.1.15 → 0.1.17

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mrmd-server",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "description": "HTTP server for mrmd - run mrmd in any browser, access from anywhere",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/api/file.js CHANGED
@@ -22,10 +22,13 @@ export function createFileRoutes(ctx) {
22
22
  */
23
23
  router.get('/scan', async (req, res) => {
24
24
  try {
25
- const root = req.query.root || ctx.projectDir;
25
+ // Default to home directory (like Electron's file picker)
26
+ const os = await import('os');
27
+ const root = req.query.root || ctx.projectDir || os.default.homedir();
26
28
  const options = {
27
- extensions: req.query.extensions?.split(',') || ['.md'],
28
- maxDepth: parseInt(req.query.maxDepth) || 6,
29
+ // Default to both .md and .ipynb (like Electron)
30
+ extensions: req.query.extensions?.split(',') || ['.md', '.ipynb'],
31
+ maxDepth: parseInt(req.query.maxDepth) || 10,
29
32
  includeHidden: req.query.includeHidden === 'true',
30
33
  };
31
34
 
package/src/server.js CHANGED
@@ -191,20 +191,31 @@ export async function createServer(config) {
191
191
  app.use('/api/settings', createSettingsRoutes(context));
192
192
  app.use('/api/r', createRRoutes(context));
193
193
 
194
- // Proxy for localhost services (bash, pty, etc.)
194
+ // Proxy for localhost services (bash, pty, ai, etc.)
195
195
  // Routes /proxy/:port/* to http://127.0.0.1:port/*
196
+ // IMPORTANT: Forwards X-Api-Key-* headers for AI providers
196
197
  app.use('/proxy/:port', async (req, res) => {
197
198
  const { port } = req.params;
198
199
  const targetPath = req.url; // Includes query string
199
200
  const targetUrl = `http://127.0.0.1:${port}${targetPath}`;
200
201
 
202
+ // Build headers - forward all relevant headers including API keys
203
+ const forwardHeaders = {
204
+ 'Content-Type': req.headers['content-type'] || 'application/json',
205
+ 'Accept': req.headers['accept'] || '*/*',
206
+ };
207
+
208
+ // Forward X-* headers (API keys, juice level, model override, etc.)
209
+ for (const [key, value] of Object.entries(req.headers)) {
210
+ if (key.toLowerCase().startsWith('x-')) {
211
+ forwardHeaders[key] = value;
212
+ }
213
+ }
214
+
201
215
  try {
202
216
  const response = await fetch(targetUrl, {
203
217
  method: req.method,
204
- headers: {
205
- 'Content-Type': req.headers['content-type'] || 'application/json',
206
- 'Accept': req.headers['accept'] || '*/*',
207
- },
218
+ headers: forwardHeaders,
208
219
  body: ['GET', 'HEAD'].includes(req.method) ? undefined : JSON.stringify(req.body),
209
220
  });
210
221
 
@@ -324,9 +335,13 @@ export async function createServer(config) {
324
335
 
325
336
  upstream.on('open', () => {
326
337
  syncWss.handleUpgrade(request, socket, head, (clientWs) => {
327
- // Bidirectional proxy
328
- clientWs.on('message', (data) => upstream.send(data));
329
- upstream.on('message', (data) => clientWs.send(data));
338
+ // Bidirectional proxy - preserve message type (binary/text)
339
+ clientWs.on('message', (data, isBinary) => {
340
+ upstream.send(data, { binary: isBinary });
341
+ });
342
+ upstream.on('message', (data, isBinary) => {
343
+ clientWs.send(data, { binary: isBinary });
344
+ });
330
345
  clientWs.on('close', () => upstream.close());
331
346
  upstream.on('close', () => clientWs.close());
332
347
  clientWs.on('error', () => upstream.close());