@shield-agent/kya 0.18.0 → 0.20.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/.mcp.json +1 -1
- package/README.md +15 -4
- package/amp/settings.example.json +1 -1
- package/claude/claude_desktop_config.example.json +1 -1
- package/cline/cline_mcp_settings.example.json +1 -1
- package/copilot/mcp-config.example.json +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/gate-serve.d.ts.map +1 -1
- package/dist/commands/gate-serve.js +35 -1
- package/dist/commands/gate-serve.js.map +1 -1
- package/dist/commands/gate.d.ts +10 -0
- package/dist/commands/gate.d.ts.map +1 -1
- package/dist/commands/gate.js +50 -4
- package/dist/commands/gate.js.map +1 -1
- package/dist/gate/config.d.ts +2 -0
- package/dist/gate/config.d.ts.map +1 -1
- package/dist/gate/config.js +26 -3
- package/dist/gate/config.js.map +1 -1
- package/dist/gate/hosted-sync.d.ts +74 -0
- package/dist/gate/hosted-sync.d.ts.map +1 -0
- package/dist/gate/hosted-sync.js +138 -0
- package/dist/gate/hosted-sync.js.map +1 -0
- package/dist/receipt/embeddings.d.ts +34 -0
- package/dist/receipt/embeddings.d.ts.map +1 -0
- package/dist/receipt/embeddings.js +140 -0
- package/dist/receipt/embeddings.js.map +1 -0
- package/dist/receipt/live-server.d.ts +3 -0
- package/dist/receipt/live-server.d.ts.map +1 -1
- package/dist/receipt/live-server.js +24 -3
- package/dist/receipt/live-server.js.map +1 -1
- package/dist/receipt/receipt-css.d.ts.map +1 -1
- package/dist/receipt/receipt-css.js +24 -0
- package/dist/receipt/receipt-css.js.map +1 -1
- package/dist/receipt/render-receipt.d.ts +4 -1
- package/dist/receipt/render-receipt.d.ts.map +1 -1
- package/dist/receipt/render-receipt.js +192 -67
- package/dist/receipt/render-receipt.js.map +1 -1
- package/dist/receipt/search.d.ts +79 -0
- package/dist/receipt/search.d.ts.map +1 -0
- package/dist/receipt/search.js +475 -0
- package/dist/receipt/search.js.map +1 -0
- package/droid/README.md +1 -1
- package/droid/mcp.example.json +1 -1
- package/gemini/settings.example.json +1 -1
- package/grok/README.md +1 -1
- package/kilo/kilo.example.json +1 -1
- package/kimi/mcp.example.json +1 -1
- package/kiro/mcp.example.json +1 -1
- package/manifest.json +1 -1
- package/mastracode/mcp.example.json +1 -1
- package/mcp.json +1 -1
- package/openai/codex.config.example.toml +1 -1
- package/opencode/opencode.example.json +1 -1
- package/package.json +3 -2
- package/qwen/settings.example.json +1 -1
- package/server.json +2 -2
package/dist/gate/config.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* it with a `recipes` catalog of ready-to-move entries for the well-known
|
|
5
5
|
* servers from the MCP server registry.
|
|
6
6
|
*/
|
|
7
|
+
import { randomUUID } from "node:crypto";
|
|
7
8
|
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
8
9
|
import { join } from "node:path";
|
|
9
10
|
import { globalConfigDir } from "../config.js";
|
|
@@ -123,12 +124,33 @@ export function validateGateways(raw) {
|
|
|
123
124
|
}
|
|
124
125
|
seen.add(s.id);
|
|
125
126
|
}
|
|
126
|
-
|
|
127
|
+
let instanceId;
|
|
128
|
+
if (raw.instanceId !== undefined) {
|
|
129
|
+
if (typeof raw.instanceId !== "string" || raw.instanceId.length === 0) {
|
|
130
|
+
throw new UsageError('gateways.json: "instanceId" must be a non-empty string');
|
|
131
|
+
}
|
|
132
|
+
instanceId = raw.instanceId;
|
|
133
|
+
}
|
|
134
|
+
return { port, otlpPort, failureMode, servers, ...(instanceId ? { instanceId } : {}) };
|
|
135
|
+
}
|
|
136
|
+
function defaultGatewaysConfig() {
|
|
137
|
+
return { port: GATE_DEFAULT_PORT, otlpPort: GATE_DEFAULT_OTLP_PORT, failureMode: "failOpen", servers: [] };
|
|
138
|
+
}
|
|
139
|
+
function persistInstanceId(path, raw, instanceId) {
|
|
140
|
+
const cfg = validateGateways(raw);
|
|
141
|
+
if (cfg.instanceId)
|
|
142
|
+
return cfg;
|
|
143
|
+
const patched = { ...raw, instanceId };
|
|
144
|
+
atomicWriteSync(path, `${JSON.stringify(patched, null, 2)}\n`);
|
|
145
|
+
return { ...cfg, instanceId };
|
|
127
146
|
}
|
|
128
147
|
export function readGateways(env = process.env) {
|
|
129
148
|
const path = gatewaysPath(env);
|
|
130
149
|
if (!existsSync(path)) {
|
|
131
|
-
|
|
150
|
+
mkdirSync(globalConfigDir(env), { recursive: true });
|
|
151
|
+
const cfg = { ...defaultGatewaysConfig(), instanceId: randomUUID() };
|
|
152
|
+
atomicWriteSync(path, `${JSON.stringify(cfg, null, 2)}\n`);
|
|
153
|
+
return cfg;
|
|
132
154
|
}
|
|
133
155
|
let raw;
|
|
134
156
|
try {
|
|
@@ -137,7 +159,7 @@ export function readGateways(env = process.env) {
|
|
|
137
159
|
catch {
|
|
138
160
|
throw new UsageError(`${path} is not valid JSON — fix it by hand, then re-run kya gate run`);
|
|
139
161
|
}
|
|
140
|
-
return
|
|
162
|
+
return persistInstanceId(path, raw, randomUUID());
|
|
141
163
|
}
|
|
142
164
|
const RECIPES = [
|
|
143
165
|
{ id: "playwright", transport: "stdio", cmd: ["npx", "-y", "@playwright/mcp@latest"], note: "Browser automation" },
|
|
@@ -177,6 +199,7 @@ export function scaffoldGateways(env = process.env) {
|
|
|
177
199
|
// server then fails silently — its tools just vanish). failClosed is the
|
|
178
200
|
// strict choice: any broken target stops the whole gateway.
|
|
179
201
|
failureMode: "failOpen",
|
|
202
|
+
instanceId: randomUUID(),
|
|
180
203
|
servers: [],
|
|
181
204
|
recipes: RECIPES.map(({ note, ...entry }) => ({ note, ...entry })),
|
|
182
205
|
};
|
package/dist/gate/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/gate/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/gate/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type GatewaysConfig } from "./config.js";
|
|
2
|
+
export type GatewayHostedState = "not-set-up" | "configured-stopped" | "running";
|
|
3
|
+
export interface HostedGatewayPayload {
|
|
4
|
+
gatewayUid: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
state: GatewayHostedState;
|
|
7
|
+
port?: number;
|
|
8
|
+
otlpPort?: number;
|
|
9
|
+
failureMode: "failOpen" | "failClosed";
|
|
10
|
+
bindDetail: string;
|
|
11
|
+
binaryVersion?: string;
|
|
12
|
+
startedAt?: string;
|
|
13
|
+
config: {
|
|
14
|
+
port?: number;
|
|
15
|
+
otlpPort?: number;
|
|
16
|
+
failureMode: string;
|
|
17
|
+
servers: HostedGatewayServer[];
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface HostedGatewayServer {
|
|
21
|
+
id: string;
|
|
22
|
+
transport: "stdio" | "http";
|
|
23
|
+
cmd?: string[];
|
|
24
|
+
url?: string;
|
|
25
|
+
importedFrom?: string[];
|
|
26
|
+
defaultTier?: "READ" | "WRITE" | "ADMIN";
|
|
27
|
+
denyPatterns?: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface SyncOpts {
|
|
30
|
+
readonly cwd: string;
|
|
31
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
32
|
+
readonly gatewaysConfig: GatewaysConfig;
|
|
33
|
+
readonly supervisorState?: {
|
|
34
|
+
readonly url?: string;
|
|
35
|
+
readonly port?: number;
|
|
36
|
+
readonly startedAt?: string;
|
|
37
|
+
readonly state?: GatewayHostedState;
|
|
38
|
+
readonly binaryVersion?: string;
|
|
39
|
+
};
|
|
40
|
+
readonly baseUrl: string;
|
|
41
|
+
readonly apiKey: string;
|
|
42
|
+
/** Injectable fetch for tests; defaults to global fetch. */
|
|
43
|
+
readonly fetchFn?: typeof fetch;
|
|
44
|
+
readonly logger?: {
|
|
45
|
+
readonly warn: (msg: string) => void;
|
|
46
|
+
};
|
|
47
|
+
/** Bypass the config-hash short-circuit (used by heartbeats). */
|
|
48
|
+
readonly force?: boolean;
|
|
49
|
+
}
|
|
50
|
+
interface LastSync {
|
|
51
|
+
readonly ok: boolean;
|
|
52
|
+
readonly at: string;
|
|
53
|
+
readonly error?: string;
|
|
54
|
+
}
|
|
55
|
+
/** Reset the in-memory "already sent" hash and last result (tests). */
|
|
56
|
+
export declare function resetHostedSyncHash(): void;
|
|
57
|
+
/** Snapshot of the most recent sync attempt, successful or not. */
|
|
58
|
+
export declare function lastHostedSyncResult(): LastSync | undefined;
|
|
59
|
+
export declare function buildHostedGatewayPayload(opts: SyncOpts): HostedGatewayPayload;
|
|
60
|
+
export declare function syncGatewayToHosted(opts: SyncOpts): Promise<void>;
|
|
61
|
+
export interface HostedSyncEnvInput {
|
|
62
|
+
readonly cwd: string;
|
|
63
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
64
|
+
readonly state?: GatewayHostedState;
|
|
65
|
+
readonly binaryVersion?: string;
|
|
66
|
+
readonly logger?: {
|
|
67
|
+
readonly warn: (msg: string) => void;
|
|
68
|
+
};
|
|
69
|
+
readonly force?: boolean;
|
|
70
|
+
}
|
|
71
|
+
/** Convenience trigger that reads credentials from the environment and fires-and-forgets. */
|
|
72
|
+
export declare function triggerHostedSyncFromEnv(input: HostedSyncEnvInput): void;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=hosted-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-sync.d.ts","sourceRoot":"","sources":["../../src/gate/hosted-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSS-side hosted sync client for the KYA Gateway.
|
|
3
|
+
*
|
|
4
|
+
* Pushes a gateway state/config payload to `POST /api/v1/kya/gateways`
|
|
5
|
+
* on the hosted platform. The sync is fire-and-forget: it never throws,
|
|
6
|
+
* never blocks gate startup/tool calls, and logs a one-line warning on
|
|
7
|
+
* failure. Missing credentials short-circuit to a no-op.
|
|
8
|
+
*/
|
|
9
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
10
|
+
import { basename } from "node:path";
|
|
11
|
+
import { denyPatternsFor } from "./config-gen.js";
|
|
12
|
+
import { mcpServerDefaultTier } from "../mcp-servers.js";
|
|
13
|
+
import { readGateways } from "./config.js";
|
|
14
|
+
import { readGateState } from "./daemon.js";
|
|
15
|
+
import { pidAlive } from "../receipt/daemon.js";
|
|
16
|
+
let lastSentHash;
|
|
17
|
+
let lastSyncResult;
|
|
18
|
+
/** Reset the in-memory "already sent" hash and last result (tests). */
|
|
19
|
+
export function resetHostedSyncHash() {
|
|
20
|
+
lastSentHash = undefined;
|
|
21
|
+
lastSyncResult = undefined;
|
|
22
|
+
}
|
|
23
|
+
/** Snapshot of the most recent sync attempt, successful or not. */
|
|
24
|
+
export function lastHostedSyncResult() {
|
|
25
|
+
return lastSyncResult;
|
|
26
|
+
}
|
|
27
|
+
const LOOPBACK_BIND_DETAIL = "loopback-only (L4 allowlist 127.0.0.0/8 + ::1; stats/readiness/admin listeners off)";
|
|
28
|
+
function hashPayload(payload) {
|
|
29
|
+
return createHash("sha256").update(JSON.stringify(payload)).digest("hex");
|
|
30
|
+
}
|
|
31
|
+
function resolveState(cfg, env, supervisorState) {
|
|
32
|
+
if (supervisorState?.state)
|
|
33
|
+
return supervisorState.state;
|
|
34
|
+
const state = readGateState(env);
|
|
35
|
+
if (state && pidAlive(state.pid))
|
|
36
|
+
return "running";
|
|
37
|
+
if (cfg.servers.length > 0)
|
|
38
|
+
return "configured-stopped";
|
|
39
|
+
return "not-set-up";
|
|
40
|
+
}
|
|
41
|
+
function serverPayload(server) {
|
|
42
|
+
const base = {
|
|
43
|
+
id: server.id,
|
|
44
|
+
transport: server.transport,
|
|
45
|
+
...(server.cmd ? { cmd: [...server.cmd] } : {}),
|
|
46
|
+
...(server.url ? { url: server.url } : {}),
|
|
47
|
+
...(server.importedFrom ? { importedFrom: [...server.importedFrom] } : {}),
|
|
48
|
+
};
|
|
49
|
+
const tier = mcpServerDefaultTier(server.id);
|
|
50
|
+
if (tier)
|
|
51
|
+
base.defaultTier = tier;
|
|
52
|
+
const deny = denyPatternsFor(server.id);
|
|
53
|
+
if (deny.length > 0)
|
|
54
|
+
base.denyPatterns = [...deny];
|
|
55
|
+
return base;
|
|
56
|
+
}
|
|
57
|
+
export function buildHostedGatewayPayload(opts) {
|
|
58
|
+
const cfg = opts.gatewaysConfig;
|
|
59
|
+
const state = resolveState(cfg, opts.env, opts.supervisorState);
|
|
60
|
+
return {
|
|
61
|
+
gatewayUid: cfg.instanceId ?? `anonymous-${randomUUID()}`,
|
|
62
|
+
name: basename(opts.cwd),
|
|
63
|
+
state,
|
|
64
|
+
port: opts.supervisorState?.port ?? cfg.port,
|
|
65
|
+
otlpPort: cfg.otlpPort,
|
|
66
|
+
failureMode: cfg.failureMode,
|
|
67
|
+
bindDetail: LOOPBACK_BIND_DETAIL,
|
|
68
|
+
binaryVersion: opts.supervisorState?.binaryVersion,
|
|
69
|
+
startedAt: opts.supervisorState?.startedAt,
|
|
70
|
+
config: {
|
|
71
|
+
port: cfg.port,
|
|
72
|
+
otlpPort: cfg.otlpPort,
|
|
73
|
+
failureMode: cfg.failureMode,
|
|
74
|
+
servers: cfg.servers.map(serverPayload),
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export async function syncGatewayToHosted(opts) {
|
|
79
|
+
const baseUrl = opts.baseUrl?.trim();
|
|
80
|
+
const apiKey = opts.apiKey?.trim();
|
|
81
|
+
if (!baseUrl || !apiKey)
|
|
82
|
+
return;
|
|
83
|
+
const payload = buildHostedGatewayPayload(opts);
|
|
84
|
+
const hash = hashPayload(payload);
|
|
85
|
+
if (!opts.force && lastSentHash === hash)
|
|
86
|
+
return;
|
|
87
|
+
lastSentHash = hash;
|
|
88
|
+
const fetchFn = opts.fetchFn ?? fetch;
|
|
89
|
+
const logger = opts.logger ?? { warn: (m) => console.warn(m) };
|
|
90
|
+
try {
|
|
91
|
+
const res = await fetchFn(`${baseUrl}/api/v1/kya/gateways`, {
|
|
92
|
+
method: "POST",
|
|
93
|
+
headers: {
|
|
94
|
+
Authorization: `Bearer ${apiKey}`,
|
|
95
|
+
"Content-Type": "application/json",
|
|
96
|
+
},
|
|
97
|
+
body: JSON.stringify(payload),
|
|
98
|
+
signal: AbortSignal.timeout(10_000),
|
|
99
|
+
redirect: "error",
|
|
100
|
+
});
|
|
101
|
+
if (!res.ok) {
|
|
102
|
+
const text = await res.text().catch(() => "");
|
|
103
|
+
throw new Error(`HTTP ${res.status}${text ? ` ${text}` : ""}`);
|
|
104
|
+
}
|
|
105
|
+
lastSyncResult = { ok: true, at: new Date().toISOString() };
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
109
|
+
lastSyncResult = { ok: false, at: new Date().toISOString(), error: message };
|
|
110
|
+
logger.warn(`hosted gateway sync failed: ${message}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** Convenience trigger that reads credentials from the environment and fires-and-forgets. */
|
|
114
|
+
export function triggerHostedSyncFromEnv(input) {
|
|
115
|
+
try {
|
|
116
|
+
const env = input.env ?? process.env;
|
|
117
|
+
const apiKey = (env.KYA_API_KEY ?? env.SHIELD_API_KEY ?? "").trim();
|
|
118
|
+
const baseUrl = (env.KYA_BASE_URL ?? "").trim();
|
|
119
|
+
if (!apiKey || !baseUrl)
|
|
120
|
+
return;
|
|
121
|
+
void syncGatewayToHosted({
|
|
122
|
+
cwd: input.cwd,
|
|
123
|
+
env,
|
|
124
|
+
gatewaysConfig: readGateways(env),
|
|
125
|
+
supervisorState: input.state
|
|
126
|
+
? { state: input.state, binaryVersion: input.binaryVersion }
|
|
127
|
+
: undefined,
|
|
128
|
+
baseUrl,
|
|
129
|
+
apiKey,
|
|
130
|
+
logger: input.logger,
|
|
131
|
+
force: input.force,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
/* best-effort — sync must never break gate commands */
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=hosted-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-sync.js","sourceRoot":"","sources":["../../src/gate/hosted-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { TrailEvent } from "../trail.js";
|
|
2
|
+
export interface EmbeddingProvider {
|
|
3
|
+
embed(text: string): Promise<number[] | undefined>;
|
|
4
|
+
}
|
|
5
|
+
/** Local MiniLM provider via fastembed; loaded on first use. */
|
|
6
|
+
export declare class LocalMiniLmProvider implements EmbeddingProvider {
|
|
7
|
+
private readonly env;
|
|
8
|
+
private model;
|
|
9
|
+
private tried;
|
|
10
|
+
constructor(env?: NodeJS.ProcessEnv);
|
|
11
|
+
embed(text: string): Promise<number[] | undefined>;
|
|
12
|
+
}
|
|
13
|
+
/** On-disk cache for event embeddings keyed by event id and document sha1. */
|
|
14
|
+
export declare class EventEmbeddingCache {
|
|
15
|
+
private data;
|
|
16
|
+
constructor();
|
|
17
|
+
private load;
|
|
18
|
+
private save;
|
|
19
|
+
getCached(eventId: string, textSha1: string): number[] | undefined;
|
|
20
|
+
setCached(eventId: string, textSha1: string, vector: number[]): void;
|
|
21
|
+
/** Replace many entries in one pass instead of filtering on every item. */
|
|
22
|
+
setMany(batch: readonly {
|
|
23
|
+
readonly id: string;
|
|
24
|
+
readonly sha1: string;
|
|
25
|
+
readonly vector: number[];
|
|
26
|
+
}[]): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build a map of embeddings for the given events. Already-cached entries are
|
|
30
|
+
* returned without calling the provider; missing entries are embedded and
|
|
31
|
+
* written to the cache in a single batch.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildEventEmbeddings(events: readonly TrailEvent[], provider: EmbeddingProvider, cache: EventEmbeddingCache): Promise<Map<string, number[]>>;
|
|
34
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/receipt/embeddings.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CACpD;AAyBD,gEAAgE;AAChE,qBAAa,mBAAoB,YAAW,iBAAiB;IAI/C,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAAS;gBAEO,GAAG,GAAE,MAAM,CAAC,UAAwB;IAE3D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CAiCzD;AAgBD,8EAA8E;AAC9E,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAY;;IAMxB,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,IAAI;IASZ,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAIlE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAIpE,2EAA2E;IAC3E,OAAO,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,GAAG,IAAI;CAO3G;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAqBhC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional local semantic embeddings for activity search.
|
|
3
|
+
*
|
|
4
|
+
* fastembed is imported lazily so that production installs without the
|
|
5
|
+
* package remain lightweight. The provider is gated by environment variables
|
|
6
|
+
* and never throws: any failure logs once to stderr and returns undefined.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { eventDocumentText, eventKey, eventTextSha1 } from "./search.js";
|
|
12
|
+
const MODEL_NAME = "BAAI/bge-small-en-v1.5";
|
|
13
|
+
const EXPECTED_DIMS = 384;
|
|
14
|
+
const CACHE_DIR = join(homedir(), ".kya", "models");
|
|
15
|
+
function modelDisabled(env) {
|
|
16
|
+
return (env.KYA_SEARCH_SEMANTIC === "off" ||
|
|
17
|
+
env.KYA_OFFLINE === "1" ||
|
|
18
|
+
env.KYA_OFFLINE === "true");
|
|
19
|
+
}
|
|
20
|
+
/** Local MiniLM provider via fastembed; loaded on first use. */
|
|
21
|
+
export class LocalMiniLmProvider {
|
|
22
|
+
env;
|
|
23
|
+
model;
|
|
24
|
+
tried = false;
|
|
25
|
+
constructor(env = process.env) {
|
|
26
|
+
this.env = env;
|
|
27
|
+
}
|
|
28
|
+
async embed(text) {
|
|
29
|
+
if (modelDisabled(this.env))
|
|
30
|
+
return undefined;
|
|
31
|
+
if (this.tried && !this.model)
|
|
32
|
+
return undefined;
|
|
33
|
+
this.tried = true;
|
|
34
|
+
try {
|
|
35
|
+
const fastembed = (await import("fastembed").catch(() => undefined));
|
|
36
|
+
if (!fastembed)
|
|
37
|
+
return undefined;
|
|
38
|
+
const EmbeddingModel = fastembed.EmbeddingModel?.[MODEL_NAME] ??
|
|
39
|
+
fastembed.EmbeddingModel?.BAAI_BGE_SMALL_EN_V1_5;
|
|
40
|
+
if (!EmbeddingModel)
|
|
41
|
+
return undefined;
|
|
42
|
+
if (!this.model) {
|
|
43
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
44
|
+
const FlagEmbedding = fastembed.FlagEmbedding;
|
|
45
|
+
if (!FlagEmbedding)
|
|
46
|
+
return undefined;
|
|
47
|
+
this.model = await FlagEmbedding.init({
|
|
48
|
+
model: EmbeddingModel,
|
|
49
|
+
cacheDir: CACHE_DIR,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
let result;
|
|
53
|
+
for await (const vec of this.model.embed([text])) {
|
|
54
|
+
result = vec;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
if (!result || result.length !== EXPECTED_DIMS)
|
|
58
|
+
return undefined;
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
63
|
+
console.error(`KYA semantic search unavailable: ${message}`);
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const CACHE_FILE = join(homedir(), ".kya", "search-index.json");
|
|
69
|
+
const CACHE_VERSION = 1;
|
|
70
|
+
/** On-disk cache for event embeddings keyed by event id and document sha1. */
|
|
71
|
+
export class EventEmbeddingCache {
|
|
72
|
+
data;
|
|
73
|
+
constructor() {
|
|
74
|
+
this.data = this.load();
|
|
75
|
+
}
|
|
76
|
+
load() {
|
|
77
|
+
try {
|
|
78
|
+
if (!existsSync(CACHE_FILE))
|
|
79
|
+
return { version: CACHE_VERSION, entries: [] };
|
|
80
|
+
const raw = JSON.parse(readFileSync(CACHE_FILE, "utf8"));
|
|
81
|
+
if (raw.version !== CACHE_VERSION)
|
|
82
|
+
return { version: CACHE_VERSION, entries: [] };
|
|
83
|
+
return raw;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return { version: CACHE_VERSION, entries: [] };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
save() {
|
|
90
|
+
try {
|
|
91
|
+
mkdirSync(join(homedir(), ".kya"), { recursive: true });
|
|
92
|
+
writeFileSync(CACHE_FILE, JSON.stringify(this.data, null, 2), "utf8");
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
/* best-effort cache */
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
getCached(eventId, textSha1) {
|
|
99
|
+
return this.data.entries.find((e) => e.id === eventId && e.sha1 === textSha1)?.vector;
|
|
100
|
+
}
|
|
101
|
+
setCached(eventId, textSha1, vector) {
|
|
102
|
+
this.setMany([{ id: eventId, sha1: textSha1, vector }]);
|
|
103
|
+
}
|
|
104
|
+
/** Replace many entries in one pass instead of filtering on every item. */
|
|
105
|
+
setMany(batch) {
|
|
106
|
+
const replaced = new Set(batch.map((b) => b.id));
|
|
107
|
+
const entries = this.data.entries.filter((e) => !replaced.has(e.id));
|
|
108
|
+
entries.push(...batch);
|
|
109
|
+
this.data = { version: CACHE_VERSION, entries };
|
|
110
|
+
this.save();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Build a map of embeddings for the given events. Already-cached entries are
|
|
115
|
+
* returned without calling the provider; missing entries are embedded and
|
|
116
|
+
* written to the cache in a single batch.
|
|
117
|
+
*/
|
|
118
|
+
export async function buildEventEmbeddings(events, provider, cache) {
|
|
119
|
+
const out = new Map();
|
|
120
|
+
const batch = [];
|
|
121
|
+
for (const e of events) {
|
|
122
|
+
const id = eventKey(e);
|
|
123
|
+
const sha1 = eventTextSha1(e);
|
|
124
|
+
const cached = cache.getCached(id, sha1);
|
|
125
|
+
if (cached) {
|
|
126
|
+
out.set(id, cached);
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const vector = await provider.embed(eventDocumentText(e));
|
|
130
|
+
if (vector) {
|
|
131
|
+
batch.push({ id, sha1, vector });
|
|
132
|
+
out.set(id, vector);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (batch.length > 0) {
|
|
136
|
+
cache.setMany(batch);
|
|
137
|
+
}
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/receipt/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { type IncomingHttpHeaders } from "node:http";
|
|
2
2
|
import type { ResolvedConfig } from "../config.js";
|
|
3
|
+
import type { EmbeddingProvider } from "./embeddings.js";
|
|
3
4
|
export interface LiveReceiptOptions {
|
|
4
5
|
readonly config: ResolvedConfig;
|
|
5
6
|
readonly sessionId?: string;
|
|
6
7
|
readonly days: number;
|
|
7
8
|
/** Prefer this port; 0 = ephemeral. Loopback-only bind. */
|
|
8
9
|
readonly port?: number;
|
|
10
|
+
/** Test-only injection point for the embedding provider. */
|
|
11
|
+
readonly embeddingProvider?: EmbeddingProvider;
|
|
9
12
|
}
|
|
10
13
|
export interface LiveReceiptServer {
|
|
11
14
|
readonly url: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-server.d.ts","sourceRoot":"","sources":["../../src/receipt/live-server.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,mBAAmB,EAIzB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"live-server.d.ts","sourceRoot":"","sources":["../../src/receipt/live-server.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,mBAAmB,EAIzB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAYnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAmBD,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IACpC,MAAM,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,OAAO,EAAE,mBAAmB,CAAC;CAC9B,GAAG,OAAO,CAYV;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAoX5B"}
|
|
@@ -11,6 +11,7 @@ import { CLI_VERSION } from "../version.js";
|
|
|
11
11
|
import { evaluateGatewayTool } from "./gate-page.js";
|
|
12
12
|
import { loadReceiptModel, renderReceiptHtml, renderFeedPage, } from "./render-receipt.js";
|
|
13
13
|
import { trailPath } from "../trail.js";
|
|
14
|
+
import { buildEventEmbeddings, EventEmbeddingCache, LocalMiniLmProvider } from "./embeddings.js";
|
|
14
15
|
const LOOPBACK = "127.0.0.1";
|
|
15
16
|
const MAX_SSE_CLIENTS = 8;
|
|
16
17
|
function dropClient(clients, res) {
|
|
@@ -52,6 +53,18 @@ export function startLiveReceiptServer(options) {
|
|
|
52
53
|
let debounce;
|
|
53
54
|
let closed = false;
|
|
54
55
|
let onSignal;
|
|
56
|
+
const cache = new EventEmbeddingCache();
|
|
57
|
+
const provider = options.embeddingProvider ?? new LocalMiniLmProvider(process.env);
|
|
58
|
+
let embeddings = new Map();
|
|
59
|
+
const refreshEmbeddings = async () => {
|
|
60
|
+
const model = loadReceiptModel({ cwd, sessionId: options.sessionId, days: options.days });
|
|
61
|
+
embeddings = await buildEventEmbeddings(model.events, provider, cache);
|
|
62
|
+
};
|
|
63
|
+
const embedQuery = async (q) => {
|
|
64
|
+
if (!q.trim())
|
|
65
|
+
return undefined;
|
|
66
|
+
return provider.embed(q.trim());
|
|
67
|
+
};
|
|
55
68
|
const broadcast = () => {
|
|
56
69
|
for (const client of [...clients]) {
|
|
57
70
|
try {
|
|
@@ -214,12 +227,17 @@ export function startLiveReceiptServer(options) {
|
|
|
214
227
|
const body = (await readJsonBody(req));
|
|
215
228
|
const filters = isFeedFilters(body?.filters) ? body.filters : {};
|
|
216
229
|
const requestedPage = typeof body?.page === "number" && body.page > 0 ? Math.floor(body.page) : 1;
|
|
230
|
+
const q = typeof body?.q === "string" ? body.q : "";
|
|
217
231
|
const model = loadReceiptModel({
|
|
218
232
|
cwd,
|
|
219
233
|
sessionId: options.sessionId,
|
|
220
234
|
days: options.days,
|
|
221
235
|
});
|
|
222
|
-
|
|
236
|
+
if (q.trim() && embeddings.size === 0) {
|
|
237
|
+
await refreshEmbeddings();
|
|
238
|
+
}
|
|
239
|
+
const queryEmbedding = await embedQuery(q);
|
|
240
|
+
const result = renderFeedPage(model.events, filters, requestedPage, Date.now(), true, q, embeddings, queryEmbedding);
|
|
223
241
|
return jsonOk(res, {
|
|
224
242
|
ok: true,
|
|
225
243
|
feedHtml: result.feedHtml,
|
|
@@ -272,14 +290,14 @@ export function startLiveReceiptServer(options) {
|
|
|
272
290
|
if (req.method === "GET" && (url.pathname === "/" || url.pathname === "/index.html")) {
|
|
273
291
|
let html;
|
|
274
292
|
try {
|
|
293
|
+
const q = url.searchParams.get("q") ?? "";
|
|
275
294
|
html = renderReceiptHtml(loadReceiptModel({
|
|
276
295
|
cwd,
|
|
277
296
|
sessionId: options.sessionId,
|
|
278
297
|
days: options.days,
|
|
279
298
|
live: true,
|
|
280
|
-
// Token rides the model into the script tag — never a post-hoc
|
|
281
|
-
// string replace on rendered HTML (attacker text could anchor it).
|
|
282
299
|
liveToken: token,
|
|
300
|
+
searchQuery: q,
|
|
283
301
|
}));
|
|
284
302
|
}
|
|
285
303
|
catch {
|
|
@@ -355,6 +373,7 @@ export function startLiveReceiptServer(options) {
|
|
|
355
373
|
watcher = watch(dirname(path), { persistent: true }, (_event, filename) => {
|
|
356
374
|
if (!filename || String(filename).endsWith("trail.jsonl")) {
|
|
357
375
|
scheduleBroadcast();
|
|
376
|
+
void refreshEmbeddings();
|
|
358
377
|
}
|
|
359
378
|
});
|
|
360
379
|
watcher.on("error", () => {
|
|
@@ -364,6 +383,8 @@ export function startLiveReceiptServer(options) {
|
|
|
364
383
|
catch {
|
|
365
384
|
/* still serve; live reload may be degraded */
|
|
366
385
|
}
|
|
386
|
+
// Warm the embedding cache in the background; failures degrade to BM25.
|
|
387
|
+
void refreshEmbeddings();
|
|
367
388
|
const waitUntilClosed = new Promise((waitResolve) => {
|
|
368
389
|
onSignal = () => {
|
|
369
390
|
void closeAll().then(waitResolve);
|