dot-agents 0.6.0 → 0.7.4

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 (80) hide show
  1. package/dist/cli/commands/channel.d.ts.map +1 -1
  2. package/dist/cli/commands/channel.js +70 -2
  3. package/dist/cli/commands/channel.js.map +1 -1
  4. package/dist/daemon/api/channels.d.ts +6 -0
  5. package/dist/daemon/api/channels.d.ts.map +1 -0
  6. package/dist/daemon/api/channels.js +143 -0
  7. package/dist/daemon/api/channels.js.map +1 -0
  8. package/dist/daemon/api/server.d.ts.map +1 -1
  9. package/dist/daemon/api/server.js +56 -0
  10. package/dist/daemon/api/server.js.map +1 -1
  11. package/dist/daemon/daemon.d.ts +18 -0
  12. package/dist/daemon/daemon.d.ts.map +1 -1
  13. package/dist/daemon/daemon.js +124 -6
  14. package/dist/daemon/daemon.js.map +1 -1
  15. package/dist/daemon/lib/index.d.ts +1 -0
  16. package/dist/daemon/lib/index.d.ts.map +1 -1
  17. package/dist/daemon/lib/index.js +1 -0
  18. package/dist/daemon/lib/index.js.map +1 -1
  19. package/dist/daemon/lib/safeguards.d.ts +68 -0
  20. package/dist/daemon/lib/safeguards.d.ts.map +1 -0
  21. package/dist/daemon/lib/safeguards.js +135 -0
  22. package/dist/daemon/lib/safeguards.js.map +1 -0
  23. package/dist/daemon/lib/watcher.d.ts.map +1 -1
  24. package/dist/daemon/lib/watcher.js +48 -8
  25. package/dist/daemon/lib/watcher.js.map +1 -1
  26. package/dist/daemon/web/app.js +433 -0
  27. package/dist/daemon/web/index.html +68 -0
  28. package/dist/daemon/web/styles.css +452 -0
  29. package/dist/lib/environment.d.ts +1 -0
  30. package/dist/lib/environment.d.ts.map +1 -1
  31. package/dist/lib/environment.js +14 -0
  32. package/dist/lib/environment.js.map +1 -1
  33. package/dist/lib/invoke.d.ts +8 -0
  34. package/dist/lib/invoke.d.ts.map +1 -1
  35. package/dist/lib/invoke.js +28 -16
  36. package/dist/lib/invoke.js.map +1 -1
  37. package/dist/lib/processor.d.ts +8 -0
  38. package/dist/lib/processor.d.ts.map +1 -1
  39. package/dist/lib/processor.js +16 -2
  40. package/dist/lib/processor.js.map +1 -1
  41. package/dist/lib/validation/persona.d.ts.map +1 -1
  42. package/dist/lib/validation/persona.js +41 -4
  43. package/dist/lib/validation/persona.js.map +1 -1
  44. package/package.json +15 -9
  45. package/dist/lib/channel.test.d.ts +0 -2
  46. package/dist/lib/channel.test.d.ts.map +0 -1
  47. package/dist/lib/channel.test.js +0 -33
  48. package/dist/lib/channel.test.js.map +0 -1
  49. package/dist/lib/frontmatter.test.d.ts +0 -2
  50. package/dist/lib/frontmatter.test.d.ts.map +0 -1
  51. package/dist/lib/frontmatter.test.js +0 -60
  52. package/dist/lib/frontmatter.test.js.map +0 -1
  53. package/dist/lib/integration.test.d.ts +0 -2
  54. package/dist/lib/integration.test.d.ts.map +0 -1
  55. package/dist/lib/integration.test.js +0 -445
  56. package/dist/lib/integration.test.js.map +0 -1
  57. package/dist/lib/invoke.test.d.ts +0 -2
  58. package/dist/lib/invoke.test.d.ts.map +0 -1
  59. package/dist/lib/invoke.test.js +0 -82
  60. package/dist/lib/invoke.test.js.map +0 -1
  61. package/dist/lib/persona.test.d.ts +0 -2
  62. package/dist/lib/persona.test.d.ts.map +0 -1
  63. package/dist/lib/persona.test.js +0 -324
  64. package/dist/lib/persona.test.js.map +0 -1
  65. package/dist/lib/processor.test.d.ts +0 -2
  66. package/dist/lib/processor.test.d.ts.map +0 -1
  67. package/dist/lib/processor.test.js +0 -134
  68. package/dist/lib/processor.test.js.map +0 -1
  69. package/dist/lib/registry.test.d.ts +0 -2
  70. package/dist/lib/registry.test.d.ts.map +0 -1
  71. package/dist/lib/registry.test.js +0 -236
  72. package/dist/lib/registry.test.js.map +0 -1
  73. package/dist/lib/session-thread.test.d.ts +0 -2
  74. package/dist/lib/session-thread.test.d.ts.map +0 -1
  75. package/dist/lib/session-thread.test.js +0 -235
  76. package/dist/lib/session-thread.test.js.map +0 -1
  77. package/dist/lib/session.test.d.ts +0 -2
  78. package/dist/lib/session.test.d.ts.map +0 -1
  79. package/dist/lib/session.test.js +0 -336
  80. package/dist/lib/session.test.js.map +0 -1
