@backendkit-labs/curator-codex-agent 0.2.0 → 1.0.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/dist/analyzer.d.ts +1 -17
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +80 -163
- package/dist/analyzer.js.map +1 -1
- package/dist/audit.d.ts +27 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +43 -0
- package/dist/audit.js.map +1 -0
- package/dist/checksum.d.ts +0 -22
- package/dist/checksum.d.ts.map +1 -1
- package/dist/checksum.js +14 -103
- package/dist/checksum.js.map +1 -1
- package/dist/documentation-curator.d.ts +1 -1
- package/dist/documentation-curator.d.ts.map +1 -1
- package/dist/documentation-curator.js +79 -95
- package/dist/documentation-curator.js.map +1 -1
- package/dist/index.d.ts +19 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -22
- package/dist/index.js.map +1 -1
- package/dist/knowledge/embedder-worker.d.ts +2 -0
- package/dist/knowledge/embedder-worker.d.ts.map +1 -0
- package/dist/knowledge/embedder-worker.js +55 -0
- package/dist/knowledge/embedder-worker.js.map +1 -0
- package/dist/knowledge/engine.d.ts +10 -56
- package/dist/knowledge/engine.d.ts.map +1 -1
- package/dist/knowledge/engine.js +42 -153
- package/dist/knowledge/engine.js.map +1 -1
- package/dist/knowledge/rag-provider.d.ts +14 -56
- package/dist/knowledge/rag-provider.d.ts.map +1 -1
- package/dist/knowledge/rag-provider.js +63 -154
- package/dist/knowledge/rag-provider.js.map +1 -1
- package/dist/knowledge/synthesis.d.ts +0 -10
- package/dist/knowledge/synthesis.d.ts.map +1 -1
- package/dist/knowledge/synthesis.js +32 -77
- package/dist/knowledge/synthesis.js.map +1 -1
- package/dist/knowledge/transformers-embedder.d.ts +61 -0
- package/dist/knowledge/transformers-embedder.d.ts.map +1 -0
- package/dist/knowledge/transformers-embedder.js +222 -0
- package/dist/knowledge/transformers-embedder.js.map +1 -0
- package/dist/pdf-reader.d.ts +11 -0
- package/dist/pdf-reader.d.ts.map +1 -0
- package/dist/pdf-reader.js +21 -0
- package/dist/pdf-reader.js.map +1 -0
- package/dist/project.d.ts +28 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +88 -0
- package/dist/project.js.map +1 -0
- package/dist/providers/anthropic-adapter.d.ts +2 -2
- package/dist/providers/anthropic-adapter.d.ts.map +1 -1
- package/dist/providers/anthropic-adapter.js +7 -13
- package/dist/providers/anthropic-adapter.js.map +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +13 -20
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai-adapter.d.ts +2 -2
- package/dist/providers/openai-adapter.d.ts.map +1 -1
- package/dist/providers/openai-adapter.js +7 -13
- package/dist/providers/openai-adapter.js.map +1 -1
- package/dist/providers/types.d.ts +8 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/dist/vault-dedup.d.ts +35 -0
- package/dist/vault-dedup.d.ts.map +1 -0
- package/dist/vault-dedup.js +130 -0
- package/dist/vault-dedup.js.map +1 -0
- package/package.json +43 -56
- package/AGENT.md +0 -187
- package/README.md +0 -475
- package/dist/api/config.d.ts +0 -57
- package/dist/api/config.d.ts.map +0 -1
- package/dist/api/config.js +0 -183
- package/dist/api/config.js.map +0 -1
- package/dist/api/http-server.d.ts +0 -24
- package/dist/api/http-server.d.ts.map +0 -1
- package/dist/api/http-server.js +0 -108
- package/dist/api/http-server.js.map +0 -1
- package/dist/api/routes.d.ts +0 -8
- package/dist/api/routes.d.ts.map +0 -1
- package/dist/api/routes.js +0 -382
- package/dist/api/routes.js.map +0 -1
- package/dist/api/security.d.ts +0 -107
- package/dist/api/security.d.ts.map +0 -1
- package/dist/api/security.js +0 -200
- package/dist/api/security.js.map +0 -1
- package/dist/http-server-main.d.ts +0 -28
- package/dist/http-server-main.d.ts.map +0 -1
- package/dist/http-server-main.js +0 -69
- package/dist/http-server-main.js.map +0 -1
- package/dist/server.d.ts +0 -33
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -640
- package/dist/server.js.map +0 -1
- package/dist/watcher.d.ts +0 -26
- package/dist/watcher.d.ts.map +0 -1
- package/dist/watcher.js +0 -168
- package/dist/watcher.js.map +0 -1
package/dist/watcher.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* curator-codex-watcher — autonomous code analysis service
|
|
4
|
-
*
|
|
5
|
-
* Analyzes source code files recursively, extracts knowledge, and curates into vault.
|
|
6
|
-
*
|
|
7
|
-
* Required env vars:
|
|
8
|
-
* CURATOR_API_KEY — DeepSeek / OpenAI-compatible API key
|
|
9
|
-
* CURATOR_OUTPUT_PATH — absolute path to the shared vault (where notes are written)
|
|
10
|
-
*
|
|
11
|
-
* Optional:
|
|
12
|
-
* CURATOR_INPUT_PATH — path to code to analyze (if set: process once; if not: watch vault/incoming/)
|
|
13
|
-
* CURATOR_MODEL — LLM model (default: deepseek-reasoner)
|
|
14
|
-
* CURATOR_BASE_URL — LLM base URL
|
|
15
|
-
* CURATOR_POLL_MS — polling interval in ms (default: 30 000)
|
|
16
|
-
*
|
|
17
|
-
* Modes:
|
|
18
|
-
* Mode 1 (Watcher): no CURATOR_INPUT_PATH → watch vault/incoming/ for new files
|
|
19
|
-
* Mode 2 (Direct): CURATOR_INPUT_PATH set → process code once with progress bar
|
|
20
|
-
*
|
|
21
|
-
* Run:
|
|
22
|
-
* # Mode 2: Direct code analysis
|
|
23
|
-
* CURATOR_INPUT_PATH=/project CURATOR_OUTPUT_PATH=/vault CURATOR_API_KEY=sk-... node dist/watcher.js
|
|
24
|
-
*/
|
|
25
|
-
export {};
|
|
26
|
-
//# sourceMappingURL=watcher.d.ts.map
|
package/dist/watcher.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|
package/dist/watcher.js
DELETED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
/**
|
|
4
|
-
* curator-codex-watcher — autonomous code analysis service
|
|
5
|
-
*
|
|
6
|
-
* Analyzes source code files recursively, extracts knowledge, and curates into vault.
|
|
7
|
-
*
|
|
8
|
-
* Required env vars:
|
|
9
|
-
* CURATOR_API_KEY — DeepSeek / OpenAI-compatible API key
|
|
10
|
-
* CURATOR_OUTPUT_PATH — absolute path to the shared vault (where notes are written)
|
|
11
|
-
*
|
|
12
|
-
* Optional:
|
|
13
|
-
* CURATOR_INPUT_PATH — path to code to analyze (if set: process once; if not: watch vault/incoming/)
|
|
14
|
-
* CURATOR_MODEL — LLM model (default: deepseek-reasoner)
|
|
15
|
-
* CURATOR_BASE_URL — LLM base URL
|
|
16
|
-
* CURATOR_POLL_MS — polling interval in ms (default: 30 000)
|
|
17
|
-
*
|
|
18
|
-
* Modes:
|
|
19
|
-
* Mode 1 (Watcher): no CURATOR_INPUT_PATH → watch vault/incoming/ for new files
|
|
20
|
-
* Mode 2 (Direct): CURATOR_INPUT_PATH set → process code once with progress bar
|
|
21
|
-
*
|
|
22
|
-
* Run:
|
|
23
|
-
* # Mode 2: Direct code analysis
|
|
24
|
-
* CURATOR_INPUT_PATH=/project CURATOR_OUTPUT_PATH=/vault CURATOR_API_KEY=sk-... node dist/watcher.js
|
|
25
|
-
*/
|
|
26
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
27
|
-
if (k2 === undefined) k2 = k;
|
|
28
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
29
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
30
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
31
|
-
}
|
|
32
|
-
Object.defineProperty(o, k2, desc);
|
|
33
|
-
}) : (function(o, m, k, k2) {
|
|
34
|
-
if (k2 === undefined) k2 = k;
|
|
35
|
-
o[k2] = m[k];
|
|
36
|
-
}));
|
|
37
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
38
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
39
|
-
}) : function(o, v) {
|
|
40
|
-
o["default"] = v;
|
|
41
|
-
});
|
|
42
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
43
|
-
var ownKeys = function(o) {
|
|
44
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
45
|
-
var ar = [];
|
|
46
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
47
|
-
return ar;
|
|
48
|
-
};
|
|
49
|
-
return ownKeys(o);
|
|
50
|
-
};
|
|
51
|
-
return function (mod) {
|
|
52
|
-
if (mod && mod.__esModule) return mod;
|
|
53
|
-
var result = {};
|
|
54
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
55
|
-
__setModuleDefault(result, mod);
|
|
56
|
-
return result;
|
|
57
|
-
};
|
|
58
|
-
})();
|
|
59
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
60
|
-
const fsSync = __importStar(require("node:fs"));
|
|
61
|
-
const analyzer_js_1 = require("./analyzer.js");
|
|
62
|
-
const index_js_1 = require("./providers/index.js");
|
|
63
|
-
const checksum_js_1 = require("./checksum.js");
|
|
64
|
-
const VAULT_PATH = process.env.CURATOR_OUTPUT_PATH ?? '';
|
|
65
|
-
const INPUT_PATH = process.env.CURATOR_INPUT_PATH ?? null;
|
|
66
|
-
const POLL_MS = parseInt(process.env.CURATOR_POLL_MS ?? '30000');
|
|
67
|
-
function validate() {
|
|
68
|
-
if (!process.env.CURATOR_API_KEY) {
|
|
69
|
-
console.error('✗ CURATOR_API_KEY is required');
|
|
70
|
-
process.exit(1);
|
|
71
|
-
}
|
|
72
|
-
if (!VAULT_PATH) {
|
|
73
|
-
console.error('✗ CURATOR_OUTPUT_PATH is required');
|
|
74
|
-
process.exit(1);
|
|
75
|
-
}
|
|
76
|
-
if (INPUT_PATH) {
|
|
77
|
-
try {
|
|
78
|
-
fsSync.accessSync(INPUT_PATH, fsSync.constants.R_OK);
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
console.error(`✗ CURATOR_INPUT_PATH not readable: ${INPUT_PATH}`);
|
|
82
|
-
process.exit(1);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
function makeAnalyzer() {
|
|
87
|
-
return new analyzer_js_1.CodeAnalyzer({ provider: (0, index_js_1.createProvider)(), vaultPath: VAULT_PATH });
|
|
88
|
-
}
|
|
89
|
-
function log(msg) {
|
|
90
|
-
console.log(`[codex-watcher] ${new Date().toISOString().slice(11, 19)} ${msg}`);
|
|
91
|
-
}
|
|
92
|
-
function buildProgressBar(current, total, width = 40) {
|
|
93
|
-
const percent = Math.round((current / total) * 100);
|
|
94
|
-
const filled = Math.round((width * current) / total);
|
|
95
|
-
const bar = '█'.repeat(filled) + '░'.repeat(width - filled);
|
|
96
|
-
return `[${bar}] ${percent}%`;
|
|
97
|
-
}
|
|
98
|
-
async function processInputDirectory() {
|
|
99
|
-
if (!INPUT_PATH)
|
|
100
|
-
return;
|
|
101
|
-
let files;
|
|
102
|
-
try {
|
|
103
|
-
files = await (0, checksum_js_1.findAllFiles)(INPUT_PATH);
|
|
104
|
-
files.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
107
|
-
log(`✗ Failed to read INPUT_PATH: ${err.message}`);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
if (files.length === 0) {
|
|
111
|
-
log(`ℹ No code files found in ${INPUT_PATH}`);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
let manifest = await (0, checksum_js_1.loadManifest)(INPUT_PATH);
|
|
115
|
-
if (!manifest) {
|
|
116
|
-
manifest = (0, checksum_js_1.createManifest)(INPUT_PATH, VAULT_PATH);
|
|
117
|
-
log(`\n💡 No manifest found. Will analyze ALL ${files.length} files to build initial index.\n`);
|
|
118
|
-
}
|
|
119
|
-
console.log(`\n🔍 Analyzing ${files.length} code files...\n`);
|
|
120
|
-
let succeeded = 0;
|
|
121
|
-
let failed = 0;
|
|
122
|
-
let skipped = 0;
|
|
123
|
-
for (let i = 0; i < files.length; i++) {
|
|
124
|
-
const { fullPath: filePath, relativePath } = files[i];
|
|
125
|
-
const counter = `[${i + 1}/${files.length}]`;
|
|
126
|
-
const progressBar = buildProgressBar(i + 1, files.length);
|
|
127
|
-
try {
|
|
128
|
-
const changed = await (0, checksum_js_1.hasFileChanged)(filePath, relativePath, manifest);
|
|
129
|
-
if (!changed) {
|
|
130
|
-
console.log(` ${counter} ${progressBar} ${relativePath}... ⊘ (unchanged)`);
|
|
131
|
-
await (0, checksum_js_1.updateManifestEntry)(manifest, filePath, relativePath, 'skipped');
|
|
132
|
-
skipped++;
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
process.stdout.write(` ${counter} ${progressBar} ${relativePath}... `);
|
|
136
|
-
const analyzer = makeAnalyzer();
|
|
137
|
-
await analyzer.analyzeFile(filePath, relativePath, files);
|
|
138
|
-
succeeded++;
|
|
139
|
-
await (0, checksum_js_1.updateManifestEntry)(manifest, filePath, relativePath, 'success');
|
|
140
|
-
console.log('✓');
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
catch (err) {
|
|
144
|
-
console.log(`✗ ${err.message}`);
|
|
145
|
-
failed++;
|
|
146
|
-
await (0, checksum_js_1.updateManifestEntry)(manifest, filePath, relativePath, 'failed');
|
|
147
|
-
}
|
|
148
|
-
console.log('');
|
|
149
|
-
}
|
|
150
|
-
await (0, checksum_js_1.saveManifest)(INPUT_PATH, manifest);
|
|
151
|
-
console.log((0, checksum_js_1.generateReport)(manifest));
|
|
152
|
-
}
|
|
153
|
-
async function main() {
|
|
154
|
-
validate();
|
|
155
|
-
log(`Vault: ${VAULT_PATH}`);
|
|
156
|
-
log(`Mode: ${INPUT_PATH ? 'Process INPUT_PATH once' : 'Watch vault/incoming/'}`);
|
|
157
|
-
if (INPUT_PATH)
|
|
158
|
-
log(`Input: ${INPUT_PATH}`);
|
|
159
|
-
log(`Provider: ${process.env.CURATOR_PROVIDER ?? 'deepseek'}`);
|
|
160
|
-
log(`Model: ${process.env.CURATOR_MODEL ?? 'deepseek-reasoner'}`);
|
|
161
|
-
await processInputDirectory();
|
|
162
|
-
process.exit(0);
|
|
163
|
-
}
|
|
164
|
-
main().catch(err => {
|
|
165
|
-
console.error(`[codex-watcher] Fatal: ${err.message}`);
|
|
166
|
-
process.exit(1);
|
|
167
|
-
});
|
|
168
|
-
//# sourceMappingURL=watcher.js.map
|
package/dist/watcher.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}
|