@aligndottech/cli 0.1.3 → 0.2.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/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 +583 -199
- 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 +2 -0
- package/dist/lib/fetchers/confluence.d.ts.map +1 -1
- package/dist/lib/fetchers/confluence.js +10 -32
- package/dist/lib/fetchers/confluence.js.map +1 -1
- package/dist/lib/fetchers/git.d.ts +2 -0
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +5 -12
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/fetchers/github.d.ts +1 -0
- package/dist/lib/fetchers/github.d.ts.map +1 -1
- package/dist/lib/fetchers/github.js +3 -40
- package/dist/lib/fetchers/github.js.map +1 -1
- package/dist/lib/fetchers/gitlab.d.ts +1 -0
- package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
- package/dist/lib/fetchers/gitlab.js +3 -21
- package/dist/lib/fetchers/gitlab.js.map +1 -1
- package/dist/lib/fetchers/jira.d.ts +2 -0
- package/dist/lib/fetchers/jira.d.ts.map +1 -1
- package/dist/lib/fetchers/jira.js +10 -51
- package/dist/lib/fetchers/jira.js.map +1 -1
- package/dist/lib/fetchers/linear.d.ts +1 -0
- package/dist/lib/fetchers/linear.d.ts.map +1 -1
- package/dist/lib/fetchers/linear.js +3 -55
- package/dist/lib/fetchers/linear.js.map +1 -1
- package/dist/lib/fetchers/notion.d.ts +1 -0
- package/dist/lib/fetchers/notion.d.ts.map +1 -1
- package/dist/lib/fetchers/notion.js +3 -44
- package/dist/lib/fetchers/notion.js.map +1 -1
- package/dist/lib/fetchers/slack.d.ts +1 -0
- package/dist/lib/fetchers/slack.d.ts.map +1 -1
- package/dist/lib/fetchers/slack.js +3 -59
- package/dist/lib/fetchers/slack.js.map +1 -1
- package/dist/lib/fetchers/teams.d.ts +1 -0
- package/dist/lib/fetchers/teams.d.ts.map +1 -1
- package/dist/lib/fetchers/teams.js +3 -59
- package/dist/lib/fetchers/teams.js.map +1 -1
- package/dist/lib/fetchers/zoom.d.ts +1 -0
- package/dist/lib/fetchers/zoom.d.ts.map +1 -1
- package/dist/lib/fetchers/zoom.js +3 -57
- 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 +9 -8
- 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 +27 -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,60 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
.split('\n')
|
|
4
|
-
.filter(line => line.trim() !== '' &&
|
|
5
|
-
line.trim() !== 'WEBVTT' &&
|
|
6
|
-
!/^\d+$/.test(line.trim()) &&
|
|
7
|
-
!line.includes(' --> '))
|
|
8
|
-
.join(' ')
|
|
9
|
-
.replace(/\s+/g, ' ')
|
|
10
|
-
.trim();
|
|
11
|
-
}
|
|
12
|
-
function encodeMeetingUuid(uuid) {
|
|
13
|
-
const encoded = encodeURIComponent(uuid);
|
|
14
|
-
return uuid.includes('//') ? encodeURIComponent(encoded) : encoded;
|
|
15
|
-
}
|
|
16
|
-
async function zoomGet(path, token) {
|
|
17
|
-
const res = await fetch(`https://api.zoom.us/v2${path}`, {
|
|
18
|
-
headers: { Authorization: `Bearer ${token}` },
|
|
19
|
-
});
|
|
20
|
-
if (!res.ok) {
|
|
21
|
-
const err = await res.json().catch(() => ({}));
|
|
22
|
-
throw new Error(`Zoom API error ${res.status}: ${err.message ?? 'unknown'}`);
|
|
23
|
-
}
|
|
24
|
-
return res.json();
|
|
25
|
-
}
|
|
1
|
+
import { ZoomFetcher } from '@aligndottech/connector-core';
|
|
2
|
+
/** Read-only personal Zoom import (canonical fetcher in connector-core). */
|
|
26
3
|
export async function fetchZoomItems(opts) {
|
|
27
|
-
|
|
28
|
-
const path = opts.uuid
|
|
29
|
-
? `/meetings/${encodeMeetingUuid(opts.uuid)}/recordings`
|
|
30
|
-
: `/users/me/recordings?page_size=30`;
|
|
31
|
-
const data = await zoomGet(path, opts.token);
|
|
32
|
-
const meetings = data.meetings ?? [];
|
|
33
|
-
const items = [];
|
|
34
|
-
for (const meeting of meetings) {
|
|
35
|
-
if (items.length >= limit)
|
|
36
|
-
break;
|
|
37
|
-
const vttFile = (meeting.recording_files ?? []).find(f => f.file_type === 'TRANSCRIPT' && f.status === 'completed');
|
|
38
|
-
if (!vttFile)
|
|
39
|
-
continue;
|
|
40
|
-
try {
|
|
41
|
-
const vttRes = await fetch(`${vttFile.download_url}?access_token=${opts.token}`);
|
|
42
|
-
if (!vttRes.ok)
|
|
43
|
-
continue;
|
|
44
|
-
const vttText = await vttRes.text();
|
|
45
|
-
const transcript = parseWebVtt(vttText);
|
|
46
|
-
if (!transcript)
|
|
47
|
-
continue;
|
|
48
|
-
const date = meeting.start_time.slice(0, 10);
|
|
49
|
-
items.push({
|
|
50
|
-
source_url: `https://zoom.us/recording/${encodeMeetingUuid(meeting.uuid)}`,
|
|
51
|
-
platform: 'zoom',
|
|
52
|
-
raw_text: `[${meeting.topic} - ${date}]\n${transcript}`.slice(0, 4000),
|
|
53
|
-
title: `${meeting.topic} (${date})`.slice(0, 80),
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
catch { /* skip recordings with inaccessible transcripts */ }
|
|
57
|
-
}
|
|
58
|
-
return items;
|
|
4
|
+
return new ZoomFetcher().fetch(opts);
|
|
59
5
|
}
|
|
60
6
|
//# sourceMappingURL=zoom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/lib/fetchers/zoom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/lib/fetchers/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAsD;IACzF,OAAO,IAAI,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-friendly timestamps for CLI output (ALI-118): relative for recent
|
|
3
|
+
* decisions ("today", "3 days ago") so recency is obvious at a glance, absolute
|
|
4
|
+
* ("30 May 2026") once it's older. `now` is injectable for deterministic tests.
|
|
5
|
+
*/
|
|
6
|
+
export declare function formatWhen(iso?: string | null, now?: number): string;
|
|
7
|
+
//# sourceMappingURL=format-date.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-date.d.ts","sourceRoot":"","sources":["../../src/lib/format-date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAehF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-friendly timestamps for CLI output (ALI-118): relative for recent
|
|
3
|
+
* decisions ("today", "3 days ago") so recency is obvious at a glance, absolute
|
|
4
|
+
* ("30 May 2026") once it's older. `now` is injectable for deterministic tests.
|
|
5
|
+
*/
|
|
6
|
+
export function formatWhen(iso, now = Date.now()) {
|
|
7
|
+
if (!iso)
|
|
8
|
+
return '';
|
|
9
|
+
const d = new Date(iso);
|
|
10
|
+
const t = d.getTime();
|
|
11
|
+
if (Number.isNaN(t))
|
|
12
|
+
return '';
|
|
13
|
+
const abs = d.toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); // "30 May 2026"
|
|
14
|
+
const diffMs = now - t;
|
|
15
|
+
if (diffMs < 0)
|
|
16
|
+
return abs; // future-dated: just show the date
|
|
17
|
+
const days = Math.floor(diffMs / 86_400_000);
|
|
18
|
+
if (days === 0)
|
|
19
|
+
return 'today';
|
|
20
|
+
if (days === 1)
|
|
21
|
+
return 'yesterday';
|
|
22
|
+
if (days < 30)
|
|
23
|
+
return `${days} days ago`;
|
|
24
|
+
return abs;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=format-date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-date.js","sourceRoot":"","sources":["../../src/lib/format-date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAmB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACtE,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACtB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,GAAG,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,gBAAgB;IAChH,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,mCAAmC;IAE/D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC7C,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/B,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACnC,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,WAAW,CAAC;IACzC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -31,6 +31,8 @@ export interface SearchResults {
|
|
|
31
31
|
summary: string;
|
|
32
32
|
status: string;
|
|
33
33
|
similarity?: number;
|
|
34
|
+
author?: DecisionAuthor | null;
|
|
35
|
+
created_at?: string;
|
|
34
36
|
}>;
|
|
35
37
|
count: number;
|
|
36
38
|
strategy: 'semantic' | 'keyword';
|
|
@@ -120,12 +122,8 @@ export interface DriftItem {
|
|
|
120
122
|
drift_summary: string;
|
|
121
123
|
checked_at: string;
|
|
122
124
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
platform: string;
|
|
126
|
-
raw_text: string;
|
|
127
|
-
title?: string;
|
|
128
|
-
}
|
|
125
|
+
import type { FetcherItem as BatchIngestItem, DecisionAuthor } from '@aligndottech/connector-core';
|
|
126
|
+
export type { DecisionAuthor, BatchIngestItem };
|
|
129
127
|
export interface BatchIngestResult {
|
|
130
128
|
snapshots: Array<{
|
|
131
129
|
id: string;
|
|
@@ -145,7 +143,7 @@ export declare class GatewayError extends Error {
|
|
|
145
143
|
readonly statusCode: number;
|
|
146
144
|
constructor(message: string, statusCode: number);
|
|
147
145
|
}
|
|
148
|
-
|
|
146
|
+
declare function buildHttpGatewayClient(env: EnvironmentConfig): {
|
|
149
147
|
whoami(): Promise<WhoAmI>;
|
|
150
148
|
listConnectors(): Promise<ConnectorInfo[]>;
|
|
151
149
|
getConnectorHealth(key: string): Promise<ConnectorHealth>;
|
|
@@ -213,7 +211,10 @@ export declare function createGatewayClient(env: EnvironmentConfig): {
|
|
|
213
211
|
decision_id?: string;
|
|
214
212
|
}): Promise<DecisionLink[]>;
|
|
215
213
|
getDriftSummary(): Promise<DriftItem[]>;
|
|
216
|
-
ingestBatch(items: BatchIngestItem[]
|
|
214
|
+
ingestBatch(items: BatchIngestItem[], opts?: {
|
|
215
|
+
deferEnrichment?: boolean;
|
|
216
|
+
}): Promise<BatchIngestResult>;
|
|
217
217
|
getStreamUrl(jobId: string): string;
|
|
218
218
|
};
|
|
219
|
+
export declare function createGatewayClient(env: EnvironmentConfig): ReturnType<typeof buildHttpGatewayClient>;
|
|
219
220
|
//# sourceMappingURL=gateway-client.d.ts.map
|
|
@@ -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":"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"}
|
|
@@ -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"}
|