mulch-cli 0.1.0 → 0.2.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 (92) hide show
  1. package/README.md +16 -2
  2. package/dist/cli.js +15 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +20 -3
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/compact.d.ts +3 -0
  8. package/dist/commands/compact.d.ts.map +1 -0
  9. package/dist/commands/compact.js +364 -0
  10. package/dist/commands/compact.js.map +1 -0
  11. package/dist/commands/delete.d.ts +3 -0
  12. package/dist/commands/delete.d.ts.map +1 -0
  13. package/dist/commands/delete.js +110 -0
  14. package/dist/commands/delete.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +3 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +364 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/edit.d.ts.map +1 -1
  20. package/dist/commands/edit.js +103 -22
  21. package/dist/commands/edit.js.map +1 -1
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +11 -1
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/learn.d.ts +12 -0
  26. package/dist/commands/learn.d.ts.map +1 -0
  27. package/dist/commands/learn.js +130 -0
  28. package/dist/commands/learn.js.map +1 -0
  29. package/dist/commands/onboard.d.ts +1 -0
  30. package/dist/commands/onboard.d.ts.map +1 -1
  31. package/dist/commands/onboard.js +31 -4
  32. package/dist/commands/onboard.js.map +1 -1
  33. package/dist/commands/prime.d.ts.map +1 -1
  34. package/dist/commands/prime.js +75 -17
  35. package/dist/commands/prime.js.map +1 -1
  36. package/dist/commands/prune.d.ts +5 -0
  37. package/dist/commands/prune.d.ts.map +1 -1
  38. package/dist/commands/prune.js +13 -1
  39. package/dist/commands/prune.js.map +1 -1
  40. package/dist/commands/query.d.ts.map +1 -1
  41. package/dist/commands/query.js +56 -15
  42. package/dist/commands/query.js.map +1 -1
  43. package/dist/commands/ready.d.ts +3 -0
  44. package/dist/commands/ready.d.ts.map +1 -0
  45. package/dist/commands/ready.js +160 -0
  46. package/dist/commands/ready.js.map +1 -0
  47. package/dist/commands/record.d.ts.map +1 -1
  48. package/dist/commands/record.js +136 -22
  49. package/dist/commands/record.js.map +1 -1
  50. package/dist/commands/search.d.ts.map +1 -1
  51. package/dist/commands/search.js +76 -26
  52. package/dist/commands/search.js.map +1 -1
  53. package/dist/commands/setup.d.ts.map +1 -1
  54. package/dist/commands/setup.js +59 -27
  55. package/dist/commands/setup.js.map +1 -1
  56. package/dist/commands/status.d.ts.map +1 -1
  57. package/dist/commands/status.js +24 -3
  58. package/dist/commands/status.js.map +1 -1
  59. package/dist/commands/sync.d.ts +3 -0
  60. package/dist/commands/sync.d.ts.map +1 -0
  61. package/dist/commands/sync.js +176 -0
  62. package/dist/commands/sync.js.map +1 -0
  63. package/dist/commands/validate.d.ts.map +1 -1
  64. package/dist/commands/validate.js +30 -6
  65. package/dist/commands/validate.js.map +1 -1
  66. package/dist/schemas/record-schema.d.ts +108 -0
  67. package/dist/schemas/record-schema.d.ts.map +1 -1
  68. package/dist/schemas/record-schema.js +19 -0
  69. package/dist/schemas/record-schema.js.map +1 -1
  70. package/dist/schemas/record.d.ts +3 -0
  71. package/dist/schemas/record.d.ts.map +1 -1
  72. package/dist/utils/expertise.d.ts +1 -0
  73. package/dist/utils/expertise.d.ts.map +1 -1
  74. package/dist/utils/expertise.js +33 -0
  75. package/dist/utils/expertise.js.map +1 -1
  76. package/dist/utils/format.d.ts +2 -0
  77. package/dist/utils/format.d.ts.map +1 -1
  78. package/dist/utils/format.js +70 -13
  79. package/dist/utils/format.js.map +1 -1
  80. package/dist/utils/git.d.ts +6 -0
  81. package/dist/utils/git.d.ts.map +1 -0
  82. package/dist/utils/git.js +81 -0
  83. package/dist/utils/git.js.map +1 -0
  84. package/dist/utils/index.d.ts +4 -2
  85. package/dist/utils/index.d.ts.map +1 -1
  86. package/dist/utils/index.js +4 -2
  87. package/dist/utils/index.js.map +1 -1
  88. package/dist/utils/json-output.d.ts +8 -0
  89. package/dist/utils/json-output.d.ts.map +1 -0
  90. package/dist/utils/json-output.js +7 -0
  91. package/dist/utils/json-output.js.map +1 -0
  92. package/package.json +2 -2
