chiasmus 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/LICENSE +201 -0
- package/README.md +124 -0
- package/dist/formalize/engine.d.ts +47 -0
- package/dist/formalize/engine.d.ts.map +1 -0
- package/dist/formalize/engine.js +189 -0
- package/dist/formalize/engine.js.map +1 -0
- package/dist/formalize/validate.d.ts +15 -0
- package/dist/formalize/validate.d.ts.map +1 -0
- package/dist/formalize/validate.js +124 -0
- package/dist/formalize/validate.js.map +1 -0
- package/dist/llm/anthropic.d.ts +27 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +86 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/mock.d.ts +21 -0
- package/dist/llm/mock.d.ts.map +1 -0
- package/dist/llm/mock.js +29 -0
- package/dist/llm/mock.js.map +1 -0
- package/dist/llm/openai-compatible.d.ts +20 -0
- package/dist/llm/openai-compatible.d.ts.map +1 -0
- package/dist/llm/openai-compatible.js +46 -0
- package/dist/llm/openai-compatible.js.map +1 -0
- package/dist/llm/types.d.ts +11 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +2 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/mcp-server.d.ts +12 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +446 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/skills/bm25.d.ts +22 -0
- package/dist/skills/bm25.d.ts.map +1 -0
- package/dist/skills/bm25.js +71 -0
- package/dist/skills/bm25.js.map +1 -0
- package/dist/skills/learner.d.ts +21 -0
- package/dist/skills/learner.d.ts.map +1 -0
- package/dist/skills/learner.js +123 -0
- package/dist/skills/learner.js.map +1 -0
- package/dist/skills/library.d.ts +36 -0
- package/dist/skills/library.d.ts.map +1 -0
- package/dist/skills/library.js +173 -0
- package/dist/skills/library.js.map +1 -0
- package/dist/skills/starters.d.ts +3 -0
- package/dist/skills/starters.d.ts.map +1 -0
- package/dist/skills/starters.js +381 -0
- package/dist/skills/starters.js.map +1 -0
- package/dist/skills/types.d.ts +54 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/solvers/correction-loop.d.ts +34 -0
- package/dist/solvers/correction-loop.d.ts.map +1 -0
- package/dist/solvers/correction-loop.js +52 -0
- package/dist/solvers/correction-loop.js.map +1 -0
- package/dist/solvers/prolog-solver.d.ts +3 -0
- package/dist/solvers/prolog-solver.d.ts.map +1 -0
- package/dist/solvers/prolog-solver.js +93 -0
- package/dist/solvers/prolog-solver.js.map +1 -0
- package/dist/solvers/session.d.ts +11 -0
- package/dist/solvers/session.d.ts.map +1 -0
- package/dist/solvers/session.js +25 -0
- package/dist/solvers/session.js.map +1 -0
- package/dist/solvers/types.d.ts +44 -0
- package/dist/solvers/types.d.ts.map +1 -0
- package/dist/solvers/types.js +2 -0
- package/dist/solvers/types.js.map +1 -0
- package/dist/solvers/z3-solver.d.ts +3 -0
- package/dist/solvers/z3-solver.d.ts.map +1 -0
- package/dist/solvers/z3-solver.js +81 -0
- package/dist/solvers/z3-solver.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lint and auto-fix a specification before sending to the solver.
|
|
3
|
+
* Fixes what it can, reports what it can't.
|
|
4
|
+
*/
|
|
5
|
+
export function lintSpec(spec, solver) {
|
|
6
|
+
const fixes = [];
|
|
7
|
+
const errors = [];
|
|
8
|
+
let cleaned = spec;
|
|
9
|
+
// ── Auto-fixes (applied silently) ──────────────────────
|
|
10
|
+
// Strip markdown fences
|
|
11
|
+
const fencePattern = /^```(?:smt-lib|smtlib|smt2?|prolog|pl)?\s*\n?/gm;
|
|
12
|
+
if (fencePattern.test(cleaned)) {
|
|
13
|
+
cleaned = cleaned.replace(fencePattern, "").replace(/^```\s*$/gm, "");
|
|
14
|
+
fixes.push("Stripped markdown code fences");
|
|
15
|
+
}
|
|
16
|
+
// Trim whitespace
|
|
17
|
+
cleaned = cleaned.trim();
|
|
18
|
+
if (!cleaned) {
|
|
19
|
+
errors.push("Specification is empty after cleaning");
|
|
20
|
+
return { spec: cleaned, fixes, errors };
|
|
21
|
+
}
|
|
22
|
+
// Unfilled template slots — cannot auto-fix
|
|
23
|
+
const slotMatches = cleaned.match(/\{\{SLOT:\w+\}\}/g);
|
|
24
|
+
if (slotMatches) {
|
|
25
|
+
errors.push(`Unfilled template slots: ${slotMatches.join(", ")}`);
|
|
26
|
+
}
|
|
27
|
+
if (solver === "z3") {
|
|
28
|
+
({ spec: cleaned } = lintSmtlib(cleaned, fixes, errors));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
({ spec: cleaned } = lintProlog(cleaned, fixes, errors));
|
|
32
|
+
}
|
|
33
|
+
return { spec: cleaned, fixes, errors };
|
|
34
|
+
}
|
|
35
|
+
function lintSmtlib(spec, fixes, errors) {
|
|
36
|
+
let cleaned = spec;
|
|
37
|
+
// Auto-fix: remove (check-sat) and (get-model)
|
|
38
|
+
if (/\(\s*check-sat\s*\)/.test(cleaned)) {
|
|
39
|
+
cleaned = cleaned.replace(/\(\s*check-sat\s*\)/g, "");
|
|
40
|
+
fixes.push("Removed (check-sat) — added automatically by the solver");
|
|
41
|
+
}
|
|
42
|
+
if (/\(\s*get-model\s*\)/.test(cleaned)) {
|
|
43
|
+
cleaned = cleaned.replace(/\(\s*get-model\s*\)/g, "");
|
|
44
|
+
fixes.push("Removed (get-model) — added automatically by the solver");
|
|
45
|
+
}
|
|
46
|
+
if (/\(\s*exit\s*\)/.test(cleaned)) {
|
|
47
|
+
cleaned = cleaned.replace(/\(\s*exit\s*\)/g, "");
|
|
48
|
+
fixes.push("Removed (exit)");
|
|
49
|
+
}
|
|
50
|
+
// Auto-fix: remove (set-logic ...) — our solver handles this
|
|
51
|
+
if (/\(\s*set-logic\s+\w+\s*\)/.test(cleaned)) {
|
|
52
|
+
cleaned = cleaned.replace(/\(\s*set-logic\s+\w+\s*\)/g, "");
|
|
53
|
+
fixes.push("Removed (set-logic) — solver selects logic automatically");
|
|
54
|
+
}
|
|
55
|
+
cleaned = cleaned.trim();
|
|
56
|
+
// Check: balanced parentheses
|
|
57
|
+
let depth = 0;
|
|
58
|
+
for (let i = 0; i < cleaned.length; i++) {
|
|
59
|
+
const ch = cleaned[i];
|
|
60
|
+
// Skip string literals
|
|
61
|
+
if (ch === '"') {
|
|
62
|
+
i++;
|
|
63
|
+
while (i < cleaned.length && cleaned[i] !== '"') {
|
|
64
|
+
if (cleaned[i] === '\\')
|
|
65
|
+
i++;
|
|
66
|
+
i++;
|
|
67
|
+
}
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
// Skip line comments
|
|
71
|
+
if (ch === ';') {
|
|
72
|
+
while (i < cleaned.length && cleaned[i] !== '\n')
|
|
73
|
+
i++;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (ch === '(')
|
|
77
|
+
depth++;
|
|
78
|
+
if (ch === ')')
|
|
79
|
+
depth--;
|
|
80
|
+
if (depth < 0) {
|
|
81
|
+
errors.push(`Unmatched closing parenthesis at position ${i}`);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (depth > 0) {
|
|
86
|
+
errors.push(`Unbalanced parentheses: ${depth} unclosed`);
|
|
87
|
+
}
|
|
88
|
+
return { spec: cleaned };
|
|
89
|
+
}
|
|
90
|
+
function lintProlog(spec, fixes, errors) {
|
|
91
|
+
let cleaned = spec;
|
|
92
|
+
// Auto-fix: remove ?- query line (we extract it separately)
|
|
93
|
+
// Don't report this as a fix since buildSolverInput handles it
|
|
94
|
+
// Strip comments and strings for structural analysis
|
|
95
|
+
const stripped = cleaned
|
|
96
|
+
.replace(/%.*$/gm, "")
|
|
97
|
+
.replace(/\/\*[\s\S]*?\*\//g, "")
|
|
98
|
+
.replace(/"[^"]*"/g, '""')
|
|
99
|
+
.replace(/'[^']*'/g, "''")
|
|
100
|
+
.trim();
|
|
101
|
+
if (!stripped)
|
|
102
|
+
return { spec: cleaned };
|
|
103
|
+
// Check: at least one clause ending with a period
|
|
104
|
+
if (!stripped.includes(".")) {
|
|
105
|
+
errors.push("No clauses ending with a period (.) — all Prolog clauses must end with a period");
|
|
106
|
+
}
|
|
107
|
+
// Check: balanced parentheses
|
|
108
|
+
let depth = 0;
|
|
109
|
+
for (const ch of stripped) {
|
|
110
|
+
if (ch === '(')
|
|
111
|
+
depth++;
|
|
112
|
+
if (ch === ')')
|
|
113
|
+
depth--;
|
|
114
|
+
if (depth < 0) {
|
|
115
|
+
errors.push("Unmatched closing parenthesis");
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (depth > 0) {
|
|
120
|
+
errors.push(`Unbalanced parentheses: ${depth} unclosed`);
|
|
121
|
+
}
|
|
122
|
+
return { spec: cleaned };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/formalize/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { LLMAdapter, LLMMessage } from "./types.js";
|
|
2
|
+
export interface AnthropicConfig {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
model?: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
maxTokens?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class AnthropicAdapter implements LLMAdapter {
|
|
9
|
+
private apiKey;
|
|
10
|
+
private model;
|
|
11
|
+
private baseUrl;
|
|
12
|
+
private maxTokens;
|
|
13
|
+
constructor(config: AnthropicConfig);
|
|
14
|
+
complete(system: string, messages: LLMMessage[]): Promise<string>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create an LLM adapter from environment variables, or null if not configured.
|
|
18
|
+
*
|
|
19
|
+
* Supported providers (checked in order):
|
|
20
|
+
* ANTHROPIC_API_KEY → Anthropic (Claude)
|
|
21
|
+
* DEEPSEEK_API_KEY → DeepSeek
|
|
22
|
+
* OPENAI_API_KEY → OpenAI
|
|
23
|
+
*
|
|
24
|
+
* Override base URL with CHIASMUS_API_URL and model with CHIASMUS_MODEL.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createLLMFromEnv(): LLMAdapter | null;
|
|
27
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAOzD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,eAAe;IAO7B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAiCxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,GAAG,IAAI,CAmCpD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { OpenAICompatibleAdapter } from "./openai-compatible.js";
|
|
2
|
+
const DEFAULT_MODEL = "claude-sonnet-4-20250514";
|
|
3
|
+
const DEFAULT_URL = "https://api.anthropic.com/v1/messages";
|
|
4
|
+
const DEFAULT_MAX_TOKENS = 4096;
|
|
5
|
+
export class AnthropicAdapter {
|
|
6
|
+
apiKey;
|
|
7
|
+
model;
|
|
8
|
+
baseUrl;
|
|
9
|
+
maxTokens;
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.apiKey = config.apiKey;
|
|
12
|
+
this.model = config.model ?? DEFAULT_MODEL;
|
|
13
|
+
this.baseUrl = config.baseUrl ?? DEFAULT_URL;
|
|
14
|
+
this.maxTokens = config.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
15
|
+
}
|
|
16
|
+
async complete(system, messages) {
|
|
17
|
+
const body = {
|
|
18
|
+
model: this.model,
|
|
19
|
+
max_tokens: this.maxTokens,
|
|
20
|
+
system,
|
|
21
|
+
messages: messages.map((m) => ({
|
|
22
|
+
role: m.role,
|
|
23
|
+
content: m.content,
|
|
24
|
+
})),
|
|
25
|
+
};
|
|
26
|
+
const response = await fetch(this.baseUrl, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
headers: {
|
|
29
|
+
"Content-Type": "application/json",
|
|
30
|
+
"x-api-key": this.apiKey,
|
|
31
|
+
"anthropic-version": "2023-06-01",
|
|
32
|
+
},
|
|
33
|
+
body: JSON.stringify(body),
|
|
34
|
+
});
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
const text = await response.text();
|
|
37
|
+
throw new Error(`Anthropic API error ${response.status}: ${text}`);
|
|
38
|
+
}
|
|
39
|
+
const data = (await response.json());
|
|
40
|
+
const textBlock = data.content.find((b) => b.type === "text");
|
|
41
|
+
return textBlock?.text ?? "";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create an LLM adapter from environment variables, or null if not configured.
|
|
46
|
+
*
|
|
47
|
+
* Supported providers (checked in order):
|
|
48
|
+
* ANTHROPIC_API_KEY → Anthropic (Claude)
|
|
49
|
+
* DEEPSEEK_API_KEY → DeepSeek
|
|
50
|
+
* OPENAI_API_KEY → OpenAI
|
|
51
|
+
*
|
|
52
|
+
* Override base URL with CHIASMUS_API_URL and model with CHIASMUS_MODEL.
|
|
53
|
+
*/
|
|
54
|
+
export function createLLMFromEnv() {
|
|
55
|
+
const model = process.env.CHIASMUS_MODEL;
|
|
56
|
+
const customUrl = process.env.CHIASMUS_API_URL;
|
|
57
|
+
// Anthropic
|
|
58
|
+
const anthropicKey = process.env.ANTHROPIC_API_KEY;
|
|
59
|
+
if (anthropicKey) {
|
|
60
|
+
return new AnthropicAdapter({
|
|
61
|
+
apiKey: anthropicKey,
|
|
62
|
+
model,
|
|
63
|
+
baseUrl: customUrl,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// DeepSeek / OpenAI-compatible
|
|
67
|
+
const deepseekKey = process.env.DEEPSEEK_API_KEY;
|
|
68
|
+
if (deepseekKey) {
|
|
69
|
+
return new OpenAICompatibleAdapter({
|
|
70
|
+
apiKey: deepseekKey,
|
|
71
|
+
baseUrl: customUrl ?? "https://api.deepseek.com",
|
|
72
|
+
model: model ?? "deepseek-chat",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// OpenAI
|
|
76
|
+
const openaiKey = process.env.OPENAI_API_KEY;
|
|
77
|
+
if (openaiKey) {
|
|
78
|
+
return new OpenAICompatibleAdapter({
|
|
79
|
+
apiKey: openaiKey,
|
|
80
|
+
baseUrl: customUrl ?? "https://api.openai.com/v1",
|
|
81
|
+
model: model ?? "gpt-4o",
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { LLMAdapter, LLMMessage } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Mock LLM adapter for testing. Returns pre-configured responses
|
|
4
|
+
* based on pattern matching against the user message.
|
|
5
|
+
*/
|
|
6
|
+
export declare class MockLLMAdapter implements LLMAdapter {
|
|
7
|
+
responses: Array<{
|
|
8
|
+
pattern: RegExp;
|
|
9
|
+
response: string | (() => string);
|
|
10
|
+
}>;
|
|
11
|
+
private defaultResponse;
|
|
12
|
+
calls: Array<{
|
|
13
|
+
system: string;
|
|
14
|
+
messages: LLMMessage[];
|
|
15
|
+
}>;
|
|
16
|
+
constructor(defaultResponse?: string);
|
|
17
|
+
/** Register a response for messages matching a pattern */
|
|
18
|
+
onMatch(pattern: RegExp, response: string | (() => string)): this;
|
|
19
|
+
complete(system: string, messages: LLMMessage[]): Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/llm/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;KAAE,CAAC,CAAM;IAC9E,OAAO,CAAC,eAAe,CAAS;IACzB,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC,CAAM;gBAEzD,eAAe,SAAK;IAIhC,0DAA0D;IAC1D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,IAAI;IAK3D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAcxE"}
|
package/dist/llm/mock.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock LLM adapter for testing. Returns pre-configured responses
|
|
3
|
+
* based on pattern matching against the user message.
|
|
4
|
+
*/
|
|
5
|
+
export class MockLLMAdapter {
|
|
6
|
+
responses = [];
|
|
7
|
+
defaultResponse;
|
|
8
|
+
calls = [];
|
|
9
|
+
constructor(defaultResponse = "") {
|
|
10
|
+
this.defaultResponse = defaultResponse;
|
|
11
|
+
}
|
|
12
|
+
/** Register a response for messages matching a pattern */
|
|
13
|
+
onMatch(pattern, response) {
|
|
14
|
+
this.responses.push({ pattern, response });
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
async complete(system, messages) {
|
|
18
|
+
this.calls.push({ system, messages });
|
|
19
|
+
const lastUserMsg = messages.findLast((m) => m.role === "user")?.content ?? "";
|
|
20
|
+
const fullText = system + " " + lastUserMsg;
|
|
21
|
+
for (const entry of this.responses) {
|
|
22
|
+
if (entry.pattern.test(fullText)) {
|
|
23
|
+
return typeof entry.response === "function" ? entry.response() : entry.response;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return this.defaultResponse;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/llm/mock.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,cAAc;IACzB,SAAS,GAAkE,EAAE,CAAC;IACtE,eAAe,CAAS;IACzB,KAAK,GAAsD,EAAE,CAAC;IAErE,YAAY,eAAe,GAAG,EAAE;QAC9B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,0DAA0D;IAC1D,OAAO,CAAC,OAAe,EAAE,QAAiC;QACxD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,QAAsB;QACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEtC,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;QAC3F,MAAM,QAAQ,GAAG,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC;QAE5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,OAAO,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAClF,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LLMAdapter, LLMMessage } from "./types.js";
|
|
2
|
+
export interface OpenAICompatibleConfig {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
model: string;
|
|
6
|
+
maxTokens?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Adapter for OpenAI-compatible APIs (DeepSeek, OpenRouter, Ollama, etc.)
|
|
10
|
+
* Uses the standard /chat/completions format.
|
|
11
|
+
*/
|
|
12
|
+
export declare class OpenAICompatibleAdapter implements LLMAdapter {
|
|
13
|
+
private apiKey;
|
|
14
|
+
private baseUrl;
|
|
15
|
+
private model;
|
|
16
|
+
private maxTokens;
|
|
17
|
+
constructor(config: OpenAICompatibleConfig);
|
|
18
|
+
complete(system: string, messages: LLMMessage[]): Promise<string>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=openai-compatible.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../src/llm/openai-compatible.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIzD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,UAAU;IACxD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,sBAAsB;IAOpC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAkCxE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const DEFAULT_MAX_TOKENS = 4096;
|
|
2
|
+
/**
|
|
3
|
+
* Adapter for OpenAI-compatible APIs (DeepSeek, OpenRouter, Ollama, etc.)
|
|
4
|
+
* Uses the standard /chat/completions format.
|
|
5
|
+
*/
|
|
6
|
+
export class OpenAICompatibleAdapter {
|
|
7
|
+
apiKey;
|
|
8
|
+
baseUrl;
|
|
9
|
+
model;
|
|
10
|
+
maxTokens;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.apiKey = config.apiKey;
|
|
13
|
+
this.baseUrl = config.baseUrl.replace(/\/+$/, "");
|
|
14
|
+
this.model = config.model;
|
|
15
|
+
this.maxTokens = config.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
16
|
+
}
|
|
17
|
+
async complete(system, messages) {
|
|
18
|
+
const body = {
|
|
19
|
+
model: this.model,
|
|
20
|
+
max_tokens: this.maxTokens,
|
|
21
|
+
messages: [
|
|
22
|
+
{ role: "system", content: system },
|
|
23
|
+
...messages.map((m) => ({
|
|
24
|
+
role: m.role,
|
|
25
|
+
content: m.content,
|
|
26
|
+
})),
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
const url = `${this.baseUrl}/chat/completions`;
|
|
30
|
+
const response = await fetch(url, {
|
|
31
|
+
method: "POST",
|
|
32
|
+
headers: {
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify(body),
|
|
37
|
+
});
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
const text = await response.text();
|
|
40
|
+
throw new Error(`API error ${response.status}: ${text}`);
|
|
41
|
+
}
|
|
42
|
+
const data = (await response.json());
|
|
43
|
+
return data.choices?.[0]?.message?.content ?? "";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=openai-compatible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../src/llm/openai-compatible.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAShC;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAC1B,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,SAAS,CAAS;IAE1B,YAAY,MAA8B;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,QAAsB;QACnD,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAiB,EAAE,OAAO,EAAE,MAAM,EAAE;gBAC5C,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtB,IAAI,EAAE,CAAC,CAAC,IAA4B;oBACpC,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC,CAAC;aACJ;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,mBAAmB,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** A message in the LLM conversation */
|
|
2
|
+
export interface LLMMessage {
|
|
3
|
+
role: "user" | "assistant";
|
|
4
|
+
content: string;
|
|
5
|
+
}
|
|
6
|
+
/** Interface for LLM backends */
|
|
7
|
+
export interface LLMAdapter {
|
|
8
|
+
/** Generate a completion from a system prompt and messages */
|
|
9
|
+
complete(system: string, messages: LLMMessage[]): Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
+
import { SkillLibrary } from "./skills/library.js";
|
|
4
|
+
import { FormalizationEngine } from "./formalize/engine.js";
|
|
5
|
+
import type { LLMAdapter } from "./llm/types.js";
|
|
6
|
+
export declare function getChiasmusHome(): string;
|
|
7
|
+
export declare function createChiasmusServer(chiasmusHome?: string, llmOverride?: LLMAdapter | null): Promise<{
|
|
8
|
+
server: Server;
|
|
9
|
+
library: SkillLibrary;
|
|
10
|
+
formalizer: FormalizationEngine | null;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAiaD,wBAAsB,oBAAoB,CACxC,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,UAAU,GAAG,IAAI,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAA;CAAE,CAAC,CA+C5F"}
|