@backendkit-labs/curator-codex-agent 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.
- package/AGENT.md +187 -0
- package/README.md +475 -0
- package/dist/analyzer.d.ts +44 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +381 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/api/config.d.ts +57 -0
- package/dist/api/config.d.ts.map +1 -0
- package/dist/api/config.js +183 -0
- package/dist/api/config.js.map +1 -0
- package/dist/api/http-server.d.ts +24 -0
- package/dist/api/http-server.d.ts.map +1 -0
- package/dist/api/http-server.js +108 -0
- package/dist/api/http-server.js.map +1 -0
- package/dist/api/routes.d.ts +8 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +382 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/security.d.ts +107 -0
- package/dist/api/security.d.ts.map +1 -0
- package/dist/api/security.js +200 -0
- package/dist/api/security.js.map +1 -0
- package/dist/checksum.d.ts +56 -0
- package/dist/checksum.d.ts.map +1 -0
- package/dist/checksum.js +186 -0
- package/dist/checksum.js.map +1 -0
- package/dist/documentation-curator.d.ts +18 -0
- package/dist/documentation-curator.d.ts.map +1 -0
- package/dist/documentation-curator.js +231 -0
- package/dist/documentation-curator.js.map +1 -0
- package/dist/http-server-main.d.ts +28 -0
- package/dist/http-server-main.d.ts.map +1 -0
- package/dist/http-server-main.js +69 -0
- package/dist/http-server-main.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/engine.d.ts +90 -0
- package/dist/knowledge/engine.d.ts.map +1 -0
- package/dist/knowledge/engine.js +181 -0
- package/dist/knowledge/engine.js.map +1 -0
- package/dist/knowledge/rag-provider.d.ts +87 -0
- package/dist/knowledge/rag-provider.d.ts.map +1 -0
- package/dist/knowledge/rag-provider.js +189 -0
- package/dist/knowledge/rag-provider.js.map +1 -0
- package/dist/knowledge/synthesis.d.ts +27 -0
- package/dist/knowledge/synthesis.d.ts.map +1 -0
- package/dist/knowledge/synthesis.js +142 -0
- package/dist/knowledge/synthesis.js.map +1 -0
- package/dist/providers/anthropic-adapter.d.ts +14 -0
- package/dist/providers/anthropic-adapter.d.ts.map +1 -0
- package/dist/providers/anthropic-adapter.js +29 -0
- package/dist/providers/anthropic-adapter.js.map +1 -0
- package/dist/providers/index.d.ts +14 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +29 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-adapter.d.ts +16 -0
- package/dist/providers/openai-adapter.d.ts.map +1 -0
- package/dist/providers/openai-adapter.js +37 -0
- package/dist/providers/openai-adapter.js.map +1 -0
- package/dist/providers/types.d.ts +4 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +3 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server.d.ts +33 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +640 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/watcher.d.ts +26 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +168 -0
- package/dist/watcher.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Security middleware for Curator-Codex HTTP API
|
|
4
|
+
* Handles authentication, rate limiting, and input validation
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.CuratorFileSchema = exports.KnowledgeReindexSchema = exports.KnowledgeSearchWithVaultSchema = exports.KnowledgeSearchSchema = exports.CuratorProcessSchema = exports.CuratorConfigSchema = void 0;
|
|
44
|
+
exports.createAuthMiddleware = createAuthMiddleware;
|
|
45
|
+
exports.createRateLimiter = createRateLimiter;
|
|
46
|
+
exports.validateBody = validateBody;
|
|
47
|
+
exports.createRequestLogger = createRequestLogger;
|
|
48
|
+
exports.errorHandler = errorHandler;
|
|
49
|
+
exports.createRequestContext = createRequestContext;
|
|
50
|
+
const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
|
|
51
|
+
const zod_1 = require("zod");
|
|
52
|
+
const crypto = __importStar(require("node:crypto"));
|
|
53
|
+
/**
|
|
54
|
+
* Bearer token authentication middleware
|
|
55
|
+
* Validates API key from Authorization header
|
|
56
|
+
*/
|
|
57
|
+
function createAuthMiddleware(apiKeys = new Map()) {
|
|
58
|
+
return (req, res, next) => {
|
|
59
|
+
const authHeader = req.headers.authorization;
|
|
60
|
+
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
61
|
+
// No auth required for health/status endpoints
|
|
62
|
+
if (req.path === '/health' || req.path === '/status' || req.path === '/') {
|
|
63
|
+
return next();
|
|
64
|
+
}
|
|
65
|
+
return res.status(401).json({
|
|
66
|
+
error: 'Unauthorized',
|
|
67
|
+
message: 'Missing or invalid Authorization header',
|
|
68
|
+
expected: 'Authorization: Bearer sk-...',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const token = authHeader.slice(7); // Remove "Bearer "
|
|
72
|
+
// Validate token format
|
|
73
|
+
if (!token.startsWith('sk-') || token.length < 20) {
|
|
74
|
+
return res.status(401).json({
|
|
75
|
+
error: 'Unauthorized',
|
|
76
|
+
message: 'Invalid API key format',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// Check token (in production, verify against DB/KMS)
|
|
80
|
+
const keyInfo = apiKeys.get(token) || { rateLimit: 100 };
|
|
81
|
+
req.user = {
|
|
82
|
+
id: hashToken(token),
|
|
83
|
+
key: token.slice(0, 10) + '...',
|
|
84
|
+
rateLimit: keyInfo.rateLimit,
|
|
85
|
+
};
|
|
86
|
+
next();
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function hashToken(token) {
|
|
90
|
+
return crypto.createHash('sha256').update(token).digest('hex').slice(0, 12);
|
|
91
|
+
}
|
|
92
|
+
// ── Rate Limiting ──────────────────────────────────────────────────────────
|
|
93
|
+
function createRateLimiter(windowMs = 15 * 60 * 1000, max = 100) {
|
|
94
|
+
return (0, express_rate_limit_1.default)({
|
|
95
|
+
windowMs,
|
|
96
|
+
max,
|
|
97
|
+
message: {
|
|
98
|
+
error: 'Too many requests',
|
|
99
|
+
message: 'Rate limit exceeded. Please try again later.',
|
|
100
|
+
retryAfter: Math.ceil(windowMs / 1000),
|
|
101
|
+
},
|
|
102
|
+
standardHeaders: true, // Return rate limit info in headers
|
|
103
|
+
skip: (req) => {
|
|
104
|
+
// Skip rate limiting for health checks
|
|
105
|
+
return req.path === '/health';
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// ── Input Validation ───────────────────────────────────────────────────────
|
|
110
|
+
exports.CuratorConfigSchema = zod_1.z.object({
|
|
111
|
+
inputPath: zod_1.z.string().min(1).describe('Input directory path'),
|
|
112
|
+
outputPath: zod_1.z.string().min(1).describe('Output vault path'),
|
|
113
|
+
});
|
|
114
|
+
exports.CuratorProcessSchema = zod_1.z.object({
|
|
115
|
+
inputPath: zod_1.z.string().optional().describe('Optional input override'),
|
|
116
|
+
outputPath: zod_1.z.string().optional().describe('Optional output override'),
|
|
117
|
+
});
|
|
118
|
+
exports.KnowledgeSearchSchema = zod_1.z.object({
|
|
119
|
+
query: zod_1.z.string().min(3).max(500).describe('Search query'),
|
|
120
|
+
topK: zod_1.z.number().int().min(1).max(20).optional().describe('Top K results'),
|
|
121
|
+
autoSynthesize: zod_1.z.boolean().optional().describe('Auto-generate synthesis'),
|
|
122
|
+
});
|
|
123
|
+
exports.KnowledgeSearchWithVaultSchema = zod_1.z.object({
|
|
124
|
+
vaultPath: zod_1.z.string().min(1).describe('Absolute path to vault directory'),
|
|
125
|
+
query: zod_1.z.string().min(3).max(500).describe('Search query'),
|
|
126
|
+
topK: zod_1.z.number().int().min(1).max(20).optional().default(5),
|
|
127
|
+
});
|
|
128
|
+
exports.KnowledgeReindexSchema = zod_1.z.object({
|
|
129
|
+
vaultPath: zod_1.z.string().min(1).describe('Absolute path to vault directory'),
|
|
130
|
+
});
|
|
131
|
+
exports.CuratorFileSchema = zod_1.z.object({
|
|
132
|
+
vaultPath: zod_1.z.string().min(1).describe('Absolute path to vault directory'),
|
|
133
|
+
fileName: zod_1.z.string().min(1).max(255).describe('Original file name'),
|
|
134
|
+
content: zod_1.z.string().min(1).describe('File content to curate'),
|
|
135
|
+
});
|
|
136
|
+
/**
|
|
137
|
+
* Validate request body against schema
|
|
138
|
+
*/
|
|
139
|
+
function validateBody(schema) {
|
|
140
|
+
return (req, res, next) => {
|
|
141
|
+
try {
|
|
142
|
+
const validated = schema.parse(req.body);
|
|
143
|
+
req.validatedBody = validated;
|
|
144
|
+
next();
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
if (err instanceof zod_1.z.ZodError) {
|
|
148
|
+
return res.status(400).json({
|
|
149
|
+
error: 'Validation failed',
|
|
150
|
+
details: err.errors.map(e => ({
|
|
151
|
+
field: e.path.join('.'),
|
|
152
|
+
message: e.message,
|
|
153
|
+
code: e.code,
|
|
154
|
+
})),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
res.status(400).json({
|
|
158
|
+
error: 'Invalid request',
|
|
159
|
+
message: err.message,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// ── Request Logging ────────────────────────────────────────────────────────
|
|
165
|
+
function createRequestLogger() {
|
|
166
|
+
return (req, res, next) => {
|
|
167
|
+
const start = Date.now();
|
|
168
|
+
// Log request
|
|
169
|
+
const userId = req.user?.id || 'anonymous';
|
|
170
|
+
console.log(`[${new Date().toISOString()}] ${req.method} ${req.path} (${userId})`);
|
|
171
|
+
// Intercept response
|
|
172
|
+
const originalJson = res.json.bind(res);
|
|
173
|
+
res.json = function (body) {
|
|
174
|
+
const duration = Date.now() - start;
|
|
175
|
+
console.log(`[${new Date().toISOString()}] ${req.method} ${req.path} → ${res.statusCode} (${duration}ms)`);
|
|
176
|
+
return originalJson(body);
|
|
177
|
+
};
|
|
178
|
+
next();
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// ── Error Handler ──────────────────────────────────────────────────────────
|
|
182
|
+
function errorHandler(err, req, res, next) {
|
|
183
|
+
const status = err.status || 500;
|
|
184
|
+
const message = err.message || 'Internal server error';
|
|
185
|
+
console.error(`[ERROR] ${req.method} ${req.path} → ${status}`, { error: message, stack: err.stack });
|
|
186
|
+
res.status(status).json({
|
|
187
|
+
error: status >= 500 ? 'Server error' : 'Client error',
|
|
188
|
+
message,
|
|
189
|
+
...(process.env.NODE_ENV === 'development' && { stack: err.stack }),
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function createRequestContext(req) {
|
|
193
|
+
return {
|
|
194
|
+
userId: req.user?.id || 'anonymous',
|
|
195
|
+
requestId: crypto.randomUUID(),
|
|
196
|
+
startTime: Date.now(),
|
|
197
|
+
ip: (req.ip || req.socket.remoteAddress || 'unknown'),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/api/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface FileChecksum {
|
|
2
|
+
filename: string;
|
|
3
|
+
hash: string;
|
|
4
|
+
size: number;
|
|
5
|
+
modified: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CodexManifest {
|
|
8
|
+
version: '1.0';
|
|
9
|
+
created: string;
|
|
10
|
+
lastUpdated: string;
|
|
11
|
+
inputPath: string;
|
|
12
|
+
outputPath: string;
|
|
13
|
+
files: Record<string, {
|
|
14
|
+
relativePath: string;
|
|
15
|
+
hash: string;
|
|
16
|
+
size: number;
|
|
17
|
+
modified: string;
|
|
18
|
+
analyzedAt: string;
|
|
19
|
+
status: 'success' | 'failed' | 'skipped';
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Calculate SHA256 hash of a file
|
|
24
|
+
*/
|
|
25
|
+
export declare function calculateFileHash(filePath: string): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Load manifest from INPUT_PATH
|
|
28
|
+
*/
|
|
29
|
+
export declare function loadManifest(inputPath: string): Promise<CodexManifest | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Save manifest to INPUT_PATH
|
|
32
|
+
*/
|
|
33
|
+
export declare function saveManifest(inputPath: string, manifest: CodexManifest): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if file changed since last analysis
|
|
36
|
+
*/
|
|
37
|
+
export declare function hasFileChanged(filePath: string, relativePath: string, manifest: CodexManifest | null): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Create initial manifest
|
|
40
|
+
*/
|
|
41
|
+
export declare function createManifest(inputPath: string, outputPath: string): CodexManifest;
|
|
42
|
+
/**
|
|
43
|
+
* Update manifest with file analysis result
|
|
44
|
+
*/
|
|
45
|
+
export declare function updateManifestEntry(manifest: CodexManifest, filePath: string, relativePath: string, status: 'success' | 'failed' | 'skipped'): Promise<void>;
|
|
46
|
+
export declare function isCodeFile(filePath: string): boolean;
|
|
47
|
+
export declare function isDocFile(filePath: string): boolean;
|
|
48
|
+
export declare function findAllFiles(dirPath: string, relativePath?: string): Promise<Array<{
|
|
49
|
+
fullPath: string;
|
|
50
|
+
relativePath: string;
|
|
51
|
+
}>>;
|
|
52
|
+
/**
|
|
53
|
+
* Generate analysis report
|
|
54
|
+
*/
|
|
55
|
+
export declare function generateReport(manifest: CodexManifest): string;
|
|
56
|
+
//# sourceMappingURL=checksum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;KAC5C,CAAC,CAAC;CACN;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQnF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC/B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACnB,aAAa,CASf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GACzC,OAAO,CAAC,IAAI,CAAC,CAYf;AAWD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAsB,YAAY,CAC9B,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,MAAW,GAC1B,OAAO,CAAC,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAqC5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAkB9D"}
|
package/dist/checksum.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.calculateFileHash = calculateFileHash;
|
|
37
|
+
exports.loadManifest = loadManifest;
|
|
38
|
+
exports.saveManifest = saveManifest;
|
|
39
|
+
exports.hasFileChanged = hasFileChanged;
|
|
40
|
+
exports.createManifest = createManifest;
|
|
41
|
+
exports.updateManifestEntry = updateManifestEntry;
|
|
42
|
+
exports.isCodeFile = isCodeFile;
|
|
43
|
+
exports.isDocFile = isDocFile;
|
|
44
|
+
exports.findAllFiles = findAllFiles;
|
|
45
|
+
exports.generateReport = generateReport;
|
|
46
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
47
|
+
const crypto = __importStar(require("node:crypto"));
|
|
48
|
+
const path = __importStar(require("node:path"));
|
|
49
|
+
/**
|
|
50
|
+
* Calculate SHA256 hash of a file
|
|
51
|
+
*/
|
|
52
|
+
async function calculateFileHash(filePath) {
|
|
53
|
+
const content = await fs.readFile(filePath);
|
|
54
|
+
return crypto.createHash('sha256').update(content).digest('hex');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Load manifest from INPUT_PATH
|
|
58
|
+
*/
|
|
59
|
+
async function loadManifest(inputPath) {
|
|
60
|
+
const manifestPath = path.join(inputPath, '.codex-manifest.json');
|
|
61
|
+
try {
|
|
62
|
+
const content = await fs.readFile(manifestPath, 'utf-8');
|
|
63
|
+
return JSON.parse(content);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Save manifest to INPUT_PATH
|
|
71
|
+
*/
|
|
72
|
+
async function saveManifest(inputPath, manifest) {
|
|
73
|
+
const manifestPath = path.join(inputPath, '.codex-manifest.json');
|
|
74
|
+
manifest.lastUpdated = new Date().toISOString();
|
|
75
|
+
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if file changed since last analysis
|
|
79
|
+
*/
|
|
80
|
+
async function hasFileChanged(filePath, relativePath, manifest) {
|
|
81
|
+
if (!manifest)
|
|
82
|
+
return true;
|
|
83
|
+
const entry = manifest.files[relativePath];
|
|
84
|
+
if (!entry)
|
|
85
|
+
return true;
|
|
86
|
+
const currentHash = await calculateFileHash(filePath);
|
|
87
|
+
return currentHash !== entry.hash;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create initial manifest
|
|
91
|
+
*/
|
|
92
|
+
function createManifest(inputPath, outputPath) {
|
|
93
|
+
return {
|
|
94
|
+
version: '1.0',
|
|
95
|
+
created: new Date().toISOString(),
|
|
96
|
+
lastUpdated: new Date().toISOString(),
|
|
97
|
+
inputPath,
|
|
98
|
+
outputPath,
|
|
99
|
+
files: {},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Update manifest with file analysis result
|
|
104
|
+
*/
|
|
105
|
+
async function updateManifestEntry(manifest, filePath, relativePath, status) {
|
|
106
|
+
const stat = await fs.stat(filePath);
|
|
107
|
+
const hash = await calculateFileHash(filePath);
|
|
108
|
+
manifest.files[relativePath] = {
|
|
109
|
+
relativePath,
|
|
110
|
+
hash,
|
|
111
|
+
size: stat.size,
|
|
112
|
+
modified: new Date(stat.mtime).toISOString(),
|
|
113
|
+
analyzedAt: new Date().toISOString(),
|
|
114
|
+
status,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Recursively find all code and documentation files
|
|
119
|
+
*/
|
|
120
|
+
const CODE_EXTENSIONS = [
|
|
121
|
+
'.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.java', '.c', '.cpp', '.kt', '.swift',
|
|
122
|
+
];
|
|
123
|
+
const DOC_EXTENSIONS = ['.md', '.txt'];
|
|
124
|
+
function isCodeFile(filePath) {
|
|
125
|
+
return CODE_EXTENSIONS.some(ext => filePath.toLowerCase().endsWith(ext));
|
|
126
|
+
}
|
|
127
|
+
function isDocFile(filePath) {
|
|
128
|
+
return DOC_EXTENSIONS.some(ext => filePath.toLowerCase().endsWith(ext));
|
|
129
|
+
}
|
|
130
|
+
async function findAllFiles(dirPath, relativePath = '') {
|
|
131
|
+
const results = [];
|
|
132
|
+
try {
|
|
133
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
134
|
+
for (const entry of entries) {
|
|
135
|
+
if (entry.name.startsWith('.') ||
|
|
136
|
+
entry.name === 'node_modules' ||
|
|
137
|
+
entry.name === 'dist' ||
|
|
138
|
+
entry.name === 'build' ||
|
|
139
|
+
entry.name === '.git' ||
|
|
140
|
+
entry.name === '.venv' ||
|
|
141
|
+
entry.name === 'venv' ||
|
|
142
|
+
entry.name === '__pycache__') {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
146
|
+
const relPath = relativePath ? path.join(relativePath, entry.name) : entry.name;
|
|
147
|
+
if (entry.isDirectory()) {
|
|
148
|
+
const subResults = await findAllFiles(fullPath, relPath);
|
|
149
|
+
results.push(...subResults);
|
|
150
|
+
}
|
|
151
|
+
else if (entry.isFile()) {
|
|
152
|
+
const hasCodeExt = isCodeFile(entry.name);
|
|
153
|
+
const hasDocExt = isDocFile(entry.name);
|
|
154
|
+
if (hasCodeExt || hasDocExt) {
|
|
155
|
+
results.push({ fullPath, relativePath: relPath });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
console.error(`Error reading directory ${dirPath}: ${err.message}`);
|
|
162
|
+
}
|
|
163
|
+
return results;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Generate analysis report
|
|
167
|
+
*/
|
|
168
|
+
function generateReport(manifest) {
|
|
169
|
+
const entries = Object.values(manifest.files);
|
|
170
|
+
const succeeded = entries.filter(e => e.status === 'success').length;
|
|
171
|
+
const failed = entries.filter(e => e.status === 'failed').length;
|
|
172
|
+
const skipped = entries.filter(e => e.status === 'skipped').length;
|
|
173
|
+
return `
|
|
174
|
+
📊 Code Analysis Report
|
|
175
|
+
───────────────────────
|
|
176
|
+
Total Files: ${entries.length}
|
|
177
|
+
✓ Analyzed: ${succeeded}
|
|
178
|
+
✗ Failed: ${failed}
|
|
179
|
+
⊘ Skipped: ${skipped}
|
|
180
|
+
Processed: ${succeeded + failed} / ${entries.length}
|
|
181
|
+
Efficiency: ${skipped > 0 ? `${Math.round((skipped / entries.length) * 100)}% of files unchanged` : 'All files processed'}
|
|
182
|
+
|
|
183
|
+
Last Updated: ${new Date(manifest.lastUpdated).toLocaleString()}
|
|
184
|
+
`;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=checksum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.js","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CuratorLLMProvider } from './providers/types.js';
|
|
2
|
+
import type { CodeAnalysisResult } from './types.js';
|
|
3
|
+
export interface DocumentationCuratorOptions {
|
|
4
|
+
provider: CuratorLLMProvider;
|
|
5
|
+
vaultPath: string;
|
|
6
|
+
maxInputChars?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class DocumentationCurator {
|
|
9
|
+
private readonly provider;
|
|
10
|
+
private readonly vaultPath;
|
|
11
|
+
private readonly maxInputChars;
|
|
12
|
+
constructor(opts: DocumentationCuratorOptions);
|
|
13
|
+
curateText(text: string, source: string, areaHint?: string): Promise<CodeAnalysisResult>;
|
|
14
|
+
curateFile(filePath: string, areaHint?: string): Promise<CodeAnalysisResult>;
|
|
15
|
+
private callLLM;
|
|
16
|
+
private writeNote;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=documentation-curator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentation-curator.d.ts","sourceRoot":"","sources":["../src/documentation-curator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2GrD,MAAM,WAAW,2BAA2B;IACxC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,IAAI,EAAE,2BAA2B;IAMvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2CxF,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAmBpE,OAAO;YAyBP,SAAS;CAiB1B"}
|