mandala-computer-mcp 0.3.0 → 0.5.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.
Files changed (130) hide show
  1. package/README.md +462 -37
  2. package/dist/api.d.ts +12 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +262 -42
  5. package/dist/api.js.map +1 -1
  6. package/dist/artifacts.d.ts +63 -0
  7. package/dist/artifacts.d.ts.map +1 -0
  8. package/dist/artifacts.js +81 -0
  9. package/dist/artifacts.js.map +1 -0
  10. package/dist/cli.d.ts +4 -0
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +35 -21
  13. package/dist/cli.js.map +1 -1
  14. package/dist/credentials.d.ts +33 -0
  15. package/dist/credentials.d.ts.map +1 -0
  16. package/dist/credentials.js +395 -0
  17. package/dist/credentials.js.map +1 -0
  18. package/dist/errors.d.ts +53 -10
  19. package/dist/errors.d.ts.map +1 -1
  20. package/dist/errors.js +122 -35
  21. package/dist/errors.js.map +1 -1
  22. package/dist/events.d.ts +11 -2
  23. package/dist/events.d.ts.map +1 -1
  24. package/dist/events.js +213 -95
  25. package/dist/events.js.map +1 -1
  26. package/dist/executions.d.ts +43 -0
  27. package/dist/executions.d.ts.map +1 -0
  28. package/dist/executions.js +162 -0
  29. package/dist/executions.js.map +1 -0
  30. package/dist/format.d.ts +11 -11
  31. package/dist/format.d.ts.map +1 -1
  32. package/dist/format.js +159 -16
  33. package/dist/format.js.map +1 -1
  34. package/dist/http.d.ts.map +1 -1
  35. package/dist/http.js +4 -0
  36. package/dist/http.js.map +1 -1
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/limits.d.ts +17 -0
  42. package/dist/limits.d.ts.map +1 -0
  43. package/dist/limits.js +17 -0
  44. package/dist/limits.js.map +1 -0
  45. package/dist/paths.d.ts +42 -2
  46. package/dist/paths.d.ts.map +1 -1
  47. package/dist/paths.js +54 -3
  48. package/dist/paths.js.map +1 -1
  49. package/dist/poll.d.ts +5 -1
  50. package/dist/poll.d.ts.map +1 -1
  51. package/dist/poll.js +120 -16
  52. package/dist/poll.js.map +1 -1
  53. package/dist/results.d.ts +97 -0
  54. package/dist/results.d.ts.map +1 -0
  55. package/dist/results.js +263 -0
  56. package/dist/results.js.map +1 -0
  57. package/dist/server.d.ts +3 -2
  58. package/dist/server.d.ts.map +1 -1
  59. package/dist/server.js +61 -9
  60. package/dist/server.js.map +1 -1
  61. package/dist/stdio.d.ts +5 -1
  62. package/dist/stdio.d.ts.map +1 -1
  63. package/dist/stdio.js +10 -4
  64. package/dist/stdio.js.map +1 -1
  65. package/dist/tool-filters.d.ts +38 -0
  66. package/dist/tool-filters.d.ts.map +1 -0
  67. package/dist/tool-filters.js +129 -0
  68. package/dist/tool-filters.js.map +1 -0
  69. package/dist/tools/account.d.ts +3 -0
  70. package/dist/tools/account.d.ts.map +1 -0
  71. package/dist/tools/account.js +122 -0
  72. package/dist/tools/account.js.map +1 -0
  73. package/dist/tools/activities.d.ts +3 -0
  74. package/dist/tools/activities.d.ts.map +1 -0
  75. package/dist/tools/activities.js +140 -0
  76. package/dist/tools/activities.js.map +1 -0
  77. package/dist/tools/agent.d.ts.map +1 -1
  78. package/dist/tools/agent.js +72 -5
  79. package/dist/tools/agent.js.map +1 -1
  80. package/dist/tools/artifacts.d.ts +3 -0
  81. package/dist/tools/artifacts.d.ts.map +1 -0
  82. package/dist/tools/artifacts.js +97 -0
  83. package/dist/tools/artifacts.js.map +1 -0
  84. package/dist/tools/chat.d.ts +6 -0
  85. package/dist/tools/chat.d.ts.map +1 -0
  86. package/dist/tools/chat.js +192 -0
  87. package/dist/tools/chat.js.map +1 -0
  88. package/dist/tools/computers.d.ts.map +1 -1
  89. package/dist/tools/computers.js +300 -247
  90. package/dist/tools/computers.js.map +1 -1
  91. package/dist/tools/directory.d.ts +13 -0
  92. package/dist/tools/directory.d.ts.map +1 -0
  93. package/dist/tools/directory.js +88 -0
  94. package/dist/tools/directory.js.map +1 -0
  95. package/dist/tools/events.d.ts.map +1 -1
  96. package/dist/tools/events.js +66 -22
  97. package/dist/tools/events.js.map +1 -1
  98. package/dist/tools/executions.d.ts +3 -0
  99. package/dist/tools/executions.d.ts.map +1 -0
  100. package/dist/tools/executions.js +87 -0
  101. package/dist/tools/executions.js.map +1 -0
  102. package/dist/tools/guest.d.ts.map +1 -1
  103. package/dist/tools/guest.js +57 -17
  104. package/dist/tools/guest.js.map +1 -1
  105. package/dist/tools/input.d.ts.map +1 -1
  106. package/dist/tools/input.js +63 -5
  107. package/dist/tools/input.js.map +1 -1
  108. package/dist/tools/results.d.ts +30 -0
  109. package/dist/tools/results.d.ts.map +1 -0
  110. package/dist/tools/results.js +106 -0
  111. package/dist/tools/results.js.map +1 -0
  112. package/dist/tools/secrets.d.ts +58 -0
  113. package/dist/tools/secrets.d.ts.map +1 -0
  114. package/dist/tools/secrets.js +204 -0
  115. package/dist/tools/secrets.js.map +1 -0
  116. package/dist/tools/signals.d.ts +3 -0
  117. package/dist/tools/signals.d.ts.map +1 -0
  118. package/dist/tools/signals.js +116 -0
  119. package/dist/tools/signals.js.map +1 -0
  120. package/dist/tools/snapshots.d.ts.map +1 -1
  121. package/dist/tools/snapshots.js +213 -167
  122. package/dist/tools/snapshots.js.map +1 -1
  123. package/dist/tools/ssh.d.ts +3 -0
  124. package/dist/tools/ssh.d.ts.map +1 -0
  125. package/dist/tools/ssh.js +186 -0
  126. package/dist/tools/ssh.js.map +1 -0
  127. package/dist/tools/templates.d.ts.map +1 -1
  128. package/dist/tools/templates.js +9 -13
  129. package/dist/tools/templates.js.map +1 -1
  130. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { guarded, INLINE_IMAGE_TYPES, image, isInlineImage, json, MAX_INLINE_IMAGE_BYTES, refused, said, } from '../format.js';
