@grackle-ai/core 0.82.2 → 0.83.1
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 +1 -1
- package/dist/cron-phase.d.ts.map +1 -1
- package/dist/cron-phase.js +1 -1
- package/dist/cron-phase.js.map +1 -1
- package/dist/environment-handlers.d.ts +16 -0
- package/dist/environment-handlers.d.ts.map +1 -0
- package/dist/environment-handlers.js +237 -0
- package/dist/environment-handlers.js.map +1 -0
- package/dist/event-bus.d.ts +1 -1
- package/dist/event-bus.d.ts.map +1 -1
- package/dist/event-bus.js.map +1 -1
- package/dist/event-hub.d.ts +29 -0
- package/dist/event-hub.d.ts.map +1 -0
- package/dist/event-hub.js +89 -0
- package/dist/event-hub.js.map +1 -0
- package/dist/finding-handlers.d.ts +6 -0
- package/dist/finding-handlers.d.ts.map +1 -0
- package/dist/finding-handlers.js +27 -0
- package/dist/finding-handlers.js.map +1 -0
- package/dist/grpc-mcp-config.d.ts +11 -0
- package/dist/grpc-mcp-config.d.ts.map +1 -0
- package/dist/grpc-mcp-config.js +29 -0
- package/dist/grpc-mcp-config.js.map +1 -0
- package/dist/grpc-proto-converters.d.ts +25 -0
- package/dist/grpc-proto-converters.d.ts.map +1 -0
- package/dist/grpc-proto-converters.js +193 -0
- package/dist/grpc-proto-converters.js.map +1 -0
- package/dist/grpc-service.d.ts +3 -19
- package/dist/grpc-service.d.ts.map +1 -1
- package/dist/grpc-service.js +28 -1989
- package/dist/grpc-service.js.map +1 -1
- package/dist/grpc-shared.d.ts +25 -0
- package/dist/grpc-shared.d.ts.map +1 -0
- package/dist/grpc-shared.js +110 -0
- package/dist/grpc-shared.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/knowledge-handlers.d.ts +12 -0
- package/dist/knowledge-handlers.d.ts.map +1 -0
- package/dist/knowledge-handlers.js +85 -0
- package/dist/knowledge-handlers.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 +148 -0
- package/dist/persona-handlers.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 +34 -0
- package/dist/session-handlers.d.ts.map +1 -0
- package/dist/session-handlers.js +488 -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 +68 -0
- package/dist/settings-handlers.js.map +1 -0
- package/dist/signals/orphan-reparent.d.ts +30 -0
- package/dist/signals/orphan-reparent.d.ts.map +1 -0
- package/dist/signals/orphan-reparent.js +179 -0
- package/dist/signals/orphan-reparent.js.map +1 -0
- package/dist/signals/sigchld.d.ts.map +1 -1
- package/dist/signals/sigchld.js +4 -8
- package/dist/signals/sigchld.js.map +1 -1
- package/dist/task-handlers.d.ts +22 -0
- package/dist/task-handlers.d.ts.map +1 -0
- package/dist/task-handlers.js +463 -0
- package/dist/task-handlers.js.map +1 -0
- package/dist/task-session.d.ts +26 -0
- package/dist/task-session.d.ts.map +1 -0
- package/dist/task-session.js +132 -0
- package/dist/task-session.js.map +1 -0
- package/dist/test-utils/mock-database.d.ts +2 -0
- package/dist/test-utils/mock-database.d.ts.map +1 -1
- package/dist/test-utils/mock-database.js +2 -0
- package/dist/test-utils/mock-database.js.map +1 -1
- 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/workspace-handlers.d.ts +12 -0
- package/dist/workspace-handlers.d.ts.map +1 -0
- package/dist/workspace-handlers.js +86 -0
- package/dist/workspace-handlers.js.map +1 -0
- package/package.json +7 -9
- package/dist/ws-bridge.d.ts +0 -30
- package/dist/ws-bridge.d.ts.map +0 -1
- package/dist/ws-bridge.js +0 -372
- package/dist/ws-bridge.js.map +0 -1
- package/dist/ws-broadcast.d.ts +0 -19
- package/dist/ws-broadcast.d.ts.map +0 -1
- package/dist/ws-broadcast.js +0 -60
- package/dist/ws-broadcast.js.map +0 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { grackle } from "@grackle-ai/common";
|
|
2
|
+
/** List available GitHub Codespaces. */
|
|
3
|
+
export declare function listCodespaces(): Promise<grackle.CodespaceList>;
|
|
4
|
+
/** Create a new GitHub Codespace. */
|
|
5
|
+
export declare function createCodespace(req: grackle.CreateCodespaceRequest): Promise<grackle.CreateCodespaceResponse>;
|
|
6
|
+
//# sourceMappingURL=codespace-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codespace-handlers.d.ts","sourceRoot":"","sources":["../src/codespace-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAc7C,wCAAwC;AACxC,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAgCrE;AAED,qCAAqC;AACrC,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAwBnH"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ConnectError, Code } from "@connectrpc/connect";
|
|
2
|
+
import { create } from "@bufbuild/protobuf";
|
|
3
|
+
import { grackle } from "@grackle-ai/common";
|
|
4
|
+
import { exec } from "./utils/exec.js";
|
|
5
|
+
import { formatGhError } from "./utils/format-gh-error.js";
|
|
6
|
+
import { logger } from "./logger.js";
|
|
7
|
+
/** Timeout for `gh codespace list` in milliseconds. */
|
|
8
|
+
const GH_CODESPACE_LIST_TIMEOUT_MS = 30_000;
|
|
9
|
+
/** Timeout for `gh codespace create` in milliseconds. */
|
|
10
|
+
const GH_CODESPACE_CREATE_TIMEOUT_MS = 300_000;
|
|
11
|
+
/** Maximum number of codespaces returned by `gh codespace list`. */
|
|
12
|
+
const GH_CODESPACE_LIST_LIMIT = 50;
|
|
13
|
+
/** List available GitHub Codespaces. */
|
|
14
|
+
export async function listCodespaces() {
|
|
15
|
+
try {
|
|
16
|
+
const result = await exec("gh", [
|
|
17
|
+
"codespace",
|
|
18
|
+
"list",
|
|
19
|
+
"--json",
|
|
20
|
+
"name,repository,state,gitStatus",
|
|
21
|
+
"--limit",
|
|
22
|
+
String(GH_CODESPACE_LIST_LIMIT),
|
|
23
|
+
], { timeout: GH_CODESPACE_LIST_TIMEOUT_MS });
|
|
24
|
+
const entries = JSON.parse(result.stdout || "[]");
|
|
25
|
+
return create(grackle.CodespaceListSchema, {
|
|
26
|
+
codespaces: entries.map((e) => create(grackle.CodespaceInfoSchema, {
|
|
27
|
+
name: String(e.name ?? ""),
|
|
28
|
+
repository: String(e.repository ?? ""),
|
|
29
|
+
state: String(e.state ?? ""),
|
|
30
|
+
gitStatus: String(e.gitStatus ?? ""),
|
|
31
|
+
})),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
logger.warn({ err }, "Failed to list codespaces");
|
|
36
|
+
return create(grackle.CodespaceListSchema, {
|
|
37
|
+
codespaces: [],
|
|
38
|
+
error: formatGhError(err, "list codespaces"),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Create a new GitHub Codespace. */
|
|
43
|
+
export async function createCodespace(req) {
|
|
44
|
+
if (!req.repo.trim()) {
|
|
45
|
+
throw new ConnectError("repo is required", Code.InvalidArgument);
|
|
46
|
+
}
|
|
47
|
+
const trimmedRepo = req.repo.trim();
|
|
48
|
+
const createArgs = ["codespace", "create", "--repo", trimmedRepo];
|
|
49
|
+
if (req.machine.trim()) {
|
|
50
|
+
createArgs.push("--machine", req.machine.trim());
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const result = await exec("gh", createArgs, {
|
|
54
|
+
timeout: GH_CODESPACE_CREATE_TIMEOUT_MS,
|
|
55
|
+
});
|
|
56
|
+
return create(grackle.CreateCodespaceResponseSchema, {
|
|
57
|
+
name: result.stdout.trim(),
|
|
58
|
+
repository: trimmedRepo,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
logger.error({ err, repo: trimmedRepo }, "Failed to create codespace");
|
|
63
|
+
throw new ConnectError(formatGhError(err, "create codespace"), Code.Internal);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=codespace-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codespace-handlers.js","sourceRoot":"","sources":["../src/codespace-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/cron-phase.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface CronPhaseDeps {
|
|
|
18
18
|
/** Set the schedule_id FK on a task. */
|
|
19
19
|
setTaskScheduleId: (taskId: string, scheduleId: string) => void;
|
|
20
20
|
/** Start a task session internally (same as root task boot listener). */
|
|
21
|
-
startTaskSession: (
|
|
21
|
+
startTaskSession: (task: TaskRow, options?: {
|
|
22
22
|
personaId?: string;
|
|
23
23
|
environmentId?: string;
|
|
24
24
|
notes?: string;
|
package/dist/cron-phase.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron-phase.d.ts","sourceRoot":"","sources":["../src/cron-phase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,eAAe,EAAE,MAAM,WAAW,EAAE,CAAC;IACrC,+EAA+E;IAC/E,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5E,2CAA2C;IAC3C,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,OAAO,EACtB,gBAAgB,CAAC,EAAE,MAAM,KACtB,IAAI,CAAC;IACV,wCAAwC;IACxC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,yEAAyE;IACzE,gBAAgB,EAAE,CAChB,
|
|
1
|
+
{"version":3,"file":"cron-phase.d.ts","sourceRoot":"","sources":["../src/cron-phase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,eAAe,EAAE,MAAM,WAAW,EAAE,CAAC;IACrC,+EAA+E;IAC/E,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5E,2CAA2C;IAC3C,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,OAAO,EACtB,gBAAgB,CAAC,EAAE,MAAM,KACtB,IAAI,CAAC;IACV,wCAAwC;IACxC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,yEAAyE;IACzE,gBAAgB,EAAE,CAChB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KACrE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjC,2BAA2B;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACzE,4DAA4D;IAC5D,6BAA6B,EAAE,MAAM,cAAc,GAAG,SAAS,CAAC;IAChE,+BAA+B;IAC/B,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACtF,0DAA0D;IAC1D,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAC7C,mEAAmE;IAEnE,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACrF,4CAA4C;IAC5C,sBAAsB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,mBAAmB,CAcxE"}
|
package/dist/cron-phase.js
CHANGED
|
@@ -89,7 +89,7 @@ async function fireSchedule(deps, schedule) {
|
|
|
89
89
|
return;
|
|
90
90
|
}
|
|
91
91
|
// Start the task session
|
|
92
|
-
const error = await deps.startTaskSession(
|
|
92
|
+
const error = await deps.startTaskSession(task, {
|
|
93
93
|
environmentId,
|
|
94
94
|
personaId: schedule.personaId,
|
|
95
95
|
});
|
package/dist/cron-phase.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron-phase.js","sourceRoot":"","sources":["../src/cron-phase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cron-phase.js","sourceRoot":"","sources":["../src/cron-phase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { grackle } from "@grackle-ai/common";
|
|
2
|
+
/** List all registered environments. */
|
|
3
|
+
export declare function listEnvironments(): Promise<grackle.EnvironmentList>;
|
|
4
|
+
/** Register a new environment. */
|
|
5
|
+
export declare function addEnvironment(req: grackle.AddEnvironmentRequest): Promise<grackle.Environment>;
|
|
6
|
+
/** Update an existing environment's display name and/or adapter config. */
|
|
7
|
+
export declare function updateEnvironment(req: grackle.UpdateEnvironmentRequest): Promise<grackle.Environment>;
|
|
8
|
+
/** Remove an environment after disconnecting it and cleaning up references. */
|
|
9
|
+
export declare function removeEnvironment(req: grackle.EnvironmentId): Promise<grackle.Empty>;
|
|
10
|
+
/** Provision (bootstrap + connect) an environment, streaming progress events. */
|
|
11
|
+
export declare function provisionEnvironment(req: grackle.ProvisionEnvironmentRequest): AsyncGenerator<grackle.ProvisionEvent>;
|
|
12
|
+
/** Stop (disconnect) an environment. */
|
|
13
|
+
export declare function stopEnvironment(req: grackle.EnvironmentId): Promise<grackle.Empty>;
|
|
14
|
+
/** Destroy an environment and its underlying resources. */
|
|
15
|
+
export declare function destroyEnvironment(req: grackle.EnvironmentId): Promise<grackle.Empty>;
|
|
16
|
+
//# sourceMappingURL=environment-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-handlers.d.ts","sourceRoot":"","sources":["../src/environment-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAa7C,wCAAwC;AACxC,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAKzE;AAED,kCAAkC;AAClC,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAcrG;AAED,2EAA2E;AAC3E,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAsC3G;AAED,+EAA+E;AAC/E,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CA8B1F;AAED,iFAAiF;AACjF,wBAAuB,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,2BAA2B,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CA+G5H;AAED,wCAAwC;AACxC,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAcxF;AAED,2DAA2D;AAC3D,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAc3F"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { ConnectError, Code } from "@connectrpc/connect";
|
|
2
|
+
import { create } from "@bufbuild/protobuf";
|
|
3
|
+
import { grackle } from "@grackle-ai/common";
|
|
4
|
+
import { envRegistry, workspaceStore, sessionStore } from "@grackle-ai/database";
|
|
5
|
+
import { reconnectOrProvision } from "@grackle-ai/adapter-sdk";
|
|
6
|
+
import * as adapterManager from "./adapter-manager.js";
|
|
7
|
+
import * as tokenPush from "./token-push.js";
|
|
8
|
+
import { parseAdapterConfig } from "./adapter-config.js";
|
|
9
|
+
import { emit } from "./event-bus.js";
|
|
10
|
+
import { recoverSuspendedSessions } from "./session-recovery.js";
|
|
11
|
+
import { clearReconnectState } from "./auto-reconnect.js";
|
|
12
|
+
import { logger } from "./logger.js";
|
|
13
|
+
import { envRowToProto } from "./grpc-proto-converters.js";
|
|
14
|
+
import { killSessionAndCleanup } from "./grpc-shared.js";
|
|
15
|
+
/** List all registered environments. */
|
|
16
|
+
export async function listEnvironments() {
|
|
17
|
+
const rows = envRegistry.listEnvironments();
|
|
18
|
+
return create(grackle.EnvironmentListSchema, {
|
|
19
|
+
environments: rows.map(envRowToProto),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** Register a new environment. */
|
|
23
|
+
export async function addEnvironment(req) {
|
|
24
|
+
if (!req.displayName || !req.adapterType) {
|
|
25
|
+
throw new ConnectError("displayName and adapterType required", Code.InvalidArgument);
|
|
26
|
+
}
|
|
27
|
+
const id = req.displayName.toLowerCase().replace(/[^a-z0-9-]/g, "-");
|
|
28
|
+
envRegistry.addEnvironment(id, req.displayName, req.adapterType, req.adapterConfig);
|
|
29
|
+
emit("environment.changed", {});
|
|
30
|
+
const row = envRegistry.getEnvironment(id);
|
|
31
|
+
return envRowToProto(row);
|
|
32
|
+
}
|
|
33
|
+
/** Update an existing environment's display name and/or adapter config. */
|
|
34
|
+
export async function updateEnvironment(req) {
|
|
35
|
+
if (!req.id) {
|
|
36
|
+
throw new ConnectError("id is required", Code.InvalidArgument);
|
|
37
|
+
}
|
|
38
|
+
const existing = envRegistry.getEnvironment(req.id);
|
|
39
|
+
if (!existing) {
|
|
40
|
+
throw new ConnectError(`Environment not found: ${req.id}`, Code.NotFound);
|
|
41
|
+
}
|
|
42
|
+
const displayName = req.displayName !== undefined ? req.displayName : undefined;
|
|
43
|
+
if (displayName?.trim() === "") {
|
|
44
|
+
throw new ConnectError("Environment name cannot be empty", Code.InvalidArgument);
|
|
45
|
+
}
|
|
46
|
+
let adapterConfig;
|
|
47
|
+
if (req.adapterConfig !== undefined) {
|
|
48
|
+
const raw = req.adapterConfig.trim() || "{}";
|
|
49
|
+
let parsed;
|
|
50
|
+
try {
|
|
51
|
+
parsed = JSON.parse(raw);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
throw new ConnectError("adapterConfig is not valid JSON", Code.InvalidArgument);
|
|
55
|
+
}
|
|
56
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
57
|
+
throw new ConnectError("adapterConfig must be a JSON object", Code.InvalidArgument);
|
|
58
|
+
}
|
|
59
|
+
adapterConfig = raw;
|
|
60
|
+
}
|
|
61
|
+
const trimmedName = displayName !== undefined ? displayName.trim() : undefined;
|
|
62
|
+
if (trimmedName === undefined && adapterConfig === undefined) {
|
|
63
|
+
throw new ConnectError("No updatable fields provided", Code.InvalidArgument);
|
|
64
|
+
}
|
|
65
|
+
envRegistry.updateEnvironment(req.id, {
|
|
66
|
+
displayName: trimmedName,
|
|
67
|
+
adapterConfig,
|
|
68
|
+
});
|
|
69
|
+
logger.info({ environmentId: req.id, displayName: trimmedName }, "Environment updated");
|
|
70
|
+
emit("environment.changed", {});
|
|
71
|
+
const updated = envRegistry.getEnvironment(req.id);
|
|
72
|
+
return envRowToProto(updated);
|
|
73
|
+
}
|
|
74
|
+
/** Remove an environment after disconnecting it and cleaning up references. */
|
|
75
|
+
export async function removeEnvironment(req) {
|
|
76
|
+
// Block deletion if workspaces still reference this environment
|
|
77
|
+
const wsCount = workspaceStore.countWorkspacesByEnvironment(req.id);
|
|
78
|
+
if (wsCount > 0) {
|
|
79
|
+
throw new ConnectError(`Cannot remove environment: ${wsCount} active workspace(s) still reference it. Archive or reparent them first.`, Code.FailedPrecondition);
|
|
80
|
+
}
|
|
81
|
+
// Stop auto-reconnect attempts for this environment
|
|
82
|
+
clearReconnectState(req.id);
|
|
83
|
+
// Disconnect the adapter if currently connected
|
|
84
|
+
const env = envRegistry.getEnvironment(req.id);
|
|
85
|
+
if (env) {
|
|
86
|
+
const adapter = adapterManager.getAdapter(env.adapterType);
|
|
87
|
+
if (adapter) {
|
|
88
|
+
try {
|
|
89
|
+
await adapter.disconnect(req.id);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
/* best-effort */
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
adapterManager.removeConnection(req.id);
|
|
97
|
+
// Delete sessions referencing this environment (FK constraint)
|
|
98
|
+
sessionStore.deleteByEnvironment(req.id);
|
|
99
|
+
envRegistry.removeEnvironment(req.id);
|
|
100
|
+
emit("environment.changed", {});
|
|
101
|
+
emit("environment.removed", { environmentId: req.id });
|
|
102
|
+
return create(grackle.EmptySchema, {});
|
|
103
|
+
}
|
|
104
|
+
/** Provision (bootstrap + connect) an environment, streaming progress events. */
|
|
105
|
+
export async function* provisionEnvironment(req) {
|
|
106
|
+
// Manual provision overrides auto-reconnect
|
|
107
|
+
clearReconnectState(req.id);
|
|
108
|
+
const env = envRegistry.getEnvironment(req.id);
|
|
109
|
+
if (!env) {
|
|
110
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
111
|
+
stage: "error",
|
|
112
|
+
message: `Environment not found: ${req.id}`,
|
|
113
|
+
progress: 0,
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const adapter = adapterManager.getAdapter(env.adapterType);
|
|
118
|
+
if (!adapter) {
|
|
119
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
120
|
+
stage: "error",
|
|
121
|
+
message: `No adapter for type: ${env.adapterType}`,
|
|
122
|
+
progress: 0,
|
|
123
|
+
});
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Force teardown: kill active session, disconnect adapter, clear connection
|
|
127
|
+
if (req.force) {
|
|
128
|
+
const activeSession = sessionStore.getActiveForEnv(req.id);
|
|
129
|
+
if (activeSession) {
|
|
130
|
+
killSessionAndCleanup(activeSession);
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
await adapter.disconnect(req.id);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// best-effort teardown
|
|
137
|
+
}
|
|
138
|
+
adapterManager.removeConnection(req.id);
|
|
139
|
+
}
|
|
140
|
+
envRegistry.updateEnvironmentStatus(req.id, "connecting");
|
|
141
|
+
emit("environment.changed", {});
|
|
142
|
+
const config = parseAdapterConfig(env.adapterConfig);
|
|
143
|
+
config.defaultRuntime = env.defaultRuntime;
|
|
144
|
+
const powerlineToken = env.powerlineToken;
|
|
145
|
+
try {
|
|
146
|
+
for await (const event of reconnectOrProvision(req.id, adapter, config, powerlineToken, !!env.bootstrapped, req.force)) {
|
|
147
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
148
|
+
stage: event.stage,
|
|
149
|
+
message: event.message,
|
|
150
|
+
progress: event.progress,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
logger.error({ environmentId: req.id, err }, "Provision/bootstrap failed");
|
|
156
|
+
const currentEnv = envRegistry.getEnvironment(req.id);
|
|
157
|
+
if (currentEnv?.status !== "connected") {
|
|
158
|
+
envRegistry.updateEnvironmentStatus(req.id, "error");
|
|
159
|
+
emit("environment.changed", {});
|
|
160
|
+
}
|
|
161
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
162
|
+
stage: "error",
|
|
163
|
+
message: `Provision failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
164
|
+
progress: 0,
|
|
165
|
+
});
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
const conn = await adapter.connect(req.id, config, powerlineToken);
|
|
170
|
+
adapterManager.setConnection(req.id, conn);
|
|
171
|
+
// Push stored tokens to newly connected environment
|
|
172
|
+
await tokenPush.pushToEnv(req.id);
|
|
173
|
+
envRegistry.updateEnvironmentStatus(req.id, "connected");
|
|
174
|
+
envRegistry.markBootstrapped(req.id);
|
|
175
|
+
emit("environment.changed", {});
|
|
176
|
+
// Auto-recover suspended sessions (fire-and-forget)
|
|
177
|
+
recoverSuspendedSessions(req.id, conn).catch((err) => {
|
|
178
|
+
logger.error({ environmentId: req.id, err }, "Session recovery failed");
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
// adapter.connect() actually failed
|
|
183
|
+
envRegistry.updateEnvironmentStatus(req.id, "error");
|
|
184
|
+
emit("environment.changed", {});
|
|
185
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
186
|
+
stage: "error",
|
|
187
|
+
message: `Connection failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
188
|
+
progress: 0,
|
|
189
|
+
});
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Best-effort: notify client that provision completed.
|
|
193
|
+
// If the client already disconnected (e.g. fire-and-forget fetch in
|
|
194
|
+
// test helpers), the yield throws — but the environment IS connected,
|
|
195
|
+
// so we must NOT revert the status to "error".
|
|
196
|
+
try {
|
|
197
|
+
yield create(grackle.ProvisionEventSchema, {
|
|
198
|
+
stage: "ready",
|
|
199
|
+
message: "Environment connected",
|
|
200
|
+
progress: 1,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// Client disconnected after successful provision — ignore
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/** Stop (disconnect) an environment. */
|
|
208
|
+
export async function stopEnvironment(req) {
|
|
209
|
+
const env = envRegistry.getEnvironment(req.id);
|
|
210
|
+
if (!env) {
|
|
211
|
+
throw new ConnectError(`Environment not found: ${req.id}`, Code.NotFound);
|
|
212
|
+
}
|
|
213
|
+
const adapter = adapterManager.getAdapter(env.adapterType);
|
|
214
|
+
if (adapter) {
|
|
215
|
+
await adapter.stop(req.id, parseAdapterConfig(env.adapterConfig));
|
|
216
|
+
}
|
|
217
|
+
adapterManager.removeConnection(req.id);
|
|
218
|
+
envRegistry.updateEnvironmentStatus(req.id, "disconnected");
|
|
219
|
+
emit("environment.changed", {});
|
|
220
|
+
return create(grackle.EmptySchema, {});
|
|
221
|
+
}
|
|
222
|
+
/** Destroy an environment and its underlying resources. */
|
|
223
|
+
export async function destroyEnvironment(req) {
|
|
224
|
+
const env = envRegistry.getEnvironment(req.id);
|
|
225
|
+
if (!env) {
|
|
226
|
+
throw new ConnectError(`Environment not found: ${req.id}`, Code.NotFound);
|
|
227
|
+
}
|
|
228
|
+
const adapter = adapterManager.getAdapter(env.adapterType);
|
|
229
|
+
if (adapter) {
|
|
230
|
+
await adapter.destroy(req.id, parseAdapterConfig(env.adapterConfig));
|
|
231
|
+
}
|
|
232
|
+
adapterManager.removeConnection(req.id);
|
|
233
|
+
envRegistry.updateEnvironmentStatus(req.id, "disconnected");
|
|
234
|
+
emit("environment.changed", {});
|
|
235
|
+
return create(grackle.EmptySchema, {});
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=environment-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-handlers.js","sourceRoot":"","sources":["../src/environment-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,wCAAwC;AACxC,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC;IAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE;QAC3C,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;KACtC,CAAC,CAAC;AACL,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAkC;IACrE,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,IAAI,YAAY,CAAC,sCAAsC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACrE,WAAW,CAAC,cAAc,CACxB,EAAE,EACF,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,aAAa,CAClB,CAAC;IACF,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC3C,OAAO,aAAa,CAAC,GAAI,CAAC,CAAC;AAC7B,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAqC;IAC3E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,YAAY,CAAC,0BAA0B,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,IAAI,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,YAAY,CAAC,kCAAkC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,aAAiC,CAAC;IACtC,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;QAC7C,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,YAAY,CAAC,iCAAiC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,YAAY,CAAC,qCAAqC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACtF,CAAC;QACD,aAAa,GAAG,GAAG,CAAC;IACtB,CAAC;IACD,MAAM,WAAW,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,IAAI,WAAW,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAC7D,MAAM,IAAI,YAAY,CAAC,8BAA8B,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/E,CAAC;IACD,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE;QACpC,WAAW,EAAE,WAAW;QACxB,aAAa;KACd,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACxF,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,aAAa,CAAC,OAAQ,CAAC,CAAC;AACjC,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAA0B;IAChE,gEAAgE;IAChE,MAAM,OAAO,GAAG,cAAc,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CACpB,8BAA8B,OAAO,0EAA0E,EAC/G,IAAI,CAAC,kBAAkB,CACxB,CAAC;IACJ,CAAC;IACD,oDAAoD;IACpD,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,gDAAgD;IAChD,MAAM,GAAG,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxC,+DAA+D;IAC/D,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,oBAAoB,CAAC,GAAwC;IAClF,4CAA4C;IAC5C,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACzC,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,0BAA0B,GAAG,CAAC,EAAE,EAAE;YAC3C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACzC,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,wBAAwB,GAAG,CAAC,WAAW,EAAE;YAClD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,4EAA4E;IAC5E,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,aAAa,GAAG,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,aAAa,EAAE,CAAC;YAClB,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QACD,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC1D,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IAC3C,MAAM,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IAE1C,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,oBAAoB,CAC5C,GAAG,CAAC,EAAE,EACN,OAAO,EACP,MAAM,EACN,cAAc,EACd,CAAC,CAAC,GAAG,CAAC,YAAY,EAClB,GAAG,CAAC,KAAK,CACV,EAAE,CAAC;YACF,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE;gBACzC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;YACvC,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACzC,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAChF,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QACnE,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3C,oDAAoD;QACpD,MAAM,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAChC,oDAAoD;QACpD,wBAAwB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACnD,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oCAAoC;QACpC,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAChC,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACzC,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACjF,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,uDAAuD;IACvD,oEAAoE;IACpE,sEAAsE;IACtE,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACzC,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAA0B;IAC9D,MAAM,GAAG,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,YAAY,CAAC,0BAA0B,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxC,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAC5D,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAA0B;IACjE,MAAM,GAAG,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,YAAY,CAAC,0BAA0B,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxC,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAC5D,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/event-bus.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** All domain event types emitted by the event bus. */
|
|
2
|
-
export type GrackleEventType = "task.created" | "task.updated" | "task.started" | "task.completed" | "task.deleted" | "workspace.created" | "workspace.archived" | "workspace.updated" | "persona.created" | "persona.updated" | "persona.deleted" | "finding.posted" | "environment.added" | "environment.removed" | "environment.changed" | "environment.provision_progress" | "token.changed" | "credential.providers_changed" | "setting.changed" | "schedule.created" | "schedule.updated" | "schedule.deleted" | "schedule.fired";
|
|
2
|
+
export type GrackleEventType = "task.created" | "task.updated" | "task.started" | "task.completed" | "task.deleted" | "task.reparented" | "workspace.created" | "workspace.archived" | "workspace.updated" | "persona.created" | "persona.updated" | "persona.deleted" | "finding.posted" | "environment.added" | "environment.removed" | "environment.changed" | "environment.provision_progress" | "token.changed" | "credential.providers_changed" | "setting.changed" | "schedule.created" | "schedule.updated" | "schedule.deleted" | "schedule.fired";
|
|
3
3
|
/** A domain event emitted by the event bus. */
|
|
4
4
|
export interface GrackleEvent {
|
|
5
5
|
/** ULID — chronologically sortable unique identifier. */
|
package/dist/event-bus.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAMA,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,gCAAgC,GAChC,eAAe,GACf,8BAA8B,GAC9B,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,IAAI,EAAE,gBAAgB,CAAC;IACvB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAQvD;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAClB,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,YAAY,CA+Bd;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,IAAI,CAK5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAMA,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,gCAAgC,GAChC,eAAe,GACf,8BAA8B,GAC9B,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,IAAI,EAAE,gBAAgB,CAAC;IACvB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAQvD;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAClB,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,YAAY,CA+Bd;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,IAAI,CAK5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
package/dist/event-bus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA8CrC,6DAA6D;AAE7D,MAAM,WAAW,GAAoB,IAAI,GAAG,EAAE,CAAC;AAE/C,6DAA6D;AAE7D;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAClB,IAAsB,EACtB,OAAgC;IAEhC,MAAM,KAAK,GAAiB;QAC1B,EAAE,EAAE,IAAI,EAAE;QACV,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO;KACR,CAAC;IAEF,sDAAsD;IACtD,wEAAwE;IACxE,yEAAyE;IACzE,wEAAwE;IACxE,qEAAqE;IACrE,IAAI,CAAC;QACH,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,gCAAgC,CAAC,CAAC;IACjE,CAAC;IAED,qEAAqE;IACrE,cAAc,CAAC,GAAG,EAAE;QAClB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,UAAsB;IAC9C,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5B,OAAO,GAAG,EAAE;QACV,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified event hub — merges session events (streamHub) and domain events
|
|
3
|
+
* (event-bus) into a single async iterable of ServerEvent proto messages.
|
|
4
|
+
*
|
|
5
|
+
* Replaces the WebSocket broadcast layer. Each call to {@link createEventStream}
|
|
6
|
+
* returns an independent stream that receives both event types.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { grackle } from "@grackle-ai/common";
|
|
11
|
+
/**
|
|
12
|
+
* A cancellable event stream that yields ServerEvent proto messages.
|
|
13
|
+
*/
|
|
14
|
+
export interface EventStream {
|
|
15
|
+
/** Async iterable of ServerEvent (session events + domain events). */
|
|
16
|
+
[Symbol.asyncIterator](): AsyncIterator<grackle.ServerEvent>;
|
|
17
|
+
/** Cancel the stream and clean up subscriptions. */
|
|
18
|
+
cancel(): void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a unified event stream that merges session events and domain events.
|
|
22
|
+
*
|
|
23
|
+
* The stream yields `ServerEvent` proto messages with either a `sessionEvent`
|
|
24
|
+
* or `domainEvent` variant. Callers iterate the stream and route events by type.
|
|
25
|
+
*
|
|
26
|
+
* Call `cancel()` to stop the stream and clean up all subscriptions.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createEventStream(): EventStream;
|
|
29
|
+
//# sourceMappingURL=event-hub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-hub.d.ts","sourceRoot":"","sources":["../src/event-hub.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI7C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7D,oDAAoD;IACpD,MAAM,IAAI,IAAI,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CA0E/C"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified event hub — merges session events (streamHub) and domain events
|
|
3
|
+
* (event-bus) into a single async iterable of ServerEvent proto messages.
|
|
4
|
+
*
|
|
5
|
+
* Replaces the WebSocket broadcast layer. Each call to {@link createEventStream}
|
|
6
|
+
* returns an independent stream that receives both event types.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { create } from "@bufbuild/protobuf";
|
|
11
|
+
import { grackle } from "@grackle-ai/common";
|
|
12
|
+
import * as streamHub from "./stream-hub.js";
|
|
13
|
+
import { subscribe } from "./event-bus.js";
|
|
14
|
+
/**
|
|
15
|
+
* Create a unified event stream that merges session events and domain events.
|
|
16
|
+
*
|
|
17
|
+
* The stream yields `ServerEvent` proto messages with either a `sessionEvent`
|
|
18
|
+
* or `domainEvent` variant. Callers iterate the stream and route events by type.
|
|
19
|
+
*
|
|
20
|
+
* Call `cancel()` to stop the stream and clean up all subscriptions.
|
|
21
|
+
*/
|
|
22
|
+
export function createEventStream() {
|
|
23
|
+
let cancelled = false;
|
|
24
|
+
const queue = [];
|
|
25
|
+
let pendingResolve;
|
|
26
|
+
/** Push an event into the queue and wake any waiting consumer. */
|
|
27
|
+
function enqueue(event) {
|
|
28
|
+
if (cancelled) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
queue.push(event);
|
|
32
|
+
if (pendingResolve) {
|
|
33
|
+
const r = pendingResolve;
|
|
34
|
+
pendingResolve = undefined;
|
|
35
|
+
r();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Subscribe to session events (from stream-hub global stream)
|
|
39
|
+
const sessionStream = streamHub.createGlobalStream();
|
|
40
|
+
const sessionPump = (async () => {
|
|
41
|
+
for await (const event of sessionStream) {
|
|
42
|
+
enqueue(create(grackle.ServerEventSchema, {
|
|
43
|
+
event: { case: "sessionEvent", value: event },
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
})();
|
|
47
|
+
// Suppress unhandled rejection — pump ends when sessionStream is cancelled
|
|
48
|
+
sessionPump.catch(() => { });
|
|
49
|
+
// Subscribe to domain events (from event-bus)
|
|
50
|
+
const unsubscribeDomain = subscribe((event) => {
|
|
51
|
+
enqueue(create(grackle.ServerEventSchema, {
|
|
52
|
+
event: {
|
|
53
|
+
case: "domainEvent",
|
|
54
|
+
value: create(grackle.DomainEventSchema, {
|
|
55
|
+
id: event.id,
|
|
56
|
+
type: event.type,
|
|
57
|
+
timestamp: event.timestamp,
|
|
58
|
+
payloadJson: JSON.stringify(event.payload),
|
|
59
|
+
}),
|
|
60
|
+
},
|
|
61
|
+
}));
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
async *[Symbol.asyncIterator]() {
|
|
65
|
+
// eslint-disable-next-line no-unmodified-loop-condition -- cancelled is set by cancel() from outside
|
|
66
|
+
while (!cancelled) {
|
|
67
|
+
if (queue.length > 0) {
|
|
68
|
+
yield queue.shift();
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Wait for the next event
|
|
72
|
+
await new Promise((resolve) => {
|
|
73
|
+
pendingResolve = resolve;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
cancel() {
|
|
79
|
+
cancelled = true;
|
|
80
|
+
sessionStream.cancel();
|
|
81
|
+
unsubscribeDomain();
|
|
82
|
+
// Wake any waiting consumer so the iterator exits
|
|
83
|
+
if (pendingResolve) {
|
|
84
|
+
pendingResolve();
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=event-hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-hub.js","sourceRoot":"","sources":["../src/event-hub.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAqB,MAAM,gBAAgB,CAAC;AAY9D;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;IAC/B,MAAM,KAAK,GAA0B,EAAE,CAAC;IACxC,IAAI,cAAwC,CAAC;IAE7C,kEAAkE;IAClE,SAAS,OAAO,CAAC,KAA0B;QACzC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,cAAc,CAAC;YACzB,cAAc,GAAG,SAAS,CAAC;YAC3B,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,MAAM,aAAa,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,CAAC,KAAK,IAAmB,EAAE;QAC7C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YACxC,OAAO,CACL,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE;gBAChC,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE;aAC9C,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,2EAA2E;IAC3E,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAE5B,8CAA8C;IAC9C,MAAM,iBAAiB,GAAG,SAAS,CAAC,CAAC,KAAmB,EAAE,EAAE;QAC1D,OAAO,CACL,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAChC,KAAK,EAAE;gBACL,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE;oBACvC,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;iBAC3C,CAAC;aACH;SACF,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;YAC3B,qGAAqG;YACrG,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,KAAK,CAAC,KAAK,EAAG,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,0BAA0B;oBAC1B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;wBAClC,cAAc,GAAG,OAAO,CAAC;oBAC3B,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM;YACJ,SAAS,GAAG,IAAI,CAAC;YACjB,aAAa,CAAC,MAAM,EAAE,CAAC;YACvB,iBAAiB,EAAE,CAAC;YACpB,kDAAkD;YAClD,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { grackle } from "@grackle-ai/common";
|
|
2
|
+
/** Post a new finding. */
|
|
3
|
+
export declare function postFinding(req: grackle.PostFindingRequest): Promise<grackle.Finding>;
|
|
4
|
+
/** Query findings with optional filters. */
|
|
5
|
+
export declare function queryFindings(req: grackle.QueryFindingsRequest): Promise<grackle.FindingList>;
|
|
6
|
+
//# sourceMappingURL=finding-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-handlers.d.ts","sourceRoot":"","sources":["../src/finding-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAM7C,0BAA0B;AAC1B,wBAAsB,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAmB3F;AAED,4CAA4C;AAC5C,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAUnG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ConnectError, Code } from "@connectrpc/connect";
|
|
2
|
+
import { create } from "@bufbuild/protobuf";
|
|
3
|
+
import { grackle } from "@grackle-ai/common";
|
|
4
|
+
import { findingStore } from "@grackle-ai/database";
|
|
5
|
+
import { v4 as uuid } from "uuid";
|
|
6
|
+
import { emit } from "./event-bus.js";
|
|
7
|
+
import { findingRowToProto } from "./grpc-proto-converters.js";
|
|
8
|
+
/** Post a new finding. */
|
|
9
|
+
export async function postFinding(req) {
|
|
10
|
+
if (!req.title) {
|
|
11
|
+
throw new ConnectError("title is required", Code.InvalidArgument);
|
|
12
|
+
}
|
|
13
|
+
const id = uuid().slice(0, 8);
|
|
14
|
+
findingStore.postFinding(id, req.workspaceId, req.taskId, req.sessionId, req.category, req.title, req.content, [...req.tags]);
|
|
15
|
+
emit("finding.posted", { workspaceId: req.workspaceId, findingId: id });
|
|
16
|
+
const rows = findingStore.queryFindings(req.workspaceId);
|
|
17
|
+
const row = rows.find((r) => r.id === id);
|
|
18
|
+
return findingRowToProto(row);
|
|
19
|
+
}
|
|
20
|
+
/** Query findings with optional filters. */
|
|
21
|
+
export async function queryFindings(req) {
|
|
22
|
+
const rows = findingStore.queryFindings(req.workspaceId, req.categories.length > 0 ? [...req.categories] : undefined, req.tags.length > 0 ? [...req.tags] : undefined, req.limit || undefined);
|
|
23
|
+
return create(grackle.FindingListSchema, {
|
|
24
|
+
findings: rows.map(findingRowToProto),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=finding-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-handlers.js","sourceRoot":"","sources":["../src/finding-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,0BAA0B;AAC1B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAA+B;IAC/D,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,YAAY,CAAC,WAAW,CACtB,EAAE,EACF,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,OAAO,EACX,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CACd,CAAC;IACF,IAAI,CAAC,gBAAgB,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,OAAO,iBAAiB,CAAC,GAAI,CAAC,CAAC;AACjC,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAiC;IACnE,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CACrC,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,EAC3D,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC/C,GAAG,CAAC,KAAK,IAAI,SAAS,CACvB,CAAC;IACF,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE;QACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;KACtC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { personaStore } from "@grackle-ai/database";
|
|
2
|
+
/** Build a JSON string of MCP server configs for the PowerLine SpawnRequest. */
|
|
3
|
+
export declare function buildMcpServersJson(mcpServers: {
|
|
4
|
+
name: string;
|
|
5
|
+
command: string;
|
|
6
|
+
args?: string[];
|
|
7
|
+
tools?: string[];
|
|
8
|
+
}[]): string;
|
|
9
|
+
/** Convert persona MCP server configs to a JSON string for the PowerLine SpawnRequest. */
|
|
10
|
+
export declare function personaMcpServersToJson(row: personaStore.PersonaRow): string;
|
|
11
|
+
//# sourceMappingURL=grpc-mcp-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-mcp-config.d.ts","sourceRoot":"","sources":["../src/grpc-mcp-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,gFAAgF;AAChF,wBAAgB,mBAAmB,CACjC,UAAU,EAAE;IACV,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,EAAE,GACF,MAAM,CAUR;AAED,0FAA0F;AAC1F,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,CAAC,UAAU,GAAG,MAAM,CAY5E"}
|