ds-harness-remote 0.4.27 → 0.5.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/README.md +3 -3
- package/dist/acp/adapter.d.ts +19 -0
- package/dist/acp/adapter.d.ts.map +1 -0
- package/dist/acp/adapter.js +14 -0
- package/dist/acp/adapter.js.map +1 -0
- package/dist/acp/adapters/antigravity/executor.d.ts +20 -0
- package/dist/acp/adapters/antigravity/executor.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/executor.js +99 -0
- package/dist/acp/adapters/antigravity/executor.js.map +1 -0
- package/dist/acp/adapters/antigravity/image-store.d.ts +9 -0
- package/dist/acp/adapters/antigravity/image-store.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/image-store.js +116 -0
- package/dist/acp/adapters/antigravity/image-store.js.map +1 -0
- package/dist/acp/adapters/antigravity/index.d.ts +5 -0
- package/dist/acp/adapters/antigravity/index.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/index.js +5 -0
- package/dist/acp/adapters/antigravity/index.js.map +1 -0
- package/dist/acp/adapters/antigravity/models.d.ts +35 -0
- package/dist/acp/adapters/antigravity/models.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/models.js +59 -0
- package/dist/acp/adapters/antigravity/models.js.map +1 -0
- package/dist/acp/adapters/antigravity/service.d.ts +35 -0
- package/dist/acp/adapters/antigravity/service.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/service.js +67 -0
- package/dist/acp/adapters/antigravity/service.js.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-loader.d.ts +21 -0
- package/dist/acp/adapters/antigravity/transcript-loader.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-loader.js +356 -0
- package/dist/acp/adapters/antigravity/transcript-loader.js.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.d.ts +28 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.js +157 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.js.map +1 -0
- package/dist/acp/adapters/antigravity/types.d.ts +56 -0
- package/dist/acp/adapters/antigravity/types.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/types.js +2 -0
- package/dist/acp/adapters/antigravity/types.js.map +1 -0
- package/dist/acp/adapters/antigravity-process.d.ts +69 -0
- package/dist/acp/adapters/antigravity-process.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity-process.js +566 -0
- package/dist/acp/adapters/antigravity-process.js.map +1 -0
- package/dist/acp/adapters/antigravity.d.ts +8 -0
- package/dist/acp/adapters/antigravity.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity.js +9 -0
- package/dist/acp/adapters/antigravity.js.map +1 -0
- package/dist/acp/adapters/cursor-process.d.ts +75 -0
- package/dist/acp/adapters/cursor-process.d.ts.map +1 -0
- package/dist/acp/adapters/cursor-process.js +273 -0
- package/dist/acp/adapters/cursor-process.js.map +1 -0
- package/dist/acp/adapters/cursor.d.ts +8 -0
- package/dist/acp/adapters/cursor.d.ts.map +1 -0
- package/dist/acp/adapters/cursor.js +8 -0
- package/dist/acp/adapters/cursor.js.map +1 -0
- package/dist/acp/gateway.d.ts +108 -0
- package/dist/acp/gateway.d.ts.map +1 -0
- package/dist/acp/gateway.js +1040 -0
- package/dist/acp/gateway.js.map +1 -0
- package/dist/acp/image-content.d.ts +19 -0
- package/dist/acp/image-content.d.ts.map +1 -0
- package/dist/acp/image-content.js +76 -0
- package/dist/acp/image-content.js.map +1 -0
- package/dist/acp/method-policy.d.ts +239 -0
- package/dist/acp/method-policy.d.ts.map +1 -0
- package/dist/acp/method-policy.js +102 -0
- package/dist/acp/method-policy.js.map +1 -0
- package/dist/acp/peer-bridge.d.ts +59 -0
- package/dist/acp/peer-bridge.d.ts.map +1 -0
- package/dist/acp/peer-bridge.js +367 -0
- package/dist/acp/peer-bridge.js.map +1 -0
- package/dist/acp/virtual-harness.d.ts +181 -0
- package/dist/acp/virtual-harness.d.ts.map +1 -0
- package/dist/acp/virtual-harness.js +1556 -0
- package/dist/acp/virtual-harness.js.map +1 -0
- package/dist/acp/workspace-tools.d.ts +13 -0
- package/dist/acp/workspace-tools.d.ts.map +1 -0
- package/dist/acp/workspace-tools.js +46 -0
- package/dist/acp/workspace-tools.js.map +1 -0
- package/dist/acp.d.ts.map +1 -1
- package/dist/acp.js +1 -0
- package/dist/acp.js.map +1 -1
- package/dist/api-proxy-switch.d.ts +2 -0
- package/dist/api-proxy-switch.d.ts.map +1 -1
- package/dist/api-proxy-switch.js +9 -0
- package/dist/api-proxy-switch.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/client-runtime.d.ts +14 -1
- package/dist/client-runtime.d.ts.map +1 -1
- package/dist/client-runtime.js +160 -8
- package/dist/client-runtime.js.map +1 -1
- package/dist/client.github.js +312 -142
- package/dist/client.js +312 -142
- package/dist/client.js.map +1 -1
- package/dist/codex/domain.d.ts +4 -1
- package/dist/codex/domain.d.ts.map +1 -1
- package/dist/codex/domain.js +32 -4
- package/dist/codex/domain.js.map +1 -1
- package/dist/codex/virtual-harness.d.ts.map +1 -1
- package/dist/codex/virtual-harness.js +3 -0
- package/dist/codex/virtual-harness.js.map +1 -1
- package/dist/codex-workspace-bridge.d.ts +7 -105
- package/dist/codex-workspace-bridge.d.ts.map +1 -1
- package/dist/codex-workspace-bridge.js +10 -498
- package/dist/codex-workspace-bridge.js.map +1 -1
- package/dist/config.d.ts +22 -10
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +45 -4
- package/dist/config.js.map +1 -1
- package/dist/connection-controller.d.ts.map +1 -1
- package/dist/connection-controller.js +7 -4
- package/dist/connection-controller.js.map +1 -1
- package/dist/control-runtime.d.ts +1 -0
- package/dist/control-runtime.d.ts.map +1 -1
- package/dist/control-runtime.js +49 -9
- package/dist/control-runtime.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13173 -8303
- package/dist/index.js.map +4 -4
- package/dist/remote-typert-gateway.d.ts.map +1 -1
- package/dist/remote-typert-gateway.js +7 -4
- package/dist/remote-typert-gateway.js.map +1 -1
- package/dist/rpc-router.d.ts +6 -5
- package/dist/rpc-router.d.ts.map +1 -1
- package/dist/rpc-router.js +49 -18
- package/dist/rpc-router.js.map +1 -1
- package/dist/server-connection.js +7 -0
- package/dist/server-connection.js.map +1 -1
- package/dist/service.d.ts +26 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +97 -9
- package/dist/service.js.map +1 -1
- package/dist/session-format-compat.d.ts +1 -0
- package/dist/session-format-compat.d.ts.map +1 -1
- package/dist/session-format-compat.js +14 -0
- package/dist/session-format-compat.js.map +1 -1
- package/dist/tui-command.js +2 -0
- package/dist/tui-command.js.map +1 -1
- package/dist/typert-gateway-switch.d.ts +2 -0
- package/dist/typert-gateway-switch.d.ts.map +1 -1
- package/dist/typert-gateway-switch.js +16 -0
- package/dist/typert-gateway-switch.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workspace-bridge.d.ts +117 -0
- package/dist/workspace-bridge.d.ts.map +1 -0
- package/dist/workspace-bridge.js +512 -0
- package/dist/workspace-bridge.js.map +1 -0
- package/dsh-plugin.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { AGY_IMAGE_ROOT, stripAgyImageReferences, agyImageReferences, readAgyImage } from './image-store.js';
|
|
2
|
+
import { promises as fs } from 'node:fs';
|
|
3
|
+
import { MAX_AGENT_ACP_TRANSFER_BYTES } from '@dsh-remote/protocol';
|
|
4
|
+
import { isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { homedir } from 'node:os';
|
|
7
|
+
export function cleanUserPrompt(raw) {
|
|
8
|
+
if (!raw)
|
|
9
|
+
return '';
|
|
10
|
+
raw = stripAgyImageReferences(raw);
|
|
11
|
+
const match = raw.match(/<USER_REQUEST>([\s\S]*?)<\/USER_REQUEST>/);
|
|
12
|
+
if (match && match[1]) {
|
|
13
|
+
return match[1].trim();
|
|
14
|
+
}
|
|
15
|
+
return raw.trim();
|
|
16
|
+
}
|
|
17
|
+
export async function loadTranscriptEvents(conversationId, sessionId, baseDir = join(homedir(), '.gemini/antigravity-cli/brain')) {
|
|
18
|
+
let content = '';
|
|
19
|
+
try {
|
|
20
|
+
const filePath = await transcriptPath(baseDir, conversationId);
|
|
21
|
+
if (filePath === undefined || (await fs.stat(filePath)).size > MAX_AGENT_ACP_TRANSFER_BYTES)
|
|
22
|
+
return [];
|
|
23
|
+
content = await fs.readFile(filePath, 'utf-8');
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
const lines = content.split('\n');
|
|
29
|
+
const events = [];
|
|
30
|
+
let currentSeq = 0;
|
|
31
|
+
let currentTurn = 0;
|
|
32
|
+
let turnOpen = false;
|
|
33
|
+
const push = (type, data, time, surface = false) => {
|
|
34
|
+
events.push({
|
|
35
|
+
type: 'event',
|
|
36
|
+
event: {
|
|
37
|
+
type,
|
|
38
|
+
seq: currentSeq++,
|
|
39
|
+
time,
|
|
40
|
+
data,
|
|
41
|
+
...(surface ? { surfaceOp: 'append' } : {}),
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
for (const line of lines) {
|
|
46
|
+
const trimmed = line.trim();
|
|
47
|
+
if (!trimmed)
|
|
48
|
+
continue;
|
|
49
|
+
let record;
|
|
50
|
+
try {
|
|
51
|
+
record = JSON.parse(trimmed);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const time = record.created_at ? new Date(record.created_at).getTime() : Date.now();
|
|
57
|
+
if (record.type === 'USER_INPUT') {
|
|
58
|
+
if (turnOpen) {
|
|
59
|
+
push('step/end', { turn: currentTurn, step: 1 }, time);
|
|
60
|
+
push('turn/end', { turn: currentTurn, reason: { kind: 'completed' } }, time);
|
|
61
|
+
turnOpen = false;
|
|
62
|
+
}
|
|
63
|
+
currentTurn += 1;
|
|
64
|
+
turnOpen = true;
|
|
65
|
+
push('turn/start', { turn: currentTurn }, time);
|
|
66
|
+
push('step/start', { turn: currentTurn, step: 1 }, time);
|
|
67
|
+
const text = cleanUserPrompt(record.content);
|
|
68
|
+
const images = (await Promise.all(agyImageReferences(record.content ?? '').map(path => readAgyImage(conversationId, path))))
|
|
69
|
+
.filter((image) => image !== undefined);
|
|
70
|
+
push('user/message', {
|
|
71
|
+
id: `user:${record.step_index}`,
|
|
72
|
+
role: 'user',
|
|
73
|
+
content: [...(text ? [{ type: 'text', text }] : []), ...images],
|
|
74
|
+
source: { kind: 'user' },
|
|
75
|
+
}, time, true);
|
|
76
|
+
}
|
|
77
|
+
else if (record.type === 'PLANNER_RESPONSE') {
|
|
78
|
+
if (!turnOpen) {
|
|
79
|
+
currentTurn += 1;
|
|
80
|
+
turnOpen = true;
|
|
81
|
+
push('turn/start', { turn: currentTurn }, time);
|
|
82
|
+
push('step/start', { turn: currentTurn, step: 1 }, time);
|
|
83
|
+
}
|
|
84
|
+
if (Array.isArray(record.tool_calls)) {
|
|
85
|
+
for (const call of record.tool_calls) {
|
|
86
|
+
const toolName = (typeof call.name === 'string' && call.name.length > 0) ? call.name : 'tool';
|
|
87
|
+
const callId = `${record.step_index}:${toolName}`;
|
|
88
|
+
push('tool/call', {
|
|
89
|
+
turn: currentTurn,
|
|
90
|
+
step: 1,
|
|
91
|
+
callId,
|
|
92
|
+
name: toolName,
|
|
93
|
+
arguments: typeof call.args === 'object' && call.args !== null ? JSON.stringify(call.args) : '{}',
|
|
94
|
+
toolCallId: callId,
|
|
95
|
+
toolName,
|
|
96
|
+
status: call.status === 'ERROR' ? 'failed' : 'finished',
|
|
97
|
+
}, time, false);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (record.content && record.content.trim() !== '') {
|
|
101
|
+
const contentBlocks = [];
|
|
102
|
+
if (record.thinking && record.thinking.trim() !== '') {
|
|
103
|
+
contentBlocks.push({ type: 'reasoning', text: record.thinking.trim() });
|
|
104
|
+
}
|
|
105
|
+
contentBlocks.push({ type: 'text', text: record.content.trim() });
|
|
106
|
+
push('assistant/message', {
|
|
107
|
+
turn: currentTurn,
|
|
108
|
+
step: 1,
|
|
109
|
+
message: {
|
|
110
|
+
id: `${sessionId}:${record.step_index}`,
|
|
111
|
+
role: 'assistant',
|
|
112
|
+
content: contentBlocks,
|
|
113
|
+
},
|
|
114
|
+
// Harness trajectory timing expects every assistant message to carry
|
|
115
|
+
// an iterable stream, including messages restored from transcript.
|
|
116
|
+
stream: [],
|
|
117
|
+
}, time, true);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (turnOpen) {
|
|
122
|
+
// Hydration must not extend a settled turn until the time of the read.
|
|
123
|
+
const settledAt = events.at(-1)?.event.time ?? Date.now();
|
|
124
|
+
push('step/end', { turn: currentTurn, step: 1 }, settledAt);
|
|
125
|
+
push('turn/end', { turn: currentTurn, reason: { kind: 'completed' } }, settledAt);
|
|
126
|
+
}
|
|
127
|
+
return events;
|
|
128
|
+
}
|
|
129
|
+
async function querySqliteJson(dbPath, sql, params = []) {
|
|
130
|
+
try {
|
|
131
|
+
const { DatabaseSync } = await import('node:sqlite');
|
|
132
|
+
const db = new DatabaseSync(dbPath, { readOnly: true });
|
|
133
|
+
try {
|
|
134
|
+
const stmt = db.prepare(sql);
|
|
135
|
+
const rows = stmt.all(...params);
|
|
136
|
+
return rows;
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
db.close();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// fallback to sqlite3 CLI
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
const { execFile } = await import('node:child_process');
|
|
147
|
+
const { promisify } = await import('node:util');
|
|
148
|
+
const execFileAsync = promisify(execFile);
|
|
149
|
+
let formattedSql = sql;
|
|
150
|
+
for (const p of params) {
|
|
151
|
+
const val = typeof p === 'number' ? String(p) : `'${String(p).replace(/'/g, "''")}'`;
|
|
152
|
+
formattedSql = formattedSql.replace('?', val);
|
|
153
|
+
}
|
|
154
|
+
const { stdout } = await execFileAsync('sqlite3', [dbPath, '-json', formattedSql]);
|
|
155
|
+
return JSON.parse(stdout || '[]');
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
export async function discoverAntigravityWorkspaces(dbPath = join(homedir(), '.gemini/antigravity-cli/conversation_summaries.db'), baseDir = join(homedir(), '.gemini/antigravity-cli/brain')) {
|
|
162
|
+
try {
|
|
163
|
+
await fs.stat(dbPath);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
const sql = "SELECT conversation_id, workspace_uris, step_count, title FROM conversation_summaries ORDER BY step_count DESC;";
|
|
169
|
+
const rows = await querySqliteJson(dbPath, sql);
|
|
170
|
+
const paths = new Set();
|
|
171
|
+
for (const row of rows) {
|
|
172
|
+
if (!row?.workspace_uris)
|
|
173
|
+
continue;
|
|
174
|
+
if (!(row.step_count && row.step_count > 0) && !row.title?.trim() && !await readTranscriptSummary(baseDir, row.conversation_id))
|
|
175
|
+
continue;
|
|
176
|
+
try {
|
|
177
|
+
const uris = JSON.parse(row.workspace_uris);
|
|
178
|
+
if (Array.isArray(uris)) {
|
|
179
|
+
for (const u of uris) {
|
|
180
|
+
if (typeof u === 'string' && u.startsWith('file://')) {
|
|
181
|
+
try {
|
|
182
|
+
const p = fileURLToPath(u);
|
|
183
|
+
const imageRelative = relative(AGY_IMAGE_ROOT, p);
|
|
184
|
+
const imageCache = imageRelative === '' || (!isAbsolute(imageRelative)
|
|
185
|
+
&& imageRelative !== '..' && !imageRelative.startsWith(`..${sep}`));
|
|
186
|
+
if (!imageCache)
|
|
187
|
+
paths.add(p);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// ignore
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// ignore
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const verified = [];
|
|
201
|
+
for (const p of paths) {
|
|
202
|
+
try {
|
|
203
|
+
const s = await fs.stat(p);
|
|
204
|
+
if (s.isDirectory())
|
|
205
|
+
verified.push(p);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// ignore
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return verified;
|
|
212
|
+
}
|
|
213
|
+
async function readTranscriptSummary(baseDir, conversationId) {
|
|
214
|
+
try {
|
|
215
|
+
const path = await transcriptPath(baseDir, conversationId);
|
|
216
|
+
if (path === undefined)
|
|
217
|
+
return undefined;
|
|
218
|
+
const stat = await fs.stat(path);
|
|
219
|
+
const handle = await fs.open(path, 'r');
|
|
220
|
+
try {
|
|
221
|
+
const buffer = Buffer.alloc(4096);
|
|
222
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
|
|
223
|
+
const firstLine = buffer.subarray(0, bytesRead).toString('utf-8').split('\n')[0];
|
|
224
|
+
if (!firstLine)
|
|
225
|
+
return undefined;
|
|
226
|
+
const record = JSON.parse(firstLine);
|
|
227
|
+
if (record.type !== 'USER_INPUT')
|
|
228
|
+
return undefined;
|
|
229
|
+
const title = cleanUserPrompt(record.content).split('\n')[0]?.trim().slice(0, 40) || (agyImageReferences(record.content ?? '').length > 0 ? 'Image' : undefined);
|
|
230
|
+
if (!title)
|
|
231
|
+
return undefined;
|
|
232
|
+
return { conversationId, title, createdAt: record.created_at ? new Date(record.created_at).getTime() : stat.mtimeMs, updatedAt: stat.mtimeMs };
|
|
233
|
+
}
|
|
234
|
+
finally {
|
|
235
|
+
await handle.close();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
export async function discoverAntigravitySessions(workspacePath, limit = 30, baseDir = join(homedir(), '.gemini/antigravity-cli/brain'), dbPath = join(homedir(), '.gemini/antigravity-cli/conversation_summaries.db')) {
|
|
243
|
+
const requestedWorkspace = workspacePath.trim() === '' ? undefined : resolve(workspacePath);
|
|
244
|
+
// Database URIs provide workspace authority. Decode them before comparing so
|
|
245
|
+
// percent-encoded names, path separators, and similarly named projects stay distinct.
|
|
246
|
+
try {
|
|
247
|
+
await fs.stat(dbPath);
|
|
248
|
+
const rows = await querySqliteJson(dbPath, 'SELECT conversation_id, title, workspace_uris, step_count, last_modified_time FROM conversation_summaries ORDER BY last_modified_time DESC;');
|
|
249
|
+
const summaries = [];
|
|
250
|
+
for (const row of rows) {
|
|
251
|
+
if (requestedWorkspace !== undefined && !workspaceMatches(row.workspace_uris, requestedWorkspace))
|
|
252
|
+
continue;
|
|
253
|
+
const transcript = row.title?.trim() ? undefined : await readTranscriptSummary(baseDir, row.conversation_id);
|
|
254
|
+
if (!row.step_count && !row.title?.trim()) {
|
|
255
|
+
if (transcript !== undefined)
|
|
256
|
+
summaries.push(transcript);
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
const time = row.last_modified_time ? new Date(row.last_modified_time).getTime() : Date.now();
|
|
260
|
+
summaries.push({
|
|
261
|
+
conversationId: row.conversation_id,
|
|
262
|
+
title: row.title?.trim() || transcript?.title || 'Untitled Session',
|
|
263
|
+
createdAt: time,
|
|
264
|
+
updatedAt: time,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
return summaries.sort((a, b) => b.updatedAt - a.updatedAt).slice(0, limit);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
// Unscoped discovery may fall back to transcript scanning without a database.
|
|
271
|
+
}
|
|
272
|
+
// A transcript alone does not establish which project it belongs to.
|
|
273
|
+
if (requestedWorkspace !== undefined)
|
|
274
|
+
return [];
|
|
275
|
+
// 2. Fallback to filesystem scanning
|
|
276
|
+
let dirEntries;
|
|
277
|
+
try {
|
|
278
|
+
dirEntries = await fs.readdir(baseDir);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return [];
|
|
282
|
+
}
|
|
283
|
+
const results = [];
|
|
284
|
+
for (const entry of dirEntries) {
|
|
285
|
+
if (entry === 'tempmediaStorage' || !entry.includes('-'))
|
|
286
|
+
continue;
|
|
287
|
+
try {
|
|
288
|
+
const path = await transcriptPath(baseDir, entry);
|
|
289
|
+
if (path === undefined)
|
|
290
|
+
continue;
|
|
291
|
+
const s = await fs.stat(path);
|
|
292
|
+
const handle = await fs.open(path, 'r');
|
|
293
|
+
try {
|
|
294
|
+
const buf = Buffer.alloc(4096);
|
|
295
|
+
const { bytesRead } = await handle.read(buf, 0, 4096, 0);
|
|
296
|
+
const firstLine = buf.subarray(0, bytesRead).toString('utf-8').split('\n')[0];
|
|
297
|
+
if (firstLine) {
|
|
298
|
+
const parsed = JSON.parse(firstLine);
|
|
299
|
+
const rawPrompt = cleanUserPrompt(parsed.content);
|
|
300
|
+
const title = rawPrompt ? rawPrompt.split('\n')[0]?.trim().slice(0, 40) : undefined;
|
|
301
|
+
if (title) {
|
|
302
|
+
const createdAt = parsed.created_at ? new Date(parsed.created_at).getTime() : s.mtimeMs;
|
|
303
|
+
results.push({
|
|
304
|
+
conversationId: entry,
|
|
305
|
+
title,
|
|
306
|
+
createdAt,
|
|
307
|
+
updatedAt: s.mtimeMs,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
finally {
|
|
313
|
+
await handle.close();
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
// ignore
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
results.sort((a, b) => b.updatedAt - a.updatedAt);
|
|
321
|
+
return results.slice(0, limit);
|
|
322
|
+
}
|
|
323
|
+
function workspaceMatches(rawUris, requestedWorkspace) {
|
|
324
|
+
if (rawUris === undefined)
|
|
325
|
+
return false;
|
|
326
|
+
try {
|
|
327
|
+
const uris = JSON.parse(rawUris);
|
|
328
|
+
return Array.isArray(uris) && uris.some(uri => {
|
|
329
|
+
if (typeof uri !== 'string')
|
|
330
|
+
return false;
|
|
331
|
+
try {
|
|
332
|
+
return resolve(fileURLToPath(uri)) === requestedWorkspace;
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/** Remote conversation ids can select only a real transcript inside the AGY brain. */
|
|
344
|
+
async function transcriptPath(baseDir, conversationId) {
|
|
345
|
+
if (!/^[a-zA-Z0-9_-]{1,256}$/.test(conversationId))
|
|
346
|
+
return undefined;
|
|
347
|
+
try {
|
|
348
|
+
const root = await fs.realpath(baseDir);
|
|
349
|
+
const expected = join(root, conversationId, '.system_generated', 'logs', 'transcript.jsonl');
|
|
350
|
+
return await fs.realpath(expected) === expected ? expected : undefined;
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=transcript-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-loader.js","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/transcript-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type { AntigravityEvents } from './types.js';
|
|
3
|
+
export declare class TranscriptWatcher extends EventEmitter {
|
|
4
|
+
readonly conversationId: string;
|
|
5
|
+
readonly baseDir: string;
|
|
6
|
+
private offset;
|
|
7
|
+
private lineRemainder;
|
|
8
|
+
private pollTimer?;
|
|
9
|
+
private closed;
|
|
10
|
+
private readonly transcriptPath;
|
|
11
|
+
private readonly transcriptFullPath;
|
|
12
|
+
constructor(conversationId: string, baseDir?: string);
|
|
13
|
+
on<U extends keyof AntigravityEvents>(event: U, listener: AntigravityEvents[U]): this;
|
|
14
|
+
emit<U extends keyof AntigravityEvents>(event: U, ...args: Parameters<AntigravityEvents[U]>): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* 启动增量文件监听
|
|
17
|
+
*/
|
|
18
|
+
start(intervalMs?: number): void;
|
|
19
|
+
stop(): void;
|
|
20
|
+
/**
|
|
21
|
+
* 立即触发一次读取(同步/主动检查)
|
|
22
|
+
*/
|
|
23
|
+
flush(): Promise<void>;
|
|
24
|
+
private readNewLines;
|
|
25
|
+
private parseAndDispatch;
|
|
26
|
+
private enrichFromFullTranscript;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=transcript-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-watcher.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/transcript-watcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAA;AAElE,qBAAa,iBAAkB,SAAQ,YAAY;IAS/C,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM;IAT1B,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;gBAGhC,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,MAAyD;IAQpE,EAAE,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI;IAIrF,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;IAI9G;;OAEG;IACH,KAAK,CAAC,UAAU,SAAM,GAAG,IAAI;IAgB7B,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,YAAY;YA+BZ,gBAAgB;YAiDhB,wBAAwB;CAiBvC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { EventEmitter } from 'node:events';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
export class TranscriptWatcher extends EventEmitter {
|
|
6
|
+
conversationId;
|
|
7
|
+
baseDir;
|
|
8
|
+
offset = 0;
|
|
9
|
+
lineRemainder = '';
|
|
10
|
+
pollTimer;
|
|
11
|
+
closed = false;
|
|
12
|
+
transcriptPath;
|
|
13
|
+
transcriptFullPath;
|
|
14
|
+
constructor(conversationId, baseDir = join(homedir(), '.gemini/antigravity-cli/brain')) {
|
|
15
|
+
super();
|
|
16
|
+
this.conversationId = conversationId;
|
|
17
|
+
this.baseDir = baseDir;
|
|
18
|
+
const brainDir = join(this.baseDir, conversationId, '.system_generated/logs');
|
|
19
|
+
this.transcriptPath = join(brainDir, 'transcript.jsonl');
|
|
20
|
+
this.transcriptFullPath = join(brainDir, 'transcript_full.jsonl');
|
|
21
|
+
}
|
|
22
|
+
on(event, listener) {
|
|
23
|
+
return super.on(event, listener);
|
|
24
|
+
}
|
|
25
|
+
emit(event, ...args) {
|
|
26
|
+
return super.emit(event, ...args);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 启动增量文件监听
|
|
30
|
+
*/
|
|
31
|
+
start(intervalMs = 250) {
|
|
32
|
+
if (this.closed)
|
|
33
|
+
return;
|
|
34
|
+
const poll = async () => {
|
|
35
|
+
try {
|
|
36
|
+
await this.readNewLines();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// 文件可能尚未创建或临时锁占用,静默重试
|
|
40
|
+
}
|
|
41
|
+
if (!this.closed) {
|
|
42
|
+
this.pollTimer = setTimeout(poll, intervalMs);
|
|
43
|
+
this.pollTimer.unref?.();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
void poll();
|
|
47
|
+
}
|
|
48
|
+
stop() {
|
|
49
|
+
this.closed = true;
|
|
50
|
+
if (this.pollTimer !== undefined) {
|
|
51
|
+
clearTimeout(this.pollTimer);
|
|
52
|
+
this.pollTimer = undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 立即触发一次读取(同步/主动检查)
|
|
57
|
+
*/
|
|
58
|
+
async flush() {
|
|
59
|
+
await this.readNewLines();
|
|
60
|
+
}
|
|
61
|
+
async readNewLines() {
|
|
62
|
+
let stat;
|
|
63
|
+
try {
|
|
64
|
+
stat = await fs.stat(this.transcriptPath);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (stat.size <= this.offset)
|
|
70
|
+
return;
|
|
71
|
+
const handle = await fs.open(this.transcriptPath, 'r');
|
|
72
|
+
try {
|
|
73
|
+
const bytesToRead = stat.size - this.offset;
|
|
74
|
+
const buffer = Buffer.alloc(bytesToRead);
|
|
75
|
+
const { bytesRead } = await handle.read(buffer, 0, bytesToRead, this.offset);
|
|
76
|
+
this.offset += bytesRead;
|
|
77
|
+
const text = this.lineRemainder + buffer.subarray(0, bytesRead).toString('utf-8');
|
|
78
|
+
const lines = text.split('\n');
|
|
79
|
+
this.lineRemainder = lines.pop() ?? '';
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
const trimmed = line.trim();
|
|
82
|
+
if (!trimmed)
|
|
83
|
+
continue;
|
|
84
|
+
await this.parseAndDispatch(trimmed);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await handle.close();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async parseAndDispatch(rawLine) {
|
|
92
|
+
let record;
|
|
93
|
+
try {
|
|
94
|
+
record = JSON.parse(rawLine);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (Array.isArray(record.truncated_fields) && record.truncated_fields.length > 0) {
|
|
100
|
+
record = await this.enrichFromFullTranscript(record);
|
|
101
|
+
}
|
|
102
|
+
this.emit('step', record);
|
|
103
|
+
if (record.type === 'PLANNER_RESPONSE') {
|
|
104
|
+
if (record.thinking && record.thinking.trim() !== '') {
|
|
105
|
+
this.emit('thinking', {
|
|
106
|
+
stepIndex: record.step_index,
|
|
107
|
+
thinking: record.thinking,
|
|
108
|
+
createdAt: record.created_at,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (Array.isArray(record.tool_calls) && record.tool_calls.length > 0) {
|
|
112
|
+
this.emit('toolCall', {
|
|
113
|
+
stepIndex: record.step_index,
|
|
114
|
+
toolCalls: record.tool_calls,
|
|
115
|
+
createdAt: record.created_at,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (record.content && record.content.trim() !== '') {
|
|
119
|
+
this.emit('message', {
|
|
120
|
+
stepIndex: record.step_index,
|
|
121
|
+
text: record.content,
|
|
122
|
+
createdAt: record.created_at,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (record.type === 'USER_INPUT' && record.content) {
|
|
127
|
+
this.emit('message', {
|
|
128
|
+
stepIndex: record.step_index,
|
|
129
|
+
text: record.content,
|
|
130
|
+
createdAt: record.created_at,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
if (record.status === 'DONE' && record.type === 'PLANNER_RESPONSE') {
|
|
134
|
+
this.emit('complete', this.conversationId);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async enrichFromFullTranscript(record) {
|
|
138
|
+
try {
|
|
139
|
+
const content = await fs.readFile(this.transcriptFullPath, 'utf-8');
|
|
140
|
+
const lines = content.split('\n');
|
|
141
|
+
for (const line of lines) {
|
|
142
|
+
const trimmed = line.trim();
|
|
143
|
+
if (!trimmed)
|
|
144
|
+
continue;
|
|
145
|
+
const full = JSON.parse(trimmed);
|
|
146
|
+
if (full.step_index === record.step_index) {
|
|
147
|
+
return full;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// 容错降级
|
|
153
|
+
}
|
|
154
|
+
return record;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=transcript-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-watcher.js","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/transcript-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export type StepType = 'USER_INPUT' | 'PLANNER_RESPONSE' | 'SYSTEM';
|
|
2
|
+
export type StepStatus = 'RUNNING' | 'DONE' | 'ERROR';
|
|
3
|
+
export interface ToolCallPayload {
|
|
4
|
+
name: string;
|
|
5
|
+
args: Record<string, unknown>;
|
|
6
|
+
result?: unknown;
|
|
7
|
+
status?: 'CALLING' | 'EXECUTING' | 'SUCCESS' | 'ERROR';
|
|
8
|
+
}
|
|
9
|
+
export interface StepLogRecord {
|
|
10
|
+
step_index: number;
|
|
11
|
+
source?: 'USER_EXPLICIT' | 'MODEL' | 'SYSTEM';
|
|
12
|
+
type: StepType;
|
|
13
|
+
status: StepStatus;
|
|
14
|
+
created_at: string;
|
|
15
|
+
content?: string;
|
|
16
|
+
thinking?: string;
|
|
17
|
+
tool_calls?: ToolCallPayload[];
|
|
18
|
+
truncated_fields?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface ExecutionOptions {
|
|
21
|
+
/** 目标工作区或执行工作目录 */
|
|
22
|
+
cwd?: string;
|
|
23
|
+
/** 会话 ID,不传则启动新会话 */
|
|
24
|
+
conversationId?: string;
|
|
25
|
+
/** 是否续接最近一次会话 (-c) */
|
|
26
|
+
continueLast?: boolean;
|
|
27
|
+
/** 是否自动放行工具执行权限 (--dangerously-skip-permissions) */
|
|
28
|
+
skipPermissions?: boolean;
|
|
29
|
+
/** 单步执行超时时间 (毫秒) */
|
|
30
|
+
timeoutMs?: number;
|
|
31
|
+
/** 自定义 agy 二进制路径 */
|
|
32
|
+
binaryPath?: string;
|
|
33
|
+
/** 环境变量 */
|
|
34
|
+
env?: NodeJS.ProcessEnv;
|
|
35
|
+
}
|
|
36
|
+
export interface AntigravityEvents {
|
|
37
|
+
message: (step: {
|
|
38
|
+
stepIndex: number;
|
|
39
|
+
text: string;
|
|
40
|
+
createdAt: string;
|
|
41
|
+
}) => void;
|
|
42
|
+
thinking: (step: {
|
|
43
|
+
stepIndex: number;
|
|
44
|
+
thinking: string;
|
|
45
|
+
createdAt: string;
|
|
46
|
+
}) => void;
|
|
47
|
+
toolCall: (step: {
|
|
48
|
+
stepIndex: number;
|
|
49
|
+
toolCalls: ToolCallPayload[];
|
|
50
|
+
createdAt: string;
|
|
51
|
+
}) => void;
|
|
52
|
+
step: (record: StepLogRecord) => void;
|
|
53
|
+
error: (error: Error) => void;
|
|
54
|
+
complete: (conversationId: string) => void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,kBAAkB,GAAG,QAAQ,CAAA;AACnE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;AAErD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAA;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC7C,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,UAAU,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qBAAqB;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,sBAAsB;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,oDAAoD;IACpD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oBAAoB;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW;IACX,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC/E,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACpF,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,eAAe,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAChG,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IACrC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/types.ts"],"names":[],"mappings":""}
|