@aligndottech/cli 0.1.3 → 0.1.4
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 +151 -54
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +108 -0
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/links.js +1 -1
- package/dist/commands/links.js.map +1 -1
- package/dist/commands/local.d.ts +3 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/local.js +71 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +4 -54
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +32 -11
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +556 -198
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +46 -4
- package/dist/commands/why.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/advisory-dedup.d.ts +3 -0
- package/dist/lib/advisory-dedup.d.ts.map +1 -0
- package/dist/lib/advisory-dedup.js +44 -0
- package/dist/lib/advisory-dedup.js.map +1 -0
- package/dist/lib/agent-rules.d.ts +10 -0
- package/dist/lib/agent-rules.d.ts.map +1 -0
- package/dist/lib/agent-rules.js +137 -0
- package/dist/lib/agent-rules.js.map +1 -0
- package/dist/lib/config.d.ts +4 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +11 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/fetchers/confluence.d.ts.map +1 -1
- package/dist/lib/fetchers/confluence.js +56 -10
- package/dist/lib/fetchers/confluence.js.map +1 -1
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +2 -0
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/fetchers/github.d.ts.map +1 -1
- package/dist/lib/fetchers/github.js +2 -0
- package/dist/lib/fetchers/github.js.map +1 -1
- package/dist/lib/fetchers/jira.d.ts.map +1 -1
- package/dist/lib/fetchers/jira.js +16 -12
- package/dist/lib/fetchers/jira.js.map +1 -1
- package/dist/lib/fetchers/linear.d.ts.map +1 -1
- package/dist/lib/fetchers/linear.js +6 -1
- package/dist/lib/fetchers/linear.js.map +1 -1
- package/dist/lib/fetchers/notion.d.ts.map +1 -1
- package/dist/lib/fetchers/notion.js +29 -0
- package/dist/lib/fetchers/notion.js.map +1 -1
- package/dist/lib/fetchers/slack.d.ts.map +1 -1
- package/dist/lib/fetchers/slack.js +26 -0
- package/dist/lib/fetchers/slack.js.map +1 -1
- package/dist/lib/fetchers/teams.d.ts.map +1 -1
- package/dist/lib/fetchers/teams.js +3 -0
- package/dist/lib/fetchers/teams.js.map +1 -1
- package/dist/lib/fetchers/zoom.d.ts.map +1 -1
- package/dist/lib/fetchers/zoom.js +5 -0
- package/dist/lib/fetchers/zoom.js.map +1 -1
- package/dist/lib/format-date.d.ts +7 -0
- package/dist/lib/format-date.d.ts.map +1 -0
- package/dist/lib/format-date.js +26 -0
- package/dist/lib/format-date.js.map +1 -0
- package/dist/lib/gateway-client.d.ts +16 -2
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +28 -3
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/hook-payload.d.ts +20 -0
- package/dist/lib/hook-payload.d.ts.map +1 -0
- package/dist/lib/hook-payload.js +30 -0
- package/dist/lib/hook-payload.js.map +1 -0
- package/dist/lib/local-db.d.ts +51 -0
- package/dist/lib/local-db.d.ts.map +1 -0
- package/dist/lib/local-db.js +89 -0
- package/dist/lib/local-db.js.map +1 -0
- package/dist/lib/local-embeddings.d.ts +3 -0
- package/dist/lib/local-embeddings.d.ts.map +1 -0
- package/dist/lib/local-embeddings.js +20 -0
- package/dist/lib/local-embeddings.js.map +1 -0
- package/dist/lib/local-gateway-client.d.ts +98 -0
- package/dist/lib/local-gateway-client.d.ts.map +1 -0
- package/dist/lib/local-gateway-client.js +151 -0
- package/dist/lib/local-gateway-client.js.map +1 -0
- package/dist/lib/local-mode.d.ts +7 -0
- package/dist/lib/local-mode.d.ts.map +1 -0
- package/dist/lib/local-mode.js +39 -0
- package/dist/lib/local-mode.js.map +1 -0
- package/dist/lib/local-relationship-classifier.d.ts +14 -0
- package/dist/lib/local-relationship-classifier.d.ts.map +1 -0
- package/dist/lib/local-relationship-classifier.js +100 -0
- package/dist/lib/local-relationship-classifier.js.map +1 -0
- package/dist/lib/login-flow.d.ts +5 -0
- package/dist/lib/login-flow.d.ts.map +1 -0
- package/dist/lib/login-flow.js +64 -0
- package/dist/lib/login-flow.js.map +1 -0
- package/dist/lib/personal-import.d.ts +4 -0
- package/dist/lib/personal-import.d.ts.map +1 -1
- package/dist/lib/personal-import.js +133 -27
- package/dist/lib/personal-import.js.map +1 -1
- package/package.json +26 -15
- package/dist/lib/why-normalise.d.ts +0 -2
- package/dist/lib/why-normalise.d.ts.map +0 -1
- package/dist/lib/why-normalise.js +0 -39
- package/dist/lib/why-normalise.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/gateway-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/gateway-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createLocalGatewayClient } from './local-gateway-client.js';
|
|
1
2
|
export class GatewayError extends Error {
|
|
2
3
|
statusCode;
|
|
3
4
|
constructor(message, statusCode) {
|
|
@@ -6,7 +7,7 @@ export class GatewayError extends Error {
|
|
|
6
7
|
this.name = 'GatewayError';
|
|
7
8
|
}
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
+
function buildHttpGatewayClient(env) {
|
|
10
11
|
const { gatewayUrl, authToken, tenantId } = env;
|
|
11
12
|
function buildHeaders() {
|
|
12
13
|
const h = { 'Content-Type': 'application/json' };
|
|
@@ -191,10 +192,13 @@ export function createGatewayClient(env) {
|
|
|
191
192
|
async getDriftSummary() {
|
|
192
193
|
return request('/drift-summary');
|
|
193
194
|
},
|
|
194
|
-
async ingestBatch(items) {
|
|
195
|
+
async ingestBatch(items, opts) {
|
|
196
|
+
// defer_enrichment (ALI-114): the gateway inserts snapshots with raw titles
|
|
197
|
+
// and runs synthesis + relationship analysis in the background, returning
|
|
198
|
+
// immediately. Older gateways ignore the unknown field (Zod strips it).
|
|
195
199
|
return request('/ingest/batch', {
|
|
196
200
|
method: 'POST',
|
|
197
|
-
body: JSON.stringify({ decisions: items }),
|
|
201
|
+
body: JSON.stringify({ decisions: items, ...(opts?.deferEnrichment ? { defer_enrichment: true } : {}) }),
|
|
198
202
|
});
|
|
199
203
|
},
|
|
200
204
|
getStreamUrl(jobId) {
|
|
@@ -202,4 +206,25 @@ export function createGatewayClient(env) {
|
|
|
202
206
|
},
|
|
203
207
|
};
|
|
204
208
|
}
|
|
209
|
+
export function createGatewayClient(env) {
|
|
210
|
+
if (env.mode === 'local-embedded') {
|
|
211
|
+
const local = createLocalGatewayClient(env.localDbPath ?? ':memory:');
|
|
212
|
+
// Local mode implements the MCP-tool subset (capture, search, alignment, drift,
|
|
213
|
+
// impact, conflicts). Any other method is cloud-only - surface a clear message
|
|
214
|
+
// instead of an opaque "x is not a function" TypeError if a command reaches it.
|
|
215
|
+
return new Proxy(local, {
|
|
216
|
+
get(target, prop, receiver) {
|
|
217
|
+
if (prop in target || typeof prop !== 'string' || prop === 'then') {
|
|
218
|
+
return Reflect.get(target, prop, receiver);
|
|
219
|
+
}
|
|
220
|
+
return () => {
|
|
221
|
+
throw new Error(`'${prop}' is not available in local mode. Local mode supports the MCP tools ` +
|
|
222
|
+
`(capture, search, alignment, drift, impact, conflicts). ` +
|
|
223
|
+
`Use a cloud environment (e.g. --env preview or --env prod) for this command.`);
|
|
224
|
+
};
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
return buildHttpGatewayClient(env);
|
|
229
|
+
}
|
|
205
230
|
//# sourceMappingURL=gateway-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../src/lib/gateway-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../src/lib/gateway-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Readable } from 'node:stream';
|
|
2
|
+
export interface HookToolInput {
|
|
3
|
+
file_path?: string;
|
|
4
|
+
content?: string;
|
|
5
|
+
old_string?: string;
|
|
6
|
+
new_string?: string;
|
|
7
|
+
edits?: Array<{
|
|
8
|
+
old_string?: string;
|
|
9
|
+
new_string?: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export interface HookPayload {
|
|
13
|
+
hook_event_name?: string;
|
|
14
|
+
tool_name?: string;
|
|
15
|
+
tool_input?: HookToolInput;
|
|
16
|
+
}
|
|
17
|
+
export declare function readHookPayload(stream?: Readable & {
|
|
18
|
+
isTTY?: boolean;
|
|
19
|
+
}): Promise<HookPayload | null>;
|
|
20
|
+
//# sourceMappingURL=hook-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-payload.d.ts","sourceRoot":"","sources":["../../src/lib/hook-payload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAMD,wBAAsB,eAAe,CACnC,MAAM,GAAE,QAAQ,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAkB,GACrD,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAS7B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Read and parse the JSON payload Claude Code pipes to a hook command on stdin
|
|
2
|
+
// (hook_event_name, tool_name, tool_input). Returns null when there is no piped
|
|
3
|
+
// payload - a TTY (manual `align check --advisory` run), empty stdin, or invalid
|
|
4
|
+
// JSON - so callers fall back to their non-hook behaviour.
|
|
5
|
+
export async function readHookPayload(stream = process.stdin) {
|
|
6
|
+
if (stream.isTTY)
|
|
7
|
+
return null;
|
|
8
|
+
const raw = await readAll(stream).catch(() => '');
|
|
9
|
+
if (!raw.trim())
|
|
10
|
+
return null;
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(raw);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// Read the stream to end. A short timeout guarantees a manual, non-TTY run with no
|
|
19
|
+
// piped data never hangs the hook - it resolves empty and the caller falls back.
|
|
20
|
+
function readAll(stream) {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
let data = '';
|
|
23
|
+
const timer = setTimeout(() => resolve(data), 200);
|
|
24
|
+
stream.setEncoding?.('utf8');
|
|
25
|
+
stream.on('data', (chunk) => { data += chunk; });
|
|
26
|
+
stream.on('end', () => { clearTimeout(timer); resolve(data); });
|
|
27
|
+
stream.on('error', (err) => { clearTimeout(timer); reject(err); });
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=hook-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-payload.js","sourceRoot":"","sources":["../../src/lib/hook-payload.ts"],"names":[],"mappings":"AAgBA,+EAA+E;AAC/E,gFAAgF;AAChF,iFAAiF;AACjF,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAyC,OAAO,CAAC,KAAK;IAEtD,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,iFAAiF;AACjF,SAAS,OAAO,CAAC,MAAgB;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface DecisionRow {
|
|
2
|
+
id: string;
|
|
3
|
+
title: string;
|
|
4
|
+
summary: string;
|
|
5
|
+
sourceUrl: string | null;
|
|
6
|
+
platform: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
}
|
|
9
|
+
export interface LinkRow {
|
|
10
|
+
id: string;
|
|
11
|
+
sourceId: string;
|
|
12
|
+
targetId: string;
|
|
13
|
+
relation: string;
|
|
14
|
+
confidence: number;
|
|
15
|
+
}
|
|
16
|
+
export interface DbStats {
|
|
17
|
+
decisions: number;
|
|
18
|
+
embeddings: number;
|
|
19
|
+
conflicts: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function createLocalDb(dbPath: string): {
|
|
22
|
+
insertDecision(row: {
|
|
23
|
+
title: string;
|
|
24
|
+
summary: string;
|
|
25
|
+
sourceUrl: string | null;
|
|
26
|
+
platform: string;
|
|
27
|
+
}): string;
|
|
28
|
+
listDecisions(): DecisionRow[];
|
|
29
|
+
getDecisionById(id: string): DecisionRow | null;
|
|
30
|
+
setEmbedding(decisionId: string, embedding: Float32Array): void;
|
|
31
|
+
getEmbedding(decisionId: string): Float32Array | null;
|
|
32
|
+
getAllEmbeddings(): Array<{
|
|
33
|
+
decisionId: string;
|
|
34
|
+
embedding: Float32Array;
|
|
35
|
+
}>;
|
|
36
|
+
insertLink(link: {
|
|
37
|
+
sourceId: string;
|
|
38
|
+
targetId: string;
|
|
39
|
+
relation: string;
|
|
40
|
+
confidence: number;
|
|
41
|
+
}): void;
|
|
42
|
+
listLinks(filter?: {
|
|
43
|
+
relation?: string;
|
|
44
|
+
decisionId?: string;
|
|
45
|
+
}): LinkRow[];
|
|
46
|
+
getStats(): DbStats;
|
|
47
|
+
dropAll(): void;
|
|
48
|
+
close(): void;
|
|
49
|
+
};
|
|
50
|
+
export type LocalDb = ReturnType<typeof createLocalDb>;
|
|
51
|
+
//# sourceMappingURL=local-db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-db.d.ts","sourceRoot":"","sources":["../../src/lib/local-db.ts"],"names":[],"mappings":"AAGA,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;wBAMpB;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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
const SCHEMA = `
|
|
4
|
+
CREATE TABLE IF NOT EXISTS decisions (
|
|
5
|
+
id TEXT PRIMARY KEY,
|
|
6
|
+
title TEXT NOT NULL,
|
|
7
|
+
summary TEXT NOT NULL,
|
|
8
|
+
source_url TEXT,
|
|
9
|
+
platform TEXT NOT NULL DEFAULT 'cli',
|
|
10
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
CREATE TABLE IF NOT EXISTS decision_embeddings (
|
|
14
|
+
decision_id TEXT PRIMARY KEY REFERENCES decisions(id) ON DELETE CASCADE,
|
|
15
|
+
embedding BLOB NOT NULL
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
CREATE TABLE IF NOT EXISTS decision_links (
|
|
19
|
+
id TEXT PRIMARY KEY,
|
|
20
|
+
source_id TEXT NOT NULL REFERENCES decisions(id) ON DELETE CASCADE,
|
|
21
|
+
target_id TEXT NOT NULL REFERENCES decisions(id) ON DELETE CASCADE,
|
|
22
|
+
relation TEXT NOT NULL,
|
|
23
|
+
confidence REAL NOT NULL DEFAULT 1.0,
|
|
24
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
25
|
+
);
|
|
26
|
+
`;
|
|
27
|
+
export function createLocalDb(dbPath) {
|
|
28
|
+
const db = new Database(dbPath);
|
|
29
|
+
db.pragma('journal_mode = WAL');
|
|
30
|
+
db.exec(SCHEMA);
|
|
31
|
+
return {
|
|
32
|
+
insertDecision(row) {
|
|
33
|
+
const id = randomUUID();
|
|
34
|
+
db.prepare(`INSERT INTO decisions (id, title, summary, source_url, platform) VALUES (?, ?, ?, ?, ?)`).run(id, row.title, row.summary, row.sourceUrl, row.platform);
|
|
35
|
+
return id;
|
|
36
|
+
},
|
|
37
|
+
listDecisions() {
|
|
38
|
+
return db.prepare(`SELECT id, title, summary, source_url as sourceUrl, platform, created_at as createdAt FROM decisions ORDER BY created_at DESC`).all();
|
|
39
|
+
},
|
|
40
|
+
getDecisionById(id) {
|
|
41
|
+
return db.prepare(`SELECT id, title, summary, source_url as sourceUrl, platform, created_at as createdAt FROM decisions WHERE id = ?`).get(id) ?? null;
|
|
42
|
+
},
|
|
43
|
+
setEmbedding(decisionId, embedding) {
|
|
44
|
+
db.prepare(`INSERT OR REPLACE INTO decision_embeddings (decision_id, embedding) VALUES (?, ?)`).run(decisionId, Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength));
|
|
45
|
+
},
|
|
46
|
+
getEmbedding(decisionId) {
|
|
47
|
+
const row = db.prepare(`SELECT embedding FROM decision_embeddings WHERE decision_id = ?`).get(decisionId);
|
|
48
|
+
if (!row)
|
|
49
|
+
return null;
|
|
50
|
+
return new Float32Array(row.embedding.buffer, row.embedding.byteOffset, row.embedding.byteLength / 4);
|
|
51
|
+
},
|
|
52
|
+
getAllEmbeddings() {
|
|
53
|
+
const rows = db.prepare(`SELECT decision_id, embedding FROM decision_embeddings`).all();
|
|
54
|
+
return rows.map(r => ({
|
|
55
|
+
decisionId: r.decision_id,
|
|
56
|
+
embedding: new Float32Array(r.embedding.buffer, r.embedding.byteOffset, r.embedding.byteLength / 4),
|
|
57
|
+
}));
|
|
58
|
+
},
|
|
59
|
+
insertLink(link) {
|
|
60
|
+
db.prepare(`INSERT OR IGNORE INTO decision_links (id, source_id, target_id, relation, confidence) VALUES (?, ?, ?, ?, ?)`).run(randomUUID(), link.sourceId, link.targetId, link.relation, link.confidence);
|
|
61
|
+
},
|
|
62
|
+
listLinks(filter) {
|
|
63
|
+
let sql = `SELECT id, source_id as sourceId, target_id as targetId, relation, confidence FROM decision_links WHERE 1=1`;
|
|
64
|
+
const params = [];
|
|
65
|
+
if (filter?.relation) {
|
|
66
|
+
sql += ` AND relation = ?`;
|
|
67
|
+
params.push(filter.relation);
|
|
68
|
+
}
|
|
69
|
+
if (filter?.decisionId) {
|
|
70
|
+
sql += ` AND (source_id = ? OR target_id = ?)`;
|
|
71
|
+
params.push(filter.decisionId, filter.decisionId);
|
|
72
|
+
}
|
|
73
|
+
return db.prepare(sql).all(...params);
|
|
74
|
+
},
|
|
75
|
+
getStats() {
|
|
76
|
+
const decisions = db.prepare(`SELECT COUNT(*) as n FROM decisions`).get().n;
|
|
77
|
+
const embeddings = db.prepare(`SELECT COUNT(*) as n FROM decision_embeddings`).get().n;
|
|
78
|
+
const conflicts = db.prepare(`SELECT COUNT(*) as n FROM decision_links WHERE relation = 'conflicts_with'`).get().n;
|
|
79
|
+
return { decisions, embeddings, conflicts };
|
|
80
|
+
},
|
|
81
|
+
dropAll() {
|
|
82
|
+
db.exec(`DELETE FROM decision_links; DELETE FROM decision_embeddings; DELETE FROM decisions;`);
|
|
83
|
+
},
|
|
84
|
+
close() {
|
|
85
|
+
db.close();
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=local-db.js.map
|
|
@@ -0,0 +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;AAyBzC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBd,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO;QACL,cAAc,CAAC,GAAmF;YAChG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,EAAE,CAAC,OAAO,CACR,yFAAyF,CAC1F,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,aAAa;YACX,OAAO,EAAE,CAAC,OAAO,CACf,+HAA+H,CAChI,CAAC,GAAG,EAAmB,CAAC;QAC3B,CAAC;QAED,eAAe,CAAC,EAAU;YACxB,OAAQ,EAAE,CAAC,OAAO,CAChB,mHAAmH,CACpH,CAAC,GAAG,CAAC,EAAE,CAAwB,IAAI,IAAI,CAAC;QAC3C,CAAC;QAED,YAAY,CAAC,UAAkB,EAAE,SAAuB;YACtD,EAAE,CAAC,OAAO,CACR,mFAAmF,CACpF,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/F,CAAC;QAED,YAAY,CAAC,UAAkB;YAC7B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,iEAAiE,CAClE,CAAC,GAAG,CAAC,UAAU,CAAiC,CAAC;YAClD,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACxG,CAAC;QAED,gBAAgB;YACd,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,wDAAwD,CACzD,CAAC,GAAG,EAAuD,CAAC;YAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB,UAAU,EAAE,CAAC,CAAC,WAAW;gBACzB,SAAS,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC;aACpG,CAAC,CAAC,CAAC;QACN,CAAC;QAED,UAAU,CAAC,IAAkF;YAC3F,EAAE,CAAC,OAAO,CACR,8GAA8G,CAC/G,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpF,CAAC;QAED,SAAS,CAAC,MAAmD;YAC3D,IAAI,GAAG,GAAG,6GAA6G,CAAC;YACxH,MAAM,MAAM,GAAc,EAAE,CAAC;YAC7B,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAAC,GAAG,IAAI,mBAAmB,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YACnF,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;gBAAC,GAAG,IAAI,uCAAuC,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAAC,CAAC;YAC9H,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAc,CAAC;QACrD,CAAC;QAED,QAAQ;YACN,MAAM,SAAS,GAAI,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YAC/F,MAAM,UAAU,GAAI,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YAC1G,MAAM,SAAS,GAAI,EAAE,CAAC,OAAO,CAAC,4EAA4E,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YACtI,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAC9C,CAAC;QAED,OAAO;YACL,EAAE,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;QACjG,CAAC;QAED,KAAK;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +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,CAOtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CASzE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
let _pipe = null;
|
|
2
|
+
export async function getEmbedding(text) {
|
|
3
|
+
if (!_pipe) {
|
|
4
|
+
const { pipeline } = await import('@xenova/transformers');
|
|
5
|
+
_pipe = (await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2'));
|
|
6
|
+
}
|
|
7
|
+
const output = await _pipe(text, { pooling: 'mean', normalize: true });
|
|
8
|
+
return output[0].data;
|
|
9
|
+
}
|
|
10
|
+
export function cosineSimilarity(a, b) {
|
|
11
|
+
let dot = 0, normA = 0, normB = 0;
|
|
12
|
+
for (let i = 0; i < a.length; i++) {
|
|
13
|
+
dot += a[i] * b[i];
|
|
14
|
+
normA += a[i] * a[i];
|
|
15
|
+
normB += b[i] * b[i];
|
|
16
|
+
}
|
|
17
|
+
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
18
|
+
return denom === 0 ? 0 : dot / denom;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=local-embeddings.js.map
|
|
@@ -0,0 +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,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC1D,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAiC,CAAC;IAC5G,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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
export declare const CONFLICT_THRESHOLD = 0.65;
|
|
2
|
+
export declare const RELATES_THRESHOLD = 0.45;
|
|
3
|
+
export declare const DRIFT_THRESHOLD = 0.5;
|
|
4
|
+
export declare function createLocalGatewayClient(dbPath: string): {
|
|
5
|
+
whoami(): Promise<{
|
|
6
|
+
email: string;
|
|
7
|
+
tenantId: string;
|
|
8
|
+
mode: string;
|
|
9
|
+
}>;
|
|
10
|
+
captureDecision(input: string, platform?: string): Promise<{
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
summary: string;
|
|
14
|
+
sourceUrl: string | null;
|
|
15
|
+
platform: string;
|
|
16
|
+
conflicts: string[];
|
|
17
|
+
}>;
|
|
18
|
+
ingestBatch(items: Array<{
|
|
19
|
+
source_url?: string;
|
|
20
|
+
platform?: string;
|
|
21
|
+
raw_text: string;
|
|
22
|
+
title?: string;
|
|
23
|
+
}>): Promise<{
|
|
24
|
+
snapshots: {
|
|
25
|
+
id: string;
|
|
26
|
+
title: string;
|
|
27
|
+
summary: string;
|
|
28
|
+
analysis: {
|
|
29
|
+
relatedDecisions: {
|
|
30
|
+
id: string;
|
|
31
|
+
title: string;
|
|
32
|
+
relationship: string;
|
|
33
|
+
confidence: number;
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
}[];
|
|
37
|
+
}>;
|
|
38
|
+
searchDecisions(query: string, limit?: number): Promise<{
|
|
39
|
+
decisions: {
|
|
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
|
+
}>;
|
|
78
|
+
checkDrift(decisionId: string, content: string, _sourceType?: string): Promise<{
|
|
79
|
+
decisionId: string;
|
|
80
|
+
score: null;
|
|
81
|
+
drifted: null;
|
|
82
|
+
note: string;
|
|
83
|
+
} | {
|
|
84
|
+
decisionId: string;
|
|
85
|
+
score: number;
|
|
86
|
+
drifted: boolean;
|
|
87
|
+
note?: undefined;
|
|
88
|
+
}>;
|
|
89
|
+
getImpact(decisionId: string): Promise<{
|
|
90
|
+
upstream: import("./local-db.js").LinkRow[];
|
|
91
|
+
downstream: import("./local-db.js").LinkRow[];
|
|
92
|
+
}>;
|
|
93
|
+
getConflicts(): Promise<{
|
|
94
|
+
links: import("./local-db.js").LinkRow[];
|
|
95
|
+
}>;
|
|
96
|
+
};
|
|
97
|
+
export type LocalGatewayClient = ReturnType<typeof createLocalGatewayClient>;
|
|
98
|
+
//# sourceMappingURL=local-gateway-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAGvC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAGtC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM;;;;;;2BAyDtB,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;;;;;;;;;;;yBAYR,MAAM,aAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA4CvB,MAAM,WAAW,MAAM,gBAAgB,MAAM;;;;;;;;;;;0BAQ9C,MAAM;;;;;;;EAYrC;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { createLocalDb } from './local-db.js';
|
|
2
|
+
import { cosineSimilarity, getEmbedding } from './local-embeddings.js';
|
|
3
|
+
import { classifyRelationship } from './local-relationship-classifier.js';
|
|
4
|
+
export const CONFLICT_THRESHOLD = 0.65;
|
|
5
|
+
// Embeddings flag a decision as a related CANDIDATE at/above this score; the
|
|
6
|
+
// relationship type is then assigned lazily by the LLM classifier.
|
|
7
|
+
export const RELATES_THRESHOLD = 0.45;
|
|
8
|
+
// Below this similarity between a decision and new content, the content is
|
|
9
|
+
// considered to have drifted from the decision.
|
|
10
|
+
export const DRIFT_THRESHOLD = 0.5;
|
|
11
|
+
export function createLocalGatewayClient(dbPath) {
|
|
12
|
+
const db = createLocalDb(dbPath);
|
|
13
|
+
async function findSimilar(embedding, topK, threshold = 0.0, excludeId) {
|
|
14
|
+
const all = db.getAllEmbeddings();
|
|
15
|
+
return all
|
|
16
|
+
.filter(e => e.decisionId !== excludeId)
|
|
17
|
+
.map(e => ({ decisionId: e.decisionId, score: cosineSimilarity(embedding, e.embedding) }))
|
|
18
|
+
.filter(e => e.score >= threshold)
|
|
19
|
+
.sort((a, b) => b.score - a.score)
|
|
20
|
+
.slice(0, topK);
|
|
21
|
+
}
|
|
22
|
+
// Shared ingest path: insert, embed (title + summary), detect conflicts.
|
|
23
|
+
// Used by both captureDecision (single, may parse a URL) and ingestBatch.
|
|
24
|
+
async function ingestOne(input, platform, opts = {}) {
|
|
25
|
+
let title = input.slice(0, 80);
|
|
26
|
+
let summary = input;
|
|
27
|
+
let sourceUrl = opts.sourceUrlOverride ?? null;
|
|
28
|
+
if (opts.sourceUrlOverride === undefined) {
|
|
29
|
+
try {
|
|
30
|
+
const url = new URL(input);
|
|
31
|
+
sourceUrl = url.href;
|
|
32
|
+
title = url.pathname.split('/').filter(Boolean).pop() ?? url.hostname;
|
|
33
|
+
summary = `Captured from ${url.hostname}`;
|
|
34
|
+
}
|
|
35
|
+
catch { /* plain text - use as-is */ }
|
|
36
|
+
}
|
|
37
|
+
if (opts.titleOverride)
|
|
38
|
+
title = opts.titleOverride.slice(0, 80);
|
|
39
|
+
const id = db.insertDecision({ title, summary, sourceUrl, platform });
|
|
40
|
+
// Embed title + summary so URL captures (whose summary is just "Captured
|
|
41
|
+
// from <host>") still carry the path-derived title's semantic content.
|
|
42
|
+
const embedText = title === summary ? summary : `${title}. ${summary}`;
|
|
43
|
+
const embedding = await getEmbedding(embedText);
|
|
44
|
+
db.setEmbedding(id, embedding);
|
|
45
|
+
const candidates = await findSimilar(embedding, 10, CONFLICT_THRESHOLD, id);
|
|
46
|
+
for (const c of candidates) {
|
|
47
|
+
db.insertLink({ sourceId: id, targetId: c.decisionId, relation: 'conflicts_with', confidence: c.score });
|
|
48
|
+
}
|
|
49
|
+
return { id, title, summary, sourceUrl, platform, conflicts: candidates };
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
async whoami() {
|
|
53
|
+
return { email: 'local', tenantId: 'local', mode: 'local-embedded' };
|
|
54
|
+
},
|
|
55
|
+
async captureDecision(input, platform = 'cli') {
|
|
56
|
+
const r = await ingestOne(input, platform);
|
|
57
|
+
return { id: r.id, title: r.title, summary: r.summary, sourceUrl: r.sourceUrl, platform: r.platform, conflicts: r.conflicts.map(c => c.decisionId) };
|
|
58
|
+
},
|
|
59
|
+
async ingestBatch(items) {
|
|
60
|
+
const snapshots = [];
|
|
61
|
+
for (const item of items) {
|
|
62
|
+
const r = await ingestOne(item.raw_text, item.platform ?? 'cli', {
|
|
63
|
+
titleOverride: item.title,
|
|
64
|
+
sourceUrlOverride: item.source_url ?? null,
|
|
65
|
+
});
|
|
66
|
+
snapshots.push({
|
|
67
|
+
id: r.id,
|
|
68
|
+
title: r.title,
|
|
69
|
+
summary: r.summary,
|
|
70
|
+
analysis: {
|
|
71
|
+
relatedDecisions: r.conflicts.map(c => ({
|
|
72
|
+
id: c.decisionId,
|
|
73
|
+
title: db.getDecisionById(c.decisionId)?.title ?? '',
|
|
74
|
+
relationship: 'conflicts_with',
|
|
75
|
+
confidence: c.score,
|
|
76
|
+
})),
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return { snapshots };
|
|
81
|
+
},
|
|
82
|
+
async searchDecisions(query, limit = 10) {
|
|
83
|
+
const embedding = await getEmbedding(query);
|
|
84
|
+
const similar = await findSimilar(embedding, limit, 0.1);
|
|
85
|
+
const decisions = similar
|
|
86
|
+
.map(s => {
|
|
87
|
+
const row = db.getDecisionById(s.decisionId);
|
|
88
|
+
return row ? { ...row, score: s.score } : null;
|
|
89
|
+
})
|
|
90
|
+
.filter((d) => d !== null);
|
|
91
|
+
return { decisions };
|
|
92
|
+
},
|
|
93
|
+
async checkAlignment(diff, _context) {
|
|
94
|
+
// Stage 1: embeddings find candidate related decisions (free, local).
|
|
95
|
+
const embedding = await getEmbedding(diff);
|
|
96
|
+
const similar = await findSimilar(embedding, 5, RELATES_THRESHOLD);
|
|
97
|
+
const candidates = similar
|
|
98
|
+
.map(s => {
|
|
99
|
+
const row = db.getDecisionById(s.decisionId);
|
|
100
|
+
return row ? { ...row, score: s.score } : null;
|
|
101
|
+
})
|
|
102
|
+
.filter((d) => d !== null);
|
|
103
|
+
if (!candidates.length) {
|
|
104
|
+
return { status: 'no_context', conflicting_decisions: [], relevant_decisions: [], message: 'No related decisions found in your local graph.' };
|
|
105
|
+
}
|
|
106
|
+
// Stage 2: type each candidate against the proposed change (LLM, user's key,
|
|
107
|
+
// lazy - only the few candidates we surface here). Degrades to untyped.
|
|
108
|
+
const subject = { title: 'Proposed change', summary: diff.slice(0, 2000) };
|
|
109
|
+
const relevant_decisions = [];
|
|
110
|
+
for (const c of candidates) {
|
|
111
|
+
const rel = await classifyRelationship(subject, { title: c.title, summary: c.summary });
|
|
112
|
+
relevant_decisions.push({
|
|
113
|
+
id: c.id,
|
|
114
|
+
title: c.title,
|
|
115
|
+
platform: c.platform,
|
|
116
|
+
source_url: c.sourceUrl,
|
|
117
|
+
relationship: rel?.type ?? 'relates_to',
|
|
118
|
+
confidence: rel?.confidence ?? c.score,
|
|
119
|
+
typed: rel !== null,
|
|
120
|
+
...(rel?.reason ? { reason: rel.reason } : {}),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const conflicting_decisions = relevant_decisions.filter(d => d.relationship === 'conflicts_with' || d.relationship === 'contradicts');
|
|
124
|
+
const status = conflicting_decisions.length ? 'conflict' : 'related';
|
|
125
|
+
const anyTyped = relevant_decisions.some(d => d.typed);
|
|
126
|
+
const message = status === 'conflict'
|
|
127
|
+
? `This change conflicts with ${conflicting_decisions.length} existing decision(s) across your tools - review before proceeding.`
|
|
128
|
+
: `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, conflicting_decisions, relevant_decisions, message };
|
|
130
|
+
},
|
|
131
|
+
async checkDrift(decisionId, content, _sourceType) {
|
|
132
|
+
const decisionEmbedding = db.getEmbedding(decisionId);
|
|
133
|
+
if (!decisionEmbedding)
|
|
134
|
+
return { decisionId, score: null, drifted: null, note: 'Decision not found or not yet embedded.' };
|
|
135
|
+
const contentEmbedding = await getEmbedding(content);
|
|
136
|
+
const score = cosineSimilarity(decisionEmbedding, contentEmbedding);
|
|
137
|
+
return { decisionId, score, drifted: score < DRIFT_THRESHOLD };
|
|
138
|
+
},
|
|
139
|
+
async getImpact(decisionId) {
|
|
140
|
+
const allLinks = db.listLinks({ decisionId });
|
|
141
|
+
const upstream = allLinks.filter(l => l.targetId === decisionId);
|
|
142
|
+
const downstream = allLinks.filter(l => l.sourceId === decisionId);
|
|
143
|
+
return { upstream, downstream };
|
|
144
|
+
},
|
|
145
|
+
async getConflicts() {
|
|
146
|
+
const links = db.listLinks({ relation: 'conflicts_with' });
|
|
147
|
+
return { links };
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=local-gateway-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-gateway-client.js","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"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"}
|