@log0u7/opencode-mesh 0.2.0 → 0.4.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 (57) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/README.md +46 -13
  3. package/dist/lib/client.d.ts +2 -0
  4. package/dist/lib/client.d.ts.map +1 -1
  5. package/dist/lib/client.js +6 -1
  6. package/dist/lib/client.js.map +1 -1
  7. package/dist/lib/db.d.ts.map +1 -1
  8. package/dist/lib/db.js +26 -1
  9. package/dist/lib/db.js.map +1 -1
  10. package/dist/lib/discovery.d.ts +3 -0
  11. package/dist/lib/discovery.d.ts.map +1 -1
  12. package/dist/lib/discovery.js +33 -7
  13. package/dist/lib/discovery.js.map +1 -1
  14. package/dist/lib/identity.d.ts +10 -8
  15. package/dist/lib/identity.d.ts.map +1 -1
  16. package/dist/lib/identity.js +132 -32
  17. package/dist/lib/identity.js.map +1 -1
  18. package/dist/lib/locks.d.ts.map +1 -1
  19. package/dist/lib/locks.js +20 -12
  20. package/dist/lib/locks.js.map +1 -1
  21. package/dist/lib/peers.d.ts +13 -1
  22. package/dist/lib/peers.d.ts.map +1 -1
  23. package/dist/lib/peers.js +114 -18
  24. package/dist/lib/peers.js.map +1 -1
  25. package/dist/lib/serve.d.ts +2 -0
  26. package/dist/lib/serve.d.ts.map +1 -1
  27. package/dist/lib/serve.js +62 -71
  28. package/dist/lib/serve.js.map +1 -1
  29. package/dist/lib/spawn.d.ts +14 -4
  30. package/dist/lib/spawn.d.ts.map +1 -1
  31. package/dist/lib/spawn.js +210 -21
  32. package/dist/lib/spawn.js.map +1 -1
  33. package/dist/lib/sqlite.d.ts.map +1 -1
  34. package/dist/lib/sqlite.js +15 -4
  35. package/dist/lib/sqlite.js.map +1 -1
  36. package/dist/lib/workers.d.ts +2 -0
  37. package/dist/lib/workers.d.ts.map +1 -1
  38. package/dist/lib/workers.js +45 -12
  39. package/dist/lib/workers.js.map +1 -1
  40. package/dist/lib/worktree.d.ts +22 -4
  41. package/dist/lib/worktree.d.ts.map +1 -1
  42. package/dist/lib/worktree.js +54 -6
  43. package/dist/lib/worktree.js.map +1 -1
  44. package/dist/plugin-v2.d.ts.map +1 -1
  45. package/dist/plugin-v2.js +65 -337
  46. package/dist/plugin-v2.js.map +1 -1
  47. package/dist/plugin.d.ts +2 -6
  48. package/dist/plugin.d.ts.map +1 -1
  49. package/dist/plugin.js +119 -265
  50. package/dist/plugin.js.map +1 -1
  51. package/dist/tools.d.ts +30 -0
  52. package/dist/tools.d.ts.map +1 -0
  53. package/dist/tools.js +315 -0
  54. package/dist/tools.js.map +1 -0
  55. package/dist/types/peer.d.ts +2 -0
  56. package/dist/types/peer.d.ts.map +1 -1
  57. package/package.json +10 -8
package/dist/plugin-v2.js CHANGED
@@ -1,42 +1,58 @@
1
1
  import { Plugin } from "@opencode/plugin";
2
2
  import { Bonjour } from "bonjour-service";
3
- import { sendMail } from "./lib/client.js";
4
3
  import { openMeshDb } from "./lib/db.js";
5
- import { advertiseMesh, browseMesh, tailnetAddresses, } from "./lib/discovery.js";
4
+ import { advertiseMesh, browseMesh } from "./lib/discovery.js";
6
5
  import { upsertDiscoveredPeer } from "./lib/peers.js";
7
6
  import { loadOrCreateIdentity } from "./lib/identity.js";
8
- import { ackMessages, unreadMessages } from "./lib/mail.js";
9
- import { releaseLock, tryLock, listLocks } from "./lib/locks.js";
10
- import { createPairingToken, listPeers, pairWithToken } from "./lib/peers.js";
7
+ import { nodeSpawn, stopAllWorkers } from "./lib/spawn.js";
8
+ import { v2WorktreeDomainClient } from "./lib/worktree.js";
9
+ import { reconcileWorkers } from "./lib/workers.js";
11
10
  import { startMeshServer } from "./lib/serve.js";
