codesesh 0.16.0 → 0.17.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/dist/{chunk-MWSJTNOW.js → chunk-7APNDHQ6.js} +1545 -1021
- package/dist/chunk-7APNDHQ6.js.map +1 -0
- package/dist/{chunk-EWC6IODK.js → chunk-A4U2SMJJ.js} +5 -2
- package/dist/{chunk-EWC6IODK.js.map → chunk-A4U2SMJJ.js.map} +1 -1
- package/dist/dist-KEPJFHOC.js +115 -0
- package/dist/index.js +967 -713
- package/dist/index.js.map +1 -1
- package/dist/scan-refresh-worker.js +70 -64
- package/dist/scan-refresh-worker.js.map +1 -1
- package/dist/search-index-worker.js +2 -7
- package/dist/search-index-worker.js.map +1 -1
- package/dist/smart-tag-worker.js +2 -2
- package/dist/web/assets/index-B076CRkD.js +109 -0
- package/dist/web/assets/index-CWNbVhet.css +2 -0
- package/dist/web/assets/react-D9s532MZ.js +1821 -0
- package/dist/web/assets/{vendor-BVE7Fps8.js → vendor-i9U7_fNF.js} +15 -15
- package/dist/web/index.html +4 -4
- package/package.json +5 -10
- package/dist/chunk-MWSJTNOW.js.map +0 -1
- package/dist/dist-AIDCOQZO.js +0 -237
- package/dist/web/assets/index-BpmbwB2_.js +0 -113
- package/dist/web/assets/index-Bxe686Vr.css +0 -2
- package/dist/web/assets/react-3acXkZNw.js +0 -1821
- package/dist/web/icon/agent/antigravity.svg +0 -1
- package/dist/web/icon/agent/kilocode.svg +0 -1
- /package/dist/{dist-AIDCOQZO.js.map → dist-KEPJFHOC.js.map} +0 -0
|
@@ -1,74 +1,55 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-A4U2SMJJ.js";
|
|
3
3
|
import {
|
|
4
4
|
FileSystemSessionSource,
|
|
5
5
|
attachMissingProjectIdentities,
|
|
6
|
+
buildAgentCacheMeta,
|
|
7
|
+
computeSessionDiff,
|
|
6
8
|
createRegisteredAgents,
|
|
9
|
+
diffSessionSources,
|
|
7
10
|
ensureSessionTagsSync,
|
|
8
|
-
|
|
9
|
-
} from "./chunk-
|
|
11
|
+
sessionSignature
|
|
12
|
+
} from "./chunk-7APNDHQ6.js";
|
|
10
13
|
|
|
11
14
|
// src/scan-refresh-worker.ts
|
|
12
15
|
import { parentPort, workerData } from "worker_threads";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
import { isDeepStrictEqual } from "util";
|
|
17
|
+
function computeCacheMetaDiff(previous, next) {
|
|
18
|
+
const changes = {};
|
|
19
|
+
const removedIds = [];
|
|
20
|
+
for (const [id, meta] of Object.entries(next)) {
|
|
21
|
+
if (!isDeepStrictEqual(previous[id], meta)) changes[id] = meta;
|
|
18
22
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
function sourceFingerprintFromMeta(meta) {
|
|
22
|
-
return typeof meta?.sourceFingerprint === "string" ? meta.sourceFingerprint : null;
|
|
23
|
-
}
|
|
24
|
-
function parseSourceFingerprint(fingerprint) {
|
|
25
|
-
try {
|
|
26
|
-
const parsed = JSON.parse(fingerprint);
|
|
27
|
-
return Array.isArray(parsed) ? parsed : null;
|
|
28
|
-
} catch {
|
|
29
|
-
return null;
|
|
23
|
+
for (const id of Object.keys(previous)) {
|
|
24
|
+
if (!Object.hasOwn(next, id)) removedIds.push(id);
|
|
30
25
|
}
|
|
31
|
-
}
|
|
32
|
-
function sourceFingerprintMatches(source, cachedSession, cached) {
|
|
33
|
-
if (sourceFingerprintFromMeta(cached) === source.fingerprint) return true;
|
|
34
|
-
const current = parseSourceFingerprint(source.fingerprint);
|
|
35
|
-
if (!current || current.length < 5) return false;
|
|
36
|
-
return typeof cached?.sourceMtimeMs === "number" && cached.sourceMtimeMs === current[2] && (current[4] == null || cachedSession.title === current[4]);
|
|
37
|
-
}
|
|
38
|
-
function sourcePathFromMeta(meta) {
|
|
39
|
-
return typeof meta?.sourcePath === "string" ? meta.sourcePath : null;
|
|
40
|
-
}
|
|
41
|
-
function wasEnumeratedThisPass(cached, windowOptions) {
|
|
42
|
-
if (windowOptions?.from == null && windowOptions?.to == null) return true;
|
|
43
|
-
const mtimeMs = cached?.sourceMtimeMs;
|
|
44
|
-
return typeof mtimeMs !== "number" || matchesScanWindow(mtimeMs, windowOptions);
|
|
26
|
+
return { changes, removedIds };
|
|
45
27
|
}
|
|
46
28
|
function syncAgentSources(agent, cachedSessions, cachedMeta, windowOptions) {
|
|
47
29
|
const sessionMap = new Map(cachedSessions.map((session) => [session.id, session]));
|
|
48
30
|
const sourceRefs = agent.listSessionSources(windowOptions);
|
|
49
|
-
const
|
|
50
|
-
const changedIds
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
31
|
+
const sourceById = new Map(sourceRefs.map((source) => [source.sessionId, source]));
|
|
32
|
+
const { changedIds, removedIds } = diffSessionSources(
|
|
33
|
+
sourceRefs,
|
|
34
|
+
cachedSessions,
|
|
35
|
+
cachedMeta,
|
|
36
|
+
windowOptions
|
|
37
|
+
);
|
|
38
|
+
for (const sessionId of changedIds) {
|
|
39
|
+
const source = sourceById.get(sessionId);
|
|
40
|
+
if (!source) continue;
|
|
57
41
|
const next = agent.scanSessionSource(source.sourcePath);
|
|
58
|
-
changedIds.add(source.sessionId);
|
|
59
42
|
if (next) {
|
|
60
43
|
sessionMap.set(next.id, next);
|
|
61
44
|
} else {
|
|
62
|
-
sessionMap.delete(
|
|
45
|
+
sessionMap.delete(sessionId);
|
|
63
46
|
}
|
|
64
47
|
}
|
|
65
|
-
for (const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
return { sessions: [...sessionMap.values()], changedIds: [...changedIds] };
|
|
48
|
+
for (const sessionId of removedIds) sessionMap.delete(sessionId);
|
|
49
|
+
return {
|
|
50
|
+
sessions: [...sessionMap.values()],
|
|
51
|
+
changedIds: [.../* @__PURE__ */ new Set([...changedIds, ...removedIds])]
|
|
52
|
+
};
|
|
72
53
|
}
|
|
73
54
|
var TAG_SETTLE_MS = 6e4;
|
|
74
55
|
function isSettled(session, now) {
|
|
@@ -84,9 +65,8 @@ function finalizeSessions(agent, sessions) {
|
|
|
84
65
|
);
|
|
85
66
|
return withIdentity.map((session) => taggedById.get(session.id) ?? session);
|
|
86
67
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
async function run() {
|
|
68
|
+
async function run(data) {
|
|
69
|
+
const startedAt = performance.now();
|
|
90
70
|
const agent = createRegisteredAgents().find((item) => item.name === data.agentName);
|
|
91
71
|
if (!agent) {
|
|
92
72
|
throw new Error(`Unknown agent: ${data.agentName}`);
|
|
@@ -110,6 +90,7 @@ async function run() {
|
|
|
110
90
|
onProgress: (progress) => {
|
|
111
91
|
parentPort?.postMessage({
|
|
112
92
|
type: "progress",
|
|
93
|
+
requestId: data.requestId,
|
|
113
94
|
progress
|
|
114
95
|
});
|
|
115
96
|
}
|
|
@@ -117,23 +98,48 @@ async function run() {
|
|
|
117
98
|
);
|
|
118
99
|
}
|
|
119
100
|
sessions = finalizeSessions(agent, sessions);
|
|
101
|
+
const nextMeta = buildAgentCacheMeta(agent, new Set(sessions.map((session) => session.id)));
|
|
102
|
+
const metaDiff = computeCacheMetaDiff(data.meta, nextMeta);
|
|
103
|
+
const diff = computeSessionDiff(
|
|
104
|
+
data.previousSessions,
|
|
105
|
+
sessions,
|
|
106
|
+
[...changedIds ?? [], ...Object.keys(metaDiff.changes), ...metaDiff.removedIds],
|
|
107
|
+
sessionSignature
|
|
108
|
+
);
|
|
120
109
|
parentPort?.postMessage({
|
|
121
110
|
type: "done",
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
111
|
+
requestId: data.requestId,
|
|
112
|
+
changes: diff.changes,
|
|
113
|
+
removedSessionIds: diff.removedSessionIds,
|
|
114
|
+
meta: metaDiff.changes,
|
|
115
|
+
removedMetaIds: metaDiff.removedIds,
|
|
125
116
|
durationMs: performance.now() - startedAt
|
|
126
117
|
});
|
|
127
118
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
119
|
+
async function handleRequest(data) {
|
|
120
|
+
const startedAt = performance.now();
|
|
121
|
+
try {
|
|
122
|
+
await run(data);
|
|
123
|
+
} catch (error) {
|
|
124
|
+
parentPort?.postMessage({
|
|
125
|
+
type: "error",
|
|
126
|
+
requestId: data.requestId,
|
|
127
|
+
error: error instanceof Error ? error.message : String(error),
|
|
128
|
+
durationMs: performance.now() - startedAt
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
var requestTail = Promise.resolve();
|
|
133
|
+
function enqueueRequest(data) {
|
|
134
|
+
requestTail = requestTail.then(() => handleRequest(data));
|
|
135
|
+
}
|
|
136
|
+
var initialRequest = workerData;
|
|
137
|
+
if (initialRequest?.type === "run" && typeof initialRequest.requestId === "number" && typeof initialRequest.agentName === "string" && Array.isArray(initialRequest.previousSessions)) {
|
|
138
|
+
enqueueRequest(initialRequest);
|
|
136
139
|
}
|
|
140
|
+
parentPort?.on("message", (message) => {
|
|
141
|
+
if (message.type === "run") enqueueRequest(message);
|
|
142
|
+
});
|
|
137
143
|
export {
|
|
138
144
|
finalizeSessions
|
|
139
145
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scan-refresh-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport {\n attachMissingProjectIdentities,\n createRegisteredAgents,\n ensureSessionTagsSync,\n FileSystemSessionSource,\n matchesScanWindow,\n type AgentScanProgress,\n type BaseAgent,\n type ScanOptions,\n type SessionCacheMeta,\n type SessionHead,\n type SessionSourceRef,\n} from \"@codesesh/core\";\n\nexport type ScanRefreshWorkerMessage =\n | {\n type: \"progress\";\n progress: AgentScanProgress;\n }\n | {\n type: \"done\";\n sessions: SessionHead[];\n meta: Record<string, SessionCacheMeta>;\n changedIds?: string[];\n durationMs: number;\n }\n | {\n type: \"error\";\n error: string;\n durationMs: number;\n };\n\ninterface ScanRefreshWorkerData {\n agentName: string;\n previousSessions: SessionHead[];\n changedIds: string[] | null;\n sourceSync?: boolean;\n scanOptions: Pick<ScanOptions, \"from\" | \"to\" | \"fast\">;\n meta: Record<string, SessionCacheMeta>;\n}\n\nfunction serializeMeta(agent: {\n getSessionMetaMap: () => Map<string, SessionCacheMeta>;\n}): Record<string, SessionCacheMeta> {\n const metaMap = agent.getSessionMetaMap();\n const meta: Record<string, SessionCacheMeta> = {};\n for (const [id, data] of metaMap.entries()) {\n meta[id] = { id, ...(data as Record<string, unknown>) } as SessionCacheMeta;\n }\n return meta;\n}\n\nfunction sourceFingerprintFromMeta(meta: SessionCacheMeta | undefined): string | null {\n return typeof meta?.sourceFingerprint === \"string\" ? meta.sourceFingerprint : null;\n}\n\nfunction parseSourceFingerprint(fingerprint: string): unknown[] | null {\n try {\n const parsed = JSON.parse(fingerprint);\n return Array.isArray(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Compare a live source fingerprint against the cached meta. A direct string\n * match is the fast path; the fallback tolerates older cache entries written by\n * a different fingerprint format as long as the underlying mtime (array slot 2)\n * is unchanged, so a fingerprint-format bump does not force a full rescan.\n */\nfunction sourceFingerprintMatches(\n source: SessionSourceRef,\n cachedSession: SessionHead,\n cached: SessionCacheMeta | undefined,\n): boolean {\n if (sourceFingerprintFromMeta(cached) === source.fingerprint) return true;\n\n const current = parseSourceFingerprint(source.fingerprint);\n if (!current || current.length < 5) return false;\n\n return (\n typeof cached?.sourceMtimeMs === \"number\" &&\n cached.sourceMtimeMs === current[2] &&\n (current[4] == null || cachedSession.title === current[4])\n );\n}\n\nfunction sourcePathFromMeta(meta: SessionCacheMeta | undefined): string | null {\n return typeof meta?.sourcePath === \"string\" ? meta.sourcePath : null;\n}\n\n/**\n * A cached session outside the current scan window was never enumerated this\n * pass, so its absence from sourceRefs doesn't mean it was deleted on disk —\n * treat it as still present. Sessions with no recorded mtime predate this\n * field; keep them too rather than risk a false-positive removal.\n */\nfunction wasEnumeratedThisPass(\n cached: SessionCacheMeta | undefined,\n windowOptions: Pick<ScanOptions, \"from\" | \"to\"> | undefined,\n): boolean {\n if (windowOptions?.from == null && windowOptions?.to == null) return true;\n const mtimeMs = cached?.sourceMtimeMs;\n return typeof mtimeMs !== \"number\" || matchesScanWindow(mtimeMs, windowOptions);\n}\n\n/**\n * Source-level incremental sync, mirroring FileSystemSessionSource.incrementalScan.\n * Kept standalone because the worker cannot share the agent's live metaMap with\n * the main thread — it receives cached meta via workerData instead.\n */\nfunction syncAgentSources(\n agent: FileSystemSessionSource,\n cachedSessions: SessionHead[],\n cachedMeta: Record<string, SessionCacheMeta>,\n windowOptions?: Pick<ScanOptions, \"from\" | \"to\">,\n): { sessions: SessionHead[]; changedIds: string[] } {\n const sessionMap = new Map(cachedSessions.map((session) => [session.id, session]));\n const sourceRefs = agent.listSessionSources(windowOptions);\n const currentIds = new Set(sourceRefs.map((source) => source.sessionId));\n const changedIds = new Set<string>();\n\n for (const source of sourceRefs) {\n const cachedSession = sessionMap.get(source.sessionId);\n const cached = cachedMeta[source.sessionId];\n const sameSource = sourcePathFromMeta(cached) === source.sourcePath;\n const sameFingerprint =\n cachedSession && sourceFingerprintMatches(source, cachedSession, cached);\n if (cachedSession && sameSource && sameFingerprint) continue;\n\n const next = agent.scanSessionSource(source.sourcePath);\n changedIds.add(source.sessionId);\n if (next) {\n sessionMap.set(next.id, next);\n } else {\n sessionMap.delete(source.sessionId);\n }\n }\n\n for (const session of cachedSessions) {\n if (currentIds.has(session.id)) continue;\n if (!wasEnumeratedThisPass(cachedMeta[session.id], windowOptions)) continue;\n sessionMap.delete(session.id);\n changedIds.add(session.id);\n }\n\n return { sessions: [...sessionMap.values()], changedIds: [...changedIds] };\n}\n\n/**\n * A session still receiving writes will be stale again within seconds, so\n * recomputing its tags every refresh cycle is wasted work — wait for it to\n * settle before paying the getSessionData() parse cost.\n */\nconst TAG_SETTLE_MS = 60_000;\n\nfunction isSettled(session: SessionHead, now: number): boolean {\n return now - (session.time_updated ?? session.time_created) >= TAG_SETTLE_MS;\n}\n\n/**\n * Runs identity resolution (spawns git) and stale smart-tag reclassification\n * on the worker thread, off the server's main event loop.\n */\nexport function finalizeSessions(agent: BaseAgent, sessions: SessionHead[]): SessionHead[] {\n const withIdentity = attachMissingProjectIdentities(sessions);\n\n const now = Date.now();\n const settled = withIdentity.filter((session) => isSettled(session, now));\n if (settled.length === 0) return withIdentity;\n\n const taggedById = new Map(\n ensureSessionTagsSync(agent, settled).sessions.map((session) => [session.id, session]),\n );\n return withIdentity.map((session) => taggedById.get(session.id) ?? session);\n}\n\nconst data = workerData as ScanRefreshWorkerData;\nconst startedAt = performance.now();\n\nasync function run(): Promise<void> {\n const agent = createRegisteredAgents().find((item) => item.name === data.agentName);\n if (!agent) {\n throw new Error(`Unknown agent: ${data.agentName}`);\n }\n\n agent.setSessionMetaMap(new Map(Object.entries(data.meta)));\n\n const isAvailable = agent.isAvailable();\n let sessions: SessionHead[];\n let changedIds: string[] | undefined;\n\n if (!isAvailable) {\n sessions = [];\n } else if (data.sourceSync && agent instanceof FileSystemSessionSource) {\n const result = syncAgentSources(agent, data.previousSessions, data.meta, data.scanOptions);\n sessions = result.sessions;\n changedIds = result.changedIds;\n } else if (data.changedIds) {\n sessions = await Promise.resolve(agent.incrementalScan(data.previousSessions, data.changedIds));\n } else {\n sessions = await Promise.resolve(\n agent.scan({\n ...data.scanOptions,\n onProgress: (progress) => {\n parentPort?.postMessage({\n type: \"progress\",\n progress,\n } satisfies ScanRefreshWorkerMessage);\n },\n }),\n );\n }\n\n sessions = finalizeSessions(agent, sessions);\n\n parentPort?.postMessage({\n type: \"done\",\n sessions,\n meta: serializeMeta(agent),\n changedIds,\n durationMs: performance.now() - startedAt,\n } satisfies ScanRefreshWorkerMessage);\n}\n\ntry {\n await run();\n} catch (error) {\n parentPort?.postMessage({\n type: \"error\",\n error: error instanceof Error ? error.message : String(error),\n durationMs: performance.now() - startedAt,\n } satisfies ScanRefreshWorkerMessage);\n}\n"],"mappings":"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","names":["data"]}
|
|
1
|
+
{"version":3,"sources":["../src/scan-refresh-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport {\n attachMissingProjectIdentities,\n buildAgentCacheMeta,\n computeSessionDiff,\n createRegisteredAgents,\n diffSessionSources,\n ensureSessionTagsSync,\n FileSystemSessionSource,\n sessionSignature,\n type AgentScanProgress,\n type BaseAgent,\n type ScanOptions,\n type SessionCacheMeta,\n type SessionHead,\n type SessionHeadChange,\n} from \"@codesesh/core\";\n\nexport type ScanRefreshWorkerMessage =\n | {\n type: \"progress\";\n requestId: number;\n progress: AgentScanProgress;\n }\n | {\n type: \"done\";\n requestId: number;\n changes: SessionHeadChange[];\n removedSessionIds: string[];\n meta: Record<string, SessionCacheMeta>;\n removedMetaIds: string[];\n durationMs: number;\n }\n | {\n type: \"error\";\n requestId: number;\n error: string;\n durationMs: number;\n };\n\nexport interface ScanRefreshWorkerRequest {\n type: \"run\";\n requestId: number;\n agentName: string;\n previousSessions: SessionHead[];\n changedIds: string[] | null;\n sourceSync?: boolean;\n scanOptions: Pick<ScanOptions, \"from\" | \"to\" | \"fast\">;\n meta: Record<string, SessionCacheMeta>;\n}\n\ninterface CacheMetaDiff {\n changes: Record<string, SessionCacheMeta>;\n removedIds: string[];\n}\n\nfunction computeCacheMetaDiff(\n previous: Record<string, SessionCacheMeta>,\n next: Record<string, SessionCacheMeta>,\n): CacheMetaDiff {\n const changes: Record<string, SessionCacheMeta> = {};\n const removedIds: string[] = [];\n for (const [id, meta] of Object.entries(next)) {\n if (!isDeepStrictEqual(previous[id], meta)) changes[id] = meta;\n }\n for (const id of Object.keys(previous)) {\n if (!Object.hasOwn(next, id)) removedIds.push(id);\n }\n return { changes, removedIds };\n}\n\n/**\n * Source-level incremental sync. The change decision itself lives in\n * diffSessionSources so this path and FileSystemSessionSource.checkForChanges\n * cannot drift; only the re-parse and merge are local, because the worker holds\n * cached meta received over workerData rather than the agent's live metaMap.\n */\nfunction syncAgentSources(\n agent: FileSystemSessionSource,\n cachedSessions: SessionHead[],\n cachedMeta: Record<string, SessionCacheMeta>,\n windowOptions?: Pick<ScanOptions, \"from\" | \"to\">,\n): { sessions: SessionHead[]; changedIds: string[] } {\n const sessionMap = new Map(cachedSessions.map((session) => [session.id, session]));\n const sourceRefs = agent.listSessionSources(windowOptions);\n const sourceById = new Map(sourceRefs.map((source) => [source.sessionId, source]));\n const { changedIds, removedIds } = diffSessionSources(\n sourceRefs,\n cachedSessions,\n cachedMeta,\n windowOptions,\n );\n\n for (const sessionId of changedIds) {\n const source = sourceById.get(sessionId);\n if (!source) continue;\n const next = agent.scanSessionSource(source.sourcePath);\n if (next) {\n sessionMap.set(next.id, next);\n } else {\n sessionMap.delete(sessionId);\n }\n }\n\n for (const sessionId of removedIds) sessionMap.delete(sessionId);\n\n return {\n sessions: [...sessionMap.values()],\n changedIds: [...new Set([...changedIds, ...removedIds])],\n };\n}\n\n/**\n * A session still receiving writes will be stale again within seconds, so\n * recomputing its tags every refresh cycle is wasted work — wait for it to\n * settle before paying the getSessionData() parse cost.\n */\nconst TAG_SETTLE_MS = 60_000;\n\nfunction isSettled(session: SessionHead, now: number): boolean {\n return now - (session.time_updated ?? session.time_created) >= TAG_SETTLE_MS;\n}\n\n/**\n * Runs identity resolution (spawns git) and stale smart-tag reclassification\n * on the worker thread, off the server's main event loop.\n */\nexport function finalizeSessions(agent: BaseAgent, sessions: SessionHead[]): SessionHead[] {\n const withIdentity = attachMissingProjectIdentities(sessions);\n\n const now = Date.now();\n const settled = withIdentity.filter((session) => isSettled(session, now));\n if (settled.length === 0) return withIdentity;\n\n const taggedById = new Map(\n ensureSessionTagsSync(agent, settled).sessions.map((session) => [session.id, session]),\n );\n return withIdentity.map((session) => taggedById.get(session.id) ?? session);\n}\n\nasync function run(data: ScanRefreshWorkerRequest): Promise<void> {\n const startedAt = performance.now();\n const agent = createRegisteredAgents().find((item) => item.name === data.agentName);\n if (!agent) {\n throw new Error(`Unknown agent: ${data.agentName}`);\n }\n\n agent.setSessionMetaMap(new Map(Object.entries(data.meta)));\n\n const isAvailable = agent.isAvailable();\n let sessions: SessionHead[];\n let changedIds: string[] | undefined;\n\n if (!isAvailable) {\n sessions = [];\n } else if (data.sourceSync && agent instanceof FileSystemSessionSource) {\n const result = syncAgentSources(agent, data.previousSessions, data.meta, data.scanOptions);\n sessions = result.sessions;\n changedIds = result.changedIds;\n } else if (data.changedIds) {\n sessions = await Promise.resolve(agent.incrementalScan(data.previousSessions, data.changedIds));\n } else {\n sessions = await Promise.resolve(\n agent.scan({\n ...data.scanOptions,\n onProgress: (progress) => {\n parentPort?.postMessage({\n type: \"progress\",\n requestId: data.requestId,\n progress,\n } satisfies ScanRefreshWorkerMessage);\n },\n }),\n );\n }\n\n sessions = finalizeSessions(agent, sessions);\n const nextMeta = buildAgentCacheMeta(agent, new Set(sessions.map((session) => session.id)));\n const metaDiff = computeCacheMetaDiff(data.meta, nextMeta);\n const diff = computeSessionDiff(\n data.previousSessions,\n sessions,\n [...(changedIds ?? []), ...Object.keys(metaDiff.changes), ...metaDiff.removedIds],\n sessionSignature,\n );\n\n parentPort?.postMessage({\n type: \"done\",\n requestId: data.requestId,\n changes: diff.changes,\n removedSessionIds: diff.removedSessionIds,\n meta: metaDiff.changes,\n removedMetaIds: metaDiff.removedIds,\n durationMs: performance.now() - startedAt,\n } satisfies ScanRefreshWorkerMessage);\n}\n\nasync function handleRequest(data: ScanRefreshWorkerRequest): Promise<void> {\n const startedAt = performance.now();\n try {\n await run(data);\n } catch (error) {\n parentPort?.postMessage({\n type: \"error\",\n requestId: data.requestId,\n error: error instanceof Error ? error.message : String(error),\n durationMs: performance.now() - startedAt,\n } satisfies ScanRefreshWorkerMessage);\n }\n}\n\nlet requestTail = Promise.resolve();\n\nfunction enqueueRequest(data: ScanRefreshWorkerRequest): void {\n requestTail = requestTail.then(() => handleRequest(data));\n}\n\nconst initialRequest = workerData as Partial<ScanRefreshWorkerRequest> | undefined;\nif (\n initialRequest?.type === \"run\" &&\n typeof initialRequest.requestId === \"number\" &&\n typeof initialRequest.agentName === \"string\" &&\n Array.isArray(initialRequest.previousSessions)\n) {\n enqueueRequest(initialRequest as ScanRefreshWorkerRequest);\n}\n\nparentPort?.on(\"message\", (message: ScanRefreshWorkerRequest) => {\n if (message.type === \"run\") enqueueRequest(message);\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
appLogger
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-A4U2SMJJ.js";
|
|
5
5
|
import {
|
|
6
6
|
createRegisteredAgents,
|
|
7
|
-
getCachePath2,
|
|
8
7
|
markAgentCacheInitialized,
|
|
9
8
|
saveCachedSessionChanges,
|
|
10
9
|
saveCachedSessions,
|
|
11
|
-
setFtsIntegrityCheckedPath,
|
|
12
10
|
syncSessionSearchIndex,
|
|
13
11
|
syncSessionSearchIndexChanges
|
|
14
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-7APNDHQ6.js";
|
|
15
13
|
|
|
16
14
|
// src/search-index-worker.ts
|
|
17
15
|
import { parentPort, workerData } from "worker_threads";
|
|
18
16
|
var data = workerData;
|
|
19
|
-
if (data.skipFtsIntegrityCheck) {
|
|
20
|
-
setFtsIntegrityCheckedPath(getCachePath2());
|
|
21
|
-
}
|
|
22
17
|
var startedAt = performance.now();
|
|
23
18
|
var agents = createRegisteredAgents();
|
|
24
19
|
var jobs = data.jobs ?? data.agentNames.map(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/search-index-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport {\n createRegisteredAgents,\n
|
|
1
|
+
{"version":3,"sources":["../src/search-index-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport {\n createRegisteredAgents,\n markAgentCacheInitialized,\n saveCachedSessionChanges,\n saveCachedSessions,\n syncSessionSearchIndex,\n syncSessionSearchIndexChanges,\n type SearchIndexSyncResult,\n type SearchIndexSyncOptions,\n type SessionCacheMeta,\n type SessionHeadChange,\n type SessionHead,\n} from \"@codesesh/core\";\nimport { appLogger } from \"./logging.js\";\n\nexport type SearchIndexWorkerMessage =\n | {\n type: \"sync-result\";\n context: string;\n result: SearchIndexSyncResult | null;\n }\n | {\n type: \"done\";\n context: string;\n durationMs: number;\n sessions: number;\n };\n\nexport type SearchIndexWorkerJob =\n | {\n kind: \"full\";\n context: string;\n agentName: string;\n sessions: SessionHead[];\n meta: Record<string, SessionCacheMeta>;\n saveCache?: boolean;\n searchIndexOptions?: SearchIndexSyncOptions;\n }\n | {\n kind: \"changes\";\n context: string;\n agentName: string;\n changes: SessionHeadChange[];\n removedSessionIds: string[];\n meta: Record<string, SessionCacheMeta>;\n searchIndexOptions?: SearchIndexSyncOptions;\n };\n\ninterface SearchIndexWorkerData {\n jobs?: SearchIndexWorkerJob[];\n context: string;\n agentNames: string[];\n sessionsByAgent: Record<string, SessionHead[]>;\n metaByAgent: Record<string, Record<string, SessionCacheMeta>>;\n}\n\nconst data = workerData as SearchIndexWorkerData;\nconst startedAt = performance.now();\nconst agents = createRegisteredAgents();\nconst jobs =\n data.jobs ??\n data.agentNames.map(\n (agentName): SearchIndexWorkerJob => ({\n kind: \"full\",\n context: data.context,\n agentName,\n sessions: data.sessionsByAgent[agentName] ?? [],\n meta: data.metaByAgent[agentName] ?? {},\n }),\n );\n\nfor (const job of jobs) {\n const agent = agents.find((item) => item.name === job.agentName);\n if (!agent) continue;\n\n if (agent.setSessionMetaMap) {\n agent.setSessionMetaMap(new Map(Object.entries(job.meta)));\n }\n\n let result: SearchIndexSyncResult | null;\n if (job.kind === \"changes\") {\n saveCachedSessionChanges(job.agentName, job.changes, job.removedSessionIds, job.meta);\n result = syncSessionSearchIndexChanges(\n job.agentName,\n job.changes,\n job.removedSessionIds,\n (sessionId) => agent.getSessionData(sessionId),\n job.searchIndexOptions,\n );\n } else {\n if (job.saveCache) {\n saveCachedSessions(job.agentName, job.sessions, job.meta);\n }\n result = syncSessionSearchIndex(\n job.agentName,\n job.sessions,\n (sessionId) => agent.getSessionData(sessionId),\n job.searchIndexOptions,\n );\n // Head cache init is decoupled from search-index completeness (CS-73): a\n // session that fails to load must not permanently block markAgentCacheInitialized,\n // or every future refresh would fall back to a full initializeAgent scan.\n // The skip is still surfaced as a warning so it stays visible.\n if (job.saveCache && result) {\n markAgentCacheInitialized(job.agentName);\n if (result.skipped > 0) {\n appLogger.warn(\"search_index.sync_incomplete\", {\n agent: job.agentName,\n skipped: result.skipped,\n });\n }\n }\n }\n parentPort?.postMessage({\n type: \"sync-result\",\n context: job.context,\n result,\n } satisfies SearchIndexWorkerMessage);\n}\n\nparentPort?.postMessage({\n type: \"done\",\n context: data.context,\n durationMs: performance.now() - startedAt,\n sessions: jobs.reduce(\n (total, job) => total + (job.kind === \"full\" ? job.sessions.length : job.changes.length),\n 0,\n ),\n} satisfies SearchIndexWorkerMessage);\n"],"mappings":";;;;;;;;;;;;;;AACA,SAAS,YAAY,kBAAkB;AAyDvC,IAAM,OAAO;AACb,IAAM,YAAY,YAAY,IAAI;AAClC,IAAM,SAAS,uBAAuB;AACtC,IAAM,OACJ,KAAK,QACL,KAAK,WAAW;AAAA,EACd,CAAC,eAAqC;AAAA,IACpC,MAAM;AAAA,IACN,SAAS,KAAK;AAAA,IACd;AAAA,IACA,UAAU,KAAK,gBAAgB,SAAS,KAAK,CAAC;AAAA,IAC9C,MAAM,KAAK,YAAY,SAAS,KAAK,CAAC;AAAA,EACxC;AACF;AAEF,WAAW,OAAO,MAAM;AACtB,QAAM,QAAQ,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS;AAC/D,MAAI,CAAC,MAAO;AAEZ,MAAI,MAAM,mBAAmB;AAC3B,UAAM,kBAAkB,IAAI,IAAI,OAAO,QAAQ,IAAI,IAAI,CAAC,CAAC;AAAA,EAC3D;AAEA,MAAI;AACJ,MAAI,IAAI,SAAS,WAAW;AAC1B,6BAAyB,IAAI,WAAW,IAAI,SAAS,IAAI,mBAAmB,IAAI,IAAI;AACpF,aAAS;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,CAAC,cAAc,MAAM,eAAe,SAAS;AAAA,MAC7C,IAAI;AAAA,IACN;AAAA,EACF,OAAO;AACL,QAAI,IAAI,WAAW;AACjB,yBAAmB,IAAI,WAAW,IAAI,UAAU,IAAI,IAAI;AAAA,IAC1D;AACA,aAAS;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,CAAC,cAAc,MAAM,eAAe,SAAS;AAAA,MAC7C,IAAI;AAAA,IACN;AAKA,QAAI,IAAI,aAAa,QAAQ;AAC3B,gCAA0B,IAAI,SAAS;AACvC,UAAI,OAAO,UAAU,GAAG;AACtB,kBAAU,KAAK,gCAAgC;AAAA,UAC7C,OAAO,IAAI;AAAA,UACX,SAAS,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,cAAY,YAAY;AAAA,IACtB,MAAM;AAAA,IACN,SAAS,IAAI;AAAA,IACb;AAAA,EACF,CAAoC;AACtC;AAEA,YAAY,YAAY;AAAA,EACtB,MAAM;AAAA,EACN,SAAS,KAAK;AAAA,EACd,YAAY,YAAY,IAAI,IAAI;AAAA,EAChC,UAAU,KAAK;AAAA,IACb,CAAC,OAAO,QAAQ,SAAS,IAAI,SAAS,SAAS,IAAI,SAAS,SAAS,IAAI,QAAQ;AAAA,IACjF;AAAA,EACF;AACF,CAAoC;","names":[]}
|
package/dist/smart-tag-worker.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-A4U2SMJJ.js";
|
|
3
3
|
import {
|
|
4
4
|
classifySessionTags,
|
|
5
5
|
createRegisteredAgents,
|
|
6
6
|
getSmartTagSourceTimestamp
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7APNDHQ6.js";
|
|
8
8
|
|
|
9
9
|
// src/smart-tag-worker.ts
|
|
10
10
|
import { parentPort, workerData } from "worker_threads";
|