aidevo 1.0.0-beta.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.
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/dist/cli/commands/dashboard.d.ts +2 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +70 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +362 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/log.d.ts +2 -0
- package/dist/cli/commands/log.d.ts.map +1 -0
- package/dist/cli/commands/log.js +438 -0
- package/dist/cli/commands/log.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +2 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +183 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/reindex.d.ts +10 -0
- package/dist/cli/commands/reindex.d.ts.map +1 -0
- package/dist/cli/commands/reindex.js +94 -0
- package/dist/cli/commands/reindex.js.map +1 -0
- package/dist/cli/commands/report.d.ts +2 -0
- package/dist/cli/commands/report.d.ts.map +1 -0
- package/dist/cli/commands/report.js +219 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/commands/rules.d.ts +2 -0
- package/dist/cli/commands/rules.d.ts.map +1 -0
- package/dist/cli/commands/rules.js +143 -0
- package/dist/cli/commands/rules.js.map +1 -0
- package/dist/cli/commands/start.d.ts +2 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +173 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +74 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +146 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +85 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +632 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/schemas/run-json.d.ts +252 -0
- package/dist/schemas/run-json.d.ts.map +1 -0
- package/dist/schemas/run-json.js +22 -0
- package/dist/schemas/run-json.js.map +1 -0
- package/dist/server/api.d.ts +24 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +196 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +166 -0
- package/dist/server/index.js.map +1 -0
- package/dist/utils/display.d.ts +12 -0
- package/dist/utils/display.d.ts.map +1 -0
- package/dist/utils/display.js +52 -0
- package/dist/utils/display.js.map +1 -0
- package/dist/utils/fs.d.ts +9 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +43 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/git.d.ts +4 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +18 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/paths.d.ts +25 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +45 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/rules.d.ts +44 -0
- package/dist/utils/rules.d.ts.map +1 -0
- package/dist/utils/rules.js +208 -0
- package/dist/utils/rules.js.map +1 -0
- package/dist/utils/run-data.d.ts +37 -0
- package/dist/utils/run-data.d.ts.map +1 -0
- package/dist/utils/run-data.js +353 -0
- package/dist/utils/run-data.js.map +1 -0
- package/dist/utils/tokens.d.ts +26 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +173 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +48 -0
- package/src/assets/skills/audit.md +98 -0
- package/src/assets/skills/bug-fixer.md +48 -0
- package/src/assets/skills/code-generator.md +82 -0
- package/src/assets/skills/commit-code.md +67 -0
- package/src/assets/skills/dashboard-generator.md +65 -0
- package/src/assets/skills/dev-flower.md +85 -0
- package/src/assets/skills/deviation-recorder.md +89 -0
- package/src/assets/skills/docx-to-markdown.md +69 -0
- package/src/assets/skills/mcp-reviewer.md +43 -0
- package/src/assets/skills/requirement-analyzer.md +103 -0
- package/src/assets/skills/rules-evolver.md +48 -0
- package/src/assets/skills/self-reviewer.md +53 -0
- package/src/assets/skills/task-splitter.md +58 -0
- package/src/assets/skills/workflow-orchestrator.md +204 -0
- package/src/assets/templates/demo-run.json +910 -0
- package/src/assets/templates/run.json +63 -0
- package/src/dashboard/assets/index-BMygHuaU.js +111 -0
- package/src/dashboard/assets/index-BW0UZ6Es.css +1 -0
- package/src/dashboard/index.html +13 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { createServer } from 'node:http';
|
|
2
|
+
import { readFileSync, watch, existsSync } from 'node:fs';
|
|
3
|
+
import { resolve, extname } from 'node:path';
|
|
4
|
+
import { PACKAGE_ROOT } from '../utils/paths.js';
|
|
5
|
+
import { getAllRuns, getRunData, getAggregatedData, getRequirementData, getIndexData } from './api.js';
|
|
6
|
+
import { buildIndex } from '../cli/commands/reindex.js';
|
|
7
|
+
const DASHBOARD_DIR = resolve(PACKAGE_ROOT, 'src', 'dashboard');
|
|
8
|
+
const sseClients = new Set();
|
|
9
|
+
const MIME_TYPES = {
|
|
10
|
+
'.html': 'text/html; charset=utf-8',
|
|
11
|
+
'.js': 'application/javascript',
|
|
12
|
+
'.css': 'text/css',
|
|
13
|
+
'.json': 'application/json',
|
|
14
|
+
'.svg': 'image/svg+xml',
|
|
15
|
+
'.png': 'image/png',
|
|
16
|
+
'.ico': 'image/x-icon',
|
|
17
|
+
};
|
|
18
|
+
function serveStatic(filePath, res) {
|
|
19
|
+
if (!existsSync(filePath))
|
|
20
|
+
return false;
|
|
21
|
+
try {
|
|
22
|
+
const content = readFileSync(filePath);
|
|
23
|
+
const ext = extname(filePath);
|
|
24
|
+
res.writeHead(200, { 'Content-Type': MIME_TYPES[ext] || 'application/octet-stream' });
|
|
25
|
+
res.end(content);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function startServer(port, projectRoot) {
|
|
33
|
+
const theRunsDir = resolve(projectRoot, '.aidevos', 'runs');
|
|
34
|
+
const server = createServer((req, res) => {
|
|
35
|
+
const url = req.url || '/';
|
|
36
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
37
|
+
// API routes
|
|
38
|
+
if (url === '/api/runs') {
|
|
39
|
+
const runs = getAllRuns(theRunsDir);
|
|
40
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
41
|
+
res.end(JSON.stringify(runs));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (url === '/api/aggregate') {
|
|
45
|
+
const data = getAggregatedData(theRunsDir);
|
|
46
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
47
|
+
res.end(JSON.stringify(data));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (url === '/api/overview') {
|
|
51
|
+
const data = getIndexData(projectRoot);
|
|
52
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
53
|
+
res.end(JSON.stringify(data || { project: '', updatedAt: '', runs: [] }));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (url.startsWith('/api/requirement/')) {
|
|
57
|
+
const branch = decodeURIComponent(url.replace('/api/requirement/', ''));
|
|
58
|
+
if (branch.includes('..') || branch.includes('\0')) {
|
|
59
|
+
res.writeHead(403, { 'Content-Type': 'application/json' });
|
|
60
|
+
res.end(JSON.stringify({ error: 'Forbidden' }));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const data = getRequirementData(theRunsDir, branch);
|
|
64
|
+
if (data) {
|
|
65
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
66
|
+
res.end(JSON.stringify(data));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
70
|
+
res.end(JSON.stringify({ error: 'Requirement not found' }));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (url.startsWith('/api/runs/')) {
|
|
74
|
+
const parts = decodeURIComponent(url.replace('/api/runs/', '')).split('/');
|
|
75
|
+
if (parts.length >= 2) {
|
|
76
|
+
const branch = parts[0];
|
|
77
|
+
const dev = parts[1];
|
|
78
|
+
// Reject path traversal attempts
|
|
79
|
+
if (branch.includes('..') || dev.includes('..') || branch.includes('\0') || dev.includes('\0')) {
|
|
80
|
+
res.writeHead(403, { 'Content-Type': 'application/json' });
|
|
81
|
+
res.end(JSON.stringify({ error: 'Forbidden' }));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const data = getRunData(theRunsDir, branch, dev);
|
|
85
|
+
if (data) {
|
|
86
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
87
|
+
res.end(JSON.stringify(data));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
92
|
+
res.end(JSON.stringify({ error: 'Run not found' }));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (url === '/api/events') {
|
|
96
|
+
res.writeHead(200, {
|
|
97
|
+
'Content-Type': 'text/event-stream',
|
|
98
|
+
'Cache-Control': 'no-cache',
|
|
99
|
+
Connection: 'keep-alive',
|
|
100
|
+
});
|
|
101
|
+
res.write('data: {"type":"connected"}\n\n');
|
|
102
|
+
sseClients.add(res);
|
|
103
|
+
req.on('close', () => sseClients.delete(res));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// Static file serving from dashboard build output
|
|
107
|
+
const safePath = url.split('?')[0].split('#')[0];
|
|
108
|
+
if (safePath !== '/' && safePath !== '/index.html') {
|
|
109
|
+
const filePath = resolve(DASHBOARD_DIR, safePath.replace(/^\//, ''));
|
|
110
|
+
if (!filePath.startsWith(DASHBOARD_DIR)) {
|
|
111
|
+
res.writeHead(403);
|
|
112
|
+
res.end('Forbidden');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (serveStatic(filePath, res))
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// SPA fallback: serve index.html
|
|
119
|
+
const indexPath = resolve(DASHBOARD_DIR, 'index.html');
|
|
120
|
+
if (serveStatic(indexPath, res))
|
|
121
|
+
return;
|
|
122
|
+
res.writeHead(404);
|
|
123
|
+
res.end('Dashboard not found. Run `pnpm build` in the dashboard/ directory.');
|
|
124
|
+
});
|
|
125
|
+
// Watch for run.json changes with debounce
|
|
126
|
+
if (existsSync(theRunsDir)) {
|
|
127
|
+
let debounceTimer = null;
|
|
128
|
+
watch(theRunsDir, { recursive: true }, (_eventType, filename) => {
|
|
129
|
+
if (!filename?.endsWith('run.json') && !filename?.endsWith('requirement.json'))
|
|
130
|
+
return;
|
|
131
|
+
if (debounceTimer)
|
|
132
|
+
clearTimeout(debounceTimer);
|
|
133
|
+
debounceTimer = setTimeout(() => {
|
|
134
|
+
// Rebuild index so overview stays fresh
|
|
135
|
+
try {
|
|
136
|
+
buildIndex(projectRoot);
|
|
137
|
+
}
|
|
138
|
+
catch { /* best-effort */ }
|
|
139
|
+
const event = JSON.stringify({
|
|
140
|
+
type: 'run_updated',
|
|
141
|
+
file: filename,
|
|
142
|
+
time: new Date().toISOString(),
|
|
143
|
+
});
|
|
144
|
+
for (const client of sseClients) {
|
|
145
|
+
try {
|
|
146
|
+
client.write(`data: ${event}\n\n`);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
sseClients.delete(client);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}, 300);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return new Promise((resolvePromise, reject) => {
|
|
156
|
+
server.on('error', (err) => {
|
|
157
|
+
if (err.code === 'EADDRINUSE') {
|
|
158
|
+
console.error(`\n Port ${port} is already in use. Use --port to specify another port.\n`);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
reject(err);
|
|
162
|
+
});
|
|
163
|
+
server.listen(port, () => resolvePromise());
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function bold(text: string): string;
|
|
2
|
+
export declare function green(text: string): string;
|
|
3
|
+
export declare function red(text: string): string;
|
|
4
|
+
export declare function yellow(text: string): string;
|
|
5
|
+
export declare function cyan(text: string): string;
|
|
6
|
+
export declare function blue(text: string): string;
|
|
7
|
+
export declare function dim(text: string): string;
|
|
8
|
+
export declare function purple(text: string): string;
|
|
9
|
+
export declare function section(title: string): string;
|
|
10
|
+
export declare function formatDuration(ms: number): string;
|
|
11
|
+
export declare function formatDate(iso: string): string;
|
|
12
|
+
//# sourceMappingURL=display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/utils/display.ts"],"names":[],"mappings":"AAAA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAS9C"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export function bold(text) {
|
|
2
|
+
return `\x1b[1m${text}\x1b[0m`;
|
|
3
|
+
}
|
|
4
|
+
export function green(text) {
|
|
5
|
+
return `\x1b[32m${text}\x1b[0m`;
|
|
6
|
+
}
|
|
7
|
+
export function red(text) {
|
|
8
|
+
return `\x1b[31m${text}\x1b[0m`;
|
|
9
|
+
}
|
|
10
|
+
export function yellow(text) {
|
|
11
|
+
return `\x1b[33m${text}\x1b[0m`;
|
|
12
|
+
}
|
|
13
|
+
export function cyan(text) {
|
|
14
|
+
return `\x1b[36m${text}\x1b[0m`;
|
|
15
|
+
}
|
|
16
|
+
export function blue(text) {
|
|
17
|
+
return `\x1b[34m${text}\x1b[0m`;
|
|
18
|
+
}
|
|
19
|
+
export function dim(text) {
|
|
20
|
+
return `\x1b[2m${text}\x1b[0m`;
|
|
21
|
+
}
|
|
22
|
+
export function purple(text) {
|
|
23
|
+
return `\x1b[35m${text}\x1b[0m`;
|
|
24
|
+
}
|
|
25
|
+
export function section(title) {
|
|
26
|
+
const line = '─'.repeat(42 - title.length);
|
|
27
|
+
return dim(`── ${title} ${line}`);
|
|
28
|
+
}
|
|
29
|
+
export function formatDuration(ms) {
|
|
30
|
+
const seconds = Math.floor(ms / 1000);
|
|
31
|
+
const minutes = Math.floor(seconds / 60);
|
|
32
|
+
const hours = Math.floor(minutes / 60);
|
|
33
|
+
const days = Math.floor(hours / 24);
|
|
34
|
+
if (days > 0)
|
|
35
|
+
return `${days}d ${hours % 24}h`;
|
|
36
|
+
if (hours > 0)
|
|
37
|
+
return `${hours}h ${minutes % 60}m`;
|
|
38
|
+
if (minutes > 0)
|
|
39
|
+
return `${minutes}m`;
|
|
40
|
+
return `${seconds}s`;
|
|
41
|
+
}
|
|
42
|
+
export function formatDate(iso) {
|
|
43
|
+
const d = new Date(iso);
|
|
44
|
+
return d.toLocaleString('en-US', {
|
|
45
|
+
year: 'numeric',
|
|
46
|
+
month: 'short',
|
|
47
|
+
day: 'numeric',
|
|
48
|
+
hour: '2-digit',
|
|
49
|
+
minute: '2-digit',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/utils/display.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,OAAO,WAAW,IAAI,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAY;IAC9B,OAAO,WAAW,IAAI,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,WAAW,IAAI,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,OAAO,WAAW,IAAI,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,OAAO,WAAW,IAAI,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAY;IAC9B,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,WAAW,IAAI,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAEpC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC;IAC/C,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACnD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACtC,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;QAC/B,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function ensureDir(dir: string): void;
|
|
2
|
+
export declare function readJson<T = unknown>(filePath: string): T;
|
|
3
|
+
export declare function writeJson(filePath: string, data: unknown): void;
|
|
4
|
+
export declare function fileExists(filePath: string): boolean;
|
|
5
|
+
export declare function readText(filePath: string): string;
|
|
6
|
+
export declare function writeText(filePath: string, content: string): void;
|
|
7
|
+
export declare function getProjectName(): string;
|
|
8
|
+
export declare function listDirs(dir: string): string[];
|
|
9
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAUA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGzD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAE/D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED,wBAAgB,cAAc,IAAI,MAAM,CAUvC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9C"}
|
package/dist/utils/fs.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync, } from 'node:fs';
|
|
2
|
+
import { resolve, basename } from 'node:path';
|
|
3
|
+
export function ensureDir(dir) {
|
|
4
|
+
if (!existsSync(dir)) {
|
|
5
|
+
mkdirSync(dir, { recursive: true });
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export function readJson(filePath) {
|
|
9
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
10
|
+
return JSON.parse(content);
|
|
11
|
+
}
|
|
12
|
+
export function writeJson(filePath, data) {
|
|
13
|
+
writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n', 'utf-8');
|
|
14
|
+
}
|
|
15
|
+
export function fileExists(filePath) {
|
|
16
|
+
return existsSync(filePath);
|
|
17
|
+
}
|
|
18
|
+
export function readText(filePath) {
|
|
19
|
+
return readFileSync(filePath, 'utf-8');
|
|
20
|
+
}
|
|
21
|
+
export function writeText(filePath, content) {
|
|
22
|
+
writeFileSync(filePath, content, 'utf-8');
|
|
23
|
+
}
|
|
24
|
+
export function getProjectName() {
|
|
25
|
+
try {
|
|
26
|
+
const pkg = readJson(resolve(process.cwd(), 'package.json'));
|
|
27
|
+
if (pkg.name)
|
|
28
|
+
return pkg.name;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
/* no package.json */
|
|
32
|
+
}
|
|
33
|
+
return basename(process.cwd());
|
|
34
|
+
}
|
|
35
|
+
export function listDirs(dir) {
|
|
36
|
+
if (!existsSync(dir))
|
|
37
|
+
return [];
|
|
38
|
+
return readdirSync(dir).filter((name) => {
|
|
39
|
+
const full = resolve(dir, name);
|
|
40
|
+
return statSync(full).isDirectory();
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,WAAW,EACX,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAc,QAAgB;IACpD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,IAAa;IACvD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAClB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CACvC,CAAC;QACF,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAOnC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
export function getBranchName() {
|
|
3
|
+
return execSync('git branch --show-current', { encoding: 'utf-8' }).trim();
|
|
4
|
+
}
|
|
5
|
+
export function getDevName() {
|
|
6
|
+
const name = execSync('git config user.name', { encoding: 'utf-8' }).trim();
|
|
7
|
+
return name.toLowerCase().replace(/\s+/g, '-');
|
|
8
|
+
}
|
|
9
|
+
export function isGitRepo() {
|
|
10
|
+
try {
|
|
11
|
+
execSync('git rev-parse --is-inside-work-tree', { encoding: 'utf-8' });
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC;QACH,QAAQ,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** AIDevOS package root */
|
|
2
|
+
export declare const PACKAGE_ROOT: string;
|
|
3
|
+
/** Bundled assets directory */
|
|
4
|
+
export declare const ASSETS_DIR: string;
|
|
5
|
+
/** Bundled skill files */
|
|
6
|
+
export declare const SKILLS_DIR: string;
|
|
7
|
+
/** Bundled template files */
|
|
8
|
+
export declare const TEMPLATES_DIR: string;
|
|
9
|
+
/** Dashboard HTML file */
|
|
10
|
+
export declare const DASHBOARD_FILE: string;
|
|
11
|
+
/** .aidevos directory in user's project */
|
|
12
|
+
export declare function aidevosDir(projectRoot?: string): string;
|
|
13
|
+
/** Runs directory */
|
|
14
|
+
export declare function runsDir(projectRoot?: string): string;
|
|
15
|
+
/** Run data directory for a specific branch + developer */
|
|
16
|
+
export declare function runDir(projectRoot: string, branchName: string, devName: string): string;
|
|
17
|
+
/** Branch-level directory (shared PRD, analysis, requirement.json) */
|
|
18
|
+
export declare function branchDir(projectRoot: string, branchName: string): string;
|
|
19
|
+
/** Branch-level requirement.json path */
|
|
20
|
+
export declare function requirementPath(projectRoot: string, branchName: string): string;
|
|
21
|
+
/** Project-level index.json path */
|
|
22
|
+
export declare function indexPath(projectRoot?: string): string;
|
|
23
|
+
/** Config file path */
|
|
24
|
+
export declare function configPath(projectRoot?: string): string;
|
|
25
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAMA,2BAA2B;AAC3B,eAAO,MAAM,YAAY,QAAiC,CAAC;AAE3D,+BAA+B;AAC/B,eAAO,MAAM,UAAU,QAAyC,CAAC;AAEjE,0BAA0B;AAC1B,eAAO,MAAM,UAAU,QAAgC,CAAC;AAExD,6BAA6B;AAC7B,eAAO,MAAM,aAAa,QAAmC,CAAC;AAE9D,0BAA0B;AAC1B,eAAO,MAAM,cAAc,QAA0D,CAAC;AAEtF,2CAA2C;AAC3C,wBAAgB,UAAU,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAEtE;AAED,qBAAqB;AACrB,wBAAgB,OAAO,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAEnE;AAED,2DAA2D;AAC3D,wBAAgB,MAAM,CACpB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,MAAM,CAGR;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAGR;AAED,yCAAyC;AACzC,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAED,oCAAoC;AACpC,wBAAgB,SAAS,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAErE;AAED,uBAAuB;AACvB,wBAAgB,UAAU,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { resolve, dirname } from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = dirname(__filename);
|
|
5
|
+
/** AIDevOS package root */
|
|
6
|
+
export const PACKAGE_ROOT = resolve(__dirname, '..', '..');
|
|
7
|
+
/** Bundled assets directory */
|
|
8
|
+
export const ASSETS_DIR = resolve(PACKAGE_ROOT, 'src', 'assets');
|
|
9
|
+
/** Bundled skill files */
|
|
10
|
+
export const SKILLS_DIR = resolve(ASSETS_DIR, 'skills');
|
|
11
|
+
/** Bundled template files */
|
|
12
|
+
export const TEMPLATES_DIR = resolve(ASSETS_DIR, 'templates');
|
|
13
|
+
/** Dashboard HTML file */
|
|
14
|
+
export const DASHBOARD_FILE = resolve(PACKAGE_ROOT, 'src', 'dashboard', 'index.html');
|
|
15
|
+
/** .aidevos directory in user's project */
|
|
16
|
+
export function aidevosDir(projectRoot = process.cwd()) {
|
|
17
|
+
return resolve(projectRoot, '.aidevos');
|
|
18
|
+
}
|
|
19
|
+
/** Runs directory */
|
|
20
|
+
export function runsDir(projectRoot = process.cwd()) {
|
|
21
|
+
return resolve(projectRoot, '.aidevos', 'runs');
|
|
22
|
+
}
|
|
23
|
+
/** Run data directory for a specific branch + developer */
|
|
24
|
+
export function runDir(projectRoot, branchName, devName) {
|
|
25
|
+
const safeBranch = branchName.replace(/\//g, '-');
|
|
26
|
+
return resolve(projectRoot, '.aidevos', 'runs', safeBranch, devName);
|
|
27
|
+
}
|
|
28
|
+
/** Branch-level directory (shared PRD, analysis, requirement.json) */
|
|
29
|
+
export function branchDir(projectRoot, branchName) {
|
|
30
|
+
const safeBranch = branchName.replace(/\//g, '-');
|
|
31
|
+
return resolve(projectRoot, '.aidevos', 'runs', safeBranch);
|
|
32
|
+
}
|
|
33
|
+
/** Branch-level requirement.json path */
|
|
34
|
+
export function requirementPath(projectRoot, branchName) {
|
|
35
|
+
return resolve(branchDir(projectRoot, branchName), 'requirement.json');
|
|
36
|
+
}
|
|
37
|
+
/** Project-level index.json path */
|
|
38
|
+
export function indexPath(projectRoot = process.cwd()) {
|
|
39
|
+
return resolve(projectRoot, '.aidevos', 'index.json');
|
|
40
|
+
}
|
|
41
|
+
/** Config file path */
|
|
42
|
+
export function configPath(projectRoot = process.cwd()) {
|
|
43
|
+
return resolve(projectRoot, '.aidevos', 'config.json');
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,2BAA2B;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3D,+BAA+B;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEjE,0BAA0B;AAC1B,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAExD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAE9D,0BAA0B;AAC1B,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAEtF,2CAA2C;AAC3C,MAAM,UAAU,UAAU,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IAC5D,OAAO,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,OAAO,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IACzD,OAAO,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,MAAM,CACpB,WAAmB,EACnB,UAAkB,EAClB,OAAe;IAEf,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,SAAS,CACvB,WAAmB,EACnB,UAAkB;IAElB,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,UAAkB;IAElB,OAAO,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACzE,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,SAAS,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IAC3D,OAAO,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,UAAU,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IAC5D,OAAO,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { RuleRegistryEntry } from '../schemas/run-json.js';
|
|
2
|
+
export declare function registryPath(projectRoot: string): string;
|
|
3
|
+
export declare function rulesViewDir(projectRoot: string): string;
|
|
4
|
+
export declare function fingerprint(content: string): string;
|
|
5
|
+
export declare function loadRegistry(projectRoot: string): RuleRegistryEntry[];
|
|
6
|
+
export declare function saveRegistry(projectRoot: string, entries: RuleRegistryEntry[]): void;
|
|
7
|
+
export declare function nextRuleId(entries: RuleRegistryEntry[]): string;
|
|
8
|
+
/**
|
|
9
|
+
* Add a rule to the registry. Returns the entry if added, or the existing entry if duplicate.
|
|
10
|
+
*/
|
|
11
|
+
export declare function addRule(projectRoot: string, opts: {
|
|
12
|
+
content: string;
|
|
13
|
+
category: string;
|
|
14
|
+
branch: string;
|
|
15
|
+
deviation: string | null;
|
|
16
|
+
author: string;
|
|
17
|
+
status?: RuleRegistryEntry['status'];
|
|
18
|
+
}): {
|
|
19
|
+
entry: RuleRegistryEntry;
|
|
20
|
+
isDuplicate: boolean;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Rebuild all .aidevos/rules/*.md from rules.json.
|
|
24
|
+
* Returns the number of categories written.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildRuleViews(projectRoot: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* Merge two registries (union by fingerprint). Used after git merge conflicts.
|
|
29
|
+
* Returns merged entries and count of new entries added.
|
|
30
|
+
*/
|
|
31
|
+
export declare function mergeRegistries(base: RuleRegistryEntry[], incoming: RuleRegistryEntry[]): {
|
|
32
|
+
merged: RuleRegistryEntry[];
|
|
33
|
+
added: number;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Find potential duplicates by checking keyword overlap.
|
|
37
|
+
* Returns pairs of entries that might be duplicates or conflicts.
|
|
38
|
+
*/
|
|
39
|
+
export declare function findSimilarRules(entries: RuleRegistryEntry[]): {
|
|
40
|
+
a: RuleRegistryEntry;
|
|
41
|
+
b: RuleRegistryEntry;
|
|
42
|
+
similarity: number;
|
|
43
|
+
}[];
|
|
44
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/utils/rules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAKhE,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAYD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAID,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASrE;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAEpF;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAS/D;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;CACtC,GACA;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CA2BpD;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA0D1D;AAoBD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,iBAAiB,EAAE,EACzB,QAAQ,EAAE,iBAAiB,EAAE,GAC5B;IAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgBhD;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,EAAE,GAC3B;IAAE,CAAC,EAAE,iBAAiB,CAAC;IAAC,CAAC,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,CAsCtE"}
|