2
+ import { ConflictError } from '../errors.js';
3
+ import { failed, guarded, INLINE_IMAGE_TYPES, image, isInlineImage, json, MAX_INLINE_IMAGE_BYTES, refused, said, } from '../format.js';
3
4
  import * as P from '../paths.js';
4
5
  const idArg = {
5
6
  computer_id: z
@@ -27,6 +28,46 @@ const point = {
27
28
  .describe('Leave x and y out to act where the pointer already is. Both or neither — half a coordinate is refused rather than completed with a zero.'),
28
29
  y: z.number().int().optional(),
29
30
  };
31
+ /**
32
+ * A refused capture, and the one other question this tool can ask.
33
+ *
34
+ * The platform's own sentence first and whole — it is the half that says which
35
+ * computer and what state it is in — and the platform's classification with it,
36
+ * since `failed` is what composes both. What this adds is the thing neither can
37
+ * know: that this tool has an argument which asks for something else, and that
38
+ * the something else may be answerable when a new capture is not.
39
+ *
40
+ * Offered as a FALLBACK and not as a promise, which is the whole of the care
41
+ * needed here (Codex review). Two different refusals reach this, and it cannot
42
+ * tell them apart: a computer that is asleep has nothing to capture from, while
43
+ * a computer whose agent is busy for an instant has and will answer the very
44
+ * same call moments later. `fresh: false` only permits the cache — it does not
45
+ * establish that anything is in it — so a sentence guaranteeing a frame sends a
46
+ * caller from a refusal that clears by itself to one that does not clear at all.
47
+ * Hence: the platform's sentence is pointed back at, the fallback is conditional,
48
+ * and what the frame would MEAN is stated, because a saved frame read as the
49
+ * present is a worse answer than no frame.
50
+ *
51
+ * And it promises nothing about the OTHER branch either (Codex review). The
52
+ * platform's classification says the thing in the way can finish; it does not
53
+ * say the computer will then be in a state that can be photographed — a disk
54
+ * still being built clears into a computer that is merely stopped, and the next
55
+ * look is a 400 rather than a picture. So the retry is named as the first thing
56
+ * to try, and the caller is told what it is not.
57
+ */
58
+ const cachedFrameOffered = (err) => {
59
+ const sentence = failed(err)
60
+ .content.map((c) => ('text' in c ? c.text : ''))
61
+ .join('\n');
62
+ return refused(`${sentence}\n\nThat was a request for a NEW capture. Read the sentence above before anything else: where ` +
63
+ `it says this is worth another attempt, sending the same call again in a moment is the first thing to ` +
64
+ `try — it is not a promise that the capture then works, since a computer that turns out not to be ` +
65
+ `running needs starting rather than another look. The other option is fresh: false, which asks for the ` +
66
+ `last frame the platform saved rather than a new one and so needs nothing captured; it is refused in ` +
67
+ `the same way when there is no saved frame to serve, so it is a fallback and not a guarantee either. ` +
68
+ `Whatever comes back is the screen as it was when that frame was taken and not the screen now: it ` +
69
+ `cannot show the result of anything sent since.`);
70
+ };
30
71
  export const registerInput = (server, session) => {
31
72
  const post = (computerId, body, signal) => session.api
32
73
  .with(signal)
@@ -46,14 +87,31 @@ export const registerInput = (server, session) => {
46
87
  fresh: z
47
88
  .boolean()
48
89
  .default(true)
49
- .describe("Skip the platform's frame cache, which serves any capture under 1.5s old. True by default: after a click, a cached frame can predate the action entirely, and a model reading it concludes the click missed and clicks again."),
90
+ .describe('Skip the platform\'s frame cache, which serves any capture under 1.5s old. True by default: after a click, a cached frame can predate the action entirely, and a model reading it concludes the click missed and clicks again. A capture needs a computer that is awake, so on a suspended one this is refused rather than answered — pass false to ask for the last saved frame instead, which is refused in turn when there is no saved frame to serve. A saved frame answers "what was on the screen" and cannot answer "did my click land".'),
50
91
  },
51
92
  annotations: { readOnlyHint: true },
52
93
  }, ({ computer_id, width, fresh }, extra) => guarded(async () => {
53
94
  const id = session.resolve(computer_id);
54
- const shot = await session.api.with(extra.signal).bytes('GET', P.computerAction(id, 'screenshot'), {
55
- query: { w: width, fresh: fresh ? 1 : undefined },
56
- }, MAX_INLINE_IMAGE_BYTES);
95
+ let shot;
96
+ try {
97
+ shot = await session.api.with(extra.signal).bytes('GET', P.computerAction(id, 'screenshot'), {
98
+ query: { w: width, fresh: fresh ? 1 : undefined },
99
+ }, MAX_INLINE_IMAGE_BYTES);
100
+ }
101
+ catch (err) {
102
+ // The refusal whose next step is a PARAMETER, caught here for the
103
+ // reason `backgroundFull` is caught in exec: the answer names one of
104
+ // this tool's own arguments, and the error classes are shared with
105
+ // every embedder and with two other clients.
106
+ //
107
+ // Only when this call asked for a capture, which is the only way the
108
+ // refusal can be about asking for one. A model that meets a bare 409
109
+ // here has nothing to try, and the thing it does instead is ask again
110
+ // — a loop over a computer that cannot answer it.
111
+ if (fresh && err instanceof ConflictError)
112
+ return cachedFrameOffered(err);
113
+ throw err;
114
+ }
57
115
  // The bound `read_file` observes, observed here too. A 3840x2160 capture
58
116
  // of a dense screen is the case it exists for: refused with its size and
59
117
  // the parameter that fixes it, rather than turned into ~85 MB of base64
@@ -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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"}
@@ -0,0 +1,30 @@
1
+ import { z } from 'zod';
2
+ import type { Registrar } from './types.js';
3
+ export declare const retentionSchema: z.ZodObject<{
4
+ max_bytes_per_stream: z.ZodOptional<z.ZodNumber>;
5
+ retention_seconds: z.ZodOptional<z.ZodNumber>;
6
+ }, "strict", z.ZodTypeAny, {
7
+ max_bytes_per_stream?: number | undefined;
8
+ retention_seconds?: number | undefined;
9
+ }, {
10
+ max_bytes_per_stream?: number | undefined;
11
+ retention_seconds?: number | undefined;
12
+ }>;
13
+ export declare const computerSchema: z.ZodOptional<z.ZodString>;
14
+ export declare const readAnnotations: {
15
+ readOnlyHint: boolean;
16
+ destructiveHint: boolean;
17
+ idempotentHint: boolean;
18
+ };
19
+ export declare const captureAnnotations: {
20
+ readOnlyHint: boolean;
21
+ destructiveHint: boolean;
22
+ idempotentHint: boolean;
23
+ };
24
+ export declare const deleteAnnotations: {
25
+ readOnlyHint: boolean;
26
+ destructiveHint: boolean;
27
+ idempotentHint: boolean;
28
+ };
29
+ export declare const registerResults: Registrar;
30
+ //# sourceMappingURL=results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../src/tools/results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,eAAO,MAAM,eAAe;;;;;;;;;EAUjB,CAAC;AACZ,eAAO,MAAM,cAAc,4BAKoC,CAAC;AAChE,eAAO,MAAM,eAAe;;;;CAAuE,CAAC;AACpG,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AACF,eAAO,MAAM,iBAAiB;;;;CAI7B,CAAC;AAQF,eAAO,MAAM,eAAe,EAAE,SAsG7B,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { z } from 'zod';
2
+ import { said } from '../format.js';
3
+ import * as P from '../paths.js';
4
+ import { PRESENTATION_DEFAULT, PRESENTATION_MAX, requireValue, resultMetadata, resultPage, resultQuery, retainedCall, retainOptions, scopeId, } from '../results.js';
5
+ export const retentionSchema = z
6
+ .object({
7
+ max_bytes_per_stream: z
8
+ .number()
9
+ .int()
10
+ .min(1)
11
+ .max(4 * 1024 * 1024)
12
+ .optional(),
13
+ retention_seconds: z.number().int().min(1).max(604800).optional(),
14
+ })
15
+ .strict();
16
+ export const computerSchema = z
17
+ .string()
18
+ .min(1)
19
+ .max(100)
20
+ .optional()
21
+ .describe('Computer, or the current use_computer selection.');
22
+ export const readAnnotations = { readOnlyHint: true, destructiveHint: false, idempotentHint: true };
23
+ export const captureAnnotations = {
24
+ readOnlyHint: false,
25
+ destructiveHint: false,
26
+ idempotentHint: false,
27
+ };
28
+ export const deleteAnnotations = {
29
+ readOnlyHint: false,
30
+ destructiveHint: true,
31
+ idempotentHint: true,
32
+ };
33
+ const identity = {
34
+ computer_id: computerSchema,
35
+ result_id: z
36
+ .string()
37
+ .length(36)
38
+ .regex(/^res_[a-f0-9]{32}$/),
39
+ };
40
+ export const registerResults = (server, session) => {
41
+ server.registerTool('retain_execution_output', {
42
+ title: 'Retain an explicit execution output version',
43
+ description: 'Capture one immutable prefix version from volatile guest output by stable execution_id. Explicit guest I/O; never resumes, retries or replays a command. Each call creates a separate version. Capture may commit even if its response is lost. Default 1 MiB per stream/max 4 MiB and default 86400s/max 604800s retention; diagnostics separately capped 64 KiB.',
44
+ inputSchema: {
45
+ computer_id: computerSchema,
46
+ execution_id: z
47
+ .string()
48
+ .length(37)
49
+ .regex(/^exec_[a-f0-9]{32}$/),
50
+ ...retentionSchema.shape,
51
+ },
52
+ annotations: captureAnnotations,
53
+ }, ({ computer_id, execution_id, max_bytes_per_stream, retention_seconds }, extra) => retainedCall(extra.signal, true, async (signal) => {
54
+ const id = session.resolve(computer_id);
55
+ requireValue(scopeId(id));
56
+ const body = retainOptions({
57
+ ...(max_bytes_per_stream === undefined ? {} : { max_bytes_per_stream }),
58
+ ...(retention_seconds === undefined ? {} : { retention_seconds }),
59
+ });
60
+ const data = await session.api
61
+ .with(signal)
62
+ .boundedJson('POST', P.retainedOutput(id, execution_id), 8192, 201, { body });
63
+ return said('Immutable retained version; readiness does not establish command success or complete guest output.', resultMetadata(data, id, undefined, execution_id, body));
64
+ }));
65
+ server.registerTool('get_result', {
66
+ title: 'Read retained result metadata',
67
+ description: 'Read one immutable result manifest without guest output/files, resume, capture or command replay. Expiry, current scope or storage availability can make a version unavailable.',
68
+ inputSchema: identity,
69
+ annotations: readAnnotations,
70
+ }, ({ computer_id, result_id }, extra) => retainedCall(extra.signal, false, async (signal) => {
71
+ const id = session.resolve(computer_id);
72
+ requireValue(scopeId(id));
73
+ return said('Immutable retained metadata; retained and upstream truncation are separate.', resultMetadata(await session.api.with(signal).boundedJson('GET', P.result(id, result_id), 8192, 200), id, result_id));
74
+ }));
75
+ server.registerTool('read_result_output', {
76
+ title: 'Read an independent retained byte page',
77
+ description: 'Read one passive retained stdout, stderr or diagnostic page at an explicit offset. Default 4096/max 16384 bytes. EOF concerns this immutable prefix, not task completion. Lossless UTF-8/BOM or exact base64; no guest read, shared cursor, implicit capture, iteration or replay.',
78
+ inputSchema: {
79
+ ...identity,
80
+ stream: z.enum(['stdout', 'stderr', 'diagnostic']),
81
+ offset: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
82
+ limit: z.number().int().min(1).max(PRESENTATION_MAX).default(PRESENTATION_DEFAULT),
83
+ },
84
+ annotations: readAnnotations,
85
+ }, ({ computer_id, result_id, stream, offset, limit }, extra) => retainedCall(extra.signal, false, async (signal) => {
86
+ const id = session.resolve(computer_id);
87
+ requireValue(scopeId(id));
88
+ const query = resultQuery(stream, offset, limit);
89
+ const response = await session.api
90
+ .with(signal)
91
+ .boundedBytes('GET', P.resultOutput(id, result_id), limit, 200, { query });
92
+ return said('One independent immutable byte page; no full-stream hash claim.', resultPage(response, result_id, query));
93
+ }));
94
+ server.registerTool('delete_result', {
95
+ title: 'Delete a retained output version',
96
+ description: 'Delete exactly this immutable result version. No metadata preflight or guest mutation. Same deletion effect on repeat, but a repeated 404 remains unavailable; no automatic retry.',
97
+ inputSchema: identity,
98
+ annotations: deleteAnnotations,
99
+ }, ({ computer_id, result_id }, extra) => retainedCall(extra.signal, true, async (signal) => {
100
+ const id = session.resolve(computer_id);
101
+ requireValue(scopeId(id));
102
+ await session.api.with(signal).boundedBytes('DELETE', P.result(id, result_id), 0, 204);
103
+ return said('Retained result deleted.', { result_id, deleted: true });
104
+ }));
105
+ };
106
+ //# sourceMappingURL=results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/tools/results.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ import type { Registrar } from './types.js';
3
+ /**
4
+ * A computer's secret bindings: which of the account's secrets it receives, at
5
+ * which revision, and where — as an environment variable (`env`) or as a file
6
+ * under FILES_DIR (`file`).
7
+ *
8
+ * No value ever crosses these routes, in either direction — only secret ids,
9
+ * revision ids, env names and file names — so nothing here can show one, and
10
+ * nothing a model sends can set one. Secrets themselves are created and rotated
11
+ * elsewhere.
12
+ *
13
+ * A change of bindings takes effect at the computer's NEXT START OR RESTART. A
14
+ * running computer keeps what it booted with until then, and a suspended one
15
+ * resumes with its old values; the sentences below say so every time, because a
16
+ * model that reads "saved" as "delivered" goes on to use a credential the guest
17
+ * does not have yet. The one thing that reaches a running computer sooner is a
18
+ * replaced VALUE of a secret bound as a file: that file is rewritten in place.
19
+ */
20
+ /** Where a file binding is published in the guest. */
21
+ export declare const FILES_DIR = "/run/mandala-secrets/user/files";
22
+ /** At most this many secrets per computer, and this many of them as files. */
23
+ export declare const SECRET_BINDINGS_MAX = 32;
24
+ export declare const SECRET_FILES_MAX = 8;
25
+ /**
26
+ * A binding list as the platform takes it, checked here for what it would
27
+ * refuse anyway — so the mistake is named against the entry that made it
28
+ * rather than coming back as a 400. `revision` adds the optional `revision_id`
29
+ * a rebind may send; a create has nothing to keep and takes none.
30
+ */
31
+ export declare function secretBindingsSchema(revision: boolean): z.ZodEffects<z.ZodArray<z.ZodObject<{
32
+ revision_id?: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>> | undefined;
33
+ secret_id: z.ZodEffects<z.ZodString, string, string>;
34
+ env: z.ZodOptional<z.ZodString>;
35
+ file: z.ZodOptional<z.ZodString>;
36
+ }, "strict", z.ZodTypeAny, {
37
+ secret_id: string;
38
+ file?: string | undefined;
39
+ env?: string | undefined;
40
+ revision_id?: unknown;
41
+ }, {
42
+ secret_id: string;
43
+ file?: string | undefined;
44
+ env?: string | undefined;
45
+ revision_id?: unknown;
46
+ }>, "many">, {
47
+ secret_id: string;
48
+ file?: string | undefined;
49
+ env?: string | undefined;
50
+ revision_id?: unknown;
51
+ }[], {
52
+ secret_id: string;
53
+ file?: string | undefined;
54
+ env?: string | undefined;
55
+ revision_id?: unknown;
56
+ }[]>;
57
+ export declare const registerSecrets: Registrar;
58
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/tools/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;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;AAyED,eAAO,MAAM,eAAe,EAAE,SA+E7B,CAAC"}
@@ -0,0 +1,204 @@
1
+ import { z } from 'zod';
2
+ import { guarded, refused, said } from '../format.js';
3
+ import * as P from '../paths.js';
4
+ /**
5
+ * A computer's secret bindings: which of the account's secrets it receives, at
6
+ * which revision, and where — as an environment variable (`env`) or as a file
7
+ * under FILES_DIR (`file`).
8
+ *
9
+ * No value ever crosses these routes, in either direction — only secret ids,
10
+ * revision ids, env names and file names — so nothing here can show one, and
11
+ * nothing a model sends can set one. Secrets themselves are created and rotated
12
+ * elsewhere.
13
+ *
14
+ * A change of bindings takes effect at the computer's NEXT START OR RESTART. A
15
+ * running computer keeps what it booted with until then, and a suspended one
16
+ * resumes with its old values; the sentences below say so every time, because a
17
+ * model that reads "saved" as "delivered" goes on to use a credential the guest
18
+ * does not have yet. The one thing that reaches a running computer sooner is a
19
+ * replaced VALUE of a secret bound as a file: that file is rewritten in place.
20
+ */
21
+ /** Where a file binding is published in the guest. */
22
+ export const FILES_DIR = '/run/mandala-secrets/user/files';
23
+ /** At most this many secrets per computer, and this many of them as files. */
24
+ export const SECRET_BINDINGS_MAX = 32;
25
+ export const SECRET_FILES_MAX = 8;
26
+ const SECRET_ENV = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/;
27
+ const SECRET_FILE = /^[a-z][a-z0-9_-]{0,47}$/;
28
+ const ENV_RULE = 'letters, digits and underscores, not starting with a digit, at most 64 characters';
29
+ const FILE_RULE = 'lowercase letters, digits, - and _, starting with a letter, at most 48 characters';
30
+ /** An id as the platform spells one: not empty, and nothing around it. */
31
+ const isId = (v) => typeof v === 'string' && v !== '' && v.trim() === v;
32
+ const idString = (what) => z.string().refine(isId, `${what} must not be empty or have spaces around it`);
33
+ /**
34
+ * A binding list as the platform takes it, checked here for what it would
35
+ * refuse anyway — so the mistake is named against the entry that made it
36
+ * rather than coming back as a 400. `revision` adds the optional `revision_id`
37
+ * a rebind may send; a create has nothing to keep and takes none.
38
+ */
39
+ export function secretBindingsSchema(revision) {
40
+ // Strict: a key this tool does not take is refused, not dropped. A create
41
+ // that carried a `revision_id` would otherwise validate, bind the latest, and
42
+ // leave the caller believing it had chosen a revision.
43
+ const entry = z.strictObject({
44
+ secret_id: idString('secret_id').describe('The secret to bind — `csec-` and sixteen hex.'),
45
+ env: z
46
+ .string()
47
+ .regex(SECRET_ENV, `env must be ${ENV_RULE}`)
48
+ .optional()
49
+ .describe(`Deliver it as this environment variable in the desktop session: ${ENV_RULE}. Exactly one of env and file.`),
50
+ file: z
51
+ .string()
52
+ .regex(SECRET_FILE, `file must be ${FILE_RULE}`)
53
+ .optional()
54
+ .describe(`Deliver it as the file ${FILES_DIR}/<file>, for a program that reads a path (a kubeconfig, a key): ${FILE_RULE}. May hold any bytes. Exactly one of env and file.`),
55
+ ...(revision
56
+ ? {
57
+ revision_id: idString('revision_id')
58
+ .optional()
59
+ .describe('Omit to record the latest revision. Name the one the computer holds now to keep it: a revision is what the computer last received, not a pin, and every start or restart delivers the latest value regardless.'),
60
+ }
61
+ : {}),
62
+ });
63
+ return z
64
+ .array(entry)
65
+ .max(SECRET_BINDINGS_MAX, `at most ${SECRET_BINDINGS_MAX} secrets per computer`)
66
+ .superRefine((list, ctx) => {
67
+ const ids = new Set();
68
+ const envs = new Set();
69
+ const files = new Set();
70
+ list.forEach((b, i) => {
71
+ const at = (message) => ctx.addIssue({ code: 'custom', path: [i], message });
72
+ if ((b.env === undefined) === (b.file === undefined)) {
73
+ at(`secrets[${i}] must name exactly one of env and file`);
74
+ }
75
+ if (ids.has(b.secret_id))
76
+ at(`secrets[${i}]: ${b.secret_id} is bound twice`);
77
+ ids.add(b.secret_id);
78
+ // Two namespaces: a variable and a file may share a spelling.
79
+ if (b.env !== undefined) {
80
+ if (envs.has(b.env))
81
+ at(`secrets[${i}].env ${b.env} is bound twice`);
82
+ envs.add(b.env);
83
+ }
84
+ if (b.file !== undefined) {
85
+ if (files.has(b.file))
86
+ at(`secrets[${i}].file ${b.file} is bound twice`);
87
+ files.add(b.file);
88
+ }
89
+ });
90
+ if (files.size > SECRET_FILES_MAX) {
91
+ ctx.addIssue({ code: 'custom', message: `at most ${SECRET_FILES_MAX} secrets as files` });
92
+ }
93
+ });
94
+ }
95
+ const idArg = {
96
+ computer_id: z
97
+ .string()
98
+ .optional()
99
+ .describe('Which computer. Defaults to the one selected with use_computer.'),
100
+ };
101
+ const isRecord = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
102
+ const shapeOf = (v) => v === undefined ? 'no body at all' : v === null ? 'null' : Array.isArray(v) ? 'a list' : typeof v;
103
+ function bindingsOf(body) {
104
+ if (!isRecord(body))
105
+ return undefined;
106
+ const { secrets, version } = body;
107
+ if (!Array.isArray(secrets))
108
+ return undefined;
109
+ if (typeof version !== 'number' || !Number.isSafeInteger(version) || version < 0)
110
+ return undefined;
111
+ const out = [];
112
+ for (const entry of secrets) {
113
+ if (!isRecord(entry))
114
+ return undefined;
115
+ const { secret_id, revision_id, env, file } = entry;
116
+ if (!isId(secret_id) || !isId(revision_id))
117
+ return undefined;
118
+ // Exactly one, spelled as the platform would accept it. Null reads as
119
+ // absent; anything else present — an empty string included — counts, so a
120
+ // row naming both or neither is refused rather than guessed at.
121
+ const hasEnv = env !== undefined && env !== null;
122
+ const hasFile = file !== undefined && file !== null;
123
+ if (hasEnv === hasFile)
124
+ return undefined;
125
+ if (hasEnv) {
126
+ if (typeof env !== 'string' || !SECRET_ENV.test(env))
127
+ return undefined;
128
+ out.push({ secret_id, revision_id, env });
129
+ }
130
+ else {
131
+ if (typeof file !== 'string' || !SECRET_FILE.test(file))
132
+ return undefined;
133
+ out.push({ secret_id, revision_id, file });
134
+ }
135
+ }
136
+ return { secrets: out, version };
137
+ }
138
+ /**
139
+ * One binding in a line: where the guest finds it — a variable name, or a file's
140
+ * full path — then what it is bound to.
141
+ */
142
+ const bindingLine = (b) => `${b.env ?? `${FILES_DIR}/${b.file}`} = ${b.secret_id} @ ${b.revision_id}`;
143
+ const LEGEND = 'variable or file = secret @ revision, values never shown';
144
+ /** The bindings, one per line. Callers say "none" themselves for an empty list. */
145
+ function listing(b) {
146
+ return `\n${b.secrets.map(bindingLine).join('\n')}`;
147
+ }
148
+ const TIMING = 'The new bindings reach the guest at its NEXT START OR RESTART: a running computer keeps what it booted with until then, and a suspended one resumes with its old values.';
149
+ /** What reaches a running computer without a restart: a replaced value, as a file. */
150
+ const LIVE_FILES = "Every start and restart delivers each secret's latest value. Separately, when a secret's value is replaced, a running computer bound to it as a file has that file rewritten within seconds; a variable waits for the next start or restart.";
151
+ export const registerSecrets = (server, session) => {
152
+ server.registerTool('get_computer_secrets', {
153
+ title: "Read a computer's secret bindings",
154
+ 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_FILES}`,
155
+ inputSchema: idArg,
156
+ annotations: { readOnlyHint: true },
157
+ }, ({ computer_id }, extra) => guarded(async () => {
158
+ const id = session.resolve(computer_id);
159
+ const body = await session.api
160
+ .with(extra.signal)
161
+ .json('GET', P.computerAction(id, 'secrets'));
162
+ const bindings = bindingsOf(body);
163
+ if (!bindings) {
164
+ return refused(`GET /computers/${id}/secrets answered with ${shapeOf(body)}, not a list of secret bindings. This does not mean the computer has none.`, body);
165
+ }
166
+ if (!bindings.secrets.length) {
167
+ return said(`${id} is bound to no secrets (version ${bindings.version}). set_computer_secrets binds some.`, body);
168
+ }
169
+ const n = bindings.secrets.length;
170
+ return said(`${id} is bound to ${n} secret${n === 1 ? '' : 's'} (version ${bindings.version}; ${LEGEND}):${listing(bindings)}`, body);
171
+ }));
172
+ server.registerTool('set_computer_secrets', {
173
+ title: "Replace a computer's secret bindings",
174
+ description: `Replace the WHOLE list of secrets a computer is bound to — not a merge: any binding left out is removed, and \`secrets: []\` removes every binding. Each entry names a secret id and exactly one of \`env\` (the environment variable it is delivered under) or \`file\` (delivered as ${FILES_DIR}/<file>) — at most ${SECRET_BINDINGS_MAX} secrets, ${SECRET_FILES_MAX} of them as files, none twice and no variable or file name twice — and is recorded at that secret's latest revision unless it names \`revision_id\`, which must be the revision the computer holds now (any other revision is refused). A binding's revision is what the computer last received, never a pin: naming it only says this change keeps the value the running computer already has, so the change does not stop it being suspended. Only ids, revisions and names are sent and answered — values are NEVER shown or set here. ${TIMING} ${LIVE_FILES} Binding a computer that has NO secrets yet requires it to be STOPPED: that first binding is refused with 409 while the computer is running or suspended, because a computer started without secrets cannot receive them until it starts again, and a restart does not do that. Start it afterwards to deliver them. Send \`version\` from get_computer_secrets to change only the list you read: if it changed since, this is refused with 409 and nothing changes. Also 409 while a delivery to the computer is in progress. After a change that drops a secret or moves one to another revision, a running computer cannot be suspended or memory-snapshotted until it restarts. Owners and members only; Linux computers only, and binding one for the first time needs a template whose image can receive secrets.`,
175
+ inputSchema: {
176
+ ...idArg,
177
+ secrets: secretBindingsSchema(true).describe('The complete new list. Every binding not in it is removed; [] removes them all.'),
178
+ version: z
179
+ .number()
180
+ .int()
181
+ .nonnegative()
182
+ .optional()
183
+ .describe('The `version` a read answered. Sent, the change is refused (409) if the list changed since; omitted, it replaces whatever is there.'),
184
+ },
185
+ annotations: { destructiveHint: true },
186
+ }, ({ computer_id, secrets, version }, extra) => guarded(async () => {
187
+ const id = session.resolve(computer_id);
188
+ const body = await session.api
189
+ .with(extra.signal)
190
+ .json('PUT', P.computerAction(id, 'secrets'), {
191
+ body: { secrets, ...(version === undefined ? {} : { version }) },
192
+ });
193
+ const bindings = bindingsOf(body);
194
+ if (!bindings) {
195
+ return refused(`PUT /computers/${id}/secrets answered with ${shapeOf(body)}, not a list of secret bindings. THE CHANGE MAY HAVE BEEN MADE — get_computer_secrets says what the computer is bound to now.`, body);
196
+ }
197
+ const n = bindings.secrets.length;
198
+ const what = n
199
+ ? `${id} is now bound to ${n} secret${n === 1 ? '' : 's'} (version ${bindings.version}; ${LEGEND}):${listing(bindings)}`
200
+ : `${id} is now bound to no secrets (version ${bindings.version}).`;
201
+ return said(`${what}\n${TIMING} ${LIVE_FILES}`, body);
202
+ }));
203
+ };
204
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/tools/secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Registrar } from './types.js';
2
+ export declare const registerSignals: Registrar;
3
+ //# sourceMappingURL=signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/tools/signals.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA0E5C,eAAO,MAAM,eAAe,EAAE,SAqD7B,CAAC"}