@@ -1,324 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert";
3
- import { join, relative } from "node:path";
4
- // Pure functions copied from persona.ts for testing
5
- // This avoids module resolution issues with .js imports
6
- function buildInheritanceChain(personaPath, personasRoot) {
7
- const relativePath = relative(personasRoot, personaPath);
8
- const parts = relativePath.split("/").filter(Boolean);
9
- const chain = [];
10
- let currentPath = personasRoot;
11
- for (const part of parts) {
12
- currentPath = join(currentPath, part);
13
- chain.push(currentPath);
14
- }
15
- return chain;
16
- }
17
- function mergeArraysWithNegation(parent, child) {
18
- const result = [...parent];
19
- for (const item of child) {
20
- if (item.startsWith("!")) {
21
- const pattern = item.slice(1);
22
- const index = result.indexOf(pattern);
23
- if (index !== -1) {
24
- result.splice(index, 1);
25
- }
26
- }
27
- else if (!result.includes(item)) {
28
- result.push(item);
29
- }
30
- }
31
- return result;
32
- }
33
- function deepMerge(parent, child) {
34
- const result = { ...parent };
35
- for (const key of Object.keys(child)) {
36
- const childValue = child[key];
37
- const parentValue = parent[key];
38
- if (childValue !== undefined &&
39
- typeof childValue === "object" &&
40
- childValue !== null &&
41
- !Array.isArray(childValue) &&
42
- typeof parentValue === "object" &&
43
- parentValue !== null &&
44
- !Array.isArray(parentValue)) {
45
- result[key] = deepMerge(parentValue, childValue);
46
- }
47
- else if (childValue !== undefined) {
48
- result[key] = childValue;
49
- }
50
- }
51
- return result;
52
- }
53
- function combinePrompts(parent, child) {
54
- if (!parent && !child)
55
- return undefined;
56
- if (!parent)
57
- return child;
58
- if (!child)
59
- return parent;
60
- return parent + "\n\n---\n\n" + child;
61
- }
62
- function mergePersonas(parent, child) {
63
- return {
64
- name: child.name,
65
- description: child.description ?? parent.description,
66
- cmd: child.cmd ?? parent.cmd,
67
- path: child.path,
68
- parent: parent.path,
69
- env: deepMerge(parent.env ?? {}, child.env ?? {}),
70
- skills: mergeArraysWithNegation(parent.skills ?? [], child.skills ?? []),
71
- prompt: combinePrompts(parent.prompt, child.prompt),
72
- };
73
- }
74
- function normalizeCommandSpec(cmd) {
75
- if (cmd === undefined)
76
- return undefined;
77
- if (typeof cmd === "string")
78
- return [cmd];
79
- return cmd;
80
- }
81
- function isCommandModes(cmd) {
82
- return (cmd !== undefined &&
83
- typeof cmd === "object" &&
84
- !Array.isArray(cmd));
85
- }
86
- function resolveCommands(cmd) {
87
- if (!cmd) {
88
- throw new Error("Persona must specify cmd");
89
- }
90
- if (isCommandModes(cmd)) {
91
- const headless = normalizeCommandSpec(cmd.headless);
92
- const interactive = normalizeCommandSpec(cmd.interactive);
93
- if (!headless && !interactive) {
94
- throw new Error("Persona cmd must specify at least headless or interactive");
95
- }
96
- return {
97
- headless: headless ?? interactive,
98
- interactive,
99
- };
100
- }
101
- const headless = normalizeCommandSpec(cmd);
102
- return {
103
- headless: headless,
104
- interactive: undefined,
105
- };
106
- }
107
- // Tests
108
- describe("buildInheritanceChain", () => {
109
- it("builds chain from root to leaf", () => {
110
- const chain = buildInheritanceChain("/project/.agents/personas/claude/autonomous", "/project/.agents/personas");
111
- assert.deepStrictEqual(chain, [
112
- "/project/.agents/personas/claude",
113
- "/project/.agents/personas/claude/autonomous",
114
- ]);
115
- });
116
- it("returns single-element chain for top-level persona", () => {
117
- const chain = buildInheritanceChain("/project/.agents/personas/developer", "/project/.agents/personas");
118
- assert.deepStrictEqual(chain, ["/project/.agents/personas/developer"]);
119
- });
120
- it("handles deeply nested paths", () => {
121
- const chain = buildInheritanceChain("/project/.agents/personas/a/b/c/d", "/project/.agents/personas");
122
- assert.deepStrictEqual(chain, [
123
- "/project/.agents/personas/a",
124
- "/project/.agents/personas/a/b",
125
- "/project/.agents/personas/a/b/c",
126
- "/project/.agents/personas/a/b/c/d",
127
- ]);
128
- });
129
- });
130
- describe("mergeArraysWithNegation", () => {
131
- it("combines arrays without duplicates", () => {
132
- const result = mergeArraysWithNegation(["a", "b"], ["c", "d"]);
133
- assert.deepStrictEqual(result, ["a", "b", "c", "d"]);
134
- });
135
- it("removes items with ! prefix", () => {
136
- const result = mergeArraysWithNegation(["a", "b", "c"], ["!b"]);
137
- assert.deepStrictEqual(result, ["a", "c"]);
138
- });
139
- it("can add and remove in same operation", () => {
140
- const result = mergeArraysWithNegation(["a", "b", "c"], ["!b", "d"]);
141
- assert.deepStrictEqual(result, ["a", "c", "d"]);
142
- });
143
- it("ignores removal of non-existent items", () => {
144
- const result = mergeArraysWithNegation(["a", "b"], ["!z"]);
145
- assert.deepStrictEqual(result, ["a", "b"]);
146
- });
147
- it("does not add duplicates", () => {
148
- const result = mergeArraysWithNegation(["a", "b"], ["b", "c"]);
149
- assert.deepStrictEqual(result, ["a", "b", "c"]);
150
- });
151
- it("handles empty arrays", () => {
152
- assert.deepStrictEqual(mergeArraysWithNegation([], ["a"]), ["a"]);
153
- assert.deepStrictEqual(mergeArraysWithNegation(["a"], []), ["a"]);
154
- assert.deepStrictEqual(mergeArraysWithNegation([], []), []);
155
- });
156
- });
157
- describe("deepMerge", () => {
158
- it("merges flat objects", () => {
159
- const parent = { a: 1, b: 2, c: 0 };
160
- const child = { b: 3, c: 4 };
161
- const result = deepMerge(parent, child);
162
- assert.deepStrictEqual(result, { a: 1, b: 3, c: 4 });
163
- });
164
- it("recursively merges nested objects", () => {
165
- const parent = { outer: { a: 1, b: 2, c: 0 } };
166
- const child = { outer: { a: 1, b: 3, c: 4 } };
167
- const result = deepMerge(parent, child);
168
- assert.deepStrictEqual(result, { outer: { a: 1, b: 3, c: 4 } });
169
- });
170
- it("child overrides parent for non-object values", () => {
171
- const result = deepMerge({ a: "parent" }, { a: "child" });
172
- assert.deepStrictEqual(result, { a: "child" });
173
- });
174
- it("child array replaces parent array (no merge)", () => {
175
- const result = deepMerge({ arr: [1, 2] }, { arr: [3, 4] });
176
- assert.deepStrictEqual(result, { arr: [3, 4] });
177
- });
178
- it("preserves parent values not in child", () => {
179
- const result = deepMerge({ a: 1, b: 2 }, { a: 10 });
180
- assert.deepStrictEqual(result, { a: 10, b: 2 });
181
- });
182
- it("handles undefined child values", () => {
183
- const result = deepMerge({ a: 1 }, { a: undefined });
184
- assert.deepStrictEqual(result, { a: 1 });
185
- });
186
- });
187
- describe("mergePersonas", () => {
188
- const parentPersona = {
189
- name: "parent",
190
- description: "Parent description",
191
- cmd: ["parent-cmd"],
192
- path: "/personas/parent",
193
- skills: ["skill-a", "skill-b"],
194
- env: { VAR1: "value1" },
195
- prompt: "Parent prompt",
196
- };
197
- const childPersona = {
198
- name: "child",
199
- path: "/personas/parent/child",
200
- skills: ["skill-c", "!skill-b"],
201
- env: { VAR2: "value2" },
202
- prompt: "Child prompt",
203
- };
204
- it("uses child name", () => {
205
- const merged = mergePersonas(parentPersona, childPersona);
206
- assert.strictEqual(merged.name, "child");
207
- });
208
- it("uses child path", () => {
209
- const merged = mergePersonas(parentPersona, childPersona);
210
- assert.strictEqual(merged.path, "/personas/parent/child");
211
- });
212
- it("sets parent reference", () => {
213
- const merged = mergePersonas(parentPersona, childPersona);
214
- assert.strictEqual(merged.parent, "/personas/parent");
215
- });
216
- it("falls back to parent description", () => {
217
- const merged = mergePersonas(parentPersona, childPersona);
218
- assert.strictEqual(merged.description, "Parent description");
219
- });
220
- it("child description overrides parent", () => {
221
- const childWithDesc = {
222
- ...childPersona,
223
- description: "Child description",
224
- };
225
- const merged = mergePersonas(parentPersona, childWithDesc);
226
- assert.strictEqual(merged.description, "Child description");
227
- });
228
- it("inherits cmd from parent if not specified", () => {
229
- const merged = mergePersonas(parentPersona, childPersona);
230
- assert.deepStrictEqual(merged.cmd, ["parent-cmd"]);
231
- });
232
- it("child cmd overrides parent", () => {
233
- const childWithCmd = { ...childPersona, cmd: ["child-cmd"] };
234
- const merged = mergePersonas(parentPersona, childWithCmd);
235
- assert.deepStrictEqual(merged.cmd, ["child-cmd"]);
236
- });
237
- it("merges skills with negation support", () => {
238
- const merged = mergePersonas(parentPersona, childPersona);
239
- assert.deepStrictEqual(merged.skills, ["skill-a", "skill-c"]);
240
- });
241
- it("deep merges env", () => {
242
- const merged = mergePersonas(parentPersona, childPersona);
243
- assert.deepStrictEqual(merged.env, { VAR1: "value1", VAR2: "value2" });
244
- });
245
- it("combines prompts with separator", () => {
246
- const merged = mergePersonas(parentPersona, childPersona);
247
- assert.strictEqual(merged.prompt, "Parent prompt\n\n---\n\nChild prompt");
248
- });
249
- it("handles missing parent prompt", () => {
250
- const parentNoPrompt = { ...parentPersona, prompt: undefined };
251
- const merged = mergePersonas(parentNoPrompt, childPersona);
252
- assert.strictEqual(merged.prompt, "Child prompt");
253
- });
254
- it("handles missing child prompt", () => {
255
- const childNoPrompt = { ...childPersona, prompt: undefined };
256
- const merged = mergePersonas(parentPersona, childNoPrompt);
257
- assert.strictEqual(merged.prompt, "Parent prompt");
258
- });
259
- });
260
- describe("resolveCommands", () => {
261
- it("throws when cmd is undefined", () => {
262
- assert.throws(() => resolveCommands(undefined), {
263
- message: "Persona must specify cmd",
264
- });
265
- });
266
- it("converts string to headless array", () => {
267
- const result = resolveCommands("my-command");
268
- assert.deepStrictEqual(result, {
269
- headless: ["my-command"],
270
- interactive: undefined,
271
- });
272
- });
273
- it("keeps array as headless", () => {
274
- const result = resolveCommands(["cmd", "--flag"]);
275
- assert.deepStrictEqual(result, {
276
- headless: ["cmd", "--flag"],
277
- interactive: undefined,
278
- });
279
- });
280
- it("handles object format with both modes", () => {
281
- const result = resolveCommands({
282
- headless: ["headless-cmd"],
283
- interactive: ["interactive-cmd"],
284
- });
285
- assert.deepStrictEqual(result, {
286
- headless: ["headless-cmd"],
287
- interactive: ["interactive-cmd"],
288
- });
289
- });
290
- it("converts string values in object format", () => {
291
- const result = resolveCommands({
292
- headless: "headless-cmd",
293
- interactive: "interactive-cmd",
294
- });
295
- assert.deepStrictEqual(result, {
296
- headless: ["headless-cmd"],
297
- interactive: ["interactive-cmd"],
298
- });
299
- });
300
- it("uses interactive as fallback for headless", () => {
301
- const result = resolveCommands({
302
- interactive: ["interactive-only"],
303
- });
304
- assert.deepStrictEqual(result, {
305
- headless: ["interactive-only"],
306
- interactive: ["interactive-only"],
307
- });
308
- });
309
- it("allows headless-only mode", () => {
310
- const result = resolveCommands({
311
- headless: ["headless-only"],
312
- });
313
- assert.deepStrictEqual(result, {
314
- headless: ["headless-only"],
315
- interactive: undefined,
316
- });
317
- });
318
- it("throws when object has neither mode", () => {
319
- assert.throws(() => resolveCommands({}), {
320
- message: "Persona cmd must specify at least headless or interactive",
321
- });
322
- });
323
- });
324
- //# sourceMappingURL=persona.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persona.test.js","sourceRoot":"","sources":["../../src/lib/persona.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=processor.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processor.test.d.ts","sourceRoot":"","sources":["../../src/lib/processor.test.ts"],"names":[],"mappings":""}
@@ -1,134 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert";
3
- import { join, dirname } from "node:path";
4
- import { fileURLToPath } from "node:url";
5
- // Inline hasPersonaFile logic for testing without module resolution issues
6
- // Mirrors the logic from persona.ts
7
- import { stat } from "node:fs/promises";
8
- // Get the directory of this file and derive the project root
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = dirname(__filename);
11
- // src/lib/processor.test.ts -> project root is ../../
12
- const PROJECT_ROOT = join(__dirname, "..", "..");
13
- const PERSONA_FILENAME = "PERSONA.md";
14
- async function hasPersonaFile(dirPath) {
15
- try {
16
- const filePath = join(dirPath, PERSONA_FILENAME);
17
- const stats = await stat(filePath);
18
- return stats.isFile();
19
- }
20
- catch {
21
- return false;
22
- }
23
- }
24
- // Inline personaExists logic for testing
25
- // Mirrors the logic from processor.ts
26
- async function personaExists(config, channelName, personasList = []) {
27
- const personaName = channelName.slice(1); // Remove @ prefix
28
- // Check for root persona (.agents/PERSONA.md)
29
- if (personaName === "root") {
30
- return await hasPersonaFile(config.agentsDir);
31
- }
32
- // Check against provided persona list (simulating listPersonas)
33
- for (const path of personasList) {
34
- const parts = path.split("/");
35
- const name = parts[parts.length - 1];
36
- if (name === personaName) {
37
- return true;
38
- }
39
- }
40
- return false;
41
- }
42
- describe("personaExists", () => {
43
- describe("root persona handling", () => {
44
- it("returns true for @root when .agents/PERSONA.md exists", async () => {
45
- // Use the actual dot-agents project as the test fixture
46
- // This project has a root persona at .agents/PERSONA.md
47
- const config = {
48
- agentsDir: join(PROJECT_ROOT, ".agents"),
49
- personasDir: join(PROJECT_ROOT, ".agents", "personas"),
50
- };
51
- const exists = await personaExists(config, "@root");
52
- assert.strictEqual(exists, true, "Should find root persona when .agents/PERSONA.md exists");
53
- });
54
- it("returns false for @root when directory has no PERSONA.md", async () => {
55
- // Use a directory that definitely won't have PERSONA.md
56
- const config = {
57
- agentsDir: "/tmp/nonexistent-agents-dir-test",
58
- personasDir: "/tmp/nonexistent-agents-dir-test/personas",
59
- };
60
- const exists = await personaExists(config, "@root");
61
- assert.strictEqual(exists, false, "Should return false when no root persona exists");
62
- });
63
- });
64
- describe("named persona handling", () => {
65
- it("returns true for @developer when developer persona exists in list", async () => {
66
- const config = {
67
- agentsDir: "/project/.agents",
68
- personasDir: "/project/.agents/personas",
69
- };
70
- const personasList = [
71
- "/project/.agents/personas/developer",
72
- "/project/.agents/personas/reviewer",
73
- ];
74
- const exists = await personaExists(config, "@developer", personasList);
75
- assert.strictEqual(exists, true);
76
- });
77
- it("returns false for @unknown when persona not in list", async () => {
78
- const config = {
79
- agentsDir: "/project/.agents",
80
- personasDir: "/project/.agents/personas",
81
- };
82
- const personasList = [
83
- "/project/.agents/personas/developer",
84
- "/project/.agents/personas/reviewer",
85
- ];
86
- const exists = await personaExists(config, "@unknown", personasList);
87
- assert.strictEqual(exists, false);
88
- });
89
- it("handles nested persona paths correctly", async () => {
90
- const config = {
91
- agentsDir: "/project/.agents",
92
- personasDir: "/project/.agents/personas",
93
- };
94
- // Nested persona: claude/developer
95
- const personasList = [
96
- "/project/.agents/personas/claude/developer",
97
- ];
98
- // The last segment of the path is "developer"
99
- const exists = await personaExists(config, "@developer", personasList);
100
- assert.strictEqual(exists, true);
101
- });
102
- it("root check does not use personas list", async () => {
103
- const config = {
104
- agentsDir: "/tmp/nonexistent-test-dir",
105
- personasDir: "/tmp/nonexistent-test-dir/personas",
106
- };
107
- // Even if "root" is in the personas list, @root should check agentsDir
108
- const personasList = [
109
- "/some/path/root", // This should NOT match @root
110
- ];
111
- const exists = await personaExists(config, "@root", personasList);
112
- // Should be false because it checks hasPersonaFile(agentsDir), not the list
113
- assert.strictEqual(exists, false);
114
- });
115
- });
116
- });
117
- describe("hasPersonaFile", () => {
118
- it("returns true when PERSONA.md exists", async () => {
119
- // Use the actual .agents directory which has PERSONA.md
120
- const agentsDir = join(PROJECT_ROOT, ".agents");
121
- const exists = await hasPersonaFile(agentsDir);
122
- assert.strictEqual(exists, true);
123
- });
124
- it("returns false when directory does not exist", async () => {
125
- const exists = await hasPersonaFile("/nonexistent/path");
126
- assert.strictEqual(exists, false);
127
- });
128
- it("returns false when directory exists but has no PERSONA.md", async () => {
129
- // Use /tmp which exists but won't have PERSONA.md
130
- const exists = await hasPersonaFile("/tmp");
131
- assert.strictEqual(exists, false);
132
- });
133
- });
134
- //# sourceMappingURL=processor.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processor.test.js","sourceRoot":"","sources":["../../src/lib/processor.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=registry.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/lib/registry.test.ts"],"names":[],"mappings":""}