mycontext-cli 4.2.17 → 4.2.18
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/README.md +62 -97
- package/dist/agents/implementations/SolverAgent.d.ts +42 -0
- package/dist/agents/implementations/SolverAgent.d.ts.map +1 -0
- package/dist/agents/implementations/SolverAgent.js +543 -0
- package/dist/agents/implementations/SolverAgent.js.map +1 -0
- package/dist/cli.js +129 -0
- package/dist/cli.js.map +1 -1
- package/dist/clients/ClaudeSDKClient.d.ts +1 -0
- package/dist/clients/ClaudeSDKClient.d.ts.map +1 -1
- package/dist/clients/ClaudeSDKClient.js +3 -0
- package/dist/clients/ClaudeSDKClient.js.map +1 -1
- package/dist/clients/MyContextAIClient.d.ts +4 -0
- package/dist/clients/MyContextAIClient.d.ts.map +1 -1
- package/dist/clients/MyContextAIClient.js +6 -0
- package/dist/clients/MyContextAIClient.js.map +1 -1
- package/dist/clients/ProviderChain.d.ts +1 -0
- package/dist/clients/ProviderChain.d.ts.map +1 -1
- package/dist/clients/ProviderChain.js +3 -0
- package/dist/clients/ProviderChain.js.map +1 -1
- package/dist/clients/XAIClient.d.ts +4 -0
- package/dist/clients/XAIClient.d.ts.map +1 -1
- package/dist/clients/XAIClient.js +6 -0
- package/dist/clients/XAIClient.js.map +1 -1
- package/dist/commands/add.d.ts +17 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +164 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/build.d.ts +10 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +37 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/generate-assets.d.ts +11 -0
- package/dist/commands/generate-assets.d.ts.map +1 -0
- package/dist/commands/generate-assets.js +131 -0
- package/dist/commands/generate-assets.js.map +1 -0
- package/dist/commands/generate-screens.d.ts +5 -0
- package/dist/commands/generate-screens.d.ts.map +1 -1
- package/dist/commands/generate-screens.js +160 -12
- package/dist/commands/generate-screens.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +43 -9
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/ideate.d.ts +14 -0
- package/dist/commands/ideate.d.ts.map +1 -0
- package/dist/commands/ideate.js +153 -0
- package/dist/commands/ideate.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +27 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate-transform.d.ts +16 -0
- package/dist/commands/migrate-transform.d.ts.map +1 -0
- package/dist/commands/migrate-transform.js +135 -0
- package/dist/commands/migrate-transform.js.map +1 -0
- package/dist/commands/sync-readme.d.ts +3 -1
- package/dist/commands/sync-readme.d.ts.map +1 -1
- package/dist/commands/sync-readme.js +57 -59
- package/dist/commands/sync-readme.js.map +1 -1
- package/dist/commands/vision-test.d.ts.map +1 -1
- package/dist/commands/vision-test.js +8 -0
- package/dist/commands/vision-test.js.map +1 -1
- package/dist/constants/subAgentPersonalities.d.ts.map +1 -1
- package/dist/constants/subAgentPersonalities.js +29 -0
- package/dist/constants/subAgentPersonalities.js.map +1 -1
- package/dist/core/ai/AICore.d.ts +8 -0
- package/dist/core/ai/AICore.d.ts.map +1 -1
- package/dist/core/ai/AICore.js +50 -1
- package/dist/core/ai/AICore.js.map +1 -1
- package/dist/core/ai/TokenCostModel.d.ts +37 -0
- package/dist/core/ai/TokenCostModel.d.ts.map +1 -0
- package/dist/core/ai/TokenCostModel.js +132 -0
- package/dist/core/ai/TokenCostModel.js.map +1 -0
- package/dist/core/brain/BrainClient.d.ts +13 -1
- package/dist/core/brain/BrainClient.d.ts.map +1 -1
- package/dist/core/brain/BrainClient.js +49 -0
- package/dist/core/brain/BrainClient.js.map +1 -1
- package/dist/interfaces/AIClient.d.ts +4 -0
- package/dist/interfaces/AIClient.d.ts.map +1 -1
- package/dist/interfaces/AIClient.js.map +1 -1
- package/dist/services/MonorepoScanner.d.ts +18 -0
- package/dist/services/MonorepoScanner.d.ts.map +1 -0
- package/dist/services/MonorepoScanner.js +101 -0
- package/dist/services/MonorepoScanner.js.map +1 -0
- package/dist/services/ProjectScanner.d.ts.map +1 -1
- package/dist/services/ProjectScanner.js +7 -0
- package/dist/services/ProjectScanner.js.map +1 -1
- package/dist/services/ReadmeDeducer.d.ts +14 -0
- package/dist/services/ReadmeDeducer.d.ts.map +1 -0
- package/dist/services/ReadmeDeducer.js +109 -0
- package/dist/services/ReadmeDeducer.js.map +1 -0
- package/dist/tui/DashboardMode.d.ts +2 -0
- package/dist/tui/DashboardMode.d.ts.map +1 -1
- package/dist/tui/DashboardMode.js +116 -1
- package/dist/tui/DashboardMode.js.map +1 -1
- package/dist/types/constraint.d.ts +123 -0
- package/dist/types/constraint.d.ts.map +1 -0
- package/dist/types/constraint.js +13 -0
- package/dist/types/constraint.js.map +1 -0
- package/dist/types/living-context.d.ts +6 -0
- package/dist/types/living-context.d.ts.map +1 -1
- package/dist/utils/claudeAgentClient.d.ts +4 -0
- package/dist/utils/claudeAgentClient.d.ts.map +1 -1
- package/dist/utils/claudeAgentClient.js +6 -0
- package/dist/utils/claudeAgentClient.js.map +1 -1
- package/dist/utils/contextRenderer.d.ts.map +1 -1
- package/dist/utils/contextRenderer.js +40 -30
- package/dist/utils/contextRenderer.js.map +1 -1
- package/dist/utils/geminiClient.d.ts +11 -1
- package/dist/utils/geminiClient.d.ts.map +1 -1
- package/dist/utils/geminiClient.js +106 -58
- package/dist/utils/geminiClient.js.map +1 -1
- package/dist/utils/githubModelsClient.d.ts +4 -0
- package/dist/utils/githubModelsClient.d.ts.map +1 -1
- package/dist/utils/githubModelsClient.js +6 -0
- package/dist/utils/githubModelsClient.js.map +1 -1
- package/dist/utils/openRouterClient.d.ts +1 -0
- package/dist/utils/openRouterClient.d.ts.map +1 -1
- package/dist/utils/openRouterClient.js +3 -0
- package/dist/utils/openRouterClient.js.map +1 -1
- package/package.json +4 -2
- package/dist/templates/playbooks/instantdb-integration.md +0 -851
- package/dist/templates/playbooks/mpesa-integration.md +0 -652
- package/dist/templates/ui-spec-examples.md +0 -318
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SolverAgent
|
|
4
|
+
*
|
|
5
|
+
* Research sub-agent that implements Phase 2–4 of the "Structured Reasoning
|
|
6
|
+
* Systems" research plan:
|
|
7
|
+
*
|
|
8
|
+
* NL → LLM → ConstraintSpec (JSON Brain) → Solver → SolveResult + metrics
|
|
9
|
+
*
|
|
10
|
+
* The solver operates in pure TypeScript with no external dependencies so the
|
|
11
|
+
* pipeline can run immediately. Swap the `_nativeSolve` call for a Z3 /
|
|
12
|
+
* OR-Tools binding once you want to scale to harder instances.
|
|
13
|
+
*
|
|
14
|
+
* Key design choices:
|
|
15
|
+
* - Expression evaluation uses a recursive-descent parser (NO eval()).
|
|
16
|
+
* - Three interchangeable strategies: brute-force, constraint-propagation,
|
|
17
|
+
* llm-guided (LLM trims the domain before search).
|
|
18
|
+
* - Every run produces a SolveTrace with operations count, search-space size,
|
|
19
|
+
* pruning ratio — the numbers for Phase 4 / 5 measurement tables.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.SolverAgent = void 0;
|
|
23
|
+
exports.createFactorizationSpec = createFactorizationSpec;
|
|
24
|
+
const hybridAIClient_1 = require("../../utils/hybridAIClient");
|
|
25
|
+
const subAgentPersonalities_1 = require("../../constants/subAgentPersonalities");
|
|
26
|
+
function tokenize(expr) {
|
|
27
|
+
const tokens = [];
|
|
28
|
+
let i = 0;
|
|
29
|
+
while (i < expr.length) {
|
|
30
|
+
const c = expr.charAt(i); // charAt always returns string, never undefined
|
|
31
|
+
if (/\s/.test(c)) {
|
|
32
|
+
i++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (/[0-9]/.test(c) || (c === "." && /[0-9]/.test(expr.charAt(i + 1)))) {
|
|
36
|
+
let s = "";
|
|
37
|
+
while (i < expr.length && /[0-9.]/.test(expr.charAt(i)))
|
|
38
|
+
s += expr.charAt(i++);
|
|
39
|
+
tokens.push({ kind: "num", value: parseFloat(s) });
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (/[a-zA-Z_]/.test(c)) {
|
|
43
|
+
let s = "";
|
|
44
|
+
while (i < expr.length && /[a-zA-Z0-9_]/.test(expr.charAt(i)))
|
|
45
|
+
s += expr.charAt(i++);
|
|
46
|
+
tokens.push({ kind: "ident", value: s });
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
// Two-char operators first
|
|
50
|
+
const two = expr.slice(i, i + 2);
|
|
51
|
+
if (["<=", ">=", "!=", "=="].includes(two)) {
|
|
52
|
+
tokens.push({ kind: "op", value: two });
|
|
53
|
+
i += 2;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
tokens.push({ kind: "op", value: c });
|
|
57
|
+
i++;
|
|
58
|
+
}
|
|
59
|
+
return tokens;
|
|
60
|
+
}
|
|
61
|
+
function peek(s) {
|
|
62
|
+
return s.tokens[s.pos];
|
|
63
|
+
}
|
|
64
|
+
function consume(s) {
|
|
65
|
+
// Callers always guard with peek() before calling consume(), so this is safe
|
|
66
|
+
return s.tokens[s.pos++];
|
|
67
|
+
}
|
|
68
|
+
function parseAtom(s) {
|
|
69
|
+
const t = peek(s);
|
|
70
|
+
if (!t)
|
|
71
|
+
throw new Error("Unexpected end of expression");
|
|
72
|
+
if (t.kind === "num") {
|
|
73
|
+
consume(s);
|
|
74
|
+
return t.value;
|
|
75
|
+
}
|
|
76
|
+
if (t.kind === "ident") {
|
|
77
|
+
consume(s);
|
|
78
|
+
// Built-in functions
|
|
79
|
+
const next = peek(s);
|
|
80
|
+
if (next && next.kind === "op" && next.value === "(") {
|
|
81
|
+
consume(s); // consume '('
|
|
82
|
+
const arg = parseExpr(s);
|
|
83
|
+
const close = consume(s); // consume ')'
|
|
84
|
+
if (close.value !== ")")
|
|
85
|
+
throw new Error("Expected ')'");
|
|
86
|
+
switch (t.value) {
|
|
87
|
+
case "sqrt": return Math.sqrt(arg);
|
|
88
|
+
case "abs": return Math.abs(arg);
|
|
89
|
+
case "floor": return Math.floor(arg);
|
|
90
|
+
case "ceil": return Math.ceil(arg);
|
|
91
|
+
default: throw new Error(`Unknown function: ${t.value}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Variable lookup
|
|
95
|
+
if (t.value in s.vars)
|
|
96
|
+
return s.vars[t.value];
|
|
97
|
+
throw new Error(`Unknown variable: ${t.value}`);
|
|
98
|
+
}
|
|
99
|
+
if (t.kind === "op" && t.value === "(") {
|
|
100
|
+
consume(s);
|
|
101
|
+
const val = parseExpr(s);
|
|
102
|
+
const close = consume(s);
|
|
103
|
+
if (close.value !== ")")
|
|
104
|
+
throw new Error("Expected ')'");
|
|
105
|
+
return val;
|
|
106
|
+
}
|
|
107
|
+
throw new Error(`Unexpected token: ${JSON.stringify(t)}`);
|
|
108
|
+
}
|
|
109
|
+
function parseUnary(s) {
|
|
110
|
+
const t = peek(s);
|
|
111
|
+
if (t && t.kind === "op" && t.value === "-") {
|
|
112
|
+
consume(s);
|
|
113
|
+
return -parseAtom(s);
|
|
114
|
+
}
|
|
115
|
+
return parseAtom(s);
|
|
116
|
+
}
|
|
117
|
+
function parseMulDiv(s) {
|
|
118
|
+
let left = parseUnary(s);
|
|
119
|
+
while (true) {
|
|
120
|
+
const t = peek(s);
|
|
121
|
+
if (!t || t.kind !== "op" || !["*", "/", "%"].includes(t.value))
|
|
122
|
+
break;
|
|
123
|
+
consume(s);
|
|
124
|
+
const right = parseUnary(s);
|
|
125
|
+
if (t.value === "*")
|
|
126
|
+
left *= right;
|
|
127
|
+
else if (t.value === "/")
|
|
128
|
+
left /= right;
|
|
129
|
+
else
|
|
130
|
+
left = left % right;
|
|
131
|
+
}
|
|
132
|
+
return left;
|
|
133
|
+
}
|
|
134
|
+
function parseExpr(s) {
|
|
135
|
+
let left = parseMulDiv(s);
|
|
136
|
+
while (true) {
|
|
137
|
+
const t = peek(s);
|
|
138
|
+
if (!t || t.kind !== "op" || !["+", "-"].includes(t.value))
|
|
139
|
+
break;
|
|
140
|
+
consume(s);
|
|
141
|
+
const right = parseMulDiv(s);
|
|
142
|
+
left = t.value === "+" ? left + right : left - right;
|
|
143
|
+
}
|
|
144
|
+
return left;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Evaluate a constraint expression string against a variable assignment.
|
|
148
|
+
* Expressions that contain a comparison operator return a boolean.
|
|
149
|
+
* Pure arithmetic expressions return true iff the result is non-zero.
|
|
150
|
+
*/
|
|
151
|
+
function evaluateConstraint(expr, vars) {
|
|
152
|
+
const COMP_OPS = ["<=", ">=", "!=", "==", "=", "<", ">"];
|
|
153
|
+
// Find the leftmost comparison operator that isn't inside parentheses
|
|
154
|
+
let depth = 0;
|
|
155
|
+
for (let i = 0; i < expr.length; i++) {
|
|
156
|
+
if (expr[i] === "(") {
|
|
157
|
+
depth++;
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (expr[i] === ")") {
|
|
161
|
+
depth--;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (depth > 0)
|
|
165
|
+
continue;
|
|
166
|
+
for (const op of COMP_OPS) {
|
|
167
|
+
if (expr.slice(i, i + op.length) === op) {
|
|
168
|
+
// Make sure we're not inside a multi-char op preceded by < / > / !
|
|
169
|
+
const prev = expr[i - 1];
|
|
170
|
+
if (op.length === 1 && prev && ["<", ">", "!", "="].includes(prev))
|
|
171
|
+
continue;
|
|
172
|
+
const lhsStr = expr.slice(0, i).trim();
|
|
173
|
+
const rhsStr = expr.slice(i + op.length).trim();
|
|
174
|
+
if (!lhsStr || !rhsStr)
|
|
175
|
+
continue;
|
|
176
|
+
const lhs = evalArith(lhsStr, vars);
|
|
177
|
+
const rhs = evalArith(rhsStr, vars);
|
|
178
|
+
const EPS = 1e-9;
|
|
179
|
+
switch (op) {
|
|
180
|
+
case "=":
|
|
181
|
+
case "==": return Math.abs(lhs - rhs) <= EPS;
|
|
182
|
+
case "<=": return lhs <= rhs + EPS;
|
|
183
|
+
case ">=": return lhs >= rhs - EPS;
|
|
184
|
+
case "!=": return Math.abs(lhs - rhs) > EPS;
|
|
185
|
+
case "<": return lhs < rhs - EPS;
|
|
186
|
+
case ">": return lhs > rhs + EPS;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// No comparison found — treat numeric result as truthy
|
|
192
|
+
return evalArith(expr, vars) !== 0;
|
|
193
|
+
}
|
|
194
|
+
function evalArith(expr, vars) {
|
|
195
|
+
const state = { tokens: tokenize(expr), pos: 0, vars };
|
|
196
|
+
const result = parseExpr(state);
|
|
197
|
+
if (state.pos < state.tokens.length) {
|
|
198
|
+
throw new Error(`Unexpected token at position ${state.pos}: ${JSON.stringify(state.tokens[state.pos])}`);
|
|
199
|
+
}
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
// Domain generation
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
function generateDomain(v) {
|
|
206
|
+
if (v.type === "boolean") {
|
|
207
|
+
return v.domain?.values ? v.domain.values : [false, true];
|
|
208
|
+
}
|
|
209
|
+
if (v.domain?.values)
|
|
210
|
+
return v.domain.values;
|
|
211
|
+
const min = v.domain?.min ?? 0;
|
|
212
|
+
const max = v.domain?.max ?? 1000;
|
|
213
|
+
if (max - min > 1000000) {
|
|
214
|
+
throw new Error(`Variable "${v.name}" has domain size ${max - min + 1}. ` +
|
|
215
|
+
"Cap the domain with searchBounds.maxIterations or reduce the range.");
|
|
216
|
+
}
|
|
217
|
+
const values = [];
|
|
218
|
+
for (let x = min; x <= max; x++)
|
|
219
|
+
values.push(x);
|
|
220
|
+
return values;
|
|
221
|
+
}
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Constraint propagation — reduce variable domains before brute-force pass
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
/**
|
|
226
|
+
* Very lightweight propagation: for each variable, eliminate values that
|
|
227
|
+
* violate a unary constraint (one with only that variable).
|
|
228
|
+
* Full arc-consistency (AC-3) would be more powerful; this handles the
|
|
229
|
+
* common Phase 3 cases like `a >= 2` and `b <= sqrt(N)`.
|
|
230
|
+
*/
|
|
231
|
+
function propagateDomains(spec, domains) {
|
|
232
|
+
let prunedCount = 0;
|
|
233
|
+
for (const v of spec.variables) {
|
|
234
|
+
const dom = domains.get(v.name);
|
|
235
|
+
if (!dom)
|
|
236
|
+
continue;
|
|
237
|
+
const filtered = dom.filter((val) => {
|
|
238
|
+
const assignment = {};
|
|
239
|
+
for (const [k, existing] of domains.entries()) {
|
|
240
|
+
if (k === v.name)
|
|
241
|
+
assignment[k] = val;
|
|
242
|
+
else
|
|
243
|
+
assignment[k] = existing[0]; // placeholder
|
|
244
|
+
}
|
|
245
|
+
for (const ce of spec.constraints) {
|
|
246
|
+
// Only apply constraints that reference solely this variable
|
|
247
|
+
const usedVars = getVariableNames(ce.expr);
|
|
248
|
+
if (usedVars.size === 1 && usedVars.has(v.name)) {
|
|
249
|
+
try {
|
|
250
|
+
if (!evaluateConstraint(ce.expr, assignment))
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// If evaluation fails (other var not bound), skip
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return true;
|
|
259
|
+
});
|
|
260
|
+
prunedCount += dom.length - filtered.length;
|
|
261
|
+
domains.set(v.name, filtered);
|
|
262
|
+
}
|
|
263
|
+
return { prunedCount };
|
|
264
|
+
}
|
|
265
|
+
function getVariableNames(expr) {
|
|
266
|
+
const names = new Set();
|
|
267
|
+
const tokens = tokenize(expr);
|
|
268
|
+
const builtins = new Set(["sqrt", "abs", "floor", "ceil"]);
|
|
269
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
270
|
+
const t = tokens[i]; // safe: i is within bounds
|
|
271
|
+
if (t.kind === "ident" && !builtins.has(t.value)) {
|
|
272
|
+
// Skip if followed by '(' (function call, not variable)
|
|
273
|
+
const next = i + 1 < tokens.length ? tokens[i + 1] : undefined;
|
|
274
|
+
if (!next || next.kind !== "op" || next.value !== "(") {
|
|
275
|
+
names.add(t.value);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return names;
|
|
280
|
+
}
|
|
281
|
+
function* cartesianProduct(variables, domains) {
|
|
282
|
+
if (variables.length === 0) {
|
|
283
|
+
yield {};
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const [head, ...tail] = variables;
|
|
287
|
+
if (head === undefined)
|
|
288
|
+
return;
|
|
289
|
+
const headDomain = domains.get(head) ?? [];
|
|
290
|
+
for (const val of headDomain) {
|
|
291
|
+
for (const rest of cartesianProduct(tail, domains)) {
|
|
292
|
+
yield { [head]: val, ...rest };
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
function nativeSolve(spec, opts) {
|
|
297
|
+
const startMs = Date.now();
|
|
298
|
+
const solutions = [];
|
|
299
|
+
const steps = [];
|
|
300
|
+
// Build initial domains
|
|
301
|
+
const domains = new Map();
|
|
302
|
+
for (const v of spec.variables) {
|
|
303
|
+
domains.set(v.name, generateDomain(v));
|
|
304
|
+
}
|
|
305
|
+
let prunedByPropagation = 0;
|
|
306
|
+
// Constraint propagation pass (reduces domains before iteration)
|
|
307
|
+
if (opts.method === "constraint-propagation" || opts.method === "llm-guided") {
|
|
308
|
+
const pr = propagateDomains(spec, domains);
|
|
309
|
+
prunedByPropagation = pr.prunedCount;
|
|
310
|
+
}
|
|
311
|
+
// For llm-guided, swap in the LLM-narrowed domains
|
|
312
|
+
if (opts.method === "llm-guided" && opts.llmGuidedDomains) {
|
|
313
|
+
for (const [k, v] of opts.llmGuidedDomains.entries()) {
|
|
314
|
+
domains.set(k, v);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
const searchSpaceSize = [...domains.values()].reduce((acc, d) => acc * d.length, 1);
|
|
318
|
+
const varNames = spec.variables.map((v) => v.name);
|
|
319
|
+
let iteration = 0;
|
|
320
|
+
let prunedDuringSearch = prunedByPropagation;
|
|
321
|
+
const MAX_TRACE_STEPS = 200; // cap trace verbosity
|
|
322
|
+
for (const assignment of cartesianProduct(varNames, domains)) {
|
|
323
|
+
if (iteration >= opts.maxIterations)
|
|
324
|
+
break;
|
|
325
|
+
if (Date.now() - startMs > opts.timeoutMs)
|
|
326
|
+
break;
|
|
327
|
+
let allPassed = true;
|
|
328
|
+
let violatedConstraint;
|
|
329
|
+
for (const ce of spec.constraints) {
|
|
330
|
+
try {
|
|
331
|
+
if (!evaluateConstraint(ce.expr, assignment)) {
|
|
332
|
+
allPassed = false;
|
|
333
|
+
violatedConstraint = ce.expr;
|
|
334
|
+
prunedDuringSearch++;
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch (_err) {
|
|
339
|
+
// Evaluation error — treat as constraint failure
|
|
340
|
+
allPassed = false;
|
|
341
|
+
violatedConstraint = ce.expr + " [eval error]";
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (steps.length < MAX_TRACE_STEPS) {
|
|
346
|
+
steps.push({ iteration, candidate: assignment, violatedConstraint, passed: allPassed });
|
|
347
|
+
}
|
|
348
|
+
if (allPassed) {
|
|
349
|
+
solutions.push(assignment);
|
|
350
|
+
if (!opts.findAll)
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
iteration++;
|
|
354
|
+
}
|
|
355
|
+
const runtimeMs = Date.now() - startMs;
|
|
356
|
+
const exploredCount = iteration;
|
|
357
|
+
const reductionRatio = searchSpaceSize > 0 ? exploredCount / searchSpaceSize : 1;
|
|
358
|
+
const trace = {
|
|
359
|
+
method: opts.method,
|
|
360
|
+
searchSpaceSize,
|
|
361
|
+
exploredCount,
|
|
362
|
+
prunedCount: prunedDuringSearch,
|
|
363
|
+
reductionRatio,
|
|
364
|
+
runtimeMs,
|
|
365
|
+
steps,
|
|
366
|
+
};
|
|
367
|
+
const pct = (reductionRatio * 100).toFixed(2);
|
|
368
|
+
const summary = solutions.length > 0
|
|
369
|
+
? `Found ${solutions.length} solution(s). Explored ${exploredCount.toLocaleString()} / ${searchSpaceSize.toLocaleString()} candidates (${pct}% of search space) in ${runtimeMs}ms.`
|
|
370
|
+
: `No solution found. Explored ${exploredCount.toLocaleString()} / ${searchSpaceSize.toLocaleString()} candidates in ${runtimeMs}ms.`;
|
|
371
|
+
return { satisfiable: solutions.length > 0, solutions, trace, summary };
|
|
372
|
+
}
|
|
373
|
+
// ---------------------------------------------------------------------------
|
|
374
|
+
// LLM translation: natural language → ConstraintSpec
|
|
375
|
+
// ---------------------------------------------------------------------------
|
|
376
|
+
const NL_TO_SPEC_SCHEMA = `{
|
|
377
|
+
"problem": {
|
|
378
|
+
"id": "string (unique, use a short slug)",
|
|
379
|
+
"type": "factorization | sat | csp | custom",
|
|
380
|
+
"description": "string",
|
|
381
|
+
"input": { "...": "raw numeric/string inputs" },
|
|
382
|
+
"createdAt": "ISO timestamp"
|
|
383
|
+
},
|
|
384
|
+
"variables": [
|
|
385
|
+
{
|
|
386
|
+
"name": "string",
|
|
387
|
+
"type": "integer | boolean | real",
|
|
388
|
+
"domain": { "min": number, "max": number }
|
|
389
|
+
}
|
|
390
|
+
],
|
|
391
|
+
"constraints": [
|
|
392
|
+
{ "expr": "arithmetic equality or inequality string", "description": "string" }
|
|
393
|
+
],
|
|
394
|
+
"objective": { "type": "satisfy" },
|
|
395
|
+
"searchBounds": { "maxIterations": 50000, "timeoutMs": 10000 }
|
|
396
|
+
}`;
|
|
397
|
+
// ---------------------------------------------------------------------------
|
|
398
|
+
// SolverAgent implementation
|
|
399
|
+
// ---------------------------------------------------------------------------
|
|
400
|
+
class SolverAgent {
|
|
401
|
+
constructor() {
|
|
402
|
+
this.name = "SolverAgent";
|
|
403
|
+
this.description = "Translates natural-language problems to ConstraintSpec JSON and solves them with instrumented search — research tooling for the Structured Reasoning project";
|
|
404
|
+
const p = (0, subAgentPersonalities_1.getSubAgentPersonality)(this.name);
|
|
405
|
+
if (!p)
|
|
406
|
+
throw new Error(`Personality not found for ${this.name}`);
|
|
407
|
+
this.personality = p.systemPrompt;
|
|
408
|
+
this.llmProvider = p.llmProvider;
|
|
409
|
+
this.expertise = p.expertise;
|
|
410
|
+
this.ai = new hybridAIClient_1.HybridAIClient();
|
|
411
|
+
}
|
|
412
|
+
async validate(input) {
|
|
413
|
+
return !!(input.naturalLanguage || input.spec);
|
|
414
|
+
}
|
|
415
|
+
async run(input) {
|
|
416
|
+
let spec;
|
|
417
|
+
let translatedFromNL = false;
|
|
418
|
+
if (input.spec) {
|
|
419
|
+
spec = input.spec;
|
|
420
|
+
}
|
|
421
|
+
else if (input.naturalLanguage) {
|
|
422
|
+
spec = await this._translateNL(input.naturalLanguage);
|
|
423
|
+
translatedFromNL = true;
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
throw new Error("SolverAgent requires either naturalLanguage or spec input");
|
|
427
|
+
}
|
|
428
|
+
const method = input.method ?? "constraint-propagation";
|
|
429
|
+
const findAll = input.findAll ?? false;
|
|
430
|
+
const maxIterations = spec.searchBounds?.maxIterations ?? 100000;
|
|
431
|
+
const timeoutMs = spec.searchBounds?.timeoutMs ?? 15000;
|
|
432
|
+
let llmGuidedDomains;
|
|
433
|
+
if (method === "llm-guided") {
|
|
434
|
+
llmGuidedDomains = await this._llmNarrowDomains(spec);
|
|
435
|
+
}
|
|
436
|
+
const result = nativeSolve(spec, {
|
|
437
|
+
method,
|
|
438
|
+
findAll,
|
|
439
|
+
maxIterations,
|
|
440
|
+
timeoutMs,
|
|
441
|
+
llmGuidedDomains,
|
|
442
|
+
});
|
|
443
|
+
return { spec, result, translatedFromNL };
|
|
444
|
+
}
|
|
445
|
+
// -------------------------------------------------------------------------
|
|
446
|
+
// LLM: natural language → ConstraintSpec
|
|
447
|
+
// -------------------------------------------------------------------------
|
|
448
|
+
async _translateNL(nl) {
|
|
449
|
+
const prompt = `You are a constraint programming expert. Convert the following natural-language problem into a structured JSON constraint specification.
|
|
450
|
+
|
|
451
|
+
PROBLEM:
|
|
452
|
+
${nl}
|
|
453
|
+
|
|
454
|
+
Return ONLY valid JSON that conforms exactly to this schema:
|
|
455
|
+
${NL_TO_SPEC_SCHEMA}
|
|
456
|
+
|
|
457
|
+
Rules:
|
|
458
|
+
- Use integer domains unless the problem explicitly needs reals.
|
|
459
|
+
- For factorization of N: variables a, b with domain [2, sqrt(N)], constraints ["a * b = N", "a <= b"].
|
|
460
|
+
- For SAT: boolean variables, constraints expressed as "var1 = true", etc.
|
|
461
|
+
- Keep domain sizes reasonable (under 100,000 total combinations).
|
|
462
|
+
- Set createdAt to the current ISO timestamp.
|
|
463
|
+
- The id should be a short descriptive slug like "factor-589".
|
|
464
|
+
|
|
465
|
+
Return ONLY the JSON object, no explanation:`;
|
|
466
|
+
const { text } = await this.ai.generateText(prompt);
|
|
467
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
468
|
+
if (!jsonMatch)
|
|
469
|
+
throw new Error("LLM did not return valid JSON for constraint spec");
|
|
470
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
471
|
+
// Ensure required fields exist
|
|
472
|
+
if (!parsed.problem || !parsed.variables || !parsed.constraints) {
|
|
473
|
+
throw new Error("LLM-generated spec is missing required fields (problem/variables/constraints)");
|
|
474
|
+
}
|
|
475
|
+
return parsed;
|
|
476
|
+
}
|
|
477
|
+
// -------------------------------------------------------------------------
|
|
478
|
+
// LLM: narrow domains before search (llm-guided strategy)
|
|
479
|
+
// -------------------------------------------------------------------------
|
|
480
|
+
async _llmNarrowDomains(spec) {
|
|
481
|
+
const prompt = `You are a mathematical reasoning assistant. Given this constraint problem, suggest a NARROWED domain for each variable that is very likely to contain the solution while being much smaller than the original domain.
|
|
482
|
+
|
|
483
|
+
PROBLEM SPEC:
|
|
484
|
+
${JSON.stringify(spec, null, 2)}
|
|
485
|
+
|
|
486
|
+
Return ONLY a JSON object mapping variable names to arrays of up to 50 candidate values, e.g.:
|
|
487
|
+
{ "a": [17, 19, 23, 29, 31], "b": [19, 23, 29, 31, 37] }
|
|
488
|
+
|
|
489
|
+
Think step by step about what values are likely to satisfy all constraints, then return the JSON:`;
|
|
490
|
+
try {
|
|
491
|
+
const { text } = await this.ai.generateText(prompt);
|
|
492
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
493
|
+
if (!jsonMatch)
|
|
494
|
+
throw new Error("No JSON in LLM domain response");
|
|
495
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
496
|
+
const result = new Map();
|
|
497
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
498
|
+
if (Array.isArray(v))
|
|
499
|
+
result.set(k, v);
|
|
500
|
+
}
|
|
501
|
+
return result;
|
|
502
|
+
}
|
|
503
|
+
catch {
|
|
504
|
+
// Fall back to full domains — solver still works, just without LLM pruning
|
|
505
|
+
return new Map();
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
async getStatus() {
|
|
509
|
+
return {
|
|
510
|
+
name: this.name,
|
|
511
|
+
status: "idle",
|
|
512
|
+
errorCount: 0,
|
|
513
|
+
successCount: 0,
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
exports.SolverAgent = SolverAgent;
|
|
518
|
+
// ---------------------------------------------------------------------------
|
|
519
|
+
// Convenience factory for direct use outside the orchestrator
|
|
520
|
+
// ---------------------------------------------------------------------------
|
|
521
|
+
function createFactorizationSpec(N) {
|
|
522
|
+
const sqrtN = Math.floor(Math.sqrt(N));
|
|
523
|
+
return {
|
|
524
|
+
problem: {
|
|
525
|
+
id: `factor-${N}`,
|
|
526
|
+
type: "factorization",
|
|
527
|
+
description: `Find two integers a and b such that a * b = ${N}`,
|
|
528
|
+
input: { N },
|
|
529
|
+
createdAt: new Date().toISOString(),
|
|
530
|
+
},
|
|
531
|
+
variables: [
|
|
532
|
+
{ name: "a", type: "integer", domain: { min: 2, max: sqrtN } },
|
|
533
|
+
{ name: "b", type: "integer", domain: { min: 2, max: N } },
|
|
534
|
+
],
|
|
535
|
+
constraints: [
|
|
536
|
+
{ expr: `a * b = ${N}`, description: "Product must equal N" },
|
|
537
|
+
{ expr: "a <= b", description: "Canonical order (avoid duplicate pairs)" },
|
|
538
|
+
],
|
|
539
|
+
objective: { type: "satisfy" },
|
|
540
|
+
searchBounds: { maxIterations: 200000, timeoutMs: 30000 },
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
//# sourceMappingURL=SolverAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolverAgent.js","sourceRoot":"","sources":["../../../src/agents/implementations/SolverAgent.ts"],"names":[],"mappings":"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"}
|