@grackle-ai/server 0.0.2
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 +5 -0
- package/dist/adapter-manager.d.ts +18 -0
- package/dist/adapter-manager.d.ts.map +1 -0
- package/dist/adapter-manager.js +67 -0
- package/dist/adapter-manager.js.map +1 -0
- package/dist/adapters/adapter.d.ts +40 -0
- package/dist/adapters/adapter.d.ts.map +1 -0
- package/dist/adapters/adapter.js +2 -0
- package/dist/adapters/adapter.js.map +1 -0
- package/dist/adapters/docker.d.ts +26 -0
- package/dist/adapters/docker.d.ts.map +1 -0
- package/dist/adapters/docker.js +274 -0
- package/dist/adapters/docker.js.map +1 -0
- package/dist/adapters/local.d.ts +15 -0
- package/dist/adapters/local.d.ts.map +1 -0
- package/dist/adapters/local.js +57 -0
- package/dist/adapters/local.js.map +1 -0
- package/dist/adapters/powerline-transport.d.ts +7 -0
- package/dist/adapters/powerline-transport.d.ts.map +1 -0
- package/dist/adapters/powerline-transport.js +22 -0
- package/dist/adapters/powerline-transport.js.map +1 -0
- package/dist/api-key.d.ts +8 -0
- package/dist/api-key.d.ts.map +1 -0
- package/dist/api-key.js +58 -0
- package/dist/api-key.js.map +1 -0
- package/dist/crypto.d.ts +5 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +74 -0
- package/dist/crypto.js.map +1 -0
- package/dist/db.d.ts +11 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +140 -0
- package/dist/db.js.map +1 -0
- package/dist/env-registry.d.ts +20 -0
- package/dist/env-registry.d.ts.map +1 -0
- package/dist/env-registry.js +55 -0
- package/dist/env-registry.js.map +1 -0
- package/dist/finding-store.d.ts +9 -0
- package/dist/finding-store.d.ts.map +1 -0
- package/dist/finding-store.js +68 -0
- package/dist/finding-store.js.map +1 -0
- package/dist/grpc-service.d.ts +4 -0
- package/dist/grpc-service.d.ts.map +1 -0
- package/dist/grpc-service.js +594 -0
- package/dist/grpc-service.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -0
- package/dist/json-helpers.d.ts +7 -0
- package/dist/json-helpers.d.ts.map +1 -0
- package/dist/json-helpers.js +22 -0
- package/dist/json-helpers.js.map +1 -0
- package/dist/log-writer.d.ts +18 -0
- package/dist/log-writer.d.ts.map +1 -0
- package/dist/log-writer.js +44 -0
- package/dist/log-writer.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +10 -0
- package/dist/logger.js.map +1 -0
- package/dist/paths.d.ts +7 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +12 -0
- package/dist/paths.js.map +1 -0
- package/dist/project-store.d.ts +11 -0
- package/dist/project-store.d.ts.map +1 -0
- package/dist/project-store.js +32 -0
- package/dist/project-store.js.map +1 -0
- package/dist/schema.d.ts +1199 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +82 -0
- package/dist/schema.js.map +1 -0
- package/dist/session-store.d.ts +22 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +73 -0
- package/dist/session-store.js.map +1 -0
- package/dist/stream-hub.d.ts +14 -0
- package/dist/stream-hub.d.ts.map +1 -0
- package/dist/stream-hub.js +95 -0
- package/dist/stream-hub.js.map +1 -0
- package/dist/task-store.d.ts +28 -0
- package/dist/task-store.d.ts.map +1 -0
- package/dist/task-store.js +121 -0
- package/dist/task-store.js.map +1 -0
- package/dist/token-broker.d.ts +27 -0
- package/dist/token-broker.d.ts.map +1 -0
- package/dist/token-broker.js +76 -0
- package/dist/token-broker.js.map +1 -0
- package/dist/transcript.d.ts +5 -0
- package/dist/transcript.d.ts.map +1 -0
- package/dist/transcript.js +51 -0
- package/dist/transcript.js.map +1 -0
- package/dist/utils/exec.d.ts +17 -0
- package/dist/utils/exec.d.ts.map +1 -0
- package/dist/utils/exec.js +21 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/ports.d.ts +3 -0
- package/dist/utils/ports.d.ts.map +1 -0
- package/dist/utils/ports.js +19 -0
- package/dist/utils/ports.js.map +1 -0
- package/dist/utils/sleep.d.ts +3 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +5 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/ws-bridge.d.ts +10 -0
- package/dist/ws-bridge.d.ts.map +1 -0
- package/dist/ws-bridge.js +846 -0
- package/dist/ws-bridge.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
import { create } from "@bufbuild/protobuf";
|
|
2
|
+
import { grackle, powerline } from "@grackle-ai/common";
|
|
3
|
+
import { v4 as uuid } from "uuid";
|
|
4
|
+
import * as envRegistry from "./env-registry.js";
|
|
5
|
+
import * as sessionStore from "./session-store.js";
|
|
6
|
+
import * as adapterManager from "./adapter-manager.js";
|
|
7
|
+
import * as streamHub from "./stream-hub.js";
|
|
8
|
+
import * as tokenBroker from "./token-broker.js";
|
|
9
|
+
import * as logWriter from "./log-writer.js";
|
|
10
|
+
import * as projectStore from "./project-store.js";
|
|
11
|
+
import * as taskStore from "./task-store.js";
|
|
12
|
+
import * as findingStore from "./finding-store.js";
|
|
13
|
+
import { writeTranscript } from "./transcript.js";
|
|
14
|
+
import { broadcast } from "./ws-bridge.js";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { LOGS_DIR, DEFAULT_RUNTIME, DEFAULT_MODEL } from "@grackle-ai/common";
|
|
17
|
+
import { grackleHome } from "./paths.js";
|
|
18
|
+
import { safeParseJsonArray } from "./json-helpers.js";
|
|
19
|
+
function slugify(text) {
|
|
20
|
+
return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 40);
|
|
21
|
+
}
|
|
22
|
+
function envRowToProto(row) {
|
|
23
|
+
return create(grackle.EnvironmentSchema, {
|
|
24
|
+
id: row.id,
|
|
25
|
+
displayName: row.displayName,
|
|
26
|
+
adapterType: row.adapterType,
|
|
27
|
+
adapterConfig: row.adapterConfig,
|
|
28
|
+
defaultRuntime: row.defaultRuntime,
|
|
29
|
+
bootstrapped: row.bootstrapped,
|
|
30
|
+
status: row.status,
|
|
31
|
+
lastSeen: row.lastSeen || "",
|
|
32
|
+
envInfo: row.envInfo || "",
|
|
33
|
+
createdAt: row.createdAt,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function sessionRowToProto(row) {
|
|
37
|
+
return create(grackle.SessionSchema, {
|
|
38
|
+
...row,
|
|
39
|
+
runtimeSessionId: row.runtimeSessionId ?? "",
|
|
40
|
+
logPath: row.logPath ?? "",
|
|
41
|
+
suspendedAt: row.suspendedAt ?? "",
|
|
42
|
+
endedAt: row.endedAt ?? "",
|
|
43
|
+
error: row.error ?? "",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function projectRowToProto(row) {
|
|
47
|
+
return create(grackle.ProjectSchema, { ...row });
|
|
48
|
+
}
|
|
49
|
+
function taskRowToProto(row) {
|
|
50
|
+
return create(grackle.TaskSchema, {
|
|
51
|
+
...row,
|
|
52
|
+
dependsOn: safeParseJsonArray(row.dependsOn),
|
|
53
|
+
assignedAt: row.assignedAt ?? "",
|
|
54
|
+
startedAt: row.startedAt ?? "",
|
|
55
|
+
completedAt: row.completedAt ?? "",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function findingRowToProto(row) {
|
|
59
|
+
return create(grackle.FindingSchema, { ...row, tags: safeParseJsonArray(row.tags) });
|
|
60
|
+
}
|
|
61
|
+
/** Spawn an agent session on a PowerLine, piping events to the stream hub. Returns the session ID. */
|
|
62
|
+
function spawnOnPowerLine(conn, sessionId, runtime, prompt, model, logPath, branch, systemContext, projectId, taskId, onComplete) {
|
|
63
|
+
const powerlineReq = create(powerline.SpawnRequestSchema, {
|
|
64
|
+
sessionId,
|
|
65
|
+
runtime,
|
|
66
|
+
prompt,
|
|
67
|
+
model,
|
|
68
|
+
maxTurns: 0,
|
|
69
|
+
branch,
|
|
70
|
+
worktreeBasePath: branch ? "/workspace" : "",
|
|
71
|
+
systemContext,
|
|
72
|
+
projectId,
|
|
73
|
+
taskId,
|
|
74
|
+
});
|
|
75
|
+
logWriter.initLog(logPath);
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
77
|
+
(async () => {
|
|
78
|
+
try {
|
|
79
|
+
sessionStore.updateSession(sessionId, "running");
|
|
80
|
+
for await (const event of conn.client.spawn(powerlineReq)) {
|
|
81
|
+
const sessionEvent = create(grackle.SessionEventSchema, {
|
|
82
|
+
sessionId,
|
|
83
|
+
type: event.type,
|
|
84
|
+
timestamp: event.timestamp,
|
|
85
|
+
content: event.content,
|
|
86
|
+
raw: event.raw,
|
|
87
|
+
});
|
|
88
|
+
logWriter.writeEvent(logPath, sessionEvent);
|
|
89
|
+
// Intercept finding events and store + broadcast them
|
|
90
|
+
if (event.type === "finding" && projectId) {
|
|
91
|
+
try {
|
|
92
|
+
const data = JSON.parse(event.content);
|
|
93
|
+
const findingId = uuid();
|
|
94
|
+
findingStore.postFinding(findingId, projectId, taskId, sessionId, data.category || "general", data.title || "Untitled", data.content || "", data.tags || []);
|
|
95
|
+
broadcast({ type: "finding_posted", payload: { projectId, findingId } });
|
|
96
|
+
process.stderr.write(`[finding] Stored: ${findingId} "${data.title}" in ${projectId}\n`);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
process.stderr.write(`[finding] ERROR: ${err} (project=${projectId} task=${taskId})\n`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
streamHub.publish(sessionEvent);
|
|
103
|
+
if (event.type === "status") {
|
|
104
|
+
if (event.content === "waiting_input") {
|
|
105
|
+
sessionStore.updateSessionStatus(sessionId, "waiting_input");
|
|
106
|
+
}
|
|
107
|
+
else if (event.content === "running") {
|
|
108
|
+
sessionStore.updateSessionStatus(sessionId, "running");
|
|
109
|
+
}
|
|
110
|
+
else if (event.content === "completed") {
|
|
111
|
+
sessionStore.updateSession(sessionId, "completed");
|
|
112
|
+
}
|
|
113
|
+
else if (event.content === "failed") {
|
|
114
|
+
sessionStore.updateSession(sessionId, "failed");
|
|
115
|
+
}
|
|
116
|
+
else if (event.content === "killed") {
|
|
117
|
+
sessionStore.updateSession(sessionId, "killed");
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const current = sessionStore.getSession(sessionId);
|
|
122
|
+
if (current && !["completed", "failed", "killed"].includes(current.status)) {
|
|
123
|
+
sessionStore.updateSession(sessionId, "completed");
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
sessionStore.updateSession(sessionId, "failed", undefined, String(err));
|
|
128
|
+
// Publish a failure event so streaming clients are notified
|
|
129
|
+
streamHub.publish(create(grackle.SessionEventSchema, {
|
|
130
|
+
sessionId,
|
|
131
|
+
type: "status",
|
|
132
|
+
timestamp: new Date().toISOString(),
|
|
133
|
+
content: "failed",
|
|
134
|
+
raw: String(err),
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
logWriter.endSession(logPath);
|
|
139
|
+
try {
|
|
140
|
+
writeTranscript(logPath);
|
|
141
|
+
}
|
|
142
|
+
catch { /* non-critical */ }
|
|
143
|
+
onComplete?.();
|
|
144
|
+
}
|
|
145
|
+
})();
|
|
146
|
+
}
|
|
147
|
+
/** Register all Grackle gRPC service handlers on the given ConnectRPC router. */
|
|
148
|
+
export function registerGrackleRoutes(router) {
|
|
149
|
+
router.service(grackle.Grackle, {
|
|
150
|
+
async listEnvironments() {
|
|
151
|
+
const rows = envRegistry.listEnvironments();
|
|
152
|
+
return create(grackle.EnvironmentListSchema, {
|
|
153
|
+
environments: rows.map(envRowToProto),
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
async addEnvironment(req) {
|
|
157
|
+
const id = req.displayName.toLowerCase().replace(/[^a-z0-9-]/g, "-");
|
|
158
|
+
const runtime = req.defaultRuntime || DEFAULT_RUNTIME;
|
|
159
|
+
envRegistry.addEnvironment(id, req.displayName, req.adapterType, req.adapterConfig, runtime);
|
|
160
|
+
const row = envRegistry.getEnvironment(id);
|
|
161
|
+
return envRowToProto(row);
|
|
162
|
+
},
|
|
163
|
+
async removeEnvironment(req) {
|
|
164
|
+
// Disconnect the adapter if currently connected
|
|
165
|
+
const env = envRegistry.getEnvironment(req.id);
|
|
166
|
+
if (env) {
|
|
167
|
+
const adapter = adapterManager.getAdapter(env.adapterType);
|
|
168
|
+
if (adapter) {
|
|
169
|
+
try {
|
|
170
|
+
await adapter.disconnect(req.id);
|
|
171
|
+
}
|
|
172
|
+
catch { /* best-effort */ }
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
adapterManager.removeConnection(req.id);
|
|
176
|
+
// Delete sessions referencing this environment (FK constraint)
|
|
177
|
+
sessionStore.deleteByEnvironment(req.id);
|
|
178
|
+
envRegistry.removeEnvironment(req.id);
|
|
179
|
+
broadcast({ type: "environment_removed", payload: { environmentId: req.id } });
|
|
180
|
+
return create(grackle.EmptySchema, {});
|
|
181
|
+
},
|
|
182
|
+
async *provisionEnvironment(req) {
|
|
183
|
+
const env = envRegistry.getEnvironment(req.id);
|
|
184
|
+
if (!env) {
|
|
185
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
186
|
+
stage: "error",
|
|
187
|
+
message: `Environment not found: ${req.id}`,
|
|
188
|
+
progress: 0,
|
|
189
|
+
});
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const adapter = adapterManager.getAdapter(env.adapterType);
|
|
193
|
+
if (!adapter) {
|
|
194
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
195
|
+
stage: "error",
|
|
196
|
+
message: `No adapter for type: ${env.adapterType}`,
|
|
197
|
+
progress: 0,
|
|
198
|
+
});
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
envRegistry.updateEnvironmentStatus(req.id, "connecting");
|
|
202
|
+
const config = JSON.parse(env.adapterConfig);
|
|
203
|
+
const powerlineToken = env.powerlineToken || "";
|
|
204
|
+
for await (const event of adapter.provision(req.id, config, powerlineToken)) {
|
|
205
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
206
|
+
stage: event.stage,
|
|
207
|
+
message: event.message,
|
|
208
|
+
progress: event.progress,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
const conn = await adapter.connect(req.id, config, powerlineToken);
|
|
213
|
+
adapterManager.setConnection(req.id, conn);
|
|
214
|
+
envRegistry.updateEnvironmentStatus(req.id, "connected");
|
|
215
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
216
|
+
stage: "ready",
|
|
217
|
+
message: "Environment connected",
|
|
218
|
+
progress: 1,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
catch (err) {
|
|
222
|
+
envRegistry.updateEnvironmentStatus(req.id, "error");
|
|
223
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
224
|
+
stage: "error",
|
|
225
|
+
message: `Connection failed: ${err}`,
|
|
226
|
+
progress: 0,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
async stopEnvironment(req) {
|
|
231
|
+
const env = envRegistry.getEnvironment(req.id);
|
|
232
|
+
if (!env) {
|
|
233
|
+
throw new Error(`Environment not found: ${req.id}`);
|
|
234
|
+
}
|
|
235
|
+
const adapter = adapterManager.getAdapter(env.adapterType);
|
|
236
|
+
if (adapter) {
|
|
237
|
+
await adapter.stop(req.id, JSON.parse(env.adapterConfig));
|
|
238
|
+
}
|
|
239
|
+
adapterManager.removeConnection(req.id);
|
|
240
|
+
envRegistry.updateEnvironmentStatus(req.id, "disconnected");
|
|
241
|
+
return create(grackle.EmptySchema, {});
|
|
242
|
+
},
|
|
243
|
+
async destroyEnvironment(req) {
|
|
244
|
+
const env = envRegistry.getEnvironment(req.id);
|
|
245
|
+
if (!env) {
|
|
246
|
+
throw new Error(`Environment not found: ${req.id}`);
|
|
247
|
+
}
|
|
248
|
+
const adapter = adapterManager.getAdapter(env.adapterType);
|
|
249
|
+
if (adapter) {
|
|
250
|
+
await adapter.destroy(req.id, JSON.parse(env.adapterConfig));
|
|
251
|
+
}
|
|
252
|
+
adapterManager.removeConnection(req.id);
|
|
253
|
+
envRegistry.updateEnvironmentStatus(req.id, "disconnected");
|
|
254
|
+
return create(grackle.EmptySchema, {});
|
|
255
|
+
},
|
|
256
|
+
async spawnAgent(req) {
|
|
257
|
+
const env = envRegistry.getEnvironment(req.environmentId);
|
|
258
|
+
if (!env) {
|
|
259
|
+
throw new Error(`Environment not found: ${req.environmentId}`);
|
|
260
|
+
}
|
|
261
|
+
const conn = adapterManager.getConnection(req.environmentId);
|
|
262
|
+
if (!conn) {
|
|
263
|
+
throw new Error(`Environment ${req.environmentId} not connected`);
|
|
264
|
+
}
|
|
265
|
+
const sessionId = uuid();
|
|
266
|
+
const runtime = req.runtime || env.defaultRuntime;
|
|
267
|
+
const model = req.model || process.env.GRACKLE_DEFAULT_MODEL || DEFAULT_MODEL;
|
|
268
|
+
const logPath = join(grackleHome, LOGS_DIR, sessionId);
|
|
269
|
+
sessionStore.createSession(sessionId, req.environmentId, runtime, req.prompt, model, logPath);
|
|
270
|
+
spawnOnPowerLine(conn, sessionId, runtime, req.prompt, model, logPath, req.branch || "", req.systemContext || "", "", "");
|
|
271
|
+
const row = sessionStore.getSession(sessionId);
|
|
272
|
+
return sessionRowToProto(row);
|
|
273
|
+
},
|
|
274
|
+
async resumeAgent(req) {
|
|
275
|
+
const session = sessionStore.getSession(req.sessionId);
|
|
276
|
+
if (!session) {
|
|
277
|
+
throw new Error(`Session not found: ${req.sessionId}`);
|
|
278
|
+
}
|
|
279
|
+
const conn = adapterManager.getConnection(session.environmentId);
|
|
280
|
+
if (!conn) {
|
|
281
|
+
throw new Error(`Environment ${session.environmentId} not connected`);
|
|
282
|
+
}
|
|
283
|
+
const powerlineReq = create(powerline.ResumeRequestSchema, {
|
|
284
|
+
sessionId: session.id,
|
|
285
|
+
runtimeSessionId: session.runtimeSessionId || "",
|
|
286
|
+
runtime: session.runtime,
|
|
287
|
+
});
|
|
288
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
289
|
+
(async () => {
|
|
290
|
+
try {
|
|
291
|
+
sessionStore.updateSession(session.id, "running");
|
|
292
|
+
for await (const event of conn.client.resume(powerlineReq)) {
|
|
293
|
+
const sessionEvent = create(grackle.SessionEventSchema, {
|
|
294
|
+
sessionId: session.id,
|
|
295
|
+
type: event.type,
|
|
296
|
+
timestamp: event.timestamp,
|
|
297
|
+
content: event.content,
|
|
298
|
+
raw: event.raw,
|
|
299
|
+
});
|
|
300
|
+
streamHub.publish(sessionEvent);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch (err) {
|
|
304
|
+
sessionStore.updateSession(session.id, "failed", undefined, String(err));
|
|
305
|
+
}
|
|
306
|
+
})();
|
|
307
|
+
const row = sessionStore.getSession(session.id);
|
|
308
|
+
return sessionRowToProto(row);
|
|
309
|
+
},
|
|
310
|
+
async sendInput(req) {
|
|
311
|
+
const session = sessionStore.getSession(req.sessionId);
|
|
312
|
+
if (!session) {
|
|
313
|
+
throw new Error(`Session not found: ${req.sessionId}`);
|
|
314
|
+
}
|
|
315
|
+
if (session.status !== "waiting_input") {
|
|
316
|
+
throw new Error(`Session ${req.sessionId} is not waiting for input (status: ${session.status})`);
|
|
317
|
+
}
|
|
318
|
+
const conn = adapterManager.getConnection(session.environmentId);
|
|
319
|
+
if (!conn) {
|
|
320
|
+
throw new Error(`Environment ${session.environmentId} not connected`);
|
|
321
|
+
}
|
|
322
|
+
await conn.client.sendInput(create(powerline.InputMessageSchema, {
|
|
323
|
+
sessionId: req.sessionId,
|
|
324
|
+
text: req.text,
|
|
325
|
+
}));
|
|
326
|
+
return create(grackle.EmptySchema, {});
|
|
327
|
+
},
|
|
328
|
+
async killAgent(req) {
|
|
329
|
+
const session = sessionStore.getSession(req.id);
|
|
330
|
+
if (!session) {
|
|
331
|
+
throw new Error(`Session not found: ${req.id}`);
|
|
332
|
+
}
|
|
333
|
+
const conn = adapterManager.getConnection(session.environmentId);
|
|
334
|
+
if (conn) {
|
|
335
|
+
await conn.client.kill(create(powerline.SessionIdSchema, { id: req.id }));
|
|
336
|
+
}
|
|
337
|
+
sessionStore.updateSession(req.id, "killed");
|
|
338
|
+
streamHub.publish(create(grackle.SessionEventSchema, {
|
|
339
|
+
sessionId: req.id,
|
|
340
|
+
type: "status",
|
|
341
|
+
timestamp: new Date().toISOString(),
|
|
342
|
+
content: "killed",
|
|
343
|
+
raw: "",
|
|
344
|
+
}));
|
|
345
|
+
return create(grackle.EmptySchema, {});
|
|
346
|
+
},
|
|
347
|
+
async listSessions(req) {
|
|
348
|
+
const rows = sessionStore.listSessions(req.environmentId, req.status);
|
|
349
|
+
return create(grackle.SessionListSchema, {
|
|
350
|
+
sessions: rows.map(sessionRowToProto),
|
|
351
|
+
});
|
|
352
|
+
},
|
|
353
|
+
async *streamSession(req) {
|
|
354
|
+
const stream = streamHub.createStream(req.id);
|
|
355
|
+
try {
|
|
356
|
+
for await (const event of stream) {
|
|
357
|
+
yield event;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
finally {
|
|
361
|
+
stream.cancel();
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
async *streamAll() {
|
|
365
|
+
const stream = streamHub.createGlobalStream();
|
|
366
|
+
try {
|
|
367
|
+
for await (const event of stream) {
|
|
368
|
+
yield event;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
finally {
|
|
372
|
+
stream.cancel();
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
async setToken(req) {
|
|
376
|
+
await tokenBroker.setToken({
|
|
377
|
+
name: req.name,
|
|
378
|
+
type: req.type,
|
|
379
|
+
envVar: req.envVar,
|
|
380
|
+
filePath: req.filePath,
|
|
381
|
+
value: req.value,
|
|
382
|
+
expiresAt: req.expiresAt,
|
|
383
|
+
});
|
|
384
|
+
return create(grackle.EmptySchema, {});
|
|
385
|
+
},
|
|
386
|
+
async listTokens() {
|
|
387
|
+
const items = tokenBroker.listTokens();
|
|
388
|
+
return create(grackle.TokenListSchema, {
|
|
389
|
+
tokens: items.map((t) => create(grackle.TokenInfoSchema, {
|
|
390
|
+
name: t.name,
|
|
391
|
+
type: t.type,
|
|
392
|
+
envVar: t.envVar || "",
|
|
393
|
+
filePath: t.filePath || "",
|
|
394
|
+
expiresAt: t.expiresAt || "",
|
|
395
|
+
})),
|
|
396
|
+
});
|
|
397
|
+
},
|
|
398
|
+
// ─── Projects ────────────────────────────────────────────
|
|
399
|
+
async listProjects() {
|
|
400
|
+
const rows = projectStore.listProjects();
|
|
401
|
+
return create(grackle.ProjectListSchema, {
|
|
402
|
+
projects: rows.map(projectRowToProto),
|
|
403
|
+
});
|
|
404
|
+
},
|
|
405
|
+
async createProject(req) {
|
|
406
|
+
let id = slugify(req.name) || uuid().slice(0, 8);
|
|
407
|
+
// If slug already exists (e.g. archived project), append a short suffix
|
|
408
|
+
if (projectStore.getProject(id)) {
|
|
409
|
+
id = `${id}-${uuid().slice(0, 4)}`;
|
|
410
|
+
}
|
|
411
|
+
projectStore.createProject(id, req.name, req.description, req.repoUrl, req.defaultEnvironmentId);
|
|
412
|
+
broadcast({ type: "project_created", payload: { projectId: id } });
|
|
413
|
+
const row = projectStore.getProject(id);
|
|
414
|
+
return projectRowToProto(row);
|
|
415
|
+
},
|
|
416
|
+
async getProject(req) {
|
|
417
|
+
const row = projectStore.getProject(req.id);
|
|
418
|
+
if (!row)
|
|
419
|
+
throw new Error(`Project not found: ${req.id}`);
|
|
420
|
+
return projectRowToProto(row);
|
|
421
|
+
},
|
|
422
|
+
async archiveProject(req) {
|
|
423
|
+
projectStore.archiveProject(req.id);
|
|
424
|
+
broadcast({ type: "project_archived", payload: { projectId: req.id } });
|
|
425
|
+
return create(grackle.EmptySchema, {});
|
|
426
|
+
},
|
|
427
|
+
// ─── Tasks ───────────────────────────────────────────────
|
|
428
|
+
async listTasks(req) {
|
|
429
|
+
const rows = taskStore.listTasks(req.id);
|
|
430
|
+
return create(grackle.TaskListSchema, {
|
|
431
|
+
tasks: rows.map(taskRowToProto),
|
|
432
|
+
});
|
|
433
|
+
},
|
|
434
|
+
async createTask(req) {
|
|
435
|
+
const project = projectStore.getProject(req.projectId);
|
|
436
|
+
if (!project)
|
|
437
|
+
throw new Error(`Project not found: ${req.projectId}`);
|
|
438
|
+
const id = uuid().slice(0, 8);
|
|
439
|
+
const environmentId = req.environmentId || project.defaultEnvironmentId;
|
|
440
|
+
taskStore.createTask(id, req.projectId, req.title, req.description, environmentId, [...req.dependsOn], slugify(project.name));
|
|
441
|
+
const row = taskStore.getTask(id);
|
|
442
|
+
broadcast({ type: "task_created", payload: { task: row ? { ...row } : null } });
|
|
443
|
+
return taskRowToProto(row);
|
|
444
|
+
},
|
|
445
|
+
async getTask(req) {
|
|
446
|
+
const row = taskStore.getTask(req.id);
|
|
447
|
+
if (!row)
|
|
448
|
+
throw new Error(`Task not found: ${req.id}`);
|
|
449
|
+
return taskRowToProto(row);
|
|
450
|
+
},
|
|
451
|
+
async updateTask(req) {
|
|
452
|
+
const existing = taskStore.getTask(req.id);
|
|
453
|
+
if (!existing)
|
|
454
|
+
throw new Error(`Task not found: ${req.id}`);
|
|
455
|
+
taskStore.updateTask(req.id, req.title || existing.title, req.description || existing.description, req.status || existing.status, req.environmentId || existing.environmentId, req.dependsOn.length > 0 ? [...req.dependsOn] : safeParseJsonArray(existing.dependsOn), req.reviewNotes || existing.reviewNotes);
|
|
456
|
+
const row = taskStore.getTask(req.id);
|
|
457
|
+
return taskRowToProto(row);
|
|
458
|
+
},
|
|
459
|
+
async startTask(req) {
|
|
460
|
+
const task = taskStore.getTask(req.taskId);
|
|
461
|
+
if (!task)
|
|
462
|
+
throw new Error(`Task not found: ${req.taskId}`);
|
|
463
|
+
if (!["pending", "assigned"].includes(task.status)) {
|
|
464
|
+
throw new Error(`Task ${req.taskId} cannot be started (status: ${task.status})`);
|
|
465
|
+
}
|
|
466
|
+
if (!taskStore.areDependenciesMet(req.taskId)) {
|
|
467
|
+
throw new Error(`Task ${req.taskId} has unmet dependencies`);
|
|
468
|
+
}
|
|
469
|
+
const project = projectStore.getProject(task.projectId);
|
|
470
|
+
if (!project)
|
|
471
|
+
throw new Error(`Project not found: ${task.projectId}`);
|
|
472
|
+
const environmentId = task.environmentId || project.defaultEnvironmentId;
|
|
473
|
+
if (!environmentId)
|
|
474
|
+
throw new Error("No environment specified for task or project");
|
|
475
|
+
const conn = adapterManager.getConnection(environmentId);
|
|
476
|
+
if (!conn)
|
|
477
|
+
throw new Error(`Environment ${environmentId} not connected`);
|
|
478
|
+
const env = envRegistry.getEnvironment(environmentId);
|
|
479
|
+
const sessionId = uuid();
|
|
480
|
+
const runtime = req.runtime || env?.defaultRuntime || DEFAULT_RUNTIME;
|
|
481
|
+
const model = req.model || process.env.GRACKLE_DEFAULT_MODEL || DEFAULT_MODEL;
|
|
482
|
+
const logPath = join(grackleHome, LOGS_DIR, sessionId);
|
|
483
|
+
// Build system context: task info + review notes + MCP tool instructions
|
|
484
|
+
const systemContext = [
|
|
485
|
+
`## Task: ${task.title}`,
|
|
486
|
+
task.description,
|
|
487
|
+
task.reviewNotes ? `## Review Feedback (from previous attempt)\n${task.reviewNotes}` : "",
|
|
488
|
+
`## Grackle Tools (MCP)`,
|
|
489
|
+
`You have a "grackle" MCP server with tools for coordinating with other agents:`,
|
|
490
|
+
`- **mcp__grackle__post_finding**: Share discoveries (architecture decisions, bugs, patterns) with other agents working on this project. Parameters: title (string), content (string), category (optional: architecture|api|bug|decision|dependency|pattern|general), tags (optional: string[]).`,
|
|
491
|
+
`- **mcp__grackle__query_findings**: Query findings posted by other agents. Findings from previous tasks are also in your system context above.`,
|
|
492
|
+
`IMPORTANT: When you complete your task, post at least one finding summarizing what you did and any key decisions made.`,
|
|
493
|
+
].filter(Boolean).join("\n\n");
|
|
494
|
+
sessionStore.createSession(sessionId, environmentId, runtime, task.title, model, logPath);
|
|
495
|
+
taskStore.setTaskSession(task.id, sessionId);
|
|
496
|
+
taskStore.markTaskStarted(task.id);
|
|
497
|
+
broadcast({ type: "task_started", payload: { taskId: task.id, sessionId, projectId: task.projectId } });
|
|
498
|
+
spawnOnPowerLine(conn, sessionId, runtime, task.title, model, logPath, task.branch, systemContext, task.projectId, task.id, () => {
|
|
499
|
+
// On completion, auto-move task to review
|
|
500
|
+
const t = taskStore.getTask(task.id);
|
|
501
|
+
if (t && t.status === "in_progress") {
|
|
502
|
+
const sess = sessionStore.getSession(sessionId);
|
|
503
|
+
if (sess?.status === "completed") {
|
|
504
|
+
taskStore.markTaskCompleted(task.id, "review");
|
|
505
|
+
}
|
|
506
|
+
else if (sess?.status === "failed") {
|
|
507
|
+
taskStore.markTaskCompleted(task.id, "failed");
|
|
508
|
+
}
|
|
509
|
+
broadcast({ type: "task_updated", payload: { taskId: task.id, projectId: task.projectId } });
|
|
510
|
+
}
|
|
511
|
+
});
|
|
512
|
+
const row = sessionStore.getSession(sessionId);
|
|
513
|
+
return sessionRowToProto(row);
|
|
514
|
+
},
|
|
515
|
+
async approveTask(req) {
|
|
516
|
+
const task = taskStore.getTask(req.id);
|
|
517
|
+
if (!task)
|
|
518
|
+
throw new Error(`Task not found: ${req.id}`);
|
|
519
|
+
taskStore.markTaskCompleted(task.id, "done");
|
|
520
|
+
// Check for newly unblocked tasks
|
|
521
|
+
const unblocked = taskStore.checkAndUnblock(task.projectId);
|
|
522
|
+
for (const t of unblocked) {
|
|
523
|
+
streamHub.publish(create(grackle.SessionEventSchema, {
|
|
524
|
+
sessionId: "",
|
|
525
|
+
type: "system",
|
|
526
|
+
timestamp: new Date().toISOString(),
|
|
527
|
+
content: JSON.stringify({ type: "task_unblocked", taskId: t.id, title: t.title }),
|
|
528
|
+
raw: "",
|
|
529
|
+
}));
|
|
530
|
+
}
|
|
531
|
+
broadcast({ type: "task_approved", payload: { taskId: task.id, projectId: task.projectId } });
|
|
532
|
+
const row = taskStore.getTask(task.id);
|
|
533
|
+
return taskRowToProto(row);
|
|
534
|
+
},
|
|
535
|
+
async rejectTask(req) {
|
|
536
|
+
const task = taskStore.getTask(req.id);
|
|
537
|
+
if (!task)
|
|
538
|
+
throw new Error(`Task not found: ${req.id}`);
|
|
539
|
+
taskStore.updateTask(task.id, task.title, task.description, "assigned", task.environmentId, safeParseJsonArray(task.dependsOn), req.reviewNotes || "");
|
|
540
|
+
broadcast({ type: "task_rejected", payload: { taskId: task.id, projectId: task.projectId } });
|
|
541
|
+
const row = taskStore.getTask(task.id);
|
|
542
|
+
return taskRowToProto(row);
|
|
543
|
+
},
|
|
544
|
+
async deleteTask(req) {
|
|
545
|
+
const task = taskStore.getTask(req.id);
|
|
546
|
+
taskStore.deleteTask(req.id);
|
|
547
|
+
broadcast({ type: "task_deleted", payload: { taskId: req.id, projectId: task?.projectId } });
|
|
548
|
+
return create(grackle.EmptySchema, {});
|
|
549
|
+
},
|
|
550
|
+
// ─── Findings ────────────────────────────────────────────
|
|
551
|
+
async postFinding(req) {
|
|
552
|
+
const id = uuid().slice(0, 8);
|
|
553
|
+
findingStore.postFinding(id, req.projectId, req.taskId, req.sessionId, req.category, req.title, req.content, [...req.tags]);
|
|
554
|
+
broadcast({ type: "finding_posted", payload: { projectId: req.projectId, findingId: id } });
|
|
555
|
+
const rows = findingStore.queryFindings(req.projectId);
|
|
556
|
+
const row = rows.find((r) => r.id === id);
|
|
557
|
+
return findingRowToProto(row);
|
|
558
|
+
},
|
|
559
|
+
async queryFindings(req) {
|
|
560
|
+
const rows = findingStore.queryFindings(req.projectId, req.categories.length > 0 ? [...req.categories] : undefined, req.tags.length > 0 ? [...req.tags] : undefined, req.limit || undefined);
|
|
561
|
+
return create(grackle.FindingListSchema, {
|
|
562
|
+
findings: rows.map(findingRowToProto),
|
|
563
|
+
});
|
|
564
|
+
},
|
|
565
|
+
// ─── Diff ────────────────────────────────────────────────
|
|
566
|
+
async getTaskDiff(req) {
|
|
567
|
+
const task = taskStore.getTask(req.taskId);
|
|
568
|
+
if (!task)
|
|
569
|
+
throw new Error(`Task not found: ${req.taskId}`);
|
|
570
|
+
if (!task.branch)
|
|
571
|
+
throw new Error("Task has no branch");
|
|
572
|
+
const environmentId = task.environmentId || projectStore.getProject(task.projectId)?.defaultEnvironmentId;
|
|
573
|
+
if (!environmentId)
|
|
574
|
+
throw new Error("No environment for task");
|
|
575
|
+
const conn = adapterManager.getConnection(environmentId);
|
|
576
|
+
if (!conn)
|
|
577
|
+
throw new Error(`Environment ${environmentId} not connected`);
|
|
578
|
+
const diffResp = await conn.client.getDiff(create(powerline.DiffRequestSchema, {
|
|
579
|
+
branch: task.branch,
|
|
580
|
+
baseBranch: "main",
|
|
581
|
+
worktreeBasePath: "/workspace",
|
|
582
|
+
}));
|
|
583
|
+
return create(grackle.TaskDiffSchema, {
|
|
584
|
+
taskId: task.id,
|
|
585
|
+
branch: task.branch,
|
|
586
|
+
diff: diffResp.diff,
|
|
587
|
+
changedFiles: [...diffResp.changedFiles],
|
|
588
|
+
additions: diffResp.additions,
|
|
589
|
+
deletions: diffResp.deletions,
|
|
590
|
+
});
|
|
591
|
+
},
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
//# sourceMappingURL=grpc-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-service.js","sourceRoot":"","sources":["../src/grpc-service.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,SAAS,CAAC"}
|