@grackle-ai/server 0.42.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +13 -0
- package/dist/db.js.map +1 -1
- package/dist/grpc-service.d.ts.map +1 -1
- package/dist/grpc-service.js +23 -4
- package/dist/grpc-service.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/log-writer.d.ts +8 -0
- package/dist/log-writer.d.ts.map +1 -1
- package/dist/log-writer.js +12 -0
- package/dist/log-writer.js.map +1 -1
- package/dist/persona-store.d.ts +2 -2
- package/dist/persona-store.d.ts.map +1 -1
- package/dist/persona-store.js +6 -2
- package/dist/persona-store.js.map +1 -1
- package/dist/resolve-persona.d.ts +5 -1
- package/dist/resolve-persona.d.ts.map +1 -1
- package/dist/resolve-persona.js +5 -1
- package/dist/resolve-persona.js.map +1 -1
- package/dist/schema.d.ts +38 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -1
- package/dist/signals/sigchld.d.ts +7 -0
- package/dist/signals/sigchld.d.ts.map +1 -0
- package/dist/signals/sigchld.js +163 -0
- package/dist/signals/sigchld.js.map +1 -0
- package/dist/signals/signal-delivery.d.ts +14 -0
- package/dist/signals/signal-delivery.d.ts.map +1 -0
- package/dist/signals/signal-delivery.js +167 -0
- package/dist/signals/signal-delivery.js.map +1 -0
- package/dist/ws-bridge.js +21 -8
- package/dist/ws-bridge.js.map +1 -1
- package/package.json +6 -6
package/dist/persona-store.js
CHANGED
|
@@ -2,7 +2,7 @@ import db from "./db.js";
|
|
|
2
2
|
import { personas } from "./schema.js";
|
|
3
3
|
import { eq, asc, sql } from "drizzle-orm";
|
|
4
4
|
/** Insert a new persona record. */
|
|
5
|
-
export function createPersona(id, name, description, systemPrompt, toolConfig, runtime, model, maxTurns, mcpServers) {
|
|
5
|
+
export function createPersona(id, name, description, systemPrompt, toolConfig, runtime, model, maxTurns, mcpServers, type = "agent", script = "") {
|
|
6
6
|
db.insert(personas)
|
|
7
7
|
.values({
|
|
8
8
|
id,
|
|
@@ -14,6 +14,8 @@ export function createPersona(id, name, description, systemPrompt, toolConfig, r
|
|
|
14
14
|
model,
|
|
15
15
|
maxTurns,
|
|
16
16
|
mcpServers,
|
|
17
|
+
type,
|
|
18
|
+
script,
|
|
17
19
|
})
|
|
18
20
|
.run();
|
|
19
21
|
}
|
|
@@ -30,7 +32,7 @@ export function listPersonas() {
|
|
|
30
32
|
return db.select().from(personas).orderBy(asc(personas.name)).all();
|
|
31
33
|
}
|
|
32
34
|
/** Update an existing persona. */
|
|
33
|
-
export function updatePersona(id, name, description, systemPrompt, toolConfig, runtime, model, maxTurns, mcpServers) {
|
|
35
|
+
export function updatePersona(id, name, description, systemPrompt, toolConfig, runtime, model, maxTurns, mcpServers, type = "agent", script = "") {
|
|
34
36
|
db.update(personas)
|
|
35
37
|
.set({
|
|
36
38
|
name,
|
|
@@ -41,6 +43,8 @@ export function updatePersona(id, name, description, systemPrompt, toolConfig, r
|
|
|
41
43
|
model,
|
|
42
44
|
maxTurns,
|
|
43
45
|
mcpServers,
|
|
46
|
+
type,
|
|
47
|
+
script,
|
|
44
48
|
updatedAt: sql `datetime('now')`,
|
|
45
49
|
})
|
|
46
50
|
.where(eq(personas.id, id))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persona-store.js","sourceRoot":"","sources":["../src/persona-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAI3C,mCAAmC;AACnC,MAAM,UAAU,aAAa,CAC3B,EAAU,EACV,IAAY,EACZ,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,OAAe,EACf,KAAa,EACb,QAAgB,EAChB,UAAkB;
|
|
1
|
+
{"version":3,"file":"persona-store.js","sourceRoot":"","sources":["../src/persona-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAI3C,mCAAmC;AACnC,MAAM,UAAU,aAAa,CAC3B,EAAU,EACV,IAAY,EACZ,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,OAAe,EACf,KAAa,EACb,QAAgB,EAChB,UAAkB,EAClB,OAAe,OAAO,EACtB,SAAiB,EAAE;IAEnB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC;QACN,EAAE;QACF,IAAI;QACJ,WAAW;QACX,YAAY;QACZ,UAAU;QACV,OAAO;QACP,KAAK;QACL,QAAQ;QACR,UAAU;QACV,IAAI;QACJ,MAAM;KACP,CAAC;SACD,GAAG,EAAE,CAAC;AACX,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrE,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACzE,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtE,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,aAAa,CAC3B,EAAU,EACV,IAAY,EACZ,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,OAAe,EACf,KAAa,EACb,QAAgB,EAChB,UAAkB,EAClB,OAAe,OAAO,EACtB,SAAiB,EAAE;IAEnB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;SAChB,GAAG,CAAC;QACH,IAAI;QACJ,WAAW;QACX,YAAY;QACZ,UAAU;QACV,OAAO;QACP,KAAK;QACL,QAAQ;QACR,UAAU;QACV,IAAI;QACJ,MAAM;QACN,SAAS,EAAE,GAAG,CAAA,iBAAiB;KAChC,CAAC;SACD,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAC1B,GAAG,EAAE,CAAC;AACX,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -3,7 +3,7 @@ import type { PersonaRow } from "./schema.js";
|
|
|
3
3
|
export interface ResolvedPersona {
|
|
4
4
|
/** The persona ID that was resolved. */
|
|
5
5
|
personaId: string;
|
|
6
|
-
/** Agent runtime implementation (e.g. "claude-code", "codex"). */
|
|
6
|
+
/** Agent runtime implementation (e.g. "claude-code", "codex", "genaiscript"). */
|
|
7
7
|
runtime: string;
|
|
8
8
|
/** LLM model identifier (e.g. "sonnet", "gpt-4.1"). */
|
|
9
9
|
model: string;
|
|
@@ -15,6 +15,10 @@ export interface ResolvedPersona {
|
|
|
15
15
|
toolConfig: string;
|
|
16
16
|
/** JSON array of MCP server configs. */
|
|
17
17
|
mcpServers: string;
|
|
18
|
+
/** Persona type: "agent" (interactive LLM session) or "script" (run-to-completion). */
|
|
19
|
+
type: string;
|
|
20
|
+
/** Script source code (non-empty for script personas). */
|
|
21
|
+
script: string;
|
|
18
22
|
/** The full persona row for additional fields. */
|
|
19
23
|
persona: PersonaRow;
|
|
20
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-persona.d.ts","sourceRoot":"","sources":["../src/resolve-persona.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"resolve-persona.d.ts","sourceRoot":"","sources":["../src/resolve-persona.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,OAAO,EAAE,UAAU,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,gBAAgB,EAAE,MAAM,EACxB,oBAAoB,CAAC,EAAE,MAAM,EAC7B,uBAAuB,CAAC,EAAE,MAAM,GAC/B,eAAe,CAyCjB"}
|
package/dist/resolve-persona.js
CHANGED
|
@@ -20,10 +20,12 @@ export function resolvePersona(requestPersonaId, taskDefaultPersonaId, projectDe
|
|
|
20
20
|
if (!persona) {
|
|
21
21
|
throw new Error(`Persona not found: ${personaId}`);
|
|
22
22
|
}
|
|
23
|
+
const personaType = persona.type || "agent";
|
|
23
24
|
if (!persona.runtime) {
|
|
24
25
|
throw new Error(`Persona "${persona.name}" has no runtime configured`);
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
+
// Model is required for agent personas but optional for script personas
|
|
28
|
+
if (personaType !== "script" && !persona.model) {
|
|
27
29
|
throw new Error(`Persona "${persona.name}" has no model configured`);
|
|
28
30
|
}
|
|
29
31
|
return {
|
|
@@ -34,6 +36,8 @@ export function resolvePersona(requestPersonaId, taskDefaultPersonaId, projectDe
|
|
|
34
36
|
systemPrompt: persona.systemPrompt,
|
|
35
37
|
toolConfig: persona.toolConfig,
|
|
36
38
|
mcpServers: persona.mcpServers,
|
|
39
|
+
type: personaType,
|
|
40
|
+
script: persona.script,
|
|
37
41
|
persona,
|
|
38
42
|
};
|
|
39
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-persona.js","sourceRoot":"","sources":["../src/resolve-persona.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-persona.js","sourceRoot":"","sources":["../src/resolve-persona.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AA2BrD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,gBAAwB,EACxB,oBAA6B,EAC7B,uBAAgC;IAEhC,MAAM,SAAS,GACb,gBAAgB;QAChB,oBAAoB;QACpB,uBAAuB;QACvB,aAAa,CAAC,UAAU,CAAC,oBAAoB,CAAC;QAC9C,EAAE,CAAC;IAEL,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;IAE5C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,6BAA6B,CAAC,CAAC;IACzE,CAAC;IACD,wEAAwE;IACxE,IAAI,WAAW,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,2BAA2B,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO;KACR,CAAC;AACJ,CAAC"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -1505,6 +1505,44 @@ export declare const personas: import("drizzle-orm/sqlite-core").SQLiteTableWith
|
|
|
1505
1505
|
}, {}, {
|
|
1506
1506
|
length: number | undefined;
|
|
1507
1507
|
}>;
|
|
1508
|
+
type: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1509
|
+
name: "type";
|
|
1510
|
+
tableName: "personas";
|
|
1511
|
+
dataType: "string";
|
|
1512
|
+
columnType: "SQLiteText";
|
|
1513
|
+
data: string;
|
|
1514
|
+
driverParam: string;
|
|
1515
|
+
notNull: true;
|
|
1516
|
+
hasDefault: true;
|
|
1517
|
+
isPrimaryKey: false;
|
|
1518
|
+
isAutoincrement: false;
|
|
1519
|
+
hasRuntimeDefault: false;
|
|
1520
|
+
enumValues: [string, ...string[]];
|
|
1521
|
+
baseColumn: never;
|
|
1522
|
+
identity: undefined;
|
|
1523
|
+
generated: undefined;
|
|
1524
|
+
}, {}, {
|
|
1525
|
+
length: number | undefined;
|
|
1526
|
+
}>;
|
|
1527
|
+
script: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1528
|
+
name: "script";
|
|
1529
|
+
tableName: "personas";
|
|
1530
|
+
dataType: "string";
|
|
1531
|
+
columnType: "SQLiteText";
|
|
1532
|
+
data: string;
|
|
1533
|
+
driverParam: string;
|
|
1534
|
+
notNull: true;
|
|
1535
|
+
hasDefault: true;
|
|
1536
|
+
isPrimaryKey: false;
|
|
1537
|
+
isAutoincrement: false;
|
|
1538
|
+
hasRuntimeDefault: false;
|
|
1539
|
+
enumValues: [string, ...string[]];
|
|
1540
|
+
baseColumn: never;
|
|
1541
|
+
identity: undefined;
|
|
1542
|
+
generated: undefined;
|
|
1543
|
+
}, {}, {
|
|
1544
|
+
length: number | undefined;
|
|
1545
|
+
}>;
|
|
1508
1546
|
createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1509
1547
|
name: "created_at";
|
|
1510
1548
|
tableName: "personas";
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.js
CHANGED
|
@@ -127,6 +127,8 @@ export const personas = sqliteTable("personas", {
|
|
|
127
127
|
model: text("model").notNull().default(""),
|
|
128
128
|
maxTurns: integer("max_turns").notNull().default(0),
|
|
129
129
|
mcpServers: text("mcp_servers").notNull().default("[]"),
|
|
130
|
+
type: text("type").notNull().default("agent"),
|
|
131
|
+
script: text("script").notNull().default(""),
|
|
130
132
|
createdAt: text("created_at")
|
|
131
133
|
.notNull()
|
|
132
134
|
.default(sql `(datetime('now'))`),
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sigchld.d.ts","sourceRoot":"","sources":["../../src/signals/sigchld.ts"],"names":[],"mappings":"AA8CA,wBAAgB,qBAAqB,IAAI,IAAI,CA2B5C;AAgHD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { SESSION_STATUS } from "@grackle-ai/common";
|
|
2
|
+
import { subscribe } from "../event-bus.js";
|
|
3
|
+
import * as taskStore from "../task-store.js";
|
|
4
|
+
import * as sessionStore from "../session-store.js";
|
|
5
|
+
import { readLog } from "../log-writer.js";
|
|
6
|
+
import { deliverSignalToTask } from "./signal-delivery.js";
|
|
7
|
+
import { logger } from "../logger.js";
|
|
8
|
+
/** Maximum length for the child's last text message in the notification. */
|
|
9
|
+
const MAX_LAST_MESSAGE_LENGTH = 2000;
|
|
10
|
+
/**
|
|
11
|
+
* Session statuses that trigger SIGCHLD. LLM agents don't reliably exit() —
|
|
12
|
+
* they go IDLE when they stop working. COMPLETED fires when the session's event
|
|
13
|
+
* stream ends (agent-initiated, not user-initiated — the user marking a task
|
|
14
|
+
* "Complete" emits task.completed which this subscriber does not listen to).
|
|
15
|
+
* Dedup prevents double notification if both IDLE and COMPLETED fire for the
|
|
16
|
+
* same session.
|
|
17
|
+
*/
|
|
18
|
+
const SIGCHLD_STATUSES = new Set([
|
|
19
|
+
SESSION_STATUS.IDLE,
|
|
20
|
+
SESSION_STATUS.COMPLETED,
|
|
21
|
+
SESSION_STATUS.FAILED,
|
|
22
|
+
SESSION_STATUS.INTERRUPTED,
|
|
23
|
+
]);
|
|
24
|
+
/** How long (ms) to remember a delivered notification before allowing re-delivery. */
|
|
25
|
+
const DEDUP_TTL_MS = 3_600_000; // 1 hour
|
|
26
|
+
/** Track delivered notifications to prevent duplicates: key → delivery timestamp. */
|
|
27
|
+
const delivered = new Map();
|
|
28
|
+
/** Human-readable status labels for the notification text. */
|
|
29
|
+
const STATUS_LABELS = {
|
|
30
|
+
[SESSION_STATUS.IDLE]: "finished working (awaiting review)",
|
|
31
|
+
[SESSION_STATUS.COMPLETED]: "completed successfully",
|
|
32
|
+
[SESSION_STATUS.FAILED]: "failed",
|
|
33
|
+
[SESSION_STATUS.INTERRUPTED]: "was interrupted",
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Initialize the SIGCHLD event-bus subscriber.
|
|
37
|
+
* Idempotent — safe to call multiple times.
|
|
38
|
+
*/
|
|
39
|
+
let initialized = false;
|
|
40
|
+
export function initSigchldSubscriber() {
|
|
41
|
+
if (initialized) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
initialized = true;
|
|
45
|
+
subscribe((event) => {
|
|
46
|
+
if (event.type !== "task.updated") {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const childTaskId = event.payload.taskId;
|
|
50
|
+
if (!childTaskId) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Fire-and-forget async handler — errors are logged, never thrown
|
|
54
|
+
(async () => {
|
|
55
|
+
try {
|
|
56
|
+
await handleTaskUpdated(childTaskId);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
logger.error({ err, childTaskId }, "SIGCHLD handler error");
|
|
60
|
+
}
|
|
61
|
+
})().catch(() => { });
|
|
62
|
+
});
|
|
63
|
+
logger.info("SIGCHLD subscriber initialized");
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Handle a task.updated event: check if the task is a child whose latest
|
|
67
|
+
* session has reached a SIGCHLD-triggering status (idle or terminal),
|
|
68
|
+
* and if so, deliver a SIGCHLD notification to the parent.
|
|
69
|
+
*/
|
|
70
|
+
async function handleTaskUpdated(childTaskId) {
|
|
71
|
+
const childTask = taskStore.getTask(childTaskId);
|
|
72
|
+
if (!childTask) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// Only child tasks (with a parent) trigger SIGCHLD
|
|
76
|
+
if (!childTask.parentTaskId) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Check if the child session is in a SIGCHLD-triggering status (idle or terminal)
|
|
80
|
+
const latestSession = sessionStore.getLatestSessionForTask(childTaskId);
|
|
81
|
+
if (!latestSession) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (!SIGCHLD_STATUSES.has(latestSession.status)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Idempotency: don't re-deliver for the same child+session pair.
|
|
88
|
+
// Set the key optimistically to prevent concurrent async handlers from
|
|
89
|
+
// both passing the check (e.g. completed + interrupted firing together).
|
|
90
|
+
const dedupeKey = `${childTaskId}:${latestSession.id}`;
|
|
91
|
+
const now = Date.now();
|
|
92
|
+
const previousDelivery = delivered.get(dedupeKey);
|
|
93
|
+
if (previousDelivery !== undefined && now - previousDelivery < DEDUP_TTL_MS) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
delivered.set(dedupeKey, now);
|
|
97
|
+
// Prune expired entries to prevent unbounded growth
|
|
98
|
+
pruneDelivered(now);
|
|
99
|
+
// Extract the last text message from the child's session log
|
|
100
|
+
const lastTextMessage = extractLastTextMessage(latestSession.logPath || undefined);
|
|
101
|
+
// Format the notification with actionable instructions for the parent
|
|
102
|
+
const statusLabel = STATUS_LABELS[latestSession.status] || latestSession.status;
|
|
103
|
+
let message = `[SIGCHLD] Child task "${childTask.title}" (${childTaskId}) ${statusLabel}.`;
|
|
104
|
+
if (lastTextMessage) {
|
|
105
|
+
const truncated = lastTextMessage.length > MAX_LAST_MESSAGE_LENGTH
|
|
106
|
+
? lastTextMessage.slice(0, MAX_LAST_MESSAGE_LENGTH) + "..."
|
|
107
|
+
: lastTextMessage;
|
|
108
|
+
message += `\n\nLast message from child:\n> ${truncated}`;
|
|
109
|
+
}
|
|
110
|
+
if (latestSession.status === SESSION_STATUS.IDLE) {
|
|
111
|
+
message += "\n\nReview the child's work. If satisfactory, mark it complete with "
|
|
112
|
+
+ `mcp__grackle__task_complete({ taskId: "${childTaskId}" }). `
|
|
113
|
+
+ "If more work is needed, send additional input to the child's session.";
|
|
114
|
+
}
|
|
115
|
+
else if (latestSession.status === SESSION_STATUS.FAILED) {
|
|
116
|
+
message += "\n\nThe child task failed. Review the error and decide whether to retry or reassign the work.";
|
|
117
|
+
}
|
|
118
|
+
logger.info({ childTaskId, parentTaskId: childTask.parentTaskId, status: latestSession.status }, "Delivering SIGCHLD to parent task");
|
|
119
|
+
const success = await deliverSignalToTask(childTask.parentTaskId, "sigchld", message);
|
|
120
|
+
// On failure, remove the optimistic dedup key so the next event can retry
|
|
121
|
+
if (!success) {
|
|
122
|
+
delivered.delete(dedupeKey);
|
|
123
|
+
logger.warn({ childTaskId, parentTaskId: childTask.parentTaskId }, "SIGCHLD delivery failed — will retry on next task.updated event");
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Remove dedup entries older than DEDUP_TTL_MS. */
|
|
127
|
+
function pruneDelivered(now) {
|
|
128
|
+
for (const [key, timestamp] of delivered) {
|
|
129
|
+
if (now - timestamp >= DEDUP_TTL_MS) {
|
|
130
|
+
delivered.delete(key);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Read the session log and extract the content of the last "text" entry.
|
|
136
|
+
* Returns an empty string if no text entries exist or the log cannot be read.
|
|
137
|
+
*/
|
|
138
|
+
function extractLastTextMessage(logPath) {
|
|
139
|
+
if (!logPath) {
|
|
140
|
+
return "";
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const entries = readLog(logPath);
|
|
144
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
145
|
+
if (entries[i].type === "text") {
|
|
146
|
+
return entries[i].content;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return "";
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return "";
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Reset module state. For use in tests only.
|
|
157
|
+
* @internal
|
|
158
|
+
*/
|
|
159
|
+
export function _resetForTesting() {
|
|
160
|
+
delivered.clear();
|
|
161
|
+
initialized = false;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=sigchld.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sigchld.js","sourceRoot":"","sources":["../../src/signals/sigchld.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deliver a signal message to a task's agent session.
|
|
3
|
+
*
|
|
4
|
+
* Active session (IDLE/RUNNING/PENDING) → sendInput bypassing the IDLE guard.
|
|
5
|
+
* Dead session (COMPLETED/FAILED/INTERRUPTED) → reanimate + wait for IDLE + sendInput.
|
|
6
|
+
* No session at all → log warning, return false.
|
|
7
|
+
*
|
|
8
|
+
* @param taskId - Target task whose session should receive the signal.
|
|
9
|
+
* @param signalType - Signal kind for logging (e.g. "sigchld").
|
|
10
|
+
* @param message - The text content to deliver as user input.
|
|
11
|
+
* @returns true if the message was sent, false otherwise.
|
|
12
|
+
*/
|
|
13
|
+
export declare function deliverSignalToTask(taskId: string, signalType: string, message: string): Promise<boolean>;
|
|
14
|
+
//# sourceMappingURL=signal-delivery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-delivery.d.ts","sourceRoot":"","sources":["../../src/signals/signal-delivery.ts"],"names":[],"mappings":"AAmBA;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAuDlB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { create } from "@bufbuild/protobuf";
|
|
2
|
+
import { grackle, powerline, SESSION_STATUS } from "@grackle-ai/common";
|
|
3
|
+
import * as sessionStore from "../session-store.js";
|
|
4
|
+
import * as adapterManager from "../adapter-manager.js";
|
|
5
|
+
import { reanimateAgent } from "../reanimate-agent.js";
|
|
6
|
+
import * as streamHub from "../stream-hub.js";
|
|
7
|
+
import * as logWriter from "../log-writer.js";
|
|
8
|
+
import { logger } from "../logger.js";
|
|
9
|
+
/** Timeout (ms) to wait for a reanimated session to reach IDLE. */
|
|
10
|
+
const REANIMATE_IDLE_TIMEOUT_MS = 60_000;
|
|
11
|
+
/** Statuses considered active (the agent can accept input). */
|
|
12
|
+
const ACTIVE_STATUSES = new Set([
|
|
13
|
+
SESSION_STATUS.IDLE,
|
|
14
|
+
SESSION_STATUS.RUNNING,
|
|
15
|
+
SESSION_STATUS.PENDING,
|
|
16
|
+
]);
|
|
17
|
+
/**
|
|
18
|
+
* Deliver a signal message to a task's agent session.
|
|
19
|
+
*
|
|
20
|
+
* Active session (IDLE/RUNNING/PENDING) → sendInput bypassing the IDLE guard.
|
|
21
|
+
* Dead session (COMPLETED/FAILED/INTERRUPTED) → reanimate + wait for IDLE + sendInput.
|
|
22
|
+
* No session at all → log warning, return false.
|
|
23
|
+
*
|
|
24
|
+
* @param taskId - Target task whose session should receive the signal.
|
|
25
|
+
* @param signalType - Signal kind for logging (e.g. "sigchld").
|
|
26
|
+
* @param message - The text content to deliver as user input.
|
|
27
|
+
* @returns true if the message was sent, false otherwise.
|
|
28
|
+
*/
|
|
29
|
+
export async function deliverSignalToTask(taskId, signalType, message) {
|
|
30
|
+
// ── 1. Try an active session ──────────────────────────────
|
|
31
|
+
const activeSessions = sessionStore.getActiveSessionsForTask(taskId);
|
|
32
|
+
if (activeSessions.length > 0) {
|
|
33
|
+
const session = activeSessions[0];
|
|
34
|
+
return await sendInputToSession(session.id, session.environmentId, message, signalType);
|
|
35
|
+
}
|
|
36
|
+
// ── 2. Try reanimating the latest terminal session ────────
|
|
37
|
+
const latest = sessionStore.getLatestSessionForTask(taskId);
|
|
38
|
+
if (!latest) {
|
|
39
|
+
logger.warn({ taskId, signalType }, "No session exists for task — signal dropped");
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (ACTIVE_STATUSES.has(latest.status)) {
|
|
43
|
+
// Should not happen (getActiveSessionsForTask would have found it),
|
|
44
|
+
// but handle it defensively.
|
|
45
|
+
return await sendInputToSession(latest.id, latest.environmentId, message, signalType);
|
|
46
|
+
}
|
|
47
|
+
if (!latest.runtimeSessionId) {
|
|
48
|
+
logger.warn({ taskId, sessionId: latest.id, signalType }, "Latest session has no runtimeSessionId — cannot reanimate, signal dropped");
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
// Subscribe to the session stream BEFORE reanimating so we don't miss
|
|
52
|
+
// the waiting_input event if the runtime reaches IDLE quickly (e.g. stub).
|
|
53
|
+
const idleWaiter = waitForSessionIdle(latest.id, REANIMATE_IDLE_TIMEOUT_MS);
|
|
54
|
+
try {
|
|
55
|
+
reanimateAgent(latest.id);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
idleWaiter.cancel();
|
|
59
|
+
logger.error({ err, taskId, sessionId: latest.id, signalType }, "Failed to reanimate session for signal delivery");
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
// Wait for the reanimated session to reach IDLE
|
|
63
|
+
const reachedIdle = await idleWaiter.promise;
|
|
64
|
+
if (!reachedIdle) {
|
|
65
|
+
logger.error({ taskId, sessionId: latest.id, signalType }, "Reanimated session did not reach IDLE within timeout — signal dropped");
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return await sendInputToSession(latest.id, latest.environmentId, message, signalType);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Send input text to a session via its environment's PowerLine connection.
|
|
72
|
+
* Bypasses the server-side IDLE guard — the agent runtime accepts input at any
|
|
73
|
+
* time and picks it up at the next turn boundary.
|
|
74
|
+
*/
|
|
75
|
+
async function sendInputToSession(sessionId, environmentId, text, signalType) {
|
|
76
|
+
const conn = adapterManager.getConnection(environmentId);
|
|
77
|
+
if (!conn) {
|
|
78
|
+
logger.error({ sessionId, environmentId, signalType }, "Environment not connected — signal delivery failed");
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
// Record the signal as a user_input event in the session log and stream,
|
|
83
|
+
// matching the pattern used by the WS bridge for regular user input.
|
|
84
|
+
const session = sessionStore.getSession(sessionId);
|
|
85
|
+
const userInputEvent = create(grackle.SessionEventSchema, {
|
|
86
|
+
sessionId,
|
|
87
|
+
type: grackle.EventType.USER_INPUT,
|
|
88
|
+
timestamp: new Date().toISOString(),
|
|
89
|
+
content: text,
|
|
90
|
+
});
|
|
91
|
+
if (session?.logPath) {
|
|
92
|
+
// Ensure the stream is open before writing — the session may still be
|
|
93
|
+
// PENDING and processEventStream may not have called initLog yet.
|
|
94
|
+
logWriter.ensureLogInitialized(session.logPath);
|
|
95
|
+
logWriter.writeEvent(session.logPath, userInputEvent);
|
|
96
|
+
}
|
|
97
|
+
streamHub.publish(userInputEvent);
|
|
98
|
+
await conn.client.sendInput(create(powerline.InputMessageSchema, { sessionId, text }));
|
|
99
|
+
logger.info({ sessionId, signalType }, "Signal delivered to session");
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
logger.error({ err, sessionId, signalType }, "sendInput failed during signal delivery");
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Begin watching for a session to reach IDLE status via StreamHub events.
|
|
109
|
+
* Subscribes immediately so events are captured even before the caller starts
|
|
110
|
+
* the session (e.g. via reanimateAgent).
|
|
111
|
+
*/
|
|
112
|
+
function waitForSessionIdle(sessionId, timeoutMs) {
|
|
113
|
+
const stream = streamHub.createStream(sessionId);
|
|
114
|
+
let timer;
|
|
115
|
+
const promise = (async () => {
|
|
116
|
+
// Check DB after subscribing to close the race window.
|
|
117
|
+
const current = sessionStore.getSession(sessionId);
|
|
118
|
+
if (current?.status === SESSION_STATUS.IDLE) {
|
|
119
|
+
stream.cancel();
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
return await Promise.race([
|
|
124
|
+
(async () => {
|
|
125
|
+
for await (const event of stream) {
|
|
126
|
+
// Only inspect status events — other event types (text, tool_use, etc.)
|
|
127
|
+
// can have arbitrary content that might accidentally match status strings.
|
|
128
|
+
if (event.type !== grackle.EventType.STATUS) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
// "waiting_input" is the runtime status that maps to IDLE in the session store.
|
|
132
|
+
if (event.content === "waiting_input") {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
// If the session hit a terminal state, stop waiting
|
|
136
|
+
if (["completed", "failed", "killed", "interrupted"].includes(event.content)) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
})(),
|
|
142
|
+
new Promise((resolve) => {
|
|
143
|
+
timer = setTimeout(() => {
|
|
144
|
+
stream.cancel();
|
|
145
|
+
resolve(false);
|
|
146
|
+
}, timeoutMs);
|
|
147
|
+
}),
|
|
148
|
+
]);
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
if (timer !== undefined) {
|
|
152
|
+
clearTimeout(timer);
|
|
153
|
+
}
|
|
154
|
+
stream.cancel();
|
|
155
|
+
}
|
|
156
|
+
})();
|
|
157
|
+
return {
|
|
158
|
+
promise,
|
|
159
|
+
cancel: () => {
|
|
160
|
+
stream.cancel();
|
|
161
|
+
if (timer !== undefined) {
|
|
162
|
+
clearTimeout(timer);
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=signal-delivery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-delivery.js","sourceRoot":"","sources":["../../src/signals/signal-delivery.ts"],"names":[],"mappings":"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"}
|