supernaturalist 0.1.0 → 0.1.1
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 +4 -2
- package/dist/cli.js +1 -3
- package/dist/cli.js.map +2 -2
- package/dist/lib/detector/index.d.ts.map +1 -1
- package/dist/lib/detector/index.js +0 -2
- package/dist/lib/detector/index.js.map +1 -1
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -81,5 +81,7 @@ publisher:
|
|
|
81
81
|
- Workflow: `.github/workflows/publish.yml`
|
|
82
82
|
- Environment: leave blank unless the workflow is updated to use one
|
|
83
83
|
|
|
84
|
-
The workflow publishes on
|
|
85
|
-
|
|
84
|
+
The workflow publishes on pushes to `main` or manual dispatch. It runs typecheck,
|
|
85
|
+
lint, build, and test, increments the patch version with `npm version patch`,
|
|
86
|
+
publishes with `npm publish --access public` from Node 24/npm 11 using Trusted
|
|
87
|
+
Publishing, then pushes the release commit and tag back to `main`.
|
package/dist/cli.js
CHANGED
|
@@ -835,8 +835,6 @@ var WORDLIST = [
|
|
|
835
835
|
{ word: "exorcist", intensity: "ominous", group: "exorcism" },
|
|
836
836
|
{ word: "seance", intensity: "vivid", group: "seance" },
|
|
837
837
|
{ word: "s\xE9ance", intensity: "vivid", group: "seance" },
|
|
838
|
-
{ word: "medium", intensity: "subtle", group: "medium" },
|
|
839
|
-
{ word: "mediums", intensity: "subtle", group: "medium" },
|
|
840
838
|
{ word: "ouija", intensity: "vivid", group: "ouija" },
|
|
841
839
|
{ word: "hauntology", intensity: "subtle", group: "haunt" },
|
|
842
840
|
{ word: "banshee", intensity: "vivid", group: "banshee" },
|
|
@@ -1080,7 +1078,7 @@ async function main() {
|
|
|
1080
1078
|
process.exit(0);
|
|
1081
1079
|
}
|
|
1082
1080
|
if (command === "--version") {
|
|
1083
|
-
console.log("0.1.
|
|
1081
|
+
console.log("0.1.1");
|
|
1084
1082
|
process.exit(0);
|
|
1085
1083
|
}
|
|
1086
1084
|
const handler = command ? COMMANDS[command] : void 0;
|
package/dist/cli.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/adapters/amp.ts", "../src/adapters/claude.ts", "../src/adapters/cline.ts", "../src/adapters/codex.ts", "../src/adapters/opencode.ts", "../src/adapters/pi.ts", "../src/adapters/zed.ts", "../src/adapters/index.ts", "../src/detector/index.ts", "../src/commands/scan.ts", "../src/cli.ts"],
|
|
4
|
-
"sourcesContent": ["import { readdir, readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Amp (Sourcegraph) stores threads as JSON files at:\n * ~/.local/share/amp/threads/<thread-id>.json\n *\n * Each file is a JSON object with a `messages` array:\n * { \"messages\": [{ \"role\": \"user\"|\"assistant\", \"content\": \"...\", ... }], \"usageLedger\": {...}, ... }\n *\n * Messages have `role`, `content` (string or array), and optionally a timestamp.\n */\n\nfunction getAmpThreadsDir(): string {\n return join(\n process.env[\"XDG_DATA_HOME\"] ?? join(homedir(), \".local\", \"share\"),\n \"amp\",\n \"threads\",\n );\n}\n\nexport function ampAdapter(): Adapter {\n return {\n name: \"amp\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const threadsDir = getAmpThreadsDir();\n\n let files: string[];\n try {\n files = await readdir(threadsDir);\n } catch {\n return; // Amp not installed or no threads\n }\n\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\n\n for (const file of jsonFiles) {\n const filePath = join(threadsDir, file);\n const threadId = file.replace(\".json\", \"\");\n\n try {\n const raw = await readFile(filePath, \"utf-8\");\n const thread = JSON.parse(raw) as AmpThread;\n\n if (!thread.messages || !Array.isArray(thread.messages)) {continue;}\n\n for (const msg of thread.messages) {\n if (msg.role !== \"assistant\") {continue;}\n\n const text = extractText(msg.content);\n if (!text) {continue;}\n\n const timestamp = msg.timestamp ?? msg.createdAt ?? undefined;\n if (options?.since && timestamp) {\n const ts = new Date(timestamp);\n if (ts < options.since) {continue;}\n }\n\n yield {\n text,\n timestamp,\n session: threadId,\n };\n }\n } catch {\n // Skip malformed files\n }\n }\n },\n };\n}\n\nfunction extractText(content: unknown): string | null {\n if (typeof content === \"string\") {return content;}\n if (Array.isArray(content)) {\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" && p !== null && typeof p.text === \"string\",\n )\n .map((p) => p.text);\n return parts.length > 0 ? parts.join(\" \") : null;\n }\n return null;\n}\n\ninterface AmpMessage {\n role?: string;\n content?: unknown;\n timestamp?: string;\n createdAt?: string;\n}\n\ninterface AmpThread {\n messages?: AmpMessage[];\n}\n", "import { createReadStream } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Claude Code stores sessions as JSONL files at:\n * ~/.claude/projects/<project-path>/<session-uuid>.jsonl\n *\n * Each line is a JSON object. Assistant messages have:\n * { \"type\": \"assistant\", \"message\": { \"content\": [...] } }\n * or sometimes:\n * { \"role\": \"assistant\", \"content\": \"...\" }\n */\n\nconst CLAUDE_DIR = join(homedir(), \".claude\", \"projects\");\n\nexport function claudeAdapter(): Adapter {\n return {\n name: \"claude\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const projectsDir = CLAUDE_DIR;\n\n let projectDirs: string[];\n try {\n projectDirs = await readdir(projectsDir);\n } catch {\n return; // Claude Code not installed or no sessions\n }\n\n for (const projectDir of projectDirs) {\n const projectPath = join(projectsDir, projectDir);\n const projectStat = await stat(projectPath);\n if (!projectStat.isDirectory()) {continue;}\n\n const entries = await readdir(projectPath);\n const jsonlFiles = entries.filter((f) => f.endsWith(\".jsonl\"));\n\n for (const file of jsonlFiles) {\n const filePath = join(projectPath, file);\n const session = file.replace(\".jsonl\", \"\");\n\n const context = options?.since\n ? { session, project: projectDir, since: options.since }\n : { session, project: projectDir };\n yield* parseClaudeJsonl(filePath, context);\n }\n\n const subdirs = entries.filter((f) => !f.includes(\".\"));\n for (const subdir of subdirs) {\n const subagentsDir = join(projectPath, subdir, \"subagents\");\n try {\n const subFiles = await readdir(subagentsDir);\n const subJsonl = subFiles.filter((f) => f.endsWith(\".jsonl\"));\n for (const file of subJsonl) {\n const context = options?.since\n ? {\n session: `${subdir}/${file.replace(\".jsonl\", \"\")}`,\n project: projectDir,\n since: options.since,\n }\n : {\n session: `${subdir}/${file.replace(\".jsonl\", \"\")}`,\n project: projectDir,\n };\n yield* parseClaudeJsonl(join(subagentsDir, file), context);\n }\n } catch {\n // No subagents directory, skip\n }\n }\n }\n },\n };\n}\n\nasync function* parseClaudeJsonl(\n filePath: string,\n context: { session: string; project: string; since?: Date },\n): AsyncGenerator<Message> {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf-8\" }),\n crlfDelay: Infinity,\n });\n\n for await (const line of rl) {\n if (!line.trim()) {continue;}\n\n try {\n const entry = JSON.parse(line) as Record<string, unknown>;\n const text = extractAssistantText(entry);\n if (!text) {continue;}\n\n const timestamp = extractTimestamp(entry);\n if (context.since && timestamp) {\n const ts = new Date(timestamp);\n if (ts < context.since) {continue;}\n }\n\n const message: Message = timestamp\n ? {\n text,\n timestamp,\n session: context.session,\n project: context.project,\n }\n : {\n text,\n session: context.session,\n project: context.project,\n };\n yield message;\n } catch {\n // Skip malformed lines\n }\n }\n}\n\nfunction extractAssistantText(entry: Record<string, unknown>): string | null {\n if (entry[\"type\"] === \"assistant\") {\n const message = entry[\"message\"] as Record<string, unknown> | undefined;\n if (!message) {return null;}\n return contentToString(message[\"content\"]);\n }\n\n if (entry[\"role\"] === \"assistant\") {\n return contentToString(entry[\"content\"]);\n }\n\n return null;\n}\n\nfunction contentToString(content: unknown): string | null {\n if (typeof content === \"string\") {return content;}\n if (Array.isArray(content)) {\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" && p !== null && p.type === \"text\",\n )\n .map((p) => p.text);\n return parts.length > 0 ? parts.join(\" \") : null;\n }\n return null;\n}\n\nfunction extractTimestamp(entry: Record<string, unknown>): string | null {\n if (typeof entry[\"timestamp\"] === \"string\") {return entry[\"timestamp\"];}\n if (typeof entry[\"createdAt\"] === \"string\") {return entry[\"createdAt\"];}\n return null;\n}\n", "import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Cline (formerly Claude Dev) stores task history at:\n *\n * VS Code extension:\n * macOS: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/tasks/<task-id>/api_conversation_history.json\n * Linux: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/tasks/<task-id>/api_conversation_history.json\n * Windows: %APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/tasks/<task-id>/api_conversation_history.json\n *\n * Standalone CLI / JetBrains (newer):\n * ~/.cline/data/tasks/<task-id>/api_conversation_history.json\n *\n * Roo Code (fork) uses the same format at:\n * globalStorage/rooveterinaryinc.roo-cline/tasks/<task-id>/api_conversation_history.json\n *\n * Each api_conversation_history.json is a JSON array of messages:\n * [{ \"role\": \"user\"|\"assistant\", \"content\": \"...\" | [{type: \"text\", text: \"...\"}] }]\n */\n\nfunction getClineTaskDirs(): string[] {\n const dirs: string[] = [];\n\n const vscodePaths = getVSCodeGlobalStoragePaths();\n const extensionIds = [\"saoudrizwan.claude-dev\", \"rooveterinaryinc.roo-cline\"];\n\n for (const basePath of vscodePaths) {\n for (const extId of extensionIds) {\n const tasksDir = join(basePath, extId, \"tasks\");\n if (existsSync(tasksDir)) {dirs.push(tasksDir);}\n }\n }\n\n const clineStandalone = join(homedir(), \".cline\", \"data\", \"tasks\");\n if (existsSync(clineStandalone)) {dirs.push(clineStandalone);}\n\n return dirs;\n}\n\nfunction getVSCodeGlobalStoragePaths(): string[] {\n const paths: string[] = [];\n\n if (process.platform === \"darwin\") {\n paths.push(\n join(homedir(), \"Library\", \"Application Support\", \"Code\", \"User\", \"globalStorage\"),\n join(homedir(), \"Library\", \"Application Support\", \"Code - Insiders\", \"User\", \"globalStorage\"),\n join(homedir(), \"Library\", \"Application Support\", \"Cursor\", \"User\", \"globalStorage\"),\n );\n } else if (process.platform === \"linux\") {\n const configBase = process.env[\"XDG_CONFIG_HOME\"] ?? join(homedir(), \".config\");\n paths.push(\n join(configBase, \"Code\", \"User\", \"globalStorage\"),\n join(configBase, \"Code - Insiders\", \"User\", \"globalStorage\"),\n join(configBase, \"Cursor\", \"User\", \"globalStorage\"),\n );\n } else {\n const appData = process.env[\"APPDATA\"] ?? join(homedir(), \"AppData\", \"Roaming\");\n paths.push(\n join(appData, \"Code\", \"User\", \"globalStorage\"),\n join(appData, \"Code - Insiders\", \"User\", \"globalStorage\"),\n join(appData, \"Cursor\", \"User\", \"globalStorage\"),\n );\n }\n\n return paths;\n}\n\nexport function clineAdapter(): Adapter {\n return {\n name: \"cline\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const taskDirs = getClineTaskDirs();\n\n for (const tasksDir of taskDirs) {\n let taskIds: string[];\n try {\n taskIds = await readdir(tasksDir);\n } catch {\n continue;\n }\n\n for (const taskId of taskIds) {\n const taskDir = join(tasksDir, taskId);\n const taskStat = await stat(taskDir).catch(() => null);\n if (!taskStat?.isDirectory()) {continue;}\n\n const historyFile = join(taskDir, \"api_conversation_history.json\");\n\n try {\n const raw = await readFile(historyFile, \"utf-8\");\n const messages = JSON.parse(raw) as ClineMessage[];\n\n if (!Array.isArray(messages)) {continue;}\n\n for (const msg of messages) {\n if (msg.role !== \"assistant\") {continue;}\n\n const text = extractText(msg.content);\n if (!text) {continue;}\n\n const timestamp = msg.ts ?? undefined;\n if (options?.since && timestamp) {\n const ts = new Date(timestamp);\n if (ts < options.since) {continue;}\n }\n\n yield {\n text,\n session: taskId,\n };\n }\n } catch {\n // Skip tasks without history or malformed files\n }\n }\n }\n },\n };\n}\n\nfunction extractText(content: unknown): string | null {\n if (typeof content === \"string\") {return content;}\n if (Array.isArray(content)) {\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" &&\n p !== null &&\n p.type === \"text\" &&\n typeof p.text === \"string\",\n )\n .map((p) => p.text);\n return parts.length > 0 ? parts.join(\" \") : null;\n }\n return null;\n}\n\ninterface ClineMessage {\n role?: string;\n content?: unknown;\n ts?: string;\n}\n", "import { createReadStream } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Codex stores sessions as JSONL files at:\n * ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl\n *\n * Each line is JSON with structure:\n * { \"timestamp\": \"...\", \"type\": \"response_item\", \"payload\": { \"type\": \"message\", \"role\": \"assistant\", \"content\": [...] } }\n *\n * Assistant messages have payload.role === \"assistant\" and content is usually\n * an array of { \"type\": \"output_text\", \"text\": \"...\" } parts.\n */\n\nconst CODEX_SESSIONS_DIR = join(homedir(), \".codex\", \"sessions\");\n\nexport function codexAdapter(): Adapter {\n return {\n name: \"codex\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n yield* walkCodexSessions(CODEX_SESSIONS_DIR, options);\n },\n };\n}\n\nasync function* walkCodexSessions(\n dir: string,\n options?: AdapterOptions,\n): AsyncGenerator<Message> {\n let entries: string[];\n try {\n entries = await readdir(dir);\n } catch {\n return; // Codex not installed or no sessions\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const entryStat = await stat(fullPath);\n\n if (entryStat.isDirectory()) {\n yield* walkCodexSessions(fullPath, options);\n } else if (entry.endsWith(\".jsonl\")) {\n const session = entry.replace(\".jsonl\", \"\");\n const context = options?.since ? { session, since: options.since } : { session };\n yield* parseCodexJsonl(fullPath, context);\n }\n }\n}\n\nasync function* parseCodexJsonl(\n filePath: string,\n context: { session: string; since?: Date },\n): AsyncGenerator<Message> {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf-8\" }),\n crlfDelay: Infinity,\n });\n\n for await (const line of rl) {\n if (!line.trim()) {continue;}\n\n try {\n const entry = JSON.parse(line) as CodexEntry;\n\n if (entry.type !== \"response_item\") {continue;}\n\n const payload = entry.payload;\n if (!payload || payload.role !== \"assistant\") {continue;}\n\n const text = extractText(payload.content);\n if (!text) {continue;}\n\n if (context.since && entry.timestamp) {\n const ts = new Date(entry.timestamp);\n if (ts < context.since) {continue;}\n }\n\n const message: Message = entry.timestamp\n ? { text, timestamp: entry.timestamp, session: context.session }\n : { text, session: context.session };\n yield message;\n } catch {\n // Skip malformed lines\n }\n }\n}\n\nfunction extractText(content: unknown): string | null {\n if (!Array.isArray(content)) {return null;}\n\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" &&\n p !== null &&\n (p.type === \"output_text\" || p.type === \"text\") &&\n typeof p.text === \"string\",\n )\n .map((p) => p.text);\n\n return parts.length > 0 ? parts.join(\" \") : null;\n}\n\ninterface CodexEntry {\n timestamp?: string;\n type: string;\n payload?: {\n type?: string;\n role?: string;\n content?: unknown;\n };\n}\n", "import { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * OpenCode stores sessions in a SQLite database at:\n * ~/.local/share/opencode/opencode.db\n *\n * Schema:\n * message: { id, session_id, time_created (epoch ms), time_updated, data (JSON) }\n * part: { id, message_id, session_id, time_created, time_updated, data (JSON) }\n *\n * message.data: { \"role\": \"user\"|\"assistant\", \"time\": {...}, \"agent\": \"...\", ... }\n * part.data: { \"type\": \"text\", \"text\": \"the assistant's message\" }\n *\n * Assistant messages have role=\"assistant\" in message.data. The actual text content is in\n * the associated part rows where part.data.type === \"text\".\n */\n\nfunction getOpencodeDatabasePath(): string | null {\n const xdgPath = join(\n process.env[\"XDG_DATA_HOME\"] ?? join(homedir(), \".local\", \"share\"),\n \"opencode\",\n \"opencode.db\",\n );\n if (existsSync(xdgPath)) {return xdgPath;}\n\n if (process.platform === \"darwin\") {\n const macPath = join(\n homedir(),\n \"Library\",\n \"Application Support\",\n \"opencode\",\n \"opencode.db\",\n );\n if (existsSync(macPath)) {return macPath;}\n }\n\n return null;\n}\n\nexport function opencodeAdapter(): Adapter {\n return {\n name: \"opencode\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const dbPath = getOpencodeDatabasePath();\n if (!dbPath) {return;}\n\n let db: import(\"better-sqlite3\").Database;\n try {\n const BetterSqlite3 = await import(\"better-sqlite3\");\n const Ctor = BetterSqlite3.default ?? BetterSqlite3;\n db = new (Ctor as unknown as new (\n ...args: unknown[]\n ) => import(\"better-sqlite3\").Database)(dbPath, { readonly: true });\n } catch {\n console.warn(\n \"supernaturalist: better-sqlite3 not available, skipping OpenCode sessions\",\n );\n return;\n }\n\n try {\n yield* queryAssistantMessages(db, options);\n } finally {\n db.close();\n }\n },\n };\n}\n\nfunction* queryAssistantMessages(\n db: import(\"better-sqlite3\").Database,\n options?: AdapterOptions,\n): Generator<Message> {\n let query = `\n SELECT\n m.session_id,\n m.time_created,\n json_extract(p.data, '$.text') as text\n FROM message m\n JOIN part p ON p.message_id = m.id\n WHERE json_extract(m.data, '$.role') = 'assistant'\n AND json_extract(p.data, '$.type') = 'text'\n `;\n\n if (options?.since) {\n const sinceMs = options.since.getTime();\n query += ` AND m.time_created >= ${sinceMs}`;\n }\n\n query += ` ORDER BY m.time_created ASC`;\n\n const rows = db.prepare(query).all() as {\n session_id: string;\n time_created: number;\n text: string;\n }[];\n\n for (const row of rows) {\n if (!row.text || !row.text.trim()) {continue;}\n\n yield {\n text: row.text,\n timestamp: new Date(row.time_created).toISOString(),\n session: row.session_id,\n };\n }\n}\n", "import { createReadStream } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Pi Agent stores sessions as JSONL files at:\n * ~/.pi/agent/sessions/<project>/<session-id>.jsonl\n *\n * Each line is a JSON object:\n * { \"type\": \"session\", \"cwd\": \"/path/to/project\" } \u2014 session metadata\n * { \"type\": \"message\", \"timestamp\": \"...\", \"message\": { \"role\": \"assistant\", \"content\": \"...\" } }\n *\n * Content can be a string or array of { type: \"text\", text: \"...\" } parts.\n */\n\nconst PI_SESSIONS_DIR = join(homedir(), \".pi\", \"agent\", \"sessions\");\n\nexport function piAdapter(): Adapter {\n return {\n name: \"pi\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n yield* walkPiSessions(PI_SESSIONS_DIR, options);\n },\n };\n}\n\nasync function* walkPiSessions(\n dir: string,\n options?: AdapterOptions,\n project?: string,\n): AsyncGenerator<Message> {\n let entries: string[];\n try {\n entries = await readdir(dir);\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const entryStat = await stat(fullPath).catch(() => null);\n if (!entryStat) {continue;}\n\n if (entryStat.isDirectory()) {\n yield* walkPiSessions(fullPath, options, project ?? entry);\n } else if (entry.endsWith(\".jsonl\")) {\n const session = entry.replace(\".jsonl\", \"\");\n const context = options?.since\n ? { session, project, since: options.since }\n : { session, project };\n yield* parsePiJsonl(fullPath, context);\n }\n }\n}\n\nasync function* parsePiJsonl(\n filePath: string,\n context: { session: string; project?: string; since?: Date },\n): AsyncGenerator<Message> {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf-8\" }),\n crlfDelay: Infinity,\n });\n\n let project = context.project;\n\n for await (const line of rl) {\n if (!line.trim()) {continue;}\n\n try {\n const entry = JSON.parse(line) as PiEntry;\n\n if (entry.type === \"session\") {\n project = entry.cwd ?? project;\n continue;\n }\n\n if (entry.type !== \"message\") {continue;}\n\n const message = entry.message;\n if (!message || message.role !== \"assistant\") {continue;}\n\n const text = contentToString(message.content);\n if (!text) {continue;}\n\n const timestamp =\n typeof entry.timestamp === \"string\"\n ? entry.timestamp\n : typeof message.timestamp === \"number\"\n ? new Date(message.timestamp).toISOString()\n : undefined;\n\n if (context.since && timestamp) {\n const ts = new Date(timestamp);\n if (ts < context.since) {continue;}\n }\n\n const record: Message = timestamp\n ? project\n ? { text, timestamp, session: context.session, project }\n : { text, timestamp, session: context.session }\n : project\n ? { text, session: context.session, project }\n : { text, session: context.session };\n yield record;\n } catch {\n // Skip malformed lines\n }\n }\n}\n\nfunction contentToString(content: unknown): string | null {\n if (typeof content === \"string\") {return content;}\n if (Array.isArray(content)) {\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" &&\n p !== null &&\n p.type === \"text\" &&\n typeof p.text === \"string\",\n )\n .map((p) => p.text);\n return parts.length > 0 ? parts.join(\" \") : null;\n }\n return null;\n}\n\ninterface PiEntry {\n type?: string;\n timestamp?: string;\n cwd?: string;\n message?: {\n role?: string;\n content?: unknown;\n timestamp?: number;\n };\n}\n", "import { readdir, readFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Zed stores AI conversations in two places:\n *\n * 1. Text threads (older assistant panel):\n * ~/.local/share/zed/conversations/*.json (Linux)\n * ~/Library/Application Support/Zed/conversations/*.json (macOS)\n * These are markdown-like JSON with messages.\n *\n * 2. Agent threads (newer):\n * Stored in SQLite at ~/.local/share/zed/db (Linux)\n * or ~/Library/Application Support/Zed/db (macOS)\n * We'd need to query this, but the schema isn't well documented.\n *\n * We support the text thread JSON files for now, and the SQLite agent\n * threads when better-sqlite3 is available.\n */\n\nfunction getZedPaths(): { conversations: string; db: string } {\n if (process.platform === \"darwin\") {\n const base = join(homedir(), \"Library\", \"Application Support\", \"Zed\");\n return {\n conversations: join(base, \"conversations\"),\n db: join(base, \"db\"),\n };\n }\n const base = join(\n process.env[\"XDG_DATA_HOME\"] ?? join(homedir(), \".local\", \"share\"),\n \"zed\",\n );\n return {\n conversations: join(base, \"conversations\"),\n db: join(base, \"db\"),\n };\n}\n\nexport function zedAdapter(): Adapter {\n return {\n name: \"zed\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const paths = getZedPaths();\n\n yield* parseTextThreads(paths.conversations, options);\n yield* parseAgentThreads(paths.db, options);\n },\n };\n}\n\nasync function* parseTextThreads(\n dir: string,\n _options?: AdapterOptions,\n): AsyncGenerator<Message> {\n if (!existsSync(dir)) {return;}\n\n let files: string[];\n try {\n files = await readdir(dir);\n } catch {\n return;\n }\n\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\n\n for (const file of jsonFiles) {\n const filePath = join(dir, file);\n const session = file.replace(\".json\", \"\");\n\n try {\n const raw = await readFile(filePath, \"utf-8\");\n const conversation = JSON.parse(raw) as ZedConversation;\n\n if (!conversation.messages || !Array.isArray(conversation.messages)) {continue;}\n\n for (const msg of conversation.messages) {\n if (msg.role !== \"assistant\") {continue;}\n\n const text = typeof msg.content === \"string\" ? msg.content : null;\n if (!text) {continue;}\n\n yield {\n text,\n session,\n };\n }\n } catch {\n // Skip malformed files\n }\n }\n}\n\nasync function* parseAgentThreads(\n dbDir: string,\n _options?: AdapterOptions,\n): AsyncGenerator<Message> {\n if (!existsSync(dbDir)) {return;}\n\n let dbFiles: string[];\n try {\n const entries = await readdir(dbDir);\n dbFiles = entries.filter((f) => f.endsWith(\".db\"));\n } catch {\n return;\n }\n\n if (dbFiles.length === 0) {return;}\n\n let Database: unknown;\n try {\n const mod = await import(\"better-sqlite3\");\n Database = mod.default ?? mod;\n } catch {\n return;\n }\n\n for (const dbFile of dbFiles) {\n const dbPath = join(dbDir, dbFile);\n let db: import(\"better-sqlite3\").Database;\n\n try {\n db = new (Database as new (\n ...args: unknown[]\n ) => import(\"better-sqlite3\").Database)(dbPath, { readonly: true });\n } catch {\n continue;\n }\n\n try {\n const tables = db\n .prepare(\"SELECT name FROM sqlite_master WHERE type='table'\")\n .all() as { name: string }[];\n const tableNames = tables.map((t) => t.name);\n\n const msgTable = tableNames.find(\n (t) => t === \"messages\" || t === \"thread_messages\" || t.includes(\"message\"),\n );\n\n if (!msgTable) {\n db.close();\n continue;\n }\n\n const columns = db.prepare(`PRAGMA table_info(\"${msgTable}\")`).all() as {\n name: string;\n }[];\n const colNames = columns.map((c) => c.name);\n\n const hasRole = colNames.includes(\"role\");\n\n if (!hasRole) {\n db.close();\n continue;\n }\n\n const contentCol = colNames.includes(\"content\")\n ? \"content\"\n : colNames.includes(\"body\")\n ? \"body\"\n : \"text\";\n\n const query = `SELECT \"${contentCol}\" as text FROM \"${msgTable}\" WHERE role = 'assistant'`;\n\n const rows = db.prepare(query).all() as { text: string }[];\n for (const row of rows) {\n if (!row.text?.trim()) {continue;}\n yield { text: row.text };\n }\n } catch {\n // Schema mismatch or other error\n } finally {\n db.close();\n }\n }\n}\n\ninterface ZedConversation {\n messages?: { role?: string; content?: unknown }[];\n}\n", "import { ampAdapter } from \"./amp\";\nimport { claudeAdapter } from \"./claude\";\nimport { clineAdapter } from \"./cline\";\nimport { codexAdapter } from \"./codex\";\nimport { opencodeAdapter } from \"./opencode\";\nimport { piAdapter } from \"./pi\";\nimport { zedAdapter } from \"./zed\";\n\nexport interface Message {\n text: string;\n timestamp?: string;\n session?: string;\n project?: string;\n}\n\nexport interface Adapter {\n name: string;\n /** Discover and yield assistant/agent messages from local session storage */\n messages(options?: AdapterOptions): AsyncGenerator<Message>;\n}\n\nexport interface AdapterOptions {\n since?: Date;\n}\n\nconst ADAPTERS: Record<string, () => Adapter> = {\n claude: claudeAdapter,\n codex: codexAdapter,\n opencode: opencodeAdapter,\n amp: ampAdapter,\n cline: clineAdapter,\n pi: piAdapter,\n zed: zedAdapter,\n};\n\nexport function createAdapter(name: string): Adapter {\n const factory = ADAPTERS[name];\n if (!factory) {\n throw new Error(\n `unknown adapter: ${name} (available: ${Object.keys(ADAPTERS).join(\", \")})`,\n );\n }\n return factory();\n}\n\nexport function allAdapters(): Adapter[] {\n return Object.values(ADAPTERS).map((f) => f());\n}\n", "export interface DetectionResult {\n /** Total supernatural terms found in the text */\n count: number;\n /** Individual matches */\n matches: Match[];\n}\n\nexport interface Match {\n word: string;\n index: number;\n intensity: Intensity;\n group: string;\n}\n\nexport type Intensity = \"subtle\" | \"vivid\" | \"ominous\";\n\ninterface WordDef {\n word: string;\n intensity: Intensity;\n group: string;\n}\n\n/**\n * Core wordlist: canonical forms, conjugations, compound words, and common typos.\n * Grouped by root word for reporting rollup.\n */\nconst WORDLIST: WordDef[] = [\n // === GHOST family (vivid) ===\n { word: \"ghost\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghosts\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghostly\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghosted\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghosting\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghostwriter\", intensity: \"subtle\", group: \"ghost\" },\n\n // === HAUNT family (ominous) ===\n { word: \"haunt\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"haunted\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"haunting\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"haunts\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"hauntings\", intensity: \"ominous\", group: \"haunt\" },\n\n // === CURSE family (ominous) ===\n { word: \"curse\", intensity: \"ominous\", group: \"curse\" },\n { word: \"cursed\", intensity: \"ominous\", group: \"curse\" },\n { word: \"curses\", intensity: \"ominous\", group: \"curse\" },\n { word: \"cursing\", intensity: \"ominous\", group: \"curse\" },\n { word: \"cursedness\", intensity: \"ominous\", group: \"curse\" },\n\n // === GHOUL family (vivid) ===\n { word: \"ghoul\", intensity: \"vivid\", group: \"ghoul\" },\n { word: \"ghouls\", intensity: \"vivid\", group: \"ghoul\" },\n { word: \"ghoulish\", intensity: \"vivid\", group: \"ghoul\" },\n\n // === GOBLIN family (vivid) ===\n { word: \"goblin\", intensity: \"vivid\", group: \"goblin\" },\n { word: \"goblins\", intensity: \"vivid\", group: \"goblin\" },\n { word: \"gobliny\", intensity: \"subtle\", group: \"goblin\" },\n\n // === SPECTER family (vivid) ===\n { word: \"specter\", intensity: \"vivid\", group: \"specter\" },\n { word: \"specters\", intensity: \"vivid\", group: \"specter\" },\n { word: \"spectral\", intensity: \"vivid\", group: \"specter\" },\n\n // === PHANTOM family (vivid) ===\n { word: \"phantom\", intensity: \"vivid\", group: \"phantom\" },\n { word: \"phantoms\", intensity: \"vivid\", group: \"phantom\" },\n\n // === WRAITH family (ominous) ===\n { word: \"wraith\", intensity: \"ominous\", group: \"wraith\" },\n { word: \"wraiths\", intensity: \"ominous\", group: \"wraith\" },\n { word: \"wraithlike\", intensity: \"ominous\", group: \"wraith\" },\n\n // === APPARITION family (vivid) ===\n { word: \"apparition\", intensity: \"vivid\", group: \"apparition\" },\n { word: \"apparitions\", intensity: \"vivid\", group: \"apparition\" },\n { word: \"apparitional\", intensity: \"vivid\", group: \"apparition\" },\n\n // === POLTERGEIST family (ominous) ===\n { word: \"poltergeist\", intensity: \"ominous\", group: \"poltergeist\" },\n { word: \"poltergeists\", intensity: \"ominous\", group: \"poltergeist\" },\n\n // === DEMON family (ominous) ===\n { word: \"demon\", intensity: \"ominous\", group: \"demon\" },\n { word: \"demons\", intensity: \"ominous\", group: \"demon\" },\n { word: \"demonic\", intensity: \"ominous\", group: \"demon\" },\n\n // === UNDEAD family (vivid) ===\n { word: \"undead\", intensity: \"vivid\", group: \"undead\" },\n { word: \"lich\", intensity: \"ominous\", group: \"undead\" },\n { word: \"liches\", intensity: \"ominous\", group: \"undead\" },\n { word: \"revenant\", intensity: \"ominous\", group: \"undead\" },\n { word: \"revenants\", intensity: \"ominous\", group: \"undead\" },\n\n // === ZOMBIE family (vivid) ===\n { word: \"zombie\", intensity: \"vivid\", group: \"zombie\" },\n { word: \"zombies\", intensity: \"vivid\", group: \"zombie\" },\n { word: \"zombified\", intensity: \"vivid\", group: \"zombie\" },\n { word: \"zombifying\", intensity: \"vivid\", group: \"zombie\" },\n\n // === VAMPIRE family (ominous) ===\n { word: \"vampire\", intensity: \"ominous\", group: \"vampire\" },\n { word: \"vampires\", intensity: \"ominous\", group: \"vampire\" },\n { word: \"vampiric\", intensity: \"ominous\", group: \"vampire\" },\n { word: \"vampirism\", intensity: \"ominous\", group: \"vampire\" },\n\n // === WEREWOLF family (ominous) ===\n { word: \"werewolf\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"werewolves\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"lycan\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"lycans\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"lycanthrope\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"lycanthropy\", intensity: \"ominous\", group: \"werewolf\" },\n\n // === WITCH family (vivid) ===\n { word: \"witch\", intensity: \"vivid\", group: \"witch\" },\n { word: \"witches\", intensity: \"vivid\", group: \"witch\" },\n { word: \"witchcraft\", intensity: \"vivid\", group: \"witch\" },\n { word: \"witchy\", intensity: \"subtle\", group: \"witch\" },\n\n // === WARLOCK family (vivid) ===\n { word: \"warlock\", intensity: \"vivid\", group: \"warlock\" },\n { word: \"warlocks\", intensity: \"vivid\", group: \"warlock\" },\n\n // === SORCERY family (vivid) ===\n { word: \"sorcery\", intensity: \"vivid\", group: \"sorcery\" },\n { word: \"sorcerer\", intensity: \"vivid\", group: \"sorcery\" },\n { word: \"sorcerers\", intensity: \"vivid\", group: \"sorcery\" },\n { word: \"sorcerous\", intensity: \"vivid\", group: \"sorcery\" },\n\n // === SPELL family (subtle) ===\n { word: \"spell\", intensity: \"subtle\", group: \"spell\" },\n { word: \"spells\", intensity: \"subtle\", group: \"spell\" },\n { word: \"spellbound\", intensity: \"vivid\", group: \"spell\" },\n { word: \"spellbinding\", intensity: \"vivid\", group: \"spell\" },\n { word: \"spellbook\", intensity: \"vivid\", group: \"spell\" },\n { word: \"spellcasting\", intensity: \"vivid\", group: \"spell\" },\n\n // === HEX family (ominous) ===\n { word: \"hex\", intensity: \"ominous\", group: \"hex\" },\n { word: \"hexed\", intensity: \"ominous\", group: \"hex\" },\n { word: \"hexes\", intensity: \"ominous\", group: \"hex\" },\n { word: \"hexing\", intensity: \"ominous\", group: \"hex\" },\n\n // === GRIMOIRE family (vivid) ===\n { word: \"grimoire\", intensity: \"vivid\", group: \"grimoire\" },\n { word: \"grimoires\", intensity: \"vivid\", group: \"grimoire\" },\n\n // === ELDRITCH family (ominous) ===\n { word: \"eldritch\", intensity: \"ominous\", group: \"eldritch\" },\n { word: \"eldritchy\", intensity: \"ominous\", group: \"eldritch\" },\n\n // === CURSED OBJECTS ===\n { word: \"hauntedhouse\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"hauntingly\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"cursedobject\", intensity: \"ominous\", group: \"curse\" },\n\n // === OTHER SUPERNATURAL ===\n { word: \"possessed\", intensity: \"ominous\", group: \"possession\" },\n { word: \"possession\", intensity: \"ominous\", group: \"possession\" },\n { word: \"possess\", intensity: \"ominous\", group: \"possession\" },\n { word: \"exorcism\", intensity: \"ominous\", group: \"exorcism\" },\n { word: \"exorcist\", intensity: \"ominous\", group: \"exorcism\" },\n { word: \"seance\", intensity: \"vivid\", group: \"seance\" },\n { word: \"s\u00E9ance\", intensity: \"vivid\", group: \"seance\" },\n { word: \"medium\", intensity: \"subtle\", group: \"medium\" },\n { word: \"mediums\", intensity: \"subtle\", group: \"medium\" },\n { word: \"ouija\", intensity: \"vivid\", group: \"ouija\" },\n { word: \"hauntology\", intensity: \"subtle\", group: \"haunt\" },\n { word: \"banshee\", intensity: \"vivid\", group: \"banshee\" },\n { word: \"banshees\", intensity: \"vivid\", group: \"banshee\" },\n { word: \"wight\", intensity: \"ominous\", group: \"undead\" },\n { word: \"wights\", intensity: \"ominous\", group: \"undead\" },\n { word: \"ghast\", intensity: \"ominous\", group: \"ghoul\" },\n { word: \"ghasts\", intensity: \"ominous\", group: \"ghoul\" },\n { word: \"hauntedness\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"spectrality\", intensity: \"vivid\", group: \"specter\" },\n { word: \"spirit\", intensity: \"subtle\", group: \"spirit\" },\n { word: \"spirits\", intensity: \"subtle\", group: \"spirit\" },\n { word: \"spiritual\", intensity: \"subtle\", group: \"spirit\" },\n { word: \"phantasm\", intensity: \"vivid\", group: \"phantom\" },\n { word: \"phantasms\", intensity: \"vivid\", group: \"phantom\" },\n];\n\nfunction collapseRepeats(text: string): string {\n return text.replace(/(.)\\1+/g, \"$1\");\n}\n\nfunction buildPattern(words: WordDef[]): RegExp {\n const sorted = [...words].sort((a, b) => b.word.length - a.word.length);\n const pattern = sorted.map((w) => escapeRegExp(w.word)).join(\"|\");\n return new RegExp(`\\\\b(${pattern})\\\\b`, \"gi\");\n}\n\nfunction escapeRegExp(word: string): string {\n return word.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst DEFAULT_PATTERN = buildPattern(WORDLIST);\nconst WORD_MAP = new Map(WORDLIST.map((w) => [w.word.toLowerCase(), w]));\n\n/**\n * Detect supernatural terms in a string.\n *\n * Runs detection in two passes:\n * 1. Direct match on original text (preserves positions)\n * 2. Match on repeat-collapsed text (catches ghooost, haauunted, etc.)\n */\nexport function detect(text: string): DetectionResult {\n const matches: Match[] = [];\n const seen = new Set<number>();\n\n runPattern(text, text.toLowerCase(), matches, seen);\n\n const collapsed = collapseRepeats(text.toLowerCase());\n if (collapsed !== text.toLowerCase()) {\n runPattern(text, collapsed, matches, seen);\n }\n\n return { count: matches.length, matches };\n}\n\nfunction runPattern(\n _originalText: string,\n searchText: string,\n matches: Match[],\n seen: Set<number>,\n): void {\n DEFAULT_PATTERN.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = DEFAULT_PATTERN.exec(searchText)) !== null) {\n if (seen.has(match.index)) {continue;}\n\n const word = match[0].toLowerCase();\n const entry = WORD_MAP.get(word);\n if (!entry) {continue;}\n\n seen.add(match.index);\n matches.push({\n word,\n index: match.index,\n intensity: entry.intensity,\n group: entry.group,\n });\n }\n}\n\n/**\n * Create a custom detector with additional words.\n */\nexport function createDetector(\n extraWords?: WordDef[],\n): (text: string) => DetectionResult {\n const allWords = extraWords ? [...WORDLIST, ...extraWords] : WORDLIST;\n const pattern = buildPattern(allWords);\n const wordMap = new Map(allWords.map((w) => [w.word.toLowerCase(), w]));\n\n return (text: string): DetectionResult => {\n const matches: Match[] = [];\n const seen = new Set<number>();\n\n const lower = text.toLowerCase();\n pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(lower)) !== null) {\n if (seen.has(match.index)) {continue;}\n const word = match[0].toLowerCase();\n const entry = wordMap.get(word);\n if (!entry) {continue;}\n seen.add(match.index);\n matches.push({ word, index: match.index, intensity: entry.intensity, group: entry.group });\n }\n\n const collapsed = collapseRepeats(lower);\n if (collapsed !== lower) {\n pattern.lastIndex = 0;\n while ((match = pattern.exec(collapsed)) !== null) {\n if (seen.has(match.index)) {continue;}\n const word = match[0].toLowerCase();\n const entry = wordMap.get(word);\n if (!entry) {continue;}\n seen.add(match.index);\n matches.push({ word, index: match.index, intensity: entry.intensity, group: entry.group });\n }\n }\n\n return { count: matches.length, matches };\n };\n}\n\nexport type { WordDef as WordEntry };\n", "import { allAdapters, createAdapter } from \"../adapters/index\";\nimport { detect } from \"../detector/index\";\n\nconst c = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n gray: \"\\x1b[90m\",\n};\n\nconst SPINNER_MESSAGES = [\n \"Summoning the archives\",\n \"Scanning for hauntings\",\n \"Listening for whispers\",\n \"Consulting the grimoire\",\n \"Cataloging the uncanny\",\n \"Tracking spectral echoes\",\n \"Measuring the eerie\",\n \"Indexing the supernatural\",\n \"Checking for curses\",\n \"Counting the eldritch\",\n];\n\nfunction createSpinner() {\n let messageIdx = 0;\n let dotCount = 0;\n let timer: ReturnType<typeof setInterval> | null = null;\n\n return {\n start() {\n messageIdx = Math.floor(Math.random() * SPINNER_MESSAGES.length);\n timer = setInterval(() => {\n dotCount = (dotCount + 1) % 4;\n const msg = SPINNER_MESSAGES[messageIdx % SPINNER_MESSAGES.length];\n const dots = \".\".repeat(dotCount || 1);\n process.stdout.write(`\\r ${c.dim}${msg}${dots}${c.reset} `);\n }, 300);\n },\n update() {\n messageIdx++;\n },\n stop() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n process.stdout.write(\"\\r\" + \" \".repeat(60) + \"\\r\");\n },\n };\n}\n\ninterface ScanOptions {\n agent?: string;\n since?: Date;\n}\n\nfunction parseArgs(args: string[]): ScanOptions {\n const options: ScanOptions = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--agent\" || arg === \"-a\") {\n options.agent = args[++i];\n } else if (arg === \"--since\" || arg === \"-s\") {\n const val = args[++i];\n if (val) {\n options.since = new Date(val);\n if (isNaN(options.since.getTime())) {\n console.error(`invalid date: ${val}`);\n process.exit(1);\n }\n }\n } else if (arg === \"--help\" || arg === \"-h\") {\n console.log(`supernaturalist scan \u2014 scan sessions for supernatural terms\n\nOptions:\n --agent, -a <name> Scan only a specific agent (claude, codex, opencode, amp, cline, pi, zed)\n --since, -s <date> Only scan messages after this date (ISO 8601)\n --help, -h Show this help`);\n process.exit(0);\n }\n }\n\n return options;\n}\n\nexport async function scan(args: string[]): Promise<void> {\n const options = parseArgs(args);\n\n const adapters = options.agent\n ? [createAdapter(options.agent)]\n : allAdapters();\n\n const spinner = createSpinner();\n spinner.start();\n\n const groupTally: Record<string, number> = {};\n const variantTally: Record<string, Record<string, number>> = {};\n\n let totalMessages = 0;\n let totalFindings = 0;\n const perAgent: Record<string, { messages: number; findings: number }> = {};\n\n for (const adapter of adapters) {\n let agentMessages = 0;\n let agentFindings = 0;\n spinner.update();\n\n const adapterOptions = options.since ? { since: options.since } : undefined;\n for await (const message of adapter.messages(adapterOptions)) {\n totalMessages++;\n agentMessages++;\n\n const result = detect(message.text);\n if (result.count > 0) {\n totalFindings += result.count;\n agentFindings += result.count;\n\n for (const match of result.matches) {\n groupTally[match.group] = (groupTally[match.group] ?? 0) + 1;\n\n const variants = (variantTally[match.group] ??= {});\n variants[match.word] = (variants[match.word] ?? 0) + 1;\n }\n }\n }\n\n if (agentMessages > 0) {\n perAgent[adapter.name] = { messages: agentMessages, findings: agentFindings };\n }\n }\n\n spinner.stop();\n\n console.log(\"\");\n console.log(` ${c.bold}${c.magenta}supernaturalist${c.reset} ${c.dim}report${c.reset}`);\n console.log(` ${c.dim}${\"\u2500\".repeat(30)}${c.reset}`);\n console.log(\"\");\n console.log(` ${c.dim}agent messages scanned${c.reset} ${c.bold}${totalMessages}${c.reset}`);\n console.log(\n ` ${c.dim}supernatural hits${c.reset} ${c.bold}${c.magenta}${totalFindings}${c.reset}`,\n );\n\n const activeAgents = Object.entries(perAgent);\n if (activeAgents.length > 1) {\n console.log(\"\");\n console.log(` ${c.bold}by agent${c.reset}`);\n for (const [name, stats] of activeAgents) {\n const rate = ((stats.findings / stats.messages) * 100).toFixed(1);\n console.log(\n ` ${c.cyan}${name.padEnd(10)}${c.reset} ${c.bold}${String(stats.findings).padStart(4)}${c.reset} ${c.dim}in ${stats.messages} messages (${rate}%)${c.reset}`,\n );\n }\n }\n\n if (totalFindings > 0) {\n const sorted = Object.entries(groupTally).sort(([, a], [, b]) => b - a);\n console.log(\"\");\n console.log(` ${c.bold}top terms${c.reset}`);\n for (const [group, count] of sorted.slice(0, 10)) {\n const variants = variantTally[group] ?? {};\n const variantList = Object.entries(variants)\n .sort(([, a], [, b]) => b - a)\n .filter(([v]) => v !== group)\n .slice(0, 15)\n .map(([v, cnt]) => `${c.dim}${v}${c.reset} ${cnt}`)\n .join(`${c.dim},${c.reset} `);\n const suffix = variantList\n ? ` ${c.dim}(${c.reset}${variantList}${c.dim})${c.reset}`\n : \"\";\n console.log(\n ` ${c.yellow}${group.padEnd(12)}${c.reset} ${c.bold}${String(count).padStart(4)}${c.reset}${suffix}`,\n );\n }\n }\n\n console.log(\"\");\n if (totalFindings === 0) {\n console.log(` ${c.green}all quiet. no supernatural traces found.${c.reset}`);\n console.log(\"\");\n }\n}\n", "import { scan } from \"./commands/scan\";\n\nconst COMMANDS: Record<string, (args: string[]) => Promise<void>> = {\n scan,\n};\n\nfunction usage(): void {\n console.log(`supernaturalist \u2014 analyze supernatural language in agent responses\n\nUsage:\n supernaturalist <command> [options]\n\nCommands:\n scan Scan agent responses for supernatural terms\n\nOptions:\n --help, -h Show this help message\n --version Show version\n\nExamples:\n supernaturalist scan\n supernaturalist scan --agent claude\n supernaturalist scan --since 2025-01-01`);\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (command === \"--help\" || command === \"-h\") {\n usage();\n process.exit(0);\n }\n\n if (command === \"--version\") {\n console.log(\"0.1.0\");\n process.exit(0);\n }\n\n const handler = command ? COMMANDS[command] : undefined;\n if (handler) {\n await handler(args.slice(1));\n } else {\n await scan(args);\n }\n}\n\nmain().catch((err: unknown) => {\n console.error(err);\n process.exit(1);\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { readdir, readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Amp (Sourcegraph) stores threads as JSON files at:\n * ~/.local/share/amp/threads/<thread-id>.json\n *\n * Each file is a JSON object with a `messages` array:\n * { \"messages\": [{ \"role\": \"user\"|\"assistant\", \"content\": \"...\", ... }], \"usageLedger\": {...}, ... }\n *\n * Messages have `role`, `content` (string or array), and optionally a timestamp.\n */\n\nfunction getAmpThreadsDir(): string {\n return join(\n process.env[\"XDG_DATA_HOME\"] ?? join(homedir(), \".local\", \"share\"),\n \"amp\",\n \"threads\",\n );\n}\n\nexport function ampAdapter(): Adapter {\n return {\n name: \"amp\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const threadsDir = getAmpThreadsDir();\n\n let files: string[];\n try {\n files = await readdir(threadsDir);\n } catch {\n return; // Amp not installed or no threads\n }\n\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\n\n for (const file of jsonFiles) {\n const filePath = join(threadsDir, file);\n const threadId = file.replace(\".json\", \"\");\n\n try {\n const raw = await readFile(filePath, \"utf-8\");\n const thread = JSON.parse(raw) as AmpThread;\n\n if (!thread.messages || !Array.isArray(thread.messages)) {continue;}\n\n for (const msg of thread.messages) {\n if (msg.role !== \"assistant\") {continue;}\n\n const text = extractText(msg.content);\n if (!text) {continue;}\n\n const timestamp = msg.timestamp ?? msg.createdAt ?? undefined;\n if (options?.since && timestamp) {\n const ts = new Date(timestamp);\n if (ts < options.since) {continue;}\n }\n\n yield {\n text,\n timestamp,\n session: threadId,\n };\n }\n } catch {\n // Skip malformed files\n }\n }\n },\n };\n}\n\nfunction extractText(content: unknown): string | null {\n if (typeof content === \"string\") {return content;}\n if (Array.isArray(content)) {\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" && p !== null && typeof p.text === \"string\",\n )\n .map((p) => p.text);\n return parts.length > 0 ? parts.join(\" \") : null;\n }\n return null;\n}\n\ninterface AmpMessage {\n role?: string;\n content?: unknown;\n timestamp?: string;\n createdAt?: string;\n}\n\ninterface AmpThread {\n messages?: AmpMessage[];\n}\n", "import { createReadStream } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Claude Code stores sessions as JSONL files at:\n * ~/.claude/projects/<project-path>/<session-uuid>.jsonl\n *\n * Each line is a JSON object. Assistant messages have:\n * { \"type\": \"assistant\", \"message\": { \"content\": [...] } }\n * or sometimes:\n * { \"role\": \"assistant\", \"content\": \"...\" }\n */\n\nconst CLAUDE_DIR = join(homedir(), \".claude\", \"projects\");\n\nexport function claudeAdapter(): Adapter {\n return {\n name: \"claude\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const projectsDir = CLAUDE_DIR;\n\n let projectDirs: string[];\n try {\n projectDirs = await readdir(projectsDir);\n } catch {\n return; // Claude Code not installed or no sessions\n }\n\n for (const projectDir of projectDirs) {\n const projectPath = join(projectsDir, projectDir);\n const projectStat = await stat(projectPath);\n if (!projectStat.isDirectory()) {continue;}\n\n const entries = await readdir(projectPath);\n const jsonlFiles = entries.filter((f) => f.endsWith(\".jsonl\"));\n\n for (const file of jsonlFiles) {\n const filePath = join(projectPath, file);\n const session = file.replace(\".jsonl\", \"\");\n\n const context = options?.since\n ? { session, project: projectDir, since: options.since }\n : { session, project: projectDir };\n yield* parseClaudeJsonl(filePath, context);\n }\n\n const subdirs = entries.filter((f) => !f.includes(\".\"));\n for (const subdir of subdirs) {\n const subagentsDir = join(projectPath, subdir, \"subagents\");\n try {\n const subFiles = await readdir(subagentsDir);\n const subJsonl = subFiles.filter((f) => f.endsWith(\".jsonl\"));\n for (const file of subJsonl) {\n const context = options?.since\n ? {\n session: `${subdir}/${file.replace(\".jsonl\", \"\")}`,\n project: projectDir,\n since: options.since,\n }\n : {\n session: `${subdir}/${file.replace(\".jsonl\", \"\")}`,\n project: projectDir,\n };\n yield* parseClaudeJsonl(join(subagentsDir, file), context);\n }\n } catch {\n // No subagents directory, skip\n }\n }\n }\n },\n };\n}\n\nasync function* parseClaudeJsonl(\n filePath: string,\n context: { session: string; project: string; since?: Date },\n): AsyncGenerator<Message> {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf-8\" }),\n crlfDelay: Infinity,\n });\n\n for await (const line of rl) {\n if (!line.trim()) {continue;}\n\n try {\n const entry = JSON.parse(line) as Record<string, unknown>;\n const text = extractAssistantText(entry);\n if (!text) {continue;}\n\n const timestamp = extractTimestamp(entry);\n if (context.since && timestamp) {\n const ts = new Date(timestamp);\n if (ts < context.since) {continue;}\n }\n\n const message: Message = timestamp\n ? {\n text,\n timestamp,\n session: context.session,\n project: context.project,\n }\n : {\n text,\n session: context.session,\n project: context.project,\n };\n yield message;\n } catch {\n // Skip malformed lines\n }\n }\n}\n\nfunction extractAssistantText(entry: Record<string, unknown>): string | null {\n if (entry[\"type\"] === \"assistant\") {\n const message = entry[\"message\"] as Record<string, unknown> | undefined;\n if (!message) {return null;}\n return contentToString(message[\"content\"]);\n }\n\n if (entry[\"role\"] === \"assistant\") {\n return contentToString(entry[\"content\"]);\n }\n\n return null;\n}\n\nfunction contentToString(content: unknown): string | null {\n if (typeof content === \"string\") {return content;}\n if (Array.isArray(content)) {\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" && p !== null && p.type === \"text\",\n )\n .map((p) => p.text);\n return parts.length > 0 ? parts.join(\" \") : null;\n }\n return null;\n}\n\nfunction extractTimestamp(entry: Record<string, unknown>): string | null {\n if (typeof entry[\"timestamp\"] === \"string\") {return entry[\"timestamp\"];}\n if (typeof entry[\"createdAt\"] === \"string\") {return entry[\"createdAt\"];}\n return null;\n}\n", "import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Cline (formerly Claude Dev) stores task history at:\n *\n * VS Code extension:\n * macOS: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/tasks/<task-id>/api_conversation_history.json\n * Linux: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/tasks/<task-id>/api_conversation_history.json\n * Windows: %APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/tasks/<task-id>/api_conversation_history.json\n *\n * Standalone CLI / JetBrains (newer):\n * ~/.cline/data/tasks/<task-id>/api_conversation_history.json\n *\n * Roo Code (fork) uses the same format at:\n * globalStorage/rooveterinaryinc.roo-cline/tasks/<task-id>/api_conversation_history.json\n *\n * Each api_conversation_history.json is a JSON array of messages:\n * [{ \"role\": \"user\"|\"assistant\", \"content\": \"...\" | [{type: \"text\", text: \"...\"}] }]\n */\n\nfunction getClineTaskDirs(): string[] {\n const dirs: string[] = [];\n\n const vscodePaths = getVSCodeGlobalStoragePaths();\n const extensionIds = [\"saoudrizwan.claude-dev\", \"rooveterinaryinc.roo-cline\"];\n\n for (const basePath of vscodePaths) {\n for (const extId of extensionIds) {\n const tasksDir = join(basePath, extId, \"tasks\");\n if (existsSync(tasksDir)) {dirs.push(tasksDir);}\n }\n }\n\n const clineStandalone = join(homedir(), \".cline\", \"data\", \"tasks\");\n if (existsSync(clineStandalone)) {dirs.push(clineStandalone);}\n\n return dirs;\n}\n\nfunction getVSCodeGlobalStoragePaths(): string[] {\n const paths: string[] = [];\n\n if (process.platform === \"darwin\") {\n paths.push(\n join(homedir(), \"Library\", \"Application Support\", \"Code\", \"User\", \"globalStorage\"),\n join(homedir(), \"Library\", \"Application Support\", \"Code - Insiders\", \"User\", \"globalStorage\"),\n join(homedir(), \"Library\", \"Application Support\", \"Cursor\", \"User\", \"globalStorage\"),\n );\n } else if (process.platform === \"linux\") {\n const configBase = process.env[\"XDG_CONFIG_HOME\"] ?? join(homedir(), \".config\");\n paths.push(\n join(configBase, \"Code\", \"User\", \"globalStorage\"),\n join(configBase, \"Code - Insiders\", \"User\", \"globalStorage\"),\n join(configBase, \"Cursor\", \"User\", \"globalStorage\"),\n );\n } else {\n const appData = process.env[\"APPDATA\"] ?? join(homedir(), \"AppData\", \"Roaming\");\n paths.push(\n join(appData, \"Code\", \"User\", \"globalStorage\"),\n join(appData, \"Code - Insiders\", \"User\", \"globalStorage\"),\n join(appData, \"Cursor\", \"User\", \"globalStorage\"),\n );\n }\n\n return paths;\n}\n\nexport function clineAdapter(): Adapter {\n return {\n name: \"cline\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const taskDirs = getClineTaskDirs();\n\n for (const tasksDir of taskDirs) {\n let taskIds: string[];\n try {\n taskIds = await readdir(tasksDir);\n } catch {\n continue;\n }\n\n for (const taskId of taskIds) {\n const taskDir = join(tasksDir, taskId);\n const taskStat = await stat(taskDir).catch(() => null);\n if (!taskStat?.isDirectory()) {continue;}\n\n const historyFile = join(taskDir, \"api_conversation_history.json\");\n\n try {\n const raw = await readFile(historyFile, \"utf-8\");\n const messages = JSON.parse(raw) as ClineMessage[];\n\n if (!Array.isArray(messages)) {continue;}\n\n for (const msg of messages) {\n if (msg.role !== \"assistant\") {continue;}\n\n const text = extractText(msg.content);\n if (!text) {continue;}\n\n const timestamp = msg.ts ?? undefined;\n if (options?.since && timestamp) {\n const ts = new Date(timestamp);\n if (ts < options.since) {continue;}\n }\n\n yield {\n text,\n session: taskId,\n };\n }\n } catch {\n // Skip tasks without history or malformed files\n }\n }\n }\n },\n };\n}\n\nfunction extractText(content: unknown): string | null {\n if (typeof content === \"string\") {return content;}\n if (Array.isArray(content)) {\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" &&\n p !== null &&\n p.type === \"text\" &&\n typeof p.text === \"string\",\n )\n .map((p) => p.text);\n return parts.length > 0 ? parts.join(\" \") : null;\n }\n return null;\n}\n\ninterface ClineMessage {\n role?: string;\n content?: unknown;\n ts?: string;\n}\n", "import { createReadStream } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Codex stores sessions as JSONL files at:\n * ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl\n *\n * Each line is JSON with structure:\n * { \"timestamp\": \"...\", \"type\": \"response_item\", \"payload\": { \"type\": \"message\", \"role\": \"assistant\", \"content\": [...] } }\n *\n * Assistant messages have payload.role === \"assistant\" and content is usually\n * an array of { \"type\": \"output_text\", \"text\": \"...\" } parts.\n */\n\nconst CODEX_SESSIONS_DIR = join(homedir(), \".codex\", \"sessions\");\n\nexport function codexAdapter(): Adapter {\n return {\n name: \"codex\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n yield* walkCodexSessions(CODEX_SESSIONS_DIR, options);\n },\n };\n}\n\nasync function* walkCodexSessions(\n dir: string,\n options?: AdapterOptions,\n): AsyncGenerator<Message> {\n let entries: string[];\n try {\n entries = await readdir(dir);\n } catch {\n return; // Codex not installed or no sessions\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const entryStat = await stat(fullPath);\n\n if (entryStat.isDirectory()) {\n yield* walkCodexSessions(fullPath, options);\n } else if (entry.endsWith(\".jsonl\")) {\n const session = entry.replace(\".jsonl\", \"\");\n const context = options?.since ? { session, since: options.since } : { session };\n yield* parseCodexJsonl(fullPath, context);\n }\n }\n}\n\nasync function* parseCodexJsonl(\n filePath: string,\n context: { session: string; since?: Date },\n): AsyncGenerator<Message> {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf-8\" }),\n crlfDelay: Infinity,\n });\n\n for await (const line of rl) {\n if (!line.trim()) {continue;}\n\n try {\n const entry = JSON.parse(line) as CodexEntry;\n\n if (entry.type !== \"response_item\") {continue;}\n\n const payload = entry.payload;\n if (!payload || payload.role !== \"assistant\") {continue;}\n\n const text = extractText(payload.content);\n if (!text) {continue;}\n\n if (context.since && entry.timestamp) {\n const ts = new Date(entry.timestamp);\n if (ts < context.since) {continue;}\n }\n\n const message: Message = entry.timestamp\n ? { text, timestamp: entry.timestamp, session: context.session }\n : { text, session: context.session };\n yield message;\n } catch {\n // Skip malformed lines\n }\n }\n}\n\nfunction extractText(content: unknown): string | null {\n if (!Array.isArray(content)) {return null;}\n\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" &&\n p !== null &&\n (p.type === \"output_text\" || p.type === \"text\") &&\n typeof p.text === \"string\",\n )\n .map((p) => p.text);\n\n return parts.length > 0 ? parts.join(\" \") : null;\n}\n\ninterface CodexEntry {\n timestamp?: string;\n type: string;\n payload?: {\n type?: string;\n role?: string;\n content?: unknown;\n };\n}\n", "import { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * OpenCode stores sessions in a SQLite database at:\n * ~/.local/share/opencode/opencode.db\n *\n * Schema:\n * message: { id, session_id, time_created (epoch ms), time_updated, data (JSON) }\n * part: { id, message_id, session_id, time_created, time_updated, data (JSON) }\n *\n * message.data: { \"role\": \"user\"|\"assistant\", \"time\": {...}, \"agent\": \"...\", ... }\n * part.data: { \"type\": \"text\", \"text\": \"the assistant's message\" }\n *\n * Assistant messages have role=\"assistant\" in message.data. The actual text content is in\n * the associated part rows where part.data.type === \"text\".\n */\n\nfunction getOpencodeDatabasePath(): string | null {\n const xdgPath = join(\n process.env[\"XDG_DATA_HOME\"] ?? join(homedir(), \".local\", \"share\"),\n \"opencode\",\n \"opencode.db\",\n );\n if (existsSync(xdgPath)) {return xdgPath;}\n\n if (process.platform === \"darwin\") {\n const macPath = join(\n homedir(),\n \"Library\",\n \"Application Support\",\n \"opencode\",\n \"opencode.db\",\n );\n if (existsSync(macPath)) {return macPath;}\n }\n\n return null;\n}\n\nexport function opencodeAdapter(): Adapter {\n return {\n name: \"opencode\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const dbPath = getOpencodeDatabasePath();\n if (!dbPath) {return;}\n\n let db: import(\"better-sqlite3\").Database;\n try {\n const BetterSqlite3 = await import(\"better-sqlite3\");\n const Ctor = BetterSqlite3.default ?? BetterSqlite3;\n db = new (Ctor as unknown as new (\n ...args: unknown[]\n ) => import(\"better-sqlite3\").Database)(dbPath, { readonly: true });\n } catch {\n console.warn(\n \"supernaturalist: better-sqlite3 not available, skipping OpenCode sessions\",\n );\n return;\n }\n\n try {\n yield* queryAssistantMessages(db, options);\n } finally {\n db.close();\n }\n },\n };\n}\n\nfunction* queryAssistantMessages(\n db: import(\"better-sqlite3\").Database,\n options?: AdapterOptions,\n): Generator<Message> {\n let query = `\n SELECT\n m.session_id,\n m.time_created,\n json_extract(p.data, '$.text') as text\n FROM message m\n JOIN part p ON p.message_id = m.id\n WHERE json_extract(m.data, '$.role') = 'assistant'\n AND json_extract(p.data, '$.type') = 'text'\n `;\n\n if (options?.since) {\n const sinceMs = options.since.getTime();\n query += ` AND m.time_created >= ${sinceMs}`;\n }\n\n query += ` ORDER BY m.time_created ASC`;\n\n const rows = db.prepare(query).all() as {\n session_id: string;\n time_created: number;\n text: string;\n }[];\n\n for (const row of rows) {\n if (!row.text || !row.text.trim()) {continue;}\n\n yield {\n text: row.text,\n timestamp: new Date(row.time_created).toISOString(),\n session: row.session_id,\n };\n }\n}\n", "import { createReadStream } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Pi Agent stores sessions as JSONL files at:\n * ~/.pi/agent/sessions/<project>/<session-id>.jsonl\n *\n * Each line is a JSON object:\n * { \"type\": \"session\", \"cwd\": \"/path/to/project\" } \u2014 session metadata\n * { \"type\": \"message\", \"timestamp\": \"...\", \"message\": { \"role\": \"assistant\", \"content\": \"...\" } }\n *\n * Content can be a string or array of { type: \"text\", text: \"...\" } parts.\n */\n\nconst PI_SESSIONS_DIR = join(homedir(), \".pi\", \"agent\", \"sessions\");\n\nexport function piAdapter(): Adapter {\n return {\n name: \"pi\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n yield* walkPiSessions(PI_SESSIONS_DIR, options);\n },\n };\n}\n\nasync function* walkPiSessions(\n dir: string,\n options?: AdapterOptions,\n project?: string,\n): AsyncGenerator<Message> {\n let entries: string[];\n try {\n entries = await readdir(dir);\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const entryStat = await stat(fullPath).catch(() => null);\n if (!entryStat) {continue;}\n\n if (entryStat.isDirectory()) {\n yield* walkPiSessions(fullPath, options, project ?? entry);\n } else if (entry.endsWith(\".jsonl\")) {\n const session = entry.replace(\".jsonl\", \"\");\n const context = options?.since\n ? { session, project, since: options.since }\n : { session, project };\n yield* parsePiJsonl(fullPath, context);\n }\n }\n}\n\nasync function* parsePiJsonl(\n filePath: string,\n context: { session: string; project?: string; since?: Date },\n): AsyncGenerator<Message> {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf-8\" }),\n crlfDelay: Infinity,\n });\n\n let project = context.project;\n\n for await (const line of rl) {\n if (!line.trim()) {continue;}\n\n try {\n const entry = JSON.parse(line) as PiEntry;\n\n if (entry.type === \"session\") {\n project = entry.cwd ?? project;\n continue;\n }\n\n if (entry.type !== \"message\") {continue;}\n\n const message = entry.message;\n if (!message || message.role !== \"assistant\") {continue;}\n\n const text = contentToString(message.content);\n if (!text) {continue;}\n\n const timestamp =\n typeof entry.timestamp === \"string\"\n ? entry.timestamp\n : typeof message.timestamp === \"number\"\n ? new Date(message.timestamp).toISOString()\n : undefined;\n\n if (context.since && timestamp) {\n const ts = new Date(timestamp);\n if (ts < context.since) {continue;}\n }\n\n const record: Message = timestamp\n ? project\n ? { text, timestamp, session: context.session, project }\n : { text, timestamp, session: context.session }\n : project\n ? { text, session: context.session, project }\n : { text, session: context.session };\n yield record;\n } catch {\n // Skip malformed lines\n }\n }\n}\n\nfunction contentToString(content: unknown): string | null {\n if (typeof content === \"string\") {return content;}\n if (Array.isArray(content)) {\n const parts = content\n .filter(\n (p): p is { type: string; text: string } =>\n typeof p === \"object\" &&\n p !== null &&\n p.type === \"text\" &&\n typeof p.text === \"string\",\n )\n .map((p) => p.text);\n return parts.length > 0 ? parts.join(\" \") : null;\n }\n return null;\n}\n\ninterface PiEntry {\n type?: string;\n timestamp?: string;\n cwd?: string;\n message?: {\n role?: string;\n content?: unknown;\n timestamp?: number;\n };\n}\n", "import { readdir, readFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Adapter, AdapterOptions, Message } from \"./index\";\n\n/**\n * Zed stores AI conversations in two places:\n *\n * 1. Text threads (older assistant panel):\n * ~/.local/share/zed/conversations/*.json (Linux)\n * ~/Library/Application Support/Zed/conversations/*.json (macOS)\n * These are markdown-like JSON with messages.\n *\n * 2. Agent threads (newer):\n * Stored in SQLite at ~/.local/share/zed/db (Linux)\n * or ~/Library/Application Support/Zed/db (macOS)\n * We'd need to query this, but the schema isn't well documented.\n *\n * We support the text thread JSON files for now, and the SQLite agent\n * threads when better-sqlite3 is available.\n */\n\nfunction getZedPaths(): { conversations: string; db: string } {\n if (process.platform === \"darwin\") {\n const base = join(homedir(), \"Library\", \"Application Support\", \"Zed\");\n return {\n conversations: join(base, \"conversations\"),\n db: join(base, \"db\"),\n };\n }\n const base = join(\n process.env[\"XDG_DATA_HOME\"] ?? join(homedir(), \".local\", \"share\"),\n \"zed\",\n );\n return {\n conversations: join(base, \"conversations\"),\n db: join(base, \"db\"),\n };\n}\n\nexport function zedAdapter(): Adapter {\n return {\n name: \"zed\",\n async *messages(options?: AdapterOptions): AsyncGenerator<Message> {\n const paths = getZedPaths();\n\n yield* parseTextThreads(paths.conversations, options);\n yield* parseAgentThreads(paths.db, options);\n },\n };\n}\n\nasync function* parseTextThreads(\n dir: string,\n _options?: AdapterOptions,\n): AsyncGenerator<Message> {\n if (!existsSync(dir)) {return;}\n\n let files: string[];\n try {\n files = await readdir(dir);\n } catch {\n return;\n }\n\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\n\n for (const file of jsonFiles) {\n const filePath = join(dir, file);\n const session = file.replace(\".json\", \"\");\n\n try {\n const raw = await readFile(filePath, \"utf-8\");\n const conversation = JSON.parse(raw) as ZedConversation;\n\n if (!conversation.messages || !Array.isArray(conversation.messages)) {continue;}\n\n for (const msg of conversation.messages) {\n if (msg.role !== \"assistant\") {continue;}\n\n const text = typeof msg.content === \"string\" ? msg.content : null;\n if (!text) {continue;}\n\n yield {\n text,\n session,\n };\n }\n } catch {\n // Skip malformed files\n }\n }\n}\n\nasync function* parseAgentThreads(\n dbDir: string,\n _options?: AdapterOptions,\n): AsyncGenerator<Message> {\n if (!existsSync(dbDir)) {return;}\n\n let dbFiles: string[];\n try {\n const entries = await readdir(dbDir);\n dbFiles = entries.filter((f) => f.endsWith(\".db\"));\n } catch {\n return;\n }\n\n if (dbFiles.length === 0) {return;}\n\n let Database: unknown;\n try {\n const mod = await import(\"better-sqlite3\");\n Database = mod.default ?? mod;\n } catch {\n return;\n }\n\n for (const dbFile of dbFiles) {\n const dbPath = join(dbDir, dbFile);\n let db: import(\"better-sqlite3\").Database;\n\n try {\n db = new (Database as new (\n ...args: unknown[]\n ) => import(\"better-sqlite3\").Database)(dbPath, { readonly: true });\n } catch {\n continue;\n }\n\n try {\n const tables = db\n .prepare(\"SELECT name FROM sqlite_master WHERE type='table'\")\n .all() as { name: string }[];\n const tableNames = tables.map((t) => t.name);\n\n const msgTable = tableNames.find(\n (t) => t === \"messages\" || t === \"thread_messages\" || t.includes(\"message\"),\n );\n\n if (!msgTable) {\n db.close();\n continue;\n }\n\n const columns = db.prepare(`PRAGMA table_info(\"${msgTable}\")`).all() as {\n name: string;\n }[];\n const colNames = columns.map((c) => c.name);\n\n const hasRole = colNames.includes(\"role\");\n\n if (!hasRole) {\n db.close();\n continue;\n }\n\n const contentCol = colNames.includes(\"content\")\n ? \"content\"\n : colNames.includes(\"body\")\n ? \"body\"\n : \"text\";\n\n const query = `SELECT \"${contentCol}\" as text FROM \"${msgTable}\" WHERE role = 'assistant'`;\n\n const rows = db.prepare(query).all() as { text: string }[];\n for (const row of rows) {\n if (!row.text?.trim()) {continue;}\n yield { text: row.text };\n }\n } catch {\n // Schema mismatch or other error\n } finally {\n db.close();\n }\n }\n}\n\ninterface ZedConversation {\n messages?: { role?: string; content?: unknown }[];\n}\n", "import { ampAdapter } from \"./amp\";\nimport { claudeAdapter } from \"./claude\";\nimport { clineAdapter } from \"./cline\";\nimport { codexAdapter } from \"./codex\";\nimport { opencodeAdapter } from \"./opencode\";\nimport { piAdapter } from \"./pi\";\nimport { zedAdapter } from \"./zed\";\n\nexport interface Message {\n text: string;\n timestamp?: string;\n session?: string;\n project?: string;\n}\n\nexport interface Adapter {\n name: string;\n /** Discover and yield assistant/agent messages from local session storage */\n messages(options?: AdapterOptions): AsyncGenerator<Message>;\n}\n\nexport interface AdapterOptions {\n since?: Date;\n}\n\nconst ADAPTERS: Record<string, () => Adapter> = {\n claude: claudeAdapter,\n codex: codexAdapter,\n opencode: opencodeAdapter,\n amp: ampAdapter,\n cline: clineAdapter,\n pi: piAdapter,\n zed: zedAdapter,\n};\n\nexport function createAdapter(name: string): Adapter {\n const factory = ADAPTERS[name];\n if (!factory) {\n throw new Error(\n `unknown adapter: ${name} (available: ${Object.keys(ADAPTERS).join(\", \")})`,\n );\n }\n return factory();\n}\n\nexport function allAdapters(): Adapter[] {\n return Object.values(ADAPTERS).map((f) => f());\n}\n", "export interface DetectionResult {\n /** Total supernatural terms found in the text */\n count: number;\n /** Individual matches */\n matches: Match[];\n}\n\nexport interface Match {\n word: string;\n index: number;\n intensity: Intensity;\n group: string;\n}\n\nexport type Intensity = \"subtle\" | \"vivid\" | \"ominous\";\n\ninterface WordDef {\n word: string;\n intensity: Intensity;\n group: string;\n}\n\n/**\n * Core wordlist: canonical forms, conjugations, compound words, and common typos.\n * Grouped by root word for reporting rollup.\n */\nconst WORDLIST: WordDef[] = [\n // === GHOST family (vivid) ===\n { word: \"ghost\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghosts\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghostly\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghosted\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghosting\", intensity: \"vivid\", group: \"ghost\" },\n { word: \"ghostwriter\", intensity: \"subtle\", group: \"ghost\" },\n\n // === HAUNT family (ominous) ===\n { word: \"haunt\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"haunted\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"haunting\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"haunts\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"hauntings\", intensity: \"ominous\", group: \"haunt\" },\n\n // === CURSE family (ominous) ===\n { word: \"curse\", intensity: \"ominous\", group: \"curse\" },\n { word: \"cursed\", intensity: \"ominous\", group: \"curse\" },\n { word: \"curses\", intensity: \"ominous\", group: \"curse\" },\n { word: \"cursing\", intensity: \"ominous\", group: \"curse\" },\n { word: \"cursedness\", intensity: \"ominous\", group: \"curse\" },\n\n // === GHOUL family (vivid) ===\n { word: \"ghoul\", intensity: \"vivid\", group: \"ghoul\" },\n { word: \"ghouls\", intensity: \"vivid\", group: \"ghoul\" },\n { word: \"ghoulish\", intensity: \"vivid\", group: \"ghoul\" },\n\n // === GOBLIN family (vivid) ===\n { word: \"goblin\", intensity: \"vivid\", group: \"goblin\" },\n { word: \"goblins\", intensity: \"vivid\", group: \"goblin\" },\n { word: \"gobliny\", intensity: \"subtle\", group: \"goblin\" },\n\n // === SPECTER family (vivid) ===\n { word: \"specter\", intensity: \"vivid\", group: \"specter\" },\n { word: \"specters\", intensity: \"vivid\", group: \"specter\" },\n { word: \"spectral\", intensity: \"vivid\", group: \"specter\" },\n\n // === PHANTOM family (vivid) ===\n { word: \"phantom\", intensity: \"vivid\", group: \"phantom\" },\n { word: \"phantoms\", intensity: \"vivid\", group: \"phantom\" },\n\n // === WRAITH family (ominous) ===\n { word: \"wraith\", intensity: \"ominous\", group: \"wraith\" },\n { word: \"wraiths\", intensity: \"ominous\", group: \"wraith\" },\n { word: \"wraithlike\", intensity: \"ominous\", group: \"wraith\" },\n\n // === APPARITION family (vivid) ===\n { word: \"apparition\", intensity: \"vivid\", group: \"apparition\" },\n { word: \"apparitions\", intensity: \"vivid\", group: \"apparition\" },\n { word: \"apparitional\", intensity: \"vivid\", group: \"apparition\" },\n\n // === POLTERGEIST family (ominous) ===\n { word: \"poltergeist\", intensity: \"ominous\", group: \"poltergeist\" },\n { word: \"poltergeists\", intensity: \"ominous\", group: \"poltergeist\" },\n\n // === DEMON family (ominous) ===\n { word: \"demon\", intensity: \"ominous\", group: \"demon\" },\n { word: \"demons\", intensity: \"ominous\", group: \"demon\" },\n { word: \"demonic\", intensity: \"ominous\", group: \"demon\" },\n\n // === UNDEAD family (vivid) ===\n { word: \"undead\", intensity: \"vivid\", group: \"undead\" },\n { word: \"lich\", intensity: \"ominous\", group: \"undead\" },\n { word: \"liches\", intensity: \"ominous\", group: \"undead\" },\n { word: \"revenant\", intensity: \"ominous\", group: \"undead\" },\n { word: \"revenants\", intensity: \"ominous\", group: \"undead\" },\n\n // === ZOMBIE family (vivid) ===\n { word: \"zombie\", intensity: \"vivid\", group: \"zombie\" },\n { word: \"zombies\", intensity: \"vivid\", group: \"zombie\" },\n { word: \"zombified\", intensity: \"vivid\", group: \"zombie\" },\n { word: \"zombifying\", intensity: \"vivid\", group: \"zombie\" },\n\n // === VAMPIRE family (ominous) ===\n { word: \"vampire\", intensity: \"ominous\", group: \"vampire\" },\n { word: \"vampires\", intensity: \"ominous\", group: \"vampire\" },\n { word: \"vampiric\", intensity: \"ominous\", group: \"vampire\" },\n { word: \"vampirism\", intensity: \"ominous\", group: \"vampire\" },\n\n // === WEREWOLF family (ominous) ===\n { word: \"werewolf\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"werewolves\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"lycan\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"lycans\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"lycanthrope\", intensity: \"ominous\", group: \"werewolf\" },\n { word: \"lycanthropy\", intensity: \"ominous\", group: \"werewolf\" },\n\n // === WITCH family (vivid) ===\n { word: \"witch\", intensity: \"vivid\", group: \"witch\" },\n { word: \"witches\", intensity: \"vivid\", group: \"witch\" },\n { word: \"witchcraft\", intensity: \"vivid\", group: \"witch\" },\n { word: \"witchy\", intensity: \"subtle\", group: \"witch\" },\n\n // === WARLOCK family (vivid) ===\n { word: \"warlock\", intensity: \"vivid\", group: \"warlock\" },\n { word: \"warlocks\", intensity: \"vivid\", group: \"warlock\" },\n\n // === SORCERY family (vivid) ===\n { word: \"sorcery\", intensity: \"vivid\", group: \"sorcery\" },\n { word: \"sorcerer\", intensity: \"vivid\", group: \"sorcery\" },\n { word: \"sorcerers\", intensity: \"vivid\", group: \"sorcery\" },\n { word: \"sorcerous\", intensity: \"vivid\", group: \"sorcery\" },\n\n // === SPELL family (subtle) ===\n { word: \"spell\", intensity: \"subtle\", group: \"spell\" },\n { word: \"spells\", intensity: \"subtle\", group: \"spell\" },\n { word: \"spellbound\", intensity: \"vivid\", group: \"spell\" },\n { word: \"spellbinding\", intensity: \"vivid\", group: \"spell\" },\n { word: \"spellbook\", intensity: \"vivid\", group: \"spell\" },\n { word: \"spellcasting\", intensity: \"vivid\", group: \"spell\" },\n\n // === HEX family (ominous) ===\n { word: \"hex\", intensity: \"ominous\", group: \"hex\" },\n { word: \"hexed\", intensity: \"ominous\", group: \"hex\" },\n { word: \"hexes\", intensity: \"ominous\", group: \"hex\" },\n { word: \"hexing\", intensity: \"ominous\", group: \"hex\" },\n\n // === GRIMOIRE family (vivid) ===\n { word: \"grimoire\", intensity: \"vivid\", group: \"grimoire\" },\n { word: \"grimoires\", intensity: \"vivid\", group: \"grimoire\" },\n\n // === ELDRITCH family (ominous) ===\n { word: \"eldritch\", intensity: \"ominous\", group: \"eldritch\" },\n { word: \"eldritchy\", intensity: \"ominous\", group: \"eldritch\" },\n\n // === CURSED OBJECTS ===\n { word: \"hauntedhouse\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"hauntingly\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"cursedobject\", intensity: \"ominous\", group: \"curse\" },\n\n // === OTHER SUPERNATURAL ===\n { word: \"possessed\", intensity: \"ominous\", group: \"possession\" },\n { word: \"possession\", intensity: \"ominous\", group: \"possession\" },\n { word: \"possess\", intensity: \"ominous\", group: \"possession\" },\n { word: \"exorcism\", intensity: \"ominous\", group: \"exorcism\" },\n { word: \"exorcist\", intensity: \"ominous\", group: \"exorcism\" },\n { word: \"seance\", intensity: \"vivid\", group: \"seance\" },\n { word: \"s\u00E9ance\", intensity: \"vivid\", group: \"seance\" },\n { word: \"ouija\", intensity: \"vivid\", group: \"ouija\" },\n { word: \"hauntology\", intensity: \"subtle\", group: \"haunt\" },\n { word: \"banshee\", intensity: \"vivid\", group: \"banshee\" },\n { word: \"banshees\", intensity: \"vivid\", group: \"banshee\" },\n { word: \"wight\", intensity: \"ominous\", group: \"undead\" },\n { word: \"wights\", intensity: \"ominous\", group: \"undead\" },\n { word: \"ghast\", intensity: \"ominous\", group: \"ghoul\" },\n { word: \"ghasts\", intensity: \"ominous\", group: \"ghoul\" },\n { word: \"hauntedness\", intensity: \"ominous\", group: \"haunt\" },\n { word: \"spectrality\", intensity: \"vivid\", group: \"specter\" },\n { word: \"spirit\", intensity: \"subtle\", group: \"spirit\" },\n { word: \"spirits\", intensity: \"subtle\", group: \"spirit\" },\n { word: \"spiritual\", intensity: \"subtle\", group: \"spirit\" },\n { word: \"phantasm\", intensity: \"vivid\", group: \"phantom\" },\n { word: \"phantasms\", intensity: \"vivid\", group: \"phantom\" },\n];\n\nfunction collapseRepeats(text: string): string {\n return text.replace(/(.)\\1+/g, \"$1\");\n}\n\nfunction buildPattern(words: WordDef[]): RegExp {\n const sorted = [...words].sort((a, b) => b.word.length - a.word.length);\n const pattern = sorted.map((w) => escapeRegExp(w.word)).join(\"|\");\n return new RegExp(`\\\\b(${pattern})\\\\b`, \"gi\");\n}\n\nfunction escapeRegExp(word: string): string {\n return word.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst DEFAULT_PATTERN = buildPattern(WORDLIST);\nconst WORD_MAP = new Map(WORDLIST.map((w) => [w.word.toLowerCase(), w]));\n\n/**\n * Detect supernatural terms in a string.\n *\n * Runs detection in two passes:\n * 1. Direct match on original text (preserves positions)\n * 2. Match on repeat-collapsed text (catches ghooost, haauunted, etc.)\n */\nexport function detect(text: string): DetectionResult {\n const matches: Match[] = [];\n const seen = new Set<number>();\n\n runPattern(text, text.toLowerCase(), matches, seen);\n\n const collapsed = collapseRepeats(text.toLowerCase());\n if (collapsed !== text.toLowerCase()) {\n runPattern(text, collapsed, matches, seen);\n }\n\n return { count: matches.length, matches };\n}\n\nfunction runPattern(\n _originalText: string,\n searchText: string,\n matches: Match[],\n seen: Set<number>,\n): void {\n DEFAULT_PATTERN.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = DEFAULT_PATTERN.exec(searchText)) !== null) {\n if (seen.has(match.index)) {continue;}\n\n const word = match[0].toLowerCase();\n const entry = WORD_MAP.get(word);\n if (!entry) {continue;}\n\n seen.add(match.index);\n matches.push({\n word,\n index: match.index,\n intensity: entry.intensity,\n group: entry.group,\n });\n }\n}\n\n/**\n * Create a custom detector with additional words.\n */\nexport function createDetector(\n extraWords?: WordDef[],\n): (text: string) => DetectionResult {\n const allWords = extraWords ? [...WORDLIST, ...extraWords] : WORDLIST;\n const pattern = buildPattern(allWords);\n const wordMap = new Map(allWords.map((w) => [w.word.toLowerCase(), w]));\n\n return (text: string): DetectionResult => {\n const matches: Match[] = [];\n const seen = new Set<number>();\n\n const lower = text.toLowerCase();\n pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(lower)) !== null) {\n if (seen.has(match.index)) {continue;}\n const word = match[0].toLowerCase();\n const entry = wordMap.get(word);\n if (!entry) {continue;}\n seen.add(match.index);\n matches.push({ word, index: match.index, intensity: entry.intensity, group: entry.group });\n }\n\n const collapsed = collapseRepeats(lower);\n if (collapsed !== lower) {\n pattern.lastIndex = 0;\n while ((match = pattern.exec(collapsed)) !== null) {\n if (seen.has(match.index)) {continue;}\n const word = match[0].toLowerCase();\n const entry = wordMap.get(word);\n if (!entry) {continue;}\n seen.add(match.index);\n matches.push({ word, index: match.index, intensity: entry.intensity, group: entry.group });\n }\n }\n\n return { count: matches.length, matches };\n };\n}\n\nexport type { WordDef as WordEntry };\n", "import { allAdapters, createAdapter } from \"../adapters/index\";\nimport { detect } from \"../detector/index\";\n\nconst c = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n gray: \"\\x1b[90m\",\n};\n\nconst SPINNER_MESSAGES = [\n \"Summoning the archives\",\n \"Scanning for hauntings\",\n \"Listening for whispers\",\n \"Consulting the grimoire\",\n \"Cataloging the uncanny\",\n \"Tracking spectral echoes\",\n \"Measuring the eerie\",\n \"Indexing the supernatural\",\n \"Checking for curses\",\n \"Counting the eldritch\",\n];\n\nfunction createSpinner() {\n let messageIdx = 0;\n let dotCount = 0;\n let timer: ReturnType<typeof setInterval> | null = null;\n\n return {\n start() {\n messageIdx = Math.floor(Math.random() * SPINNER_MESSAGES.length);\n timer = setInterval(() => {\n dotCount = (dotCount + 1) % 4;\n const msg = SPINNER_MESSAGES[messageIdx % SPINNER_MESSAGES.length];\n const dots = \".\".repeat(dotCount || 1);\n process.stdout.write(`\\r ${c.dim}${msg}${dots}${c.reset} `);\n }, 300);\n },\n update() {\n messageIdx++;\n },\n stop() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n process.stdout.write(\"\\r\" + \" \".repeat(60) + \"\\r\");\n },\n };\n}\n\ninterface ScanOptions {\n agent?: string;\n since?: Date;\n}\n\nfunction parseArgs(args: string[]): ScanOptions {\n const options: ScanOptions = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--agent\" || arg === \"-a\") {\n options.agent = args[++i];\n } else if (arg === \"--since\" || arg === \"-s\") {\n const val = args[++i];\n if (val) {\n options.since = new Date(val);\n if (isNaN(options.since.getTime())) {\n console.error(`invalid date: ${val}`);\n process.exit(1);\n }\n }\n } else if (arg === \"--help\" || arg === \"-h\") {\n console.log(`supernaturalist scan \u2014 scan sessions for supernatural terms\n\nOptions:\n --agent, -a <name> Scan only a specific agent (claude, codex, opencode, amp, cline, pi, zed)\n --since, -s <date> Only scan messages after this date (ISO 8601)\n --help, -h Show this help`);\n process.exit(0);\n }\n }\n\n return options;\n}\n\nexport async function scan(args: string[]): Promise<void> {\n const options = parseArgs(args);\n\n const adapters = options.agent\n ? [createAdapter(options.agent)]\n : allAdapters();\n\n const spinner = createSpinner();\n spinner.start();\n\n const groupTally: Record<string, number> = {};\n const variantTally: Record<string, Record<string, number>> = {};\n\n let totalMessages = 0;\n let totalFindings = 0;\n const perAgent: Record<string, { messages: number; findings: number }> = {};\n\n for (const adapter of adapters) {\n let agentMessages = 0;\n let agentFindings = 0;\n spinner.update();\n\n const adapterOptions = options.since ? { since: options.since } : undefined;\n for await (const message of adapter.messages(adapterOptions)) {\n totalMessages++;\n agentMessages++;\n\n const result = detect(message.text);\n if (result.count > 0) {\n totalFindings += result.count;\n agentFindings += result.count;\n\n for (const match of result.matches) {\n groupTally[match.group] = (groupTally[match.group] ?? 0) + 1;\n\n const variants = (variantTally[match.group] ??= {});\n variants[match.word] = (variants[match.word] ?? 0) + 1;\n }\n }\n }\n\n if (agentMessages > 0) {\n perAgent[adapter.name] = { messages: agentMessages, findings: agentFindings };\n }\n }\n\n spinner.stop();\n\n console.log(\"\");\n console.log(` ${c.bold}${c.magenta}supernaturalist${c.reset} ${c.dim}report${c.reset}`);\n console.log(` ${c.dim}${\"\u2500\".repeat(30)}${c.reset}`);\n console.log(\"\");\n console.log(` ${c.dim}agent messages scanned${c.reset} ${c.bold}${totalMessages}${c.reset}`);\n console.log(\n ` ${c.dim}supernatural hits${c.reset} ${c.bold}${c.magenta}${totalFindings}${c.reset}`,\n );\n\n const activeAgents = Object.entries(perAgent);\n if (activeAgents.length > 1) {\n console.log(\"\");\n console.log(` ${c.bold}by agent${c.reset}`);\n for (const [name, stats] of activeAgents) {\n const rate = ((stats.findings / stats.messages) * 100).toFixed(1);\n console.log(\n ` ${c.cyan}${name.padEnd(10)}${c.reset} ${c.bold}${String(stats.findings).padStart(4)}${c.reset} ${c.dim}in ${stats.messages} messages (${rate}%)${c.reset}`,\n );\n }\n }\n\n if (totalFindings > 0) {\n const sorted = Object.entries(groupTally).sort(([, a], [, b]) => b - a);\n console.log(\"\");\n console.log(` ${c.bold}top terms${c.reset}`);\n for (const [group, count] of sorted.slice(0, 10)) {\n const variants = variantTally[group] ?? {};\n const variantList = Object.entries(variants)\n .sort(([, a], [, b]) => b - a)\n .filter(([v]) => v !== group)\n .slice(0, 15)\n .map(([v, cnt]) => `${c.dim}${v}${c.reset} ${cnt}`)\n .join(`${c.dim},${c.reset} `);\n const suffix = variantList\n ? ` ${c.dim}(${c.reset}${variantList}${c.dim})${c.reset}`\n : \"\";\n console.log(\n ` ${c.yellow}${group.padEnd(12)}${c.reset} ${c.bold}${String(count).padStart(4)}${c.reset}${suffix}`,\n );\n }\n }\n\n console.log(\"\");\n if (totalFindings === 0) {\n console.log(` ${c.green}all quiet. no supernatural traces found.${c.reset}`);\n console.log(\"\");\n }\n}\n", "import { scan } from \"./commands/scan\";\n\ndeclare const __PACKAGE_VERSION__: string;\n\nconst COMMANDS: Record<string, (args: string[]) => Promise<void>> = {\n scan,\n};\n\nfunction usage(): void {\n console.log(`supernaturalist \u2014 analyze supernatural language in agent responses\n\nUsage:\n supernaturalist <command> [options]\n\nCommands:\n scan Scan agent responses for supernatural terms\n\nOptions:\n --help, -h Show this help message\n --version Show version\n\nExamples:\n supernaturalist scan\n supernaturalist scan --agent claude\n supernaturalist scan --since 2025-01-01`);\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (command === \"--help\" || command === \"-h\") {\n usage();\n process.exit(0);\n }\n\n if (command === \"--version\") {\n console.log(__PACKAGE_VERSION__);\n process.exit(0);\n }\n\n const handler = command ? COMMANDS[command] : undefined;\n if (handler) {\n await handler(args.slice(1));\n } else {\n await scan(args);\n }\n}\n\nmain().catch((err: unknown) => {\n console.error(err);\n process.exit(1);\n});\n"],
|
|
5
|
+
"mappings": ";;;AAAA,SAAS,SAAS,gBAAgB;AAClC,SAAS,eAAe;AACxB,SAAS,YAAY;AAarB,SAAS,mBAA2B;AAClC,SAAO;AAAA,IACL,QAAQ,IAAI,eAAe,KAAK,KAAK,QAAQ,GAAG,UAAU,OAAO;AAAA,IACjE;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,aAAsB;AACpC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,SAAS,SAAmD;AACjE,YAAM,aAAa,iBAAiB;AAEpC,UAAI;AACJ,UAAI;AACF,gBAAQ,MAAM,QAAQ,UAAU;AAAA,MAClC,QAAQ;AACN;AAAA,MACF;AAEA,YAAM,YAAY,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC;AAEzD,iBAAW,QAAQ,WAAW;AAC5B,cAAM,WAAW,KAAK,YAAY,IAAI;AACtC,cAAM,WAAW,KAAK,QAAQ,SAAS,EAAE;AAEzC,YAAI;AACF,gBAAM,MAAM,MAAM,SAAS,UAAU,OAAO;AAC5C,gBAAM,SAAS,KAAK,MAAM,GAAG;AAE7B,cAAI,CAAC,OAAO,YAAY,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG;AAAC;AAAA,UAAS;AAEnE,qBAAW,OAAO,OAAO,UAAU;AACjC,gBAAI,IAAI,SAAS,aAAa;AAAC;AAAA,YAAS;AAExC,kBAAM,OAAO,YAAY,IAAI,OAAO;AACpC,gBAAI,CAAC,MAAM;AAAC;AAAA,YAAS;AAErB,kBAAM,YAAY,IAAI,aAAa,IAAI,aAAa;AACpD,gBAAI,SAAS,SAAS,WAAW;AAC/B,oBAAM,KAAK,IAAI,KAAK,SAAS;AAC7B,kBAAI,KAAK,QAAQ,OAAO;AAAC;AAAA,cAAS;AAAA,YACpC;AAEA,kBAAM;AAAA,cACJ;AAAA,cACA;AAAA,cACA,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,YAAY,SAAiC;AACpD,MAAI,OAAO,YAAY,UAAU;AAAC,WAAO;AAAA,EAAQ;AACjD,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,UAAM,QAAQ,QACX;AAAA,MACC,CAAC,MACC,OAAO,MAAM,YAAY,MAAM,QAAQ,OAAO,EAAE,SAAS;AAAA,IAC7D,EACC,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,WAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,IAAI;AAAA,EAC9C;AACA,SAAO;AACT;;;ACtFA,SAAS,wBAAwB;AACjC,SAAS,WAAAA,UAAS,YAAY;AAC9B,SAAS,uBAAuB;AAChC,SAAS,WAAAC,gBAAe;AACxB,SAAS,QAAAC,aAAY;AAarB,IAAM,aAAaA,MAAKD,SAAQ,GAAG,WAAW,UAAU;AAEjD,SAAS,gBAAyB;AACvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,SAAS,SAAmD;AACjE,YAAM,cAAc;AAEpB,UAAI;AACJ,UAAI;AACF,sBAAc,MAAMD,SAAQ,WAAW;AAAA,MACzC,QAAQ;AACN;AAAA,MACF;AAEA,iBAAW,cAAc,aAAa;AACpC,cAAM,cAAcE,MAAK,aAAa,UAAU;AAChD,cAAM,cAAc,MAAM,KAAK,WAAW;AAC1C,YAAI,CAAC,YAAY,YAAY,GAAG;AAAC;AAAA,QAAS;AAE1C,cAAM,UAAU,MAAMF,SAAQ,WAAW;AACzC,cAAM,aAAa,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC;AAE7D,mBAAW,QAAQ,YAAY;AAC7B,gBAAM,WAAWE,MAAK,aAAa,IAAI;AACvC,gBAAM,UAAU,KAAK,QAAQ,UAAU,EAAE;AAEzC,gBAAM,UAAU,SAAS,QACrB,EAAE,SAAS,SAAS,YAAY,OAAO,QAAQ,MAAM,IACrD,EAAE,SAAS,SAAS,WAAW;AACnC,iBAAO,iBAAiB,UAAU,OAAO;AAAA,QAC3C;AAEA,cAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,CAAC;AACtD,mBAAW,UAAU,SAAS;AAC5B,gBAAM,eAAeA,MAAK,aAAa,QAAQ,WAAW;AAC1D,cAAI;AACF,kBAAM,WAAW,MAAMF,SAAQ,YAAY;AAC3C,kBAAM,WAAW,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC;AAC5D,uBAAW,QAAQ,UAAU;AAC3B,oBAAM,UAAU,SAAS,QACrB;AAAA,gBACE,SAAS,GAAG,MAAM,IAAI,KAAK,QAAQ,UAAU,EAAE,CAAC;AAAA,gBAChD,SAAS;AAAA,gBACT,OAAO,QAAQ;AAAA,cACjB,IACA;AAAA,gBACE,SAAS,GAAG,MAAM,IAAI,KAAK,QAAQ,UAAU,EAAE,CAAC;AAAA,gBAChD,SAAS;AAAA,cACX;AACJ,qBAAO,iBAAiBE,MAAK,cAAc,IAAI,GAAG,OAAO;AAAA,YAC3D;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,gBAAgB,iBACd,UACA,SACyB;AACzB,QAAM,KAAK,gBAAgB;AAAA,IACzB,OAAO,iBAAiB,UAAU,EAAE,UAAU,QAAQ,CAAC;AAAA,IACvD,WAAW;AAAA,EACb,CAAC;AAED,mBAAiB,QAAQ,IAAI;AAC3B,QAAI,CAAC,KAAK,KAAK,GAAG;AAAC;AAAA,IAAS;AAE5B,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,YAAM,OAAO,qBAAqB,KAAK;AACvC,UAAI,CAAC,MAAM;AAAC;AAAA,MAAS;AAErB,YAAM,YAAY,iBAAiB,KAAK;AACxC,UAAI,QAAQ,SAAS,WAAW;AAC9B,cAAM,KAAK,IAAI,KAAK,SAAS;AAC7B,YAAI,KAAK,QAAQ,OAAO;AAAC;AAAA,QAAS;AAAA,MACpC;AAEA,YAAM,UAAmB,YACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,SAAS,QAAQ;AAAA,MACnB,IACA;AAAA,QACE;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,SAAS,QAAQ;AAAA,MACnB;AACJ,YAAM;AAAA,IACR,QAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,OAA+C;AAC3E,MAAI,MAAM,MAAM,MAAM,aAAa;AACjC,UAAM,UAAU,MAAM,SAAS;AAC/B,QAAI,CAAC,SAAS;AAAC,aAAO;AAAA,IAAK;AAC3B,WAAO,gBAAgB,QAAQ,SAAS,CAAC;AAAA,EAC3C;AAEA,MAAI,MAAM,MAAM,MAAM,aAAa;AACjC,WAAO,gBAAgB,MAAM,SAAS,CAAC;AAAA,EACzC;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,SAAiC;AACxD,MAAI,OAAO,YAAY,UAAU;AAAC,WAAO;AAAA,EAAQ;AACjD,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,UAAM,QAAQ,QACX;AAAA,MACC,CAAC,MACC,OAAO,MAAM,YAAY,MAAM,QAAQ,EAAE,SAAS;AAAA,IACtD,EACC,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,WAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,IAAI;AAAA,EAC9C;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAA+C;AACvE,MAAI,OAAO,MAAM,WAAW,MAAM,UAAU;AAAC,WAAO,MAAM,WAAW;AAAA,EAAE;AACvE,MAAI,OAAO,MAAM,WAAW,MAAM,UAAU;AAAC,WAAO,MAAM,WAAW;AAAA,EAAE;AACvE,SAAO;AACT;;;ACxJA,SAAS,WAAAC,UAAS,YAAAC,WAAU,QAAAC,aAAY;AACxC,SAAS,kBAAkB;AAC3B,SAAS,WAAAC,gBAAe;AACxB,SAAS,QAAAC,aAAY;AAqBrB,SAAS,mBAA6B;AACpC,QAAM,OAAiB,CAAC;AAExB,QAAM,cAAc,4BAA4B;AAChD,QAAM,eAAe,CAAC,0BAA0B,4BAA4B;AAE5E,aAAW,YAAY,aAAa;AAClC,eAAW,SAAS,cAAc;AAChC,YAAM,WAAWA,MAAK,UAAU,OAAO,OAAO;AAC9C,UAAI,WAAW,QAAQ,GAAG;AAAC,aAAK,KAAK,QAAQ;AAAA,MAAE;AAAA,IACjD;AAAA,EACF;AAEA,QAAM,kBAAkBA,MAAKD,SAAQ,GAAG,UAAU,QAAQ,OAAO;AACjE,MAAI,WAAW,eAAe,GAAG;AAAC,SAAK,KAAK,eAAe;AAAA,EAAE;AAE7D,SAAO;AACT;AAEA,SAAS,8BAAwC;AAC/C,QAAM,QAAkB,CAAC;AAEzB,MAAI,QAAQ,aAAa,UAAU;AACjC,UAAM;AAAA,MACJC,MAAKD,SAAQ,GAAG,WAAW,uBAAuB,QAAQ,QAAQ,eAAe;AAAA,MACjFC,MAAKD,SAAQ,GAAG,WAAW,uBAAuB,mBAAmB,QAAQ,eAAe;AAAA,MAC5FC,MAAKD,SAAQ,GAAG,WAAW,uBAAuB,UAAU,QAAQ,eAAe;AAAA,IACrF;AAAA,EACF,WAAW,QAAQ,aAAa,SAAS;AACvC,UAAM,aAAa,QAAQ,IAAI,iBAAiB,KAAKC,MAAKD,SAAQ,GAAG,SAAS;AAC9E,UAAM;AAAA,MACJC,MAAK,YAAY,QAAQ,QAAQ,eAAe;AAAA,MAChDA,MAAK,YAAY,mBAAmB,QAAQ,eAAe;AAAA,MAC3DA,MAAK,YAAY,UAAU,QAAQ,eAAe;AAAA,IACpD;AAAA,EACF,OAAO;AACL,UAAM,UAAU,QAAQ,IAAI,SAAS,KAAKA,MAAKD,SAAQ,GAAG,WAAW,SAAS;AAC9E,UAAM;AAAA,MACJC,MAAK,SAAS,QAAQ,QAAQ,eAAe;AAAA,MAC7CA,MAAK,SAAS,mBAAmB,QAAQ,eAAe;AAAA,MACxDA,MAAK,SAAS,UAAU,QAAQ,eAAe;AAAA,IACjD;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,eAAwB;AACtC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,SAAS,SAAmD;AACjE,YAAM,WAAW,iBAAiB;AAElC,iBAAW,YAAY,UAAU;AAC/B,YAAI;AACJ,YAAI;AACF,oBAAU,MAAMJ,SAAQ,QAAQ;AAAA,QAClC,QAAQ;AACN;AAAA,QACF;AAEA,mBAAW,UAAU,SAAS;AAC5B,gBAAM,UAAUI,MAAK,UAAU,MAAM;AACrC,gBAAM,WAAW,MAAMF,MAAK,OAAO,EAAE,MAAM,MAAM,IAAI;AACrD,cAAI,CAAC,UAAU,YAAY,GAAG;AAAC;AAAA,UAAS;AAExC,gBAAM,cAAcE,MAAK,SAAS,+BAA+B;AAEjE,cAAI;AACF,kBAAM,MAAM,MAAMH,UAAS,aAAa,OAAO;AAC/C,kBAAM,WAAW,KAAK,MAAM,GAAG;AAE/B,gBAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAAC;AAAA,YAAS;AAExC,uBAAW,OAAO,UAAU;AAC1B,kBAAI,IAAI,SAAS,aAAa;AAAC;AAAA,cAAS;AAExC,oBAAM,OAAOI,aAAY,IAAI,OAAO;AACpC,kBAAI,CAAC,MAAM;AAAC;AAAA,cAAS;AAErB,oBAAM,YAAY,IAAI,MAAM;AAC5B,kBAAI,SAAS,SAAS,WAAW;AAC/B,sBAAM,KAAK,IAAI,KAAK,SAAS;AAC7B,oBAAI,KAAK,QAAQ,OAAO;AAAC;AAAA,gBAAS;AAAA,cACpC;AAEA,oBAAM;AAAA,gBACJ;AAAA,gBACA,SAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAASA,aAAY,SAAiC;AACpD,MAAI,OAAO,YAAY,UAAU;AAAC,WAAO;AAAA,EAAQ;AACjD,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,UAAM,QAAQ,QACX;AAAA,MACC,CAAC,MACC,OAAO,MAAM,YACb,MAAM,QACN,EAAE,SAAS,UACX,OAAO,EAAE,SAAS;AAAA,IACtB,EACC,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,WAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,IAAI;AAAA,EAC9C;AACA,SAAO;AACT;;;AC3IA,SAAS,oBAAAC,yBAAwB;AACjC,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,WAAAC,gBAAe;AACxB,SAAS,QAAAC,aAAY;AAcrB,IAAM,qBAAqBA,MAAKD,SAAQ,GAAG,UAAU,UAAU;AAExD,SAAS,eAAwB;AACtC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,SAAS,SAAmD;AACjE,aAAO,kBAAkB,oBAAoB,OAAO;AAAA,IACtD;AAAA,EACF;AACF;AAEA,gBAAgB,kBACd,KACA,SACyB;AACzB,MAAI;AACJ,MAAI;AACF,cAAU,MAAMH,SAAQ,GAAG;AAAA,EAC7B,QAAQ;AACN;AAAA,EACF;AAEA,aAAW,SAAS,SAAS;AAC3B,UAAM,WAAWI,MAAK,KAAK,KAAK;AAChC,UAAM,YAAY,MAAMH,MAAK,QAAQ;AAErC,QAAI,UAAU,YAAY,GAAG;AAC3B,aAAO,kBAAkB,UAAU,OAAO;AAAA,IAC5C,WAAW,MAAM,SAAS,QAAQ,GAAG;AACnC,YAAM,UAAU,MAAM,QAAQ,UAAU,EAAE;AAC1C,YAAM,UAAU,SAAS,QAAQ,EAAE,SAAS,OAAO,QAAQ,MAAM,IAAI,EAAE,QAAQ;AAC/E,aAAO,gBAAgB,UAAU,OAAO;AAAA,IAC1C;AAAA,EACF;AACF;AAEA,gBAAgB,gBACd,UACA,SACyB;AACzB,QAAM,KAAKC,iBAAgB;AAAA,IACzB,OAAOH,kBAAiB,UAAU,EAAE,UAAU,QAAQ,CAAC;AAAA,IACvD,WAAW;AAAA,EACb,CAAC;AAED,mBAAiB,QAAQ,IAAI;AAC3B,QAAI,CAAC,KAAK,KAAK,GAAG;AAAC;AAAA,IAAS;AAE5B,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM,IAAI;AAE7B,UAAI,MAAM,SAAS,iBAAiB;AAAC;AAAA,MAAS;AAE9C,YAAM,UAAU,MAAM;AACtB,UAAI,CAAC,WAAW,QAAQ,SAAS,aAAa;AAAC;AAAA,MAAS;AAExD,YAAM,OAAOM,aAAY,QAAQ,OAAO;AACxC,UAAI,CAAC,MAAM;AAAC;AAAA,MAAS;AAErB,UAAI,QAAQ,SAAS,MAAM,WAAW;AACpC,cAAM,KAAK,IAAI,KAAK,MAAM,SAAS;AACnC,YAAI,KAAK,QAAQ,OAAO;AAAC;AAAA,QAAS;AAAA,MACpC;AAEA,YAAM,UAAmB,MAAM,YAC3B,EAAE,MAAM,WAAW,MAAM,WAAW,SAAS,QAAQ,QAAQ,IAC7D,EAAE,MAAM,SAAS,QAAQ,QAAQ;AACrC,YAAM;AAAA,IACR,QAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,SAASA,aAAY,SAAiC;AACpD,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAAC,WAAO;AAAA,EAAK;AAE1C,QAAM,QAAQ,QACX;AAAA,IACC,CAAC,MACC,OAAO,MAAM,YACb,MAAM,SACL,EAAE,SAAS,iBAAiB,EAAE,SAAS,WACxC,OAAO,EAAE,SAAS;AAAA,EACtB,EACC,IAAI,CAAC,MAAM,EAAE,IAAI;AAEpB,SAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,IAAI;AAC9C;;;AC1GA,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,WAAAC,gBAAe;AACxB,SAAS,QAAAC,aAAY;AAkBrB,SAAS,0BAAyC;AAChD,QAAM,UAAUA;AAAA,IACd,QAAQ,IAAI,eAAe,KAAKA,MAAKD,SAAQ,GAAG,UAAU,OAAO;AAAA,IACjE;AAAA,IACA;AAAA,EACF;AACA,MAAID,YAAW,OAAO,GAAG;AAAC,WAAO;AAAA,EAAQ;AAEzC,MAAI,QAAQ,aAAa,UAAU;AACjC,UAAM,UAAUE;AAAA,MACdD,SAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAID,YAAW,OAAO,GAAG;AAAC,aAAO;AAAA,IAAQ;AAAA,EAC3C;AAEA,SAAO;AACT;AAEO,SAAS,kBAA2B;AACzC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,SAAS,SAAmD;AACjE,YAAM,SAAS,wBAAwB;AACvC,UAAI,CAAC,QAAQ;AAAC;AAAA,MAAO;AAErB,UAAI;AACJ,UAAI;AACF,cAAM,gBAAgB,MAAM,OAAO,gBAAgB;AACnD,cAAM,OAAO,cAAc,WAAW;AACtC,aAAK,IAAK,KAE8B,QAAQ,EAAE,UAAU,KAAK,CAAC;AAAA,MACpE,QAAQ;AACN,gBAAQ;AAAA,UACN;AAAA,QACF;AACA;AAAA,MACF;AAEA,UAAI;AACF,eAAO,uBAAuB,IAAI,OAAO;AAAA,MAC3C,UAAE;AACA,WAAG,MAAM;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,UAAU,uBACR,IACA,SACoB;AACpB,MAAI,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWZ,MAAI,SAAS,OAAO;AAClB,UAAM,UAAU,QAAQ,MAAM,QAAQ;AACtC,aAAS,0BAA0B,OAAO;AAAA,EAC5C;AAEA,WAAS;AAET,QAAM,OAAO,GAAG,QAAQ,KAAK,EAAE,IAAI;AAMnC,aAAW,OAAO,MAAM;AACtB,QAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,GAAG;AAAC;AAAA,IAAS;AAE7C,UAAM;AAAA,MACJ,MAAM,IAAI;AAAA,MACV,WAAW,IAAI,KAAK,IAAI,YAAY,EAAE,YAAY;AAAA,MAClD,SAAS,IAAI;AAAA,IACf;AAAA,EACF;AACF;;;AC7GA,SAAS,oBAAAG,yBAAwB;AACjC,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,WAAAC,gBAAe;AACxB,SAAS,QAAAC,aAAY;AAcrB,IAAM,kBAAkBA,MAAKD,SAAQ,GAAG,OAAO,SAAS,UAAU;AAE3D,SAAS,YAAqB;AACnC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,SAAS,SAAmD;AACjE,aAAO,eAAe,iBAAiB,OAAO;AAAA,IAChD;AAAA,EACF;AACF;AAEA,gBAAgB,eACd,KACA,SACA,SACyB;AACzB,MAAI;AACJ,MAAI;AACF,cAAU,MAAMH,SAAQ,GAAG;AAAA,EAC7B,QAAQ;AACN;AAAA,EACF;AAEA,aAAW,SAAS,SAAS;AAC3B,UAAM,WAAWI,MAAK,KAAK,KAAK;AAChC,UAAM,YAAY,MAAMH,MAAK,QAAQ,EAAE,MAAM,MAAM,IAAI;AACvD,QAAI,CAAC,WAAW;AAAC;AAAA,IAAS;AAE1B,QAAI,UAAU,YAAY,GAAG;AAC3B,aAAO,eAAe,UAAU,SAAS,WAAW,KAAK;AAAA,IAC3D,WAAW,MAAM,SAAS,QAAQ,GAAG;AACnC,YAAM,UAAU,MAAM,QAAQ,UAAU,EAAE;AAC1C,YAAM,UAAU,SAAS,QACrB,EAAE,SAAS,SAAS,OAAO,QAAQ,MAAM,IACzC,EAAE,SAAS,QAAQ;AACvB,aAAO,aAAa,UAAU,OAAO;AAAA,IACvC;AAAA,EACF;AACF;AAEA,gBAAgB,aACd,UACA,SACyB;AACzB,QAAM,KAAKC,iBAAgB;AAAA,IACzB,OAAOH,kBAAiB,UAAU,EAAE,UAAU,QAAQ,CAAC;AAAA,IACvD,WAAW;AAAA,EACb,CAAC;AAED,MAAI,UAAU,QAAQ;AAEtB,mBAAiB,QAAQ,IAAI;AAC3B,QAAI,CAAC,KAAK,KAAK,GAAG;AAAC;AAAA,IAAS;AAE5B,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM,IAAI;AAE7B,UAAI,MAAM,SAAS,WAAW;AAC5B,kBAAU,MAAM,OAAO;AACvB;AAAA,MACF;AAEA,UAAI,MAAM,SAAS,WAAW;AAAC;AAAA,MAAS;AAExC,YAAM,UAAU,MAAM;AACtB,UAAI,CAAC,WAAW,QAAQ,SAAS,aAAa;AAAC;AAAA,MAAS;AAExD,YAAM,OAAOM,iBAAgB,QAAQ,OAAO;AAC5C,UAAI,CAAC,MAAM;AAAC;AAAA,MAAS;AAErB,YAAM,YACJ,OAAO,MAAM,cAAc,WACvB,MAAM,YACN,OAAO,QAAQ,cAAc,WAC3B,IAAI,KAAK,QAAQ,SAAS,EAAE,YAAY,IACxC;AAER,UAAI,QAAQ,SAAS,WAAW;AAC9B,cAAM,KAAK,IAAI,KAAK,SAAS;AAC7B,YAAI,KAAK,QAAQ,OAAO;AAAC;AAAA,QAAS;AAAA,MACpC;AAEA,YAAM,SAAkB,YACpB,UACE,EAAE,MAAM,WAAW,SAAS,QAAQ,SAAS,QAAQ,IACrD,EAAE,MAAM,WAAW,SAAS,QAAQ,QAAQ,IAC9C,UACE,EAAE,MAAM,SAAS,QAAQ,SAAS,QAAQ,IAC1C,EAAE,MAAM,SAAS,QAAQ,QAAQ;AACvC,YAAM;AAAA,IACR,QAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,SAASA,iBAAgB,SAAiC;AACxD,MAAI,OAAO,YAAY,UAAU;AAAC,WAAO;AAAA,EAAQ;AACjD,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,UAAM,QAAQ,QACX;AAAA,MACC,CAAC,MACC,OAAO,MAAM,YACb,MAAM,QACN,EAAE,SAAS,UACX,OAAO,EAAE,SAAS;AAAA,IACtB,EACC,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,WAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,IAAI;AAAA,EAC9C;AACA,SAAO;AACT;;;ACjIA,SAAS,WAAAC,UAAS,YAAAC,iBAAgB;AAClC,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,WAAAC,gBAAe;AACxB,SAAS,QAAAC,aAAY;AAoBrB,SAAS,cAAqD;AAC5D,MAAI,QAAQ,aAAa,UAAU;AACjC,UAAMC,QAAOD,MAAKD,SAAQ,GAAG,WAAW,uBAAuB,KAAK;AACpE,WAAO;AAAA,MACL,eAAeC,MAAKC,OAAM,eAAe;AAAA,MACzC,IAAID,MAAKC,OAAM,IAAI;AAAA,IACrB;AAAA,EACF;AACA,QAAM,OAAOD;AAAA,IACX,QAAQ,IAAI,eAAe,KAAKA,MAAKD,SAAQ,GAAG,UAAU,OAAO;AAAA,IACjE;AAAA,EACF;AACA,SAAO;AAAA,IACL,eAAeC,MAAK,MAAM,eAAe;AAAA,IACzC,IAAIA,MAAK,MAAM,IAAI;AAAA,EACrB;AACF;AAEO,SAAS,aAAsB;AACpC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,SAAS,SAAmD;AACjE,YAAM,QAAQ,YAAY;AAE1B,aAAO,iBAAiB,MAAM,eAAe,OAAO;AACpD,aAAO,kBAAkB,MAAM,IAAI,OAAO;AAAA,IAC5C;AAAA,EACF;AACF;AAEA,gBAAgB,iBACd,KACA,UACyB;AACzB,MAAI,CAACF,YAAW,GAAG,GAAG;AAAC;AAAA,EAAO;AAE9B,MAAI;AACJ,MAAI;AACF,YAAQ,MAAMF,SAAQ,GAAG;AAAA,EAC3B,QAAQ;AACN;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC;AAEzD,aAAW,QAAQ,WAAW;AAC5B,UAAM,WAAWI,MAAK,KAAK,IAAI;AAC/B,UAAM,UAAU,KAAK,QAAQ,SAAS,EAAE;AAExC,QAAI;AACF,YAAM,MAAM,MAAMH,UAAS,UAAU,OAAO;AAC5C,YAAM,eAAe,KAAK,MAAM,GAAG;AAEnC,UAAI,CAAC,aAAa,YAAY,CAAC,MAAM,QAAQ,aAAa,QAAQ,GAAG;AAAC;AAAA,MAAS;AAE/E,iBAAW,OAAO,aAAa,UAAU;AACvC,YAAI,IAAI,SAAS,aAAa;AAAC;AAAA,QAAS;AAExC,cAAM,OAAO,OAAO,IAAI,YAAY,WAAW,IAAI,UAAU;AAC7D,YAAI,CAAC,MAAM;AAAC;AAAA,QAAS;AAErB,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,gBAAgB,kBACd,OACA,UACyB;AACzB,MAAI,CAACC,YAAW,KAAK,GAAG;AAAC;AAAA,EAAO;AAEhC,MAAI;AACJ,MAAI;AACF,UAAM,UAAU,MAAMF,SAAQ,KAAK;AACnC,cAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC;AAAA,EACnD,QAAQ;AACN;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,GAAG;AAAC;AAAA,EAAO;AAElC,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,MAAM,OAAO,gBAAgB;AACzC,eAAW,IAAI,WAAW;AAAA,EAC5B,QAAQ;AACN;AAAA,EACF;AAEA,aAAW,UAAU,SAAS;AAC5B,UAAM,SAASI,MAAK,OAAO,MAAM;AACjC,QAAI;AAEJ,QAAI;AACF,WAAK,IAAK,SAE8B,QAAQ,EAAE,UAAU,KAAK,CAAC;AAAA,IACpE,QAAQ;AACN;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,GACZ,QAAQ,mDAAmD,EAC3D,IAAI;AACP,YAAM,aAAa,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI;AAE3C,YAAM,WAAW,WAAW;AAAA,QAC1B,CAAC,MAAM,MAAM,cAAc,MAAM,qBAAqB,EAAE,SAAS,SAAS;AAAA,MAC5E;AAEA,UAAI,CAAC,UAAU;AACb,WAAG,MAAM;AACT;AAAA,MACF;AAEA,YAAM,UAAU,GAAG,QAAQ,sBAAsB,QAAQ,IAAI,EAAE,IAAI;AAGnE,YAAM,WAAW,QAAQ,IAAI,CAACE,OAAMA,GAAE,IAAI;AAE1C,YAAM,UAAU,SAAS,SAAS,MAAM;AAExC,UAAI,CAAC,SAAS;AACZ,WAAG,MAAM;AACT;AAAA,MACF;AAEA,YAAM,aAAa,SAAS,SAAS,SAAS,IAC1C,YACA,SAAS,SAAS,MAAM,IACtB,SACA;AAEN,YAAM,QAAQ,WAAW,UAAU,mBAAmB,QAAQ;AAE9D,YAAM,OAAO,GAAG,QAAQ,KAAK,EAAE,IAAI;AACnC,iBAAW,OAAO,MAAM;AACtB,YAAI,CAAC,IAAI,MAAM,KAAK,GAAG;AAAC;AAAA,QAAS;AACjC,cAAM,EAAE,MAAM,IAAI,KAAK;AAAA,MACzB;AAAA,IACF,QAAQ;AAAA,IAER,UAAE;AACA,SAAG,MAAM;AAAA,IACX;AAAA,EACF;AACF;;;ACxJA,IAAM,WAA0C;AAAA,EAC9C,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,KAAK;AAAA,EACL,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,KAAK;AACP;AAEO,SAAS,cAAc,MAAuB;AACnD,QAAM,UAAU,SAAS,IAAI;AAC7B,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR,oBAAoB,IAAI,gBAAgB,OAAO,KAAK,QAAQ,EAAE,KAAK,IAAI,CAAC;AAAA,IAC1E;AAAA,EACF;AACA,SAAO,QAAQ;AACjB;AAEO,SAAS,cAAyB;AACvC,SAAO,OAAO,OAAO,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/C;;;ACrBA,IAAM,WAAsB;AAAA;AAAA,EAE1B,EAAE,MAAM,SAAS,WAAW,SAAS,OAAO,QAAQ;AAAA,EACpD,EAAE,MAAM,UAAU,WAAW,SAAS,OAAO,QAAQ;AAAA,EACrD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,QAAQ;AAAA,EACtD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,QAAQ;AAAA,EACtD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,QAAQ;AAAA,EACvD,EAAE,MAAM,eAAe,WAAW,UAAU,OAAO,QAAQ;AAAA;AAAA,EAG3D,EAAE,MAAM,SAAS,WAAW,WAAW,OAAO,QAAQ;AAAA,EACtD,EAAE,MAAM,WAAW,WAAW,WAAW,OAAO,QAAQ;AAAA,EACxD,EAAE,MAAM,YAAY,WAAW,WAAW,OAAO,QAAQ;AAAA,EACzD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,QAAQ;AAAA,EACvD,EAAE,MAAM,aAAa,WAAW,WAAW,OAAO,QAAQ;AAAA;AAAA,EAG1D,EAAE,MAAM,SAAS,WAAW,WAAW,OAAO,QAAQ;AAAA,EACtD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,QAAQ;AAAA,EACvD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,QAAQ;AAAA,EACvD,EAAE,MAAM,WAAW,WAAW,WAAW,OAAO,QAAQ;AAAA,EACxD,EAAE,MAAM,cAAc,WAAW,WAAW,OAAO,QAAQ;AAAA;AAAA,EAG3D,EAAE,MAAM,SAAS,WAAW,SAAS,OAAO,QAAQ;AAAA,EACpD,EAAE,MAAM,UAAU,WAAW,SAAS,OAAO,QAAQ;AAAA,EACrD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,QAAQ;AAAA;AAAA,EAGvD,EAAE,MAAM,UAAU,WAAW,SAAS,OAAO,SAAS;AAAA,EACtD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,SAAS;AAAA,EACvD,EAAE,MAAM,WAAW,WAAW,UAAU,OAAO,SAAS;AAAA;AAAA,EAGxD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,UAAU;AAAA,EACxD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA,EACzD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA;AAAA,EAGzD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,UAAU;AAAA,EACxD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA;AAAA,EAGzD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,SAAS;AAAA,EACxD,EAAE,MAAM,WAAW,WAAW,WAAW,OAAO,SAAS;AAAA,EACzD,EAAE,MAAM,cAAc,WAAW,WAAW,OAAO,SAAS;AAAA;AAAA,EAG5D,EAAE,MAAM,cAAc,WAAW,SAAS,OAAO,aAAa;AAAA,EAC9D,EAAE,MAAM,eAAe,WAAW,SAAS,OAAO,aAAa;AAAA,EAC/D,EAAE,MAAM,gBAAgB,WAAW,SAAS,OAAO,aAAa;AAAA;AAAA,EAGhE,EAAE,MAAM,eAAe,WAAW,WAAW,OAAO,cAAc;AAAA,EAClE,EAAE,MAAM,gBAAgB,WAAW,WAAW,OAAO,cAAc;AAAA;AAAA,EAGnE,EAAE,MAAM,SAAS,WAAW,WAAW,OAAO,QAAQ;AAAA,EACtD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,QAAQ;AAAA,EACvD,EAAE,MAAM,WAAW,WAAW,WAAW,OAAO,QAAQ;AAAA;AAAA,EAGxD,EAAE,MAAM,UAAU,WAAW,SAAS,OAAO,SAAS;AAAA,EACtD,EAAE,MAAM,QAAQ,WAAW,WAAW,OAAO,SAAS;AAAA,EACtD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,SAAS;AAAA,EACxD,EAAE,MAAM,YAAY,WAAW,WAAW,OAAO,SAAS;AAAA,EAC1D,EAAE,MAAM,aAAa,WAAW,WAAW,OAAO,SAAS;AAAA;AAAA,EAG3D,EAAE,MAAM,UAAU,WAAW,SAAS,OAAO,SAAS;AAAA,EACtD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,SAAS;AAAA,EACvD,EAAE,MAAM,aAAa,WAAW,SAAS,OAAO,SAAS;AAAA,EACzD,EAAE,MAAM,cAAc,WAAW,SAAS,OAAO,SAAS;AAAA;AAAA,EAG1D,EAAE,MAAM,WAAW,WAAW,WAAW,OAAO,UAAU;AAAA,EAC1D,EAAE,MAAM,YAAY,WAAW,WAAW,OAAO,UAAU;AAAA,EAC3D,EAAE,MAAM,YAAY,WAAW,WAAW,OAAO,UAAU;AAAA,EAC3D,EAAE,MAAM,aAAa,WAAW,WAAW,OAAO,UAAU;AAAA;AAAA,EAG5D,EAAE,MAAM,YAAY,WAAW,WAAW,OAAO,WAAW;AAAA,EAC5D,EAAE,MAAM,cAAc,WAAW,WAAW,OAAO,WAAW;AAAA,EAC9D,EAAE,MAAM,SAAS,WAAW,WAAW,OAAO,WAAW;AAAA,EACzD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,WAAW;AAAA,EAC1D,EAAE,MAAM,eAAe,WAAW,WAAW,OAAO,WAAW;AAAA,EAC/D,EAAE,MAAM,eAAe,WAAW,WAAW,OAAO,WAAW;AAAA;AAAA,EAG/D,EAAE,MAAM,SAAS,WAAW,SAAS,OAAO,QAAQ;AAAA,EACpD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,QAAQ;AAAA,EACtD,EAAE,MAAM,cAAc,WAAW,SAAS,OAAO,QAAQ;AAAA,EACzD,EAAE,MAAM,UAAU,WAAW,UAAU,OAAO,QAAQ;AAAA;AAAA,EAGtD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,UAAU;AAAA,EACxD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA;AAAA,EAGzD,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,UAAU;AAAA,EACxD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA,EACzD,EAAE,MAAM,aAAa,WAAW,SAAS,OAAO,UAAU;AAAA,EAC1D,EAAE,MAAM,aAAa,WAAW,SAAS,OAAO,UAAU;AAAA;AAAA,EAG1D,EAAE,MAAM,SAAS,WAAW,UAAU,OAAO,QAAQ;AAAA,EACrD,EAAE,MAAM,UAAU,WAAW,UAAU,OAAO,QAAQ;AAAA,EACtD,EAAE,MAAM,cAAc,WAAW,SAAS,OAAO,QAAQ;AAAA,EACzD,EAAE,MAAM,gBAAgB,WAAW,SAAS,OAAO,QAAQ;AAAA,EAC3D,EAAE,MAAM,aAAa,WAAW,SAAS,OAAO,QAAQ;AAAA,EACxD,EAAE,MAAM,gBAAgB,WAAW,SAAS,OAAO,QAAQ;AAAA;AAAA,EAG3D,EAAE,MAAM,OAAO,WAAW,WAAW,OAAO,MAAM;AAAA,EAClD,EAAE,MAAM,SAAS,WAAW,WAAW,OAAO,MAAM;AAAA,EACpD,EAAE,MAAM,SAAS,WAAW,WAAW,OAAO,MAAM;AAAA,EACpD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,MAAM;AAAA;AAAA,EAGrD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,WAAW;AAAA,EAC1D,EAAE,MAAM,aAAa,WAAW,SAAS,OAAO,WAAW;AAAA;AAAA,EAG3D,EAAE,MAAM,YAAY,WAAW,WAAW,OAAO,WAAW;AAAA,EAC5D,EAAE,MAAM,aAAa,WAAW,WAAW,OAAO,WAAW;AAAA;AAAA,EAG7D,EAAE,MAAM,gBAAgB,WAAW,WAAW,OAAO,QAAQ;AAAA,EAC7D,EAAE,MAAM,cAAc,WAAW,WAAW,OAAO,QAAQ;AAAA,EAC3D,EAAE,MAAM,gBAAgB,WAAW,WAAW,OAAO,QAAQ;AAAA;AAAA,EAG7D,EAAE,MAAM,aAAa,WAAW,WAAW,OAAO,aAAa;AAAA,EAC/D,EAAE,MAAM,cAAc,WAAW,WAAW,OAAO,aAAa;AAAA,EAChE,EAAE,MAAM,WAAW,WAAW,WAAW,OAAO,aAAa;AAAA,EAC7D,EAAE,MAAM,YAAY,WAAW,WAAW,OAAO,WAAW;AAAA,EAC5D,EAAE,MAAM,YAAY,WAAW,WAAW,OAAO,WAAW;AAAA,EAC5D,EAAE,MAAM,UAAU,WAAW,SAAS,OAAO,SAAS;AAAA,EACtD,EAAE,MAAM,aAAU,WAAW,SAAS,OAAO,SAAS;AAAA,EACtD,EAAE,MAAM,SAAS,WAAW,SAAS,OAAO,QAAQ;AAAA,EACpD,EAAE,MAAM,cAAc,WAAW,UAAU,OAAO,QAAQ;AAAA,EAC1D,EAAE,MAAM,WAAW,WAAW,SAAS,OAAO,UAAU;AAAA,EACxD,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA,EACzD,EAAE,MAAM,SAAS,WAAW,WAAW,OAAO,SAAS;AAAA,EACvD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,SAAS;AAAA,EACxD,EAAE,MAAM,SAAS,WAAW,WAAW,OAAO,QAAQ;AAAA,EACtD,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO,QAAQ;AAAA,EACvD,EAAE,MAAM,eAAe,WAAW,WAAW,OAAO,QAAQ;AAAA,EAC5D,EAAE,MAAM,eAAe,WAAW,SAAS,OAAO,UAAU;AAAA,EAC5D,EAAE,MAAM,UAAU,WAAW,UAAU,OAAO,SAAS;AAAA,EACvD,EAAE,MAAM,WAAW,WAAW,UAAU,OAAO,SAAS;AAAA,EACxD,EAAE,MAAM,aAAa,WAAW,UAAU,OAAO,SAAS;AAAA,EAC1D,EAAE,MAAM,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA,EACzD,EAAE,MAAM,aAAa,WAAW,SAAS,OAAO,UAAU;AAC5D;AAEA,SAAS,gBAAgB,MAAsB;AAC7C,SAAO,KAAK,QAAQ,WAAW,IAAI;AACrC;AAEA,SAAS,aAAa,OAA0B;AAC9C,QAAM,SAAS,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM;AACtE,QAAM,UAAU,OAAO,IAAI,CAAC,MAAM,aAAa,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG;AAChE,SAAO,IAAI,OAAO,OAAO,OAAO,QAAQ,IAAI;AAC9C;AAEA,SAAS,aAAa,MAAsB;AAC1C,SAAO,KAAK,QAAQ,uBAAuB,MAAM;AACnD;AAEA,IAAM,kBAAkB,aAAa,QAAQ;AAC7C,IAAM,WAAW,IAAI,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC;AAShE,SAAS,OAAO,MAA+B;AACpD,QAAM,UAAmB,CAAC;AAC1B,QAAM,OAAO,oBAAI,IAAY;AAE7B,aAAW,MAAM,KAAK,YAAY,GAAG,SAAS,IAAI;AAElD,QAAM,YAAY,gBAAgB,KAAK,YAAY,CAAC;AACpD,MAAI,cAAc,KAAK,YAAY,GAAG;AACpC,eAAW,MAAM,WAAW,SAAS,IAAI;AAAA,EAC3C;AAEA,SAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ;AAC1C;AAEA,SAAS,WACP,eACA,YACA,SACA,MACM;AACN,kBAAgB,YAAY;AAE5B,MAAI;AACJ,UAAQ,QAAQ,gBAAgB,KAAK,UAAU,OAAO,MAAM;AAC1D,QAAI,KAAK,IAAI,MAAM,KAAK,GAAG;AAAC;AAAA,IAAS;AAErC,UAAM,OAAO,MAAM,CAAC,EAAE,YAAY;AAClC,UAAM,QAAQ,SAAS,IAAI,IAAI;AAC/B,QAAI,CAAC,OAAO;AAAC;AAAA,IAAS;AAEtB,SAAK,IAAI,MAAM,KAAK;AACpB,YAAQ,KAAK;AAAA,MACX;AAAA,MACA,OAAO,MAAM;AAAA,MACb,WAAW,MAAM;AAAA,MACjB,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,EACH;AACF;;;ACjPA,IAAM,IAAI;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AACR;AAEA,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,gBAAgB;AACvB,MAAI,aAAa;AACjB,MAAI,WAAW;AACf,MAAI,QAA+C;AAEnD,SAAO;AAAA,IACL,QAAQ;AACN,mBAAa,KAAK,MAAM,KAAK,OAAO,IAAI,iBAAiB,MAAM;AAC/D,cAAQ,YAAY,MAAM;AACxB,oBAAY,WAAW,KAAK;AAC5B,cAAM,MAAM,iBAAiB,aAAa,iBAAiB,MAAM;AACjE,cAAM,OAAO,IAAI,OAAO,YAAY,CAAC;AACrC,gBAAQ,OAAO,MAAM,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,KAAK,KAAK;AAAA,MAC/D,GAAG,GAAG;AAAA,IACR;AAAA,IACA,SAAS;AACP;AAAA,IACF;AAAA,IACA,OAAO;AACL,UAAI,OAAO;AACT,sBAAc,KAAK;AACnB,gBAAQ;AAAA,MACV;AACA,cAAQ,OAAO,MAAM,OAAO,IAAI,OAAO,EAAE,IAAI,IAAI;AAAA,IACnD;AAAA,EACF;AACF;AAOA,SAAS,UAAU,MAA6B;AAC9C,QAAM,UAAuB,CAAC;AAE9B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,QAAQ,aAAa,QAAQ,MAAM;AACrC,cAAQ,QAAQ,KAAK,EAAE,CAAC;AAAA,IAC1B,WAAW,QAAQ,aAAa,QAAQ,MAAM;AAC5C,YAAM,MAAM,KAAK,EAAE,CAAC;AACpB,UAAI,KAAK;AACP,gBAAQ,QAAQ,IAAI,KAAK,GAAG;AAC5B,YAAI,MAAM,QAAQ,MAAM,QAAQ,CAAC,GAAG;AAClC,kBAAQ,MAAM,iBAAiB,GAAG,EAAE;AACpC,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF;AAAA,IACF,WAAW,QAAQ,YAAY,QAAQ,MAAM;AAC3C,cAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,sCAKoB;AAChC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAsB,KAAK,MAA+B;AACxD,QAAM,UAAU,UAAU,IAAI;AAE9B,QAAM,WAAW,QAAQ,QACrB,CAAC,cAAc,QAAQ,KAAK,CAAC,IAC7B,YAAY;AAEhB,QAAM,UAAU,cAAc;AAC9B,UAAQ,MAAM;AAEd,QAAM,aAAqC,CAAC;AAC5C,QAAM,eAAuD,CAAC;AAE9D,MAAI,gBAAgB;AACpB,MAAI,gBAAgB;AACpB,QAAM,WAAmE,CAAC;AAE1E,aAAW,WAAW,UAAU;AAC9B,QAAI,gBAAgB;AACpB,QAAI,gBAAgB;AACpB,YAAQ,OAAO;AAEf,UAAM,iBAAiB,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI;AAClE,qBAAiB,WAAW,QAAQ,SAAS,cAAc,GAAG;AAC5D;AACA;AAEA,YAAM,SAAS,OAAO,QAAQ,IAAI;AAClC,UAAI,OAAO,QAAQ,GAAG;AACpB,yBAAiB,OAAO;AACxB,yBAAiB,OAAO;AAExB,mBAAW,SAAS,OAAO,SAAS;AAClC,qBAAW,MAAM,KAAK,KAAK,WAAW,MAAM,KAAK,KAAK,KAAK;AAE3D,gBAAM,WAAY,aAAa,MAAM,KAAK,MAAM,CAAC;AACjD,mBAAS,MAAM,IAAI,KAAK,SAAS,MAAM,IAAI,KAAK,KAAK;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,gBAAgB,GAAG;AACrB,eAAS,QAAQ,IAAI,IAAI,EAAE,UAAU,eAAe,UAAU,cAAc;AAAA,IAC9E;AAAA,EACF;AAEA,UAAQ,KAAK;AAEb,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,KAAK,EAAE,IAAI,GAAG,EAAE,OAAO,kBAAkB,EAAE,KAAK,IAAI,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE;AACvF,UAAQ,IAAI,KAAK,EAAE,GAAG,GAAG,SAAI,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE;AACnD,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,KAAK,EAAE,GAAG,yBAAyB,EAAE,KAAK,KAAK,EAAE,IAAI,GAAG,aAAa,GAAG,EAAE,KAAK,EAAE;AAC7F,UAAQ;AAAA,IACN,KAAK,EAAE,GAAG,oBAAoB,EAAE,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,EAAE,KAAK;AAAA,EACvF;AAEA,QAAM,eAAe,OAAO,QAAQ,QAAQ;AAC5C,MAAI,aAAa,SAAS,GAAG;AAC3B,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,KAAK,EAAE,IAAI,WAAW,EAAE,KAAK,EAAE;AAC3C,eAAW,CAAC,MAAM,KAAK,KAAK,cAAc;AACxC,YAAM,QAAS,MAAM,WAAW,MAAM,WAAY,KAAK,QAAQ,CAAC;AAChE,cAAQ;AAAA,QACN,OAAO,EAAE,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,GAAG,OAAO,MAAM,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,MAAM,QAAQ,cAAc,IAAI,KAAK,EAAE,KAAK;AAAA,MAC/J;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAAgB,GAAG;AACrB,UAAM,SAAS,OAAO,QAAQ,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC;AACtE,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,KAAK,EAAE,IAAI,YAAY,EAAE,KAAK,EAAE;AAC5C,eAAW,CAAC,OAAO,KAAK,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG;AAChD,YAAM,WAAW,aAAa,KAAK,KAAK,CAAC;AACzC,YAAM,cAAc,OAAO,QAAQ,QAAQ,EACxC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,EAC5B,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,KAAK,EAC3B,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,EACjD,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,GAAG;AAC9B,YAAM,SAAS,cACX,IAAI,EAAE,GAAG,IAAI,EAAE,KAAK,GAAG,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,KACrD;AACJ,cAAQ;AAAA,QACN,OAAO,EAAE,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,GAAG,OAAO,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM;AAAA,MACvG;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,IAAI,EAAE;AACd,MAAI,kBAAkB,GAAG;AACvB,YAAQ,IAAI,KAAK,EAAE,KAAK,2CAA2C,EAAE,KAAK,EAAE;AAC5E,YAAQ,IAAI,EAAE;AAAA,EAChB;AACF;;;ACxLA,IAAM,WAA8D;AAAA,EAClE;AACF;AAEA,SAAS,QAAc;AACrB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAe4B;AAC1C;AAEA,eAAe,OAAsB;AACnC,QAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,QAAM,UAAU,KAAK,CAAC;AAEtB,MAAI,YAAY,YAAY,YAAY,MAAM;AAC5C,UAAM;AACN,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,YAAY,aAAa;AAC3B,YAAQ,IAAI,OAAmB;AAC/B,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAU,UAAU,SAAS,OAAO,IAAI;AAC9C,MAAI,SAAS;AACX,UAAM,QAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,EAC7B,OAAO;AACL,UAAM,KAAK,IAAI;AAAA,EACjB;AACF;AAEA,KAAK,EAAE,MAAM,CAAC,QAAiB;AAC7B,UAAQ,MAAM,GAAG;AACjB,UAAQ,KAAK,CAAC;AAChB,CAAC;",
|
|
6
6
|
"names": ["readdir", "homedir", "join", "readdir", "readFile", "stat", "homedir", "join", "extractText", "createReadStream", "readdir", "stat", "createInterface", "homedir", "join", "extractText", "existsSync", "homedir", "join", "createReadStream", "readdir", "stat", "createInterface", "homedir", "join", "contentToString", "readdir", "readFile", "existsSync", "homedir", "join", "base", "c"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/detector/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,KAAK,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/detector/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,KAAK,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAmLD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAYpD;AA4BD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,CAAC,EAAE,OAAO,EAAE,GACrB,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAoCnC;AAED,YAAY,EAAE,OAAO,IAAI,SAAS,EAAE,CAAC"}
|
|
@@ -118,8 +118,6 @@ const WORDLIST = [
|
|
|
118
118
|
{ word: "exorcist", intensity: "ominous", group: "exorcism" },
|
|
119
119
|
{ word: "seance", intensity: "vivid", group: "seance" },
|
|
120
120
|
{ word: "séance", intensity: "vivid", group: "seance" },
|
|
121
|
-
{ word: "medium", intensity: "subtle", group: "medium" },
|
|
122
|
-
{ word: "mediums", intensity: "subtle", group: "medium" },
|
|
123
121
|
{ word: "ouija", intensity: "vivid", group: "ouija" },
|
|
124
122
|
{ word: "hauntology", intensity: "subtle", group: "haunt" },
|
|
125
123
|
{ word: "banshee", intensity: "vivid", group: "banshee" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/detector/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/detector/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "supernaturalist",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Analyze supernatural language in your coding agent responses",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/unfrgivn/supernaturalist"
|
|
9
|
+
},
|
|
10
|
+
"bin": {
|
|
11
|
+
"supernaturalist": "dist/cli.js"
|
|
12
|
+
},
|
|
7
13
|
"exports": {
|
|
8
14
|
".": {
|
|
9
15
|
"types": "./dist/lib/index.d.ts",
|