@ai-devkit/agent-manager 0.26.2 → 0.26.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AgentManager.d.ts +5 -2
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +21 -4
- package/dist/AgentManager.js.map +1 -1
- package/dist/__tests__/AgentManager.test.js +147 -0
- package/dist/__tests__/AgentManager.test.js.map +1 -1
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +13 -4
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/CodexAdapter.test.js +13 -4
- package/dist/__tests__/adapters/CodexAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/CopilotAdapter.test.js +7 -2
- package/dist/__tests__/adapters/CopilotAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/GeminiCliAdapter.test.js +18 -5
- package/dist/__tests__/adapters/GeminiCliAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/GrokCliAdapter.test.js +7 -2
- package/dist/__tests__/adapters/GrokCliAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/OpenCodeAdapter.test.js +13 -4
- package/dist/__tests__/adapters/OpenCodeAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/PiAdapter.test.js +32 -4
- package/dist/__tests__/adapters/PiAdapter.test.js.map +1 -1
- package/dist/__tests__/utils/process.test.js +90 -2
- package/dist/__tests__/utils/process.test.js.map +1 -1
- package/dist/adapters/AgentAdapter.d.ts +9 -3
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/AgentAdapter.js.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts +5 -4
- package/dist/adapters/ClaudeCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.js +11 -7
- package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
- package/dist/adapters/CodexAdapter.d.ts +5 -4
- package/dist/adapters/CodexAdapter.d.ts.map +1 -1
- package/dist/adapters/CodexAdapter.js +11 -7
- package/dist/adapters/CodexAdapter.js.map +1 -1
- package/dist/adapters/CopilotAdapter.d.ts +5 -4
- package/dist/adapters/CopilotAdapter.d.ts.map +1 -1
- package/dist/adapters/CopilotAdapter.js +11 -7
- package/dist/adapters/CopilotAdapter.js.map +1 -1
- package/dist/adapters/GeminiCliAdapter.d.ts +6 -5
- package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
- package/dist/adapters/GeminiCliAdapter.js +12 -8
- package/dist/adapters/GeminiCliAdapter.js.map +1 -1
- package/dist/adapters/GrokCliAdapter.d.ts +3 -2
- package/dist/adapters/GrokCliAdapter.d.ts.map +1 -1
- package/dist/adapters/GrokCliAdapter.js +10 -6
- package/dist/adapters/GrokCliAdapter.js.map +1 -1
- package/dist/adapters/OpenCodeAdapter.d.ts +5 -4
- package/dist/adapters/OpenCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenCodeAdapter.js +11 -7
- package/dist/adapters/OpenCodeAdapter.js.map +1 -1
- package/dist/adapters/PiAdapter.d.ts +3 -2
- package/dist/adapters/PiAdapter.d.ts.map +1 -1
- package/dist/adapters/PiAdapter.js +12 -9
- package/dist/adapters/PiAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/process.d.ts +9 -1
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +155 -10
- package/dist/utils/process.js.map +1 -1
- package/package.json +1 -1
- package/src/AgentManager.ts +28 -4
- package/src/__tests__/AgentManager.test.ts +89 -0
- package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +16 -5
- package/src/__tests__/adapters/CodexAdapter.test.ts +16 -5
- package/src/__tests__/adapters/CopilotAdapter.test.ts +8 -1
- package/src/__tests__/adapters/GeminiCliAdapter.test.ts +20 -4
- package/src/__tests__/adapters/GrokCliAdapter.test.ts +8 -1
- package/src/__tests__/adapters/OpenCodeAdapter.test.ts +16 -5
- package/src/__tests__/adapters/PiAdapter.test.ts +28 -5
- package/src/__tests__/utils/process.test.ts +72 -1
- package/src/adapters/AgentAdapter.ts +11 -3
- package/src/adapters/ClaudeCodeAdapter.ts +10 -7
- package/src/adapters/CodexAdapter.ts +10 -7
- package/src/adapters/CopilotAdapter.ts +16 -7
- package/src/adapters/GeminiCliAdapter.ts +17 -8
- package/src/adapters/GrokCliAdapter.ts +9 -6
- package/src/adapters/OpenCodeAdapter.ts +10 -7
- package/src/adapters/PiAdapter.ts +10 -9
- package/src/adapters/index.ts +1 -1
- package/src/index.ts +2 -0
- package/src/utils/index.ts +1 -1
- package/src/utils/process.ts +160 -10
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
* 3. Falling back to shared process/session matching over Pi JSONL session files
|
|
8
8
|
* 4. Parsing Pi JSONL entries defensively for summary and conversation output
|
|
9
9
|
*/
|
|
10
|
-
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions } from './AgentAdapter.js';
|
|
10
|
+
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext } from './AgentAdapter.js';
|
|
11
11
|
import { AgentRegistry } from '../utils/AgentRegistry.js';
|
|
12
12
|
export declare class PiAdapter implements AgentAdapter {
|
|
13
13
|
readonly type: "pi";
|
|
14
|
+
readonly processNames: readonly ["pi", "node"];
|
|
14
15
|
private static readonly IDLE_THRESHOLD_MINUTES;
|
|
15
16
|
private piAgentDir;
|
|
16
17
|
private piSessionsDir;
|
|
@@ -18,7 +19,7 @@ export declare class PiAdapter implements AgentAdapter {
|
|
|
18
19
|
private registry;
|
|
19
20
|
constructor(registry?: AgentRegistry);
|
|
20
21
|
canHandle(processInfo: ProcessInfo): boolean;
|
|
21
|
-
detectAgents(): Promise<AgentInfo[]>;
|
|
22
|
+
detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
|
|
22
23
|
private mapTrackerMatches;
|
|
23
24
|
private mapFallbackMatches;
|
|
24
25
|
private listPiProcesses;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PiAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/PiAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,
|
|
1
|
+
{"version":3,"file":"PiAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/PiAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAyC1D,qBAAa,SAAU,YAAW,YAAY;IAC1C,QAAQ,CAAC,IAAI,EAAG,IAAI,CAAU;IAC9B,QAAQ,CAAC,YAAY,0BAA2B;IAEhD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAK;IAEnD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,QAAQ,GAAE,aAAuC;IAQ7D,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAItC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAmBzE,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,cAAc;IAQtB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAKhG,OAAO,CAAC,iBAAiB;IAMnB,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAazE,OAAO,CAAC,oBAAoB;CAiB/B"}
|
|
@@ -9,12 +9,16 @@
|
|
|
9
9
|
*/ import * as fs from 'fs';
|
|
10
10
|
import * as path from 'path';
|
|
11
11
|
import { AgentStatus } from './AgentAdapter.js';
|
|
12
|
-
import {
|
|
12
|
+
import { captureProcessSnapshot, executableBasename, filterByProcessNames } from '../utils/process.js';
|
|
13
13
|
import { isDirectory, safeReadFile, safeReaddir, safeStat } from '../utils/session.js';
|
|
14
14
|
import { matchProcessesToSessions, generateAgentName } from '../utils/matching.js';
|
|
15
15
|
import { AgentRegistry } from '../utils/AgentRegistry.js';
|
|
16
16
|
export class PiAdapter {
|
|
17
17
|
type = 'pi';
|
|
18
|
+
processNames = [
|
|
19
|
+
'pi',
|
|
20
|
+
'node'
|
|
21
|
+
];
|
|
18
22
|
static IDLE_THRESHOLD_MINUTES = 5;
|
|
19
23
|
piAgentDir;
|
|
20
24
|
piSessionsDir;
|
|
@@ -30,8 +34,10 @@ export class PiAdapter {
|
|
|
30
34
|
canHandle(processInfo) {
|
|
31
35
|
return this.isPiExecutable(processInfo.command);
|
|
32
36
|
}
|
|
33
|
-
async detectAgents() {
|
|
34
|
-
const
|
|
37
|
+
async detectAgents(context) {
|
|
38
|
+
const snapshot = context?.processes ?? await captureProcessSnapshot(this.processNames);
|
|
39
|
+
const relevant = filterByProcessNames(snapshot, this.processNames);
|
|
40
|
+
const processes = this.listPiProcesses(relevant);
|
|
35
41
|
if (processes.length === 0) return [];
|
|
36
42
|
const { cachedAgents, remaining } = this.tryRegistryCache(processes);
|
|
37
43
|
if (remaining.length === 0) return cachedAgents;
|
|
@@ -83,12 +89,9 @@ export class PiAdapter {
|
|
|
83
89
|
}
|
|
84
90
|
return agents;
|
|
85
91
|
}
|
|
86
|
-
listPiProcesses() {
|
|
92
|
+
listPiProcesses(snapshot) {
|
|
87
93
|
const byPid = new Map();
|
|
88
|
-
for (const proc of
|
|
89
|
-
if (this.canHandle(proc)) byPid.set(proc.pid, proc);
|
|
90
|
-
}
|
|
91
|
-
for (const proc of listAgentProcesses('node')){
|
|
94
|
+
for (const proc of snapshot){
|
|
92
95
|
if (this.canHandle(proc)) byPid.set(proc.pid, proc);
|
|
93
96
|
}
|
|
94
97
|
return Array.from(byPid.values());
|
|
@@ -407,7 +410,7 @@ export class PiAdapter {
|
|
|
407
410
|
}
|
|
408
411
|
isPiExecutable(command) {
|
|
409
412
|
for (const token of command.trim().split(/\s+/)){
|
|
410
|
-
const base =
|
|
413
|
+
const base = executableBasename(token);
|
|
411
414
|
if (base === 'pi' || base === 'pi.exe' || base === 'pi.js') return true;
|
|
412
415
|
}
|
|
413
416
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/PiAdapter.ts"],"sourcesContent":["/**\n * Pi Adapter\n *\n * Detects running Pi agents by:\n * 1. Finding running Pi processes\n * 2. Matching exact PID-to-session metadata from ~/.pi/agent/sessions.json\n * 3. Falling back to shared process/session matching over Pi JSONL session files\n * 4. Parsing Pi JSONL entries defensively for summary and conversation output\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type {\n AgentAdapter,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n} from './AgentAdapter.js';\nimport { AgentStatus } from './AgentAdapter.js';\nimport { listAgentProcesses, enrichProcesses } from '../utils/process.js';\nimport { isDirectory, safeReadFile, safeReaddir, safeStat } from '../utils/session.js';\nimport type { SessionFile } from '../utils/session.js';\nimport { matchProcessesToSessions, generateAgentName } from '../utils/matching.js';\nimport { AgentRegistry } from '../utils/AgentRegistry.js';\n\ninterface PiSession {\n sessionId: string;\n projectPath: string;\n summary: string;\n sessionStart: Date;\n lastActive: Date;\n lastRole?: ConversationMessage['role'];\n}\n\ninterface PiLine {\n timestamp?: string;\n role?: string;\n type?: string;\n content?: unknown;\n text?: unknown;\n message?: unknown;\n sessionId?: string;\n session_id?: string;\n id?: string;\n cwd?: string;\n projectPath?: string;\n project_path?: string;\n payload?: Record<string, unknown>;\n data?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\ntype PiRecord = Record<string, unknown>;\n\ninterface TrackerMatch {\n process: ProcessInfo;\n filePath: string;\n}\n\ninterface TrackerAgentResult {\n agents: AgentInfo[];\n fallback: ProcessInfo[];\n}\n\nexport class PiAdapter implements AgentAdapter {\n readonly type = 'pi' as const;\n\n private static readonly IDLE_THRESHOLD_MINUTES = 5;\n\n private piAgentDir: string;\n private piSessionsDir: string;\n private trackerPath: string;\n private registry: AgentRegistry;\n\n constructor(registry: AgentRegistry = AgentRegistry.default()) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || '';\n this.piAgentDir = path.join(homeDir, '.pi', 'agent');\n this.piSessionsDir = path.join(this.piAgentDir, 'sessions');\n this.trackerPath = path.join(this.piAgentDir, 'sessions.json');\n this.registry = registry;\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return this.isPiExecutable(processInfo.command);\n }\n\n async detectAgents(): Promise<AgentInfo[]> {\n const processes = enrichProcesses(this.listPiProcesses());\n if (processes.length === 0) return [];\n\n const { cachedAgents, remaining } = this.tryRegistryCache(processes);\n if (remaining.length === 0) return cachedAgents;\n\n const trackerResult = this.mapTrackerMatches(remaining);\n const fallbackAgents = this.mapFallbackMatches(trackerResult.fallback);\n\n return [\n ...cachedAgents,\n ...trackerResult.agents,\n ...fallbackAgents,\n ];\n }\n\n private mapTrackerMatches(processes: ProcessInfo[]): TrackerAgentResult {\n const { matches: trackerMatches, fallback } = this.matchFromTracker(processes);\n const agents: AgentInfo[] = [];\n\n for (const match of trackerMatches) {\n const session = this.parseSession(match.filePath, match.process.cwd);\n if (session) {\n agents.push(this.mapSessionToAgent(session, match.process, match.filePath));\n } else {\n fallback.push(match.process);\n }\n }\n\n return { agents, fallback };\n }\n\n private mapFallbackMatches(processes: ProcessInfo[]): AgentInfo[] {\n if (processes.length === 0) return [];\n\n const sessions = this.discoverSessions(processes);\n if (sessions.length === 0) {\n return processes.map((p) => this.mapProcessOnlyAgent(p));\n }\n\n const matches = matchProcessesToSessions(processes, sessions);\n const matchedPids = new Set(matches.map((m) => m.process.pid));\n const agents: AgentInfo[] = [];\n\n for (const match of matches) {\n const session = this.parseSession(match.session.filePath, match.process.cwd);\n if (session) {\n agents.push(this.mapSessionToAgent(session, match.process, match.session.filePath));\n } else {\n matchedPids.delete(match.process.pid);\n }\n }\n\n for (const proc of processes) {\n if (!matchedPids.has(proc.pid)) {\n agents.push(this.mapProcessOnlyAgent(proc));\n }\n }\n\n return agents;\n }\n\n private listPiProcesses(): ProcessInfo[] {\n const byPid = new Map<number, ProcessInfo>();\n for (const proc of listAgentProcesses('pi')) {\n if (this.canHandle(proc)) byPid.set(proc.pid, proc);\n }\n for (const proc of listAgentProcesses('node')) {\n if (this.canHandle(proc)) byPid.set(proc.pid, proc);\n }\n return Array.from(byPid.values());\n }\n\n private tryRegistryCache(processes: ProcessInfo[]): {\n cachedAgents: AgentInfo[];\n remaining: ProcessInfo[];\n } {\n const cachedAgents: AgentInfo[] = [];\n const remaining: ProcessInfo[] = [];\n const byPid = new Map(this.registry.list().map((e) => [e.pid, e]));\n\n for (const proc of processes) {\n const entry = byPid.get(proc.pid);\n if (\n !entry ||\n entry.type !== this.type ||\n !entry.sessionFilePath ||\n !fs.existsSync(entry.sessionFilePath)\n ) {\n remaining.push(proc);\n continue;\n }\n\n const session = this.parseSession(entry.sessionFilePath, proc.cwd);\n if (!session) {\n remaining.push(proc);\n continue;\n }\n\n cachedAgents.push(this.mapSessionToAgent(session, proc, entry.sessionFilePath));\n }\n\n return { cachedAgents, remaining };\n }\n\n private matchFromTracker(processes: ProcessInfo[]): {\n matches: TrackerMatch[];\n fallback: ProcessInfo[];\n } {\n const tracker = this.readTracker();\n if (tracker.size === 0) return { matches: [], fallback: processes };\n\n const matches: TrackerMatch[] = [];\n const fallback: ProcessInfo[] = [];\n\n for (const proc of processes) {\n const filePath = tracker.get(proc.pid);\n if (!filePath || !this.isTrustedSessionPath(filePath) || !fs.existsSync(filePath)) {\n fallback.push(proc);\n continue;\n }\n matches.push({ process: proc, filePath });\n }\n\n return { matches, fallback };\n }\n\n private readTracker(): Map<number, string> {\n const content = safeReadFile(this.trackerPath);\n if (content === undefined) return new Map();\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(content);\n } catch {\n return new Map();\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return new Map();\n\n const map = new Map<number, string>();\n for (const [key, value] of Object.entries(parsed)) {\n const keyPid = this.toPid(key);\n if (keyPid !== null && typeof value === 'string' && value) {\n map.set(keyPid, value);\n }\n }\n return map;\n }\n\n private toPid(value: unknown): number | null {\n if (typeof value === 'number' && Number.isInteger(value) && value > 0) return value;\n if (typeof value !== 'string' || !/^\\d+$/.test(value)) return null;\n const parsed = Number(value);\n return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;\n }\n\n private isTrustedSessionPath(filePath: string): boolean {\n const resolvedRoot = path.resolve(this.piSessionsDir);\n const resolvedPath = path.resolve(filePath);\n return resolvedPath === resolvedRoot || resolvedPath.startsWith(`${resolvedRoot}${path.sep}`);\n }\n\n private discoverSessions(processes: ProcessInfo[] = []): SessionFile[] {\n if (!isDirectory(this.piSessionsDir)) return [];\n\n const cwdByProjectDir = this.buildProjectDirCwdMap(processes);\n const sessions: SessionFile[] = [];\n for (const filePath of this.collectJsonlFiles(this.piSessionsDir)) {\n const stat = safeStat(filePath);\n if (!stat) continue;\n\n const session = this.parseSession(filePath);\n const sessionId = session?.sessionId || this.sessionIdFromFile(filePath);\n const projectDir = path.dirname(filePath);\n sessions.push({\n sessionId,\n filePath,\n projectDir,\n birthtimeMs: stat.birthtimeMs || stat.mtimeMs,\n resolvedCwd: session?.projectPath || cwdByProjectDir.get(path.basename(projectDir)) || '',\n });\n }\n\n return sessions;\n }\n\n private buildProjectDirCwdMap(processes: ProcessInfo[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const proc of processes) {\n if (!proc.cwd) continue;\n map.set(this.encodeProjectDir(proc.cwd), proc.cwd);\n }\n return map;\n }\n\n private collectJsonlFiles(dir: string): string[] {\n const files: string[] = [];\n for (const entry of safeReaddir(dir)) {\n const fullPath = path.join(dir, entry);\n const stat = safeStat(fullPath);\n if (!stat) continue;\n if (stat.isDirectory()) {\n files.push(...this.collectJsonlFiles(fullPath));\n } else if (stat.isFile() && entry.endsWith('.jsonl')) {\n files.push(fullPath);\n }\n }\n return files;\n }\n\n private parseSession(filePath: string, fallbackCwd = ''): PiSession | null {\n const entries = this.readJsonl(filePath);\n if (entries.length === 0) return null;\n return this.sessionFromEntries(entries, filePath, fallbackCwd);\n }\n\n private sessionFromEntries(entries: PiLine[], filePath: string, fallbackCwd = ''): PiSession {\n const stat = safeStat(filePath);\n const timestamps = entries\n .map((entry) => this.parseTimestamp(this.entryTimestamp(entry)))\n .filter((value): value is Date => value !== null);\n\n const sessionStart = timestamps[0] ?? stat?.birthtime ?? stat?.mtime ?? new Date();\n const lastActive = timestamps[timestamps.length - 1] ?? stat?.mtime ?? sessionStart;\n const messages = this.entriesToMessages(entries, true);\n const lastUser = [...messages].reverse().find((msg) => msg.role === 'user');\n const lastMessage = messages[messages.length - 1];\n\n return {\n sessionId: this.sessionIdFromEntries(entries) || this.sessionIdFromFile(filePath),\n projectPath: this.cwdFromEntries(entries) || fallbackCwd,\n summary: lastUser?.content ? this.truncate(lastUser.content, 120) : 'Pi session active',\n sessionStart,\n lastActive,\n lastRole: lastMessage?.role,\n };\n }\n\n private readJsonl(filePath: string): PiLine[] {\n const content = safeReadFile(filePath);\n if (content === undefined) return [];\n\n const entries: PiLine[] = [];\n for (const line of content.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n entries.push(parsed as PiLine);\n }\n } catch {\n continue;\n }\n }\n return entries;\n }\n\n private entryToMessage(entry: PiLine, includeSystem: boolean): ConversationMessage | null {\n const role = this.entryRole(entry);\n if (!role) return null;\n if (role === 'system' && !includeSystem) return null;\n\n const content = this.entryContent(entry).trim();\n if (!content) return null;\n\n return {\n role,\n content,\n timestamp: this.entryTimestamp(entry),\n };\n }\n\n private entryRole(entry: PiLine): ConversationMessage['role'] | null {\n const message = this.messageRecord(entry);\n const raw = this.firstString(\n entry.role,\n message?.role,\n this.roleLikeType(entry.type),\n entry.payload?.role,\n entry.payload?.type,\n entry.data?.role,\n entry.data?.type,\n );\n if (!raw) return null;\n const normalized = raw.toLowerCase();\n if (normalized === 'user' || normalized === 'human') return 'user';\n if (normalized === 'assistant' || normalized === 'ai' || normalized === 'pi') return 'assistant';\n if (normalized === 'system') return 'system';\n return null;\n }\n\n private entryContent(entry: PiLine): string {\n const message = this.messageRecord(entry);\n const candidates = [\n entry.content,\n entry.text,\n message?.content,\n message?.text,\n message?.message,\n entry.message,\n entry.payload?.content,\n entry.payload?.text,\n entry.payload?.message,\n entry.data?.content,\n entry.data?.text,\n entry.data?.message,\n ];\n\n for (const candidate of candidates) {\n const text = this.contentToString(candidate);\n if (text) return text;\n }\n return '';\n }\n\n private contentToString(value: unknown): string {\n if (typeof value === 'string') return value;\n if (Array.isArray(value)) {\n return value.map((item) => this.contentToString(item)).filter(Boolean).join('');\n }\n if (!value || typeof value !== 'object') return '';\n\n const record = value as Record<string, unknown>;\n return this.contentToString(record.content ?? record.text ?? record.value);\n }\n\n private asRecord(value: unknown): PiRecord | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n return value as PiRecord;\n }\n\n private messageRecord(entry: PiLine): PiRecord | null {\n return this.asRecord(entry.message);\n }\n\n private roleLikeType(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const normalized = value.toLowerCase();\n if (['user', 'human', 'assistant', 'ai', 'pi', 'system'].includes(normalized)) {\n return value;\n }\n return undefined;\n }\n\n private entryTimestamp(entry: PiLine): string | undefined {\n return this.firstString(\n entry.timestamp,\n entry.payload?.timestamp,\n entry.data?.timestamp,\n entry.createdAt,\n entry.created_at,\n );\n }\n\n private sessionIdFromEntries(entries: PiLine[]): string | null {\n for (const entry of entries) {\n const sessionId = this.firstString(\n entry.sessionId,\n entry.session_id,\n entry.id,\n entry.payload?.sessionId,\n entry.payload?.session_id,\n entry.payload?.id,\n entry.data?.sessionId,\n entry.data?.session_id,\n entry.data?.id,\n );\n if (sessionId) return sessionId;\n }\n return null;\n }\n\n private cwdFromEntries(entries: PiLine[]): string {\n for (const entry of entries) {\n const cwd = this.firstString(\n entry.cwd,\n entry.projectPath,\n entry.project_path,\n entry.payload?.cwd,\n entry.payload?.projectPath,\n entry.payload?.project_path,\n entry.data?.cwd,\n entry.data?.projectPath,\n entry.data?.project_path,\n );\n if (cwd) return cwd;\n }\n return '';\n }\n\n private sessionIdFromFile(filePath: string): string {\n const base = path.basename(filePath, '.jsonl');\n const underscore = base.lastIndexOf('_');\n return underscore >= 0 ? base.slice(underscore + 1) : base;\n }\n\n private encodeProjectDir(cwd: string): string {\n const normalized = path.resolve(cwd);\n return `--${normalized.replace(/^\\//, '').replace(/\\//g, '-')}--`;\n }\n\n private firstString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === 'string' && value) return value;\n }\n return undefined;\n }\n\n private parseTimestamp(value?: string): Date | null {\n if (!value) return null;\n const timestamp = new Date(value);\n return Number.isNaN(timestamp.getTime()) ? null : timestamp;\n }\n\n private mapSessionToAgent(session: PiSession, processInfo: ProcessInfo, filePath: string): AgentInfo {\n const projectPath = session.projectPath || processInfo.cwd || '';\n return {\n name: generateAgentName(projectPath, processInfo.pid),\n type: this.type,\n status: this.determineStatus(session),\n summary: session.summary || 'Pi session active',\n pid: processInfo.pid,\n projectPath,\n sessionId: session.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: filePath,\n };\n }\n\n private mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return {\n name: generateAgentName(processInfo.cwd || '', processInfo.pid),\n type: this.type,\n status: AgentStatus.RUNNING,\n summary: 'Pi process running',\n pid: processInfo.pid,\n projectPath: processInfo.cwd || '',\n sessionId: `pid-${processInfo.pid}`,\n lastActive: new Date(),\n };\n }\n\n private determineStatus(session: PiSession): AgentStatus {\n const diffMs = Date.now() - session.lastActive.getTime();\n const diffMinutes = diffMs / 60000;\n\n if (diffMinutes > PiAdapter.IDLE_THRESHOLD_MINUTES) return AgentStatus.IDLE;\n if (session.lastRole === 'assistant') return AgentStatus.WAITING;\n return AgentStatus.RUNNING;\n }\n\n private truncate(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return `${value.slice(0, maxLength - 3)}...`;\n }\n\n private isPiExecutable(command: string): boolean {\n for (const token of command.trim().split(/\\s+/)) {\n const base = path.basename(token).toLowerCase();\n if (base === 'pi' || base === 'pi.exe' || base === 'pi.js') return true;\n }\n return false;\n }\n\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n const includeSystem = options?.verbose ?? false;\n return this.entriesToMessages(this.readJsonl(sessionFilePath), includeSystem);\n }\n\n private entriesToMessages(entries: PiLine[], includeSystem: boolean): ConversationMessage[] {\n return entries\n .map((entry) => this.entryToMessage(entry, includeSystem))\n .filter((msg): msg is ConversationMessage => msg !== null);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n if (!isDirectory(this.piSessionsDir)) return [];\n\n const summaries: SessionSummary[] = [];\n for (const filePath of this.collectJsonlFiles(this.piSessionsDir)) {\n const summary = this.fileToSessionSummary(filePath);\n if (!summary) continue;\n if (opts?.cwd !== undefined && summary.cwd !== opts.cwd) continue;\n summaries.push(summary);\n }\n return summaries;\n }\n\n private fileToSessionSummary(filePath: string): SessionSummary | null {\n const entries = this.readJsonl(filePath);\n if (entries.length === 0) return null;\n\n const session = this.sessionFromEntries(entries, filePath);\n const firstUserMessage = this.entriesToMessages(entries, false)\n .find((msg) => msg.role === 'user')?.content ?? '';\n return {\n type: this.type,\n sessionId: session.sessionId,\n cwd: session.projectPath,\n firstUserMessage,\n lastActive: session.lastActive,\n startedAt: session.sessionStart,\n sessionFilePath: filePath,\n };\n }\n}\n"],"names":["fs","path","AgentStatus","listAgentProcesses","enrichProcesses","isDirectory","safeReadFile","safeReaddir","safeStat","matchProcessesToSessions","generateAgentName","AgentRegistry","PiAdapter","type","IDLE_THRESHOLD_MINUTES","piAgentDir","piSessionsDir","trackerPath","registry","default","homeDir","process","env","HOME","USERPROFILE","join","canHandle","processInfo","isPiExecutable","command","detectAgents","processes","listPiProcesses","length","cachedAgents","remaining","tryRegistryCache","trackerResult","mapTrackerMatches","fallbackAgents","mapFallbackMatches","fallback","agents","matches","trackerMatches","matchFromTracker","match","session","parseSession","filePath","cwd","push","mapSessionToAgent","sessions","discoverSessions","map","p","mapProcessOnlyAgent","matchedPids","Set","m","pid","delete","proc","has","byPid","Map","set","Array","from","values","list","e","entry","get","sessionFilePath","existsSync","tracker","readTracker","size","isTrustedSessionPath","content","undefined","parsed","JSON","parse","isArray","key","value","Object","entries","keyPid","toPid","Number","isInteger","test","isSafeInteger","resolvedRoot","resolve","resolvedPath","startsWith","sep","cwdByProjectDir","buildProjectDirCwdMap","collectJsonlFiles","stat","sessionId","sessionIdFromFile","projectDir","dirname","birthtimeMs","mtimeMs","resolvedCwd","projectPath","basename","encodeProjectDir","dir","files","fullPath","isFile","endsWith","fallbackCwd","readJsonl","sessionFromEntries","timestamps","parseTimestamp","entryTimestamp","filter","sessionStart","birthtime","mtime","Date","lastActive","messages","entriesToMessages","lastUser","reverse","find","msg","role","lastMessage","sessionIdFromEntries","cwdFromEntries","summary","truncate","lastRole","line","split","trimmed","trim","entryToMessage","includeSystem","entryRole","entryContent","timestamp","message","messageRecord","raw","firstString","roleLikeType","payload","data","normalized","toLowerCase","candidates","text","candidate","contentToString","item","Boolean","record","asRecord","includes","createdAt","created_at","session_id","id","project_path","base","underscore","lastIndexOf","slice","replace","isNaN","getTime","name","status","determineStatus","RUNNING","diffMs","now","diffMinutes","IDLE","WAITING","maxLength","token","getConversation","options","verbose","listSessions","opts","summaries","fileToSessionSummary","firstUserMessage","startedAt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/PiAdapter.ts"],"sourcesContent":["/**\n * Pi Adapter\n *\n * Detects running Pi agents by:\n * 1. Finding running Pi processes\n * 2. Matching exact PID-to-session metadata from ~/.pi/agent/sessions.json\n * 3. Falling back to shared process/session matching over Pi JSONL session files\n * 4. Parsing Pi JSONL entries defensively for summary and conversation output\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type {\n AgentAdapter,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from './AgentAdapter.js';\nimport { AgentStatus } from './AgentAdapter.js';\nimport { captureProcessSnapshot, executableBasename, filterByProcessNames } from '../utils/process.js';\nimport { isDirectory, safeReadFile, safeReaddir, safeStat } from '../utils/session.js';\nimport type { SessionFile } from '../utils/session.js';\nimport { matchProcessesToSessions, generateAgentName } from '../utils/matching.js';\nimport { AgentRegistry } from '../utils/AgentRegistry.js';\n\ninterface PiSession {\n sessionId: string;\n projectPath: string;\n summary: string;\n sessionStart: Date;\n lastActive: Date;\n lastRole?: ConversationMessage['role'];\n}\n\ninterface PiLine {\n timestamp?: string;\n role?: string;\n type?: string;\n content?: unknown;\n text?: unknown;\n message?: unknown;\n sessionId?: string;\n session_id?: string;\n id?: string;\n cwd?: string;\n projectPath?: string;\n project_path?: string;\n payload?: Record<string, unknown>;\n data?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\ntype PiRecord = Record<string, unknown>;\n\ninterface TrackerMatch {\n process: ProcessInfo;\n filePath: string;\n}\n\ninterface TrackerAgentResult {\n agents: AgentInfo[];\n fallback: ProcessInfo[];\n}\n\nexport class PiAdapter implements AgentAdapter {\n readonly type = 'pi' as const;\n readonly processNames = ['pi', 'node'] as const;\n\n private static readonly IDLE_THRESHOLD_MINUTES = 5;\n\n private piAgentDir: string;\n private piSessionsDir: string;\n private trackerPath: string;\n private registry: AgentRegistry;\n\n constructor(registry: AgentRegistry = AgentRegistry.default()) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || '';\n this.piAgentDir = path.join(homeDir, '.pi', 'agent');\n this.piSessionsDir = path.join(this.piAgentDir, 'sessions');\n this.trackerPath = path.join(this.piAgentDir, 'sessions.json');\n this.registry = registry;\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return this.isPiExecutable(processInfo.command);\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const snapshot = context?.processes ?? await captureProcessSnapshot(this.processNames);\n const relevant = filterByProcessNames(snapshot, this.processNames);\n const processes = this.listPiProcesses(relevant);\n if (processes.length === 0) return [];\n\n const { cachedAgents, remaining } = this.tryRegistryCache(processes);\n if (remaining.length === 0) return cachedAgents;\n\n const trackerResult = this.mapTrackerMatches(remaining);\n const fallbackAgents = this.mapFallbackMatches(trackerResult.fallback);\n\n return [\n ...cachedAgents,\n ...trackerResult.agents,\n ...fallbackAgents,\n ];\n }\n\n private mapTrackerMatches(processes: ProcessInfo[]): TrackerAgentResult {\n const { matches: trackerMatches, fallback } = this.matchFromTracker(processes);\n const agents: AgentInfo[] = [];\n\n for (const match of trackerMatches) {\n const session = this.parseSession(match.filePath, match.process.cwd);\n if (session) {\n agents.push(this.mapSessionToAgent(session, match.process, match.filePath));\n } else {\n fallback.push(match.process);\n }\n }\n\n return { agents, fallback };\n }\n\n private mapFallbackMatches(processes: ProcessInfo[]): AgentInfo[] {\n if (processes.length === 0) return [];\n\n const sessions = this.discoverSessions(processes);\n if (sessions.length === 0) {\n return processes.map((p) => this.mapProcessOnlyAgent(p));\n }\n\n const matches = matchProcessesToSessions(processes, sessions);\n const matchedPids = new Set(matches.map((m) => m.process.pid));\n const agents: AgentInfo[] = [];\n\n for (const match of matches) {\n const session = this.parseSession(match.session.filePath, match.process.cwd);\n if (session) {\n agents.push(this.mapSessionToAgent(session, match.process, match.session.filePath));\n } else {\n matchedPids.delete(match.process.pid);\n }\n }\n\n for (const proc of processes) {\n if (!matchedPids.has(proc.pid)) {\n agents.push(this.mapProcessOnlyAgent(proc));\n }\n }\n\n return agents;\n }\n\n private listPiProcesses(snapshot: readonly ProcessInfo[]): ProcessInfo[] {\n const byPid = new Map<number, ProcessInfo>();\n for (const proc of snapshot) {\n if (this.canHandle(proc)) byPid.set(proc.pid, proc);\n }\n return Array.from(byPid.values());\n }\n\n private tryRegistryCache(processes: ProcessInfo[]): {\n cachedAgents: AgentInfo[];\n remaining: ProcessInfo[];\n } {\n const cachedAgents: AgentInfo[] = [];\n const remaining: ProcessInfo[] = [];\n const byPid = new Map(this.registry.list().map((e) => [e.pid, e]));\n\n for (const proc of processes) {\n const entry = byPid.get(proc.pid);\n if (\n !entry ||\n entry.type !== this.type ||\n !entry.sessionFilePath ||\n !fs.existsSync(entry.sessionFilePath)\n ) {\n remaining.push(proc);\n continue;\n }\n\n const session = this.parseSession(entry.sessionFilePath, proc.cwd);\n if (!session) {\n remaining.push(proc);\n continue;\n }\n\n cachedAgents.push(this.mapSessionToAgent(session, proc, entry.sessionFilePath));\n }\n\n return { cachedAgents, remaining };\n }\n\n private matchFromTracker(processes: ProcessInfo[]): {\n matches: TrackerMatch[];\n fallback: ProcessInfo[];\n } {\n const tracker = this.readTracker();\n if (tracker.size === 0) return { matches: [], fallback: processes };\n\n const matches: TrackerMatch[] = [];\n const fallback: ProcessInfo[] = [];\n\n for (const proc of processes) {\n const filePath = tracker.get(proc.pid);\n if (!filePath || !this.isTrustedSessionPath(filePath) || !fs.existsSync(filePath)) {\n fallback.push(proc);\n continue;\n }\n matches.push({ process: proc, filePath });\n }\n\n return { matches, fallback };\n }\n\n private readTracker(): Map<number, string> {\n const content = safeReadFile(this.trackerPath);\n if (content === undefined) return new Map();\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(content);\n } catch {\n return new Map();\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return new Map();\n\n const map = new Map<number, string>();\n for (const [key, value] of Object.entries(parsed)) {\n const keyPid = this.toPid(key);\n if (keyPid !== null && typeof value === 'string' && value) {\n map.set(keyPid, value);\n }\n }\n return map;\n }\n\n private toPid(value: unknown): number | null {\n if (typeof value === 'number' && Number.isInteger(value) && value > 0) return value;\n if (typeof value !== 'string' || !/^\\d+$/.test(value)) return null;\n const parsed = Number(value);\n return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;\n }\n\n private isTrustedSessionPath(filePath: string): boolean {\n const resolvedRoot = path.resolve(this.piSessionsDir);\n const resolvedPath = path.resolve(filePath);\n return resolvedPath === resolvedRoot || resolvedPath.startsWith(`${resolvedRoot}${path.sep}`);\n }\n\n private discoverSessions(processes: ProcessInfo[] = []): SessionFile[] {\n if (!isDirectory(this.piSessionsDir)) return [];\n\n const cwdByProjectDir = this.buildProjectDirCwdMap(processes);\n const sessions: SessionFile[] = [];\n for (const filePath of this.collectJsonlFiles(this.piSessionsDir)) {\n const stat = safeStat(filePath);\n if (!stat) continue;\n\n const session = this.parseSession(filePath);\n const sessionId = session?.sessionId || this.sessionIdFromFile(filePath);\n const projectDir = path.dirname(filePath);\n sessions.push({\n sessionId,\n filePath,\n projectDir,\n birthtimeMs: stat.birthtimeMs || stat.mtimeMs,\n resolvedCwd: session?.projectPath || cwdByProjectDir.get(path.basename(projectDir)) || '',\n });\n }\n\n return sessions;\n }\n\n private buildProjectDirCwdMap(processes: ProcessInfo[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const proc of processes) {\n if (!proc.cwd) continue;\n map.set(this.encodeProjectDir(proc.cwd), proc.cwd);\n }\n return map;\n }\n\n private collectJsonlFiles(dir: string): string[] {\n const files: string[] = [];\n for (const entry of safeReaddir(dir)) {\n const fullPath = path.join(dir, entry);\n const stat = safeStat(fullPath);\n if (!stat) continue;\n if (stat.isDirectory()) {\n files.push(...this.collectJsonlFiles(fullPath));\n } else if (stat.isFile() && entry.endsWith('.jsonl')) {\n files.push(fullPath);\n }\n }\n return files;\n }\n\n private parseSession(filePath: string, fallbackCwd = ''): PiSession | null {\n const entries = this.readJsonl(filePath);\n if (entries.length === 0) return null;\n return this.sessionFromEntries(entries, filePath, fallbackCwd);\n }\n\n private sessionFromEntries(entries: PiLine[], filePath: string, fallbackCwd = ''): PiSession {\n const stat = safeStat(filePath);\n const timestamps = entries\n .map((entry) => this.parseTimestamp(this.entryTimestamp(entry)))\n .filter((value): value is Date => value !== null);\n\n const sessionStart = timestamps[0] ?? stat?.birthtime ?? stat?.mtime ?? new Date();\n const lastActive = timestamps[timestamps.length - 1] ?? stat?.mtime ?? sessionStart;\n const messages = this.entriesToMessages(entries, true);\n const lastUser = [...messages].reverse().find((msg) => msg.role === 'user');\n const lastMessage = messages[messages.length - 1];\n\n return {\n sessionId: this.sessionIdFromEntries(entries) || this.sessionIdFromFile(filePath),\n projectPath: this.cwdFromEntries(entries) || fallbackCwd,\n summary: lastUser?.content ? this.truncate(lastUser.content, 120) : 'Pi session active',\n sessionStart,\n lastActive,\n lastRole: lastMessage?.role,\n };\n }\n\n private readJsonl(filePath: string): PiLine[] {\n const content = safeReadFile(filePath);\n if (content === undefined) return [];\n\n const entries: PiLine[] = [];\n for (const line of content.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n entries.push(parsed as PiLine);\n }\n } catch {\n continue;\n }\n }\n return entries;\n }\n\n private entryToMessage(entry: PiLine, includeSystem: boolean): ConversationMessage | null {\n const role = this.entryRole(entry);\n if (!role) return null;\n if (role === 'system' && !includeSystem) return null;\n\n const content = this.entryContent(entry).trim();\n if (!content) return null;\n\n return {\n role,\n content,\n timestamp: this.entryTimestamp(entry),\n };\n }\n\n private entryRole(entry: PiLine): ConversationMessage['role'] | null {\n const message = this.messageRecord(entry);\n const raw = this.firstString(\n entry.role,\n message?.role,\n this.roleLikeType(entry.type),\n entry.payload?.role,\n entry.payload?.type,\n entry.data?.role,\n entry.data?.type,\n );\n if (!raw) return null;\n const normalized = raw.toLowerCase();\n if (normalized === 'user' || normalized === 'human') return 'user';\n if (normalized === 'assistant' || normalized === 'ai' || normalized === 'pi') return 'assistant';\n if (normalized === 'system') return 'system';\n return null;\n }\n\n private entryContent(entry: PiLine): string {\n const message = this.messageRecord(entry);\n const candidates = [\n entry.content,\n entry.text,\n message?.content,\n message?.text,\n message?.message,\n entry.message,\n entry.payload?.content,\n entry.payload?.text,\n entry.payload?.message,\n entry.data?.content,\n entry.data?.text,\n entry.data?.message,\n ];\n\n for (const candidate of candidates) {\n const text = this.contentToString(candidate);\n if (text) return text;\n }\n return '';\n }\n\n private contentToString(value: unknown): string {\n if (typeof value === 'string') return value;\n if (Array.isArray(value)) {\n return value.map((item) => this.contentToString(item)).filter(Boolean).join('');\n }\n if (!value || typeof value !== 'object') return '';\n\n const record = value as Record<string, unknown>;\n return this.contentToString(record.content ?? record.text ?? record.value);\n }\n\n private asRecord(value: unknown): PiRecord | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n return value as PiRecord;\n }\n\n private messageRecord(entry: PiLine): PiRecord | null {\n return this.asRecord(entry.message);\n }\n\n private roleLikeType(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const normalized = value.toLowerCase();\n if (['user', 'human', 'assistant', 'ai', 'pi', 'system'].includes(normalized)) {\n return value;\n }\n return undefined;\n }\n\n private entryTimestamp(entry: PiLine): string | undefined {\n return this.firstString(\n entry.timestamp,\n entry.payload?.timestamp,\n entry.data?.timestamp,\n entry.createdAt,\n entry.created_at,\n );\n }\n\n private sessionIdFromEntries(entries: PiLine[]): string | null {\n for (const entry of entries) {\n const sessionId = this.firstString(\n entry.sessionId,\n entry.session_id,\n entry.id,\n entry.payload?.sessionId,\n entry.payload?.session_id,\n entry.payload?.id,\n entry.data?.sessionId,\n entry.data?.session_id,\n entry.data?.id,\n );\n if (sessionId) return sessionId;\n }\n return null;\n }\n\n private cwdFromEntries(entries: PiLine[]): string {\n for (const entry of entries) {\n const cwd = this.firstString(\n entry.cwd,\n entry.projectPath,\n entry.project_path,\n entry.payload?.cwd,\n entry.payload?.projectPath,\n entry.payload?.project_path,\n entry.data?.cwd,\n entry.data?.projectPath,\n entry.data?.project_path,\n );\n if (cwd) return cwd;\n }\n return '';\n }\n\n private sessionIdFromFile(filePath: string): string {\n const base = path.basename(filePath, '.jsonl');\n const underscore = base.lastIndexOf('_');\n return underscore >= 0 ? base.slice(underscore + 1) : base;\n }\n\n private encodeProjectDir(cwd: string): string {\n const normalized = path.resolve(cwd);\n return `--${normalized.replace(/^\\//, '').replace(/\\//g, '-')}--`;\n }\n\n private firstString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === 'string' && value) return value;\n }\n return undefined;\n }\n\n private parseTimestamp(value?: string): Date | null {\n if (!value) return null;\n const timestamp = new Date(value);\n return Number.isNaN(timestamp.getTime()) ? null : timestamp;\n }\n\n private mapSessionToAgent(session: PiSession, processInfo: ProcessInfo, filePath: string): AgentInfo {\n const projectPath = session.projectPath || processInfo.cwd || '';\n return {\n name: generateAgentName(projectPath, processInfo.pid),\n type: this.type,\n status: this.determineStatus(session),\n summary: session.summary || 'Pi session active',\n pid: processInfo.pid,\n projectPath,\n sessionId: session.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: filePath,\n };\n }\n\n private mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return {\n name: generateAgentName(processInfo.cwd || '', processInfo.pid),\n type: this.type,\n status: AgentStatus.RUNNING,\n summary: 'Pi process running',\n pid: processInfo.pid,\n projectPath: processInfo.cwd || '',\n sessionId: `pid-${processInfo.pid}`,\n lastActive: new Date(),\n };\n }\n\n private determineStatus(session: PiSession): AgentStatus {\n const diffMs = Date.now() - session.lastActive.getTime();\n const diffMinutes = diffMs / 60000;\n\n if (diffMinutes > PiAdapter.IDLE_THRESHOLD_MINUTES) return AgentStatus.IDLE;\n if (session.lastRole === 'assistant') return AgentStatus.WAITING;\n return AgentStatus.RUNNING;\n }\n\n private truncate(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return `${value.slice(0, maxLength - 3)}...`;\n }\n\n private isPiExecutable(command: string): boolean {\n for (const token of command.trim().split(/\\s+/)) {\n const base = executableBasename(token);\n if (base === 'pi' || base === 'pi.exe' || base === 'pi.js') return true;\n }\n return false;\n }\n\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n const includeSystem = options?.verbose ?? false;\n return this.entriesToMessages(this.readJsonl(sessionFilePath), includeSystem);\n }\n\n private entriesToMessages(entries: PiLine[], includeSystem: boolean): ConversationMessage[] {\n return entries\n .map((entry) => this.entryToMessage(entry, includeSystem))\n .filter((msg): msg is ConversationMessage => msg !== null);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n if (!isDirectory(this.piSessionsDir)) return [];\n\n const summaries: SessionSummary[] = [];\n for (const filePath of this.collectJsonlFiles(this.piSessionsDir)) {\n const summary = this.fileToSessionSummary(filePath);\n if (!summary) continue;\n if (opts?.cwd !== undefined && summary.cwd !== opts.cwd) continue;\n summaries.push(summary);\n }\n return summaries;\n }\n\n private fileToSessionSummary(filePath: string): SessionSummary | null {\n const entries = this.readJsonl(filePath);\n if (entries.length === 0) return null;\n\n const session = this.sessionFromEntries(entries, filePath);\n const firstUserMessage = this.entriesToMessages(entries, false)\n .find((msg) => msg.role === 'user')?.content ?? '';\n return {\n type: this.type,\n sessionId: session.sessionId,\n cwd: session.projectPath,\n firstUserMessage,\n lastActive: session.lastActive,\n startedAt: session.sessionStart,\n sessionFilePath: filePath,\n };\n }\n}\n"],"names":["fs","path","AgentStatus","captureProcessSnapshot","executableBasename","filterByProcessNames","isDirectory","safeReadFile","safeReaddir","safeStat","matchProcessesToSessions","generateAgentName","AgentRegistry","PiAdapter","type","processNames","IDLE_THRESHOLD_MINUTES","piAgentDir","piSessionsDir","trackerPath","registry","default","homeDir","process","env","HOME","USERPROFILE","join","canHandle","processInfo","isPiExecutable","command","detectAgents","context","snapshot","processes","relevant","listPiProcesses","length","cachedAgents","remaining","tryRegistryCache","trackerResult","mapTrackerMatches","fallbackAgents","mapFallbackMatches","fallback","agents","matches","trackerMatches","matchFromTracker","match","session","parseSession","filePath","cwd","push","mapSessionToAgent","sessions","discoverSessions","map","p","mapProcessOnlyAgent","matchedPids","Set","m","pid","delete","proc","has","byPid","Map","set","Array","from","values","list","e","entry","get","sessionFilePath","existsSync","tracker","readTracker","size","isTrustedSessionPath","content","undefined","parsed","JSON","parse","isArray","key","value","Object","entries","keyPid","toPid","Number","isInteger","test","isSafeInteger","resolvedRoot","resolve","resolvedPath","startsWith","sep","cwdByProjectDir","buildProjectDirCwdMap","collectJsonlFiles","stat","sessionId","sessionIdFromFile","projectDir","dirname","birthtimeMs","mtimeMs","resolvedCwd","projectPath","basename","encodeProjectDir","dir","files","fullPath","isFile","endsWith","fallbackCwd","readJsonl","sessionFromEntries","timestamps","parseTimestamp","entryTimestamp","filter","sessionStart","birthtime","mtime","Date","lastActive","messages","entriesToMessages","lastUser","reverse","find","msg","role","lastMessage","sessionIdFromEntries","cwdFromEntries","summary","truncate","lastRole","line","split","trimmed","trim","entryToMessage","includeSystem","entryRole","entryContent","timestamp","message","messageRecord","raw","firstString","roleLikeType","payload","data","normalized","toLowerCase","candidates","text","candidate","contentToString","item","Boolean","record","asRecord","includes","createdAt","created_at","session_id","id","project_path","base","underscore","lastIndexOf","slice","replace","isNaN","getTime","name","status","determineStatus","RUNNING","diffMs","now","diffMinutes","IDLE","WAITING","maxLength","token","getConversation","options","verbose","listSessions","opts","summaries","fileToSessionSummary","firstUserMessage","startedAt"],"mappings":"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"}
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export { GrokCliAdapter } from './GrokCliAdapter.js';
|
|
|
6
6
|
export { OpenCodeAdapter } from './OpenCodeAdapter.js';
|
|
7
7
|
export { PiAdapter } from './PiAdapter.js';
|
|
8
8
|
export { AgentStatus } from './AgentAdapter.js';
|
|
9
|
-
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo } from './AgentAdapter.js';
|
|
9
|
+
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, AgentDetectionContext } from './AgentAdapter.js';
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/index.ts"],"sourcesContent":["export { ClaudeCodeAdapter } from './ClaudeCodeAdapter.js';\nexport { CodexAdapter } from './CodexAdapter.js';\nexport { CopilotAdapter } from './CopilotAdapter.js';\nexport { GeminiCliAdapter } from './GeminiCliAdapter.js';\nexport { GrokCliAdapter } from './GrokCliAdapter.js';\nexport { OpenCodeAdapter } from './OpenCodeAdapter.js';\nexport { PiAdapter } from './PiAdapter.js';\nexport { AgentStatus } from './AgentAdapter.js';\nexport type { AgentAdapter, AgentType, AgentInfo, ProcessInfo } from './AgentAdapter.js';\n"],"names":["ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,yBAAyB;AAC3D,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,gBAAgB,QAAQ,wBAAwB;AACzD,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,eAAe,QAAQ,uBAAuB;AACvD,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,WAAW,QAAQ,oBAAoB"}
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/index.ts"],"sourcesContent":["export { ClaudeCodeAdapter } from './ClaudeCodeAdapter.js';\nexport { CodexAdapter } from './CodexAdapter.js';\nexport { CopilotAdapter } from './CopilotAdapter.js';\nexport { GeminiCliAdapter } from './GeminiCliAdapter.js';\nexport { GrokCliAdapter } from './GrokCliAdapter.js';\nexport { OpenCodeAdapter } from './OpenCodeAdapter.js';\nexport { PiAdapter } from './PiAdapter.js';\nexport { AgentStatus } from './AgentAdapter.js';\nexport type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, AgentDetectionContext } from './AgentAdapter.js';\n"],"names":["ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,yBAAyB;AAC3D,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,gBAAgB,QAAQ,wBAAwB;AACzD,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,eAAe,QAAQ,uBAAuB;AACvD,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,WAAW,QAAQ,oBAAoB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,11 +7,12 @@ export { GrokCliAdapter } from './adapters/GrokCliAdapter.js';
|
|
|
7
7
|
export { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';
|
|
8
8
|
export { PiAdapter } from './adapters/PiAdapter.js';
|
|
9
9
|
export { AgentStatus } from './adapters/AgentAdapter.js';
|
|
10
|
-
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, } from './adapters/AgentAdapter.js';
|
|
10
|
+
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext, } from './adapters/AgentAdapter.js';
|
|
11
11
|
export { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';
|
|
12
12
|
export type { TerminalLocation } from './terminal/TerminalFocusManager.js';
|
|
13
13
|
export { TtyWriter } from './terminal/TtyWriter.js';
|
|
14
14
|
export { getProcessTty } from './utils/process.js';
|
|
15
|
+
export { captureProcessSnapshot, executableBasename, filterByProcessNames } from './utils/process.js';
|
|
15
16
|
export type { AgentSortKey } from './utils/sortAgents.js';
|
|
16
17
|
export type { ListAgentsOptions } from './AgentManager.js';
|
|
17
18
|
export { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,YAAY,EACR,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,YAAY,EACR,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACxB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACxF,YAAY,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtG,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACnG,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE3G,OAAO,EACH,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACR,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EACR,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,YAAY,EACR,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,YAAY,EACR,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,oCAAoC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export { AgentStatus } from './adapters/AgentAdapter.js';
|
|
|
10
10
|
export { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';
|
|
11
11
|
export { TtyWriter } from './terminal/TtyWriter.js';
|
|
12
12
|
export { getProcessTty } from './utils/process.js';
|
|
13
|
+
export { captureProcessSnapshot, executableBasename, filterByProcessNames } from './utils/process.js';
|
|
13
14
|
export { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';
|
|
14
15
|
export { TmuxManager } from './terminal/TmuxManager.js';
|
|
15
16
|
export { AGENTS } from './utils/agents.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AgentManager } from './AgentManager.js';\n\nexport { ClaudeCodeAdapter } from './adapters/ClaudeCodeAdapter.js';\nexport { CodexAdapter } from './adapters/CodexAdapter.js';\nexport { CopilotAdapter } from './adapters/CopilotAdapter.js';\nexport { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';\nexport { GrokCliAdapter } from './adapters/GrokCliAdapter.js';\nexport { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';\nexport { PiAdapter } from './adapters/PiAdapter.js';\nexport { AgentStatus } from './adapters/AgentAdapter.js';\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n} from './adapters/AgentAdapter.js';\n\nexport { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';\nexport type { TerminalLocation } from './terminal/TerminalFocusManager.js';\nexport { TtyWriter } from './terminal/TtyWriter.js';\n\nexport { getProcessTty } from './utils/process.js';\nexport type { AgentSortKey } from './utils/sortAgents.js';\nexport type { ListAgentsOptions } from './AgentManager.js';\n\nexport { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';\nexport type { RegistryEntry } from './utils/AgentRegistry.js';\nexport { TmuxManager } from './terminal/TmuxManager.js';\nexport { AGENTS } from './utils/agents.js';\nexport type { AgentConfig, StartableAgentType } from './utils/agents.js';\n\nexport type { AgentRequest } from './utils/agent-requests.js';\nexport { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';\n\nexport {\n PrintAgentError,\n PrintAgentBusyError,\n PrintAgentNotFoundError,\n PrintAgentStoreError,\n PrintAgentNameConflictError,\n ClaudePrintError,\n} from './print/PrintAgent.js';\nexport type {\n PrintAgent,\n PrintAgentState,\n PrintSessionHealth,\n PrintRunStatus,\n PrintActiveRun,\n PrintLastResult,\n ProcessIdentity,\n} from './print/PrintAgent.js';\nexport { PrintAgentStore } from './print/PrintAgentStore.js';\nexport { LocalProcessInspector } from './print/PrintAgentStore.js';\nexport type {\n CreatePrintAgentInput,\n PrintAgentStoreOptions,\n ProcessInspector,\n PrintRunCompletion,\n} from './print/PrintAgentStore.js';\nexport { ClaudeCliProbe } from './print/ClaudeCliProbe.js';\nexport type { ClaudeCliProbeOptions } from './print/ClaudeCliProbe.js';\nexport { ClaudePrintRunner } from './print/ClaudePrintRunner.js';\nexport type {\n ClaudePrintRunnerOptions,\n ClaudePrintRunRequest,\n ClaudePrintRunResult,\n} from './print/ClaudePrintRunner.js';\nexport { ClaudePrintAgentService } from './print/ClaudePrintAgentService.js';\nexport type {\n ClaudePrintAgentServiceOptions,\n ClaudePrintSendResult,\n} from './print/ClaudePrintAgentService.js';\n"],"names":["AgentManager","ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus","TerminalFocusManager","TerminalType","TtyWriter","getProcessTty","AgentRegistry","RenameNotFoundError","RenameConflictError","TmuxManager","AGENTS","getAgentRequestPath","readLatestAgentRequest","writeAgentRequest","PrintAgentError","PrintAgentBusyError","PrintAgentNotFoundError","PrintAgentStoreError","PrintAgentNameConflictError","ClaudePrintError","PrintAgentStore","LocalProcessInspector","ClaudeCliProbe","ClaudePrintRunner","ClaudePrintAgentService"],"mappings":"AAAA,SAASA,YAAY,QAAQ,oBAAoB;AAEjD,SAASC,iBAAiB,QAAQ,kCAAkC;AACpE,SAASC,YAAY,QAAQ,6BAA6B;AAC1D,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,gBAAgB,QAAQ,iCAAiC;AAClE,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,WAAW,QAAQ,6BAA6B;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AgentManager } from './AgentManager.js';\n\nexport { ClaudeCodeAdapter } from './adapters/ClaudeCodeAdapter.js';\nexport { CodexAdapter } from './adapters/CodexAdapter.js';\nexport { CopilotAdapter } from './adapters/CopilotAdapter.js';\nexport { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';\nexport { GrokCliAdapter } from './adapters/GrokCliAdapter.js';\nexport { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';\nexport { PiAdapter } from './adapters/PiAdapter.js';\nexport { AgentStatus } from './adapters/AgentAdapter.js';\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from './adapters/AgentAdapter.js';\n\nexport { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';\nexport type { TerminalLocation } from './terminal/TerminalFocusManager.js';\nexport { TtyWriter } from './terminal/TtyWriter.js';\n\nexport { getProcessTty } from './utils/process.js';\nexport { captureProcessSnapshot, executableBasename, filterByProcessNames } from './utils/process.js';\nexport type { AgentSortKey } from './utils/sortAgents.js';\nexport type { ListAgentsOptions } from './AgentManager.js';\n\nexport { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';\nexport type { RegistryEntry } from './utils/AgentRegistry.js';\nexport { TmuxManager } from './terminal/TmuxManager.js';\nexport { AGENTS } from './utils/agents.js';\nexport type { AgentConfig, StartableAgentType } from './utils/agents.js';\n\nexport type { AgentRequest } from './utils/agent-requests.js';\nexport { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';\n\nexport {\n PrintAgentError,\n PrintAgentBusyError,\n PrintAgentNotFoundError,\n PrintAgentStoreError,\n PrintAgentNameConflictError,\n ClaudePrintError,\n} from './print/PrintAgent.js';\nexport type {\n PrintAgent,\n PrintAgentState,\n PrintSessionHealth,\n PrintRunStatus,\n PrintActiveRun,\n PrintLastResult,\n ProcessIdentity,\n} from './print/PrintAgent.js';\nexport { PrintAgentStore } from './print/PrintAgentStore.js';\nexport { LocalProcessInspector } from './print/PrintAgentStore.js';\nexport type {\n CreatePrintAgentInput,\n PrintAgentStoreOptions,\n ProcessInspector,\n PrintRunCompletion,\n} from './print/PrintAgentStore.js';\nexport { ClaudeCliProbe } from './print/ClaudeCliProbe.js';\nexport type { ClaudeCliProbeOptions } from './print/ClaudeCliProbe.js';\nexport { ClaudePrintRunner } from './print/ClaudePrintRunner.js';\nexport type {\n ClaudePrintRunnerOptions,\n ClaudePrintRunRequest,\n ClaudePrintRunResult,\n} from './print/ClaudePrintRunner.js';\nexport { ClaudePrintAgentService } from './print/ClaudePrintAgentService.js';\nexport type {\n ClaudePrintAgentServiceOptions,\n ClaudePrintSendResult,\n} from './print/ClaudePrintAgentService.js';\n"],"names":["AgentManager","ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus","TerminalFocusManager","TerminalType","TtyWriter","getProcessTty","captureProcessSnapshot","executableBasename","filterByProcessNames","AgentRegistry","RenameNotFoundError","RenameConflictError","TmuxManager","AGENTS","getAgentRequestPath","readLatestAgentRequest","writeAgentRequest","PrintAgentError","PrintAgentBusyError","PrintAgentNotFoundError","PrintAgentStoreError","PrintAgentNameConflictError","ClaudePrintError","PrintAgentStore","LocalProcessInspector","ClaudeCliProbe","ClaudePrintRunner","ClaudePrintAgentService"],"mappings":"AAAA,SAASA,YAAY,QAAQ,oBAAoB;AAEjD,SAASC,iBAAiB,QAAQ,kCAAkC;AACpE,SAASC,YAAY,QAAQ,6BAA6B;AAC1D,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,gBAAgB,QAAQ,iCAAiC;AAClE,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,WAAW,QAAQ,6BAA6B;AAYzD,SAASC,oBAAoB,EAAEC,YAAY,QAAQ,qCAAqC;AAExF,SAASC,SAAS,QAAQ,0BAA0B;AAEpD,SAASC,aAAa,QAAQ,qBAAqB;AACnD,SAASC,sBAAsB,EAAEC,kBAAkB,EAAEC,oBAAoB,QAAQ,qBAAqB;AAItG,SAASC,aAAa,EAAEC,mBAAmB,EAAEC,mBAAmB,QAAQ,2BAA2B;AAEnG,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,MAAM,QAAQ,oBAAoB;AAI3C,SAASC,mBAAmB,EAAEC,sBAAsB,EAAEC,iBAAiB,QAAQ,4BAA4B;AAE3G,SACIC,eAAe,EACfC,mBAAmB,EACnBC,uBAAuB,EACvBC,oBAAoB,EACpBC,2BAA2B,EAC3BC,gBAAgB,QACb,wBAAwB;AAU/B,SAASC,eAAe,QAAQ,6BAA6B;AAC7D,SAASC,qBAAqB,QAAQ,6BAA6B;AAOnE,SAASC,cAAc,QAAQ,4BAA4B;AAE3D,SAASC,iBAAiB,QAAQ,+BAA+B;AAMjE,SAASC,uBAAuB,QAAQ,qCAAqC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses } from './process.js';
|
|
1
|
+
export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses, captureProcessSnapshot } from './process.js';
|
|
2
2
|
export { getProcessTty } from './process.js';
|
|
3
3
|
export { batchGetSessionFileBirthtimes } from './session.js';
|
|
4
4
|
export type { SessionFile } from './session.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3I,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses } from './process.js';
|
|
1
|
+
export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses, captureProcessSnapshot } from './process.js';
|
|
2
2
|
export { getProcessTty } from './process.js';
|
|
3
3
|
export { batchGetSessionFileBirthtimes } from './session.js';
|
|
4
4
|
export { matchProcessesToSessions, generateAgentName } from './matching.js';
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses } from './process.js';\nexport { getProcessTty } from './process.js';\nexport { batchGetSessionFileBirthtimes } from './session.js';\nexport type { SessionFile } from './session.js';\nexport { matchProcessesToSessions, generateAgentName } from './matching.js';\nexport type { MatchResult } from './matching.js';\n"],"names":["listAgentProcesses","batchGetProcessCwds","batchGetProcessStartTimes","enrichProcesses","getProcessTty","batchGetSessionFileBirthtimes","matchProcessesToSessions","generateAgentName"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,mBAAmB,EAAEC,yBAAyB,EAAEC,eAAe,QAAQ,eAAe;
|
|
1
|
+
{"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses, captureProcessSnapshot } from './process.js';\nexport { getProcessTty } from './process.js';\nexport { batchGetSessionFileBirthtimes } from './session.js';\nexport type { SessionFile } from './session.js';\nexport { matchProcessesToSessions, generateAgentName } from './matching.js';\nexport type { MatchResult } from './matching.js';\n"],"names":["listAgentProcesses","batchGetProcessCwds","batchGetProcessStartTimes","enrichProcesses","captureProcessSnapshot","getProcessTty","batchGetSessionFileBirthtimes","matchProcessesToSessions","generateAgentName"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,mBAAmB,EAAEC,yBAAyB,EAAEC,eAAe,EAAEC,sBAAsB,QAAQ,eAAe;AAC3I,SAASC,aAAa,QAAQ,eAAe;AAC7C,SAASC,6BAA6B,QAAQ,eAAe;AAE7D,SAASC,wBAAwB,EAAEC,iBAAiB,QAAQ,gBAAgB"}
|
package/dist/utils/process.d.ts
CHANGED
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
* Process Detection Utilities
|
|
3
3
|
*
|
|
4
4
|
* Shared shell command wrappers for detecting and inspecting running processes.
|
|
5
|
-
*
|
|
5
|
+
* Built-in refresh discovery uses captureProcessSnapshot(); synchronous helpers
|
|
6
|
+
* remain exported for compatibility with existing consumers.
|
|
6
7
|
*/
|
|
7
8
|
import type { ProcessInfo } from '../adapters/AgentAdapter.js';
|
|
9
|
+
export declare function executableBasename(command: string): string;
|
|
10
|
+
export declare function filterByProcessNames(processes: readonly ProcessInfo[], namePatterns: readonly string[]): ProcessInfo[];
|
|
8
11
|
/**
|
|
9
12
|
* List running processes matching an agent executable name.
|
|
10
13
|
*
|
|
@@ -15,6 +18,11 @@ import type { ProcessInfo } from '../adapters/AgentAdapter.js';
|
|
|
15
18
|
* cwd and startTime are NOT populated — call enrichProcesses() to fill them.
|
|
16
19
|
*/
|
|
17
20
|
export declare function listAgentProcesses(namePattern: string): ProcessInfo[];
|
|
21
|
+
/**
|
|
22
|
+
* Capture and enrich relevant processes without blocking the event loop.
|
|
23
|
+
* One base process listing is shared by every requested executable name.
|
|
24
|
+
*/
|
|
25
|
+
export declare function captureProcessSnapshot(namePatterns: readonly string[]): Promise<ProcessInfo[]>;
|
|
18
26
|
/**
|
|
19
27
|
* Batch-get current working directories for multiple PIDs.
|
|
20
28
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAK/D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG1D;AAWD,wBAAgB,oBAAoB,CAChC,SAAS,EAAE,SAAS,WAAW,EAAE,EACjC,YAAY,EAAE,SAAS,MAAM,EAAE,GAChC,WAAW,EAAE,CAMf;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE,CA0CrE;AAoGD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAsBpG;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuCvE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAkC3E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAavE;AAaD,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,WAAW,EAAE,EACxB,KAAK,EAAE,WAAW,GACnB,WAAW,GAAG,SAAS,CAMzB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAClC,SAAS,EAAE,WAAW,EAAE,EACxB,gBAAgB,GAAE,WAAW,EAAO,GACrC,GAAG,CAAC,MAAM,CAAC,CAmBb;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYjD"}
|