cyrus-edge-worker 0.2.21 → 0.2.23
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/ActivityPoster.d.ts +15 -0
- package/dist/ActivityPoster.d.ts.map +1 -0
- package/dist/ActivityPoster.js +194 -0
- package/dist/ActivityPoster.js.map +1 -0
- package/dist/AgentSessionManager.d.ts +63 -21
- package/dist/AgentSessionManager.d.ts.map +1 -1
- package/dist/AgentSessionManager.js +413 -404
- package/dist/AgentSessionManager.js.map +1 -1
- package/dist/AskUserQuestionHandler.d.ts +3 -2
- package/dist/AskUserQuestionHandler.d.ts.map +1 -1
- package/dist/AskUserQuestionHandler.js +15 -12
- package/dist/AskUserQuestionHandler.js.map +1 -1
- package/dist/AttachmentService.d.ts +69 -0
- package/dist/AttachmentService.d.ts.map +1 -0
- package/dist/AttachmentService.js +369 -0
- package/dist/AttachmentService.js.map +1 -0
- package/dist/ChatSessionHandler.d.ts +87 -0
- package/dist/ChatSessionHandler.d.ts.map +1 -0
- package/dist/ChatSessionHandler.js +227 -0
- package/dist/ChatSessionHandler.js.map +1 -0
- package/dist/ConfigManager.d.ts +91 -0
- package/dist/ConfigManager.d.ts.map +1 -0
- package/dist/ConfigManager.js +229 -0
- package/dist/ConfigManager.js.map +1 -0
- package/dist/EdgeWorker.d.ts +152 -120
- package/dist/EdgeWorker.d.ts.map +1 -1
- package/dist/EdgeWorker.js +1335 -2125
- package/dist/EdgeWorker.js.map +1 -1
- package/dist/GitService.d.ts +14 -10
- package/dist/GitService.d.ts.map +1 -1
- package/dist/GitService.js +91 -12
- package/dist/GitService.js.map +1 -1
- package/dist/GlobalSessionRegistry.d.ts +142 -0
- package/dist/GlobalSessionRegistry.d.ts.map +1 -0
- package/dist/GlobalSessionRegistry.js +254 -0
- package/dist/GlobalSessionRegistry.js.map +1 -0
- package/dist/PromptBuilder.d.ts +182 -0
- package/dist/PromptBuilder.d.ts.map +1 -0
- package/dist/PromptBuilder.js +963 -0
- package/dist/PromptBuilder.js.map +1 -0
- package/dist/RepositoryRouter.d.ts +3 -2
- package/dist/RepositoryRouter.d.ts.map +1 -1
- package/dist/RepositoryRouter.js +39 -37
- package/dist/RepositoryRouter.js.map +1 -1
- package/dist/RunnerSelectionService.d.ts +71 -0
- package/dist/RunnerSelectionService.d.ts.map +1 -0
- package/dist/RunnerSelectionService.js +392 -0
- package/dist/RunnerSelectionService.js.map +1 -0
- package/dist/SharedApplicationServer.d.ts +3 -1
- package/dist/SharedApplicationServer.d.ts.map +1 -1
- package/dist/SharedApplicationServer.js +21 -17
- package/dist/SharedApplicationServer.js.map +1 -1
- package/dist/SharedWebhookServer.d.ts +3 -1
- package/dist/SharedWebhookServer.d.ts.map +1 -1
- package/dist/SharedWebhookServer.js +19 -16
- package/dist/SharedWebhookServer.js.map +1 -1
- package/dist/SlackChatAdapter.d.ts +25 -0
- package/dist/SlackChatAdapter.d.ts.map +1 -0
- package/dist/SlackChatAdapter.js +163 -0
- package/dist/SlackChatAdapter.js.map +1 -0
- package/dist/WorktreeIncludeService.d.ts +2 -9
- package/dist/WorktreeIncludeService.d.ts.map +1 -1
- package/dist/WorktreeIncludeService.js +3 -9
- package/dist/WorktreeIncludeService.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/label-prompt-template.md +6 -2
- package/dist/procedures/ProcedureAnalyzer.d.ts +6 -4
- package/dist/procedures/ProcedureAnalyzer.d.ts.map +1 -1
- package/dist/procedures/ProcedureAnalyzer.js +32 -12
- package/dist/procedures/ProcedureAnalyzer.js.map +1 -1
- package/dist/procedures/registry.d.ts +19 -19
- package/dist/procedures/registry.d.ts.map +1 -1
- package/dist/procedures/registry.js +19 -19
- package/dist/procedures/registry.js.map +1 -1
- package/dist/procedures/types.d.ts +1 -0
- package/dist/procedures/types.d.ts.map +1 -1
- package/dist/prompt-assembly/types.d.ts +2 -0
- package/dist/prompt-assembly/types.d.ts.map +1 -1
- package/dist/prompts/graphite-orchestrator.md +4 -2
- package/dist/prompts/orchestrator.md +5 -3
- package/dist/prompts/standard-issue-assigned-user-prompt.md +7 -0
- package/dist/prompts/subroutines/gh-pr.md +12 -0
- package/dist/sinks/IActivitySink.d.ts +60 -0
- package/dist/sinks/IActivitySink.d.ts.map +1 -0
- package/dist/sinks/IActivitySink.js +2 -0
- package/dist/sinks/IActivitySink.js.map +1 -0
- package/dist/sinks/LinearActivitySink.d.ts +69 -0
- package/dist/sinks/LinearActivitySink.d.ts.map +1 -0
- package/dist/sinks/LinearActivitySink.js +111 -0
- package/dist/sinks/LinearActivitySink.js.map +1 -0
- package/dist/sinks/NoopActivitySink.d.ts +13 -0
- package/dist/sinks/NoopActivitySink.d.ts.map +1 -0
- package/dist/sinks/NoopActivitySink.js +17 -0
- package/dist/sinks/NoopActivitySink.js.map +1 -0
- package/dist/sinks/index.d.ts +9 -0
- package/dist/sinks/index.d.ts.map +1 -0
- package/dist/sinks/index.js +8 -0
- package/dist/sinks/index.js.map +1 -0
- package/label-prompt-template.md +6 -2
- package/package.json +17 -11
- package/prompts/graphite-orchestrator.md +4 -2
- package/prompts/orchestrator.md +5 -3
- package/prompts/standard-issue-assigned-user-prompt.md +7 -0
package/dist/GitService.d.ts
CHANGED
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
import type { Issue, RepositoryConfig, Workspace } from "cyrus-core";
|
|
2
|
-
|
|
3
|
-
* Logger interface for GitService
|
|
4
|
-
* Allows consumers to provide their own logging implementation
|
|
5
|
-
*/
|
|
6
|
-
export interface GitServiceLogger {
|
|
7
|
-
info(message: string, ...args: unknown[]): void;
|
|
8
|
-
warn(message: string, ...args: unknown[]): void;
|
|
9
|
-
error(message: string, ...args: unknown[]): void;
|
|
10
|
-
}
|
|
2
|
+
import { type ILogger } from "cyrus-core";
|
|
11
3
|
/**
|
|
12
4
|
* Service responsible for Git worktree operations
|
|
13
5
|
*/
|
|
14
6
|
export declare class GitService {
|
|
15
7
|
private logger;
|
|
16
8
|
private worktreeIncludeService;
|
|
17
|
-
constructor(logger?:
|
|
9
|
+
constructor(logger?: ILogger);
|
|
18
10
|
/**
|
|
19
11
|
* Check if a branch exists locally or remotely
|
|
20
12
|
*/
|
|
@@ -23,10 +15,22 @@ export declare class GitService {
|
|
|
23
15
|
* Sanitize branch name by removing backticks to prevent command injection
|
|
24
16
|
*/
|
|
25
17
|
sanitizeBranchName(name: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve mutable Git metadata directories for a repository/worktree.
|
|
20
|
+
* This includes linked worktree metadata paths (for example
|
|
21
|
+
* `.git/worktrees/<name>/FETCH_HEAD`) that must be writable by sandboxes.
|
|
22
|
+
*/
|
|
23
|
+
getGitMetadataDirectories(workingDirectory: string): string[];
|
|
26
24
|
/**
|
|
27
25
|
* Run a setup script with proper error handling and logging
|
|
28
26
|
*/
|
|
29
27
|
private runSetupScript;
|
|
28
|
+
/**
|
|
29
|
+
* Find an existing worktree by its checked-out branch name.
|
|
30
|
+
* Parses `git worktree list --porcelain` output and returns the worktree path
|
|
31
|
+
* if a worktree is found with the given branch checked out, or null otherwise.
|
|
32
|
+
*/
|
|
33
|
+
findWorktreeByBranch(branchName: string, repoPath: string): string | null;
|
|
30
34
|
/**
|
|
31
35
|
* Create a git worktree for an issue
|
|
32
36
|
*/
|
package/dist/GitService.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitService.d.ts","sourceRoot":"","sources":["../src/GitService.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"GitService.d.ts","sourceRoot":"","sources":["../src/GitService.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAGxD;;GAEG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,sBAAsB,CAAyB;gBAE3C,MAAM,CAAC,EAAE,OAAO;IAI5B;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0B1E;;OAEG;IACI,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/C;;;;OAIG;IACI,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE;IA8BpE;;OAEG;YACW,cAAc;IA4F5B;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgCzE;;OAEG;IACG,iBAAiB,CACtB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,gBAAgB,EAC5B,iBAAiB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,SAAS,CAAC;CA0TrB"}
|
package/dist/GitService.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
2
|
import { existsSync, mkdirSync, statSync } from "node:fs";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
-
import { basename, join } from "node:path";
|
|
4
|
+
import { basename, join, resolve as pathResolve } from "node:path";
|
|
5
|
+
import { createLogger } from "cyrus-core";
|
|
5
6
|
import { WorktreeIncludeService } from "./WorktreeIncludeService.js";
|
|
6
|
-
/**
|
|
7
|
-
* Default console-based logger implementation
|
|
8
|
-
*/
|
|
9
|
-
const defaultLogger = {
|
|
10
|
-
info: (message, ...args) => console.log(`[GitService] ${message}`, ...args),
|
|
11
|
-
warn: (message, ...args) => console.warn(`[GitService] ${message}`, ...args),
|
|
12
|
-
error: (message, ...args) => console.error(`[GitService] ${message}`, ...args),
|
|
13
|
-
};
|
|
14
7
|
/**
|
|
15
8
|
* Service responsible for Git worktree operations
|
|
16
9
|
*/
|
|
@@ -18,7 +11,7 @@ export class GitService {
|
|
|
18
11
|
logger;
|
|
19
12
|
worktreeIncludeService;
|
|
20
13
|
constructor(logger) {
|
|
21
|
-
this.logger = logger ??
|
|
14
|
+
this.logger = logger ?? createLogger({ component: "GitService" });
|
|
22
15
|
this.worktreeIncludeService = new WorktreeIncludeService(this.logger);
|
|
23
16
|
}
|
|
24
17
|
/**
|
|
@@ -54,6 +47,36 @@ export class GitService {
|
|
|
54
47
|
sanitizeBranchName(name) {
|
|
55
48
|
return name ? name.replace(/`/g, "") : name;
|
|
56
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve mutable Git metadata directories for a repository/worktree.
|
|
52
|
+
* This includes linked worktree metadata paths (for example
|
|
53
|
+
* `.git/worktrees/<name>/FETCH_HEAD`) that must be writable by sandboxes.
|
|
54
|
+
*/
|
|
55
|
+
getGitMetadataDirectories(workingDirectory) {
|
|
56
|
+
const resolvedDirectories = new Set();
|
|
57
|
+
const revParse = (flag) => {
|
|
58
|
+
try {
|
|
59
|
+
const output = execSync(`git rev-parse ${flag}`, {
|
|
60
|
+
cwd: workingDirectory,
|
|
61
|
+
encoding: "utf8",
|
|
62
|
+
stdio: "pipe",
|
|
63
|
+
}).trim();
|
|
64
|
+
return output ? pathResolve(workingDirectory, output) : null;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const gitDir = revParse("--git-dir");
|
|
71
|
+
if (gitDir) {
|
|
72
|
+
resolvedDirectories.add(gitDir);
|
|
73
|
+
}
|
|
74
|
+
const gitCommonDir = revParse("--git-common-dir");
|
|
75
|
+
if (gitCommonDir) {
|
|
76
|
+
resolvedDirectories.add(gitCommonDir);
|
|
77
|
+
}
|
|
78
|
+
return [...resolvedDirectories];
|
|
79
|
+
}
|
|
57
80
|
/**
|
|
58
81
|
* Run a setup script with proper error handling and logging
|
|
59
82
|
*/
|
|
@@ -127,6 +150,40 @@ export class GitService {
|
|
|
127
150
|
this.logger.info(` Continuing with worktree creation...`);
|
|
128
151
|
}
|
|
129
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Find an existing worktree by its checked-out branch name.
|
|
155
|
+
* Parses `git worktree list --porcelain` output and returns the worktree path
|
|
156
|
+
* if a worktree is found with the given branch checked out, or null otherwise.
|
|
157
|
+
*/
|
|
158
|
+
findWorktreeByBranch(branchName, repoPath) {
|
|
159
|
+
try {
|
|
160
|
+
const output = execSync("git worktree list --porcelain", {
|
|
161
|
+
cwd: repoPath,
|
|
162
|
+
encoding: "utf-8",
|
|
163
|
+
});
|
|
164
|
+
const blocks = output.split("\n\n");
|
|
165
|
+
for (const block of blocks) {
|
|
166
|
+
const lines = block.split("\n");
|
|
167
|
+
let worktreePath = null;
|
|
168
|
+
let branchRef = null;
|
|
169
|
+
for (const line of lines) {
|
|
170
|
+
if (line.startsWith("worktree ")) {
|
|
171
|
+
worktreePath = line.slice("worktree ".length);
|
|
172
|
+
}
|
|
173
|
+
else if (line.startsWith("branch ")) {
|
|
174
|
+
branchRef = line.slice("branch refs/heads/".length);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (worktreePath && branchRef === branchName) {
|
|
178
|
+
return worktreePath;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
130
187
|
/**
|
|
131
188
|
* Create a git worktree for an issue
|
|
132
189
|
*/
|
|
@@ -182,6 +239,17 @@ export class GitService {
|
|
|
182
239
|
catch (_e) {
|
|
183
240
|
// Branch doesn't exist, we'll create it
|
|
184
241
|
}
|
|
242
|
+
// If the branch already exists, check if it's already checked out in another worktree
|
|
243
|
+
if (!createBranch) {
|
|
244
|
+
const existingWorktreePath = this.findWorktreeByBranch(branchName, repository.repositoryPath);
|
|
245
|
+
if (existingWorktreePath && existingWorktreePath !== workspacePath) {
|
|
246
|
+
this.logger.info(`Branch "${branchName}" is already checked out in worktree at ${existingWorktreePath}, reusing existing worktree`);
|
|
247
|
+
return {
|
|
248
|
+
path: existingWorktreePath,
|
|
249
|
+
isGitWorktree: true,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
185
253
|
// Determine base branch for this issue
|
|
186
254
|
let baseBranch = repository.baseBranch;
|
|
187
255
|
// Check if issue has a parent
|
|
@@ -212,7 +280,7 @@ export class GitService {
|
|
|
212
280
|
this.logger.info(`No parent issue found for ${issue.identifier}, using default base branch '${repository.baseBranch}'`);
|
|
213
281
|
}
|
|
214
282
|
// Fetch latest changes from remote
|
|
215
|
-
this.logger.
|
|
283
|
+
this.logger.debug("Fetching latest changes from remote...");
|
|
216
284
|
let hasRemote = true;
|
|
217
285
|
try {
|
|
218
286
|
execSync("git fetch origin", {
|
|
@@ -339,7 +407,18 @@ export class GitService {
|
|
|
339
407
|
};
|
|
340
408
|
}
|
|
341
409
|
catch (error) {
|
|
342
|
-
|
|
410
|
+
const errorMessage = error.message;
|
|
411
|
+
this.logger.error("Failed to create git worktree:", errorMessage);
|
|
412
|
+
// Check if the error is "branch already checked out in another worktree"
|
|
413
|
+
// Git error format: "fatal: 'branch-name' is already used by worktree at '/path/to/worktree'"
|
|
414
|
+
const worktreeMatch = errorMessage.match(/already used by worktree at '([^']+)'/);
|
|
415
|
+
if (worktreeMatch?.[1] && existsSync(worktreeMatch[1])) {
|
|
416
|
+
this.logger.info(`Reusing existing worktree at ${worktreeMatch[1]} (branch already checked out)`);
|
|
417
|
+
return {
|
|
418
|
+
path: worktreeMatch[1],
|
|
419
|
+
isGitWorktree: true,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
343
422
|
// Fall back to regular directory if git worktree fails
|
|
344
423
|
const fallbackPath = join(repository.workspaceBaseDir, issue.identifier);
|
|
345
424
|
mkdirSync(fallbackPath, { recursive: true });
|
package/dist/GitService.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitService.js","sourceRoot":"","sources":["../src/GitService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GitService.js","sourceRoot":"","sources":["../src/GitService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GlobalSessionRegistry - Centralized session storage across all repositories
|
|
3
|
+
*
|
|
4
|
+
* This is Phase 1 of the CYPACK-724 architectural refactor.
|
|
5
|
+
* Replaces per-repository session storage in AgentSessionManager with a global registry
|
|
6
|
+
* that enables cross-repository session lookups (e.g., parent orchestrator in Repo A
|
|
7
|
+
* creating child issues in Repo B).
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from "node:events";
|
|
10
|
+
import type { CyrusAgentSession, CyrusAgentSessionEntry, SerializedCyrusAgentSession, SerializedCyrusAgentSessionEntry } from "cyrus-core";
|
|
11
|
+
/**
|
|
12
|
+
* Serialization format for GlobalSessionRegistry state
|
|
13
|
+
* Version 3.0 to distinguish from previous per-repository format (v2.0)
|
|
14
|
+
*/
|
|
15
|
+
export interface SerializedGlobalRegistryState {
|
|
16
|
+
version: "3.0";
|
|
17
|
+
sessions: Record<string, SerializedCyrusAgentSession>;
|
|
18
|
+
entries: Record<string, SerializedCyrusAgentSessionEntry[]>;
|
|
19
|
+
childToParentMap: Record<string, string>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Events emitted by GlobalSessionRegistry
|
|
23
|
+
*/
|
|
24
|
+
export interface GlobalSessionRegistryEvents {
|
|
25
|
+
sessionCreated: (session: CyrusAgentSession) => void;
|
|
26
|
+
sessionUpdated: (sessionId: string, session: CyrusAgentSession, updates: Partial<CyrusAgentSession>) => void;
|
|
27
|
+
sessionCompleted: (sessionId: string, session: CyrusAgentSession) => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* GlobalSessionRegistry centralizes all session storage across repositories.
|
|
31
|
+
*
|
|
32
|
+
* Responsibilities:
|
|
33
|
+
* - Store ALL CyrusAgentSession objects (all repos)
|
|
34
|
+
* - Store ALL CyrusAgentSessionEntry arrays (all repos)
|
|
35
|
+
* - Maintain parent-child session relationships
|
|
36
|
+
* - Emit lifecycle events for session changes
|
|
37
|
+
* - Support serialization/deserialization for persistence
|
|
38
|
+
* - Provide cleanup for old sessions
|
|
39
|
+
*/
|
|
40
|
+
export declare class GlobalSessionRegistry extends EventEmitter {
|
|
41
|
+
/**
|
|
42
|
+
* All sessions keyed by session id
|
|
43
|
+
*/
|
|
44
|
+
private sessions;
|
|
45
|
+
/**
|
|
46
|
+
* All entries keyed by session id
|
|
47
|
+
*/
|
|
48
|
+
private entries;
|
|
49
|
+
/**
|
|
50
|
+
* Child session ID → parent session ID mapping
|
|
51
|
+
* Enables orchestrator workflows where parent (Repo A) creates child (Repo B)
|
|
52
|
+
*/
|
|
53
|
+
private childToParentMap;
|
|
54
|
+
/**
|
|
55
|
+
* Create a new session in the registry
|
|
56
|
+
* @param session The session to create
|
|
57
|
+
* @throws Error if session with same ID already exists
|
|
58
|
+
*/
|
|
59
|
+
createSession(session: CyrusAgentSession): void;
|
|
60
|
+
/**
|
|
61
|
+
* Get a session by ID
|
|
62
|
+
* @param sessionId The session id
|
|
63
|
+
* @returns The session or undefined if not found
|
|
64
|
+
*/
|
|
65
|
+
getSession(sessionId: string): CyrusAgentSession | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Update a session with partial data
|
|
68
|
+
* @param sessionId The session id
|
|
69
|
+
* @param updates Partial session data to merge
|
|
70
|
+
* @throws Error if session doesn't exist
|
|
71
|
+
*/
|
|
72
|
+
updateSession(sessionId: string, updates: Partial<CyrusAgentSession>): void;
|
|
73
|
+
/**
|
|
74
|
+
* Delete a session and its entries
|
|
75
|
+
* @param sessionId The session id
|
|
76
|
+
*/
|
|
77
|
+
deleteSession(sessionId: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get all sessions
|
|
80
|
+
* @returns Array of all sessions
|
|
81
|
+
*/
|
|
82
|
+
getAllSessions(): CyrusAgentSession[];
|
|
83
|
+
/**
|
|
84
|
+
* Add an entry to a session's conversation history
|
|
85
|
+
* @param sessionId The session id
|
|
86
|
+
* @param entry The entry to add
|
|
87
|
+
* @throws Error if session doesn't exist
|
|
88
|
+
*/
|
|
89
|
+
addEntry(sessionId: string, entry: CyrusAgentSessionEntry): void;
|
|
90
|
+
/**
|
|
91
|
+
* Get all entries for a session
|
|
92
|
+
* @param sessionId The session id
|
|
93
|
+
* @returns Array of entries (empty if session has no entries or doesn't exist)
|
|
94
|
+
*/
|
|
95
|
+
getEntries(sessionId: string): CyrusAgentSessionEntry[];
|
|
96
|
+
/**
|
|
97
|
+
* Update an entry in a session's conversation history
|
|
98
|
+
* @param sessionId The session id
|
|
99
|
+
* @param entryIndex The index of the entry to update (0-based)
|
|
100
|
+
* @param updates Partial entry data to merge
|
|
101
|
+
* @throws Error if session doesn't exist or index out of bounds
|
|
102
|
+
*/
|
|
103
|
+
updateEntry(sessionId: string, entryIndex: number, updates: Partial<CyrusAgentSessionEntry>): void;
|
|
104
|
+
/**
|
|
105
|
+
* Set parent session for a child session (orchestrator workflow)
|
|
106
|
+
* @param childSessionId The child's session id
|
|
107
|
+
* @param parentSessionId The parent's session id
|
|
108
|
+
*/
|
|
109
|
+
setParentSession(childSessionId: string, parentSessionId: string): void;
|
|
110
|
+
/**
|
|
111
|
+
* Get parent session ID for a child session
|
|
112
|
+
* @param childSessionId The child's session id
|
|
113
|
+
* @returns The parent session ID or undefined if not found
|
|
114
|
+
*/
|
|
115
|
+
getParentSessionId(childSessionId: string): string | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* Get all child session IDs for a parent session
|
|
118
|
+
* @param parentSessionId The parent's session id
|
|
119
|
+
* @returns Array of child session IDs
|
|
120
|
+
*/
|
|
121
|
+
getChildSessionIds(parentSessionId: string): string[];
|
|
122
|
+
/**
|
|
123
|
+
* Serialize the registry state for persistence
|
|
124
|
+
* Excludes non-serializable data like agentRunner instances
|
|
125
|
+
* @returns Serialized state
|
|
126
|
+
*/
|
|
127
|
+
serializeState(): SerializedGlobalRegistryState;
|
|
128
|
+
/**
|
|
129
|
+
* Restore the registry state from serialized data
|
|
130
|
+
* Clears existing state before restoring
|
|
131
|
+
* @param state Serialized state to restore
|
|
132
|
+
*/
|
|
133
|
+
restoreState(state: SerializedGlobalRegistryState): void;
|
|
134
|
+
/**
|
|
135
|
+
* Clean up old sessions based on age
|
|
136
|
+
* Removes sessions where updatedAt is older than maxAgeMs
|
|
137
|
+
* @param maxAgeMs Maximum age in milliseconds (sessions older than this are removed)
|
|
138
|
+
* @returns Number of sessions removed
|
|
139
|
+
*/
|
|
140
|
+
cleanup(maxAgeMs: number): number;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=GlobalSessionRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalSessionRegistry.d.ts","sourceRoot":"","sources":["../src/GlobalSessionRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACX,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,gCAAgC,EAChC,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC7C,OAAO,EAAE,KAAK,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;IAC5D,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C,cAAc,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrD,cAAc,EAAE,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAC/B,IAAI,CAAC;IACV,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC1E;AAED;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACtD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAA6C;IAE7D;;OAEG;IACH,OAAO,CAAC,OAAO,CAAoD;IAEnE;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAAkC;IAE1D;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAW/C;;;;OAIG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI5D;;;;;OAKG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAsB3E;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IActC;;;OAGG;IACH,cAAc,IAAI,iBAAiB,EAAE;IAIrC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAgBhE;;;;OAIG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAIvD;;;;;;OAMG;IACH,WAAW,CACV,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACtC,IAAI;IA6BP;;;;OAIG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAIvE;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9D;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAWrD;;;;OAIG;IACH,cAAc,IAAI,6BAA6B;IA0B/C;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,6BAA6B,GAAG,IAAI;IAsBxD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAejC"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GlobalSessionRegistry - Centralized session storage across all repositories
|
|
3
|
+
*
|
|
4
|
+
* This is Phase 1 of the CYPACK-724 architectural refactor.
|
|
5
|
+
* Replaces per-repository session storage in AgentSessionManager with a global registry
|
|
6
|
+
* that enables cross-repository session lookups (e.g., parent orchestrator in Repo A
|
|
7
|
+
* creating child issues in Repo B).
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from "node:events";
|
|
10
|
+
/**
|
|
11
|
+
* GlobalSessionRegistry centralizes all session storage across repositories.
|
|
12
|
+
*
|
|
13
|
+
* Responsibilities:
|
|
14
|
+
* - Store ALL CyrusAgentSession objects (all repos)
|
|
15
|
+
* - Store ALL CyrusAgentSessionEntry arrays (all repos)
|
|
16
|
+
* - Maintain parent-child session relationships
|
|
17
|
+
* - Emit lifecycle events for session changes
|
|
18
|
+
* - Support serialization/deserialization for persistence
|
|
19
|
+
* - Provide cleanup for old sessions
|
|
20
|
+
*/
|
|
21
|
+
export class GlobalSessionRegistry extends EventEmitter {
|
|
22
|
+
/**
|
|
23
|
+
* All sessions keyed by session id
|
|
24
|
+
*/
|
|
25
|
+
sessions = new Map();
|
|
26
|
+
/**
|
|
27
|
+
* All entries keyed by session id
|
|
28
|
+
*/
|
|
29
|
+
entries = new Map();
|
|
30
|
+
/**
|
|
31
|
+
* Child session ID → parent session ID mapping
|
|
32
|
+
* Enables orchestrator workflows where parent (Repo A) creates child (Repo B)
|
|
33
|
+
*/
|
|
34
|
+
childToParentMap = new Map();
|
|
35
|
+
/**
|
|
36
|
+
* Create a new session in the registry
|
|
37
|
+
* @param session The session to create
|
|
38
|
+
* @throws Error if session with same ID already exists
|
|
39
|
+
*/
|
|
40
|
+
createSession(session) {
|
|
41
|
+
if (this.sessions.has(session.id)) {
|
|
42
|
+
throw new Error(`Session with ID ${session.id} already exists`);
|
|
43
|
+
}
|
|
44
|
+
this.sessions.set(session.id, session);
|
|
45
|
+
this.entries.set(session.id, []);
|
|
46
|
+
this.emit("sessionCreated", session);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get a session by ID
|
|
50
|
+
* @param sessionId The session id
|
|
51
|
+
* @returns The session or undefined if not found
|
|
52
|
+
*/
|
|
53
|
+
getSession(sessionId) {
|
|
54
|
+
return this.sessions.get(sessionId);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Update a session with partial data
|
|
58
|
+
* @param sessionId The session id
|
|
59
|
+
* @param updates Partial session data to merge
|
|
60
|
+
* @throws Error if session doesn't exist
|
|
61
|
+
*/
|
|
62
|
+
updateSession(sessionId, updates) {
|
|
63
|
+
const session = this.sessions.get(sessionId);
|
|
64
|
+
if (!session) {
|
|
65
|
+
throw new Error(`Session with ID ${sessionId} not found`);
|
|
66
|
+
}
|
|
67
|
+
const oldStatus = session.status;
|
|
68
|
+
const updatedSession = { ...session, ...updates, updatedAt: Date.now() };
|
|
69
|
+
this.sessions.set(sessionId, updatedSession);
|
|
70
|
+
this.emit("sessionUpdated", sessionId, updatedSession, updates);
|
|
71
|
+
// Emit completion event if status changed to complete/error
|
|
72
|
+
if (oldStatus !== updatedSession.status &&
|
|
73
|
+
(updatedSession.status === "complete" ||
|
|
74
|
+
updatedSession.status === "error")) {
|
|
75
|
+
this.emit("sessionCompleted", sessionId, updatedSession);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Delete a session and its entries
|
|
80
|
+
* @param sessionId The session id
|
|
81
|
+
*/
|
|
82
|
+
deleteSession(sessionId) {
|
|
83
|
+
this.sessions.delete(sessionId);
|
|
84
|
+
this.entries.delete(sessionId);
|
|
85
|
+
// Clean up any parent-child mappings
|
|
86
|
+
this.childToParentMap.delete(sessionId);
|
|
87
|
+
const childMappings = Array.from(this.childToParentMap.entries());
|
|
88
|
+
for (const [childId, parentId] of childMappings) {
|
|
89
|
+
if (parentId === sessionId) {
|
|
90
|
+
this.childToParentMap.delete(childId);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get all sessions
|
|
96
|
+
* @returns Array of all sessions
|
|
97
|
+
*/
|
|
98
|
+
getAllSessions() {
|
|
99
|
+
return Array.from(this.sessions.values());
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Add an entry to a session's conversation history
|
|
103
|
+
* @param sessionId The session id
|
|
104
|
+
* @param entry The entry to add
|
|
105
|
+
* @throws Error if session doesn't exist
|
|
106
|
+
*/
|
|
107
|
+
addEntry(sessionId, entry) {
|
|
108
|
+
if (!this.sessions.has(sessionId)) {
|
|
109
|
+
throw new Error(`Session with ID ${sessionId} not found`);
|
|
110
|
+
}
|
|
111
|
+
const sessionEntries = this.entries.get(sessionId) || [];
|
|
112
|
+
sessionEntries.push(entry);
|
|
113
|
+
this.entries.set(sessionId, sessionEntries);
|
|
114
|
+
// Update session's updatedAt timestamp
|
|
115
|
+
const session = this.sessions.get(sessionId);
|
|
116
|
+
if (session) {
|
|
117
|
+
session.updatedAt = Date.now();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get all entries for a session
|
|
122
|
+
* @param sessionId The session id
|
|
123
|
+
* @returns Array of entries (empty if session has no entries or doesn't exist)
|
|
124
|
+
*/
|
|
125
|
+
getEntries(sessionId) {
|
|
126
|
+
return this.entries.get(sessionId) || [];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Update an entry in a session's conversation history
|
|
130
|
+
* @param sessionId The session id
|
|
131
|
+
* @param entryIndex The index of the entry to update (0-based)
|
|
132
|
+
* @param updates Partial entry data to merge
|
|
133
|
+
* @throws Error if session doesn't exist or index out of bounds
|
|
134
|
+
*/
|
|
135
|
+
updateEntry(sessionId, entryIndex, updates) {
|
|
136
|
+
const sessionEntries = this.entries.get(sessionId);
|
|
137
|
+
if (!sessionEntries) {
|
|
138
|
+
throw new Error(`Session with ID ${sessionId} not found`);
|
|
139
|
+
}
|
|
140
|
+
if (entryIndex < 0 || entryIndex >= sessionEntries.length) {
|
|
141
|
+
throw new Error(`Entry index ${entryIndex} out of bounds for session ${sessionId} (length: ${sessionEntries.length})`);
|
|
142
|
+
}
|
|
143
|
+
const existingEntry = sessionEntries[entryIndex]; // Safe: bounds checked above
|
|
144
|
+
const updatedEntry = {
|
|
145
|
+
...existingEntry,
|
|
146
|
+
...updates,
|
|
147
|
+
// Ensure required fields are never undefined
|
|
148
|
+
type: updates.type ?? existingEntry.type,
|
|
149
|
+
content: updates.content ?? existingEntry.content,
|
|
150
|
+
};
|
|
151
|
+
sessionEntries[entryIndex] = updatedEntry;
|
|
152
|
+
// Update session's updatedAt timestamp
|
|
153
|
+
const session = this.sessions.get(sessionId);
|
|
154
|
+
if (session) {
|
|
155
|
+
session.updatedAt = Date.now();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Set parent session for a child session (orchestrator workflow)
|
|
160
|
+
* @param childSessionId The child's session id
|
|
161
|
+
* @param parentSessionId The parent's session id
|
|
162
|
+
*/
|
|
163
|
+
setParentSession(childSessionId, parentSessionId) {
|
|
164
|
+
this.childToParentMap.set(childSessionId, parentSessionId);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get parent session ID for a child session
|
|
168
|
+
* @param childSessionId The child's session id
|
|
169
|
+
* @returns The parent session ID or undefined if not found
|
|
170
|
+
*/
|
|
171
|
+
getParentSessionId(childSessionId) {
|
|
172
|
+
return this.childToParentMap.get(childSessionId);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get all child session IDs for a parent session
|
|
176
|
+
* @param parentSessionId The parent's session id
|
|
177
|
+
* @returns Array of child session IDs
|
|
178
|
+
*/
|
|
179
|
+
getChildSessionIds(parentSessionId) {
|
|
180
|
+
const childIds = [];
|
|
181
|
+
const childMappings = Array.from(this.childToParentMap.entries());
|
|
182
|
+
for (const [childId, parentId] of childMappings) {
|
|
183
|
+
if (parentId === parentSessionId) {
|
|
184
|
+
childIds.push(childId);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return childIds;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Serialize the registry state for persistence
|
|
191
|
+
* Excludes non-serializable data like agentRunner instances
|
|
192
|
+
* @returns Serialized state
|
|
193
|
+
*/
|
|
194
|
+
serializeState() {
|
|
195
|
+
const serializedSessions = {};
|
|
196
|
+
const sessionEntries = Array.from(this.sessions.entries());
|
|
197
|
+
for (const [sessionId, session] of sessionEntries) {
|
|
198
|
+
// Exclude non-serializable agentRunner
|
|
199
|
+
const { agentRunner: _agentRunner, ...serializableSession } = session;
|
|
200
|
+
serializedSessions[sessionId] = serializableSession;
|
|
201
|
+
}
|
|
202
|
+
const serializedEntries = Object.fromEntries(Array.from(this.entries.entries()));
|
|
203
|
+
const serializedChildToParent = Object.fromEntries(Array.from(this.childToParentMap.entries()));
|
|
204
|
+
return {
|
|
205
|
+
version: "3.0",
|
|
206
|
+
sessions: serializedSessions,
|
|
207
|
+
entries: serializedEntries,
|
|
208
|
+
childToParentMap: serializedChildToParent,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Restore the registry state from serialized data
|
|
213
|
+
* Clears existing state before restoring
|
|
214
|
+
* @param state Serialized state to restore
|
|
215
|
+
*/
|
|
216
|
+
restoreState(state) {
|
|
217
|
+
// Clear existing state
|
|
218
|
+
this.sessions.clear();
|
|
219
|
+
this.entries.clear();
|
|
220
|
+
this.childToParentMap.clear();
|
|
221
|
+
// Restore sessions
|
|
222
|
+
for (const [sessionId, session] of Object.entries(state.sessions)) {
|
|
223
|
+
this.sessions.set(sessionId, session);
|
|
224
|
+
}
|
|
225
|
+
// Restore entries
|
|
226
|
+
for (const [sessionId, entries] of Object.entries(state.entries)) {
|
|
227
|
+
this.entries.set(sessionId, entries);
|
|
228
|
+
}
|
|
229
|
+
// Restore parent-child mapping
|
|
230
|
+
for (const [childId, parentId] of Object.entries(state.childToParentMap)) {
|
|
231
|
+
this.childToParentMap.set(childId, parentId);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Clean up old sessions based on age
|
|
236
|
+
* Removes sessions where updatedAt is older than maxAgeMs
|
|
237
|
+
* @param maxAgeMs Maximum age in milliseconds (sessions older than this are removed)
|
|
238
|
+
* @returns Number of sessions removed
|
|
239
|
+
*/
|
|
240
|
+
cleanup(maxAgeMs) {
|
|
241
|
+
const now = Date.now();
|
|
242
|
+
const cutoffTime = now - maxAgeMs;
|
|
243
|
+
let removedCount = 0;
|
|
244
|
+
const sessionEntries = Array.from(this.sessions.entries());
|
|
245
|
+
for (const [sessionId, session] of sessionEntries) {
|
|
246
|
+
if (session.updatedAt < cutoffTime) {
|
|
247
|
+
this.deleteSession(sessionId);
|
|
248
|
+
removedCount++;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return removedCount;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=GlobalSessionRegistry.js.map
|