mandala-computer-mcp 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -32
- package/dist/api.d.ts +6 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +13 -3
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +28 -9
- package/dist/cli.js.map +1 -1
- package/dist/credentials.d.ts +55 -0
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +104 -2
- package/dist/credentials.js.map +1 -1
- package/dist/errors.d.ts +25 -8
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +62 -34
- package/dist/errors.js.map +1 -1
- package/dist/format.d.ts +9 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +17 -1
- package/dist/format.js.map +1 -1
- package/dist/http.d.ts +33 -7
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +344 -61
- package/dist/http.js.map +1 -1
- package/dist/paths.d.ts +7 -5
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +17 -7
- package/dist/paths.js.map +1 -1
- package/dist/secret-store.d.ts +2 -1
- package/dist/secret-store.d.ts.map +1 -1
- package/dist/secret-store.js +6 -1
- package/dist/secret-store.js.map +1 -1
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +24 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +6 -0
- package/dist/session.js.map +1 -1
- package/dist/stdio.d.ts.map +1 -1
- package/dist/stdio.js +9 -1
- package/dist/stdio.js.map +1 -1
- package/dist/tool-filters.d.ts +1 -1
- package/dist/tool-filters.d.ts.map +1 -1
- package/dist/tool-filters.js +3 -0
- package/dist/tool-filters.js.map +1 -1
- package/dist/tools/account.d.ts.map +1 -1
- package/dist/tools/account.js +80 -6
- package/dist/tools/account.js.map +1 -1
- package/dist/tools/chat.d.ts.map +1 -1
- package/dist/tools/chat.js +14 -7
- package/dist/tools/chat.js.map +1 -1
- package/dist/tools/computers.d.ts.map +1 -1
- package/dist/tools/computers.js +62 -4
- package/dist/tools/computers.js.map +1 -1
- package/dist/tools/guest.d.ts.map +1 -1
- package/dist/tools/guest.js +7 -1
- package/dist/tools/guest.js.map +1 -1
- package/dist/tools/input.d.ts.map +1 -1
- package/dist/tools/input.js +98 -48
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/secrets.d.ts.map +1 -1
- package/dist/tools/secrets.js +76 -19
- package/dist/tools/secrets.js.map +1 -1
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
package/dist/tools/input.js
CHANGED
|
@@ -12,6 +12,34 @@ const modifiers = z
|
|
|
12
12
|
.array(z.enum(['shift', 'ctrl', 'alt', 'super', 'meta', 'cmd']))
|
|
13
13
|
.optional()
|
|
14
14
|
.describe('Keys held down for the duration of the action.');
|
|
15
|
+
/**
|
|
16
|
+
* `context`, as every input tool but cursor_position takes it: the platform's
|
|
17
|
+
* `?context=1`, which has an input answer carry the desktop's windows as they
|
|
18
|
+
* stand just after the action.
|
|
19
|
+
*/
|
|
20
|
+
const contextArg = {
|
|
21
|
+
context: z
|
|
22
|
+
.boolean()
|
|
23
|
+
.default(false)
|
|
24
|
+
.describe("Answer the desktop's windows, and which one has focus, as they stand just after the action — what list_windows would say, without a second call. Read at once, so a window still opening may not be listed yet. If they cannot be read the action still happened, and the answer says why."),
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* A finished input action's answer, with the context it was asked for.
|
|
28
|
+
*
|
|
29
|
+
* `line` is what the tool says about the action itself; the windows follow it,
|
|
30
|
+
* or the reason the platform gave for not reading them. The action happened
|
|
31
|
+
* either way, so neither is an error. One renderer, so every input tool says
|
|
32
|
+
* it the same way.
|
|
33
|
+
*/
|
|
34
|
+
const withContext = (line, res) => {
|
|
35
|
+
const ctx = res?.context;
|
|
36
|
+
if (ctx && typeof ctx === 'object')
|
|
37
|
+
return said(`${line} The desktop now:`, ctx);
|
|
38
|
+
const why = typeof res?.context_error === 'string' && res.context_error
|
|
39
|
+
? res.context_error
|
|
40
|
+
: 'the platform answered no context';
|
|
41
|
+
return said(`${line} Its windows could not be read (${why}); screenshot to see the result.`);
|
|
42
|
+
};
|
|
15
43
|
/**
|
|
16
44
|
* A coordinate pair that is genuinely optional.
|
|
17
45
|
*
|
|
@@ -221,6 +249,25 @@ export const registerInput = (server, session) => {
|
|
|
221
249
|
const post = (computerId, body, signal) => session.api
|
|
222
250
|
.with(signal)
|
|
223
251
|
.send('POST', P.computerAction(session.resolve(computerId), 'input'), { body });
|
|
252
|
+
/**
|
|
253
|
+
* An input action that was asked for context: sent with `?context=1`, and
|
|
254
|
+
* read with `json` rather than `post`'s `send`, because the answer is now
|
|
255
|
+
* the point.
|
|
256
|
+
*/
|
|
257
|
+
const postForContext = (computerId, body, signal) => session.api
|
|
258
|
+
.with(signal)
|
|
259
|
+
.json('POST', P.computerAction(session.resolve(computerId), 'input'), { body, query: { context: '1' } });
|
|
260
|
+
/**
|
|
261
|
+
* Send an action that answers nothing of its own, and say `line` — with the
|
|
262
|
+
* desktop after it when `context` asked.
|
|
263
|
+
*/
|
|
264
|
+
const act = async (computerId, body, context, signal, line) => {
|
|
265
|
+
if (!context) {
|
|
266
|
+
await post(computerId, body, signal);
|
|
267
|
+
return said(line);
|
|
268
|
+
}
|
|
269
|
+
return withContext(line, await postForContext(computerId, body, signal));
|
|
270
|
+
};
|
|
224
271
|
server.registerTool('screenshot', {
|
|
225
272
|
title: 'Screenshot the desktop',
|
|
226
273
|
description: 'A picture of what is on the screen right now, returned as an image. Coordinates in this picture are the ones click, drag and scroll take — except a saved frame of a suspended computer (served with fresh: false), which is labelled as one: a downscaled picture of the screen as it was, not in click coordinates.',
|
|
@@ -380,19 +427,22 @@ export const registerInput = (server, session) => {
|
|
|
380
427
|
.number()
|
|
381
428
|
.int()
|
|
382
429
|
.min(1)
|
|
383
|
-
.max(
|
|
430
|
+
.max(P.MAX_CLICK_COUNT)
|
|
384
431
|
.default(1)
|
|
385
|
-
.describe(
|
|
432
|
+
.describe(`How many clicks, 1 to ${P.MAX_CLICK_COUNT}: 2 is a double click and 3 a triple click, on any button. The presses are paced as a double click's are, so the desktop sees one multi-click.`),
|
|
433
|
+
...contextArg,
|
|
386
434
|
modifiers,
|
|
387
435
|
},
|
|
388
|
-
}, ({ computer_id, x, y, button, count, modifiers: mods }, extra) => guarded(async () => {
|
|
389
|
-
const action = clickAction(button, count);
|
|
390
|
-
|
|
391
|
-
return refused(`A ${count}-times ${button} click is not a thing the desktop can be asked for; only the left button doubles and triples.`);
|
|
392
|
-
}
|
|
393
|
-
await post(computer_id, P.clickBody(action, x, y, mods ?? []), extra.signal);
|
|
436
|
+
}, ({ computer_id, x, y, button, count, context, modifiers: mods }, extra) => guarded(async () => {
|
|
437
|
+
const { action, repeat } = clickAction(button, count);
|
|
438
|
+
const body = P.clickBody(action, x, y, mods ?? [], repeat);
|
|
394
439
|
const where = x === undefined ? 'where the pointer was' : `at ${x},${y}`;
|
|
395
|
-
|
|
440
|
+
const did = repeat === undefined ? action : `${action} x${repeat}`;
|
|
441
|
+
if (!context) {
|
|
442
|
+
await post(computer_id, body, extra.signal);
|
|
443
|
+
return said(`${did} ${where}. Screenshot to see the result.`);
|
|
444
|
+
}
|
|
445
|
+
return withContext(`${did} ${where}.`, await postForContext(computer_id, body, extra.signal));
|
|
396
446
|
}));
|
|
397
447
|
server.registerTool('type_text', {
|
|
398
448
|
title: 'Type text',
|
|
@@ -406,9 +456,13 @@ export const registerInput = (server, session) => {
|
|
|
406
456
|
message: `text must be at most ${TYPE_TEXT_MAX_CHARS} characters; type longer text in pieces, or write it to a file`,
|
|
407
457
|
})
|
|
408
458
|
.describe(`The characters to type, at most ${TYPE_TEXT_MAX_CHARS}. Longer text goes in several calls, or through write_file or write_clipboard.`),
|
|
459
|
+
...contextArg,
|
|
409
460
|
},
|
|
410
|
-
}, ({ computer_id, text }, extra) => guarded(async () => {
|
|
411
|
-
const
|
|
461
|
+
}, ({ computer_id, text, context }, extra) => guarded(async () => {
|
|
462
|
+
const body = P.typeBody(text);
|
|
463
|
+
const answer = context
|
|
464
|
+
? await postForContext(computer_id, body, extra.signal)
|
|
465
|
+
: await post(computer_id, body, extra.signal);
|
|
412
466
|
// Code points, not `.length`. A string's length is its UTF-16 code
|
|
413
467
|
// units, so an emoji is two and "Typed 2 character(s)" is a number this
|
|
414
468
|
// server made up about a single keystroke's worth of text — a number a
|
|
@@ -426,7 +480,10 @@ export const registerInput = (server, session) => {
|
|
|
426
480
|
const how = typeof mechanism === 'string' && Object.hasOwn(TYPE_MECHANISMS, mechanism)
|
|
427
481
|
? ` ${TYPE_MECHANISMS[mechanism]}`
|
|
428
482
|
: '';
|
|
429
|
-
|
|
483
|
+
const line = `Typed ${typed} character(s)${how}. That confirms the keys were sent, not that the application accepted the text: check with a screenshot before relying on it.`;
|
|
484
|
+
return context
|
|
485
|
+
? withContext(line, answer)
|
|
486
|
+
: said(line);
|
|
430
487
|
}));
|
|
431
488
|
server.registerTool('paste_text', {
|
|
432
489
|
title: 'Paste text',
|
|
@@ -441,11 +498,9 @@ export const registerInput = (server, session) => {
|
|
|
441
498
|
.enum(P.PASTE_SHORTCUTS)
|
|
442
499
|
.optional()
|
|
443
500
|
.describe('"ctrl+v" (the default) or "ctrl+shift+v", which terminals need. Shift+Insert is not offered: it can paste the separate primary selection instead.'),
|
|
501
|
+
...contextArg,
|
|
444
502
|
},
|
|
445
|
-
}, ({ computer_id, text, shortcut }, extra) => guarded(
|
|
446
|
-
await post(computer_id, P.pasteBody(text, shortcut), extra.signal);
|
|
447
|
-
return said(`Pasted ${[...text].length} character(s) with ${shortcut ?? 'ctrl+v'}. The text is still on the clipboard. That confirms the paste was sent, not that the application accepted it: check with a screenshot before relying on it.`);
|
|
448
|
-
}));
|
|
503
|
+
}, ({ computer_id, text, shortcut, context }, extra) => guarded(() => act(computer_id, P.pasteBody(text, shortcut), context, extra.signal, `Pasted ${[...text].length} character(s) with ${shortcut ?? 'ctrl+v'}. The text is still on the clipboard. That confirms the paste was sent, not that the application accepted it: check with a screenshot before relying on it.`)));
|
|
449
504
|
server.registerTool('press_key', {
|
|
450
505
|
title: 'Press a key or a chord',
|
|
451
506
|
description: 'Press named keys — "Return", "Tab", "Escape", "Page_Down", or a chord like ["ctrl","c"]. X keysym names, so "Return" rather than "Enter".',
|
|
@@ -461,13 +516,11 @@ export const registerInput = (server, session) => {
|
|
|
461
516
|
.max(30)
|
|
462
517
|
.optional()
|
|
463
518
|
.describe('Hold the keys down this long instead of tapping them. Capped at 30s.'),
|
|
519
|
+
...contextArg,
|
|
464
520
|
},
|
|
465
|
-
}, ({ computer_id, keys, hold_seconds }, extra) => guarded(
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
? `Held ${keys.join('+')} for ${hold_seconds}s.`
|
|
469
|
-
: `Pressed ${keys.join('+')}.`);
|
|
470
|
-
}));
|
|
521
|
+
}, ({ computer_id, keys, hold_seconds, context }, extra) => guarded(() => act(computer_id, P.keyBody(keys, hold_seconds), context, extra.signal, hold_seconds
|
|
522
|
+
? `Held ${keys.join('+')} for ${hold_seconds}s.`
|
|
523
|
+
: `Pressed ${keys.join('+')}.`)));
|
|
471
524
|
server.registerTool('scroll', {
|
|
472
525
|
title: 'Scroll',
|
|
473
526
|
description: 'Turn the wheel. With no coordinate it scrolls whatever is under the pointer; with one it scrolls what is at that point.',
|
|
@@ -477,11 +530,9 @@ export const registerInput = (server, session) => {
|
|
|
477
530
|
amount: z.number().int().min(1).max(50).default(3).describe('Wheel clicks.'),
|
|
478
531
|
...point,
|
|
479
532
|
modifiers,
|
|
533
|
+
...contextArg,
|
|
480
534
|
},
|
|
481
|
-
}, ({ computer_id, direction, amount, x, y, modifiers: mods }, extra) => guarded(
|
|
482
|
-
await post(computer_id, P.scrollBody({ direction, amount, x, y, modifiers: mods }), extra.signal);
|
|
483
|
-
return said(`Scrolled ${direction} by ${amount}.`);
|
|
484
|
-
}));
|
|
535
|
+
}, ({ computer_id, direction, amount, x, y, modifiers: mods, context }, extra) => guarded(() => act(computer_id, P.scrollBody({ direction, amount, x, y, modifiers: mods }), context, extra.signal, `Scrolled ${direction} by ${amount}.`)));
|
|
485
536
|
server.registerTool('drag', {
|
|
486
537
|
title: 'Drag',
|
|
487
538
|
description: 'Press, move and release as one gesture — for selecting text, moving a file, or dragging a slider. Not the same as two clicks. modifiers holds keys down for the whole gesture, e.g. ["shift"] to extend a selection.',
|
|
@@ -496,21 +547,19 @@ export const registerInput = (server, session) => {
|
|
|
496
547
|
.describe('Where to start. Both from_x and from_y, or neither — half of an origin is refused rather than ignored.'),
|
|
497
548
|
from_y: z.number().int().optional(),
|
|
498
549
|
modifiers,
|
|
550
|
+
...contextArg,
|
|
499
551
|
},
|
|
500
|
-
}, ({ computer_id, to_x, to_y, from_x, from_y, modifiers: mods }, extra) => guarded(
|
|
501
|
-
|
|
552
|
+
}, ({ computer_id, to_x, to_y, from_x, from_y, modifiers: mods, context }, extra) => guarded(() => {
|
|
553
|
+
const body = P.dragBody(to_x, to_y, from_x, from_y, mods ?? []);
|
|
502
554
|
const from = from_x === undefined ? 'the pointer' : `${from_x},${from_y}`;
|
|
503
555
|
const held = mods?.length ? ` holding ${mods.join('+')}` : '';
|
|
504
|
-
return
|
|
556
|
+
return act(computer_id, body, context, extra.signal, `Dragged from ${from} to ${to_x},${to_y}${held}.`);
|
|
505
557
|
}));
|
|
506
558
|
server.registerTool('move_mouse', {
|
|
507
559
|
title: 'Move the pointer',
|
|
508
560
|
description: 'Move the pointer without clicking — for hovering over a menu or a tooltip.',
|
|
509
|
-
inputSchema: { ...idArg, x: z.number().int(), y: z.number().int() },
|
|
510
|
-
}, ({ computer_id, x, y }, extra) => guarded(
|
|
511
|
-
await post(computer_id, P.pointerBody('mouse_move', x, y), extra.signal);
|
|
512
|
-
return said(`Pointer at ${x},${y}.`);
|
|
513
|
-
}));
|
|
561
|
+
inputSchema: { ...idArg, x: z.number().int(), y: z.number().int(), ...contextArg },
|
|
562
|
+
}, ({ computer_id, x, y, context }, extra) => guarded(() => act(computer_id, P.pointerBody('mouse_move', x, y), context, extra.signal, `Pointer at ${x},${y}.`)));
|
|
514
563
|
server.registerTool('mouse_button', {
|
|
515
564
|
title: 'Hold or release the mouse button',
|
|
516
565
|
description: 'The two halves of a click, for gestures drag cannot express — a lasso across several stops, or a press held while the keyboard is used.',
|
|
@@ -518,11 +567,9 @@ export const registerInput = (server, session) => {
|
|
|
518
567
|
...idArg,
|
|
519
568
|
state: z.enum(['down', 'up']),
|
|
520
569
|
...point,
|
|
570
|
+
...contextArg,
|
|
521
571
|
},
|
|
522
|
-
}, ({ computer_id, state, x, y }, extra) => guarded(
|
|
523
|
-
await post(computer_id, P.buttonBody(`left_mouse_${state}`, x, y), extra.signal);
|
|
524
|
-
return said(`Left button ${state}${x === undefined ? '' : ` at ${x},${y}`}.`);
|
|
525
|
-
}));
|
|
572
|
+
}, ({ computer_id, state, x, y, context }, extra) => guarded(() => act(computer_id, P.buttonBody(`left_mouse_${state}`, x, y), context, extra.signal, `Left button ${state}${x === undefined ? '' : ` at ${x},${y}`}.`)));
|
|
526
573
|
server.registerTool('cursor_position', {
|
|
527
574
|
title: 'Where is the pointer',
|
|
528
575
|
description: 'Where the pointer was last put. `known` is false on a computer nothing has moved it on yet — the guest cannot be asked, so there is no coordinate to report and a confident 0,0 would be a wrong answer dressed as a right one. This reads a coordinate but reaches the computer to do it: a suspended one is resumed to answer, and that resume is charged. read_clipboard, by contrast, refuses a suspended computer rather than starting it.',
|
|
@@ -564,18 +611,21 @@ export const registerInput = (server, session) => {
|
|
|
564
611
|
inputSchema: {
|
|
565
612
|
...idArg,
|
|
566
613
|
seconds: z.number().positive().max(30).default(2),
|
|
614
|
+
...contextArg,
|
|
567
615
|
},
|
|
568
|
-
}, ({ computer_id, seconds }, extra) => guarded(
|
|
569
|
-
await post(computer_id, P.waitBody(seconds), extra.signal);
|
|
570
|
-
return said(`Waited ${seconds}s.`);
|
|
571
|
-
}));
|
|
616
|
+
}, ({ computer_id, seconds, context }, extra) => guarded(() => act(computer_id, P.waitBody(seconds), context, extra.signal, `Waited ${seconds}s.`)));
|
|
572
617
|
};
|
|
573
|
-
/**
|
|
618
|
+
/**
|
|
619
|
+
* The platform's verb for a button and a repeat count, and the `count` to send
|
|
620
|
+
* with it. A left double or triple click keeps the verb the platform has always
|
|
621
|
+
* had for it; every other repeat is the button's own click with a `count`
|
|
622
|
+
* (OPL-5472), which is what lets a right or middle button repeat at all.
|
|
623
|
+
*/
|
|
574
624
|
function clickAction(button, count) {
|
|
575
|
-
if (count ===
|
|
576
|
-
return
|
|
577
|
-
if (button
|
|
578
|
-
return
|
|
579
|
-
return count ===
|
|
625
|
+
if (button === 'left' && count === 2)
|
|
626
|
+
return { action: 'double_click' };
|
|
627
|
+
if (button === 'left' && count === 3)
|
|
628
|
+
return { action: 'triple_click' };
|
|
629
|
+
return count === 1 ? { action: `${button}_click` } : { action: `${button}_click`, repeat: count };
|
|
580
630
|
}
|
|
581
631
|
//# sourceMappingURL=input.js.map
|
package/dist/tools/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tools/input.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tools/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/tools/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/tools/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,EAIL,KAAK,MAAM,EAEZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,sDAAsD;AACtD,eAAO,MAAM,SAAS,oCAAoC,CAAC;AAE3D,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAiBlC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;KA0DrD;AAwFD,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAwExC,wEAAwE;AACxE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIxF;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAclF;AA2ED,eAAO,MAAM,eAAe,EAAE,SAqT7B,CAAC"}
|
package/dist/tools/secrets.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { APIError, ConflictError, MandalaError, NotFoundError, statusAdvice } from '../errors.js';
|
|
2
|
+
import { APIError, ConflictError, MandalaError, NotFoundError, reasonAdvice, statusAdvice, } from '../errors.js';
|
|
3
3
|
import { guarded, refused, said, unavailableAdvice } from '../format.js';
|
|
4
4
|
import * as P from '../paths.js';
|
|
5
5
|
import { DOCUMENTED_REASONS, isRequestId, overlaps, } from '../secret-store.js';
|
|
@@ -188,9 +188,29 @@ const workspaceArg = z
|
|
|
188
188
|
.refine(isId, 'workspace_id must not be empty or have spaces around it')
|
|
189
189
|
.optional()
|
|
190
190
|
.describe('The workspace the secret belongs to. Leave it out for an account-wide secret. A secret in a workspace is found only with its workspace_id.');
|
|
191
|
+
/**
|
|
192
|
+
* What a left-out workspace_id means, said in the tool's schema: the local
|
|
193
|
+
* server started from a saved profile falls back to that profile's default
|
|
194
|
+
* workspace from `mandala workspaces use`. Every other session (an explicit
|
|
195
|
+
* or environment key, and every hosted one) keeps the words it always had.
|
|
196
|
+
*/
|
|
197
|
+
function scopeDefault(session) {
|
|
198
|
+
const d = session.defaultWorkspace;
|
|
199
|
+
if (d === undefined)
|
|
200
|
+
return '';
|
|
201
|
+
const here = session.defaultWorkspaceUnreadable
|
|
202
|
+
? 'unknown, because ~/.mandala/defaults.json cannot be read: list_secrets and get_secret use account-wide, and create_secret, set_secret, replace_secret and delete_secret refuse a call without workspace_id'
|
|
203
|
+
: d
|
|
204
|
+
? `workspace ${d.name} (${d.id})`
|
|
205
|
+
: 'account-wide';
|
|
206
|
+
return ` Default when left out: the saved profile's workspace from \`mandala workspaces use\`, else account-wide — here ${here}.`;
|
|
207
|
+
}
|
|
191
208
|
/** A secret's name as a tool argument, checked for what the platform would refuse. */
|
|
192
209
|
const nameArg = z
|
|
193
210
|
.string()
|
|
211
|
+
// Trimmed BEFORE the length check, as the platform trims it: a padded name
|
|
212
|
+
// that is 60 characters once trimmed is one the platform takes (OPL-5522).
|
|
213
|
+
.trim()
|
|
194
214
|
.min(1, 'name must not be empty')
|
|
195
215
|
.refine((v) => [...v].length <= SECRET_NAME_MAX_CHARS, {
|
|
196
216
|
message: `name must be at most ${SECRET_NAME_MAX_CHARS} characters`,
|
|
@@ -251,6 +271,11 @@ function storeAdvice(err, change) {
|
|
|
251
271
|
case 404:
|
|
252
272
|
return 'no such secret in this scope. A secret in a workspace is found only with its workspace_id; list_secrets says which exist';
|
|
253
273
|
case 409:
|
|
274
|
+
// The platform's word, where it says which of the two conflicts this was;
|
|
275
|
+
// this server's own sentence for it, never the platform's.
|
|
276
|
+
if (err.reason === 'name_taken' || err.reason === 'stale_revision') {
|
|
277
|
+
return `${reasonAdvice(err.reason)}. Nothing changed`;
|
|
278
|
+
}
|
|
254
279
|
return change
|
|
255
280
|
? 'refused as a conflict and nothing changed: for a create, the name is taken in that scope; for a replace or delete, the revision_id is no longer the current one — get_secret for the current one, and send it again only if you still mean to'
|
|
256
281
|
: 'refused as a conflict';
|
|
@@ -300,6 +325,21 @@ async function storeGuarded(what, change, value, fn) {
|
|
|
300
325
|
return value === undefined ? result : withoutValue(result, value);
|
|
301
326
|
}
|
|
302
327
|
export const registerSecrets = (server, session) => {
|
|
328
|
+
// A left-out workspace_id: the saved profile's default, where there is one.
|
|
329
|
+
const scoped = (workspace_id) => workspace_id ?? session.defaultWorkspace?.id ?? undefined;
|
|
330
|
+
// A tool that writes, called without workspace_id while defaults.json cannot
|
|
331
|
+
// be read: the profile's default is unknown, and account-wide is the widest
|
|
332
|
+
// scope, where any computer on the account may be bound to what is stored.
|
|
333
|
+
// Refused before any request; the reading tools go on account-wide.
|
|
334
|
+
const unknownDefault = (workspace_id) => workspace_id === undefined && session.defaultWorkspaceUnreadable !== undefined
|
|
335
|
+
? refused(`Nothing was sent: ~/.mandala/defaults.json cannot be read (${session.defaultWorkspaceUnreadable}), so the saved profile's default workspace is unknown and this would otherwise act account-wide. Pass workspace_id explicitly, or fix or delete the file and restart this server.`)
|
|
336
|
+
: undefined;
|
|
337
|
+
const byDefault = (workspace_id) => workspace_id === undefined && session.defaultWorkspace
|
|
338
|
+
? " (the saved profile's default from mandala workspaces use)"
|
|
339
|
+
: '';
|
|
340
|
+
const scopeArg = (text) => workspaceArg.describe((text ??
|
|
341
|
+
'The workspace the secret belongs to. Leave it out for an account-wide secret. A secret in a workspace is found only with its workspace_id.') +
|
|
342
|
+
scopeDefault(session));
|
|
303
343
|
server.registerTool('get_computer_secrets', {
|
|
304
344
|
title: "Read a computer's secret bindings",
|
|
305
345
|
description: `Which of the account's secrets a computer is bound to: for each, the secret id, the revision last delivered, and where the guest finds it — an environment variable name, or a file under ${FILES_DIR}. Values are NEVER shown — no value crosses this route. Also answers \`version\`, the number to send to set_computer_secrets so it changes only this list (0 for a computer never bound). Any role may read it. The list is what the computer receives at its next start or restart, which a running computer may not have yet. ${LIVE_VALUES}`,
|
|
@@ -366,16 +406,19 @@ export const registerSecrets = (server, session) => {
|
|
|
366
406
|
// because cleaning up what a task created is part of the task.
|
|
367
407
|
server.registerTool('list_secrets', {
|
|
368
408
|
title: "List the account's secrets",
|
|
369
|
-
description: "The secrets stored on this account, in one scope: the account-wide ones by default, or one workspace's with workspace_id. For each: its name, its id (what set_computer_secrets binds), its current revision_id (what replace_secret and delete_secret need), its scope and when it was last delivered to a computer. Values are NEVER shown — no route returns one. Also says whether binding secrets to computers is switched on here, and the store's limits. Owners and members may read; a viewer is refused. An API key confined to a workspace lists that workspace's secrets, and naming another scope is refused."
|
|
409
|
+
description: "The secrets stored on this account, in one scope: the account-wide ones by default, or one workspace's with workspace_id. For each: its name, its id (what set_computer_secrets binds), its current revision_id (what replace_secret and delete_secret need), its scope and when it was last delivered to a computer. Values are NEVER shown — no route returns one. Also says whether binding secrets to computers is switched on here, and the store's limits. Owners and members may read; a viewer is refused. An API key confined to a workspace lists that workspace's secrets, and naming another scope is refused." +
|
|
410
|
+
scopeDefault(session),
|
|
370
411
|
inputSchema: {
|
|
371
|
-
workspace_id:
|
|
412
|
+
workspace_id: scopeArg('The workspace to list. Leave it out for the account-wide secrets.'),
|
|
372
413
|
},
|
|
373
414
|
annotations: { readOnlyHint: true },
|
|
374
415
|
}, ({ workspace_id }, extra) => storeGuarded('Listing the secrets', false, undefined, async () => {
|
|
416
|
+
const workspace = scoped(workspace_id);
|
|
375
417
|
const list = await session.api
|
|
376
418
|
.with(extra.signal)
|
|
377
|
-
.secrets.list({ workspaceId:
|
|
378
|
-
const scope =
|
|
419
|
+
.secrets.list({ workspaceId: workspace });
|
|
420
|
+
const scope = (workspace === undefined ? 'account-wide' : `in workspace ${workspace}`) +
|
|
421
|
+
byDefault(workspace_id);
|
|
379
422
|
const delivery = list.delivery
|
|
380
423
|
? 'Binding secrets to computers is on.'
|
|
381
424
|
: 'Binding secrets to computers is OFF on this platform: secrets can be stored, but set_computer_secrets and a create carrying secrets are refused.';
|
|
@@ -390,27 +433,30 @@ export const registerSecrets = (server, session) => {
|
|
|
390
433
|
server.registerTool('get_secret', {
|
|
391
434
|
title: 'Read one secret',
|
|
392
435
|
description: "One secret's name, scope, current revision_id and when it was last delivered — never its value. Read it for the current revision_id after replace_secret or delete_secret is refused because the revision moved. A secret in a workspace is found only with its workspace_id; otherwise it is not found.",
|
|
393
|
-
inputSchema: { secret_id: secretIdArg, workspace_id:
|
|
436
|
+
inputSchema: { secret_id: secretIdArg, workspace_id: scopeArg() },
|
|
394
437
|
annotations: { readOnlyHint: true },
|
|
395
438
|
}, ({ secret_id, workspace_id }, extra) => storeGuarded(`Reading ${secret_id}`, false, undefined, async () => {
|
|
396
439
|
const secret = await session.api
|
|
397
440
|
.with(extra.signal)
|
|
398
|
-
.secrets.get(secret_id, { workspaceId: workspace_id });
|
|
441
|
+
.secrets.get(secret_id, { workspaceId: scoped(workspace_id) });
|
|
399
442
|
return said(`${secretLine(secret)} (values are never shown)`, secret);
|
|
400
443
|
}));
|
|
401
444
|
server.registerTool('create_secret', {
|
|
402
445
|
title: 'Store a new secret',
|
|
403
|
-
description: `Store a value under a name on this account, encrypted, for binding to computers with set_computer_secrets (or the secrets field of a create). The value is sent once and NEVER shown again: this answer, every other tool and every route give back only the name, id and revision. Do not put the value anywhere else — not in a command line, a file or a message — when a binding can deliver it. Owners only. A name is unique within its scope (up to ${SECRET_NAME_MAX_CHARS} characters, no control characters); a taken name is refused with 409. The account holds at most 100 secrets at once and may create at most 1000 over its lifetime — list_secrets reports both. Without workspace_id the secret is account-wide and any computer on the account may be bound to it. NOT safe to repeat blind: if the answer is lost, list_secrets before creating again, since the secret may exist
|
|
446
|
+
description: `Store a value under a name on this account, encrypted, for binding to computers with set_computer_secrets (or the secrets field of a create). The value is sent once and NEVER shown again: this answer, every other tool and every route give back only the name, id and revision. Do not put the value anywhere else — not in a command line, a file or a message — when a binding can deliver it. Owners only. A name is unique within its scope (up to ${SECRET_NAME_MAX_CHARS} characters, no control characters); a taken name is refused with 409. The account holds at most 100 secrets at once and may create at most 1000 over its lifetime — list_secrets reports both. Without workspace_id the secret is account-wide and any computer on the account may be bound to it. NOT safe to repeat blind: if the answer is lost, list_secrets before creating again, since the secret may exist.${scopeDefault(session)}`,
|
|
404
447
|
inputSchema: {
|
|
405
448
|
name: nameArg,
|
|
406
449
|
value: valueArg('The value'),
|
|
407
|
-
workspace_id:
|
|
450
|
+
workspace_id: scopeArg('The workspace it belongs to. Leave it out for an account-wide secret.'),
|
|
408
451
|
},
|
|
409
452
|
annotations: { destructiveHint: false, idempotentHint: false },
|
|
410
453
|
}, ({ name, value, workspace_id }, extra) => storeGuarded('Storing the secret', true, value, async () => {
|
|
454
|
+
const unknown = unknownDefault(workspace_id);
|
|
455
|
+
if (unknown)
|
|
456
|
+
return unknown;
|
|
411
457
|
const secret = await session.api
|
|
412
458
|
.with(extra.signal)
|
|
413
|
-
.secrets.create({ name, value, workspaceId: workspace_id });
|
|
459
|
+
.secrets.create({ name, value, workspaceId: scoped(workspace_id) });
|
|
414
460
|
return said(`Stored ${secret.name} as ${secret.id}, revision ${secret.revision_id}, ${secret.workspace_id === null ? 'account-wide' : `in workspace ${secret.workspace_id}`}. The value is not shown and cannot be read back. Bind it to a computer with set_computer_secrets.`, secret);
|
|
415
461
|
}));
|
|
416
462
|
server.registerTool('set_secret', {
|
|
@@ -419,21 +465,25 @@ export const registerSecrets = (server, session) => {
|
|
|
419
465
|
inputSchema: {
|
|
420
466
|
name: nameArg,
|
|
421
467
|
value: valueArg('The value'),
|
|
422
|
-
workspace_id:
|
|
468
|
+
workspace_id: scopeArg('The scope to look in, and to create in. Leave it out for the account-wide secrets.'),
|
|
423
469
|
},
|
|
424
470
|
annotations: { destructiveHint: true, idempotentHint: false },
|
|
425
471
|
}, ({ name, value, workspace_id }, extra) => storeGuarded(`Setting ${name.trim()}`, true, value, async () => {
|
|
472
|
+
const unknown = unknownDefault(workspace_id);
|
|
473
|
+
if (unknown)
|
|
474
|
+
return unknown;
|
|
426
475
|
const store = session.api.with(extra.signal).secrets;
|
|
476
|
+
const workspace = scoped(workspace_id);
|
|
427
477
|
for (let attempt = 0;; attempt++) {
|
|
428
|
-
const found = namedSecret((await store.list({ workspaceId:
|
|
478
|
+
const found = namedSecret((await store.list({ workspaceId: workspace })).secrets, name);
|
|
429
479
|
try {
|
|
430
480
|
const secret = found
|
|
431
481
|
? await store.replace(found.id, {
|
|
432
482
|
value,
|
|
433
483
|
revisionId: found.revision_id,
|
|
434
|
-
workspaceId:
|
|
484
|
+
workspaceId: workspace,
|
|
435
485
|
})
|
|
436
|
-
: await store.create({ name: name.trim(), value, workspaceId:
|
|
486
|
+
: await store.create({ name: name.trim(), value, workspaceId: workspace });
|
|
437
487
|
const scope = secret.workspace_id === null ? 'account-wide' : `in workspace ${secret.workspace_id}`;
|
|
438
488
|
return said(found
|
|
439
489
|
? `Replaced the value of ${secret.name} (${secret.id}), ${scope}; it is now at revision ${secret.revision_id}. The value is not shown. Computers bound to it get it at their next start or restart, and a running one is sent it now on a best-effort basis.`
|
|
@@ -453,14 +503,17 @@ export const registerSecrets = (server, session) => {
|
|
|
453
503
|
secret_id: secretIdArg,
|
|
454
504
|
value: valueArg('The new value'),
|
|
455
505
|
revision_id: revisionArg('A stale one is refused and nothing changes.'),
|
|
456
|
-
workspace_id:
|
|
506
|
+
workspace_id: scopeArg(),
|
|
457
507
|
},
|
|
458
508
|
annotations: { destructiveHint: true, idempotentHint: false },
|
|
459
509
|
}, ({ secret_id, value, revision_id, workspace_id }, extra) => storeGuarded(`Replacing the value of ${secret_id}`, true, value, async () => {
|
|
510
|
+
const unknown = unknownDefault(workspace_id);
|
|
511
|
+
if (unknown)
|
|
512
|
+
return unknown;
|
|
460
513
|
const secret = await session.api.with(extra.signal).secrets.replace(secret_id, {
|
|
461
514
|
value,
|
|
462
515
|
revisionId: revision_id,
|
|
463
|
-
workspaceId: workspace_id,
|
|
516
|
+
workspaceId: scoped(workspace_id),
|
|
464
517
|
});
|
|
465
518
|
return said(`Replaced the value of ${secret.name} (${secret.id}); it is now at revision ${secret.revision_id}. The value is not shown. Computers bound to it get it at their next start or restart, and a running one is sent it now on a best-effort basis.`, secret);
|
|
466
519
|
}));
|
|
@@ -470,22 +523,26 @@ export const registerSecrets = (server, session) => {
|
|
|
470
523
|
inputSchema: {
|
|
471
524
|
secret_id: secretIdArg,
|
|
472
525
|
revision_id: revisionArg('Required; a stale one is refused and nothing is deleted.'),
|
|
473
|
-
workspace_id:
|
|
526
|
+
workspace_id: scopeArg(),
|
|
474
527
|
confirm: z
|
|
475
528
|
.literal(true)
|
|
476
529
|
.describe('Must be true. A computer still bound to this secret cannot start again until that binding is removed.'),
|
|
477
530
|
},
|
|
478
531
|
annotations: { destructiveHint: true, idempotentHint: true },
|
|
479
532
|
}, ({ secret_id, revision_id, workspace_id }, extra) => storeGuarded(`Deleting ${secret_id}`, true, undefined, async () => {
|
|
533
|
+
const unknown = unknownDefault(workspace_id);
|
|
534
|
+
if (unknown)
|
|
535
|
+
return unknown;
|
|
536
|
+
const workspace = scoped(workspace_id);
|
|
480
537
|
try {
|
|
481
538
|
await session.api
|
|
482
539
|
.with(extra.signal)
|
|
483
|
-
.secrets.delete(secret_id, { revisionId: revision_id, workspaceId:
|
|
540
|
+
.secrets.delete(secret_id, { revisionId: revision_id, workspaceId: workspace });
|
|
484
541
|
}
|
|
485
542
|
catch (err) {
|
|
486
543
|
if (!(err instanceof NotFoundError))
|
|
487
544
|
throw err;
|
|
488
|
-
return refused(`Nothing was deleted: no secret ${secret_id} was found${
|
|
545
|
+
return refused(`Nothing was deleted: no secret ${secret_id} was found${workspace === undefined ? ' among the account-wide secrets' : ` in workspace ${workspace}${byDefault(workspace_id)}`}. Either it was already deleted, or it is in a scope this did not name — list_secrets says which.`);
|
|
489
546
|
}
|
|
490
547
|
return said(`Deleted ${secret_id}. Any computer still bound to it cannot start again until set_computer_secrets removes that binding.`);
|
|
491
548
|
}));
|