@grackle-ai/plugin-core 0.96.3
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/codespace-handlers.d.ts +6 -0
- package/dist/codespace-handlers.d.ts.map +1 -0
- package/dist/codespace-handlers.js +66 -0
- package/dist/codespace-handlers.js.map +1 -0
- package/dist/cron-phase.d.ts +46 -0
- package/dist/cron-phase.d.ts.map +1 -0
- package/dist/cron-phase.js +88 -0
- package/dist/cron-phase.js.map +1 -0
- package/dist/dispatch-phase.d.ts +46 -0
- package/dist/dispatch-phase.d.ts.map +1 -0
- package/dist/dispatch-phase.js +99 -0
- package/dist/dispatch-phase.js.map +1 -0
- package/dist/environment-handlers.d.ts +16 -0
- package/dist/environment-handlers.d.ts.map +1 -0
- package/dist/environment-handlers.js +255 -0
- package/dist/environment-handlers.js.map +1 -0
- package/dist/environment-reconciliation.d.ts +35 -0
- package/dist/environment-reconciliation.d.ts.map +1 -0
- package/dist/environment-reconciliation.js +74 -0
- package/dist/environment-reconciliation.js.map +1 -0
- package/dist/escalation-handlers.d.ts +8 -0
- package/dist/escalation-handlers.d.ts.map +1 -0
- package/dist/escalation-handlers.js +60 -0
- package/dist/escalation-handlers.js.map +1 -0
- package/dist/finding-handlers.d.ts +8 -0
- package/dist/finding-handlers.d.ts.map +1 -0
- package/dist/finding-handlers.js +38 -0
- package/dist/finding-handlers.js.map +1 -0
- package/dist/grpc-proto-converters.d.ts +31 -0
- package/dist/grpc-proto-converters.d.ts.map +1 -0
- package/dist/grpc-proto-converters.js +222 -0
- package/dist/grpc-proto-converters.js.map +1 -0
- package/dist/grpc-service.d.ts +21 -0
- package/dist/grpc-service.d.ts.map +1 -0
- package/dist/grpc-service.js +50 -0
- package/dist/grpc-service.js.map +1 -0
- package/dist/grpc-shared.d.ts +22 -0
- package/dist/grpc-shared.d.ts.map +1 -0
- package/dist/grpc-shared.js +68 -0
- package/dist/grpc-shared.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge-handlers.d.ts +12 -0
- package/dist/knowledge-handlers.d.ts.map +1 -0
- package/dist/knowledge-handlers.js +149 -0
- package/dist/knowledge-handlers.js.map +1 -0
- package/dist/lifecycle-cleanup.d.ts +13 -0
- package/dist/lifecycle-cleanup.d.ts.map +1 -0
- package/dist/lifecycle-cleanup.js +35 -0
- package/dist/lifecycle-cleanup.js.map +1 -0
- package/dist/lifecycle.d.ts +28 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +132 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/orphan-phase.d.ts +27 -0
- package/dist/orphan-phase.d.ts.map +1 -0
- package/dist/orphan-phase.js +69 -0
- package/dist/orphan-phase.js.map +1 -0
- package/dist/persona-handlers.d.ts +12 -0
- package/dist/persona-handlers.d.ts.map +1 -0
- package/dist/persona-handlers.js +156 -0
- package/dist/persona-handlers.js.map +1 -0
- package/dist/root-task-boot.d.ts +67 -0
- package/dist/root-task-boot.d.ts.map +1 -0
- package/dist/root-task-boot.js +234 -0
- package/dist/root-task-boot.js.map +1 -0
- package/dist/schedule-expression.d.ts +43 -0
- package/dist/schedule-expression.d.ts.map +1 -0
- package/dist/schedule-expression.js +105 -0
- package/dist/schedule-expression.js.map +1 -0
- package/dist/schedule-handlers.d.ts +12 -0
- package/dist/schedule-handlers.d.ts.map +1 -0
- package/dist/schedule-handlers.js +122 -0
- package/dist/schedule-handlers.js.map +1 -0
- package/dist/session-handlers.d.ts +40 -0
- package/dist/session-handlers.d.ts.map +1 -0
- package/dist/session-handlers.js +610 -0
- package/dist/session-handlers.js.map +1 -0
- package/dist/settings-handlers.d.ts +10 -0
- package/dist/settings-handlers.d.ts.map +1 -0
- package/dist/settings-handlers.js +80 -0
- package/dist/settings-handlers.js.map +1 -0
- package/dist/signals/escalation-auto.d.ts +20 -0
- package/dist/signals/escalation-auto.d.ts.map +1 -0
- package/dist/signals/escalation-auto.js +126 -0
- package/dist/signals/escalation-auto.js.map +1 -0
- package/dist/signals/orphan-reparent.d.ts +31 -0
- package/dist/signals/orphan-reparent.d.ts.map +1 -0
- package/dist/signals/orphan-reparent.js +175 -0
- package/dist/signals/orphan-reparent.js.map +1 -0
- package/dist/signals/sigchld.d.ts +12 -0
- package/dist/signals/sigchld.d.ts.map +1 -0
- package/dist/signals/sigchld.js +177 -0
- package/dist/signals/sigchld.js.map +1 -0
- package/dist/task-handlers.d.ts +22 -0
- package/dist/task-handlers.d.ts.map +1 -0
- package/dist/task-handlers.js +517 -0
- package/dist/task-handlers.js.map +1 -0
- package/dist/test-utils/integration-setup.d.ts +11 -0
- package/dist/test-utils/integration-setup.d.ts.map +1 -0
- package/dist/test-utils/integration-setup.js +26 -0
- package/dist/test-utils/integration-setup.js.map +1 -0
- package/dist/test-utils/mock-database.d.ts +152 -0
- package/dist/test-utils/mock-database.d.ts.map +1 -0
- package/dist/test-utils/mock-database.js +169 -0
- package/dist/test-utils/mock-database.js.map +1 -0
- package/dist/token-handlers.d.ts +12 -0
- package/dist/token-handlers.d.ts.map +1 -0
- package/dist/token-handlers.js +85 -0
- package/dist/token-handlers.js.map +1 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/utils/format-gh-error.d.ts +6 -0
- package/dist/utils/format-gh-error.d.ts.map +1 -0
- package/dist/utils/format-gh-error.js +30 -0
- package/dist/utils/format-gh-error.js.map +1 -0
- package/dist/workspace-handlers.d.ts +16 -0
- package/dist/workspace-handlers.d.ts.map +1 -0
- package/dist/workspace-handlers.js +146 -0
- package/dist/workspace-handlers.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { SESSION_STATUS } from "@grackle-ai/common";
|
|
2
|
+
import { taskStore, sessionStore } from "@grackle-ai/database";
|
|
3
|
+
import { readLastTextEntry } from "@grackle-ai/core";
|
|
4
|
+
import { deliverSignalToTask } from "@grackle-ai/core";
|
|
5
|
+
import { logger } from "@grackle-ai/core";
|
|
6
|
+
/** Maximum length for the child's last text message in the notification. */
|
|
7
|
+
const MAX_LAST_MESSAGE_LENGTH = 2000;
|
|
8
|
+
/** Maximum number of delivery attempts (1 initial + retries). */
|
|
9
|
+
const MAX_DELIVERY_ATTEMPTS = 3;
|
|
10
|
+
/** Delay (ms) between delivery retries. */
|
|
11
|
+
const DELIVERY_RETRY_DELAY_MS = 1_000;
|
|
12
|
+
/**
|
|
13
|
+
* Session statuses that trigger SIGCHLD. LLM agents don't reliably exit() —
|
|
14
|
+
* they go IDLE when they stop working. STOPPED fires when the session's event
|
|
15
|
+
* stream ends (agent-initiated, not user-initiated — the user marking a task
|
|
16
|
+
* "Complete" emits task.completed which this subscriber does not listen to).
|
|
17
|
+
* Dedup prevents double notification if both IDLE and STOPPED fire for the
|
|
18
|
+
* same session.
|
|
19
|
+
*/
|
|
20
|
+
const SIGCHLD_STATUSES = new Set([
|
|
21
|
+
SESSION_STATUS.IDLE,
|
|
22
|
+
SESSION_STATUS.STOPPED,
|
|
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
|
+
/** Human-readable status labels for the notification text (non-STOPPED statuses only). */
|
|
27
|
+
const STATUS_LABELS = {
|
|
28
|
+
[SESSION_STATUS.IDLE]: "finished working (awaiting review)",
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Create the SIGCHLD event-bus subscriber.
|
|
32
|
+
*
|
|
33
|
+
* Watches for child tasks whose latest session reaches a SIGCHLD-triggering
|
|
34
|
+
* status (idle or stopped) and delivers a notification to the parent task.
|
|
35
|
+
*
|
|
36
|
+
* @param ctx - Plugin context providing event-bus access.
|
|
37
|
+
* @returns A Disposable that unsubscribes and clears dedup state.
|
|
38
|
+
*/
|
|
39
|
+
export function createSigchldSubscriber(ctx) {
|
|
40
|
+
/** Track delivered notifications to prevent duplicates: key → delivery timestamp. */
|
|
41
|
+
const delivered = new Map();
|
|
42
|
+
const unsubscribe = ctx.subscribe((event) => {
|
|
43
|
+
if (event.type !== "task.updated") {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const childTaskId = event.payload.taskId;
|
|
47
|
+
if (!childTaskId) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Fire-and-forget async handler — errors are logged, never thrown
|
|
51
|
+
(async () => {
|
|
52
|
+
try {
|
|
53
|
+
await handleTaskUpdated(delivered, childTaskId);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
logger.error({ err, childTaskId }, "SIGCHLD handler error");
|
|
57
|
+
}
|
|
58
|
+
})().catch(() => { });
|
|
59
|
+
});
|
|
60
|
+
logger.info("SIGCHLD subscriber initialized");
|
|
61
|
+
return {
|
|
62
|
+
dispose() {
|
|
63
|
+
unsubscribe();
|
|
64
|
+
delivered.clear();
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle a task.updated event: check if the task is a child whose latest
|
|
70
|
+
* session has reached a SIGCHLD-triggering status (idle or terminal),
|
|
71
|
+
* and if so, deliver a SIGCHLD notification to the parent.
|
|
72
|
+
*/
|
|
73
|
+
async function handleTaskUpdated(delivered, childTaskId) {
|
|
74
|
+
const childTask = taskStore.getTask(childTaskId);
|
|
75
|
+
if (!childTask) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// Only child tasks (with a parent) trigger SIGCHLD
|
|
79
|
+
if (!childTask.parentTaskId) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Check if the child session is in a SIGCHLD-triggering status (idle or terminal)
|
|
83
|
+
const latestSession = sessionStore.getLatestSessionForTask(childTaskId);
|
|
84
|
+
if (!latestSession) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (!SIGCHLD_STATUSES.has(latestSession.status)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Idempotency: don't re-deliver for the same child+session pair.
|
|
91
|
+
// Set the key optimistically to prevent concurrent async handlers from
|
|
92
|
+
// both passing the check (e.g. completed + interrupted firing together).
|
|
93
|
+
const dedupeKey = `${childTaskId}:${latestSession.id}`;
|
|
94
|
+
const now = Date.now();
|
|
95
|
+
const previousDelivery = delivered.get(dedupeKey);
|
|
96
|
+
if (previousDelivery !== undefined && now - previousDelivery < DEDUP_TTL_MS) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
delivered.set(dedupeKey, now);
|
|
100
|
+
// Prune expired entries to prevent unbounded growth
|
|
101
|
+
pruneMap(delivered, now);
|
|
102
|
+
// Extract the last text message from the child's session log
|
|
103
|
+
const lastTextMessage = extractLastTextMessage(latestSession.logPath || undefined);
|
|
104
|
+
// Format the notification with actionable instructions for the parent
|
|
105
|
+
let statusLabel;
|
|
106
|
+
if (latestSession.status === SESSION_STATUS.STOPPED) {
|
|
107
|
+
statusLabel = latestSession.endReason === "completed"
|
|
108
|
+
? "completed successfully"
|
|
109
|
+
: latestSession.endReason === "killed"
|
|
110
|
+
? "was killed"
|
|
111
|
+
: "crashed unexpectedly";
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
statusLabel = STATUS_LABELS[latestSession.status] || latestSession.status;
|
|
115
|
+
}
|
|
116
|
+
let message = `[SIGCHLD] Child task "${childTask.title}" (${childTaskId}) ${statusLabel}.`;
|
|
117
|
+
if (lastTextMessage) {
|
|
118
|
+
const truncated = lastTextMessage.length > MAX_LAST_MESSAGE_LENGTH
|
|
119
|
+
? lastTextMessage.slice(0, MAX_LAST_MESSAGE_LENGTH) + "..."
|
|
120
|
+
: lastTextMessage;
|
|
121
|
+
message += `\n\nLast message from child:\n> ${truncated}`;
|
|
122
|
+
}
|
|
123
|
+
if (latestSession.status === SESSION_STATUS.IDLE) {
|
|
124
|
+
message += "\n\nReview the child's work. If satisfactory, mark it complete with "
|
|
125
|
+
+ `task_complete({ taskId: "${childTaskId}" }). `
|
|
126
|
+
+ "If more work is needed, send additional input to the child's session.";
|
|
127
|
+
}
|
|
128
|
+
else if (latestSession.status === SESSION_STATUS.STOPPED && latestSession.endReason === "interrupted") {
|
|
129
|
+
message += "\n\nThe child task crashed unexpectedly. Review the error and decide whether to retry or reassign the work.";
|
|
130
|
+
}
|
|
131
|
+
logger.info({ childTaskId, parentTaskId: childTask.parentTaskId, status: latestSession.status }, "Delivering SIGCHLD to parent task");
|
|
132
|
+
// Retry inline on failure to prevent signal loss from the dedup race condition:
|
|
133
|
+
// without retry, a concurrent handler that was deduped cannot re-attempt delivery,
|
|
134
|
+
// and deleting the key only helps if another task.updated event arrives (not guaranteed).
|
|
135
|
+
let success = false;
|
|
136
|
+
for (let attempt = 0; attempt < MAX_DELIVERY_ATTEMPTS; attempt++) {
|
|
137
|
+
if (attempt > 0) {
|
|
138
|
+
logger.warn({ childTaskId, parentTaskId: childTask.parentTaskId, attempt }, "SIGCHLD delivery failed — retrying");
|
|
139
|
+
await new Promise((resolve) => setTimeout(resolve, DELIVERY_RETRY_DELAY_MS));
|
|
140
|
+
}
|
|
141
|
+
success = await deliverSignalToTask(childTask.parentTaskId, "sigchld", message);
|
|
142
|
+
if (success) {
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (!success) {
|
|
147
|
+
// All retries exhausted — delete the dedup key so future events can try again
|
|
148
|
+
delivered.delete(dedupeKey);
|
|
149
|
+
logger.error({ childTaskId, parentTaskId: childTask.parentTaskId, attempts: MAX_DELIVERY_ATTEMPTS }, "SIGCHLD delivery failed after all retries");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/** Remove dedup entries older than DEDUP_TTL_MS. */
|
|
153
|
+
function pruneMap(map, now) {
|
|
154
|
+
for (const [key, timestamp] of map) {
|
|
155
|
+
if (now - timestamp >= DEDUP_TTL_MS) {
|
|
156
|
+
map.delete(key);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Read the session log and extract the content of the last "text" entry.
|
|
162
|
+
* Uses readLastTextEntry which only reads the tail of the file (up to 64 KB)
|
|
163
|
+
* instead of parsing the entire log into memory.
|
|
164
|
+
* Returns an empty string if no text entries exist or the log cannot be read.
|
|
165
|
+
*/
|
|
166
|
+
function extractLastTextMessage(logPath) {
|
|
167
|
+
if (!logPath) {
|
|
168
|
+
return "";
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
return readLastTextEntry(logPath)?.content ?? "";
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return "";
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# 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,22 @@
|
|
|
1
|
+
import { grackle } from "@grackle-ai/common";
|
|
2
|
+
/** List tasks, optionally filtered by workspace, search query, or status. */
|
|
3
|
+
export declare function listTasks(req: grackle.ListTasksRequest): Promise<grackle.TaskList>;
|
|
4
|
+
/** Create a new task. */
|
|
5
|
+
export declare function createTask(req: grackle.CreateTaskRequest): Promise<grackle.Task>;
|
|
6
|
+
/** Get a task by ID with computed status. */
|
|
7
|
+
export declare function getTask(req: grackle.TaskId): Promise<grackle.Task>;
|
|
8
|
+
/** Update task fields or late-bind a session to a task. */
|
|
9
|
+
export declare function updateTask(req: grackle.UpdateTaskRequest): Promise<grackle.Task>;
|
|
10
|
+
/** Start a task by spawning a new agent session. */
|
|
11
|
+
export declare function startTask(req: grackle.StartTaskRequest): Promise<grackle.Session>;
|
|
12
|
+
/** Mark a task as complete and clean up active sessions. */
|
|
13
|
+
export declare function completeTask(req: grackle.TaskId): Promise<grackle.Task>;
|
|
14
|
+
/** Set the workpad JSON for a task. */
|
|
15
|
+
export declare function setWorkpad(req: grackle.SetWorkpadRequest): Promise<grackle.Task>;
|
|
16
|
+
/** Resume the latest session for a task. */
|
|
17
|
+
export declare function resumeTask(req: grackle.TaskId): Promise<grackle.Session>;
|
|
18
|
+
/** Stop a task by terminating all its active sessions. */
|
|
19
|
+
export declare function stopTask(req: grackle.TaskId): Promise<grackle.Task>;
|
|
20
|
+
/** Delete a task and all its sessions. */
|
|
21
|
+
export declare function deleteTask(req: grackle.TaskId): Promise<grackle.Empty>;
|
|
22
|
+
//# sourceMappingURL=task-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-handlers.d.ts","sourceRoot":"","sources":["../src/task-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAa,MAAM,oBAAoB,CAAC;AAwCxD,6EAA6E;AAC7E,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAwBxF;AAED,yBAAyB;AACzB,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAyDtF;AAED,6CAA6C;AAC7C,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAQxE;AAED,2DAA2D;AAC3D,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CA0EtF;AAED,oDAAoD;AACpD,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAoOvF;AAED,4DAA4D;AAC5D,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAsD7E;AAED,uCAAuC;AACvC,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CA2BtF;AAED,4CAA4C;AAC5C,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CA6D9E;AAED,0DAA0D;AAC1D,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CA2CzE;AAED,0CAA0C;AAC1C,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAqC5E"}
|