@ai-devkit/agent-manager 0.14.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +1 -1
- package/dist/AgentManager.d.ts +14 -12
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +40 -33
- package/dist/AgentManager.js.map +1 -1
- package/dist/adapters/AgentAdapter.js +2 -5
- package/dist/adapters/AgentAdapter.js.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts +1 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.js +29 -63
- package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
- package/dist/adapters/CodexAdapter.d.ts +5 -2
- package/dist/adapters/CodexAdapter.d.ts.map +1 -1
- package/dist/adapters/CodexAdapter.js +66 -73
- package/dist/adapters/CodexAdapter.js.map +1 -1
- package/dist/adapters/GeminiCliAdapter.d.ts +5 -2
- package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
- package/dist/adapters/GeminiCliAdapter.js +63 -70
- package/dist/adapters/GeminiCliAdapter.js.map +1 -1
- package/dist/adapters/OpenCodeAdapter.d.ts +1 -1
- package/dist/adapters/OpenCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenCodeAdapter.js +20 -59
- package/dist/adapters/OpenCodeAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +6 -6
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +5 -13
- package/dist/adapters/index.js.map +1 -1
- package/dist/index.d.ts +18 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -22
- package/dist/index.js.map +1 -1
- package/dist/terminal/TerminalFocusManager.js +13 -17
- package/dist/terminal/TerminalFocusManager.js.map +1 -1
- package/dist/terminal/TmuxManager.d.ts +28 -0
- package/dist/terminal/TmuxManager.d.ts.map +1 -0
- package/dist/terminal/TmuxManager.js +112 -0
- package/dist/terminal/TmuxManager.js.map +1 -0
- package/dist/terminal/TtyWriter.d.ts +1 -1
- package/dist/terminal/TtyWriter.d.ts.map +1 -1
- package/dist/terminal/TtyWriter.js +11 -15
- package/dist/terminal/TtyWriter.js.map +1 -1
- package/dist/terminal/index.d.ts +4 -4
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +3 -9
- package/dist/terminal/index.js.map +1 -1
- package/dist/utils/AgentRegistry.d.ts +35 -0
- package/dist/utils/AgentRegistry.d.ts.map +1 -0
- package/dist/utils/AgentRegistry.js +114 -0
- package/dist/utils/AgentRegistry.js.map +1 -0
- package/dist/utils/ClaudeSessionParser.d.ts +2 -2
- package/dist/utils/ClaudeSessionParser.d.ts.map +1 -1
- package/dist/utils/ClaudeSessionParser.js +32 -59
- package/dist/utils/ClaudeSessionParser.js.map +1 -1
- package/dist/utils/agents.d.ts +15 -0
- package/dist/utils/agents.d.ts.map +1 -0
- package/dist/utils/agents.js +30 -0
- package/dist/utils/agents.js.map +1 -0
- package/dist/utils/applescript.js +1 -4
- package/dist/utils/applescript.js.map +1 -1
- package/dist/utils/index.d.ts +6 -6
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -15
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/matching.d.ts +2 -2
- package/dist/utils/matching.d.ts.map +1 -1
- package/dist/utils/matching.js +3 -40
- package/dist/utils/matching.js.map +1 -1
- package/dist/utils/process.d.ts +1 -1
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +12 -52
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/session.js +8 -49
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/sortAgents.d.ts +4 -0
- package/dist/utils/sortAgents.d.ts.map +1 -0
- package/dist/utils/sortAgents.js +48 -0
- package/dist/utils/sortAgents.js.map +1 -0
- package/package.json +9 -8
- package/src/AgentManager.ts +53 -28
- package/src/__tests__/AgentManager.test.ts +140 -5
- package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +45 -44
- package/src/__tests__/adapters/CodexAdapter.test.ts +137 -30
- package/src/__tests__/adapters/GeminiCliAdapter.test.ts +130 -18
- package/src/__tests__/adapters/OpenCodeAdapter.test.ts +23 -21
- package/src/__tests__/terminal/TmuxManager.test.ts +175 -0
- package/src/__tests__/terminal/TtyWriter.test.ts +10 -9
- package/src/__tests__/utils/AgentRegistry.test.ts +223 -0
- package/src/__tests__/utils/ClaudeSessionParser.test.ts +73 -2
- package/src/__tests__/utils/matching.test.ts +4 -4
- package/src/__tests__/utils/process.test.ts +6 -5
- package/src/__tests__/utils/session.test.ts +8 -7
- package/src/adapters/ClaudeCodeAdapter.ts +8 -8
- package/src/adapters/CodexAdapter.ts +51 -12
- package/src/adapters/GeminiCliAdapter.ts +51 -12
- package/src/adapters/OpenCodeAdapter.ts +4 -4
- package/src/adapters/index.ts +6 -6
- package/src/index.ts +19 -11
- package/src/terminal/TerminalFocusManager.ts +2 -2
- package/src/terminal/TmuxManager.ts +118 -0
- package/src/terminal/TtyWriter.ts +3 -3
- package/src/terminal/index.ts +4 -4
- package/src/utils/AgentRegistry.ts +139 -0
- package/src/utils/ClaudeSessionParser.ts +23 -12
- package/src/utils/agents.ts +41 -0
- package/src/utils/index.ts +6 -6
- package/src/utils/matching.ts +2 -2
- package/src/utils/process.ts +1 -1
- package/src/utils/sortAgents.ts +52 -0
- package/tsconfig.json +2 -2
- package/vitest.config.ts +20 -0
- package/jest.config.js +0 -21
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const applescript_1 = require("../utils/applescript");
|
|
8
|
-
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
9
|
-
class TtyWriter {
|
|
1
|
+
import { execFile } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { TerminalType } from './TerminalFocusManager.js';
|
|
4
|
+
import { escapeAppleScript } from '../utils/applescript.js';
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
export class TtyWriter {
|
|
10
7
|
/**
|
|
11
8
|
* Send a message as keyboard input to a terminal session.
|
|
12
9
|
*
|
|
@@ -24,11 +21,11 @@ class TtyWriter {
|
|
|
24
21
|
*/
|
|
25
22
|
static async send(location, message) {
|
|
26
23
|
switch (location.type) {
|
|
27
|
-
case
|
|
24
|
+
case TerminalType.TMUX:
|
|
28
25
|
return TtyWriter.sendViaTmux(location.identifier, message);
|
|
29
|
-
case
|
|
26
|
+
case TerminalType.ITERM2:
|
|
30
27
|
return TtyWriter.sendViaITerm2(location.tty, message);
|
|
31
|
-
case
|
|
28
|
+
case TerminalType.TERMINAL_APP:
|
|
32
29
|
return TtyWriter.sendViaTerminalApp(location.tty, message);
|
|
33
30
|
default:
|
|
34
31
|
throw new Error(`Cannot send input: unsupported terminal type "${location.type}". ` +
|
|
@@ -72,7 +69,7 @@ end tell
|
|
|
72
69
|
return "ok"`;
|
|
73
70
|
}
|
|
74
71
|
static async sendViaITerm2(tty, message) {
|
|
75
|
-
const escaped =
|
|
72
|
+
const escaped = escapeAppleScript(message);
|
|
76
73
|
// Send text and Enter as two separate write text calls so the newline
|
|
77
74
|
// is delivered outside the bracketed paste sequence of the message body.
|
|
78
75
|
// iTerm2 appends the newline after the paste-end marker (\e[201~), so
|
|
@@ -91,7 +88,7 @@ return "ok"`;
|
|
|
91
88
|
}
|
|
92
89
|
}
|
|
93
90
|
static async sendViaTerminalApp(tty, message) {
|
|
94
|
-
const escaped =
|
|
91
|
+
const escaped = escapeAppleScript(message);
|
|
95
92
|
// Use Terminal.app's `do script` to send text to the correct tab by TTY.
|
|
96
93
|
// We avoid System Events `keystroke` + `key code 36` because it requires
|
|
97
94
|
// accessibility permissions and unreliably delivers the Return key.
|
|
@@ -145,5 +142,4 @@ return "ok"`;
|
|
|
145
142
|
}
|
|
146
143
|
}
|
|
147
144
|
}
|
|
148
|
-
exports.TtyWriter = TtyWriter;
|
|
149
145
|
//# sourceMappingURL=TtyWriter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TtyWriter.js","sourceRoot":"","sources":["../../src/terminal/TtyWriter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TtyWriter.js","sourceRoot":"","sources":["../../src/terminal/TtyWriter.ts"],"names":[],"mappings":"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"}
|
package/dist/terminal/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { TerminalFocusManager } from './TerminalFocusManager';
|
|
2
|
-
export { TerminalType } from './TerminalFocusManager';
|
|
3
|
-
export type { TerminalLocation } from './TerminalFocusManager';
|
|
4
|
-
export { TtyWriter } from './TtyWriter';
|
|
1
|
+
export { TerminalFocusManager } from './TerminalFocusManager.js';
|
|
2
|
+
export { TerminalType } from './TerminalFocusManager.js';
|
|
3
|
+
export type { TerminalLocation } from './TerminalFocusManager.js';
|
|
4
|
+
export { TtyWriter } from './TtyWriter.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/terminal/index.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var TerminalFocusManager_1 = require("./TerminalFocusManager");
|
|
5
|
-
Object.defineProperty(exports, "TerminalFocusManager", { enumerable: true, get: function () { return TerminalFocusManager_1.TerminalFocusManager; } });
|
|
6
|
-
var TerminalFocusManager_2 = require("./TerminalFocusManager");
|
|
7
|
-
Object.defineProperty(exports, "TerminalType", { enumerable: true, get: function () { return TerminalFocusManager_2.TerminalType; } });
|
|
8
|
-
var TtyWriter_1 = require("./TtyWriter");
|
|
9
|
-
Object.defineProperty(exports, "TtyWriter", { enumerable: true, get: function () { return TtyWriter_1.TtyWriter; } });
|
|
1
|
+
export { TerminalFocusManager } from './TerminalFocusManager.js';
|
|
2
|
+
export { TerminalType } from './TerminalFocusManager.js';
|
|
3
|
+
export { TtyWriter } from './TtyWriter.js';
|
|
10
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { AgentType } from '../adapters/AgentAdapter.js';
|
|
2
|
+
export declare class RenameNotFoundError extends Error {
|
|
3
|
+
agentName: string;
|
|
4
|
+
constructor(agentName: string);
|
|
5
|
+
}
|
|
6
|
+
export declare class RenameConflictError extends Error {
|
|
7
|
+
agentName: string;
|
|
8
|
+
constructor(agentName: string);
|
|
9
|
+
}
|
|
10
|
+
export interface RegistryEntry {
|
|
11
|
+
name: string;
|
|
12
|
+
type: AgentType;
|
|
13
|
+
pid: number;
|
|
14
|
+
tmuxSession: string;
|
|
15
|
+
cwd: string;
|
|
16
|
+
startedAt: string;
|
|
17
|
+
sessionId: string;
|
|
18
|
+
sessionFilePath: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class AgentRegistry {
|
|
21
|
+
private filePath;
|
|
22
|
+
constructor(filePath?: string);
|
|
23
|
+
static default(): AgentRegistry;
|
|
24
|
+
private readFile;
|
|
25
|
+
private writeFile;
|
|
26
|
+
private mergeEntry;
|
|
27
|
+
isAlive(entry: RegistryEntry): boolean;
|
|
28
|
+
prune(): void;
|
|
29
|
+
register(entry: RegistryEntry): void;
|
|
30
|
+
registerBatch(entries: RegistryEntry[]): void;
|
|
31
|
+
rename(currentName: string, newName: string): void;
|
|
32
|
+
lookup(name: string): RegistryEntry | null;
|
|
33
|
+
list(): RegistryEntry[];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=AgentRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentRegistry.d.ts","sourceRoot":"","sources":["../../src/utils/AgentRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,qBAAa,mBAAoB,SAAQ,KAAK;IACvB,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAIvC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACvB,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAIvC;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAUD,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,GAAE,MAA8B;IAIpD,MAAM,CAAC,OAAO,IAAI,aAAa;IAO/B,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAStC,KAAK,IAAI,IAAI;IAQb,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAIpC,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI;IAc7C,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAiBlD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAK1C,IAAI,IAAI,aAAa,EAAE;CAG1B"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
export class RenameNotFoundError extends Error {
|
|
5
|
+
agentName;
|
|
6
|
+
constructor(agentName) {
|
|
7
|
+
super(`Agent "${agentName}" not found in registry.`);
|
|
8
|
+
this.agentName = agentName;
|
|
9
|
+
this.name = 'RenameNotFoundError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class RenameConflictError extends Error {
|
|
13
|
+
agentName;
|
|
14
|
+
constructor(agentName) {
|
|
15
|
+
super(`Agent "${agentName}" is already in use.`);
|
|
16
|
+
this.agentName = agentName;
|
|
17
|
+
this.name = 'RenameConflictError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const DEFAULT_REGISTRY_PATH = path.join(os.homedir(), '.ai-devkit', 'agents.json');
|
|
21
|
+
let defaultInstance = null;
|
|
22
|
+
export class AgentRegistry {
|
|
23
|
+
filePath;
|
|
24
|
+
constructor(filePath = DEFAULT_REGISTRY_PATH) {
|
|
25
|
+
this.filePath = filePath;
|
|
26
|
+
}
|
|
27
|
+
static default() {
|
|
28
|
+
if (!defaultInstance) {
|
|
29
|
+
defaultInstance = new AgentRegistry();
|
|
30
|
+
}
|
|
31
|
+
return defaultInstance;
|
|
32
|
+
}
|
|
33
|
+
readFile() {
|
|
34
|
+
try {
|
|
35
|
+
const raw = fs.readFileSync(this.filePath, 'utf8');
|
|
36
|
+
const parsed = JSON.parse(raw);
|
|
37
|
+
return { entries: Array.isArray(parsed.entries) ? parsed.entries : [] };
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return { entries: [] };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
writeFile(data) {
|
|
44
|
+
const dir = path.dirname(this.filePath);
|
|
45
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
46
|
+
const tmp = `${this.filePath}.tmp`;
|
|
47
|
+
fs.writeFileSync(tmp, JSON.stringify(data, null, 2), 'utf8');
|
|
48
|
+
fs.renameSync(tmp, this.filePath);
|
|
49
|
+
}
|
|
50
|
+
mergeEntry(incoming, existing) {
|
|
51
|
+
if (!existing)
|
|
52
|
+
return incoming;
|
|
53
|
+
return {
|
|
54
|
+
...incoming,
|
|
55
|
+
tmuxSession: incoming.tmuxSession || existing.tmuxSession,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
isAlive(entry) {
|
|
59
|
+
try {
|
|
60
|
+
process.kill(entry.pid, 0);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
prune() {
|
|
68
|
+
const data = this.readFile();
|
|
69
|
+
const live = data.entries.filter((e) => this.isAlive(e));
|
|
70
|
+
if (live.length !== data.entries.length) {
|
|
71
|
+
this.writeFile({ entries: live });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
register(entry) {
|
|
75
|
+
this.registerBatch([entry]);
|
|
76
|
+
}
|
|
77
|
+
registerBatch(entries) {
|
|
78
|
+
if (entries.length === 0)
|
|
79
|
+
return;
|
|
80
|
+
const data = this.readFile();
|
|
81
|
+
for (const incoming of entries) {
|
|
82
|
+
const idx = data.entries.findIndex((e) => e.name === incoming.name);
|
|
83
|
+
if (idx >= 0) {
|
|
84
|
+
data.entries[idx] = this.mergeEntry(incoming, data.entries[idx]);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
data.entries.push(incoming);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
this.writeFile(data);
|
|
91
|
+
}
|
|
92
|
+
rename(currentName, newName) {
|
|
93
|
+
const data = this.readFile();
|
|
94
|
+
const idx = data.entries.findIndex((e) => e.name === currentName);
|
|
95
|
+
if (idx < 0) {
|
|
96
|
+
throw new RenameNotFoundError(currentName);
|
|
97
|
+
}
|
|
98
|
+
const liveEntries = data.entries.filter((e) => this.isAlive(e));
|
|
99
|
+
const conflict = liveEntries.find((e) => e.name === newName);
|
|
100
|
+
if (conflict) {
|
|
101
|
+
throw new RenameConflictError(newName);
|
|
102
|
+
}
|
|
103
|
+
const pruned = liveEntries.map((e) => e.name === currentName ? { ...e, name: newName } : e);
|
|
104
|
+
this.writeFile({ entries: pruned });
|
|
105
|
+
}
|
|
106
|
+
lookup(name) {
|
|
107
|
+
const data = this.readFile();
|
|
108
|
+
return data.entries.find((e) => e.name === name) ?? null;
|
|
109
|
+
}
|
|
110
|
+
list() {
|
|
111
|
+
return this.readFile().entries;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=AgentRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentRegistry.js","sourceRoot":"","sources":["../../src/utils/AgentRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ConversationMessage } from '../adapters/AgentAdapter';
|
|
2
|
-
import { AgentStatus } from '../adapters/AgentAdapter';
|
|
1
|
+
import type { ConversationMessage } from '../adapters/AgentAdapter.js';
|
|
2
|
+
import { AgentStatus } from '../adapters/AgentAdapter.js';
|
|
3
3
|
/**
|
|
4
4
|
* Content block within a Claude Code JSONL message entry.
|
|
5
5
|
* Handles text, tool_use, and tool_result block types.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeSessionParser.d.ts","sourceRoot":"","sources":["../../src/utils/ClaudeSessionParser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ClaudeSessionParser.d.ts","sourceRoot":"","sources":["../../src/utils/ClaudeSessionParser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;KACrC,CAAC;CACL;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAoBD;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAC5B;;;;;;;;OAQG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAmFxE;;;;;;;;;OASG;IACH,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW;IA6BpD;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IA6ChG;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;;;;;;;;OASG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAmCrC"}
|
|
@@ -1,44 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ClaudeSessionParser = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
const AgentAdapter_1 = require("../adapters/AgentAdapter");
|
|
40
|
-
/** Entry types that are metadata, not conversation state. */
|
|
41
|
-
const METADATA_ENTRY_TYPES = new Set(['last-prompt', 'file-history-snapshot']);
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { AgentStatus } from '../adapters/AgentAdapter.js';
|
|
4
|
+
/**
|
|
5
|
+
* Top-level JSONL entry types that represent conversation/agent state.
|
|
6
|
+
*
|
|
7
|
+
* Only these types update `lastEntryType` for status determination. All
|
|
8
|
+
* other types Claude Code emits (`attachment`, `permission-mode`,
|
|
9
|
+
* `ai-title`, `queued_command`, `tools_changed`, `model_changed`,
|
|
10
|
+
* `hook_progress`, …) are UI-state events that must not overwrite the
|
|
11
|
+
* last conversation turn — otherwise polling between writes lands on a
|
|
12
|
+
* UI-state entry and `determineStatus` falls through to UNKNOWN.
|
|
13
|
+
*/
|
|
14
|
+
const CONVERSATION_ENTRY_TYPES = new Set([
|
|
15
|
+
'user',
|
|
16
|
+
'assistant',
|
|
17
|
+
'system',
|
|
18
|
+
'progress',
|
|
19
|
+
'thinking',
|
|
20
|
+
]);
|
|
42
21
|
/**
|
|
43
22
|
* Parses Claude Code session JSONL files into structured data.
|
|
44
23
|
*
|
|
@@ -46,7 +25,7 @@ const METADATA_ENTRY_TYPES = new Set(['last-prompt', 'file-history-snapshot']);
|
|
|
46
25
|
* and contain one JSON object per line, each representing a conversation
|
|
47
26
|
* event (user turn, assistant response, tool call, etc.).
|
|
48
27
|
*/
|
|
49
|
-
class ClaudeSessionParser {
|
|
28
|
+
export class ClaudeSessionParser {
|
|
50
29
|
/**
|
|
51
30
|
* Parse a session JSONL file into a ClaudeSession summary.
|
|
52
31
|
*
|
|
@@ -88,7 +67,7 @@ class ClaudeSessionParser {
|
|
|
88
67
|
if (typeof entry.cwd === 'string' && entry.cwd.trim().length > 0) {
|
|
89
68
|
lastCwd = entry.cwd;
|
|
90
69
|
}
|
|
91
|
-
if (entry.type &&
|
|
70
|
+
if (entry.type && CONVERSATION_ENTRY_TYPES.has(entry.type)) {
|
|
92
71
|
lastEntryType = entry.type;
|
|
93
72
|
if (entry.type === 'user') {
|
|
94
73
|
const msgContent = entry.message?.content;
|
|
@@ -139,24 +118,24 @@ class ClaudeSessionParser {
|
|
|
139
118
|
*/
|
|
140
119
|
determineStatus(session) {
|
|
141
120
|
if (!session.lastEntryType) {
|
|
142
|
-
return
|
|
121
|
+
return AgentStatus.UNKNOWN;
|
|
143
122
|
}
|
|
144
123
|
if (session.lastEntryType === 'user') {
|
|
145
124
|
return session.isInterrupted
|
|
146
|
-
?
|
|
147
|
-
:
|
|
125
|
+
? AgentStatus.WAITING
|
|
126
|
+
: AgentStatus.RUNNING;
|
|
148
127
|
}
|
|
149
128
|
if (session.lastEntryType === 'progress' ||
|
|
150
129
|
session.lastEntryType === 'thinking') {
|
|
151
|
-
return
|
|
130
|
+
return AgentStatus.RUNNING;
|
|
152
131
|
}
|
|
153
132
|
if (session.lastEntryType === 'assistant') {
|
|
154
|
-
return
|
|
133
|
+
return AgentStatus.WAITING;
|
|
155
134
|
}
|
|
156
135
|
if (session.lastEntryType === 'system') {
|
|
157
|
-
return
|
|
136
|
+
return AgentStatus.IDLE;
|
|
158
137
|
}
|
|
159
|
-
return
|
|
138
|
+
return AgentStatus.UNKNOWN;
|
|
160
139
|
}
|
|
161
140
|
/**
|
|
162
141
|
* Read the full conversation from a session JSONL file.
|
|
@@ -183,19 +162,14 @@ class ClaudeSessionParser {
|
|
|
183
162
|
catch {
|
|
184
163
|
continue;
|
|
185
164
|
}
|
|
186
|
-
const entryType = entry.type;
|
|
187
|
-
if (!entryType || METADATA_ENTRY_TYPES.has(entryType))
|
|
188
|
-
continue;
|
|
189
|
-
if (entryType === 'progress' || entryType === 'thinking')
|
|
190
|
-
continue;
|
|
191
165
|
let role;
|
|
192
|
-
if (
|
|
166
|
+
if (entry.type === 'user') {
|
|
193
167
|
role = 'user';
|
|
194
168
|
}
|
|
195
|
-
else if (
|
|
169
|
+
else if (entry.type === 'assistant') {
|
|
196
170
|
role = 'assistant';
|
|
197
171
|
}
|
|
198
|
-
else if (
|
|
172
|
+
else if (entry.type === 'system') {
|
|
199
173
|
role = 'system';
|
|
200
174
|
}
|
|
201
175
|
else {
|
|
@@ -326,7 +300,6 @@ class ClaudeSessionParser {
|
|
|
326
300
|
return parts.length > 0 ? parts.join('\n') : undefined;
|
|
327
301
|
}
|
|
328
302
|
}
|
|
329
|
-
exports.ClaudeSessionParser = ClaudeSessionParser;
|
|
330
303
|
/**
|
|
331
304
|
* Tags whose entire block (including content) should be dropped — they are
|
|
332
305
|
* harness-injected prompt context (system reminders, hook output, command
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeSessionParser.js","sourceRoot":"","sources":["../../src/utils/ClaudeSessionParser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClaudeSessionParser.js","sourceRoot":"","sources":["../../src/utils/ClaudeSessionParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AgentType } from '../adapters/AgentAdapter.js';
|
|
2
|
+
export type StartableAgentType = Exclude<AgentType, 'other'>;
|
|
3
|
+
export interface AgentConfig {
|
|
4
|
+
/** Shell command to launch the agent (sent to tmux via `send-keys`). */
|
|
5
|
+
command: string;
|
|
6
|
+
/** Returns true if the given `ps` command line belongs to this agent. */
|
|
7
|
+
matches: (psCommand: string) => boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Per-agent configuration: launch command plus a matcher that recognizes the
|
|
11
|
+
* agent's process in `ps` output. Each matcher knows that agent's distribution
|
|
12
|
+
* quirks (e.g. gemini ships as a Node script so its real binary is in argv[1..]).
|
|
13
|
+
*/
|
|
14
|
+
export declare const AGENTS: Record<StartableAgentType, AgentConfig>;
|
|
15
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/utils/agents.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE7D,MAAM,WAAW,WAAW;IACxB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,WAAW,CAK1D,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
/**
|
|
3
|
+
* Per-agent configuration: launch command plus a matcher that recognizes the
|
|
4
|
+
* agent's process in `ps` output. Each matcher knows that agent's distribution
|
|
5
|
+
* quirks (e.g. gemini ships as a Node script so its real binary is in argv[1..]).
|
|
6
|
+
*/
|
|
7
|
+
export const AGENTS = {
|
|
8
|
+
claude: { command: 'claude', matches: matchArgv0('claude') },
|
|
9
|
+
codex: { command: 'codex', matches: matchArgv0('codex') },
|
|
10
|
+
opencode: { command: 'opencode', matches: matchArgv0('opencode') },
|
|
11
|
+
gemini_cli: { command: 'gemini', matches: matchAnyToken('gemini') },
|
|
12
|
+
};
|
|
13
|
+
function matchArgv0(name) {
|
|
14
|
+
const lower = name.toLowerCase();
|
|
15
|
+
return (psCommand) => {
|
|
16
|
+
const token = psCommand.trim().split(/\s+/)[0];
|
|
17
|
+
return token ? path.basename(token).toLowerCase() === lower : false;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function matchAnyToken(name) {
|
|
21
|
+
const lower = name.toLowerCase();
|
|
22
|
+
return (psCommand) => {
|
|
23
|
+
for (const token of psCommand.trim().split(/\s+/)) {
|
|
24
|
+
if (path.basename(token).toLowerCase() === lower)
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/utils/agents.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAYxB;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAA4C;IAC3D,MAAM,EAAM,EAAE,OAAO,EAAE,QAAQ,EAAI,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE;IAClE,KAAK,EAAO,EAAE,OAAO,EAAE,OAAO,EAAK,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE;IACjE,QAAQ,EAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE;IACpE,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAI,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE;CACxE,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,CAAC,SAAS,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACxE,CAAC,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,CAAC,SAAS,EAAE,EAAE;QACjB,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC;QAClE,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.escapeAppleScript = escapeAppleScript;
|
|
4
1
|
/**
|
|
5
2
|
* Escape a string for safe use inside an AppleScript double-quoted string.
|
|
6
3
|
* Backslashes, double quotes, and newlines must be escaped.
|
|
7
4
|
*/
|
|
8
|
-
function escapeAppleScript(text) {
|
|
5
|
+
export function escapeAppleScript(text) {
|
|
9
6
|
return text
|
|
10
7
|
.replace(/\\/g, '\\\\')
|
|
11
8
|
.replace(/"/g, '\\"')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applescript.js","sourceRoot":"","sources":["../../src/utils/applescript.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"applescript.js","sourceRoot":"","sources":["../../src/utils/applescript.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC1C,OAAO,IAAI;SACN,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses } from './process';
|
|
2
|
-
export { getProcessTty } from './process';
|
|
3
|
-
export { batchGetSessionFileBirthtimes } from './session';
|
|
4
|
-
export type { SessionFile } from './session';
|
|
5
|
-
export { matchProcessesToSessions, generateAgentName } from './matching';
|
|
6
|
-
export type { MatchResult } from './matching';
|
|
1
|
+
export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses } from './process.js';
|
|
2
|
+
export { getProcessTty } from './process.js';
|
|
3
|
+
export { batchGetSessionFileBirthtimes } from './session.js';
|
|
4
|
+
export type { SessionFile } from './session.js';
|
|
5
|
+
export { matchProcessesToSessions, generateAgentName } from './matching.js';
|
|
6
|
+
export type { MatchResult } from './matching.js';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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,
|
|
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;AACnH,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,16 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "listAgentProcesses", { enumerable: true, get: function () { return process_1.listAgentProcesses; } });
|
|
6
|
-
Object.defineProperty(exports, "batchGetProcessCwds", { enumerable: true, get: function () { return process_1.batchGetProcessCwds; } });
|
|
7
|
-
Object.defineProperty(exports, "batchGetProcessStartTimes", { enumerable: true, get: function () { return process_1.batchGetProcessStartTimes; } });
|
|
8
|
-
Object.defineProperty(exports, "enrichProcesses", { enumerable: true, get: function () { return process_1.enrichProcesses; } });
|
|
9
|
-
var process_2 = require("./process");
|
|
10
|
-
Object.defineProperty(exports, "getProcessTty", { enumerable: true, get: function () { return process_2.getProcessTty; } });
|
|
11
|
-
var session_1 = require("./session");
|
|
12
|
-
Object.defineProperty(exports, "batchGetSessionFileBirthtimes", { enumerable: true, get: function () { return session_1.batchGetSessionFileBirthtimes; } });
|
|
13
|
-
var matching_1 = require("./matching");
|
|
14
|
-
Object.defineProperty(exports, "matchProcessesToSessions", { enumerable: true, get: function () { return matching_1.matchProcessesToSessions; } });
|
|
15
|
-
Object.defineProperty(exports, "generateAgentName", { enumerable: true, get: function () { return matching_1.generateAgentName; } });
|
|
1
|
+
export { listAgentProcesses, batchGetProcessCwds, batchGetProcessStartTimes, enrichProcesses } from './process.js';
|
|
2
|
+
export { getProcessTty } from './process.js';
|
|
3
|
+
export { batchGetSessionFileBirthtimes } from './session.js';
|
|
4
|
+
export { matchProcessesToSessions, generateAgentName } from './matching.js';
|
|
16
5
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/utils/matching.d.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Shared 1:1 greedy matching algorithm that pairs running processes with session files
|
|
5
5
|
* based on CWD and birth-time proximity to process start time.
|
|
6
6
|
*/
|
|
7
|
-
import type { ProcessInfo } from '../adapters/AgentAdapter';
|
|
8
|
-
import type { SessionFile } from './session';
|
|
7
|
+
import type { ProcessInfo } from '../adapters/AgentAdapter.js';
|
|
8
|
+
import type { SessionFile } from './session.js';
|
|
9
9
|
/**
|
|
10
10
|
* Result of matching a process to a session file.
|
|
11
11
|
*/
|