@@ -0,0 +1,176 @@
1
+ import { execSync } from "node:child_process";
2
+ import { readFile } from "node:fs/promises";
3
+ import _Ajv from "ajv";
4
+ const Ajv = _Ajv.default ?? _Ajv;
5
+ import chalk from "chalk";
6
+ import { readConfig, getExpertisePath } from "../utils/config.js";
7
+ import { recordSchema } from "../schemas/record-schema.js";
8
+ import { outputJson, outputJsonError } from "../utils/json-output.js";
9
+ function isGitRepo(cwd) {
10
+ try {
11
+ execSync("git rev-parse --is-inside-work-tree", { cwd, stdio: "pipe" });
12
+ return true;
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }
18
+ function gitHasChanges(cwd) {
19
+ try {
20
+ const status = execSync("git status --porcelain .mulch/", { cwd, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
21
+ return status.trim().length > 0;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ function gitAdd(cwd) {
28
+ execSync("git add .mulch/", { cwd, stdio: "pipe" });
29
+ }
30
+ function gitCommit(cwd, message) {
31
+ return execSync(`git commit -m "${message.replace(/"/g, '\\"')}"`, { cwd, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
32
+ }
33
+ async function validateExpertise(cwd) {
34
+ const config = await readConfig(cwd);
35
+ const domains = config.domains;
36
+ const ajv = new Ajv();
37
+ const validate = ajv.compile(recordSchema);
38
+ let totalRecords = 0;
39
+ const errors = [];
40
+ for (const domain of domains) {
41
+ const filePath = getExpertisePath(domain, cwd);
42
+ let content;
43
+ try {
44
+ content = await readFile(filePath, "utf-8");
45
+ }
46
+ catch {
47
+ continue;
48
+ }
49
+ const lines = content.split("\n");
50
+ for (let i = 0; i < lines.length; i++) {
51
+ const line = lines[i].trim();
52
+ if (line.length === 0)
53
+ continue;
54
+ totalRecords++;
55
+ const lineNumber = i + 1;
56
+ let parsed;
57
+ try {
58
+ parsed = JSON.parse(line);
59
+ }
60
+ catch {
61
+ errors.push({ domain, line: lineNumber, message: "Invalid JSON: failed to parse" });
62
+ continue;
63
+ }
64
+ if (!validate(parsed)) {
65
+ const schemaErrors = (validate.errors ?? []).map((err) => `${err.instancePath} ${err.message}`).join("; ");
66
+ errors.push({ domain, line: lineNumber, message: `Schema validation failed: ${schemaErrors}` });
67
+ }
68
+ }
69
+ }
70
+ return { valid: errors.length === 0, totalRecords, errors };
71
+ }
72
+ export function registerSyncCommand(program) {
73
+ program
74
+ .command("sync")
75
+ .description("Validate, stage, and commit .mulch/ changes")
76
+ .option("--message <message>", "custom commit message")
77
+ .option("--no-validate", "skip validation step")
78
+ .action(async (options) => {
79
+ const jsonMode = program.opts().json === true;
80
+ const cwd = process.cwd();
81
+ // Check if we're in a git repo
82
+ if (!isGitRepo(cwd)) {
83
+ if (jsonMode) {
84
+ outputJsonError("sync", "Not in a git repository. Run this command from within a git repository.");
85
+ }
86
+ else {
87
+ console.error(chalk.red("Error: not in a git repository."));
88
+ }
89
+ process.exitCode = 1;
90
+ return;
91
+ }
92
+ // Validate (unless --no-validate)
93
+ if (options.validate !== false) {
94
+ try {
95
+ const result = await validateExpertise();
96
+ if (!result.valid) {
97
+ if (jsonMode) {
98
+ outputJson({
99
+ success: false,
100
+ command: "sync",
101
+ validated: false,
102
+ committed: false,
103
+ errors: result.errors,
104
+ });
105
+ }
106
+ else {
107
+ console.error(chalk.red("Validation failed:"));
108
+ for (const err of result.errors) {
109
+ console.error(chalk.red(` ${err.domain}:${err.line} - ${err.message}`));
110
+ }
111
+ console.error(chalk.red("\nFix errors and retry, or use --no-validate to skip."));
112
+ }
113
+ process.exitCode = 1;
114
+ return;
115
+ }
116
+ if (!jsonMode) {
117
+ console.log(chalk.green(`✔ Validated ${result.totalRecords} records`));
118
+ }
119
+ }
120
+ catch (err) {
121
+ if (jsonMode) {
122
+ outputJsonError("sync", `Validation error: ${err.message}`);
123
+ }
124
+ else {
125
+ console.error(chalk.red(`Validation error: ${err.message}`));
126
+ }
127
+ process.exitCode = 1;
128
+ return;
129
+ }
130
+ }
131
+ // Check for changes
132
+ if (!gitHasChanges(cwd)) {
133
+ if (jsonMode) {
134
+ outputJson({
135
+ success: true,
136
+ command: "sync",
137
+ validated: options.validate !== false,
138
+ committed: false,
139
+ message: "No changes to commit",
140
+ });
141
+ }
142
+ else {
143
+ console.log("No .mulch/ changes to commit.");
144
+ }
145
+ return;
146
+ }
147
+ // Git add + commit
148
+ const commitMessage = options.message ?? "mulch: update expertise";
149
+ try {
150
+ gitAdd(cwd);
151
+ gitCommit(cwd, commitMessage);
152
+ if (jsonMode) {
153
+ outputJson({
154
+ success: true,
155
+ command: "sync",
156
+ validated: options.validate !== false,
157
+ committed: true,
158
+ message: commitMessage,
159
+ });
160
+ }
161
+ else {
162
+ console.log(chalk.green(`✔ Committed .mulch/ changes: "${commitMessage}"`));
163
+ }
164
+ }
165
+ catch (err) {
166
+ if (jsonMode) {
167
+ outputJsonError("sync", `Git error: ${err.message}`);
168
+ }
169
+ else {
170
+ console.error(chalk.red(`Git error: ${err.message}`));
171
+ }
172
+ process.exitCode = 1;
173
+ }
174
+ });
175
+ }
176
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E9D"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+F9D"}
@@ -4,17 +4,20 @@ const Ajv = _Ajv.default ?? _Ajv;
4
4
  import chalk from "chalk";
5
5
  import { readConfig, getExpertisePath } from "../utils/config.js";
6
6
  import { recordSchema } from "../schemas/record-schema.js";
7
+ import { outputJson } from "../utils/json-output.js";
7
8
  export function registerValidateCommand(program) {
8
9
  program
9
10
  .command("validate")
10
11
  .description("Validate expertise records against schemas")
11
12
  .action(async () => {
13
+ const jsonMode = program.opts().json === true;
12
14
  const config = await readConfig();
13
15
  const domains = config.domains;
14
16
  const ajv = new Ajv();
15
17
  const validate = ajv.compile(recordSchema);
16
18
  let totalRecords = 0;
17
19
  let totalErrors = 0;
20
+ const errors = [];
18
21
  for (const domain of domains) {
19
22
  const filePath = getExpertisePath(domain);
20
23
  let content;
@@ -38,25 +41,46 @@ export function registerValidateCommand(program) {
38
41
  }
39
42
  catch {
40
43
  totalErrors++;
41
- console.error(chalk.red(`${domain}:${lineNumber} - Invalid JSON: failed to parse`));
44
+ const msg = "Invalid JSON: failed to parse";
45
+ errors.push({ domain, line: lineNumber, message: msg });
46
+ if (!jsonMode) {
47
+ console.error(chalk.red(`${domain}:${lineNumber} - ${msg}`));
48
+ }
42
49
  continue;
43
50
  }
44
51
  if (!validate(parsed)) {
45
52
  totalErrors++;
46
- console.error(chalk.red(`${domain}:${lineNumber} - Schema validation failed:`));
47
- for (const err of validate.errors ?? []) {
48
- console.error(chalk.red(` ${err.instancePath} ${err.message}`));
53
+ const schemaErrors = (validate.errors ?? []).map((err) => `${err.instancePath} ${err.message}`).join("; ");
54
+ const msg = `Schema validation failed: ${schemaErrors}`;
55
+ errors.push({ domain, line: lineNumber, message: msg });
56
+ if (!jsonMode) {
57
+ console.error(chalk.red(`${domain}:${lineNumber} - Schema validation failed:`));
58
+ for (const err of validate.errors ?? []) {
59
+ console.error(chalk.red(` ${err.instancePath} ${err.message}`));
60
+ }
49
61
  }
50
62
  }
51
63
  }
52
64
  }
53
- if (totalErrors > 0) {
65
+ if (jsonMode) {
66
+ outputJson({
67
+ success: totalErrors === 0,
68
+ command: "validate",
69
+ valid: totalErrors === 0,
70
+ totalRecords,
71
+ totalErrors,
72
+ errors,
73
+ });
74
+ }
75
+ else if (totalErrors > 0) {
54
76
  console.log(chalk.red(`${totalRecords} records validated, ${totalErrors} errors found`));
55
- process.exit(1);
56
77
  }
57
78
  else {
58
79
  console.log(chalk.green(`${totalRecords} records validated, ${totalErrors} errors found`));
59
80
  }
81
+ if (totalErrors > 0) {
82
+ process.exitCode = 1;
83
+ }
60
84
  });
61
85
  }
62
86
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,10 @@ export declare const recordSchema: {
30
30
  readonly oneOf: readonly [{
31
31
  readonly type: "object";
32
32
  readonly properties: {
33
+ readonly id: {
34
+ readonly type: "string";
35
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
36
+ };
33
37
  readonly type: {
34
38
  readonly type: "string";
35
39
  readonly const: "convention";
@@ -52,12 +56,30 @@ export declare const recordSchema: {
52
56
  readonly type: "string";
53
57
  };
54
58
  };
59
+ readonly relates_to: {
60
+ readonly type: "array";
61
+ readonly items: {
62
+ readonly type: "string";
63
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
64
+ };
65
+ };
66
+ readonly supersedes: {
67
+ readonly type: "array";
68
+ readonly items: {
69
+ readonly type: "string";
70
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
71
+ };
72
+ };
55
73
  };
56
74
  readonly required: readonly ["type", "content", "classification", "recorded_at"];
57
75
  readonly additionalProperties: false;
58
76
  }, {
59
77
  readonly type: "object";
60
78
  readonly properties: {
79
+ readonly id: {
80
+ readonly type: "string";
81
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
82
+ };
61
83
  readonly type: {
62
84
  readonly type: "string";
63
85
  readonly const: "pattern";
@@ -89,12 +111,30 @@ export declare const recordSchema: {
89
111
  readonly type: "string";
90
112
  };
91
113
  };
114
+ readonly relates_to: {
115
+ readonly type: "array";
116
+ readonly items: {
117
+ readonly type: "string";
118
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
119
+ };
120
+ };
121
+ readonly supersedes: {
122
+ readonly type: "array";
123
+ readonly items: {
124
+ readonly type: "string";
125
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
126
+ };
127
+ };
92
128
  };
93
129
  readonly required: readonly ["type", "name", "description", "classification", "recorded_at"];
94
130
  readonly additionalProperties: false;
95
131
  }, {
96
132
  readonly type: "object";
97
133
  readonly properties: {
134
+ readonly id: {
135
+ readonly type: "string";
136
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
137
+ };
98
138
  readonly type: {
99
139
  readonly type: "string";
100
140
  readonly const: "failure";
@@ -120,12 +160,30 @@ export declare const recordSchema: {
120
160
  readonly type: "string";
121
161
  };
122
162
  };
163
+ readonly relates_to: {
164
+ readonly type: "array";
165
+ readonly items: {
166
+ readonly type: "string";
167
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
168
+ };
169
+ };
170
+ readonly supersedes: {
171
+ readonly type: "array";
172
+ readonly items: {
173
+ readonly type: "string";
174
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
175
+ };
176
+ };
123
177
  };
124
178
  readonly required: readonly ["type", "description", "resolution", "classification", "recorded_at"];
125
179
  readonly additionalProperties: false;
126
180
  }, {
127
181
  readonly type: "object";
128
182
  readonly properties: {
183
+ readonly id: {
184
+ readonly type: "string";
185
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
186
+ };
129
187
  readonly type: {
130
188
  readonly type: "string";
131
189
  readonly const: "decision";
@@ -154,12 +212,30 @@ export declare const recordSchema: {
154
212
  readonly type: "string";
155
213
  };
156
214
  };
215
+ readonly relates_to: {
216
+ readonly type: "array";
217
+ readonly items: {
218
+ readonly type: "string";
219
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
220
+ };
221
+ };
222
+ readonly supersedes: {
223
+ readonly type: "array";
224
+ readonly items: {
225
+ readonly type: "string";
226
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
227
+ };
228
+ };
157
229
  };
158
230
  readonly required: readonly ["type", "title", "rationale", "classification", "recorded_at"];
159
231
  readonly additionalProperties: false;
160
232
  }, {
161
233
  readonly type: "object";
162
234
  readonly properties: {
235
+ readonly id: {
236
+ readonly type: "string";
237
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
238
+ };
163
239
  readonly type: {
164
240
  readonly type: "string";
165
241
  readonly const: "reference";
@@ -191,12 +267,30 @@ export declare const recordSchema: {
191
267
  readonly type: "string";
192
268
  };
193
269
  };
270
+ readonly relates_to: {
271
+ readonly type: "array";
272
+ readonly items: {
273
+ readonly type: "string";
274
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
275
+ };
276
+ };
277
+ readonly supersedes: {
278
+ readonly type: "array";
279
+ readonly items: {
280
+ readonly type: "string";
281
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
282
+ };
283
+ };
194
284
  };
195
285
  readonly required: readonly ["type", "name", "description", "classification", "recorded_at"];
196
286
  readonly additionalProperties: false;
197
287
  }, {
198
288
  readonly type: "object";
199
289
  readonly properties: {
290
+ readonly id: {
291
+ readonly type: "string";
292
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
293
+ };
200
294
  readonly type: {
201
295
  readonly type: "string";
202
296
  readonly const: "guide";
@@ -222,6 +316,20 @@ export declare const recordSchema: {
222
316
  readonly type: "string";
223
317
  };
224
318
  };
319
+ readonly relates_to: {
320
+ readonly type: "array";
321
+ readonly items: {
322
+ readonly type: "string";
323
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
324
+ };
325
+ };
326
+ readonly supersedes: {
327
+ readonly type: "array";
328
+ readonly items: {
329
+ readonly type: "string";
330
+ readonly pattern: "^mx-[0-9a-f]{4,8}$";
331
+ };
332
+ };
225
333
  };
226
334
  readonly required: readonly ["type", "name", "description", "classification", "recorded_at"];
227
335
  readonly additionalProperties: false;
@@ -1 +1 @@
1
- {"version":3,"file":"record-schema.d.ts","sourceRoot":"","sources":["../../src/schemas/record-schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Gf,CAAC"}
1
+ {"version":3,"file":"record-schema.d.ts","sourceRoot":"","sources":["../../src/schemas/record-schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Hf,CAAC"}
@@ -1,3 +1,4 @@
1
+ const linkArray = { type: "array", items: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" } };
1
2
  export const recordSchema = {
2
3
  $schema: "http://json-schema.org/draft-07/schema#",
3
4
  title: "Mulch Expertise Record",
@@ -23,12 +24,15 @@ export const recordSchema = {
23
24
  {
24
25
  type: "object",
25
26
  properties: {
27
+ id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
26
28
  type: { type: "string", const: "convention" },
27
29
  content: { type: "string" },
28
30
  classification: { $ref: "#/definitions/classification" },
29
31
  recorded_at: { type: "string" },
30
32
  evidence: { $ref: "#/definitions/evidence" },
31
33
  tags: { type: "array", items: { type: "string" } },
34
+ relates_to: linkArray,
35
+ supersedes: linkArray,
32
36
  },
33
37
  required: ["type", "content", "classification", "recorded_at"],
34
38
  additionalProperties: false,
@@ -36,6 +40,7 @@ export const recordSchema = {
36
40
  {
37
41
  type: "object",
38
42
  properties: {
43
+ id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
39
44
  type: { type: "string", const: "pattern" },
40
45
  name: { type: "string" },
41
46
  description: { type: "string" },
@@ -44,6 +49,8 @@ export const recordSchema = {
44
49
  recorded_at: { type: "string" },
45
50
  evidence: { $ref: "#/definitions/evidence" },
46
51
  tags: { type: "array", items: { type: "string" } },
52
+ relates_to: linkArray,
53
+ supersedes: linkArray,
47
54
  },
48
55
  required: ["type", "name", "description", "classification", "recorded_at"],
49
56
  additionalProperties: false,
@@ -51,6 +58,7 @@ export const recordSchema = {
51
58
  {
52
59
  type: "object",
53
60
  properties: {
61
+ id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
54
62
  type: { type: "string", const: "failure" },
55
63
  description: { type: "string" },
56
64
  resolution: { type: "string" },
@@ -58,6 +66,8 @@ export const recordSchema = {
58
66
  recorded_at: { type: "string" },
59
67
  evidence: { $ref: "#/definitions/evidence" },
60
68
  tags: { type: "array", items: { type: "string" } },
69
+ relates_to: linkArray,
70
+ supersedes: linkArray,
61
71
  },
62
72
  required: ["type", "description", "resolution", "classification", "recorded_at"],
63
73
  additionalProperties: false,
@@ -65,6 +75,7 @@ export const recordSchema = {
65
75
  {
66
76
  type: "object",
67
77
  properties: {
78
+ id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
68
79
  type: { type: "string", const: "decision" },
69
80
  title: { type: "string" },
70
81
  rationale: { type: "string" },
@@ -73,6 +84,8 @@ export const recordSchema = {
73
84
  recorded_at: { type: "string" },
74
85
  evidence: { $ref: "#/definitions/evidence" },
75
86
  tags: { type: "array", items: { type: "string" } },
87
+ relates_to: linkArray,
88
+ supersedes: linkArray,
76
89
  },
77
90
  required: ["type", "title", "rationale", "classification", "recorded_at"],
78
91
  additionalProperties: false,
@@ -80,6 +93,7 @@ export const recordSchema = {
80
93
  {
81
94
  type: "object",
82
95
  properties: {
96
+ id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
83
97
  type: { type: "string", const: "reference" },
84
98
  name: { type: "string" },
85
99
  description: { type: "string" },
@@ -88,6 +102,8 @@ export const recordSchema = {
88
102
  recorded_at: { type: "string" },
89
103
  evidence: { $ref: "#/definitions/evidence" },
90
104
  tags: { type: "array", items: { type: "string" } },
105
+ relates_to: linkArray,
106
+ supersedes: linkArray,
91
107
  },
92
108
  required: ["type", "name", "description", "classification", "recorded_at"],
93
109
  additionalProperties: false,
@@ -95,6 +111,7 @@ export const recordSchema = {
95
111
  {
96
112
  type: "object",
97
113
  properties: {
114
+ id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
98
115
  type: { type: "string", const: "guide" },
99
116
  name: { type: "string" },
100
117
  description: { type: "string" },
@@ -102,6 +119,8 @@ export const recordSchema = {
102
119
  recorded_at: { type: "string" },
103
120
  evidence: { $ref: "#/definitions/evidence" },
104
121
  tags: { type: "array", items: { type: "string" } },
122
+ relates_to: linkArray,
123
+ supersedes: linkArray,
105
124
  },
106
125
  required: ["type", "name", "description", "classification", "recorded_at"],
107
126
  additionalProperties: false,
@@ -1 +1 @@
1
- {"version":3,"file":"record-schema.js","sourceRoot":"","sources":["../../src/schemas/record-schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,kDAAkD;IAC/D,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE;QACX,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC;SACpD;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACzB;YACD,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC7C,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3B,cAAc,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBACxD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,CAAC;YAC9D,oBAAoB,EAAE,KAAK;SAC5B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC1C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACnD,cAAc,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBACxD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,CAAC;YAC1E,oBAAoB,EAAE,KAAK;SAC5B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC1C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC9B,cAAc,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBACxD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,CAAC;YAChF,oBAAoB,EAAE,KAAK;SAC5B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,cAAc,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBACxD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC;YACzE,oBAAoB,EAAE,KAAK;SAC5B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACnD,cAAc,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBACxD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,CAAC;YAC1E,oBAAoB,EAAE,KAAK;SAC5B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;gBACxC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,cAAc,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBACxD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,CAAC;YAC1E,oBAAoB,EAAE,KAAK;SAC5B;KACF;CACO,CAAC"}
1
+ {"version":3,"file":"record-schema.js","sourceRoot":"","sources":["../../src/schemas/record-schema.ts"],"names":[],"mappings":"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"}
@@ -7,10 +7,13 @@ export interface Evidence {
7
7
  file?: string;
8
8
  }
9
9
  interface BaseRecord {
10
+ id?: string;
10
11
  classification: Classification;
11
12
  recorded_at: string;
12
13
  evidence?: Evidence;
13
14
  tags?: string[];
15
+ relates_to?: string[];
16
+ supersedes?: string[];
14
17
  }
15
18
  export interface ConventionRecord extends BaseRecord {
16
19
  type: "convention";
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schemas/record.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AAEnG,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,UAAU,GAAG,eAAe,CAAC;AAE3E,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,UAAU;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GACvB,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,cAAc,GACd,eAAe,GACf,WAAW,CAAC"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schemas/record.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AAEnG,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,UAAU,GAAG,eAAe,CAAC;AAE3E,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,UAAU;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GACvB,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,cAAc,GACd,eAAe,GACf,WAAW,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { ExpertiseRecord } from "../schemas/record.js";
2
2
  export declare function readExpertiseFile(filePath: string): Promise<ExpertiseRecord[]>;
3
+ export declare function generateRecordId(record: ExpertiseRecord): string;
3
4
  export declare function appendRecord(filePath: string, record: ExpertiseRecord): Promise<void>;
4
5
  export declare function createExpertiseFile(filePath: string): Promise<void>;
5
6
  export declare function getFileModTime(filePath: string): Promise<Date | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"expertise.d.ts","sourceRoot":"","sources":["../../src/utils/expertise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAc5B;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAO3E;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAE/D;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,eAAe,EAAE,EAC1B,IAAI,EAAE,MAAM,GACX,eAAe,EAAE,CAEnB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,eAAe,GACzB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAyDnD;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,eAAe,EAAE,EAC1B,KAAK,EAAE,MAAM,GACZ,eAAe,EAAE,CAiBnB"}
1
+ {"version":3,"file":"expertise.d.ts","sourceRoot":"","sources":["../../src/utils/expertise.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAc5B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAuBhE;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAO3E;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAE/D;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,eAAe,EAAE,EAC1B,IAAI,EAAE,MAAM,GACX,eAAe,EAAE,CAEnB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,eAAe,GACzB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAyDnD;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,eAAe,EAAE,EAC1B,KAAK,EAAE,MAAM,GACZ,eAAe,EAAE,CAiBnB"}