@cluesmith/codev 1.6.1 → 2.0.0-rc.1

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 (101) hide show
  1. package/bin/porch.js +7 -0
  2. package/dist/agent-farm/cli.d.ts.map +1 -1
  3. package/dist/agent-farm/cli.js +23 -0
  4. package/dist/agent-farm/cli.js.map +1 -1
  5. package/dist/agent-farm/commands/index.d.ts +1 -0
  6. package/dist/agent-farm/commands/index.d.ts.map +1 -1
  7. package/dist/agent-farm/commands/index.js +1 -0
  8. package/dist/agent-farm/commands/index.js.map +1 -1
  9. package/dist/agent-farm/commands/kickoff.d.ts +19 -0
  10. package/dist/agent-farm/commands/kickoff.d.ts.map +1 -0
  11. package/dist/agent-farm/commands/kickoff.js +269 -0
  12. package/dist/agent-farm/commands/kickoff.js.map +1 -0
  13. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  14. package/dist/agent-farm/commands/spawn.js +17 -3
  15. package/dist/agent-farm/commands/spawn.js.map +1 -1
  16. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  17. package/dist/agent-farm/commands/start.js +8 -0
  18. package/dist/agent-farm/commands/start.js.map +1 -1
  19. package/dist/agent-farm/hq-connector.d.ts +23 -0
  20. package/dist/agent-farm/hq-connector.d.ts.map +1 -0
  21. package/dist/agent-farm/hq-connector.js +366 -0
  22. package/dist/agent-farm/hq-connector.js.map +1 -0
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js +29 -0
  25. package/dist/cli.js.map +1 -1
  26. package/dist/commands/pcheck/cache.d.ts +48 -0
  27. package/dist/commands/pcheck/cache.d.ts.map +1 -0
  28. package/dist/commands/pcheck/cache.js +170 -0
  29. package/dist/commands/pcheck/cache.js.map +1 -0
  30. package/dist/commands/pcheck/evaluator.d.ts +15 -0
  31. package/dist/commands/pcheck/evaluator.d.ts.map +1 -0
  32. package/dist/commands/pcheck/evaluator.js +246 -0
  33. package/dist/commands/pcheck/evaluator.js.map +1 -0
  34. package/dist/commands/pcheck/index.d.ts +12 -0
  35. package/dist/commands/pcheck/index.d.ts.map +1 -0
  36. package/dist/commands/pcheck/index.js +249 -0
  37. package/dist/commands/pcheck/index.js.map +1 -0
  38. package/dist/commands/pcheck/parser.d.ts +39 -0
  39. package/dist/commands/pcheck/parser.d.ts.map +1 -0
  40. package/dist/commands/pcheck/parser.js +155 -0
  41. package/dist/commands/pcheck/parser.js.map +1 -0
  42. package/dist/commands/pcheck/types.d.ts +82 -0
  43. package/dist/commands/pcheck/types.d.ts.map +1 -0
  44. package/dist/commands/pcheck/types.js +5 -0
  45. package/dist/commands/pcheck/types.js.map +1 -0
  46. package/dist/commands/porch/checks.d.ts +42 -0
  47. package/dist/commands/porch/checks.d.ts.map +1 -0
  48. package/dist/commands/porch/checks.js +195 -0
  49. package/dist/commands/porch/checks.js.map +1 -0
  50. package/dist/commands/porch/consultation.d.ts +56 -0
  51. package/dist/commands/porch/consultation.d.ts.map +1 -0
  52. package/dist/commands/porch/consultation.js +330 -0
  53. package/dist/commands/porch/consultation.js.map +1 -0
  54. package/dist/commands/porch/index.d.ts +60 -0
  55. package/dist/commands/porch/index.d.ts.map +1 -0
  56. package/dist/commands/porch/index.js +828 -0
  57. package/dist/commands/porch/index.js.map +1 -0
  58. package/dist/commands/porch/notifications.d.ts +99 -0
  59. package/dist/commands/porch/notifications.d.ts.map +1 -0
  60. package/dist/commands/porch/notifications.js +223 -0
  61. package/dist/commands/porch/notifications.js.map +1 -0
  62. package/dist/commands/porch/plan-parser.d.ts +38 -0
  63. package/dist/commands/porch/plan-parser.d.ts.map +1 -0
  64. package/dist/commands/porch/plan-parser.js +166 -0
  65. package/dist/commands/porch/plan-parser.js.map +1 -0
  66. package/dist/commands/porch/protocol-loader.d.ts +46 -0
  67. package/dist/commands/porch/protocol-loader.d.ts.map +1 -0
  68. package/dist/commands/porch/protocol-loader.js +249 -0
  69. package/dist/commands/porch/protocol-loader.js.map +1 -0
  70. package/dist/commands/porch/signal-parser.d.ts +88 -0
  71. package/dist/commands/porch/signal-parser.d.ts.map +1 -0
  72. package/dist/commands/porch/signal-parser.js +148 -0
  73. package/dist/commands/porch/signal-parser.js.map +1 -0
  74. package/dist/commands/porch/state.d.ts +133 -0
  75. package/dist/commands/porch/state.d.ts.map +1 -0
  76. package/dist/commands/porch/state.js +760 -0
  77. package/dist/commands/porch/state.js.map +1 -0
  78. package/dist/commands/porch/types.d.ts +232 -0
  79. package/dist/commands/porch/types.d.ts.map +1 -0
  80. package/dist/commands/porch/types.js +7 -0
  81. package/dist/commands/porch/types.js.map +1 -0
  82. package/package.json +6 -2
  83. package/skeleton/porch/prompts/defend.md +103 -0
  84. package/skeleton/porch/prompts/diagnose.md +70 -0
  85. package/skeleton/porch/prompts/evaluate.md +132 -0
  86. package/skeleton/porch/prompts/fix.md +59 -0
  87. package/skeleton/porch/prompts/implement.md +79 -0
  88. package/skeleton/porch/prompts/plan.md +74 -0
  89. package/skeleton/porch/prompts/pr.md +84 -0
  90. package/skeleton/porch/prompts/review.md +179 -0
  91. package/skeleton/porch/prompts/specify.md +53 -0
  92. package/skeleton/porch/prompts/test.md +63 -0
  93. package/skeleton/porch/prompts/understand.md +61 -0
  94. package/skeleton/porch/prompts/verify.md +58 -0
  95. package/skeleton/porch/protocols/bugfix.json +85 -0
  96. package/skeleton/porch/protocols/spider.json +135 -0
  97. package/skeleton/porch/protocols/tick.json +76 -0
  98. package/skeleton/protocols/bugfix/protocol.json +127 -0
  99. package/skeleton/protocols/protocol-schema.json +237 -0
  100. package/skeleton/protocols/spider/protocol.json +204 -0
  101. package/skeleton/protocols/tick/protocol.json +151 -0
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Caching layer for pcheck LLM results
3
+ *
4
+ * Caches LLM check results based on file content hashes
5
+ * to avoid expensive re-evaluations when files haven't changed.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
8
+ import { join, dirname } from 'node:path';
9
+ import { createHash } from 'node:crypto';
10
+ const CACHE_VERSION = 1;
11
+ const CACHE_FILENAME = '.codev/pcheck-cache.json';
12
+ /**
13
+ * Find the project root directory (containing codev/)
14
+ */
15
+ function findProjectRoot() {
16
+ let dir = process.cwd();
17
+ while (dir !== '/') {
18
+ if (existsSync(join(dir, 'codev'))) {
19
+ return dir;
20
+ }
21
+ dir = dirname(dir);
22
+ }
23
+ return null;
24
+ }
25
+ /**
26
+ * Get the cache file path
27
+ */
28
+ function getCachePath() {
29
+ const root = findProjectRoot();
30
+ if (!root) {
31
+ return null;
32
+ }
33
+ return join(root, CACHE_FILENAME);
34
+ }
35
+ /**
36
+ * Load the cache file
37
+ */
38
+ export function loadCache() {
39
+ const cachePath = getCachePath();
40
+ if (!cachePath || !existsSync(cachePath)) {
41
+ return { version: CACHE_VERSION, entries: {} };
42
+ }
43
+ try {
44
+ const content = readFileSync(cachePath, 'utf-8');
45
+ const cache = JSON.parse(content);
46
+ // Validate version
47
+ if (cache.version !== CACHE_VERSION) {
48
+ return { version: CACHE_VERSION, entries: {} };
49
+ }
50
+ return cache;
51
+ }
52
+ catch {
53
+ return { version: CACHE_VERSION, entries: {} };
54
+ }
55
+ }
56
+ /**
57
+ * Save the cache file
58
+ */
59
+ export function saveCache(cache) {
60
+ const cachePath = getCachePath();
61
+ if (!cachePath) {
62
+ return;
63
+ }
64
+ // Ensure .codev directory exists
65
+ const dir = dirname(cachePath);
66
+ if (!existsSync(dir)) {
67
+ mkdirSync(dir, { recursive: true });
68
+ }
69
+ writeFileSync(cachePath, JSON.stringify(cache, null, 2));
70
+ }
71
+ /**
72
+ * Compute a hash of file contents
73
+ * For multiple files, concatenates and hashes together
74
+ */
75
+ export function computeContentHash(filePaths) {
76
+ const hash = createHash('sha256');
77
+ for (const filePath of filePaths) {
78
+ if (existsSync(filePath)) {
79
+ const content = readFileSync(filePath, 'utf-8');
80
+ hash.update(`${filePath}:${content}`);
81
+ }
82
+ else {
83
+ hash.update(`${filePath}:NOT_FOUND`);
84
+ }
85
+ }
86
+ return hash.digest('hex').substring(0, 16); // Truncate for readability
87
+ }
88
+ /**
89
+ * Generate a cache key for a check
90
+ */
91
+ export function getCacheKey(checkId, contentHash) {
92
+ return `${checkId}:${contentHash}`;
93
+ }
94
+ /**
95
+ * Get a cached result if available and valid
96
+ */
97
+ export function getCachedResult(checkId, filePaths) {
98
+ const cache = loadCache();
99
+ const contentHash = computeContentHash(filePaths);
100
+ const key = getCacheKey(checkId, contentHash);
101
+ const entry = cache.entries[key];
102
+ if (!entry) {
103
+ return null;
104
+ }
105
+ // Verify the hash still matches
106
+ if (entry.contentHash !== contentHash) {
107
+ return null;
108
+ }
109
+ return entry;
110
+ }
111
+ /**
112
+ * Store a result in the cache
113
+ */
114
+ export function setCachedResult(checkId, filePaths, pass, reasoning) {
115
+ const cache = loadCache();
116
+ const contentHash = computeContentHash(filePaths);
117
+ const key = getCacheKey(checkId, contentHash);
118
+ cache.entries[key] = {
119
+ checkId,
120
+ contentHash,
121
+ pass,
122
+ reasoning,
123
+ timestamp: Date.now(),
124
+ };
125
+ saveCache(cache);
126
+ }
127
+ /**
128
+ * Invalidate cache entries for a specific check
129
+ */
130
+ export function invalidateCheck(checkId) {
131
+ const cache = loadCache();
132
+ // Remove all entries for this check
133
+ for (const key of Object.keys(cache.entries)) {
134
+ if (key.startsWith(`${checkId}:`)) {
135
+ delete cache.entries[key];
136
+ }
137
+ }
138
+ saveCache(cache);
139
+ }
140
+ /**
141
+ * Clear all cache entries
142
+ */
143
+ export function clearCache() {
144
+ const cachePath = getCachePath();
145
+ if (cachePath && existsSync(cachePath)) {
146
+ writeFileSync(cachePath, JSON.stringify({ version: CACHE_VERSION, entries: {} }, null, 2));
147
+ }
148
+ }
149
+ /**
150
+ * Get cache statistics
151
+ */
152
+ export function getCacheStats() {
153
+ const cachePath = getCachePath();
154
+ if (!cachePath || !existsSync(cachePath)) {
155
+ return { entries: 0, size: '0 B' };
156
+ }
157
+ const cache = loadCache();
158
+ const content = readFileSync(cachePath, 'utf-8');
159
+ const size = content.length;
160
+ const sizeStr = size < 1024
161
+ ? `${size} B`
162
+ : size < 1024 * 1024
163
+ ? `${(size / 1024).toFixed(1)} KB`
164
+ : `${(size / 1024 / 1024).toFixed(1)} MB`;
165
+ return {
166
+ entries: Object.keys(cache.entries).length,
167
+ size: sizeStr,
168
+ };
169
+ }
170
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/commands/pcheck/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Check evaluator for pcheck command
3
+ *
4
+ * Evaluates different types of checks:
5
+ * - file_exists: Check if a file matches a glob pattern
6
+ * - file_not_exists: Inverse of above
7
+ * - llm_check: Semantic check using Claude Haiku
8
+ * - command: Execute a shell command and check result
9
+ */
10
+ import type { Check, CheckResult, EvaluationContext } from './types.js';
11
+ /**
12
+ * Evaluate a single check
13
+ */
14
+ export declare function evaluateCheck(checkId: string, check: Check, context: EvaluationContext, useCache?: boolean): Promise<CheckResult>;
15
+ //# sourceMappingURL=evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../src/commands/pcheck/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AAsPpB;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,WAAW,CAAC,CA2BtB"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Check evaluator for pcheck command
3
+ *
4
+ * Evaluates different types of checks:
5
+ * - file_exists: Check if a file matches a glob pattern
6
+ * - file_not_exists: Inverse of above
7
+ * - llm_check: Semantic check using Claude Haiku
8
+ * - command: Execute a shell command and check result
9
+ */
10
+ import { readFileSync } from 'node:fs';
11
+ import { execSync } from 'node:child_process';
12
+ import { glob } from 'glob';
13
+ import Anthropic from '@anthropic-ai/sdk';
14
+ import { expandPattern } from './parser.js';
15
+ import { getCachedResult, setCachedResult } from './cache.js';
16
+ // Initialize Anthropic client lazily
17
+ let anthropicClient = null;
18
+ function getAnthropicClient() {
19
+ if (!anthropicClient) {
20
+ anthropicClient = new Anthropic();
21
+ }
22
+ return anthropicClient;
23
+ }
24
+ /**
25
+ * Evaluate a file_exists check
26
+ */
27
+ async function evaluateFileExists(check, context) {
28
+ const start = Date.now();
29
+ const pattern = expandPattern(check.pattern, context);
30
+ const matches = glob.sync(pattern);
31
+ const pass = matches.length > 0;
32
+ return {
33
+ id: '', // Will be set by caller
34
+ pass,
35
+ description: check.description,
36
+ reasoning: pass
37
+ ? `Found: ${matches[0]}`
38
+ : `No files matching: ${pattern}`,
39
+ duration_ms: Date.now() - start,
40
+ };
41
+ }
42
+ /**
43
+ * Evaluate a file_not_exists check
44
+ */
45
+ async function evaluateFileNotExists(check, context) {
46
+ const start = Date.now();
47
+ const pattern = expandPattern(check.pattern, context);
48
+ const matches = glob.sync(pattern);
49
+ const pass = matches.length === 0;
50
+ return {
51
+ id: '',
52
+ pass,
53
+ description: check.description,
54
+ reasoning: pass
55
+ ? `No files matching: ${pattern}`
56
+ : `Found (should not exist): ${matches[0]}`,
57
+ duration_ms: Date.now() - start,
58
+ };
59
+ }
60
+ /**
61
+ * Evaluate an LLM check using Claude Haiku
62
+ */
63
+ async function evaluateLlmCheck(checkId, check, context, useCache) {
64
+ const start = Date.now();
65
+ // Resolve file paths
66
+ const patterns = check.files ?? (check.file ? [check.file] : []);
67
+ const resolvedPaths = patterns.map(p => expandPattern(p, context));
68
+ const actualFiles = [];
69
+ for (const pattern of resolvedPaths) {
70
+ const matches = glob.sync(pattern);
71
+ if (matches.length > 0) {
72
+ actualFiles.push(matches[0]);
73
+ }
74
+ }
75
+ // If any required file is missing, fail immediately
76
+ if (actualFiles.length !== resolvedPaths.length) {
77
+ const missing = resolvedPaths.filter(p => !glob.sync(p).length);
78
+ return {
79
+ id: '',
80
+ pass: false,
81
+ description: check.description,
82
+ reasoning: `Missing files: ${missing.join(', ')}`,
83
+ duration_ms: Date.now() - start,
84
+ };
85
+ }
86
+ // Check cache
87
+ if (useCache) {
88
+ const cached = getCachedResult(checkId, actualFiles);
89
+ if (cached) {
90
+ return {
91
+ id: '',
92
+ pass: cached.pass,
93
+ description: check.description,
94
+ reasoning: cached.reasoning,
95
+ cached: true,
96
+ duration_ms: Date.now() - start,
97
+ };
98
+ }
99
+ }
100
+ // Read file contents
101
+ const contents = actualFiles.map(f => readFileSync(f, 'utf-8'));
102
+ // Build prompt
103
+ const filesContext = contents.map((content, i) => {
104
+ const filename = actualFiles[i].split('/').pop();
105
+ return `--- ${filename} ---\n${content}`;
106
+ }).join('\n\n');
107
+ const prompt = `Based on the following document(s), answer YES or NO to this question:
108
+
109
+ ${check.question}
110
+
111
+ ${filesContext}
112
+
113
+ Answer with just YES or NO on the first line, followed by a brief explanation on the next line.`;
114
+ try {
115
+ const client = getAnthropicClient();
116
+ const response = await client.messages.create({
117
+ model: 'claude-3-5-haiku-latest',
118
+ max_tokens: 256,
119
+ messages: [{ role: 'user', content: prompt }],
120
+ });
121
+ // Extract response text
122
+ const responseText = response.content[0].type === 'text'
123
+ ? response.content[0].text
124
+ : '';
125
+ // Parse YES/NO answer
126
+ const firstLine = responseText.trim().split('\n')[0].toUpperCase();
127
+ const answer = firstLine.startsWith('YES');
128
+ const pass = check.expect === false ? !answer : answer;
129
+ // Cache the result
130
+ if (useCache) {
131
+ setCachedResult(checkId, actualFiles, pass, responseText);
132
+ }
133
+ return {
134
+ id: '',
135
+ pass,
136
+ description: check.description,
137
+ reasoning: responseText,
138
+ cached: false,
139
+ duration_ms: Date.now() - start,
140
+ };
141
+ }
142
+ catch (error) {
143
+ const errorMessage = error instanceof Error ? error.message : String(error);
144
+ return {
145
+ id: '',
146
+ pass: false,
147
+ description: check.description,
148
+ reasoning: `LLM check failed: ${errorMessage}`,
149
+ duration_ms: Date.now() - start,
150
+ };
151
+ }
152
+ }
153
+ /**
154
+ * Evaluate a command check
155
+ */
156
+ async function evaluateCommand(check, context) {
157
+ const start = Date.now();
158
+ // Expand any variables in the command
159
+ const command = expandPattern(check.run, context);
160
+ try {
161
+ const output = execSync(command, {
162
+ encoding: 'utf-8',
163
+ timeout: 60000, // 60 second timeout
164
+ stdio: ['pipe', 'pipe', 'pipe'],
165
+ }).trim();
166
+ let pass = true;
167
+ let reasoning = `Command succeeded`;
168
+ // Check exit code (0 by default for success)
169
+ if (check.exit_code !== undefined) {
170
+ // If we got here, exit code was 0
171
+ pass = pass && (check.exit_code === 0);
172
+ reasoning = pass ? reasoning : `Expected exit code ${check.exit_code}, got 0`;
173
+ }
174
+ // Check stdout
175
+ if (check.stdout !== undefined) {
176
+ const stdoutMatch = output === check.stdout;
177
+ pass = pass && stdoutMatch;
178
+ if (!stdoutMatch) {
179
+ reasoning = `Expected stdout "${check.stdout}", got "${output}"`;
180
+ }
181
+ }
182
+ return {
183
+ id: '',
184
+ pass,
185
+ description: check.description,
186
+ reasoning,
187
+ duration_ms: Date.now() - start,
188
+ };
189
+ }
190
+ catch (error) {
191
+ let exitCode = 1;
192
+ let stderr = '';
193
+ if (error && typeof error === 'object') {
194
+ const execError = error;
195
+ exitCode = execError.status ?? 1;
196
+ stderr = execError.stderr ?? '';
197
+ }
198
+ // If we expected a non-zero exit code, this might be a pass
199
+ if (check.exit_code !== undefined && check.exit_code === exitCode) {
200
+ return {
201
+ id: '',
202
+ pass: true,
203
+ description: check.description,
204
+ reasoning: `Exit code ${exitCode} as expected`,
205
+ duration_ms: Date.now() - start,
206
+ };
207
+ }
208
+ return {
209
+ id: '',
210
+ pass: false,
211
+ description: check.description,
212
+ reasoning: `Command failed with exit code ${exitCode}${stderr ? `: ${stderr.trim()}` : ''}`,
213
+ duration_ms: Date.now() - start,
214
+ };
215
+ }
216
+ }
217
+ /**
218
+ * Evaluate a single check
219
+ */
220
+ export async function evaluateCheck(checkId, check, context, useCache = true) {
221
+ let result;
222
+ switch (check.type) {
223
+ case 'file_exists':
224
+ result = await evaluateFileExists(check, context);
225
+ break;
226
+ case 'file_not_exists':
227
+ result = await evaluateFileNotExists(check, context);
228
+ break;
229
+ case 'llm_check':
230
+ result = await evaluateLlmCheck(checkId, check, context, useCache);
231
+ break;
232
+ case 'command':
233
+ result = await evaluateCommand(check, context);
234
+ break;
235
+ default:
236
+ result = {
237
+ id: checkId,
238
+ pass: false,
239
+ description: 'Unknown check type',
240
+ reasoning: `Unsupported check type`,
241
+ };
242
+ }
243
+ result.id = checkId;
244
+ return result;
245
+ }
246
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/commands/pcheck/evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * codev pcheck - Protocol Check command
3
+ *
4
+ * Evaluate declarative protocol checks defined in checks.yaml files.
5
+ * Supports semantic (LLM-based) evaluation for human-written content.
6
+ */
7
+ import type { PcheckOptions } from './types.js';
8
+ /**
9
+ * Main pcheck command
10
+ */
11
+ export declare function pcheck(target: string | undefined, options: PcheckOptions): Promise<number>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/pcheck/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAoD,MAAM,YAAY,CAAC;AAwMlG;;GAEG;AACH,wBAAsB,MAAM,CAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAsFjB"}