@imricci/zaker 0.1.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/commands/align.d.ts +3 -0
- package/dist/commands/align.js +28 -0
- package/dist/commands/align.js.map +1 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.js +59 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/confirm.d.ts +3 -0
- package/dist/commands/confirm.js +22 -0
- package/dist/commands/confirm.js.map +1 -0
- package/dist/commands/dialog.d.ts +9 -0
- package/dist/commands/dialog.js +396 -0
- package/dist/commands/dialog.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.js +31 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/models.d.ts +9 -0
- package/dist/commands/models.js +65 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/plan.d.ts +3 -0
- package/dist/commands/plan.js +69 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/run.d.ts +40 -0
- package/dist/commands/run.js +310 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.js +39 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/tui.d.ts +14 -0
- package/dist/commands/tui.js +394 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/core/auditor.d.ts +13 -0
- package/dist/core/auditor.js +122 -0
- package/dist/core/auditor.js.map +1 -0
- package/dist/core/c3fi.d.ts +10 -0
- package/dist/core/c3fi.js +305 -0
- package/dist/core/c3fi.js.map +1 -0
- package/dist/core/challenge.d.ts +8 -0
- package/dist/core/challenge.js +29 -0
- package/dist/core/challenge.js.map +1 -0
- package/dist/core/checkpoint.d.ts +20 -0
- package/dist/core/checkpoint.js +192 -0
- package/dist/core/checkpoint.js.map +1 -0
- package/dist/core/execution-provider.d.ts +2 -0
- package/dist/core/execution-provider.js +125 -0
- package/dist/core/execution-provider.js.map +1 -0
- package/dist/core/executor.d.ts +16 -0
- package/dist/core/executor.js +68 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/memory.d.ts +11 -0
- package/dist/core/memory.js +105 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/planner.d.ts +146 -0
- package/dist/core/planner.js +152 -0
- package/dist/core/planner.js.map +1 -0
- package/dist/core/preflight.d.ts +6 -0
- package/dist/core/preflight.js +140 -0
- package/dist/core/preflight.js.map +1 -0
- package/dist/core/provider-onboarding.d.ts +12 -0
- package/dist/core/provider-onboarding.js +32 -0
- package/dist/core/provider-onboarding.js.map +1 -0
- package/dist/core/run-loop.d.ts +32 -0
- package/dist/core/run-loop.js +205 -0
- package/dist/core/run-loop.js.map +1 -0
- package/dist/core/scope.d.ts +3 -0
- package/dist/core/scope.js +75 -0
- package/dist/core/scope.js.map +1 -0
- package/dist/core/types.d.ts +288 -0
- package/dist/core/types.js +11 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/verdict-panel.d.ts +29 -0
- package/dist/core/verdict-panel.js +120 -0
- package/dist/core/verdict-panel.js.map +1 -0
- package/dist/core/verifier.d.ts +2 -0
- package/dist/core/verifier.js +47 -0
- package/dist/core/verifier.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/config.d.ts +36 -0
- package/dist/infra/config.js +397 -0
- package/dist/infra/config.js.map +1 -0
- package/dist/infra/git.d.ts +6 -0
- package/dist/infra/git.js +35 -0
- package/dist/infra/git.js.map +1 -0
- package/dist/infra/hashing.d.ts +1 -0
- package/dist/infra/hashing.js +8 -0
- package/dist/infra/hashing.js.map +1 -0
- package/dist/infra/intent.d.ts +30 -0
- package/dist/infra/intent.js +357 -0
- package/dist/infra/intent.js.map +1 -0
- package/dist/infra/memory.d.ts +10 -0
- package/dist/infra/memory.js +94 -0
- package/dist/infra/memory.js.map +1 -0
- package/dist/infra/model-catalog.d.ts +27 -0
- package/dist/infra/model-catalog.js +273 -0
- package/dist/infra/model-catalog.js.map +1 -0
- package/dist/infra/process.d.ts +12 -0
- package/dist/infra/process.js +32 -0
- package/dist/infra/process.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CONFIG_SCHEMA_VERSION = void 0;
|
|
7
|
+
exports.writeMoloConfig = writeMoloConfig;
|
|
8
|
+
exports.initMoloFiles = initMoloFiles;
|
|
9
|
+
exports.readConfig = readConfig;
|
|
10
|
+
exports.createLLMProvider = createLLMProvider;
|
|
11
|
+
const node_fs_1 = require("node:fs");
|
|
12
|
+
const promises_1 = require("node:fs/promises");
|
|
13
|
+
const node_path_1 = require("node:path");
|
|
14
|
+
const openai_1 = __importDefault(require("openai"));
|
|
15
|
+
const zod_1 = require("zod");
|
|
16
|
+
const auditor_1 = require("../core/auditor");
|
|
17
|
+
const planner_1 = require("../core/planner");
|
|
18
|
+
const memory_1 = require("./memory");
|
|
19
|
+
const types_1 = require("../core/types");
|
|
20
|
+
const intent_1 = require("./intent");
|
|
21
|
+
exports.CONFIG_SCHEMA_VERSION = "molo.config.v1";
|
|
22
|
+
const DEFAULT_RISK_PATH_FILE = ".molo/risk_paths.yaml";
|
|
23
|
+
const DEFAULT_RISK_PATHS = "risk_paths: []\n";
|
|
24
|
+
const DEFAULT_MEMORY_FILE = ".molo/memory.json";
|
|
25
|
+
const configSchema = zod_1.z.object({
|
|
26
|
+
schema_version: zod_1.z.literal(exports.CONFIG_SCHEMA_VERSION),
|
|
27
|
+
scope: zod_1.z.object({
|
|
28
|
+
allowed_paths: zod_1.z.array(zod_1.z.string().min(1)).min(1).default(["src/**"]),
|
|
29
|
+
forbidden_paths: zod_1.z.array(zod_1.z.string().min(1)).default([])
|
|
30
|
+
}),
|
|
31
|
+
model: zod_1.z.object({
|
|
32
|
+
provider: zod_1.z.enum(["mock", "http", "openai_codex_team"]).default("mock"),
|
|
33
|
+
endpoint: zod_1.z.string().optional(),
|
|
34
|
+
api_key_env: zod_1.z.string().optional(),
|
|
35
|
+
api_key: zod_1.z.string().optional(),
|
|
36
|
+
models_path: zod_1.z.string().optional(),
|
|
37
|
+
planner_model: zod_1.z.string().min(1).default("qwen3-coder-30b"),
|
|
38
|
+
auditor_model: zod_1.z.string().min(1).default("kimi-k2.5"),
|
|
39
|
+
timeout_ms: zod_1.z.number().int().positive().optional()
|
|
40
|
+
}),
|
|
41
|
+
risk: zod_1.z.object({
|
|
42
|
+
risk_paths_file: zod_1.z.string().min(1).default(DEFAULT_RISK_PATH_FILE)
|
|
43
|
+
}),
|
|
44
|
+
memory: zod_1.z.object({
|
|
45
|
+
memory_file: zod_1.z.string().min(1).default(DEFAULT_MEMORY_FILE),
|
|
46
|
+
max_items_per_category: zod_1.z.number().int().min(1).max(50).default(5)
|
|
47
|
+
}).default({
|
|
48
|
+
memory_file: DEFAULT_MEMORY_FILE,
|
|
49
|
+
max_items_per_category: 5
|
|
50
|
+
}),
|
|
51
|
+
execution: zod_1.z
|
|
52
|
+
.object({
|
|
53
|
+
provider: zod_1.z.enum(["local", "cheap_cloud", "ollama"]).default("local"),
|
|
54
|
+
model: zod_1.z.string().min(1).default("qwen3-coder-30b"),
|
|
55
|
+
ollama_host: zod_1.z.string().min(1).default("http://127.0.0.1:11434"),
|
|
56
|
+
max_attempts: zod_1.z.number().int().min(1).max(5).default(2)
|
|
57
|
+
})
|
|
58
|
+
.default({
|
|
59
|
+
provider: "local",
|
|
60
|
+
model: "qwen3-coder-30b",
|
|
61
|
+
ollama_host: "http://127.0.0.1:11434",
|
|
62
|
+
max_attempts: 2
|
|
63
|
+
})
|
|
64
|
+
});
|
|
65
|
+
const DEFAULT_CONFIG = {
|
|
66
|
+
schema_version: exports.CONFIG_SCHEMA_VERSION,
|
|
67
|
+
scope: {
|
|
68
|
+
allowed_paths: ["src/**"],
|
|
69
|
+
forbidden_paths: []
|
|
70
|
+
},
|
|
71
|
+
model: {
|
|
72
|
+
provider: "mock",
|
|
73
|
+
endpoint: "",
|
|
74
|
+
api_key_env: "MOLO_API_KEY",
|
|
75
|
+
api_key: "",
|
|
76
|
+
models_path: "/models",
|
|
77
|
+
planner_model: "qwen3-coder-30b",
|
|
78
|
+
auditor_model: "kimi-k2.5",
|
|
79
|
+
timeout_ms: 30000
|
|
80
|
+
},
|
|
81
|
+
risk: {
|
|
82
|
+
risk_paths_file: DEFAULT_RISK_PATH_FILE
|
|
83
|
+
},
|
|
84
|
+
memory: {
|
|
85
|
+
memory_file: DEFAULT_MEMORY_FILE,
|
|
86
|
+
max_items_per_category: 5
|
|
87
|
+
},
|
|
88
|
+
execution: {
|
|
89
|
+
provider: "local",
|
|
90
|
+
model: "qwen3-coder-30b",
|
|
91
|
+
ollama_host: "http://127.0.0.1:11434",
|
|
92
|
+
max_attempts: 2
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
function cloneDefaultConfig() {
|
|
96
|
+
return JSON.parse(JSON.stringify(DEFAULT_CONFIG));
|
|
97
|
+
}
|
|
98
|
+
async function fileExists(filePath) {
|
|
99
|
+
try {
|
|
100
|
+
await (0, promises_1.access)(filePath, node_fs_1.constants.F_OK);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function formatJson(value) {
|
|
108
|
+
return `${JSON.stringify(value, null, 2)}\n`;
|
|
109
|
+
}
|
|
110
|
+
function extractUserDescription(prompt) {
|
|
111
|
+
const match = prompt.match(/\[USER_DESCRIPTION\]([\s\S]*?)\[\/USER_DESCRIPTION\]/);
|
|
112
|
+
if (!match) {
|
|
113
|
+
return prompt.trim();
|
|
114
|
+
}
|
|
115
|
+
return match[1].trim();
|
|
116
|
+
}
|
|
117
|
+
async function writeConfig(configPath, config) {
|
|
118
|
+
await (0, promises_1.writeFile)(configPath, formatJson(config), "utf8");
|
|
119
|
+
}
|
|
120
|
+
async function writeMoloConfig(config, cwd = process.cwd()) {
|
|
121
|
+
const normalized = configSchema.parse(config);
|
|
122
|
+
const moloDir = (0, node_path_1.resolve)(cwd, ".molo");
|
|
123
|
+
const configPath = (0, node_path_1.resolve)(moloDir, "config.json");
|
|
124
|
+
await (0, promises_1.mkdir)(moloDir, { recursive: true });
|
|
125
|
+
await writeConfig(configPath, normalized);
|
|
126
|
+
}
|
|
127
|
+
async function initMoloFiles(cwd = process.cwd(), force = false) {
|
|
128
|
+
const moloDir = (0, node_path_1.resolve)(cwd, ".molo");
|
|
129
|
+
const configPath = (0, node_path_1.resolve)(moloDir, "config.json");
|
|
130
|
+
const riskPath = (0, node_path_1.resolve)(moloDir, "risk_paths.yaml");
|
|
131
|
+
const memoryPath = (0, node_path_1.resolve)(moloDir, "memory.json");
|
|
132
|
+
const result = { created: [], updated: [], skipped: [] };
|
|
133
|
+
await (0, promises_1.mkdir)(moloDir, { recursive: true });
|
|
134
|
+
const configExists = await fileExists(configPath);
|
|
135
|
+
if (!configExists || force) {
|
|
136
|
+
await writeConfig(configPath, cloneDefaultConfig());
|
|
137
|
+
if (configExists) {
|
|
138
|
+
result.updated.push(".molo/config.json");
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
result.created.push(".molo/config.json");
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
result.skipped.push(".molo/config.json");
|
|
146
|
+
}
|
|
147
|
+
const riskExists = await fileExists(riskPath);
|
|
148
|
+
if (!riskExists || force) {
|
|
149
|
+
await (0, promises_1.writeFile)(riskPath, DEFAULT_RISK_PATHS, { encoding: "utf8", mode: 0o444 });
|
|
150
|
+
if (riskExists) {
|
|
151
|
+
result.updated.push(".molo/risk_paths.yaml");
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
result.created.push(".molo/risk_paths.yaml");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
result.skipped.push(".molo/risk_paths.yaml");
|
|
159
|
+
}
|
|
160
|
+
const memoryExists = await fileExists(memoryPath);
|
|
161
|
+
if (!memoryExists || force) {
|
|
162
|
+
await (0, promises_1.writeFile)(memoryPath, formatJson((0, memory_1.createEmptyMemoryStore)()), "utf8");
|
|
163
|
+
if (memoryExists) {
|
|
164
|
+
result.updated.push(".molo/memory.json");
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
result.created.push(".molo/memory.json");
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
result.skipped.push(".molo/memory.json");
|
|
172
|
+
}
|
|
173
|
+
const intentResult = await (0, intent_1.ensureIntentArtifacts)({
|
|
174
|
+
allowed_paths: ["src/**"],
|
|
175
|
+
forbidden_paths: []
|
|
176
|
+
}, cwd, force);
|
|
177
|
+
result.created.push(...intentResult.created);
|
|
178
|
+
result.updated.push(...intentResult.updated);
|
|
179
|
+
result.skipped.push(...intentResult.skipped);
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
async function readConfig(cwd = process.cwd()) {
|
|
183
|
+
const configPath = (0, node_path_1.resolve)(cwd, ".molo/config.json");
|
|
184
|
+
const exists = await fileExists(configPath);
|
|
185
|
+
if (!exists) {
|
|
186
|
+
throw new Error("Missing .molo/config.json. Run `zaker init` first.");
|
|
187
|
+
}
|
|
188
|
+
const raw = await (0, promises_1.readFile)(configPath, "utf8");
|
|
189
|
+
return configSchema.parse(JSON.parse(raw));
|
|
190
|
+
}
|
|
191
|
+
class MockLLMProvider {
|
|
192
|
+
async plan(prompt) {
|
|
193
|
+
const goal = extractUserDescription(prompt) || prompt;
|
|
194
|
+
return (0, planner_1.validateSOP)({
|
|
195
|
+
schema_version: types_1.SOP_SCHEMA_VERSION,
|
|
196
|
+
goal,
|
|
197
|
+
scope: {
|
|
198
|
+
allowed_paths: ["src/**"],
|
|
199
|
+
forbidden_paths: []
|
|
200
|
+
},
|
|
201
|
+
patches: []
|
|
202
|
+
}, goal);
|
|
203
|
+
}
|
|
204
|
+
async audit(_checkpoint) {
|
|
205
|
+
return {
|
|
206
|
+
schema_version: types_1.AUDIT_SCHEMA_VERSION,
|
|
207
|
+
verdict: "PASS",
|
|
208
|
+
reason_code: "OK",
|
|
209
|
+
message: "Mock provider accepted checkpoint."
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function resolveApiToken(apiKey, apiKeyEnv, fallbackEnv) {
|
|
214
|
+
const explicit = apiKey.trim();
|
|
215
|
+
if (explicit) {
|
|
216
|
+
return explicit;
|
|
217
|
+
}
|
|
218
|
+
const configured = process.env[apiKeyEnv];
|
|
219
|
+
if (typeof configured === "string" && configured.trim()) {
|
|
220
|
+
return configured.trim();
|
|
221
|
+
}
|
|
222
|
+
if (fallbackEnv && fallbackEnv !== apiKeyEnv) {
|
|
223
|
+
const fallback = process.env[fallbackEnv];
|
|
224
|
+
if (typeof fallback === "string" && fallback.trim()) {
|
|
225
|
+
return fallback.trim();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return "";
|
|
229
|
+
}
|
|
230
|
+
function parseJsonPayload(text, context) {
|
|
231
|
+
const trimmed = text.trim();
|
|
232
|
+
if (!trimmed) {
|
|
233
|
+
throw new Error(`OpenAI provider returned empty ${context} payload.`);
|
|
234
|
+
}
|
|
235
|
+
const fenced = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
236
|
+
const candidate = fenced ? fenced[1].trim() : trimmed;
|
|
237
|
+
const parseCandidates = [candidate];
|
|
238
|
+
const objectStart = candidate.indexOf("{");
|
|
239
|
+
const objectEnd = candidate.lastIndexOf("}");
|
|
240
|
+
if (objectStart >= 0 && objectEnd > objectStart) {
|
|
241
|
+
parseCandidates.push(candidate.slice(objectStart, objectEnd + 1));
|
|
242
|
+
}
|
|
243
|
+
for (const source of parseCandidates) {
|
|
244
|
+
try {
|
|
245
|
+
return JSON.parse(source);
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// try next candidate
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
throw new Error(`OpenAI provider returned non-JSON ${context} payload.`);
|
|
252
|
+
}
|
|
253
|
+
class OpenAICodexTeamProvider {
|
|
254
|
+
plannerModel;
|
|
255
|
+
auditorModel;
|
|
256
|
+
timeoutMs;
|
|
257
|
+
client;
|
|
258
|
+
constructor(plannerModel, auditorModel, apiKeyEnv = "OPENAI_API_KEY", apiKey = "", timeoutMs = 30000, endpoint) {
|
|
259
|
+
this.plannerModel = plannerModel;
|
|
260
|
+
this.auditorModel = auditorModel;
|
|
261
|
+
this.timeoutMs = timeoutMs;
|
|
262
|
+
const token = resolveApiToken(apiKey, apiKeyEnv, "OPENAI_API_KEY");
|
|
263
|
+
if (!token) {
|
|
264
|
+
throw new Error(`OpenAI provider selected but API key missing. Set model.api_key or env ${apiKeyEnv}.`);
|
|
265
|
+
}
|
|
266
|
+
this.client = new openai_1.default({
|
|
267
|
+
apiKey: token,
|
|
268
|
+
timeout: this.timeoutMs,
|
|
269
|
+
baseURL: endpoint?.trim() || undefined
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
async requestJson(model, systemPrompt, userPrompt) {
|
|
273
|
+
try {
|
|
274
|
+
const completion = await this.client.chat.completions.create({
|
|
275
|
+
model,
|
|
276
|
+
messages: [
|
|
277
|
+
{ role: "system", content: systemPrompt },
|
|
278
|
+
{ role: "user", content: userPrompt }
|
|
279
|
+
],
|
|
280
|
+
response_format: { type: "json_object" }
|
|
281
|
+
});
|
|
282
|
+
const text = completion.choices[0]?.message?.content;
|
|
283
|
+
if (typeof text !== "string") {
|
|
284
|
+
throw new Error("missing response content");
|
|
285
|
+
}
|
|
286
|
+
return parseJsonPayload(text, "completion");
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
290
|
+
throw new Error(`OpenAI provider request failed: ${message}`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async plan(prompt) {
|
|
294
|
+
const raw = await this.requestJson(this.plannerModel, [
|
|
295
|
+
"You are MOLO planner.",
|
|
296
|
+
"Return JSON only.",
|
|
297
|
+
"Output must follow molo.sop.v1 with fields:",
|
|
298
|
+
"schema_version,sop_id,goal,scope,verification,limits,skills,tasks,patches."
|
|
299
|
+
].join(" "), prompt);
|
|
300
|
+
if (raw && typeof raw === "object" && "sop" in raw) {
|
|
301
|
+
return (0, planner_1.validateSOP)(raw.sop, prompt);
|
|
302
|
+
}
|
|
303
|
+
return (0, planner_1.validateSOP)(raw, prompt);
|
|
304
|
+
}
|
|
305
|
+
async audit(checkpoint) {
|
|
306
|
+
const raw = await this.requestJson(this.auditorModel, [
|
|
307
|
+
"You are MOLO auditor.",
|
|
308
|
+
"Return JSON only.",
|
|
309
|
+
"Output must follow molo.audit.v1 with fields:",
|
|
310
|
+
"schema_version,verdict,reason_code,message,challenge(optional)."
|
|
311
|
+
].join(" "), JSON.stringify({ checkpoint }, null, 2));
|
|
312
|
+
if (raw && typeof raw === "object" && "audit" in raw) {
|
|
313
|
+
return (0, auditor_1.normalizeAuditResult)(raw.audit);
|
|
314
|
+
}
|
|
315
|
+
return (0, auditor_1.normalizeAuditResult)(raw);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
class HttpLLMProvider {
|
|
319
|
+
endpoint;
|
|
320
|
+
plannerModel;
|
|
321
|
+
auditorModel;
|
|
322
|
+
apiKeyEnv;
|
|
323
|
+
apiKey;
|
|
324
|
+
timeoutMs;
|
|
325
|
+
constructor(endpoint, plannerModel, auditorModel, apiKeyEnv = "MOLO_API_KEY", apiKey = "", timeoutMs = 30000) {
|
|
326
|
+
this.endpoint = endpoint;
|
|
327
|
+
this.plannerModel = plannerModel;
|
|
328
|
+
this.auditorModel = auditorModel;
|
|
329
|
+
this.apiKeyEnv = apiKeyEnv;
|
|
330
|
+
this.apiKey = apiKey;
|
|
331
|
+
this.timeoutMs = timeoutMs;
|
|
332
|
+
}
|
|
333
|
+
async post(path, payload) {
|
|
334
|
+
const controller = new AbortController();
|
|
335
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
336
|
+
try {
|
|
337
|
+
const url = `${this.endpoint.replace(/\/+$/, "")}${path}`;
|
|
338
|
+
const headers = {
|
|
339
|
+
"content-type": "application/json"
|
|
340
|
+
};
|
|
341
|
+
const token = this.apiKey.trim() || process.env[this.apiKeyEnv];
|
|
342
|
+
if (token) {
|
|
343
|
+
headers.authorization = `Bearer ${token}`;
|
|
344
|
+
}
|
|
345
|
+
const response = await fetch(url, {
|
|
346
|
+
method: "POST",
|
|
347
|
+
headers,
|
|
348
|
+
body: JSON.stringify(payload),
|
|
349
|
+
signal: controller.signal
|
|
350
|
+
});
|
|
351
|
+
if (!response.ok) {
|
|
352
|
+
throw new Error(`LLM provider request failed (${response.status})`);
|
|
353
|
+
}
|
|
354
|
+
return await response.json();
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
358
|
+
throw new Error(`LLM provider timeout after ${this.timeoutMs}ms: POST ${path}`);
|
|
359
|
+
}
|
|
360
|
+
if (error instanceof Error) {
|
|
361
|
+
throw new Error(`LLM provider request failed: POST ${path}: ${error.message}`);
|
|
362
|
+
}
|
|
363
|
+
throw new Error(`LLM provider request failed: POST ${path}`);
|
|
364
|
+
}
|
|
365
|
+
finally {
|
|
366
|
+
clearTimeout(timer);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
async plan(prompt) {
|
|
370
|
+
const raw = await this.post("/plan", { prompt, model: this.plannerModel });
|
|
371
|
+
if (raw && typeof raw === "object" && "sop" in raw) {
|
|
372
|
+
return (0, planner_1.validateSOP)(raw.sop, prompt);
|
|
373
|
+
}
|
|
374
|
+
return (0, planner_1.validateSOP)(raw, prompt);
|
|
375
|
+
}
|
|
376
|
+
async audit(checkpoint) {
|
|
377
|
+
const raw = await this.post("/audit", { checkpoint, model: this.auditorModel });
|
|
378
|
+
if (raw && typeof raw === "object" && "audit" in raw) {
|
|
379
|
+
return (0, auditor_1.normalizeAuditResult)(raw.audit);
|
|
380
|
+
}
|
|
381
|
+
return (0, auditor_1.normalizeAuditResult)(raw);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
function createLLMProvider(config) {
|
|
385
|
+
if (config.model.provider === "http") {
|
|
386
|
+
const endpoint = config.model.endpoint?.trim();
|
|
387
|
+
if (!endpoint) {
|
|
388
|
+
throw new Error("HTTP provider selected but model.endpoint is empty.");
|
|
389
|
+
}
|
|
390
|
+
return new HttpLLMProvider(endpoint, config.model.planner_model, config.model.auditor_model, config.model.api_key_env || "MOLO_API_KEY", config.model.api_key || "", config.model.timeout_ms || 30000);
|
|
391
|
+
}
|
|
392
|
+
if (config.model.provider === "openai_codex_team") {
|
|
393
|
+
return new OpenAICodexTeamProvider(config.model.planner_model, config.model.auditor_model, config.model.api_key_env || "OPENAI_API_KEY", config.model.api_key || "", config.model.timeout_ms || 30000, config.model.endpoint);
|
|
394
|
+
}
|
|
395
|
+
return new MockLLMProvider();
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/infra/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SimpleGit } from "simple-git";
|
|
2
|
+
export declare function createGitClient(cwd?: string): SimpleGit;
|
|
3
|
+
export declare function getHeadCommit(git: SimpleGit): Promise<string>;
|
|
4
|
+
export declare function getDiffStat(git: SimpleGit): Promise<string>;
|
|
5
|
+
export declare function getDiffExcerpt(git: SimpleGit, maxLines?: number): Promise<string>;
|
|
6
|
+
export declare function getChangedFiles(git: SimpleGit): Promise<string[]>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createGitClient = createGitClient;
|
|
7
|
+
exports.getHeadCommit = getHeadCommit;
|
|
8
|
+
exports.getDiffStat = getDiffStat;
|
|
9
|
+
exports.getDiffExcerpt = getDiffExcerpt;
|
|
10
|
+
exports.getChangedFiles = getChangedFiles;
|
|
11
|
+
const simple_git_1 = __importDefault(require("simple-git"));
|
|
12
|
+
function createGitClient(cwd = process.cwd()) {
|
|
13
|
+
return (0, simple_git_1.default)({
|
|
14
|
+
baseDir: cwd,
|
|
15
|
+
maxConcurrentProcesses: 1
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async function getHeadCommit(git) {
|
|
19
|
+
return (await git.revparse(["HEAD"])).trim();
|
|
20
|
+
}
|
|
21
|
+
async function getDiffStat(git) {
|
|
22
|
+
return (await git.raw(["diff", "--stat"])).trim();
|
|
23
|
+
}
|
|
24
|
+
async function getDiffExcerpt(git, maxLines = 200) {
|
|
25
|
+
const rawDiff = await git.raw(["diff", "--no-color", "--patch"]);
|
|
26
|
+
return rawDiff.split(/\r?\n/).slice(0, maxLines).join("\n");
|
|
27
|
+
}
|
|
28
|
+
async function getChangedFiles(git) {
|
|
29
|
+
const raw = await git.raw(["diff", "--name-only"]);
|
|
30
|
+
return raw
|
|
31
|
+
.split(/\r?\n/)
|
|
32
|
+
.map((line) => line.trim())
|
|
33
|
+
.filter((line) => line.length > 0);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/infra/git.ts"],"names":[],"mappings":";;;;;AAEA,0CAKC;AAED,sCAEC;AAED,kCAEC;AAED,wCAGC;AAED,0CAMC;AA5BD,4DAAkD;AAElD,SAAgB,eAAe,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACjD,OAAO,IAAA,oBAAS,EAAC;QACf,OAAO,EAAE,GAAG;QACZ,sBAAsB,EAAE,CAAC;KAC1B,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,GAAc;IAChD,OAAO,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,GAAc;IAC9C,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,GAAc,EAAE,QAAQ,GAAG,GAAG;IACjE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,GAAc;IAClD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACnD,OAAO,GAAG;SACP,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function sha256(input: string): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sha256 = sha256;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
function sha256(input) {
|
|
6
|
+
return (0, node_crypto_1.createHash)("sha256").update(input, "utf8").digest("hex");
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=hashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.js","sourceRoot":"","sources":["../../src/infra/hashing.ts"],"names":[],"mappings":";;AAEA,wBAEC;AAJD,6CAAyC;AAEzC,SAAgB,MAAM,CAAC,KAAa;IAClC,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IntentBinding, IntentCard, SessionStore, SOPScope, Verdict } from "../core/types";
|
|
2
|
+
export declare const DEFAULT_INTENT_CARD_PATH = ".molo/intent.card.json";
|
|
3
|
+
export declare const DEFAULT_INTENT_CONFIRMED_PATH = ".molo/intent.confirmed.json";
|
|
4
|
+
export declare const DEFAULT_SESSION_PATH = ".molo/session.json";
|
|
5
|
+
export interface IntentInitResult {
|
|
6
|
+
created: string[];
|
|
7
|
+
updated: string[];
|
|
8
|
+
skipped: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function createDraftIntent(description: string, scope: SOPScope): IntentCard;
|
|
11
|
+
export declare function createEmptyIntentCard(scope: SOPScope): IntentCard;
|
|
12
|
+
export declare function createDefaultSession(): SessionStore;
|
|
13
|
+
export declare function readIntentCard(cwd?: string): Promise<IntentCard | null>;
|
|
14
|
+
export declare function readConfirmedIntent(cwd?: string): Promise<IntentCard | null>;
|
|
15
|
+
export declare function readSessionStore(cwd?: string): Promise<SessionStore | null>;
|
|
16
|
+
export declare function writeIntentCard(intent: IntentCard, cwd?: string): Promise<void>;
|
|
17
|
+
export declare function writeConfirmedIntent(intent: IntentCard, cwd?: string): Promise<void>;
|
|
18
|
+
export declare function writeSessionStore(session: SessionStore, cwd?: string): Promise<void>;
|
|
19
|
+
export declare function ensureIntentArtifacts(scope: SOPScope, cwd?: string, force?: boolean): Promise<IntentInitResult>;
|
|
20
|
+
export declare function alignIntent(description: string, scope: SOPScope, cwd?: string): Promise<IntentCard>;
|
|
21
|
+
export declare function confirmIntent(cwd?: string): Promise<{
|
|
22
|
+
intent: IntentCard;
|
|
23
|
+
binding: IntentBinding;
|
|
24
|
+
}>;
|
|
25
|
+
export declare function buildIntentExecutionDescription(intent: IntentCard): string;
|
|
26
|
+
export declare function startConfirmedRun(cwd?: string): Promise<{
|
|
27
|
+
intent: IntentCard;
|
|
28
|
+
binding: IntentBinding;
|
|
29
|
+
}>;
|
|
30
|
+
export declare function finishRunCycle(verdict: Verdict, checkpointId: string | undefined, cwd?: string): Promise<void>;
|