@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.
Files changed (58) hide show
  1. package/.mcp.json +1 -1
  2. package/README.md +15 -4
  3. package/amp/settings.example.json +1 -1
  4. package/claude/claude_desktop_config.example.json +1 -1
  5. package/cline/cline_mcp_settings.example.json +1 -1
  6. package/copilot/mcp-config.example.json +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +5 -2
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/gate-serve.d.ts.map +1 -1
  11. package/dist/commands/gate-serve.js +35 -1
  12. package/dist/commands/gate-serve.js.map +1 -1
  13. package/dist/commands/gate.d.ts +10 -0
  14. package/dist/commands/gate.d.ts.map +1 -1
  15. package/dist/commands/gate.js +50 -4
  16. package/dist/commands/gate.js.map +1 -1
  17. package/dist/gate/config.d.ts +2 -0
  18. package/dist/gate/config.d.ts.map +1 -1
  19. package/dist/gate/config.js +26 -3
  20. package/dist/gate/config.js.map +1 -1
  21. package/dist/gate/hosted-sync.d.ts +74 -0
  22. package/dist/gate/hosted-sync.d.ts.map +1 -0
  23. package/dist/gate/hosted-sync.js +138 -0
  24. package/dist/gate/hosted-sync.js.map +1 -0
  25. package/dist/receipt/embeddings.d.ts +34 -0
  26. package/dist/receipt/embeddings.d.ts.map +1 -0
  27. package/dist/receipt/embeddings.js +140 -0
  28. package/dist/receipt/embeddings.js.map +1 -0
  29. package/dist/receipt/live-server.d.ts +3 -0
  30. package/dist/receipt/live-server.d.ts.map +1 -1
  31. package/dist/receipt/live-server.js +24 -3
  32. package/dist/receipt/live-server.js.map +1 -1
  33. package/dist/receipt/receipt-css.d.ts.map +1 -1
  34. package/dist/receipt/receipt-css.js +24 -0
  35. package/dist/receipt/receipt-css.js.map +1 -1
  36. package/dist/receipt/render-receipt.d.ts +4 -1
  37. package/dist/receipt/render-receipt.d.ts.map +1 -1
  38. package/dist/receipt/render-receipt.js +192 -67
  39. package/dist/receipt/render-receipt.js.map +1 -1
  40. package/dist/receipt/search.d.ts +79 -0
  41. package/dist/receipt/search.d.ts.map +1 -0
  42. package/dist/receipt/search.js +475 -0
  43. package/dist/receipt/search.js.map +1 -0
  44. package/droid/README.md +1 -1
  45. package/droid/mcp.example.json +1 -1
  46. package/gemini/settings.example.json +1 -1
  47. package/grok/README.md +1 -1
  48. package/kilo/kilo.example.json +1 -1
  49. package/kimi/mcp.example.json +1 -1
  50. package/kiro/mcp.example.json +1 -1
  51. package/manifest.json +1 -1
  52. package/mastracode/mcp.example.json +1 -1
  53. package/mcp.json +1 -1
  54. package/openai/codex.config.example.toml +1 -1
  55. package/opencode/opencode.example.json +1 -1
  56. package/package.json +3 -2
  57. package/qwen/settings.example.json +1 -1
  58. package/server.json +2 -2
@@ -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
- return { port, otlpPort, failureMode, servers };
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
- return { port: GATE_DEFAULT_PORT, otlpPort: GATE_DEFAULT_OTLP_PORT, failureMode: "failOpen", servers: [] };
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 validateGateways(raw);
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
  };
@@ -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;AAenD,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;CACxB;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,CA2V5B"}
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
- const result = renderFeedPage(model.events, filters, requestedPage, Date.now(), true);
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);