@aligndottech/cli 0.3.0 → 0.4.1
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 +22 -5
- package/dist/commands/check.js +2 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +52 -54
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/search.js +1 -1
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +14 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/why.js +1 -1
- package/dist/commands/why.js.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +15 -1
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/local-db.d.ts.map +1 -1
- package/dist/lib/local-db.js +8 -0
- package/dist/lib/local-db.js.map +1 -1
- package/dist/lib/local-embeddings.d.ts.map +1 -1
- package/dist/lib/local-embeddings.js +21 -2
- package/dist/lib/local-embeddings.js.map +1 -1
- package/dist/lib/local-gateway-client.d.ts +5 -40
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +33 -15
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/local-llm.d.ts +18 -1
- package/dist/lib/local-llm.d.ts.map +1 -1
- package/dist/lib/local-llm.js +66 -32
- package/dist/lib/local-llm.js.map +1 -1
- package/dist/lib/local-relationship-classifier.d.ts.map +1 -1
- package/dist/lib/local-relationship-classifier.js +3 -55
- package/dist/lib/local-relationship-classifier.js.map +1 -1
- package/dist/lib/login-flow.d.ts.map +1 -1
- package/dist/lib/login-flow.js +12 -2
- package/dist/lib/login-flow.js.map +1 -1
- package/dist/lib/resolve-env.d.ts +3 -1
- package/dist/lib/resolve-env.d.ts.map +1 -1
- package/dist/lib/resolve-env.js +17 -2
- package/dist/lib/resolve-env.js.map +1 -1
- package/package.json +20 -2
package/dist/lib/git.js
CHANGED
|
@@ -16,7 +16,21 @@ export async function getCommitHistory(opts) {
|
|
|
16
16
|
args.push(`--after=${opts.from}`);
|
|
17
17
|
if (opts.to)
|
|
18
18
|
args.push(`--before=${opts.to}`);
|
|
19
|
-
|
|
19
|
+
let stdout;
|
|
20
|
+
try {
|
|
21
|
+
({ stdout } = await execa('git', ['log', ...args]));
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
// A freshly initialised repo with no commits makes `git log` exit 128
|
|
25
|
+
// ("does not have any commits yet"). Return [] so `align import git` /
|
|
26
|
+
// `align setup` degrade to "0 commits" instead of crashing on first run.
|
|
27
|
+
// Other git failures (e.g. a bad --branch) still surface.
|
|
28
|
+
const e = err;
|
|
29
|
+
if (e.exitCode === 128 && /does not have any commits|bad default revision/i.test(e.stderr ?? '')) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
20
34
|
const commits = [];
|
|
21
35
|
let sha = '', subject = '', author = '', date = '';
|
|
22
36
|
let files = [];
|
package/dist/lib/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAW9B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAKtC;IACC,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,MAAM,GAAG,SAAS,GAAG,EAAE,CAAC;IAE9B,kEAAkE;IAClE,0EAA0E;IAC1E,MAAM,IAAI,GAAG;QACX,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK;QACnD,aAAa;QACb,aAAa;QACb,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;KAChC,CAAC;IACF,IAAI,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9C,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-db.d.ts","sourceRoot":"","sources":["../../src/lib/local-db.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-db.d.ts","sourceRoot":"","sources":["../../src/lib/local-db.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AA2BD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM;wBAYpB;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;qBAQ1F,WAAW,EAAE;wBAMV,MAAM,GAAG,WAAW,GAAG,IAAI;6BAMtB,MAAM,aAAa,YAAY,GAAG,IAAI;6BAMtC,MAAM,GAAG,YAAY,GAAG,IAAI;wBAQjC,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,CAAA;KAAE,CAAC;qBAUzD;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;uBAMjF;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,EAAE;gBAQ7D,OAAO;eAOR,IAAI;aAIN,IAAI;EAIhB;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
package/dist/lib/local-db.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import Database from 'better-sqlite3';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { mkdirSync } from 'node:fs';
|
|
4
|
+
import { dirname } from 'node:path';
|
|
3
5
|
const SCHEMA = `
|
|
4
6
|
CREATE TABLE IF NOT EXISTS decisions (
|
|
5
7
|
id TEXT PRIMARY KEY,
|
|
@@ -25,6 +27,12 @@ CREATE TABLE IF NOT EXISTS decision_links (
|
|
|
25
27
|
);
|
|
26
28
|
`;
|
|
27
29
|
export function createLocalDb(dbPath) {
|
|
30
|
+
// better-sqlite3 creates the DB file but not its parent directory, so on a clean
|
|
31
|
+
// machine (~/.config/align-cli absent) `align setup --local` crashed with "unable
|
|
32
|
+
// to open database file". Create the directory first. ':memory:' has no parent.
|
|
33
|
+
if (dbPath !== ':memory:') {
|
|
34
|
+
mkdirSync(dirname(dbPath), { recursive: true });
|
|
35
|
+
}
|
|
28
36
|
const db = new Database(dbPath);
|
|
29
37
|
db.pragma('journal_mode = WAL');
|
|
30
38
|
db.exec(SCHEMA);
|
package/dist/lib/local-db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-db.js","sourceRoot":"","sources":["../../src/lib/local-db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"local-db.js","sourceRoot":"","sources":["../../src/lib/local-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-embeddings.d.ts","sourceRoot":"","sources":["../../src/lib/local-embeddings.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"local-embeddings.d.ts","sourceRoot":"","sources":["../../src/lib/local-embeddings.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA4BtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CASzE"}
|
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
let _pipe = null;
|
|
2
2
|
export async function getEmbedding(text) {
|
|
3
3
|
if (!_pipe) {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
let mod;
|
|
5
|
+
try {
|
|
6
|
+
// @xenova/transformers is an optionalDependency - its native deps (sharp,
|
|
7
|
+
// onnxruntime) can fail to install on Alpine/ARM/behind a proxy. If it's
|
|
8
|
+
// missing, point the user at cloud mode rather than a raw "Cannot find module".
|
|
9
|
+
mod = (await import('@xenova/transformers'));
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
throw new Error('Local mode needs the on-device embedding model (@xenova/transformers), which is not installed on this platform. ' +
|
|
13
|
+
'Use cloud mode (`align login`), or reinstall on a supported platform (macOS, glibc Linux, or Windows x64/arm64). ' +
|
|
14
|
+
`(${err.message})`);
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
// First call downloads the ~90MB model from the Hugging Face Hub.
|
|
18
|
+
_pipe = (await mod.pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2'));
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
throw new Error('Could not load the local embedding model (~90MB, Xenova/all-MiniLM-L6-v2). ' +
|
|
22
|
+
'Check your internet connection or proxy and try again. ' +
|
|
23
|
+
`(${err.message})`);
|
|
24
|
+
}
|
|
6
25
|
}
|
|
7
26
|
const output = await _pipe(text, { pooling: 'mean', normalize: true });
|
|
8
27
|
return output[0].data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-embeddings.js","sourceRoot":"","sources":["../../src/lib/local-embeddings.ts"],"names":[],"mappings":"AACA,IAAI,KAAK,GAA6B,IAAI,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,
|
|
1
|
+
{"version":3,"file":"local-embeddings.js","sourceRoot":"","sources":["../../src/lib/local-embeddings.ts"],"names":[],"mappings":"AACA,IAAI,KAAK,GAA6B,IAAI,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,GAAoE,CAAC;QACzE,IAAI,CAAC;YACH,0EAA0E;YAC1E,yEAAyE;YACzE,gFAAgF;YAChF,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAA0B,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,kHAAkH;gBAClH,mHAAmH;gBACnH,IAAK,GAAa,CAAC,OAAO,GAAG,CAC9B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,kEAAkE;YAClE,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAiC,CAAC;QAChH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,6EAA6E;gBAC7E,yDAAyD;gBACzD,IAAK,GAAa,CAAC,OAAO,GAAG,CAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAe,EAAE,CAAe;IAC/D,IAAI,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;AACvC,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import type { AlignmentResult, SearchResults } from './gateway-client.js';
|
|
1
2
|
export declare const CONFLICT_THRESHOLD = 0.65;
|
|
2
3
|
export declare const RELATES_THRESHOLD = 0.45;
|
|
3
4
|
export declare const DRIFT_THRESHOLD = 0.5;
|
|
4
5
|
export declare function createLocalGatewayClient(dbPath: string): {
|
|
6
|
+
/** Release the underlying SQLite handle (required on Windows before deleting the file). */
|
|
7
|
+
close(): void;
|
|
5
8
|
whoami(): Promise<{
|
|
6
9
|
email: string;
|
|
7
10
|
tenantId: string;
|
|
@@ -35,46 +38,8 @@ export declare function createLocalGatewayClient(dbPath: string): {
|
|
|
35
38
|
};
|
|
36
39
|
}[];
|
|
37
40
|
}>;
|
|
38
|
-
searchDecisions(query: string, limit?: number): Promise<
|
|
39
|
-
|
|
40
|
-
score: number;
|
|
41
|
-
id: string;
|
|
42
|
-
title: string;
|
|
43
|
-
summary: string;
|
|
44
|
-
sourceUrl: string | null;
|
|
45
|
-
platform: string;
|
|
46
|
-
createdAt: string;
|
|
47
|
-
}[];
|
|
48
|
-
}>;
|
|
49
|
-
checkAlignment(diff: string, _context?: string): Promise<{
|
|
50
|
-
status: "no_context";
|
|
51
|
-
conflicting_decisions: never[];
|
|
52
|
-
relevant_decisions: never[];
|
|
53
|
-
message: string;
|
|
54
|
-
} | {
|
|
55
|
-
status: "conflict" | "related";
|
|
56
|
-
conflicting_decisions: {
|
|
57
|
-
reason?: string | undefined;
|
|
58
|
-
id: string;
|
|
59
|
-
title: string;
|
|
60
|
-
platform: string;
|
|
61
|
-
source_url: string | null;
|
|
62
|
-
relationship: "supersedes" | "conflicts_with" | "contradicts" | "duplicates" | "refines" | "implements" | "depends_on" | "relates_to";
|
|
63
|
-
confidence: number;
|
|
64
|
-
typed: boolean;
|
|
65
|
-
}[];
|
|
66
|
-
relevant_decisions: {
|
|
67
|
-
reason?: string | undefined;
|
|
68
|
-
id: string;
|
|
69
|
-
title: string;
|
|
70
|
-
platform: string;
|
|
71
|
-
source_url: string | null;
|
|
72
|
-
relationship: "supersedes" | "conflicts_with" | "contradicts" | "duplicates" | "refines" | "implements" | "depends_on" | "relates_to";
|
|
73
|
-
confidence: number;
|
|
74
|
-
typed: boolean;
|
|
75
|
-
}[];
|
|
76
|
-
message: string;
|
|
77
|
-
}>;
|
|
41
|
+
searchDecisions(query: string, limit?: number): Promise<SearchResults>;
|
|
42
|
+
checkAlignment(diff: string, _context?: string): Promise<AlignmentResult>;
|
|
78
43
|
checkDrift(decisionId: string, content: string, _sourceType?: string): Promise<{
|
|
79
44
|
decisionId: string;
|
|
80
45
|
score: null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE1E,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAGvC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAGtC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM;IAqDnD,2FAA2F;;;;;;;2BAS9D,MAAM;;;;;;;;uBAKV,KAAK,CAAC;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;;;;;;;;;;;;;;;2BAwB/E,MAAM,mBAAe,OAAO,CAAC,aAAa,CAAC;yBAc7C,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;2BAuDlD,MAAM,WAAW,MAAM,gBAAgB,MAAM;;;;;;;;;;;0BAQ9C,MAAM;;;;;;;EAYrC;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -49,6 +49,10 @@ export function createLocalGatewayClient(dbPath) {
|
|
|
49
49
|
return { id, title, summary, sourceUrl, platform, conflicts: candidates };
|
|
50
50
|
}
|
|
51
51
|
return {
|
|
52
|
+
/** Release the underlying SQLite handle (required on Windows before deleting the file). */
|
|
53
|
+
close() {
|
|
54
|
+
db.close();
|
|
55
|
+
},
|
|
52
56
|
async whoami() {
|
|
53
57
|
return { email: 'local', tenantId: 'local', mode: 'local-embedded' };
|
|
54
58
|
},
|
|
@@ -82,13 +86,15 @@ export function createLocalGatewayClient(dbPath) {
|
|
|
82
86
|
async searchDecisions(query, limit = 10) {
|
|
83
87
|
const embedding = await getEmbedding(query);
|
|
84
88
|
const similar = await findSimilar(embedding, limit, 0.1);
|
|
85
|
-
const
|
|
89
|
+
const results = similar
|
|
86
90
|
.map(s => {
|
|
87
91
|
const row = db.getDecisionById(s.decisionId);
|
|
88
|
-
return row
|
|
92
|
+
return row
|
|
93
|
+
? { id: row.id, title: row.title, summary: row.summary, status: 'active', similarity: s.score, created_at: row.createdAt }
|
|
94
|
+
: null;
|
|
89
95
|
})
|
|
90
96
|
.filter((d) => d !== null);
|
|
91
|
-
return {
|
|
97
|
+
return { results, count: results.length, strategy: 'semantic' };
|
|
92
98
|
},
|
|
93
99
|
async checkAlignment(diff, _context) {
|
|
94
100
|
// Stage 1: embeddings find candidate related decisions (free, local).
|
|
@@ -101,32 +107,44 @@ export function createLocalGatewayClient(dbPath) {
|
|
|
101
107
|
})
|
|
102
108
|
.filter((d) => d !== null);
|
|
103
109
|
if (!candidates.length) {
|
|
104
|
-
return { status: '
|
|
110
|
+
return { status: 'no-context', confidence: 0, relevant_decisions: [], conflicts: [], message: 'No related decisions found in your local graph.' };
|
|
105
111
|
}
|
|
106
112
|
// Stage 2: type each candidate against the proposed change (LLM, user's key,
|
|
107
113
|
// lazy - only the few candidates we surface here). Degrades to untyped.
|
|
108
114
|
const subject = { title: 'Proposed change', summary: diff.slice(0, 2000) };
|
|
109
|
-
const
|
|
115
|
+
const typed = [];
|
|
110
116
|
for (const c of candidates) {
|
|
111
117
|
const rel = await classifyRelationship(subject, { title: c.title, summary: c.summary });
|
|
112
|
-
|
|
118
|
+
typed.push({
|
|
113
119
|
id: c.id,
|
|
114
120
|
title: c.title,
|
|
115
|
-
|
|
116
|
-
|
|
121
|
+
summary: c.summary,
|
|
122
|
+
url: c.sourceUrl ?? undefined,
|
|
117
123
|
relationship: rel?.type ?? 'relates_to',
|
|
118
124
|
confidence: rel?.confidence ?? c.score,
|
|
119
125
|
typed: rel !== null,
|
|
120
|
-
|
|
126
|
+
reason: rel?.reason,
|
|
127
|
+
similarity: c.score,
|
|
121
128
|
});
|
|
122
129
|
}
|
|
123
|
-
const
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
const relevant_decisions = typed.map(t => ({ id: t.id, title: t.title, summary: t.summary, similarity: t.similarity, url: t.url }));
|
|
131
|
+
const conflicts = typed
|
|
132
|
+
.filter(t => t.relationship === 'conflicts_with' || t.relationship === 'contradicts')
|
|
133
|
+
.map(t => ({
|
|
134
|
+
decision_id: t.id,
|
|
135
|
+
title: t.title,
|
|
136
|
+
summary: t.summary,
|
|
137
|
+
url: t.url,
|
|
138
|
+
reason: t.reason ?? 'Conflicts with an existing decision in your local graph',
|
|
139
|
+
severity: (t.confidence >= 0.8 ? 'critical' : 'warning'),
|
|
140
|
+
}));
|
|
141
|
+
const anyTyped = typed.some(t => t.typed);
|
|
142
|
+
const status = conflicts.length ? 'conflicting' : 'aligned';
|
|
143
|
+
const confidence = Math.max(...typed.map(t => t.confidence));
|
|
144
|
+
const message = conflicts.length
|
|
145
|
+
? `This change conflicts with ${conflicts.length} existing decision(s) in your local graph - review before proceeding.`
|
|
128
146
|
: `Found ${relevant_decisions.length} related decision(s) to review${anyTyped ? '' : ' (set ANTHROPIC_API_KEY or OPENAI_API_KEY to type these relationships)'}.`;
|
|
129
|
-
return { status,
|
|
147
|
+
return { status, confidence, relevant_decisions, conflicts, message };
|
|
130
148
|
},
|
|
131
149
|
async checkDrift(decisionId, content, _sourceType) {
|
|
132
150
|
const decisionEmbedding = db.getEmbedding(decisionId);
|
|
@@ -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;
|
|
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
|
@@ -1,8 +1,25 @@
|
|
|
1
|
-
export type AiProvider = 'anthropic' | 'openai' | 'gemini' | 'groq' | 'mistral';
|
|
1
|
+
export type AiProvider = 'anthropic' | 'openai' | 'gemini' | 'groq' | 'mistral' | 'grok';
|
|
2
2
|
export interface LocalLlmOptions {
|
|
3
3
|
provider?: AiProvider;
|
|
4
4
|
apiKey?: string;
|
|
5
5
|
}
|
|
6
|
+
export interface CallChatOptions {
|
|
7
|
+
/** Explicitly configured provider (e.g. written by `align setup`); takes priority. */
|
|
8
|
+
provider?: AiProvider;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
maxTokens?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Provider-agnostic chat call. Resolution order:
|
|
14
|
+
* 1. explicitly configured provider+key (e.g. from `align setup`)
|
|
15
|
+
* 2. ALIGN_LLM_BASE_URL - any OpenAI-compatible endpoint (Grok, OpenRouter,
|
|
16
|
+
* Together, DeepSeek, LM Studio, vLLM, ...) via ALIGN_LLM_MODEL/ALIGN_LLM_API_KEY
|
|
17
|
+
* 3. named providers by env key (Anthropic, OpenAI, Gemini, Groq, Mistral, Grok)
|
|
18
|
+
* 4. local Ollama (no key)
|
|
19
|
+
* Returns the model's text, or null if nothing is available (callers fall back).
|
|
20
|
+
*/
|
|
21
|
+
export declare function callChat(system: string, user: string, opts?: CallChatOptions): Promise<string | null>;
|
|
22
|
+
/** Synthesise a natural-language answer from retrieved decisions, using any configured provider. */
|
|
6
23
|
export declare function synthesiseLocally(question: string, decisions: Array<{
|
|
7
24
|
id: string;
|
|
8
25
|
title: string;
|
|
@@ -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,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;CACpB;AAkMD;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8BxB;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
|
@@ -5,8 +5,10 @@ function buildUserPrompt(question, decisions) {
|
|
|
5
5
|
const ctx = decisions.map(d => `- ${d.title}: ${d.summary}`).join('\n');
|
|
6
6
|
return `Question: ${question}\n\nDecision context:\n${ctx}`;
|
|
7
7
|
}
|
|
8
|
-
//
|
|
9
|
-
|
|
8
|
+
// --- Provider adapters: each takes a generic (system, user) chat and returns text or null ---
|
|
9
|
+
// OpenAI-compatible Chat Completions API (OpenAI, Groq, Mistral, xAI/Grok, and any
|
|
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) {
|
|
10
12
|
try {
|
|
11
13
|
const res = await fetch(endpoint, {
|
|
12
14
|
method: 'POST',
|
|
@@ -16,10 +18,10 @@ async function tryOpenAiCompatible(question, decisions, endpoint, model, key, ti
|
|
|
16
18
|
},
|
|
17
19
|
body: JSON.stringify({
|
|
18
20
|
model,
|
|
19
|
-
max_tokens:
|
|
21
|
+
max_tokens: maxTokens,
|
|
20
22
|
messages: [
|
|
21
|
-
{ role: 'system', content:
|
|
22
|
-
{ role: 'user', content:
|
|
23
|
+
{ role: 'system', content: system },
|
|
24
|
+
{ role: 'user', content: user },
|
|
23
25
|
],
|
|
24
26
|
}),
|
|
25
27
|
signal: AbortSignal.timeout(timeoutMs),
|
|
@@ -33,7 +35,7 @@ async function tryOpenAiCompatible(question, decisions, endpoint, model, key, ti
|
|
|
33
35
|
return null;
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
|
-
async function tryAnthropic(
|
|
38
|
+
async function tryAnthropic(system, user, key, maxTokens = 256) {
|
|
37
39
|
try {
|
|
38
40
|
const res = await fetch('https://api.anthropic.com/v1/messages', {
|
|
39
41
|
method: 'POST',
|
|
@@ -44,9 +46,9 @@ async function tryAnthropic(question, decisions, key) {
|
|
|
44
46
|
},
|
|
45
47
|
body: JSON.stringify({
|
|
46
48
|
model: process.env['ALIGN_ANTHROPIC_MODEL'] ?? 'claude-haiku-4-5-20251001',
|
|
47
|
-
max_tokens:
|
|
48
|
-
system
|
|
49
|
-
messages: [{ role: 'user', content:
|
|
49
|
+
max_tokens: maxTokens,
|
|
50
|
+
system,
|
|
51
|
+
messages: [{ role: 'user', content: user }],
|
|
50
52
|
}),
|
|
51
53
|
signal: AbortSignal.timeout(15000),
|
|
52
54
|
});
|
|
@@ -59,16 +61,16 @@ async function tryAnthropic(question, decisions, key) {
|
|
|
59
61
|
return null;
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
|
-
async function tryGemini(
|
|
64
|
+
async function tryGemini(system, user, key, maxTokens = 256) {
|
|
63
65
|
try {
|
|
64
66
|
const geminiModel = process.env['ALIGN_GEMINI_MODEL'] ?? 'gemini-1.5-flash';
|
|
65
67
|
const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${geminiModel}:generateContent?key=${key}`, {
|
|
66
68
|
method: 'POST',
|
|
67
69
|
headers: { 'Content-Type': 'application/json' },
|
|
68
70
|
body: JSON.stringify({
|
|
69
|
-
systemInstruction: { parts: [{ text:
|
|
70
|
-
contents: [{ parts: [{ text:
|
|
71
|
-
generationConfig: { maxOutputTokens:
|
|
71
|
+
systemInstruction: { parts: [{ text: system }] },
|
|
72
|
+
contents: [{ parts: [{ text: user }] }],
|
|
73
|
+
generationConfig: { maxOutputTokens: maxTokens },
|
|
72
74
|
}),
|
|
73
75
|
signal: AbortSignal.timeout(15000),
|
|
74
76
|
});
|
|
@@ -81,7 +83,7 @@ async function tryGemini(question, decisions, key) {
|
|
|
81
83
|
return null;
|
|
82
84
|
}
|
|
83
85
|
}
|
|
84
|
-
async function tryOllama(
|
|
86
|
+
async function tryOllama(system, user) {
|
|
85
87
|
const host = process.env['OLLAMA_HOST'] ?? 'http://localhost:11434';
|
|
86
88
|
let model;
|
|
87
89
|
try {
|
|
@@ -106,8 +108,8 @@ async function tryOllama(question, decisions) {
|
|
|
106
108
|
model,
|
|
107
109
|
stream: false,
|
|
108
110
|
messages: [
|
|
109
|
-
{ role: 'system', content:
|
|
110
|
-
{ role: 'user', content:
|
|
111
|
+
{ role: 'system', content: system },
|
|
112
|
+
{ role: 'user', content: user },
|
|
111
113
|
],
|
|
112
114
|
}),
|
|
113
115
|
signal: AbortSignal.timeout(30000),
|
|
@@ -121,6 +123,11 @@ async function tryOllama(question, decisions) {
|
|
|
121
123
|
return null;
|
|
122
124
|
}
|
|
123
125
|
}
|
|
126
|
+
/** Normalize a base URL into a full Chat Completions endpoint. */
|
|
127
|
+
function chatCompletionsUrl(base) {
|
|
128
|
+
const trimmed = base.replace(/\/+$/, '');
|
|
129
|
+
return trimmed.endsWith('/chat/completions') ? trimmed : `${trimmed}/chat/completions`;
|
|
130
|
+
}
|
|
124
131
|
function keyForProvider(provider) {
|
|
125
132
|
switch (provider) {
|
|
126
133
|
case 'anthropic': return process.env['ANTHROPIC_API_KEY'];
|
|
@@ -128,42 +135,69 @@ function keyForProvider(provider) {
|
|
|
128
135
|
case 'gemini': return process.env['GEMINI_API_KEY'] ?? process.env['GOOGLE_API_KEY'];
|
|
129
136
|
case 'groq': return process.env['GROQ_API_KEY'];
|
|
130
137
|
case 'mistral': return process.env['MISTRAL_API_KEY'];
|
|
138
|
+
case 'grok': return process.env['GROK_API_KEY'] ?? process.env['XAI_API_KEY'];
|
|
131
139
|
}
|
|
132
140
|
}
|
|
133
|
-
async function callProvider(provider, key,
|
|
141
|
+
async function callProvider(provider, key, system, user, maxTokens) {
|
|
134
142
|
switch (provider) {
|
|
135
143
|
case 'anthropic':
|
|
136
|
-
return tryAnthropic(
|
|
144
|
+
return tryAnthropic(system, user, key, maxTokens);
|
|
137
145
|
case 'openai':
|
|
138
|
-
return tryOpenAiCompatible(
|
|
146
|
+
return tryOpenAiCompatible(system, user, 'https://api.openai.com/v1/chat/completions', process.env['ALIGN_OPENAI_MODEL'] ?? 'gpt-4o-mini', key, maxTokens);
|
|
139
147
|
case 'gemini':
|
|
140
|
-
return tryGemini(
|
|
148
|
+
return tryGemini(system, user, key, maxTokens);
|
|
141
149
|
case 'groq':
|
|
142
|
-
return tryOpenAiCompatible(
|
|
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);
|
|
143
151
|
case 'mistral':
|
|
144
|
-
return tryOpenAiCompatible(
|
|
152
|
+
return tryOpenAiCompatible(system, user, 'https://api.mistral.ai/v1/chat/completions', process.env['ALIGN_MISTRAL_MODEL'] ?? 'mistral-small-latest', key, maxTokens);
|
|
153
|
+
case 'grok':
|
|
154
|
+
return tryOpenAiCompatible(system, user, 'https://api.x.ai/v1/chat/completions', process.env['ALIGN_GROK_MODEL'] ?? 'grok-2-latest', key, maxTokens);
|
|
145
155
|
}
|
|
146
156
|
}
|
|
147
|
-
const ALL_PROVIDERS = ['anthropic', 'openai', 'gemini', 'groq', 'mistral'];
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
157
|
+
const ALL_PROVIDERS = ['anthropic', 'openai', 'gemini', 'groq', 'mistral', 'grok'];
|
|
158
|
+
/**
|
|
159
|
+
* Provider-agnostic chat call. Resolution order:
|
|
160
|
+
* 1. explicitly configured provider+key (e.g. from `align setup`)
|
|
161
|
+
* 2. ALIGN_LLM_BASE_URL - any OpenAI-compatible endpoint (Grok, OpenRouter,
|
|
162
|
+
* Together, DeepSeek, LM Studio, vLLM, ...) via ALIGN_LLM_MODEL/ALIGN_LLM_API_KEY
|
|
163
|
+
* 3. named providers by env key (Anthropic, OpenAI, Gemini, Groq, Mistral, Grok)
|
|
164
|
+
* 4. local Ollama (no key)
|
|
165
|
+
* Returns the model's text, or null if nothing is available (callers fall back).
|
|
166
|
+
*/
|
|
167
|
+
export async function callChat(system, user, opts) {
|
|
168
|
+
const maxTokens = opts?.maxTokens;
|
|
169
|
+
// 1. configured provider (from align setup) takes priority
|
|
170
|
+
if (opts?.provider && opts.apiKey) {
|
|
171
|
+
const result = await callProvider(opts.provider, opts.apiKey, system, user, maxTokens);
|
|
152
172
|
if (result)
|
|
153
173
|
return result;
|
|
154
174
|
}
|
|
155
|
-
//
|
|
175
|
+
// 2. generic OpenAI-compatible escape hatch - covers any provider
|
|
176
|
+
const baseUrl = process.env['ALIGN_LLM_BASE_URL'];
|
|
177
|
+
if (baseUrl) {
|
|
178
|
+
const key = process.env['ALIGN_LLM_API_KEY'] ?? '';
|
|
179
|
+
const model = process.env['ALIGN_LLM_MODEL'] ?? 'gpt-4o-mini';
|
|
180
|
+
const result = await tryOpenAiCompatible(system, user, chatCompletionsUrl(baseUrl), model, key, maxTokens);
|
|
181
|
+
if (result)
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
// 3. named providers via env keys, in priority order
|
|
156
185
|
for (const provider of ALL_PROVIDERS) {
|
|
157
|
-
if (
|
|
186
|
+
if (opts?.provider === provider)
|
|
158
187
|
continue; // already tried above
|
|
159
188
|
const key = keyForProvider(provider);
|
|
160
189
|
if (key) {
|
|
161
|
-
const result = await callProvider(provider, key,
|
|
190
|
+
const result = await callProvider(provider, key, system, user, maxTokens);
|
|
162
191
|
if (result)
|
|
163
192
|
return result;
|
|
164
193
|
}
|
|
165
194
|
}
|
|
166
|
-
//
|
|
167
|
-
return tryOllama(
|
|
195
|
+
// 4. local Ollama as last resort
|
|
196
|
+
return tryOllama(system, user);
|
|
197
|
+
}
|
|
198
|
+
/** Synthesise a natural-language answer from retrieved decisions, using any configured provider. */
|
|
199
|
+
export async function synthesiseLocally(question, decisions, options) {
|
|
200
|
+
const user = buildUserPrompt(question, decisions);
|
|
201
|
+
return callChat(SYSTEM_PROMPT, user, { provider: options?.provider, apiKey: options?.apiKey });
|
|
168
202
|
}
|
|
169
203
|
//# sourceMappingURL=local-llm.js.map
|
|
@@ -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 +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":"AAQA,eAAO,MAAM,kBAAkB,6HASrB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,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,sBAAsB,GAAG,IAAI,CAAC,CAIxC"}
|