@ai-devkit/agent-manager 0.35.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/adapters/AntigravityCliAdapter.test.js +381 -0
- package/dist/__tests__/adapters/AntigravityCliAdapter.test.js.map +1 -0
- package/dist/__tests__/adapters/KiroAdapter.test.js +607 -0
- package/dist/__tests__/adapters/KiroAdapter.test.js.map +1 -0
- package/dist/__tests__/capacity/claude.test.js +485 -0
- package/dist/__tests__/capacity/claude.test.js.map +1 -0
- package/dist/__tests__/capacity/openai.test.js +672 -0
- package/dist/__tests__/capacity/openai.test.js.map +1 -0
- package/dist/__tests__/capacity/wham.test.js +144 -0
- package/dist/__tests__/capacity/wham.test.js.map +1 -0
- package/dist/__tests__/utils/agents.test.js +6 -0
- package/dist/__tests__/utils/agents.test.js.map +1 -1
- package/dist/adapters/AgentAdapter.d.ts +1 -1
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/AgentAdapter.js.map +1 -1
- package/dist/adapters/AntigravityCliAdapter.d.ts +57 -0
- package/dist/adapters/AntigravityCliAdapter.d.ts.map +1 -0
- package/dist/adapters/AntigravityCliAdapter.js +273 -0
- package/dist/adapters/AntigravityCliAdapter.js.map +1 -0
- package/dist/adapters/KiroAdapter.d.ts +46 -0
- package/dist/adapters/KiroAdapter.d.ts.map +1 -0
- package/dist/adapters/KiroAdapter.js +344 -0
- package/dist/adapters/KiroAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +2 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/capacity/claude.d.ts +17 -0
- package/dist/capacity/claude.d.ts.map +1 -0
- package/dist/capacity/claude.js +271 -0
- package/dist/capacity/claude.js.map +1 -0
- package/dist/capacity/codex.d.ts +1 -2
- package/dist/capacity/codex.d.ts.map +1 -1
- package/dist/capacity/codex.js +5 -47
- package/dist/capacity/codex.js.map +1 -1
- package/dist/capacity/index.d.ts +11 -0
- package/dist/capacity/index.d.ts.map +1 -1
- package/dist/capacity/index.js +17 -0
- package/dist/capacity/index.js.map +1 -1
- package/dist/capacity/openai.d.ts +48 -0
- package/dist/capacity/openai.d.ts.map +1 -0
- package/dist/capacity/openai.js +312 -0
- package/dist/capacity/openai.js.map +1 -0
- package/dist/capacity/wham.d.ts +16 -0
- package/dist/capacity/wham.d.ts.map +1 -0
- package/dist/capacity/wham.js +66 -0
- package/dist/capacity/wham.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/readiness/AgentReadiness.d.ts +1 -1
- package/dist/readiness/AgentReadiness.d.ts.map +1 -1
- package/dist/readiness/AgentReadiness.js.map +1 -1
- package/dist/runtime/ManagedAgentRuntime.js +3 -1
- package/dist/runtime/ManagedAgentRuntime.js.map +1 -1
- package/dist/runtime/herdr/HerdrAgentDiscovery.js +10 -0
- package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -1
- package/dist/utils/agents.d.ts +1 -1
- package/dist/utils/agents.d.ts.map +1 -1
- package/dist/utils/agents.js +11 -0
- package/dist/utils/agents.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/adapters/AntigravityCliAdapter.test.ts +324 -0
- package/src/__tests__/adapters/KiroAdapter.test.ts +534 -0
- package/src/__tests__/capacity/claude.test.ts +467 -0
- package/src/__tests__/capacity/fixtures/claude-credentials.json +7 -0
- package/src/__tests__/capacity/fixtures/claude-usage-malformed.json +1 -0
- package/src/__tests__/capacity/fixtures/claude-usage-partial.json +15 -0
- package/src/__tests__/capacity/fixtures/claude-usage.json +63 -0
- package/src/__tests__/capacity/fixtures/openai-auth.json +6 -0
- package/src/__tests__/capacity/fixtures/openai-codex-auth.json +9 -0
- package/src/__tests__/capacity/fixtures/openai-usage-completions.json +67 -0
- package/src/__tests__/capacity/fixtures/openai-usage-responses.json +20 -0
- package/src/__tests__/capacity/fixtures/wham-usage.json +32 -0
- package/src/__tests__/capacity/openai.test.ts +570 -0
- package/src/__tests__/capacity/wham.test.ts +104 -0
- package/src/__tests__/utils/agents.test.ts +7 -0
- package/src/adapters/AgentAdapter.ts +2 -0
- package/src/adapters/AntigravityCliAdapter.ts +356 -0
- package/src/adapters/KiroAdapter.ts +456 -0
- package/src/adapters/index.ts +2 -0
- package/src/capacity/claude.ts +313 -0
- package/src/capacity/codex.ts +25 -134
- package/src/capacity/index.ts +33 -4
- package/src/capacity/openai.ts +361 -0
- package/src/capacity/wham.ts +84 -0
- package/src/index.ts +10 -1
- package/src/readiness/AgentReadiness.ts +4 -1
- package/src/runtime/ManagedAgentRuntime.ts +2 -0
- package/src/runtime/herdr/HerdrAgentDiscovery.ts +5 -1
- package/src/utils/agents.ts +11 -1
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kiro Adapter
|
|
3
|
+
*
|
|
4
|
+
* Detects running Kiro agents by matching process IDs from
|
|
5
|
+
* ~/.kiro/sessions/cli/<session-id>.lock to the sibling metadata and transcript files.
|
|
6
|
+
*/ import * as path from "path";
|
|
7
|
+
import { AgentStatus } from "./AgentAdapter.js";
|
|
8
|
+
import { captureProcessSnapshot, executableBasename, filterByProcessNames } from "../utils/process.js";
|
|
9
|
+
import { isDirectory, safeReadFile, safeReaddir, safeStat } from "../utils/session.js";
|
|
10
|
+
import { generateAgentName } from "../utils/matching.js";
|
|
11
|
+
const IDLE_THRESHOLD_MINUTES = 5;
|
|
12
|
+
const KIRO_BASENAMES = new Set([
|
|
13
|
+
"kiro-cli",
|
|
14
|
+
"kiro"
|
|
15
|
+
]);
|
|
16
|
+
const SCRIPT_RUNTIMES = new Set([
|
|
17
|
+
"node",
|
|
18
|
+
"bun"
|
|
19
|
+
]);
|
|
20
|
+
export class KiroAdapter {
|
|
21
|
+
type = "kiro";
|
|
22
|
+
processNames = [
|
|
23
|
+
"kiro-cli",
|
|
24
|
+
"kiro",
|
|
25
|
+
"kiro-cli-chat",
|
|
26
|
+
"node"
|
|
27
|
+
];
|
|
28
|
+
kiroSessionsDir;
|
|
29
|
+
constructor(){
|
|
30
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || "";
|
|
31
|
+
this.kiroSessionsDir = path.join(homeDir, ".kiro", "sessions", "cli");
|
|
32
|
+
}
|
|
33
|
+
canHandle(processInfo) {
|
|
34
|
+
return this.isKiroExecutable(processInfo.command);
|
|
35
|
+
}
|
|
36
|
+
async detectAgents(context) {
|
|
37
|
+
const snapshot = context?.processes ?? await captureProcessSnapshot(this.processNames);
|
|
38
|
+
const relevant = filterByProcessNames(snapshot, this.processNames);
|
|
39
|
+
const processes = relevant.filter((process1)=>this.canHandle(process1));
|
|
40
|
+
if (processes.length === 0) return [];
|
|
41
|
+
const collectedByPid = new Map(relevant.map((proc)=>[
|
|
42
|
+
proc.pid,
|
|
43
|
+
proc
|
|
44
|
+
]));
|
|
45
|
+
const matchedPids = new Set();
|
|
46
|
+
const agents = [];
|
|
47
|
+
for (const lock of this.discoverActiveLocks()){
|
|
48
|
+
const proc = this.resolveLockProcess(lock.pid, collectedByPid, processes);
|
|
49
|
+
if (!proc) continue;
|
|
50
|
+
const session = this.readSession(lock.sessionId, proc.cwd);
|
|
51
|
+
if (!session) continue;
|
|
52
|
+
agents.push(this.mapSessionToAgent(session, proc));
|
|
53
|
+
matchedPids.add(proc.pid);
|
|
54
|
+
}
|
|
55
|
+
for (const proc of processes){
|
|
56
|
+
if (!matchedPids.has(proc.pid)) {
|
|
57
|
+
agents.push(this.mapProcessOnlyAgent(proc));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return agents;
|
|
61
|
+
}
|
|
62
|
+
getConversation(sessionFilePath, options) {
|
|
63
|
+
return this.entriesToMessages(this.readJsonl(sessionFilePath), options?.verbose ?? false);
|
|
64
|
+
}
|
|
65
|
+
async listSessions(opts) {
|
|
66
|
+
if (!isDirectory(this.kiroSessionsDir)) return [];
|
|
67
|
+
const summaries = [];
|
|
68
|
+
for (const entry of safeReaddir(this.kiroSessionsDir)){
|
|
69
|
+
if (!entry.endsWith(".jsonl")) continue;
|
|
70
|
+
const sessionId = entry.slice(0, -".jsonl".length);
|
|
71
|
+
const session = this.readSession(sessionId);
|
|
72
|
+
if (!session) continue;
|
|
73
|
+
if (opts?.cwd !== undefined && session.projectPath !== opts.cwd) continue;
|
|
74
|
+
summaries.push({
|
|
75
|
+
type: this.type,
|
|
76
|
+
sessionId: session.sessionId,
|
|
77
|
+
cwd: session.projectPath,
|
|
78
|
+
firstUserMessage: session.firstUserMessage,
|
|
79
|
+
lastActive: session.lastActive,
|
|
80
|
+
startedAt: session.sessionStart,
|
|
81
|
+
sessionFilePath: session.filePath
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return summaries;
|
|
85
|
+
}
|
|
86
|
+
discoverActiveLocks() {
|
|
87
|
+
if (!isDirectory(this.kiroSessionsDir)) return [];
|
|
88
|
+
const locks = [];
|
|
89
|
+
for (const entry of safeReaddir(this.kiroSessionsDir)){
|
|
90
|
+
if (!entry.endsWith(".lock")) continue;
|
|
91
|
+
const content = safeReadFile(path.join(this.kiroSessionsDir, entry));
|
|
92
|
+
if (content === undefined) continue;
|
|
93
|
+
try {
|
|
94
|
+
const parsed = JSON.parse(content);
|
|
95
|
+
const record = this.asRecord(parsed);
|
|
96
|
+
const pid = this.toPid(record?.pid);
|
|
97
|
+
if (pid === null) continue;
|
|
98
|
+
locks.push({
|
|
99
|
+
sessionId: entry.slice(0, -".lock".length),
|
|
100
|
+
pid
|
|
101
|
+
});
|
|
102
|
+
} catch {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return locks;
|
|
107
|
+
}
|
|
108
|
+
readSession(sessionId, fallbackCwd = "") {
|
|
109
|
+
const filePath = path.join(this.kiroSessionsDir, `${sessionId}.jsonl`);
|
|
110
|
+
const stat = safeStat(filePath);
|
|
111
|
+
if (!stat?.isFile()) return null;
|
|
112
|
+
const entries = this.readJsonl(filePath);
|
|
113
|
+
const metadata = this.readMetadata(sessionId);
|
|
114
|
+
const messages = this.entriesToMessages(entries, false);
|
|
115
|
+
const userMessages = messages.filter((message)=>message.role === "user");
|
|
116
|
+
const timestamps = entries.map((entry)=>this.entryDate(entry)).filter((value)=>value !== null);
|
|
117
|
+
const sessionStart = metadata.createdAt ?? timestamps[0] ?? stat.birthtime ?? stat.mtime;
|
|
118
|
+
const lastActive = metadata.updatedAt ?? timestamps[timestamps.length - 1] ?? stat.mtime;
|
|
119
|
+
const lastEntry = entries[entries.length - 1];
|
|
120
|
+
return {
|
|
121
|
+
sessionId: metadata.sessionId || sessionId,
|
|
122
|
+
projectPath: metadata.cwd || fallbackCwd,
|
|
123
|
+
summary: this.truncate(userMessages.at(-1)?.content || metadata.title || "Kiro session active", 120),
|
|
124
|
+
firstUserMessage: userMessages[0]?.content ?? "",
|
|
125
|
+
sessionStart,
|
|
126
|
+
lastActive,
|
|
127
|
+
lastEventKind: lastEntry?.kind,
|
|
128
|
+
lastAssistantHasToolUse: lastEntry?.kind === "AssistantMessage" && this.hasContentKind(lastEntry, "toolUse"),
|
|
129
|
+
filePath
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
readMetadata(sessionId) {
|
|
133
|
+
const empty = {
|
|
134
|
+
sessionId,
|
|
135
|
+
cwd: "",
|
|
136
|
+
title: "",
|
|
137
|
+
createdAt: null,
|
|
138
|
+
updatedAt: null
|
|
139
|
+
};
|
|
140
|
+
const content = safeReadFile(path.join(this.kiroSessionsDir, `${sessionId}.json`));
|
|
141
|
+
if (content === undefined) return empty;
|
|
142
|
+
try {
|
|
143
|
+
const parsed = this.asRecord(JSON.parse(content));
|
|
144
|
+
if (!parsed) return empty;
|
|
145
|
+
return {
|
|
146
|
+
sessionId: this.firstString(parsed.session_id, parsed.sessionId) ?? sessionId,
|
|
147
|
+
cwd: this.firstString(parsed.cwd) ?? "",
|
|
148
|
+
title: this.firstString(parsed.title) ?? "",
|
|
149
|
+
createdAt: this.parseDate(parsed.created_at ?? parsed.createdAt),
|
|
150
|
+
updatedAt: this.parseDate(parsed.updated_at ?? parsed.updatedAt)
|
|
151
|
+
};
|
|
152
|
+
} catch {
|
|
153
|
+
return empty;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
readJsonl(filePath) {
|
|
157
|
+
const content = safeReadFile(filePath);
|
|
158
|
+
if (content === undefined) return [];
|
|
159
|
+
const entries = [];
|
|
160
|
+
for (const line of content.split(/\r?\n/)){
|
|
161
|
+
const trimmed = line.trim();
|
|
162
|
+
if (!trimmed) continue;
|
|
163
|
+
try {
|
|
164
|
+
const parsed = this.asRecord(JSON.parse(trimmed));
|
|
165
|
+
if (parsed) entries.push(parsed);
|
|
166
|
+
} catch {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return entries;
|
|
171
|
+
}
|
|
172
|
+
entriesToMessages(entries, verbose) {
|
|
173
|
+
const messages = [];
|
|
174
|
+
for (const entry of entries){
|
|
175
|
+
const message = this.entryToMessage(entry, verbose);
|
|
176
|
+
if (message) messages.push(message);
|
|
177
|
+
}
|
|
178
|
+
return messages;
|
|
179
|
+
}
|
|
180
|
+
entryToMessage(entry, verbose) {
|
|
181
|
+
let role;
|
|
182
|
+
let content;
|
|
183
|
+
if (entry.kind === "Prompt") {
|
|
184
|
+
role = "user";
|
|
185
|
+
content = this.textContent(entry);
|
|
186
|
+
} else if (entry.kind === "AssistantMessage") {
|
|
187
|
+
role = "assistant";
|
|
188
|
+
const parts = [
|
|
189
|
+
this.textContent(entry)
|
|
190
|
+
];
|
|
191
|
+
if (verbose) parts.push(...this.toolUseContent(entry));
|
|
192
|
+
content = parts.filter(Boolean).join("\n");
|
|
193
|
+
} else if (entry.kind === "ToolResults" && verbose) {
|
|
194
|
+
role = "system";
|
|
195
|
+
content = this.toolResultContent(entry).join("\n");
|
|
196
|
+
} else {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
if (!content) return null;
|
|
200
|
+
return {
|
|
201
|
+
role,
|
|
202
|
+
content,
|
|
203
|
+
timestamp: this.entryTimestamp(entry)
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
textContent(entry) {
|
|
207
|
+
return this.contentBlocks(entry).filter((block)=>block.kind === "text").map((block)=>typeof block.data === "string" ? block.data : "").filter(Boolean).join("");
|
|
208
|
+
}
|
|
209
|
+
toolUseContent(entry) {
|
|
210
|
+
return this.contentBlocks(entry).filter((block)=>block.kind === "toolUse").map((block)=>{
|
|
211
|
+
const data = this.asRecord(block.data);
|
|
212
|
+
const name = this.firstString(data?.name) ?? "unknown";
|
|
213
|
+
const input = this.formatValue(data?.input);
|
|
214
|
+
return `[Tool: ${name}]${input ? ` ${input}` : ""}`;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
toolResultContent(entry) {
|
|
218
|
+
return this.contentBlocks(entry).filter((block)=>block.kind === "toolResult").map((block)=>{
|
|
219
|
+
const data = this.asRecord(block.data);
|
|
220
|
+
const prefix = data?.status === "error" ? "[Tool Error]" : "[Tool Result]";
|
|
221
|
+
const result = this.formatValue(data?.result ?? data?.results ?? data?.content);
|
|
222
|
+
return `${prefix}${result ? ` ${result}` : ""}`;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
contentBlocks(entry) {
|
|
226
|
+
const content = entry.data?.content;
|
|
227
|
+
if (!Array.isArray(content)) return [];
|
|
228
|
+
return content.map((block)=>this.asRecord(block)).filter((block)=>block !== null);
|
|
229
|
+
}
|
|
230
|
+
hasContentKind(entry, kind) {
|
|
231
|
+
return this.contentBlocks(entry).some((block)=>block.kind === kind);
|
|
232
|
+
}
|
|
233
|
+
entryTimestamp(entry) {
|
|
234
|
+
const direct = this.firstString(entry.timestamp);
|
|
235
|
+
if (direct) return direct;
|
|
236
|
+
const meta = this.asRecord(entry.data?.meta);
|
|
237
|
+
const parsed = this.parseDate(meta?.timestamp);
|
|
238
|
+
return parsed?.toISOString();
|
|
239
|
+
}
|
|
240
|
+
entryDate(entry) {
|
|
241
|
+
return this.parseDate(this.entryTimestamp(entry));
|
|
242
|
+
}
|
|
243
|
+
mapSessionToAgent(session, processInfo) {
|
|
244
|
+
const projectPath = session.projectPath || processInfo.cwd || "";
|
|
245
|
+
return {
|
|
246
|
+
name: generateAgentName(projectPath, processInfo.pid),
|
|
247
|
+
type: this.type,
|
|
248
|
+
status: this.determineStatus(session),
|
|
249
|
+
summary: session.summary,
|
|
250
|
+
pid: processInfo.pid,
|
|
251
|
+
projectPath,
|
|
252
|
+
sessionId: session.sessionId,
|
|
253
|
+
lastActive: session.lastActive,
|
|
254
|
+
sessionFilePath: session.filePath
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
mapProcessOnlyAgent(processInfo) {
|
|
258
|
+
return {
|
|
259
|
+
name: generateAgentName(processInfo.cwd || "", processInfo.pid),
|
|
260
|
+
type: this.type,
|
|
261
|
+
status: AgentStatus.RUNNING,
|
|
262
|
+
summary: "Kiro process running",
|
|
263
|
+
pid: processInfo.pid,
|
|
264
|
+
projectPath: processInfo.cwd || "",
|
|
265
|
+
sessionId: `pid-${processInfo.pid}`,
|
|
266
|
+
lastActive: new Date()
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
determineStatus(session) {
|
|
270
|
+
const diffMinutes = (Date.now() - session.lastActive.getTime()) / 60000;
|
|
271
|
+
if (diffMinutes > IDLE_THRESHOLD_MINUTES) return AgentStatus.IDLE;
|
|
272
|
+
if (session.lastEventKind === "AssistantMessage" && !session.lastAssistantHasToolUse) {
|
|
273
|
+
return AgentStatus.WAITING;
|
|
274
|
+
}
|
|
275
|
+
return AgentStatus.RUNNING;
|
|
276
|
+
}
|
|
277
|
+
resolveLockProcess(lockPid, collectedByPid, topLevel) {
|
|
278
|
+
let current = collectedByPid.get(lockPid);
|
|
279
|
+
const seen = new Set();
|
|
280
|
+
let resolved = null;
|
|
281
|
+
while(current && !seen.has(current.pid)){
|
|
282
|
+
seen.add(current.pid);
|
|
283
|
+
if (this.canHandle(current)) resolved = current;
|
|
284
|
+
const parentPid = current.ppid;
|
|
285
|
+
current = parentPid === undefined ? undefined : collectedByPid.get(parentPid);
|
|
286
|
+
}
|
|
287
|
+
if (resolved) return resolved;
|
|
288
|
+
return this.matchSoleTopLevelOnTty(collectedByPid.get(lockPid)?.tty, topLevel);
|
|
289
|
+
}
|
|
290
|
+
matchSoleTopLevelOnTty(tty, topLevel) {
|
|
291
|
+
if (!tty || tty === "??" || tty === "?") return null;
|
|
292
|
+
const matches = topLevel.filter((proc)=>proc.tty === tty);
|
|
293
|
+
return matches.length === 1 ? matches[0] : null;
|
|
294
|
+
}
|
|
295
|
+
isKiroExecutable(command) {
|
|
296
|
+
const tokens = command.trim().split(/\s+/).filter(Boolean);
|
|
297
|
+
if (tokens.length === 0) return false;
|
|
298
|
+
const executable = this.kiroBasename(tokens[0]);
|
|
299
|
+
if (KIRO_BASENAMES.has(executable)) return true;
|
|
300
|
+
if (!SCRIPT_RUNTIMES.has(executable)) return false;
|
|
301
|
+
const script = tokens.slice(1).find((token)=>!token.startsWith("-"));
|
|
302
|
+
return script !== undefined && KIRO_BASENAMES.has(this.kiroBasename(script));
|
|
303
|
+
}
|
|
304
|
+
kiroBasename(token) {
|
|
305
|
+
return executableBasename(token).replace(/\.(exe|js)$/, "");
|
|
306
|
+
}
|
|
307
|
+
toPid(value) {
|
|
308
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value > 0) return value;
|
|
309
|
+
if (typeof value !== "string" || !/^\d+$/.test(value)) return null;
|
|
310
|
+
const parsed = Number(value);
|
|
311
|
+
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;
|
|
312
|
+
}
|
|
313
|
+
parseDate(value) {
|
|
314
|
+
if (typeof value === "number") {
|
|
315
|
+
const date = new Date(value < 1_000_000_000_000 ? value * 1000 : value);
|
|
316
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
317
|
+
}
|
|
318
|
+
if (typeof value !== "string" || !value) return null;
|
|
319
|
+
const date = new Date(value);
|
|
320
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
321
|
+
}
|
|
322
|
+
firstString(...values) {
|
|
323
|
+
return values.find((value)=>typeof value === "string" && value.length > 0);
|
|
324
|
+
}
|
|
325
|
+
asRecord(value) {
|
|
326
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
327
|
+
return value;
|
|
328
|
+
}
|
|
329
|
+
formatValue(value) {
|
|
330
|
+
if (typeof value === "string") return value;
|
|
331
|
+
if (value === undefined || value === null) return "";
|
|
332
|
+
try {
|
|
333
|
+
return JSON.stringify(value);
|
|
334
|
+
} catch {
|
|
335
|
+
return "";
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
truncate(value, maxLength) {
|
|
339
|
+
if (value.length <= maxLength) return value;
|
|
340
|
+
return `${value.slice(0, maxLength - 3)}...`;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
//# sourceMappingURL=KiroAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/KiroAdapter.ts"],"sourcesContent":["/**\n * Kiro Adapter\n *\n * Detects running Kiro agents by matching process IDs from\n * ~/.kiro/sessions/cli/<session-id>.lock to the sibling metadata and transcript files.\n */\n\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 {\n captureProcessSnapshot,\n executableBasename,\n filterByProcessNames,\n} from \"../utils/process.js\";\nimport { isDirectory, safeReadFile, safeReaddir, safeStat } from \"../utils/session.js\";\nimport { generateAgentName } from \"../utils/matching.js\";\n\ntype KiroRecord = Record<string, unknown>;\n\ninterface KiroMetadata {\n sessionId: string;\n cwd: string;\n title: string;\n createdAt: Date | null;\n updatedAt: Date | null;\n}\n\ninterface KiroLine {\n kind?: string;\n timestamp?: string;\n data?: KiroRecord;\n}\n\ninterface KiroSession {\n sessionId: string;\n projectPath: string;\n summary: string;\n firstUserMessage: string;\n sessionStart: Date;\n lastActive: Date;\n lastEventKind?: string;\n lastAssistantHasToolUse: boolean;\n filePath: string;\n}\n\ninterface KiroLock {\n sessionId: string;\n pid: number;\n}\n\nconst IDLE_THRESHOLD_MINUTES = 5;\nconst KIRO_BASENAMES = new Set([\"kiro-cli\", \"kiro\"]);\nconst SCRIPT_RUNTIMES = new Set([\"node\", \"bun\"]);\n\nexport class KiroAdapter implements AgentAdapter {\n readonly type = \"kiro\" as const;\n readonly processNames = [\"kiro-cli\", \"kiro\", \"kiro-cli-chat\", \"node\"] as const;\n\n private kiroSessionsDir: string;\n\n constructor() {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.kiroSessionsDir = path.join(homeDir, \".kiro\", \"sessions\", \"cli\");\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return this.isKiroExecutable(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 = relevant.filter((process) => this.canHandle(process));\n if (processes.length === 0) return [];\n\n const collectedByPid = new Map(relevant.map((proc) => [proc.pid, proc]));\n const matchedPids = new Set<number>();\n const agents: AgentInfo[] = [];\n\n for (const lock of this.discoverActiveLocks()) {\n const proc = this.resolveLockProcess(lock.pid, collectedByPid, processes);\n if (!proc) continue;\n\n const session = this.readSession(lock.sessionId, proc.cwd);\n if (!session) continue;\n\n agents.push(this.mapSessionToAgent(session, proc));\n matchedPids.add(proc.pid);\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 getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n return this.entriesToMessages(this.readJsonl(sessionFilePath), options?.verbose ?? false);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n if (!isDirectory(this.kiroSessionsDir)) return [];\n\n const summaries: SessionSummary[] = [];\n for (const entry of safeReaddir(this.kiroSessionsDir)) {\n if (!entry.endsWith(\".jsonl\")) continue;\n\n const sessionId = entry.slice(0, -\".jsonl\".length);\n const session = this.readSession(sessionId);\n if (!session) continue;\n if (opts?.cwd !== undefined && session.projectPath !== opts.cwd) continue;\n\n summaries.push({\n type: this.type,\n sessionId: session.sessionId,\n cwd: session.projectPath,\n firstUserMessage: session.firstUserMessage,\n lastActive: session.lastActive,\n startedAt: session.sessionStart,\n sessionFilePath: session.filePath,\n });\n }\n return summaries;\n }\n\n private discoverActiveLocks(): KiroLock[] {\n if (!isDirectory(this.kiroSessionsDir)) return [];\n\n const locks: KiroLock[] = [];\n for (const entry of safeReaddir(this.kiroSessionsDir)) {\n if (!entry.endsWith(\".lock\")) continue;\n\n const content = safeReadFile(path.join(this.kiroSessionsDir, entry));\n if (content === undefined) continue;\n\n try {\n const parsed = JSON.parse(content) as unknown;\n const record = this.asRecord(parsed);\n const pid = this.toPid(record?.pid);\n if (pid === null) continue;\n\n locks.push({\n sessionId: entry.slice(0, -\".lock\".length),\n pid,\n });\n } catch {\n continue;\n }\n }\n return locks;\n }\n\n private readSession(sessionId: string, fallbackCwd = \"\"): KiroSession | null {\n const filePath = path.join(this.kiroSessionsDir, `${sessionId}.jsonl`);\n const stat = safeStat(filePath);\n if (!stat?.isFile()) return null;\n\n const entries = this.readJsonl(filePath);\n const metadata = this.readMetadata(sessionId);\n const messages = this.entriesToMessages(entries, false);\n const userMessages = messages.filter((message) => message.role === \"user\");\n const timestamps = entries\n .map((entry) => this.entryDate(entry))\n .filter((value): value is Date => value !== null);\n const sessionStart = metadata.createdAt ?? timestamps[0] ?? stat.birthtime ?? stat.mtime;\n const lastActive = metadata.updatedAt ?? timestamps[timestamps.length - 1] ?? stat.mtime;\n const lastEntry = entries[entries.length - 1];\n\n return {\n sessionId: metadata.sessionId || sessionId,\n projectPath: metadata.cwd || fallbackCwd,\n summary: this.truncate(\n userMessages.at(-1)?.content || metadata.title || \"Kiro session active\",\n 120,\n ),\n firstUserMessage: userMessages[0]?.content ?? \"\",\n sessionStart,\n lastActive,\n lastEventKind: lastEntry?.kind,\n lastAssistantHasToolUse:\n lastEntry?.kind === \"AssistantMessage\" && this.hasContentKind(lastEntry, \"toolUse\"),\n filePath,\n };\n }\n\n private readMetadata(sessionId: string): KiroMetadata {\n const empty: KiroMetadata = {\n sessionId,\n cwd: \"\",\n title: \"\",\n createdAt: null,\n updatedAt: null,\n };\n const content = safeReadFile(path.join(this.kiroSessionsDir, `${sessionId}.json`));\n if (content === undefined) return empty;\n\n try {\n const parsed = this.asRecord(JSON.parse(content));\n if (!parsed) return empty;\n return {\n sessionId: this.firstString(parsed.session_id, parsed.sessionId) ?? sessionId,\n cwd: this.firstString(parsed.cwd) ?? \"\",\n title: this.firstString(parsed.title) ?? \"\",\n createdAt: this.parseDate(parsed.created_at ?? parsed.createdAt),\n updatedAt: this.parseDate(parsed.updated_at ?? parsed.updatedAt),\n };\n } catch {\n return empty;\n }\n }\n\n private readJsonl(filePath: string): KiroLine[] {\n const content = safeReadFile(filePath);\n if (content === undefined) return [];\n\n const entries: KiroLine[] = [];\n for (const line of content.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = this.asRecord(JSON.parse(trimmed));\n if (parsed) entries.push(parsed as KiroLine);\n } catch {\n continue;\n }\n }\n return entries;\n }\n\n private entriesToMessages(entries: KiroLine[], verbose: boolean): ConversationMessage[] {\n const messages: ConversationMessage[] = [];\n for (const entry of entries) {\n const message = this.entryToMessage(entry, verbose);\n if (message) messages.push(message);\n }\n return messages;\n }\n\n private entryToMessage(entry: KiroLine, verbose: boolean): ConversationMessage | null {\n let role: ConversationMessage[\"role\"];\n let content: string;\n\n if (entry.kind === \"Prompt\") {\n role = \"user\";\n content = this.textContent(entry);\n } else if (entry.kind === \"AssistantMessage\") {\n role = \"assistant\";\n const parts = [this.textContent(entry)];\n if (verbose) parts.push(...this.toolUseContent(entry));\n content = parts.filter(Boolean).join(\"\\n\");\n } else if (entry.kind === \"ToolResults\" && verbose) {\n role = \"system\";\n content = this.toolResultContent(entry).join(\"\\n\");\n } else {\n return null;\n }\n\n if (!content) return null;\n return {\n role,\n content,\n timestamp: this.entryTimestamp(entry),\n };\n }\n\n private textContent(entry: KiroLine): string {\n return this.contentBlocks(entry)\n .filter((block) => block.kind === \"text\")\n .map((block) => (typeof block.data === \"string\" ? block.data : \"\"))\n .filter(Boolean)\n .join(\"\");\n }\n\n private toolUseContent(entry: KiroLine): string[] {\n return this.contentBlocks(entry)\n .filter((block) => block.kind === \"toolUse\")\n .map((block) => {\n const data = this.asRecord(block.data);\n const name = this.firstString(data?.name) ?? \"unknown\";\n const input = this.formatValue(data?.input);\n return `[Tool: ${name}]${input ? ` ${input}` : \"\"}`;\n });\n }\n\n private toolResultContent(entry: KiroLine): string[] {\n return this.contentBlocks(entry)\n .filter((block) => block.kind === \"toolResult\")\n .map((block) => {\n const data = this.asRecord(block.data);\n const prefix = data?.status === \"error\" ? \"[Tool Error]\" : \"[Tool Result]\";\n const result = this.formatValue(data?.result ?? data?.results ?? data?.content);\n return `${prefix}${result ? ` ${result}` : \"\"}`;\n });\n }\n\n private contentBlocks(entry: KiroLine): Array<{ kind?: string; data?: unknown }> {\n const content = entry.data?.content;\n if (!Array.isArray(content)) return [];\n return content\n .map((block) => this.asRecord(block))\n .filter((block): block is KiroRecord => block !== null);\n }\n\n private hasContentKind(entry: KiroLine, kind: string): boolean {\n return this.contentBlocks(entry).some((block) => block.kind === kind);\n }\n\n private entryTimestamp(entry: KiroLine): string | undefined {\n const direct = this.firstString(entry.timestamp);\n if (direct) return direct;\n\n const meta = this.asRecord(entry.data?.meta);\n const parsed = this.parseDate(meta?.timestamp);\n return parsed?.toISOString();\n }\n\n private entryDate(entry: KiroLine): Date | null {\n return this.parseDate(this.entryTimestamp(entry));\n }\n\n private mapSessionToAgent(session: KiroSession, processInfo: ProcessInfo): 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,\n pid: processInfo.pid,\n projectPath,\n sessionId: session.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: session.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: \"Kiro 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: KiroSession): AgentStatus {\n const diffMinutes = (Date.now() - session.lastActive.getTime()) / 60000;\n if (diffMinutes > IDLE_THRESHOLD_MINUTES) return AgentStatus.IDLE;\n if (session.lastEventKind === \"AssistantMessage\" && !session.lastAssistantHasToolUse) {\n return AgentStatus.WAITING;\n }\n return AgentStatus.RUNNING;\n }\n\n private resolveLockProcess(\n lockPid: number,\n collectedByPid: Map<number, ProcessInfo>,\n topLevel: ProcessInfo[],\n ): ProcessInfo | null {\n let current = collectedByPid.get(lockPid);\n const seen = new Set<number>();\n let resolved: ProcessInfo | null = null;\n\n while (current && !seen.has(current.pid)) {\n seen.add(current.pid);\n if (this.canHandle(current)) resolved = current;\n\n const parentPid = current.ppid;\n current = parentPid === undefined ? undefined : collectedByPid.get(parentPid);\n }\n\n if (resolved) return resolved;\n return this.matchSoleTopLevelOnTty(collectedByPid.get(lockPid)?.tty, topLevel);\n }\n\n private matchSoleTopLevelOnTty(\n tty: string | undefined,\n topLevel: readonly ProcessInfo[],\n ): ProcessInfo | null {\n if (!tty || tty === \"??\" || tty === \"?\") return null;\n const matches = topLevel.filter((proc) => proc.tty === tty);\n return matches.length === 1 ? matches[0] : null;\n }\n\n private isKiroExecutable(command: string): boolean {\n const tokens = command.trim().split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) return false;\n\n const executable = this.kiroBasename(tokens[0]);\n if (KIRO_BASENAMES.has(executable)) return true;\n if (!SCRIPT_RUNTIMES.has(executable)) return false;\n\n const script = tokens.slice(1).find((token) => !token.startsWith(\"-\"));\n return script !== undefined && KIRO_BASENAMES.has(this.kiroBasename(script));\n }\n\n private kiroBasename(token: string): string {\n return executableBasename(token).replace(/\\.(exe|js)$/, \"\");\n }\n\n private toPid(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isSafeInteger(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 parseDate(value: unknown): Date | null {\n if (typeof value === \"number\") {\n const date = new Date(value < 1_000_000_000_000 ? value * 1000 : value);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n if (typeof value !== \"string\" || !value) return null;\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n\n private firstString(...values: unknown[]): string | undefined {\n return values.find((value): value is string => typeof value === \"string\" && value.length > 0);\n }\n\n private asRecord(value: unknown): KiroRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as KiroRecord;\n }\n\n private formatValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value === undefined || value === null) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return \"\";\n }\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"],"names":["path","AgentStatus","captureProcessSnapshot","executableBasename","filterByProcessNames","isDirectory","safeReadFile","safeReaddir","safeStat","generateAgentName","IDLE_THRESHOLD_MINUTES","KIRO_BASENAMES","Set","SCRIPT_RUNTIMES","KiroAdapter","type","processNames","kiroSessionsDir","homeDir","process","env","HOME","USERPROFILE","join","canHandle","processInfo","isKiroExecutable","command","detectAgents","context","snapshot","processes","relevant","filter","length","collectedByPid","Map","map","proc","pid","matchedPids","agents","lock","discoverActiveLocks","resolveLockProcess","session","readSession","sessionId","cwd","push","mapSessionToAgent","add","has","mapProcessOnlyAgent","getConversation","sessionFilePath","options","entriesToMessages","readJsonl","verbose","listSessions","opts","summaries","entry","endsWith","slice","undefined","projectPath","firstUserMessage","lastActive","startedAt","sessionStart","filePath","locks","content","parsed","JSON","parse","record","asRecord","toPid","fallbackCwd","stat","isFile","entries","metadata","readMetadata","messages","userMessages","message","role","timestamps","entryDate","value","createdAt","birthtime","mtime","updatedAt","lastEntry","summary","truncate","at","title","lastEventKind","kind","lastAssistantHasToolUse","hasContentKind","empty","firstString","session_id","parseDate","created_at","updated_at","line","split","trimmed","trim","entryToMessage","textContent","parts","toolUseContent","Boolean","toolResultContent","timestamp","entryTimestamp","contentBlocks","block","data","name","input","formatValue","prefix","status","result","results","Array","isArray","some","direct","meta","toISOString","determineStatus","RUNNING","Date","diffMinutes","now","getTime","IDLE","WAITING","lockPid","topLevel","current","get","seen","resolved","parentPid","ppid","matchSoleTopLevelOnTty","tty","matches","tokens","executable","kiroBasename","script","find","token","startsWith","replace","Number","isSafeInteger","test","date","isNaN","values","stringify","maxLength"],"mappings":"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"}
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export { CodexAdapter } from "../providers/codex/CodexAdapter.js";
|
|
|
3
3
|
export { CopilotAdapter } from "../providers/copilot/CopilotAdapter.js";
|
|
4
4
|
export { GeminiCliAdapter } from "../providers/gemini/GeminiCliAdapter.js";
|
|
5
5
|
export { GrokCliAdapter } from "../providers/grok/GrokCliAdapter.js";
|
|
6
|
+
export { AntigravityCliAdapter } from "./AntigravityCliAdapter.js";
|
|
7
|
+
export { KiroAdapter } from "./KiroAdapter.js";
|
|
6
8
|
export { OpenCodeAdapter } from "../providers/opencode/OpenCodeAdapter.js";
|
|
7
9
|
export { PiAdapter } from "../providers/pi/PiAdapter.js";
|
|
8
10
|
export { AgentStatus } from "./AgentAdapter.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -3,6 +3,8 @@ export { CodexAdapter } from "../providers/codex/CodexAdapter.js";
|
|
|
3
3
|
export { CopilotAdapter } from "../providers/copilot/CopilotAdapter.js";
|
|
4
4
|
export { GeminiCliAdapter } from "../providers/gemini/GeminiCliAdapter.js";
|
|
5
5
|
export { GrokCliAdapter } from "../providers/grok/GrokCliAdapter.js";
|
|
6
|
+
export { AntigravityCliAdapter } from "./AntigravityCliAdapter.js";
|
|
7
|
+
export { KiroAdapter } from "./KiroAdapter.js";
|
|
6
8
|
export { OpenCodeAdapter } from "../providers/opencode/OpenCodeAdapter.js";
|
|
7
9
|
export { PiAdapter } from "../providers/pi/PiAdapter.js";
|
|
8
10
|
export { AgentStatus } from "./AgentAdapter.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/index.ts"],"sourcesContent":["export { ClaudeCodeAdapter } from \"../providers/claude/ClaudeCodeAdapter.js\";\nexport { CodexAdapter } from \"../providers/codex/CodexAdapter.js\";\nexport { CopilotAdapter } from \"../providers/copilot/CopilotAdapter.js\";\nexport { GeminiCliAdapter } from \"../providers/gemini/GeminiCliAdapter.js\";\nexport { GrokCliAdapter } from \"../providers/grok/GrokCliAdapter.js\";\nexport { OpenCodeAdapter } from \"../providers/opencode/OpenCodeAdapter.js\";\nexport { PiAdapter } from \"../providers/pi/PiAdapter.js\";\nexport { AgentStatus } from \"./AgentAdapter.js\";\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n AgentDetectionContext,\n} from \"./AgentAdapter.js\";\n"],"names":["ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,2CAA2C;AAC7E,SAASC,YAAY,QAAQ,qCAAqC;AAClE,SAASC,cAAc,QAAQ,yCAAyC;AACxE,SAASC,gBAAgB,QAAQ,0CAA0C;AAC3E,SAASC,cAAc,QAAQ,sCAAsC;AACrE,SAASC,eAAe,QAAQ,2CAA2C;AAC3E,SAASC,SAAS,QAAQ,+BAA+B;AACzD,SAASC,WAAW,QAAQ,oBAAoB"}
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/index.ts"],"sourcesContent":["export { ClaudeCodeAdapter } from \"../providers/claude/ClaudeCodeAdapter.js\";\nexport { CodexAdapter } from \"../providers/codex/CodexAdapter.js\";\nexport { CopilotAdapter } from \"../providers/copilot/CopilotAdapter.js\";\nexport { GeminiCliAdapter } from \"../providers/gemini/GeminiCliAdapter.js\";\nexport { GrokCliAdapter } from \"../providers/grok/GrokCliAdapter.js\";\nexport { AntigravityCliAdapter } from \"./AntigravityCliAdapter.js\";\nexport { KiroAdapter } from \"./KiroAdapter.js\";\nexport { OpenCodeAdapter } from \"../providers/opencode/OpenCodeAdapter.js\";\nexport { PiAdapter } from \"../providers/pi/PiAdapter.js\";\nexport { AgentStatus } from \"./AgentAdapter.js\";\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n AgentDetectionContext,\n} from \"./AgentAdapter.js\";\n"],"names":["ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","AntigravityCliAdapter","KiroAdapter","OpenCodeAdapter","PiAdapter","AgentStatus"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,2CAA2C;AAC7E,SAASC,YAAY,QAAQ,qCAAqC;AAClE,SAASC,cAAc,QAAQ,yCAAyC;AACxE,SAASC,gBAAgB,QAAQ,0CAA0C;AAC3E,SAASC,cAAc,QAAQ,sCAAsC;AACrE,SAASC,qBAAqB,QAAQ,6BAA6B;AACnE,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,eAAe,QAAQ,2CAA2C;AAC3E,SAASC,SAAS,QAAQ,+BAA+B;AACzD,SAASC,WAAW,QAAQ,oBAAoB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CapacityReport } from "./types.js";
|
|
2
|
+
export type ClaudeCapacityOptions = {
|
|
3
|
+
env?: NodeJS.ProcessEnv;
|
|
4
|
+
readFile?: (path: string, encoding: BufferEncoding) => Promise<string>;
|
|
5
|
+
fetch?: typeof globalThis.fetch;
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
now?: () => Date;
|
|
8
|
+
cwd?: string;
|
|
9
|
+
platform?: NodeJS.Platform;
|
|
10
|
+
keychainRead?: (service: string) => Promise<string | null>;
|
|
11
|
+
};
|
|
12
|
+
export type ClaudeProbeOptions = ClaudeCapacityOptions & {
|
|
13
|
+
checkedAt: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function parseClaudeUsage(raw: unknown, checkedAt: string): CapacityReport;
|
|
16
|
+
export declare function probeClaudeCapacity(options: ClaudeProbeOptions): Promise<CapacityReport>;
|
|
17
|
+
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/capacity/claude.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,cAAc,EAAkB,MAAM,YAAY,CAAC;AAI/E,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,GAAG;IACvD,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAyNF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAyBhF;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CA8C9F"}
|