cyrus-edge-worker 0.2.33 → 0.2.35
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 +6 -6
- package/dist/ActivityPoster.d.ts.map +1 -1
- package/dist/ActivityPoster.js +37 -46
- package/dist/ActivityPoster.js.map +1 -1
- package/dist/AgentSessionManager.d.ts +27 -8
- package/dist/AgentSessionManager.d.ts.map +1 -1
- package/dist/AgentSessionManager.js +59 -12
- package/dist/AgentSessionManager.js.map +1 -1
- package/dist/AttachmentService.d.ts +9 -4
- package/dist/AttachmentService.d.ts.map +1 -1
- package/dist/AttachmentService.js +17 -4
- package/dist/AttachmentService.js.map +1 -1
- package/dist/ChatSessionHandler.d.ts.map +1 -1
- package/dist/ChatSessionHandler.js +1 -3
- package/dist/ChatSessionHandler.js.map +1 -1
- package/dist/ConfigManager.js +2 -2
- package/dist/ConfigManager.js.map +1 -1
- package/dist/EdgeWorker.d.ts +58 -48
- package/dist/EdgeWorker.d.ts.map +1 -1
- package/dist/EdgeWorker.js +692 -524
- package/dist/EdgeWorker.js.map +1 -1
- package/dist/GitService.d.ts +57 -3
- package/dist/GitService.d.ts.map +1 -1
- package/dist/GitService.js +282 -74
- package/dist/GitService.js.map +1 -1
- package/dist/GlobalSessionRegistry.d.ts.map +1 -1
- package/dist/GlobalSessionRegistry.js +6 -2
- package/dist/GlobalSessionRegistry.js.map +1 -1
- package/dist/PromptBuilder.d.ts +49 -20
- package/dist/PromptBuilder.d.ts.map +1 -1
- package/dist/PromptBuilder.js +214 -112
- package/dist/PromptBuilder.js.map +1 -1
- package/dist/RepositoryRouter.d.ts +41 -27
- package/dist/RepositoryRouter.d.ts.map +1 -1
- package/dist/RepositoryRouter.js +199 -104
- package/dist/RepositoryRouter.js.map +1 -1
- package/dist/RunnerSelectionService.d.ts +23 -4
- package/dist/RunnerSelectionService.d.ts.map +1 -1
- package/dist/RunnerSelectionService.js +88 -56
- package/dist/RunnerSelectionService.js.map +1 -1
- package/dist/SharedApplicationServer.d.ts +1 -1
- package/dist/SharedApplicationServer.d.ts.map +1 -1
- package/dist/SharedApplicationServer.js.map +1 -1
- package/dist/SlackChatAdapter.d.ts.map +1 -1
- package/dist/SlackChatAdapter.js +2 -1
- package/dist/SlackChatAdapter.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/label-prompt-template.md +1 -4
- package/dist/prompt-assembly/types.d.ts +10 -2
- package/dist/prompt-assembly/types.d.ts.map +1 -1
- package/label-prompt-template.md +1 -4
- package/package.json +14 -14
package/dist/ActivityPoster.d.ts
CHANGED
|
@@ -5,11 +5,11 @@ export declare class ActivityPoster {
|
|
|
5
5
|
private logger;
|
|
6
6
|
constructor(issueTrackers: Map<string, IIssueTrackerService>, repositories: Map<string, RepositoryConfig>, logger: ILogger);
|
|
7
7
|
postActivityDirect(issueTracker: IIssueTrackerService, input: AgentActivityCreateInput, label: string): Promise<string | null>;
|
|
8
|
-
postInstantAcknowledgment(sessionId: string,
|
|
9
|
-
postParentResumeAcknowledgment(sessionId: string,
|
|
10
|
-
|
|
11
|
-
postSystemPromptSelectionThought(sessionId: string, labels: string[], repositoryId: string): Promise<void>;
|
|
12
|
-
postInstantPromptedAcknowledgment(sessionId: string,
|
|
13
|
-
postComment(issueId: string, body: string,
|
|
8
|
+
postInstantAcknowledgment(sessionId: string, workspaceId: string): Promise<void>;
|
|
9
|
+
postParentResumeAcknowledgment(sessionId: string, workspaceId: string): Promise<void>;
|
|
10
|
+
postRoutingActivity(sessionId: string, workspaceId: string, repoLines: string[], routingMethod?: string): Promise<void>;
|
|
11
|
+
postSystemPromptSelectionThought(sessionId: string, labels: string[], workspaceId: string, repositoryId: string): Promise<void>;
|
|
12
|
+
postInstantPromptedAcknowledgment(sessionId: string, workspaceId: string, isStreaming: boolean): Promise<void>;
|
|
13
|
+
postComment(issueId: string, body: string, workspaceId: string, parentId?: string): Promise<void>;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=ActivityPoster.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityPoster.d.ts","sourceRoot":"","sources":["../src/ActivityPoster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,wBAAwB,EACxB,oBAAoB,EACpB,OAAO,EACP,gBAAgB,EAChB,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAc;IAC1B,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,MAAM,CAAU;gBAGvB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAChD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC3C,MAAM,EAAE,OAAO;IAOV,kBAAkB,CACvB,YAAY,EAAE,oBAAoB,EAClC,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoBnB,yBAAyB,CAC9B,SAAS,EAAE,MAAM,EACjB,
|
|
1
|
+
{"version":3,"file":"ActivityPoster.d.ts","sourceRoot":"","sources":["../src/ActivityPoster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,wBAAwB,EACxB,oBAAoB,EACpB,OAAO,EACP,gBAAgB,EAChB,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAc;IAC1B,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,MAAM,CAAU;gBAGvB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAChD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC3C,MAAM,EAAE,OAAO;IAOV,kBAAkB,CACvB,YAAY,EAAE,oBAAoB,EAClC,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoBnB,yBAAyB,CAC9B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAoBV,8BAA8B,CACnC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAiBV,mBAAmB,CACxB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAwCV,gCAAgC,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAsFV,iCAAiC,CACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC;IAqBV,WAAW,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;CAchB"}
|
package/dist/ActivityPoster.js
CHANGED
|
@@ -27,10 +27,10 @@ export class ActivityPoster {
|
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
async postInstantAcknowledgment(sessionId,
|
|
31
|
-
const issueTracker = this.issueTrackers.get(
|
|
30
|
+
async postInstantAcknowledgment(sessionId, workspaceId) {
|
|
31
|
+
const issueTracker = this.issueTrackers.get(workspaceId);
|
|
32
32
|
if (!issueTracker) {
|
|
33
|
-
this.logger.warn(`No issue tracker found for
|
|
33
|
+
this.logger.warn(`No issue tracker found for workspace ${workspaceId}`);
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
36
|
await this.postActivityDirect(issueTracker, {
|
|
@@ -41,10 +41,10 @@ export class ActivityPoster {
|
|
|
41
41
|
},
|
|
42
42
|
}, "instant acknowledgment");
|
|
43
43
|
}
|
|
44
|
-
async postParentResumeAcknowledgment(sessionId,
|
|
45
|
-
const issueTracker = this.issueTrackers.get(
|
|
44
|
+
async postParentResumeAcknowledgment(sessionId, workspaceId) {
|
|
45
|
+
const issueTracker = this.issueTrackers.get(workspaceId);
|
|
46
46
|
if (!issueTracker) {
|
|
47
|
-
this.logger.warn(`No issue tracker found for
|
|
47
|
+
this.logger.warn(`No issue tracker found for workspace ${workspaceId}`);
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
50
|
await this.postActivityDirect(issueTracker, {
|
|
@@ -52,49 +52,41 @@ export class ActivityPoster {
|
|
|
52
52
|
content: { type: "thought", body: "Resuming from child session" },
|
|
53
53
|
}, "parent resume acknowledgment");
|
|
54
54
|
}
|
|
55
|
-
async
|
|
56
|
-
const issueTracker = this.issueTrackers.get(
|
|
55
|
+
async postRoutingActivity(sessionId, workspaceId, repoLines, routingMethod) {
|
|
56
|
+
const issueTracker = this.issueTrackers.get(workspaceId);
|
|
57
57
|
if (!issueTracker) {
|
|
58
|
-
this.logger.warn(`No issue tracker found for
|
|
58
|
+
this.logger.warn(`No issue tracker found for workspace ${workspaceId}`);
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
methodDisplay = "matched via team prefix routing";
|
|
79
|
-
}
|
|
80
|
-
else if (selectionMethod === "catch-all") {
|
|
81
|
-
methodDisplay = "matched via catch-all routing";
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
methodDisplay = "matched via workspace fallback";
|
|
85
|
-
}
|
|
61
|
+
const methodDisplayMap = {
|
|
62
|
+
"user-selected": "User selection",
|
|
63
|
+
"description-tag": "[repo=...] tag",
|
|
64
|
+
"label-based": "Label routing",
|
|
65
|
+
"project-based": "Project routing",
|
|
66
|
+
"team-based": "Team routing",
|
|
67
|
+
"team-prefix": "Team prefix routing",
|
|
68
|
+
"catch-all": "Catch-all",
|
|
69
|
+
"workspace-fallback": "Workspace fallback",
|
|
70
|
+
};
|
|
71
|
+
const methodDisplay = routingMethod
|
|
72
|
+
? (methodDisplayMap[routingMethod] ?? routingMethod)
|
|
73
|
+
: undefined;
|
|
74
|
+
const header = methodDisplay
|
|
75
|
+
? `**Routing** (${methodDisplay})`
|
|
76
|
+
: "**Routing**";
|
|
77
|
+
const body = `${header}\n${repoLines.join("\n")}`;
|
|
86
78
|
await this.postActivityDirect(issueTracker, {
|
|
87
79
|
agentSessionId: sessionId,
|
|
88
80
|
content: {
|
|
89
81
|
type: "thought",
|
|
90
|
-
body
|
|
82
|
+
body,
|
|
91
83
|
},
|
|
92
|
-
}, "
|
|
84
|
+
}, "routing");
|
|
93
85
|
}
|
|
94
|
-
async postSystemPromptSelectionThought(sessionId, labels, repositoryId) {
|
|
95
|
-
const issueTracker = this.issueTrackers.get(
|
|
86
|
+
async postSystemPromptSelectionThought(sessionId, labels, workspaceId, repositoryId) {
|
|
87
|
+
const issueTracker = this.issueTrackers.get(workspaceId);
|
|
96
88
|
if (!issueTracker) {
|
|
97
|
-
this.logger.warn(`No issue tracker found for
|
|
89
|
+
this.logger.warn(`No issue tracker found for workspace ${workspaceId}`);
|
|
98
90
|
return;
|
|
99
91
|
}
|
|
100
92
|
// Determine which prompt type was selected and which label triggered it
|
|
@@ -161,10 +153,10 @@ export class ActivityPoster {
|
|
|
161
153
|
},
|
|
162
154
|
}, "system prompt selection");
|
|
163
155
|
}
|
|
164
|
-
async postInstantPromptedAcknowledgment(sessionId,
|
|
165
|
-
const issueTracker = this.issueTrackers.get(
|
|
156
|
+
async postInstantPromptedAcknowledgment(sessionId, workspaceId, isStreaming) {
|
|
157
|
+
const issueTracker = this.issueTrackers.get(workspaceId);
|
|
166
158
|
if (!issueTracker) {
|
|
167
|
-
this.logger.warn(`No issue tracker found for
|
|
159
|
+
this.logger.warn(`No issue tracker found for workspace ${workspaceId}`);
|
|
168
160
|
return;
|
|
169
161
|
}
|
|
170
162
|
const message = isStreaming
|
|
@@ -175,11 +167,10 @@ export class ActivityPoster {
|
|
|
175
167
|
content: { type: "thought", body: message },
|
|
176
168
|
}, "prompted acknowledgment");
|
|
177
169
|
}
|
|
178
|
-
async postComment(issueId, body,
|
|
179
|
-
|
|
180
|
-
const issueTracker = this.issueTrackers.get(repositoryId);
|
|
170
|
+
async postComment(issueId, body, workspaceId, parentId) {
|
|
171
|
+
const issueTracker = this.issueTrackers.get(workspaceId);
|
|
181
172
|
if (!issueTracker) {
|
|
182
|
-
throw new Error(`No issue tracker found for
|
|
173
|
+
throw new Error(`No issue tracker found for workspace ${workspaceId}`);
|
|
183
174
|
}
|
|
184
175
|
const commentInput = {
|
|
185
176
|
body,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityPoster.js","sourceRoot":"","sources":["../src/ActivityPoster.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,cAAc;IAClB,aAAa,CAAoC;IACjD,YAAY,CAAgC;IAC5C,MAAM,CAAU;IAExB,YACC,aAAgD,EAChD,YAA2C,EAC3C,MAAe;QAEf,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,YAAkC,EAClC,KAA+B,EAC/B,KAAa;QAEb,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;oBAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,aAAa,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC9D,OAAO,QAAQ,CAAC,EAAE,CAAC;gBACpB,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC;YACb,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,GAAG,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC9B,SAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"ActivityPoster.js","sourceRoot":"","sources":["../src/ActivityPoster.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import type { SDKMessage, SDKResultMessage, SDKSystemMessage } from "cyrus-claude-runner";
|
|
3
|
-
import { type CyrusAgentSession, type CyrusAgentSessionEntry, type IAgentRunner, type ILogger, type IssueMinimal, type SerializedCyrusAgentSession, type SerializedCyrusAgentSessionEntry, type Workspace } from "cyrus-core";
|
|
3
|
+
import { type CyrusAgentSession, type CyrusAgentSessionEntry, type IAgentRunner, type ILogger, type IssueMinimal, type RepositoryContext, type SerializedCyrusAgentSession, type SerializedCyrusAgentSessionEntry, type Workspace } from "cyrus-core";
|
|
4
4
|
import type { ProcedureAnalyzer } from "./procedures/ProcedureAnalyzer.js";
|
|
5
5
|
import type { SharedApplicationServer } from "./SharedApplicationServer.js";
|
|
6
6
|
import type { IActivitySink } from "./sinks/index.js";
|
|
@@ -48,11 +48,12 @@ export declare interface AgentSessionManager {
|
|
|
48
48
|
* Transforms Claude streaming messages into Agent Session format
|
|
49
49
|
* Handles session lifecycle: create → active → complete/error
|
|
50
50
|
*
|
|
51
|
-
*
|
|
51
|
+
* Single instance shared across all repositories. Activity sinks are
|
|
52
|
+
* registered per-session so each session posts to the correct tracker.
|
|
52
53
|
*/
|
|
53
54
|
export declare class AgentSessionManager extends EventEmitter {
|
|
54
55
|
private logger;
|
|
55
|
-
private
|
|
56
|
+
private activitySinks;
|
|
56
57
|
private sessions;
|
|
57
58
|
private entries;
|
|
58
59
|
private activeTasksBySession;
|
|
@@ -65,7 +66,16 @@ export declare class AgentSessionManager extends EventEmitter {
|
|
|
65
66
|
private sharedApplicationServer?;
|
|
66
67
|
private getParentSessionId?;
|
|
67
68
|
private resumeParentSession?;
|
|
68
|
-
constructor(
|
|
69
|
+
constructor(getParentSessionId?: (childSessionId: string) => string | undefined, resumeParentSession?: (parentSessionId: string, prompt: string, childSessionId: string) => Promise<void>, procedureAnalyzer?: ProcedureAnalyzer, sharedApplicationServer?: SharedApplicationServer, logger?: ILogger);
|
|
70
|
+
/**
|
|
71
|
+
* Register an activity sink for a specific session.
|
|
72
|
+
* This associates the session with the correct issue tracker for activity posting.
|
|
73
|
+
*/
|
|
74
|
+
setActivitySink(sessionId: string, sink: IActivitySink): void;
|
|
75
|
+
/**
|
|
76
|
+
* Get the activity sink for a session.
|
|
77
|
+
*/
|
|
78
|
+
private getActivitySink;
|
|
69
79
|
/**
|
|
70
80
|
* Get a session-scoped logger with context (sessionId, platform, issueIdentifier).
|
|
71
81
|
*/
|
|
@@ -80,22 +90,25 @@ export declare class AgentSessionManager extends EventEmitter {
|
|
|
80
90
|
* @param workspace - Workspace configuration
|
|
81
91
|
* @param platform - Source platform ("linear", "github", "slack"). Defaults to "linear".
|
|
82
92
|
* Only "linear" sessions will have activities streamed to Linear.
|
|
93
|
+
* @param repositories - Repository contexts for the session (defaults to empty array)
|
|
83
94
|
*/
|
|
84
|
-
|
|
95
|
+
createCyrusAgentSession(sessionId: string, issueId: string, issueMinimal: IssueMinimal, workspace: Workspace, platform?: "linear" | "github" | "slack", repositories?: RepositoryContext[]): CyrusAgentSession;
|
|
85
96
|
/**
|
|
86
97
|
* Create an agent session for chat-style platforms (Slack, etc.) that are
|
|
87
98
|
* not tied to a specific issue or repository.
|
|
88
99
|
*
|
|
89
|
-
* Unlike {@link
|
|
100
|
+
* Unlike {@link createCyrusAgentSession}, this does NOT require issue
|
|
90
101
|
* context — the session lives in a standalone workspace with no issue
|
|
91
102
|
* tracker linkage.
|
|
103
|
+
*
|
|
104
|
+
* @param repositories - Repository contexts for the session (defaults to empty array for chatbot sessions)
|
|
92
105
|
*/
|
|
93
|
-
createChatSession(sessionId: string, workspace: Workspace, platform: string): CyrusAgentSession;
|
|
106
|
+
createChatSession(sessionId: string, workspace: Workspace, platform: string, repositories?: RepositoryContext[]): CyrusAgentSession;
|
|
94
107
|
/**
|
|
95
108
|
* Update Agent Session with session ID from system initialization
|
|
96
109
|
* Automatically detects whether it's Claude or Gemini based on the runner
|
|
97
110
|
*/
|
|
98
|
-
|
|
111
|
+
updateAgentSessionWithRunnerSessionId(sessionId: string, claudeSystemMessage: SDKSystemMessage): void;
|
|
99
112
|
/**
|
|
100
113
|
* Create a session entry from user/assistant message (without syncing to Linear)
|
|
101
114
|
*/
|
|
@@ -206,6 +219,12 @@ export declare class AgentSessionManager extends EventEmitter {
|
|
|
206
219
|
* Useful for detecting when multiple sessions share the same worktree.
|
|
207
220
|
*/
|
|
208
221
|
getActiveSessionsByBranchName(branchName: string): CyrusAgentSession[];
|
|
222
|
+
/**
|
|
223
|
+
* Find an active multi-repo session that includes the given repository.
|
|
224
|
+
* Used by GitHub webhook handling to resolve the correct sub-worktree
|
|
225
|
+
* when a @ mention targets a specific repo within a multi-repo workspace.
|
|
226
|
+
*/
|
|
227
|
+
getActiveMultiRepoSessionForRepository(repositoryId: string): CyrusAgentSession | null;
|
|
209
228
|
/**
|
|
210
229
|
* Get all sessions
|
|
211
230
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentSessionManager.d.ts","sourceRoot":"","sources":["../src/AgentSessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAIX,UAAU,EAEV,gBAAgB,EAEhB,gBAAgB,EAEhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGN,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAE3B,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,SAAS,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAGX,aAAa,EACb,MAAM,kBAAkB,CAAC;AAO1B;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,iBAAiB,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX;;;OAGG;IACH,uBAAuB,EAAE,CAAC,IAAI,EAAE;QAC/B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,iBAAiB,CAAC;QAC3B,sEAAsE;QACtE,WAAW,EAAE,MAAM,CAAC;QACpB,kCAAkC;QAClC,SAAS,EAAE,MAAM,CAAC;QAClB,iCAAiC;QACjC,aAAa,EAAE,MAAM,CAAC;KACtB,KAAK,IAAI,CAAC;IACX;;OAEG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,iBAAiB,CAAC;QAC3B,kCAAkC;QAClC,SAAS,EAAE,MAAM,CAAC;KAClB,KAAK,IAAI,CAAC;CACX;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,mBAAmB;IAC3C,EAAE,CAAC,CAAC,SAAS,MAAM,yBAAyB,EAC3C,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACpC,IAAI,CAAC;IACR,IAAI,CAAC,CAAC,SAAS,MAAM,yBAAyB,EAC7C,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAC/C,OAAO,CAAC;CACX;AAED
|
|
1
|
+
{"version":3,"file":"AgentSessionManager.d.ts","sourceRoot":"","sources":["../src/AgentSessionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,12 @@ import { DEFAULT_VALIDATION_LOOP_CONFIG, parseValidationResult, renderValidation
|
|
|
6
6
|
* Transforms Claude streaming messages into Agent Session format
|
|
7
7
|
* Handles session lifecycle: create → active → complete/error
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Single instance shared across all repositories. Activity sinks are
|
|
10
|
+
* registered per-session so each session posts to the correct tracker.
|
|
10
11
|
*/
|
|
11
12
|
export class AgentSessionManager extends EventEmitter {
|
|
12
13
|
logger;
|
|
13
|
-
|
|
14
|
+
activitySinks = new Map(); // Per-session activity sinks
|
|
14
15
|
sessions = new Map();
|
|
15
16
|
entries = new Map(); // Stores a list of session entries per each session by its id
|
|
16
17
|
activeTasksBySession = new Map(); // Maps session ID to active Task tool use ID
|
|
@@ -23,15 +24,27 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
23
24
|
sharedApplicationServer;
|
|
24
25
|
getParentSessionId;
|
|
25
26
|
resumeParentSession;
|
|
26
|
-
constructor(
|
|
27
|
+
constructor(getParentSessionId, resumeParentSession, procedureAnalyzer, sharedApplicationServer, logger) {
|
|
27
28
|
super();
|
|
28
29
|
this.logger = logger ?? createLogger({ component: "AgentSessionManager" });
|
|
29
|
-
this.activitySink = activitySink;
|
|
30
30
|
this.getParentSessionId = getParentSessionId;
|
|
31
31
|
this.resumeParentSession = resumeParentSession;
|
|
32
32
|
this.procedureAnalyzer = procedureAnalyzer;
|
|
33
33
|
this.sharedApplicationServer = sharedApplicationServer;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Register an activity sink for a specific session.
|
|
37
|
+
* This associates the session with the correct issue tracker for activity posting.
|
|
38
|
+
*/
|
|
39
|
+
setActivitySink(sessionId, sink) {
|
|
40
|
+
this.activitySinks.set(sessionId, sink);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the activity sink for a session.
|
|
44
|
+
*/
|
|
45
|
+
getActivitySink(sessionId) {
|
|
46
|
+
return this.activitySinks.get(sessionId);
|
|
47
|
+
}
|
|
35
48
|
/**
|
|
36
49
|
* Get a session-scoped logger with context (sessionId, platform, issueIdentifier).
|
|
37
50
|
*/
|
|
@@ -53,8 +66,9 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
53
66
|
* @param workspace - Workspace configuration
|
|
54
67
|
* @param platform - Source platform ("linear", "github", "slack"). Defaults to "linear".
|
|
55
68
|
* Only "linear" sessions will have activities streamed to Linear.
|
|
69
|
+
* @param repositories - Repository contexts for the session (defaults to empty array)
|
|
56
70
|
*/
|
|
57
|
-
|
|
71
|
+
createCyrusAgentSession(sessionId, issueId, issueMinimal, workspace, platform = "linear", repositories = []) {
|
|
58
72
|
const log = this.logger.withContext({
|
|
59
73
|
sessionId,
|
|
60
74
|
platform,
|
|
@@ -77,6 +91,7 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
77
91
|
},
|
|
78
92
|
issueId, // Kept for backwards compatibility
|
|
79
93
|
issue: issueMinimal,
|
|
94
|
+
repositories,
|
|
80
95
|
workspace: workspace,
|
|
81
96
|
};
|
|
82
97
|
// Store locally
|
|
@@ -88,11 +103,13 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
88
103
|
* Create an agent session for chat-style platforms (Slack, etc.) that are
|
|
89
104
|
* not tied to a specific issue or repository.
|
|
90
105
|
*
|
|
91
|
-
* Unlike {@link
|
|
106
|
+
* Unlike {@link createCyrusAgentSession}, this does NOT require issue
|
|
92
107
|
* context — the session lives in a standalone workspace with no issue
|
|
93
108
|
* tracker linkage.
|
|
109
|
+
*
|
|
110
|
+
* @param repositories - Repository contexts for the session (defaults to empty array for chatbot sessions)
|
|
94
111
|
*/
|
|
95
|
-
createChatSession(sessionId, workspace, platform) {
|
|
112
|
+
createChatSession(sessionId, workspace, platform, repositories = []) {
|
|
96
113
|
const log = this.logger.withContext({ sessionId, platform });
|
|
97
114
|
log.info("Creating chat session");
|
|
98
115
|
const agentSession = {
|
|
@@ -102,6 +119,7 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
102
119
|
context: AgentSessionType.CommentThread,
|
|
103
120
|
createdAt: Date.now(),
|
|
104
121
|
updatedAt: Date.now(),
|
|
122
|
+
repositories,
|
|
105
123
|
workspace,
|
|
106
124
|
};
|
|
107
125
|
this.sessions.set(sessionId, agentSession);
|
|
@@ -112,7 +130,7 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
112
130
|
* Update Agent Session with session ID from system initialization
|
|
113
131
|
* Automatically detects whether it's Claude or Gemini based on the runner
|
|
114
132
|
*/
|
|
115
|
-
|
|
133
|
+
updateAgentSessionWithRunnerSessionId(sessionId, claudeSystemMessage) {
|
|
116
134
|
const linearSession = this.sessions.get(sessionId);
|
|
117
135
|
if (!linearSession) {
|
|
118
136
|
const log = this.sessionLog(sessionId);
|
|
@@ -554,7 +572,7 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
554
572
|
switch (message.type) {
|
|
555
573
|
case "system":
|
|
556
574
|
if (message.subtype === "init") {
|
|
557
|
-
this.
|
|
575
|
+
this.updateAgentSessionWithRunnerSessionId(sessionId, message);
|
|
558
576
|
// Post model notification
|
|
559
577
|
const systemMessage = message;
|
|
560
578
|
if (systemMessage.model) {
|
|
@@ -1105,7 +1123,12 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
1105
1123
|
if (ephemeral) {
|
|
1106
1124
|
options.ephemeral = true;
|
|
1107
1125
|
}
|
|
1108
|
-
const
|
|
1126
|
+
const activitySink = this.getActivitySink(sessionId);
|
|
1127
|
+
if (!activitySink) {
|
|
1128
|
+
log.debug(`Skipping activity sync - no activity sink registered for session`);
|
|
1129
|
+
return;
|
|
1130
|
+
}
|
|
1131
|
+
const result = await activitySink.postActivity(session.externalSessionId, content, options);
|
|
1109
1132
|
if (result.activityId) {
|
|
1110
1133
|
entry.linearAgentActivityId = result.activityId;
|
|
1111
1134
|
if (entry.type === "result") {
|
|
@@ -1196,6 +1219,24 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
1196
1219
|
return Array.from(this.sessions.values()).filter((session) => session.status === AgentSessionStatus.Active &&
|
|
1197
1220
|
session.issue?.branchName === branchName);
|
|
1198
1221
|
}
|
|
1222
|
+
/**
|
|
1223
|
+
* Find an active multi-repo session that includes the given repository.
|
|
1224
|
+
* Used by GitHub webhook handling to resolve the correct sub-worktree
|
|
1225
|
+
* when a @ mention targets a specific repo within a multi-repo workspace.
|
|
1226
|
+
*/
|
|
1227
|
+
getActiveMultiRepoSessionForRepository(repositoryId) {
|
|
1228
|
+
for (const session of this.sessions.values()) {
|
|
1229
|
+
if (session.status !== AgentSessionStatus.Active)
|
|
1230
|
+
continue;
|
|
1231
|
+
if (!session.workspace.repoPaths)
|
|
1232
|
+
continue; // not multi-repo
|
|
1233
|
+
const matchesRepo = session.repositories.some((r) => r.repositoryId === repositoryId);
|
|
1234
|
+
if (matchesRepo) {
|
|
1235
|
+
return session;
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
return null;
|
|
1239
|
+
}
|
|
1199
1240
|
/**
|
|
1200
1241
|
* Get all sessions
|
|
1201
1242
|
*/
|
|
@@ -1240,7 +1281,12 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
1240
1281
|
if (input.signalMetadata) {
|
|
1241
1282
|
options.signalMetadata = input.signalMetadata;
|
|
1242
1283
|
}
|
|
1243
|
-
const
|
|
1284
|
+
const activitySink = this.getActivitySink(sessionId);
|
|
1285
|
+
if (!activitySink) {
|
|
1286
|
+
log.debug(`Skipping ${label} - no activity sink registered for session`);
|
|
1287
|
+
return null;
|
|
1288
|
+
}
|
|
1289
|
+
const result = await activitySink.postActivity(session.externalSessionId, input.content, options);
|
|
1244
1290
|
if (result.activityId) {
|
|
1245
1291
|
log.debug(`Created ${label} activity ${result.activityId}`);
|
|
1246
1292
|
return result.activityId;
|
|
@@ -1339,10 +1385,11 @@ export class AgentSessionManager extends EventEmitter {
|
|
|
1339
1385
|
// Clear existing state
|
|
1340
1386
|
this.sessions.clear();
|
|
1341
1387
|
this.entries.clear();
|
|
1342
|
-
// Restore sessions
|
|
1388
|
+
// Restore sessions (migrate old sessions without repositories field)
|
|
1343
1389
|
for (const [sessionId, sessionData] of Object.entries(serializedSessions)) {
|
|
1344
1390
|
const session = {
|
|
1345
1391
|
...sessionData,
|
|
1392
|
+
repositories: sessionData.repositories ?? [],
|
|
1346
1393
|
};
|
|
1347
1394
|
this.sessions.set(sessionId, session);
|
|
1348
1395
|
}
|