12
- import { nodeSpawn, runWorker, stopAllWorkers, stopWorker } from "./lib/spawn.js";
13
- import { createWorkerWorktree, removeWorkerWorktree } from "./lib/worktree.js";
14
- import { deleteWorker, getWorker, listWorkers } from "./lib/workers.js";
15
- import { readFileSync } from "node:fs";
16
- import { join } from "node:path";
17
- import { defaultDataDir, findSendablePeer } from "./plugin.js";
11
+ import { buildToolSpecs } from "./tools.js";
12
+ import { defaultDataDir, parseOptions } from "./plugin.js";
18
13
  const DEFAULT_PORT = 4399;
14
+ // A worker spawned by mesh_spawn inherits this marker: it must not boot its own
15
+ // mesh server, advertise over mDNS or register mesh tools. A pool of N workers
16
+ // then costs N worktrees, not N mesh nodes.
17
+ function isChildProcess() {
18
+ return process.env.OPENCODE_MESH_CHILD === "1";
19
+ }
20
+ // The v2 adapter: OpenCode 2.x hosts call setup() (Plugin.define). Tool specs
21
+ // come from tools.ts; this file only maps them onto the v2 editor surface
22
+ // (JSON Schema inputs, {content} results).
19
23
  export const MeshV2 = Plugin.define({
20
24
  id: "@log0u7/opencode-mesh",
21
25
  async setup(ctx) {
22
- const options = ctx.options;
23
- const dataDir = options?.dataDir ?? defaultDataDir();
26
+ if (isChildProcess()) {
27
+ return async () => { };
28
+ }
29
+ const options = parseOptions(ctx.options);
30
+ const dataDir = options.dataDir ?? defaultDataDir();
24
31
  const identity = loadOrCreateIdentity(dataDir);
25
32
  const db = openMeshDb(`${dataDir}/mesh.db`);
26
- const { server, port } = await startMeshServer({ db, port: options?.port ?? DEFAULT_PORT });
27
- // The v2 worktree domain speaks the same worktree.create/remove shape the
28
- // plugin's WorktreeClient wraps over the v1 REST API.
29
- const worktreeClient = ctx.worktree;
30
- const spawnFn = options?.spawnFn ?? nodeSpawn;
33
+ // Workers from a previous host process can never be stopped again once the
34
+ // in-memory map is gone: mark dead pids before anything else uses the table.
35
+ reconcileWorkers(db);
36
+ const { server, port, address } = await startMeshServer({
37
+ db,
38
+ port: options.port ?? DEFAULT_PORT,
39
+ ...(options.bind !== undefined ? { bind: options.bind } : {}),
40
+ });
41
+ // Prefer an injected client (tests, hosts that pass one), then adapt the
42
+ // 2.x in-process worktree domain to the REST-shaped WorktreeClient. The
43
+ // domain resolves payloads directly, without the v1 `{ data }` envelope.
44
+ const worktreeClient = options.worktreeClient ?? v2WorktreeDomainClient(ctx.worktree, ctx.location.project.id);
45
+ const spawnFn = options.spawnFn ?? nodeSpawn;
31
46
  let advertiseHandle = null;
32
47
  let browseHandle = null;
33
- if (options?.advertise !== false) {
48
+ if (options.advertise !== false) {
34
49
  const bonjour = new Bonjour();
35
50
  advertiseHandle = advertiseMesh({
36
51
  bonjour,
37
52
  port,
38
53
  node_id: identity.node_id,
39
54
  fingerprint: identity.fingerprint,
55
+ public_key: identity.public_key,
40
56
  });
41
57
  browseHandle = browseMesh({
42
58
  bonjour,
@@ -48,325 +64,24 @@ export const MeshV2 = Plugin.define({
48
64
  });
49
65
  }
50
66
  await ctx.tool.transform((editor) => {
51
- editor.add({
52
- name: "mesh_status",
53
- description: "Show this node's identity, server address, and known peers.",
54
- input: { type: "object", properties: {}, additionalProperties: false },
55
- async execute() {
56
- const peers = listPeers(db);
57
- const tailnet = await tailnetAddresses();
58
- return {
59
- content: JSON.stringify({
60
- node_id: identity.node_id,
61
- hostname: identity.hostname,
62
- fingerprint: identity.fingerprint,
63
- server: `127.0.0.1:${port}`,
64
- tailnet_addresses: tailnet,
65
- peers: peers.map((p) => ({
66
- node_id: p.node_id,
67
- hostname: p.hostname,
68
- paired: p.paired,
69
- addresses: p.addresses,
70
- })),
71
- locks: listLocks(db, { now: Date.now() }),
72
- }, null, 2),
73
- };
74
- },
75
- });
76
- editor.add({
77
- name: "mesh_pair",
78
- description: "Pair with a peer. With no args: emit a pairing offer (token, node id, server address) for the peer's mesh_pair. With node_id, token, and address: complete pairing started by the other side.",
79
- input: {
80
- type: "object",
81
- properties: {
82
- node_id: { type: "string", description: "Peer node id, from its mesh_pair output" },
83
- token: { type: "string", description: "Pairing token from the peer's offer" },
84
- address: { type: "string", description: "Peer server address as host:port" },
85
- },
86
- additionalProperties: false,
87
- },
88
- async execute(args) {
89
- const a = args;
90
- if (typeof a.token === "string" && typeof a.node_id === "string") {
91
- pairWithToken(db, {
92
- node_id: a.node_id,
93
- hostname: "manual",
94
- fingerprint: "manual",
95
- token: a.token,
96
- addresses: a.address !== undefined ? [a.address] : [],
97
- });
98
- return { content: `paired with ${a.node_id}` };
99
- }
100
- const token = createPairingToken(db);
101
- return {
102
- content: `peer should run: mesh_pair(node_id="${identity.node_id}", token="${token}", address="127.0.0.1:${port}")`,
103
- };
104
- },
105
- });
106
- editor.add({
107
- name: "mesh_send",
108
- description: "Send a message to a paired peer's mailbox.",
109
- input: {
110
- type: "object",
111
- properties: {
112
- peer: { type: "string", description: "Peer node id or hostname" },
113
- subject: { type: "string", description: "Short subject" },
114
- body: { type: "string", description: "Message body" },
115
- },
116
- required: ["peer", "subject", "body"],
117
- additionalProperties: false,
118
- },
119
- async execute(args) {
120
- const a = args;
121
- const peer = findSendablePeer(db, a.peer);
122
- if (peer === null) {
123
- return { content: `error: no paired peer matching ${a.peer}; run mesh_status` };
124
- }
125
- const address = peer.addresses[0];
126
- if (address === undefined) {
127
- return {
128
- content: `error: peer ${peer.node_id} has no known address; share addresses manually or wait for discovery`,
129
- };
130
- }
131
- const host = address.includes(":") ? address : `${address}:${port}`;
132
- const result = await sendMail({
133
- url: `http://${host}`,
134
- token: peer.token ?? "",
135
- from: identity.node_id,
136
- subject: a.subject,
137
- body: a.body,
138
- });
139
- return { content: `sent to ${peer.node_id}: ${result}` };
140
- },
141
- });
142
- editor.add({
143
- name: "mesh_inbox",
144
- description: "List unread messages from peers and mark them read.",
145
- input: {
146
- type: "object",
147
- properties: {
148
- ack: { type: "boolean", description: "Mark messages read (default true)" },
149
- },
150
- additionalProperties: false,
151
- },
152
- async execute(args) {
153
- const a = args;
154
- const messages = unreadMessages(db);
155
- if (messages.length === 0) {
156
- return { content: "inbox empty" };
157
- }
158
- if (a.ack !== false) {
159
- ackMessages(db, messages.map((m) => m.id));
160
- }
161
- return { content: JSON.stringify(messages, null, 2) };
162
- },
163
- });
164
- editor.add({
165
- name: "mesh_lock",
166
- description: "Claim exclusive ownership of a file or worktree path so other sessions wait.",
167
- input: {
168
- type: "object",
169
- properties: {
170
- path: {
171
- type: "string",
172
- description: "Path to lock (relative to worktree or absolute)",
173
- },
174
- ttl: { type: "number", description: "Seconds before the lock expires (default 600)" },
175
- },
176
- required: ["path"],
177
- additionalProperties: false,
178
- },
179
- async execute(args, context) {
180
- const a = args;
181
- const granted = tryLock(db, {
182
- path: a.path,
183
- owner_node: identity.node_id,
184
- owner_session: context.sessionID,
185
- ttl_ms: (a.ttl ?? 600) * 1000,
186
- now: Date.now(),
187
- });
188
- return {
189
- content: granted
190
- ? `locked ${a.path}`
191
- : `error: ${a.path} is locked by another session; try later or run mesh_status`,
192
- };
193
- },
194
- });
195
- editor.add({
196
- name: "mesh_unlock",
197
- description: "Release a claim made with mesh_lock.",
198
- input: {
199
- type: "object",
200
- properties: {
201
- path: { type: "string", description: "Path to unlock" },
202
- },
203
- required: ["path"],
204
- additionalProperties: false,
205
- },
206
- async execute(args) {
207
- const a = args;
208
- const released = releaseLock(db, { path: a.path, owner_node: identity.node_id });
209
- return {
210
- content: released
211
- ? `released ${a.path}`
212
- : `error: ${a.path} was not locked by this node`,
213
- };
214
- },
215
- });
216
- editor.add({
217
- name: "mesh_spawn",
218
- description: "Run a task as a background worker in an isolated opencode worktree (headless, --auto permissions by default). Returns worker id, worktree, and branch.",
219
- input: {
220
- type: "object",
221
- properties: {
222
- task: { type: "string", description: "Task description given to the worker" },
223
- name: { type: "string", description: "Worktree/branch name (random by default)" },
224
- model: { type: "string", description: "provider/model for the worker" },
225
- agent: { type: "string", description: "Agent for the worker" },
226
- auto: {
227
- type: "boolean",
228
- description: "Grant all permissions to the worker (default true)",
229
- },
230
- },
231
- required: ["task"],
232
- additionalProperties: false,
233
- },
234
- async execute(args) {
235
- const a = args;
236
- try {
237
- const info = await createWorkerWorktree(worktreeClient, {
238
- ...(a.name !== undefined ? { name: a.name } : {}),
239
- });
240
- const worker = runWorker(db, dataDir, {
241
- task: a.task,
242
- worktree_path: info.directory,
243
- branch: info.branch ?? info.name,
244
- ...(a.model !== undefined ? { model: a.model } : {}),
245
- ...(a.agent !== undefined ? { agent: a.agent } : {}),
246
- ...(a.auto !== undefined ? { auto: a.auto } : {}),
247
- spawnFn,
248
- });
249
- return {
250
- content: JSON.stringify({
251
- worker_id: worker.id,
252
- worktree: info.directory,
253
- branch: worker.branch,
254
- pid: worker.pid,
255
- }, null, 2),
256
- };
257
- }
258
- catch (error) {
259
- return { content: `error: ${error instanceof Error ? error.message : String(error)}` };
260
- }
261
- },
262
- });
263
- editor.add({
264
- name: "mesh_workers",
265
- description: "List spawned workers with their lifecycle state.",
266
- input: { type: "object", properties: {}, additionalProperties: false },
267
- async execute() {
268
- const workers = listWorkers(db);
269
- if (workers.length === 0) {
270
- return { content: "[]" };
271
- }
272
- return { content: JSON.stringify(workers, null, 2) };
273
- },
274
- });
275
- editor.add({
276
- name: "mesh_worker_logs",
277
- description: "Show the tail of a worker's captured output.",
278
- input: {
279
- type: "object",
280
- properties: {
281
- worker_id: {
282
- type: "string",
283
- description: "Worker id, from mesh_spawn or mesh_workers",
284
- },
285
- tail: { type: "number", description: "Number of lines (default 50)" },
286
- },
287
- required: ["worker_id"],
288
- additionalProperties: false,
289
- },
290
- async execute(args) {
291
- const a = args;
292
- const worker = getWorker(db, a.worker_id);
293
- if (!worker) {
294
- return { content: `error: unknown worker ${a.worker_id}` };
295
- }
296
- const path = join(dataDir, "workers", `${worker.id}.log`);
297
- let content;
298
- try {
299
- content = readFileSync(path, "utf8");
300
- }
301
- catch {
302
- return { content: "no log output yet" };
303
- }
304
- const lines = content.split("\n");
305
- const limit = a.tail ?? 50;
306
- return { content: lines.slice(-limit - 1, -1).join("\n") || "no log output yet" };
307
- },
308
- });
309
- editor.add({
310
- name: "mesh_worker_stop",
311
- description: "Stop a running worker (SIGTERM).",
312
- input: {
313
- type: "object",
314
- properties: {
315
- worker_id: { type: "string", description: "Worker id" },
316
- },
317
- required: ["worker_id"],
318
- additionalProperties: false,
319
- },
320
- async execute(args) {
321
- const a = args;
322
- try {
323
- stopWorker(db, a.worker_id);
324
- return { content: `stopped ${a.worker_id}` };
325
- }
326
- catch (error) {
327
- return { content: `error: ${error instanceof Error ? error.message : String(error)}` };
328
- }
329
- },
330
- });
331
- editor.add({
332
- name: "mesh_worker_remove",
333
- description: "Remove a finished worker: deletes the worktree (native API) and the registry row.",
334
- input: {
335
- type: "object",
336
- properties: {
337
- worker_id: { type: "string", description: "Worker id" },
338
- force: { type: "boolean", description: "Stop a running worker before removal" },
67
+ for (const spec of buildToolSpecs({
68
+ db,
69
+ identity,
70
+ dataDir,
71
+ serverAddress: address,
72
+ port,
73
+ worktreeClient,
74
+ spawnFn,
75
+ })) {
76
+ editor.add({
77
+ name: spec.name,
78
+ description: spec.description,
79
+ input: jsonSchema(spec),
80
+ async execute(args, context) {
81
+ return { content: await spec.execute(args, context) };
339
82
  },
340
- required: ["worker_id"],
341
- additionalProperties: false,
342
- },
343
- async execute(args) {
344
- const a = args;
345
- const worker = getWorker(db, a.worker_id);
346
- if (!worker) {
347
- return { content: `error: unknown worker ${a.worker_id}` };
348
- }
349
- if (worker.status === "running") {
350
- if (a.force !== true) {
351
- return {
352
- content: `error: worker ${worker.id} is running; use force=true to stop and remove it`,
353
- };
354
- }
355
- // force: terminate first so no process keeps writing into a deleted worktree.
356
- stopWorker(db, worker.id);
357
- }
358
- try {
359
- await removeWorkerWorktree(worktreeClient, { directory: worker.worktree_path });
360
- }
361
- catch (error) {
362
- return {
363
- content: `error: worktree remove failed: ${error instanceof Error ? error.message : String(error)}`,
364
- };
365
- }
366
- deleteWorker(db, a.worker_id);
367
- return { content: `removed ${worker.id} (worktree and registry row deleted)` };
368
- },
369
- });
83
+ });
84
+ }
370
85
  });
371
86
  const cleanup = async () => {
372
87
  stopAllWorkers(db);
@@ -378,4 +93,17 @@ export const MeshV2 = Plugin.define({
378
93
  return cleanup;
379
94
  },
380
95
  });
96
+ function jsonSchema(spec) {
97
+ const properties = {};
98
+ for (const field of spec.fields) {
99
+ properties[field.name] = { type: field.type, description: field.description };
100
+ }
101
+ const required = spec.fields.filter((f) => f.required).map((f) => f.name);
102
+ return {
103
+ type: "object",
104
+ properties,
105
+ ...(required.length > 0 ? { required } : {}),
106
+ additionalProperties: false,
107
+ };
108
+ }
381
109
  //# sourceMappingURL=plugin-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-v2.js","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-v2.js","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"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"}
package/dist/plugin.d.ts CHANGED
@@ -1,19 +1,15 @@
1
1
  import type { Plugin } from "@opencode-ai/plugin";
2
- import { type MeshDb } from "./lib/db.js";
3
2
  import { type SpawnFn } from "./lib/spawn.js";
4
3
  import { type WorktreeClient } from "./lib/worktree.js";
5
4
  export type PluginOptions = {
6
5
  dataDir?: string;
7
6
  port?: number;
7
+ bind?: "loopback" | "lan";
8
8
  advertise?: boolean;
9
9
  worktreeClient?: WorktreeClient;
10
10
  spawnFn?: SpawnFn;
11
11
  };
12
+ export declare function parseOptions(raw: PluginOptions | undefined): PluginOptions;
12
13
  export declare const MeshPlugin: Plugin;
13
14
  export declare function defaultDataDir(): string;
14
- export declare function findSendablePeer(db: MeshDb, query: string): {
15
- node_id: string;
16
- addresses: string[];
17
- token: string | null;
18
- } | null;
19
15
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMzD,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAatD,OAAO,EAAoD,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAK3B,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAIF,eAAO,MAAM,UAAU,EAAE,MAyTxB,CAAC;AAEF,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAGvE"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQzD,OAAO,EAA6B,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAA8C,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKpG,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAOF,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAiD1E;AAYD,eAAO,MAAM,UAAU,EAAE,MA8ExB,CAAC;AAoBF,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}