@aligndottech/cli 0.4.2 → 0.6.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/check.d.ts.map +1 -1
- package/dist/commands/check.js +35 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/local.d.ts.map +1 -1
- package/dist/commands/local.js +3 -4
- package/dist/commands/local.js.map +1 -1
- package/dist/commands/mcp.d.ts +195 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +10 -9
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.js +9 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +25 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-rules.d.ts +1 -0
- package/dist/lib/agent-rules.d.ts.map +1 -1
- package/dist/lib/agent-rules.js +27 -11
- package/dist/lib/agent-rules.js.map +1 -1
- package/dist/lib/gateway-client.d.ts +41 -1
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +17 -0
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +41 -9
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/local-llm.d.ts +16 -0
- package/dist/lib/local-llm.d.ts.map +1 -1
- package/dist/lib/local-llm.js +37 -16
- package/dist/lib/local-llm.js.map +1 -1
- package/dist/lib/local-relationship-classifier.d.ts +23 -3
- package/dist/lib/local-relationship-classifier.d.ts.map +1 -1
- package/dist/lib/local-relationship-classifier.js +24 -18
- package/dist/lib/local-relationship-classifier.js.map +1 -1
- package/dist/lib/mcp-setup.d.ts +2 -1
- package/dist/lib/mcp-setup.d.ts.map +1 -1
- package/dist/lib/mcp-setup.js +128 -24
- package/dist/lib/mcp-setup.js.map +1 -1
- package/dist/lib/value-rollup.d.ts +60 -0
- package/dist/lib/value-rollup.d.ts.map +1 -0
- package/dist/lib/value-rollup.js +78 -0
- package/dist/lib/value-rollup.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-gateway-client.js","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAM1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC,6EAA6E;AAC7E,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,2EAA2E;AAC3E,gDAAgD;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEjC,KAAK,UAAU,WAAW,CACxB,SAAuB,EACvB,IAAY,EACZ,SAAS,GAAG,GAAG,EACf,SAAkB;QAElB,MAAM,GAAG,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAClC,OAAO,GAAG;aACP,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;aACzF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"local-gateway-client.js","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/local-llm.d.ts
CHANGED
|
@@ -8,7 +8,23 @@ export interface CallChatOptions {
|
|
|
8
8
|
provider?: AiProvider;
|
|
9
9
|
apiKey?: string;
|
|
10
10
|
maxTokens?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Sampling temperature. Omit for the provider default; pass 0 for deterministic
|
|
13
|
+
* output (relationship classification, where the same pair must type the same
|
|
14
|
+
* way every run). See ALI-218.
|
|
15
|
+
*/
|
|
16
|
+
temperature?: number;
|
|
11
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Is any LLM provider configured by environment? (ALI-414)
|
|
20
|
+
*
|
|
21
|
+
* `callChat` returns null for a missing key, a timeout and a non-2xx alike, so a
|
|
22
|
+
* caller that needs to tell "never configured" from "configured but failed" has to
|
|
23
|
+
* ask first. Deliberately synchronous and env-only: it does NOT probe Ollama, so a
|
|
24
|
+
* machine whose only provider is a broken local Ollama reads as unconfigured. The
|
|
25
|
+
* remedy that points at - configure a provider - is still the right one.
|
|
26
|
+
*/
|
|
27
|
+
export declare function hasConfiguredProvider(): boolean;
|
|
12
28
|
/**
|
|
13
29
|
* Provider-agnostic chat call. Resolution order:
|
|
14
30
|
* 1. explicitly configured provider+key (e.g. from `align setup`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-llm.d.ts","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"local-llm.d.ts","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgND;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB;AAED,oGAAoG;AACpG,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAChE,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB"}
|
package/dist/lib/local-llm.js
CHANGED
|
@@ -8,7 +8,7 @@ function buildUserPrompt(question, decisions) {
|
|
|
8
8
|
// --- Provider adapters: each takes a generic (system, user) chat and returns text or null ---
|
|
9
9
|
// OpenAI-compatible Chat Completions API (OpenAI, Groq, Mistral, xAI/Grok, and any
|
|
10
10
|
// ALIGN_LLM_BASE_URL endpoint - OpenRouter, Together, DeepSeek, LM Studio, vLLM, ...).
|
|
11
|
-
async function tryOpenAiCompatible(system, user, endpoint, model, key, maxTokens = 256, timeoutMs = 15000) {
|
|
11
|
+
async function tryOpenAiCompatible(system, user, endpoint, model, key, maxTokens = 256, timeoutMs = 15000, temperature) {
|
|
12
12
|
try {
|
|
13
13
|
const res = await fetch(endpoint, {
|
|
14
14
|
method: 'POST',
|
|
@@ -19,6 +19,7 @@ async function tryOpenAiCompatible(system, user, endpoint, model, key, maxTokens
|
|
|
19
19
|
body: JSON.stringify({
|
|
20
20
|
model,
|
|
21
21
|
max_tokens: maxTokens,
|
|
22
|
+
...(temperature !== undefined ? { temperature } : {}),
|
|
22
23
|
messages: [
|
|
23
24
|
{ role: 'system', content: system },
|
|
24
25
|
{ role: 'user', content: user },
|
|
@@ -35,7 +36,7 @@ async function tryOpenAiCompatible(system, user, endpoint, model, key, maxTokens
|
|
|
35
36
|
return null;
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
|
-
async function tryAnthropic(system, user, key, maxTokens = 256) {
|
|
39
|
+
async function tryAnthropic(system, user, key, maxTokens = 256, temperature) {
|
|
39
40
|
try {
|
|
40
41
|
const res = await fetch('https://api.anthropic.com/v1/messages', {
|
|
41
42
|
method: 'POST',
|
|
@@ -47,6 +48,7 @@ async function tryAnthropic(system, user, key, maxTokens = 256) {
|
|
|
47
48
|
body: JSON.stringify({
|
|
48
49
|
model: process.env['ALIGN_ANTHROPIC_MODEL'] ?? 'claude-haiku-4-5-20251001',
|
|
49
50
|
max_tokens: maxTokens,
|
|
51
|
+
...(temperature !== undefined ? { temperature } : {}),
|
|
50
52
|
system,
|
|
51
53
|
messages: [{ role: 'user', content: user }],
|
|
52
54
|
}),
|
|
@@ -61,7 +63,7 @@ async function tryAnthropic(system, user, key, maxTokens = 256) {
|
|
|
61
63
|
return null;
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
|
-
async function tryGemini(system, user, key, maxTokens = 256) {
|
|
66
|
+
async function tryGemini(system, user, key, maxTokens = 256, temperature) {
|
|
65
67
|
try {
|
|
66
68
|
const geminiModel = process.env['ALIGN_GEMINI_MODEL'] ?? 'gemini-1.5-flash';
|
|
67
69
|
const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${geminiModel}:generateContent?key=${key}`, {
|
|
@@ -70,7 +72,10 @@ async function tryGemini(system, user, key, maxTokens = 256) {
|
|
|
70
72
|
body: JSON.stringify({
|
|
71
73
|
systemInstruction: { parts: [{ text: system }] },
|
|
72
74
|
contents: [{ parts: [{ text: user }] }],
|
|
73
|
-
generationConfig: {
|
|
75
|
+
generationConfig: {
|
|
76
|
+
maxOutputTokens: maxTokens,
|
|
77
|
+
...(temperature !== undefined ? { temperature } : {}),
|
|
78
|
+
},
|
|
74
79
|
}),
|
|
75
80
|
signal: AbortSignal.timeout(15000),
|
|
76
81
|
});
|
|
@@ -83,7 +88,7 @@ async function tryGemini(system, user, key, maxTokens = 256) {
|
|
|
83
88
|
return null;
|
|
84
89
|
}
|
|
85
90
|
}
|
|
86
|
-
async function tryOllama(system, user) {
|
|
91
|
+
async function tryOllama(system, user, temperature) {
|
|
87
92
|
const host = process.env['OLLAMA_HOST'] ?? 'http://localhost:11434';
|
|
88
93
|
let model;
|
|
89
94
|
try {
|
|
@@ -107,6 +112,7 @@ async function tryOllama(system, user) {
|
|
|
107
112
|
body: JSON.stringify({
|
|
108
113
|
model,
|
|
109
114
|
stream: false,
|
|
115
|
+
...(temperature !== undefined ? { options: { temperature } } : {}),
|
|
110
116
|
messages: [
|
|
111
117
|
{ role: 'system', content: system },
|
|
112
118
|
{ role: 'user', content: user },
|
|
@@ -138,23 +144,37 @@ function keyForProvider(provider) {
|
|
|
138
144
|
case 'grok': return process.env['GROK_API_KEY'] ?? process.env['XAI_API_KEY'];
|
|
139
145
|
}
|
|
140
146
|
}
|
|
141
|
-
async function callProvider(provider, key, system, user, maxTokens) {
|
|
147
|
+
async function callProvider(provider, key, system, user, maxTokens, temperature) {
|
|
142
148
|
switch (provider) {
|
|
143
149
|
case 'anthropic':
|
|
144
|
-
return tryAnthropic(system, user, key, maxTokens);
|
|
150
|
+
return tryAnthropic(system, user, key, maxTokens, temperature);
|
|
145
151
|
case 'openai':
|
|
146
|
-
return tryOpenAiCompatible(system, user, 'https://api.openai.com/v1/chat/completions', process.env['ALIGN_OPENAI_MODEL'] ?? 'gpt-4o-mini', key, maxTokens);
|
|
152
|
+
return tryOpenAiCompatible(system, user, 'https://api.openai.com/v1/chat/completions', process.env['ALIGN_OPENAI_MODEL'] ?? 'gpt-4o-mini', key, maxTokens, undefined, temperature);
|
|
147
153
|
case 'gemini':
|
|
148
|
-
return tryGemini(system, user, key, maxTokens);
|
|
154
|
+
return tryGemini(system, user, key, maxTokens, temperature);
|
|
149
155
|
case 'groq':
|
|
150
|
-
return tryOpenAiCompatible(system, user, 'https://api.groq.com/openai/v1/chat/completions', process.env['ALIGN_GROQ_MODEL'] ?? 'llama-3.1-8b-instant', key, maxTokens);
|
|
156
|
+
return tryOpenAiCompatible(system, user, 'https://api.groq.com/openai/v1/chat/completions', process.env['ALIGN_GROQ_MODEL'] ?? 'llama-3.1-8b-instant', key, maxTokens, undefined, temperature);
|
|
151
157
|
case 'mistral':
|
|
152
|
-
return tryOpenAiCompatible(system, user, 'https://api.mistral.ai/v1/chat/completions', process.env['ALIGN_MISTRAL_MODEL'] ?? 'mistral-small-latest', key, maxTokens);
|
|
158
|
+
return tryOpenAiCompatible(system, user, 'https://api.mistral.ai/v1/chat/completions', process.env['ALIGN_MISTRAL_MODEL'] ?? 'mistral-small-latest', key, maxTokens, undefined, temperature);
|
|
153
159
|
case 'grok':
|
|
154
|
-
return tryOpenAiCompatible(system, user, 'https://api.x.ai/v1/chat/completions', process.env['ALIGN_GROK_MODEL'] ?? 'grok-2-latest', key, maxTokens);
|
|
160
|
+
return tryOpenAiCompatible(system, user, 'https://api.x.ai/v1/chat/completions', process.env['ALIGN_GROK_MODEL'] ?? 'grok-2-latest', key, maxTokens, undefined, temperature);
|
|
155
161
|
}
|
|
156
162
|
}
|
|
157
163
|
const ALL_PROVIDERS = ['anthropic', 'openai', 'gemini', 'groq', 'mistral', 'grok'];
|
|
164
|
+
/**
|
|
165
|
+
* Is any LLM provider configured by environment? (ALI-414)
|
|
166
|
+
*
|
|
167
|
+
* `callChat` returns null for a missing key, a timeout and a non-2xx alike, so a
|
|
168
|
+
* caller that needs to tell "never configured" from "configured but failed" has to
|
|
169
|
+
* ask first. Deliberately synchronous and env-only: it does NOT probe Ollama, so a
|
|
170
|
+
* machine whose only provider is a broken local Ollama reads as unconfigured. The
|
|
171
|
+
* remedy that points at - configure a provider - is still the right one.
|
|
172
|
+
*/
|
|
173
|
+
export function hasConfiguredProvider() {
|
|
174
|
+
if (process.env['ALIGN_LLM_BASE_URL'])
|
|
175
|
+
return true;
|
|
176
|
+
return ALL_PROVIDERS.some(p => Boolean(keyForProvider(p)));
|
|
177
|
+
}
|
|
158
178
|
/**
|
|
159
179
|
* Provider-agnostic chat call. Resolution order:
|
|
160
180
|
* 1. explicitly configured provider+key (e.g. from `align setup`)
|
|
@@ -166,9 +186,10 @@ const ALL_PROVIDERS = ['anthropic', 'openai', 'gemini', 'groq', 'mistral', 'grok
|
|
|
166
186
|
*/
|
|
167
187
|
export async function callChat(system, user, opts) {
|
|
168
188
|
const maxTokens = opts?.maxTokens;
|
|
189
|
+
const temperature = opts?.temperature;
|
|
169
190
|
// 1. configured provider (from align setup) takes priority
|
|
170
191
|
if (opts?.provider && opts.apiKey) {
|
|
171
|
-
const result = await callProvider(opts.provider, opts.apiKey, system, user, maxTokens);
|
|
192
|
+
const result = await callProvider(opts.provider, opts.apiKey, system, user, maxTokens, temperature);
|
|
172
193
|
if (result)
|
|
173
194
|
return result;
|
|
174
195
|
}
|
|
@@ -177,7 +198,7 @@ export async function callChat(system, user, opts) {
|
|
|
177
198
|
if (baseUrl) {
|
|
178
199
|
const key = process.env['ALIGN_LLM_API_KEY'] ?? '';
|
|
179
200
|
const model = process.env['ALIGN_LLM_MODEL'] ?? 'gpt-4o-mini';
|
|
180
|
-
const result = await tryOpenAiCompatible(system, user, chatCompletionsUrl(baseUrl), model, key, maxTokens);
|
|
201
|
+
const result = await tryOpenAiCompatible(system, user, chatCompletionsUrl(baseUrl), model, key, maxTokens, undefined, temperature);
|
|
181
202
|
if (result)
|
|
182
203
|
return result;
|
|
183
204
|
}
|
|
@@ -187,13 +208,13 @@ export async function callChat(system, user, opts) {
|
|
|
187
208
|
continue; // already tried above
|
|
188
209
|
const key = keyForProvider(provider);
|
|
189
210
|
if (key) {
|
|
190
|
-
const result = await callProvider(provider, key, system, user, maxTokens);
|
|
211
|
+
const result = await callProvider(provider, key, system, user, maxTokens, temperature);
|
|
191
212
|
if (result)
|
|
192
213
|
return result;
|
|
193
214
|
}
|
|
194
215
|
}
|
|
195
216
|
// 4. local Ollama as last resort
|
|
196
|
-
return tryOllama(system, user);
|
|
217
|
+
return tryOllama(system, user, temperature);
|
|
197
218
|
}
|
|
198
219
|
/** Synthesise a natural-language answer from retrieved decisions, using any configured provider. */
|
|
199
220
|
export async function synthesiseLocally(question, decisions, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-llm.js","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-llm.js","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
1
|
+
import { type DecisionRelationship } from '@aligndottech/connector-core';
|
|
2
|
+
export declare const RELATIONSHIP_TYPES: readonly ["supersedes", "conflicts_with", "contradicts", "duplicates", "clarifies", "relates", "refines", "supports", "questions", "blocks"];
|
|
3
|
+
export type RelationshipType = DecisionRelationship;
|
|
3
4
|
export interface ClassifiedRelationship {
|
|
4
5
|
type: RelationshipType;
|
|
5
6
|
confidence: number;
|
|
6
7
|
reason?: string;
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Why a candidate edge could not be typed. Only distinctions the code can actually
|
|
11
|
+
* make: `callChat` cannot tell a timeout from a 429 from an empty body, so there is
|
|
12
|
+
* deliberately no `classifier_timeout`.
|
|
13
|
+
*/
|
|
14
|
+
export type ClassifierFailureReason =
|
|
15
|
+
/** Nothing to call: no provider key in the environment, no local Ollama. */
|
|
16
|
+
'no_llm_key'
|
|
17
|
+
/** A provider IS configured and the call did not come back usable. */
|
|
18
|
+
| 'classifier_error'
|
|
19
|
+
/** The model replied, but with no JSON or a type outside the canonical vocabulary. */
|
|
20
|
+
| 'classifier_unparseable';
|
|
21
|
+
export type ClassificationOutcome = {
|
|
22
|
+
ok: true;
|
|
23
|
+
relationship: ClassifiedRelationship;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
reason: ClassifierFailureReason;
|
|
27
|
+
};
|
|
8
28
|
interface DecisionLite {
|
|
9
29
|
title: string;
|
|
10
30
|
summary: string;
|
|
11
31
|
}
|
|
12
|
-
export declare function classifyRelationship(subject: DecisionLite, candidate: DecisionLite): Promise<
|
|
32
|
+
export declare function classifyRelationship(subject: DecisionLite, candidate: DecisionLite): Promise<ClassificationOutcome>;
|
|
13
33
|
export {};
|
|
14
34
|
//# sourceMappingURL=local-relationship-classifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-relationship-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/local-relationship-classifier.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-relationship-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/local-relationship-classifier.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,8BAA8B,CAAC;AAOtC,eAAO,MAAM,kBAAkB,8IAAyB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB;AACjC,4EAA4E;AAC1E,YAAY;AACd,sEAAsE;GACpE,kBAAkB;AACpB,sFAAsF;GACpF,wBAAwB,CAAC;AAE7B,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,sBAAsB,CAAA;CAAE,GAClD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAYD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,qBAAqB,CAAC,CAYhC"}
|
|
@@ -1,31 +1,36 @@
|
|
|
1
1
|
// Stage 2 of local relationship detection: type a candidate edge (found cheaply
|
|
2
2
|
// via embeddings) using an LLM with the user's OWN key. Embedding similarity says
|
|
3
3
|
// two decisions are related; only an LLM reading both can say HOW (the taxonomy).
|
|
4
|
-
// Returns null when no key is configured, so callers degrade to an untyped edge.
|
|
5
4
|
// Uses the shared provider-agnostic resolver in local-llm.ts (any provider).
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
];
|
|
5
|
+
//
|
|
6
|
+
// ALI-414: when classification cannot happen this reports WHY. It previously
|
|
7
|
+
// returned a bare null for all three causes, and the caller - unable to tell them
|
|
8
|
+
// apart, or apart from "classified, no conflict" - reported `aligned`.
|
|
9
|
+
import { DECISION_RELATIONSHIPS, DETERMINISTIC_TEMPERATURE, isDecisionRelationship, } from '@aligndottech/connector-core';
|
|
10
|
+
import { callChat, hasConfiguredProvider } from './local-llm.js';
|
|
11
|
+
// ALI-219: the canonical decision-graph vocabulary is the single source of truth
|
|
12
|
+
// (connector-core). The local classifier must only emit types the graph accepts,
|
|
13
|
+
// or a local edge is invalid on personal->org sync. Re-exported for callers/tests.
|
|
14
|
+
export const RELATIONSHIP_TYPES = DECISION_RELATIONSHIPS;
|
|
17
15
|
const SYSTEM_PROMPT = "You classify how decision B relates to decision A in a software team's decision graph. " +
|
|
18
16
|
`Respond ONLY with compact JSON: {"type": one of [${RELATIONSHIP_TYPES.join(', ')}], "confidence": number 0-1, "reason": short string}. ` +
|
|
19
17
|
'Use "conflicts_with" or "contradicts" ONLY when B genuinely opposes A - high textual similarity alone is NOT a conflict ' +
|
|
20
|
-
'(two decisions about the same topic often agree). Use "supersedes" when B replaces A, "
|
|
18
|
+
'(two decisions about the same topic often agree). Use "supersedes" when B replaces A, "relates" when merely related.';
|
|
21
19
|
function buildUserPrompt(a, b) {
|
|
22
20
|
return `Decision A: ${a.title}. ${a.summary}\n\nDecision B: ${b.title}. ${b.summary}`;
|
|
23
21
|
}
|
|
24
22
|
export async function classifyRelationship(subject, candidate) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
// ALI-218/219: pin the shared deterministic temperature so the same decision
|
|
24
|
+
// pair types the same way every run - offline relationship detection must be
|
|
25
|
+
// deterministic, and the value is the one both paths share (connector-core).
|
|
26
|
+
const raw = await callChat(SYSTEM_PROMPT, buildUserPrompt(subject, candidate), {
|
|
27
|
+
temperature: DETERMINISTIC_TEMPERATURE,
|
|
28
|
+
});
|
|
29
|
+
if (!raw) {
|
|
30
|
+
return { ok: false, reason: hasConfiguredProvider() ? 'classifier_error' : 'no_llm_key' };
|
|
31
|
+
}
|
|
32
|
+
const relationship = parseRelationship(raw);
|
|
33
|
+
return relationship ? { ok: true, relationship } : { ok: false, reason: 'classifier_unparseable' };
|
|
29
34
|
}
|
|
30
35
|
function parseRelationship(text) {
|
|
31
36
|
const match = text.match(/\{[\s\S]*\}/);
|
|
@@ -33,7 +38,8 @@ function parseRelationship(text) {
|
|
|
33
38
|
return null;
|
|
34
39
|
try {
|
|
35
40
|
const obj = JSON.parse(match[0]);
|
|
36
|
-
|
|
41
|
+
// Drop anything outside the canonical vocabulary (the graph would reject it).
|
|
42
|
+
if (!isDecisionRelationship(obj.type))
|
|
37
43
|
return null;
|
|
38
44
|
const confidence = typeof obj.confidence === 'number' ? Math.max(0, Math.min(1, obj.confidence)) : 0.5;
|
|
39
45
|
const result = { type: obj.type, confidence };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-relationship-classifier.js","sourceRoot":"","sources":["../../src/lib/local-relationship-classifier.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kFAAkF;AAClF,kFAAkF;AAClF,
|
|
1
|
+
{"version":3,"file":"local-relationship-classifier.js","sourceRoot":"","sources":["../../src/lib/local-relationship-classifier.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kFAAkF;AAClF,kFAAkF;AAClF,6EAA6E;AAC7E,EAAE;AACF,6EAA6E;AAC7E,kFAAkF;AAClF,uEAAuE;AAEvE,OAAO,EACL,sBAAsB,EAEtB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEjE,iFAAiF;AACjF,iFAAiF;AACjF,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAgCzD,MAAM,aAAa,GACjB,yFAAyF;IACzF,oDAAoD,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD;IACzI,0HAA0H;IAC1H,sHAAsH,CAAC;AAEzH,SAAS,eAAe,CAAC,CAAe,EAAE,CAAe;IACvD,OAAO,eAAe,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,mBAAmB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAqB,EACrB,SAAuB;IAEvB,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;QAC7E,WAAW,EAAE,yBAAyB;KACvC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IAC5F,CAAC;IACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;AACrG,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAA+D,CAAC;QAC/F,8EAA8E;QAC9E,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACvG,MAAM,MAAM,GAA2B,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;QACtE,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3F,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/lib/mcp-setup.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
export type McpFormat = 'mcpServers' | 'vscode' | 'zed' | 'codex';
|
|
1
2
|
export interface EditorTarget {
|
|
2
3
|
name: string;
|
|
3
4
|
configPath: string;
|
|
4
|
-
|
|
5
|
+
format: McpFormat;
|
|
5
6
|
}
|
|
6
7
|
export declare function detectEditors(): EditorTarget[];
|
|
7
8
|
export declare function writeMcpConfig(target: EditorTarget, env?: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-setup.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-setup.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;CACnB;AAqCD,wBAAgB,aAAa,IAAI,YAAY,EAAE,CA8D9C;AA8ED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAMvE"}
|
package/dist/lib/mcp-setup.js
CHANGED
|
@@ -1,8 +1,38 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
-
function
|
|
5
|
-
return env ?
|
|
4
|
+
function alignArgs(env) {
|
|
5
|
+
return env ? ['mcp', '--env', env] : ['mcp'];
|
|
6
|
+
}
|
|
7
|
+
// The per-format entry shape for the `align` server. VS Code requires `type`;
|
|
8
|
+
// Zed silently drops entries without `source: "custom"`.
|
|
9
|
+
function alignServerEntry(format, env) {
|
|
10
|
+
const args = alignArgs(env);
|
|
11
|
+
switch (format) {
|
|
12
|
+
case 'vscode':
|
|
13
|
+
return { type: 'stdio', command: 'align', args };
|
|
14
|
+
case 'zed':
|
|
15
|
+
return { source: 'custom', command: 'align', args };
|
|
16
|
+
default:
|
|
17
|
+
return { command: 'align', args };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function jsonTopKey(format) {
|
|
21
|
+
switch (format) {
|
|
22
|
+
case 'vscode':
|
|
23
|
+
return 'servers';
|
|
24
|
+
case 'zed':
|
|
25
|
+
return 'context_servers';
|
|
26
|
+
default:
|
|
27
|
+
return 'mcpServers';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function vscodeUserDir(home) {
|
|
31
|
+
if (process.platform === 'darwin')
|
|
32
|
+
return path.join(home, 'Library', 'Application Support', 'Code', 'User');
|
|
33
|
+
if (process.platform === 'win32')
|
|
34
|
+
return path.join(process.env['APPDATA'] ?? home, 'Code', 'User');
|
|
35
|
+
return path.join(home, '.config', 'Code', 'User');
|
|
6
36
|
}
|
|
7
37
|
export function detectEditors() {
|
|
8
38
|
const home = os.homedir();
|
|
@@ -22,46 +52,120 @@ export function detectEditors() {
|
|
|
22
52
|
found.push({
|
|
23
53
|
name: 'Claude Desktop',
|
|
24
54
|
configPath: path.join(claudeDesktopDir, 'claude_desktop_config.json'),
|
|
25
|
-
|
|
55
|
+
format: 'mcpServers',
|
|
26
56
|
});
|
|
27
57
|
}
|
|
28
58
|
// Claude Code (global ~/.claude.json)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
found.push({
|
|
32
|
-
name: 'Claude Code',
|
|
33
|
-
configPath: claudeCodeConfig,
|
|
34
|
-
configKey: 'mcpServers',
|
|
35
|
-
});
|
|
59
|
+
if (existsSync(path.join(home, '.claude.json'))) {
|
|
60
|
+
found.push({ name: 'Claude Code', configPath: path.join(home, '.claude.json'), format: 'mcpServers' });
|
|
36
61
|
}
|
|
37
62
|
// Cursor (~/.cursor/mcp.json)
|
|
38
|
-
|
|
39
|
-
|
|
63
|
+
if (existsSync(path.join(home, '.cursor'))) {
|
|
64
|
+
found.push({ name: 'Cursor', configPath: path.join(home, '.cursor', 'mcp.json'), format: 'mcpServers' });
|
|
65
|
+
}
|
|
66
|
+
// Windsurf (~/.codeium/windsurf/mcp_config.json)
|
|
67
|
+
if (existsSync(path.join(home, '.codeium', 'windsurf'))) {
|
|
40
68
|
found.push({
|
|
41
|
-
name: '
|
|
42
|
-
configPath: path.join(
|
|
43
|
-
|
|
69
|
+
name: 'Windsurf',
|
|
70
|
+
configPath: path.join(home, '.codeium', 'windsurf', 'mcp_config.json'),
|
|
71
|
+
format: 'mcpServers',
|
|
44
72
|
});
|
|
45
73
|
}
|
|
74
|
+
// VS Code (Copilot) - user-profile mcp.json, top-level `servers`, entry needs type:stdio
|
|
75
|
+
const vscodeDir = vscodeUserDir(home);
|
|
76
|
+
if (existsSync(vscodeDir)) {
|
|
77
|
+
found.push({ name: 'VS Code', configPath: path.join(vscodeDir, 'mcp.json'), format: 'vscode' });
|
|
78
|
+
}
|
|
79
|
+
// Zed (~/.config/zed/settings.json, `context_servers`)
|
|
80
|
+
if (existsSync(path.join(home, '.config', 'zed'))) {
|
|
81
|
+
found.push({ name: 'Zed', configPath: path.join(home, '.config', 'zed', 'settings.json'), format: 'zed' });
|
|
82
|
+
}
|
|
83
|
+
// OpenAI Codex CLI (~/.codex/config.toml)
|
|
84
|
+
if (existsSync(path.join(home, '.codex'))) {
|
|
85
|
+
found.push({ name: 'Codex', configPath: path.join(home, '.codex', 'config.toml'), format: 'codex' });
|
|
86
|
+
}
|
|
87
|
+
// Gemini CLI (~/.gemini/settings.json, `mcpServers`)
|
|
88
|
+
if (existsSync(path.join(home, '.gemini'))) {
|
|
89
|
+
found.push({ name: 'Gemini CLI', configPath: path.join(home, '.gemini', 'settings.json'), format: 'mcpServers' });
|
|
90
|
+
}
|
|
46
91
|
return found;
|
|
47
92
|
}
|
|
48
|
-
|
|
49
|
-
|
|
93
|
+
// Codex uses TOML, not JSON. We manage only the `align` table via a marker-delimited
|
|
94
|
+
// block (the same idempotent pattern as the CLAUDE.md nudge) so re-runs replace it
|
|
95
|
+
// cleanly and the rest of config.toml - other servers, settings - is preserved.
|
|
96
|
+
const CODEX_BLOCK_START = '# >>> align (managed by `align setup` - do not edit) >>>';
|
|
97
|
+
const CODEX_BLOCK_END = '# <<< align <<<';
|
|
98
|
+
function codexBlock(env) {
|
|
99
|
+
const args = alignArgs(env).map((a) => `"${a}"`).join(', ');
|
|
100
|
+
return [
|
|
101
|
+
CODEX_BLOCK_START,
|
|
102
|
+
'[mcp_servers.align]',
|
|
103
|
+
'command = "align"',
|
|
104
|
+
`args = [${args}]`,
|
|
105
|
+
CODEX_BLOCK_END,
|
|
106
|
+
].join('\n');
|
|
107
|
+
}
|
|
108
|
+
function readConfig(configPath, format) {
|
|
50
109
|
try {
|
|
51
|
-
|
|
110
|
+
return readFileSync(configPath, 'utf8');
|
|
52
111
|
}
|
|
53
112
|
catch (err) {
|
|
54
113
|
if (err.code !== 'ENOENT') {
|
|
55
|
-
|
|
114
|
+
// JSON formats fail loudly on a corrupt file so we never clobber it; TOML is
|
|
115
|
+
// edited as text so a read error there is genuinely just a missing file.
|
|
116
|
+
if (format !== 'codex') {
|
|
117
|
+
throw new Error(`${configPath} contains invalid JSON - fix it manually before running align mcp --setup`);
|
|
118
|
+
}
|
|
56
119
|
}
|
|
120
|
+
return '';
|
|
57
121
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (!existsSync(dir)) {
|
|
122
|
+
}
|
|
123
|
+
function ensureDir(configPath) {
|
|
124
|
+
const dir = path.dirname(configPath);
|
|
125
|
+
if (!existsSync(dir))
|
|
63
126
|
mkdirSync(dir, { recursive: true });
|
|
127
|
+
}
|
|
128
|
+
function writeCodexConfig(configPath, env) {
|
|
129
|
+
const existing = readConfig(configPath, 'codex');
|
|
130
|
+
const block = codexBlock(env);
|
|
131
|
+
let content;
|
|
132
|
+
const start = existing.indexOf(CODEX_BLOCK_START);
|
|
133
|
+
const end = existing.indexOf(CODEX_BLOCK_END);
|
|
134
|
+
if (start !== -1 && end !== -1 && end > start) {
|
|
135
|
+
content = `${existing.slice(0, start)}${block}${existing.slice(end + CODEX_BLOCK_END.length)}`;
|
|
136
|
+
}
|
|
137
|
+
else if (existing.trim()) {
|
|
138
|
+
content = `${existing.replace(/\s*$/, '')}\n\n${block}\n`;
|
|
64
139
|
}
|
|
140
|
+
else {
|
|
141
|
+
content = `${block}\n`;
|
|
142
|
+
}
|
|
143
|
+
ensureDir(configPath);
|
|
144
|
+
writeFileSync(configPath, content, 'utf8');
|
|
145
|
+
}
|
|
146
|
+
function writeJsonConfig(target, env) {
|
|
147
|
+
const raw = readConfig(target.configPath, target.format);
|
|
148
|
+
let existing = {};
|
|
149
|
+
if (raw.trim()) {
|
|
150
|
+
try {
|
|
151
|
+
existing = JSON.parse(raw);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
throw new Error(`${target.configPath} contains invalid JSON - fix it manually before running align mcp --setup`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const key = jsonTopKey(target.format);
|
|
158
|
+
const servers = (existing[key] ?? {});
|
|
159
|
+
servers['align'] = alignServerEntry(target.format, env);
|
|
160
|
+
existing[key] = servers;
|
|
161
|
+
ensureDir(target.configPath);
|
|
65
162
|
writeFileSync(target.configPath, JSON.stringify(existing, null, 2), 'utf8');
|
|
66
163
|
}
|
|
164
|
+
export function writeMcpConfig(target, env) {
|
|
165
|
+
if (target.format === 'codex') {
|
|
166
|
+
writeCodexConfig(target.configPath, env);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
writeJsonConfig(target, env);
|
|
170
|
+
}
|
|
67
171
|
//# sourceMappingURL=mcp-setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"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"}
|