@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.
Files changed (110) hide show
  1. package/README.md +5 -0
  2. package/dist/adapter-manager.d.ts +18 -0
  3. package/dist/adapter-manager.d.ts.map +1 -0
  4. package/dist/adapter-manager.js +67 -0
  5. package/dist/adapter-manager.js.map +1 -0
  6. package/dist/adapters/adapter.d.ts +40 -0
  7. package/dist/adapters/adapter.d.ts.map +1 -0
  8. package/dist/adapters/adapter.js +2 -0
  9. package/dist/adapters/adapter.js.map +1 -0
  10. package/dist/adapters/docker.d.ts +26 -0
  11. package/dist/adapters/docker.d.ts.map +1 -0
  12. package/dist/adapters/docker.js +274 -0
  13. package/dist/adapters/docker.js.map +1 -0
  14. package/dist/adapters/local.d.ts +15 -0
  15. package/dist/adapters/local.d.ts.map +1 -0
  16. package/dist/adapters/local.js +57 -0
  17. package/dist/adapters/local.js.map +1 -0
  18. package/dist/adapters/powerline-transport.d.ts +7 -0
  19. package/dist/adapters/powerline-transport.d.ts.map +1 -0
  20. package/dist/adapters/powerline-transport.js +22 -0
  21. package/dist/adapters/powerline-transport.js.map +1 -0
  22. package/dist/api-key.d.ts +8 -0
  23. package/dist/api-key.d.ts.map +1 -0
  24. package/dist/api-key.js +58 -0
  25. package/dist/api-key.js.map +1 -0
  26. package/dist/crypto.d.ts +5 -0
  27. package/dist/crypto.d.ts.map +1 -0
  28. package/dist/crypto.js +74 -0
  29. package/dist/crypto.js.map +1 -0
  30. package/dist/db.d.ts +11 -0
  31. package/dist/db.d.ts.map +1 -0
  32. package/dist/db.js +140 -0
  33. package/dist/db.js.map +1 -0
  34. package/dist/env-registry.d.ts +20 -0
  35. package/dist/env-registry.d.ts.map +1 -0
  36. package/dist/env-registry.js +55 -0
  37. package/dist/env-registry.js.map +1 -0
  38. package/dist/finding-store.d.ts +9 -0
  39. package/dist/finding-store.d.ts.map +1 -0
  40. package/dist/finding-store.js +68 -0
  41. package/dist/finding-store.js.map +1 -0
  42. package/dist/grpc-service.d.ts +4 -0
  43. package/dist/grpc-service.d.ts.map +1 -0
  44. package/dist/grpc-service.js +594 -0
  45. package/dist/grpc-service.js.map +1 -0
  46. package/dist/index.d.ts +2 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +108 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/json-helpers.d.ts +7 -0
  51. package/dist/json-helpers.d.ts.map +1 -0
  52. package/dist/json-helpers.js +22 -0
  53. package/dist/json-helpers.js.map +1 -0
  54. package/dist/log-writer.d.ts +18 -0
  55. package/dist/log-writer.d.ts.map +1 -0
  56. package/dist/log-writer.js +44 -0
  57. package/dist/log-writer.js.map +1 -0
  58. package/dist/logger.d.ts +4 -0
  59. package/dist/logger.d.ts.map +1 -0
  60. package/dist/logger.js +10 -0
  61. package/dist/logger.js.map +1 -0
  62. package/dist/paths.d.ts +7 -0
  63. package/dist/paths.d.ts.map +1 -0
  64. package/dist/paths.js +12 -0
  65. package/dist/paths.js.map +1 -0
  66. package/dist/project-store.d.ts +11 -0
  67. package/dist/project-store.d.ts.map +1 -0
  68. package/dist/project-store.js +32 -0
  69. package/dist/project-store.js.map +1 -0
  70. package/dist/schema.d.ts +1199 -0
  71. package/dist/schema.d.ts.map +1 -0
  72. package/dist/schema.js +82 -0
  73. package/dist/schema.js.map +1 -0
  74. package/dist/session-store.d.ts +22 -0
  75. package/dist/session-store.d.ts.map +1 -0
  76. package/dist/session-store.js +73 -0
  77. package/dist/session-store.js.map +1 -0
  78. package/dist/stream-hub.d.ts +14 -0
  79. package/dist/stream-hub.d.ts.map +1 -0
  80. package/dist/stream-hub.js +95 -0
  81. package/dist/stream-hub.js.map +1 -0
  82. package/dist/task-store.d.ts +28 -0
  83. package/dist/task-store.d.ts.map +1 -0
  84. package/dist/task-store.js +121 -0
  85. package/dist/task-store.js.map +1 -0
  86. package/dist/token-broker.d.ts +27 -0
  87. package/dist/token-broker.d.ts.map +1 -0
  88. package/dist/token-broker.js +76 -0
  89. package/dist/token-broker.js.map +1 -0
  90. package/dist/transcript.d.ts +5 -0
  91. package/dist/transcript.d.ts.map +1 -0
  92. package/dist/transcript.js +51 -0
  93. package/dist/transcript.js.map +1 -0
  94. package/dist/utils/exec.d.ts +17 -0
  95. package/dist/utils/exec.d.ts.map +1 -0
  96. package/dist/utils/exec.js +21 -0
  97. package/dist/utils/exec.js.map +1 -0
  98. package/dist/utils/ports.d.ts +3 -0
  99. package/dist/utils/ports.d.ts.map +1 -0
  100. package/dist/utils/ports.js +19 -0
  101. package/dist/utils/ports.js.map +1 -0
  102. package/dist/utils/sleep.d.ts +3 -0
  103. package/dist/utils/sleep.d.ts.map +1 -0
  104. package/dist/utils/sleep.js +5 -0
  105. package/dist/utils/sleep.js.map +1 -0
  106. package/dist/ws-bridge.d.ts +10 -0
  107. package/dist/ws-bridge.d.ts.map +1 -0
  108. package/dist/ws-bridge.js +846 -0
  109. package/dist/ws-bridge.js.map +1 -0
  110. 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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"}
@@ -0,0 +1,2 @@
1
+ import "./db.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,SAAS,CAAC"}