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.
Files changed (54) hide show
  1. package/dist/ActivityPoster.d.ts +6 -6
  2. package/dist/ActivityPoster.d.ts.map +1 -1
  3. package/dist/ActivityPoster.js +37 -46
  4. package/dist/ActivityPoster.js.map +1 -1
  5. package/dist/AgentSessionManager.d.ts +27 -8
  6. package/dist/AgentSessionManager.d.ts.map +1 -1
  7. package/dist/AgentSessionManager.js +59 -12
  8. package/dist/AgentSessionManager.js.map +1 -1
  9. package/dist/AttachmentService.d.ts +9 -4
  10. package/dist/AttachmentService.d.ts.map +1 -1
  11. package/dist/AttachmentService.js +17 -4
  12. package/dist/AttachmentService.js.map +1 -1
  13. package/dist/ChatSessionHandler.d.ts.map +1 -1
  14. package/dist/ChatSessionHandler.js +1 -3
  15. package/dist/ChatSessionHandler.js.map +1 -1
  16. package/dist/ConfigManager.js +2 -2
  17. package/dist/ConfigManager.js.map +1 -1
  18. package/dist/EdgeWorker.d.ts +58 -48
  19. package/dist/EdgeWorker.d.ts.map +1 -1
  20. package/dist/EdgeWorker.js +692 -524
  21. package/dist/EdgeWorker.js.map +1 -1
  22. package/dist/GitService.d.ts +57 -3
  23. package/dist/GitService.d.ts.map +1 -1
  24. package/dist/GitService.js +282 -74
  25. package/dist/GitService.js.map +1 -1
  26. package/dist/GlobalSessionRegistry.d.ts.map +1 -1
  27. package/dist/GlobalSessionRegistry.js +6 -2
  28. package/dist/GlobalSessionRegistry.js.map +1 -1
  29. package/dist/PromptBuilder.d.ts +49 -20
  30. package/dist/PromptBuilder.d.ts.map +1 -1
  31. package/dist/PromptBuilder.js +214 -112
  32. package/dist/PromptBuilder.js.map +1 -1
  33. package/dist/RepositoryRouter.d.ts +41 -27
  34. package/dist/RepositoryRouter.d.ts.map +1 -1
  35. package/dist/RepositoryRouter.js +199 -104
  36. package/dist/RepositoryRouter.js.map +1 -1
  37. package/dist/RunnerSelectionService.d.ts +23 -4
  38. package/dist/RunnerSelectionService.d.ts.map +1 -1
  39. package/dist/RunnerSelectionService.js +88 -56
  40. package/dist/RunnerSelectionService.js.map +1 -1
  41. package/dist/SharedApplicationServer.d.ts +1 -1
  42. package/dist/SharedApplicationServer.d.ts.map +1 -1
  43. package/dist/SharedApplicationServer.js.map +1 -1
  44. package/dist/SlackChatAdapter.d.ts.map +1 -1
  45. package/dist/SlackChatAdapter.js +2 -1
  46. package/dist/SlackChatAdapter.js.map +1 -1
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/label-prompt-template.md +1 -4
  51. package/dist/prompt-assembly/types.d.ts +10 -2
  52. package/dist/prompt-assembly/types.d.ts.map +1 -1
  53. package/label-prompt-template.md +1 -4
  54. package/package.json +14 -14
@@ -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, repositoryId: string): Promise<void>;
9
- postParentResumeAcknowledgment(sessionId: string, repositoryId: string): Promise<void>;
10
- postRepositorySelectionActivity(sessionId: string, repositoryId: string, repositoryName: string, selectionMethod: "description-tag" | "label-based" | "project-based" | "team-based" | "team-prefix" | "catch-all" | "workspace-fallback" | "user-selected"): Promise<void>;
11
- postSystemPromptSelectionThought(sessionId: string, labels: string[], repositoryId: string): Promise<void>;
12
- postInstantPromptedAcknowledgment(sessionId: string, repositoryId: string, isStreaming: boolean): Promise<void>;
13
- postComment(issueId: string, body: string, repositoryId: string, parentId?: string): Promise<void>;
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,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAoBV,8BAA8B,CACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAiBV,+BAA+B,CACpC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,EACZ,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,YAAY,GACZ,aAAa,GACb,WAAW,GACX,oBAAoB,GACpB,eAAe,GAChB,OAAO,CAAC,IAAI,CAAC;IAuCV,gCAAgC,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAsFV,iCAAiC,CACtC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC;IAqBV,WAAW,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;CAehB"}
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"}
@@ -27,10 +27,10 @@ export class ActivityPoster {
27
27
  return null;
28
28
  }
29
29
  }
30
- async postInstantAcknowledgment(sessionId, repositoryId) {
31
- const issueTracker = this.issueTrackers.get(repositoryId);
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 repository ${repositoryId}`);
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, repositoryId) {
45
- const issueTracker = this.issueTrackers.get(repositoryId);
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 repository ${repositoryId}`);
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 postRepositorySelectionActivity(sessionId, repositoryId, repositoryName, selectionMethod) {
56
- const issueTracker = this.issueTrackers.get(repositoryId);
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 repository ${repositoryId}`);
58
+ this.logger.warn(`No issue tracker found for workspace ${workspaceId}`);
59
59
  return;
60
60
  }
61
- let methodDisplay;
62
- if (selectionMethod === "user-selected") {
63
- methodDisplay = "selected by user";
64
- }
65
- else if (selectionMethod === "description-tag") {
66
- methodDisplay = "matched via [repo=...] tag in issue description";
67
- }
68
- else if (selectionMethod === "label-based") {
69
- methodDisplay = "matched via label-based routing";
70
- }
71
- else if (selectionMethod === "project-based") {
72
- methodDisplay = "matched via project-based routing";
73
- }
74
- else if (selectionMethod === "team-based") {
75
- methodDisplay = "matched via team-based routing";
76
- }
77
- else if (selectionMethod === "team-prefix") {
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: `Repository "${repositoryName}" has been ${methodDisplay}.`,
82
+ body,
91
83
  },
92
- }, "repository selection");
84
+ }, "routing");
93
85
  }
94
- async postSystemPromptSelectionThought(sessionId, labels, repositoryId) {
95
- const issueTracker = this.issueTrackers.get(repositoryId);
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 repository ${repositoryId}`);
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, repositoryId, isStreaming) {
165
- const issueTracker = this.issueTrackers.get(repositoryId);
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 repository ${repositoryId}`);
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, repositoryId, parentId) {
179
- // Get the issue tracker for this repository
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 repository ${repositoryId}`);
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,YAAoB;QAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;YAC1E,OAAO;QACR,CAAC;QAED,MAAM,IAAI,CAAC,kBAAkB,CAC5B,YAAY,EACZ;YACC,cAAc,EAAE,SAAS;YACzB,OAAO,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,8GAA8G;aACpH;SACD,EACD,wBAAwB,CACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,8BAA8B,CACnC,SAAiB,EACjB,YAAoB;QAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;YAC1E,OAAO;QACR,CAAC;QAED,MAAM,IAAI,CAAC,kBAAkB,CAC5B,YAAY,EACZ;YACC,cAAc,EAAE,SAAS;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,6BAA6B,EAAE;SACjE,EACD,8BAA8B,CAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,+BAA+B,CACpC,SAAiB,EACjB,YAAoB,EACpB,cAAsB,EACtB,eAQkB;QAElB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;YAC1E,OAAO;QACR,CAAC;QAED,IAAI,aAAqB,CAAC;QAC1B,IAAI,eAAe,KAAK,eAAe,EAAE,CAAC;YACzC,aAAa,GAAG,kBAAkB,CAAC;QACpC,CAAC;aAAM,IAAI,eAAe,KAAK,iBAAiB,EAAE,CAAC;YAClD,aAAa,GAAG,iDAAiD,CAAC;QACnE,CAAC;aAAM,IAAI,eAAe,KAAK,aAAa,EAAE,CAAC;YAC9C,aAAa,GAAG,iCAAiC,CAAC;QACnD,CAAC;aAAM,IAAI,eAAe,KAAK,eAAe,EAAE,CAAC;YAChD,aAAa,GAAG,mCAAmC,CAAC;QACrD,CAAC;aAAM,IAAI,eAAe,KAAK,YAAY,EAAE,CAAC;YAC7C,aAAa,GAAG,gCAAgC,CAAC;QAClD,CAAC;aAAM,IAAI,eAAe,KAAK,aAAa,EAAE,CAAC;YAC9C,aAAa,GAAG,iCAAiC,CAAC;QACnD,CAAC;aAAM,IAAI,eAAe,KAAK,WAAW,EAAE,CAAC;YAC5C,aAAa,GAAG,+BAA+B,CAAC;QACjD,CAAC;aAAM,CAAC;YACP,aAAa,GAAG,gCAAgC,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,CAAC,kBAAkB,CAC5B,YAAY,EACZ;YACC,cAAc,EAAE,SAAS;YACzB,OAAO,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,eAAe,cAAc,cAAc,aAAa,GAAG;aACjE;SACD,EACD,sBAAsB,CACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gCAAgC,CACrC,SAAiB,EACjB,MAAgB,EAChB,YAAoB;QAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;YAC1E,OAAO;QACR,CAAC;QAED,wEAAwE;QACxE,IAAI,kBAAkB,GAAkB,IAAI,CAAC;QAC7C,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC7D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAC5B,CAAC;QAEF,IAAI,UAAU,EAAE,YAAY,EAAE,CAAC;YAC9B,wBAAwB;YACxB,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;YACxD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;gBACnD,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;YAC1B,MAAM,aAAa,GAAG,cAAc,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACpD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtB,CAAC;YACF,IAAI,aAAa,EAAE,CAAC;gBACnB,kBAAkB,GAAG,UAAU,CAAC;gBAChC,YAAY,GAAG,aAAa,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACP,uBAAuB;gBACvB,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC;gBACtD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;oBACjD,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC;gBACzB,MAAM,YAAY,GAAG,aAAa,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAClD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtB,CAAC;gBACF,IAAI,YAAY,EAAE,CAAC;oBAClB,kBAAkB,GAAG,SAAS,CAAC;oBAC/B,YAAY,GAAG,YAAY,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACP,sBAAsB;oBACtB,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;oBACpD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;wBAC/C,CAAC,CAAC,YAAY;wBACd,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC;oBACxB,MAAM,WAAW,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAChD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtB,CAAC;oBACF,IAAI,WAAW,EAAE,CAAC;wBACjB,kBAAkB,GAAG,QAAQ,CAAC;wBAC9B,YAAY,GAAG,WAAW,CAAC;oBAC5B,CAAC;yBAAM,CAAC;wBACP,4BAA4B;wBAC5B,MAAM,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;wBAChE,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;4BAC3D,CAAC,CAAC,kBAAkB;4BACpB,CAAC,CAAC,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;wBACpD,MAAM,iBAAiB,GAAG,kBAAkB,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtB,CAAC;wBACF,IAAI,iBAAiB,EAAE,CAAC;4BACvB,kBAAkB,GAAG,cAAc,CAAC;4BACpC,YAAY,GAAG,iBAAiB,CAAC;wBAClC,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAED,6CAA6C;QAC7C,IAAI,CAAC,kBAAkB,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1C,OAAO;QACR,CAAC;QAED,MAAM,IAAI,CAAC,kBAAkB,CAC5B,YAAY,EACZ;YACC,cAAc,EAAE,SAAS;YACzB,OAAO,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,aAAa,kBAAkB,0BAA0B,YAAY,4BAA4B,kBAAkB,aAAa;aACtI;SACD,EACD,yBAAyB,CACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iCAAiC,CACtC,SAAiB,EACjB,YAAoB,EACpB,WAAoB;QAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;YAC1E,OAAO;QACR,CAAC;QAED,MAAM,OAAO,GAAG,WAAW;YAC1B,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,4BAA4B,CAAC;QAEhC,MAAM,IAAI,CAAC,kBAAkB,CAC5B,YAAY,EACZ;YACC,cAAc,EAAE,SAAS;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;SAC3C,EACD,yBAAyB,CACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,OAAe,EACf,IAAY,EACZ,YAAoB,EACpB,QAAiB;QAEjB,4CAA4C;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,YAAY,GAAwC;YACzD,IAAI;SACJ,CAAC;QACF,wCAAwC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACd,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAClC,CAAC;QACD,MAAM,YAAY,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;CACD"}
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
- * CURRENTLY BEING HANDLED 'per repository'
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 activitySink;
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(activitySink: IActivitySink, getParentSessionId?: (childSessionId: string) => string | undefined, resumeParentSession?: (parentSessionId: string, prompt: string, childSessionId: string) => Promise<void>, procedureAnalyzer?: ProcedureAnalyzer, sharedApplicationServer?: SharedApplicationServer, logger?: ILogger);
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
- createLinearAgentSession(sessionId: string, issueId: string, issueMinimal: IssueMinimal, workspace: Workspace, platform?: "linear" | "github" | "slack"): CyrusAgentSession;
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 createLinearAgentSession}, this does NOT require issue
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
- updateAgentSessionWithClaudeSessionId(sessionId: string, claudeSystemMessage: SDKSystemMessage): void;
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;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACpD,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,OAAO,CAAoD;IACnE,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,oBAAoB,CACjB;IACX,OAAO,CAAC,uBAAuB,CAAkC;IACjE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,+BAA+B,CAAkC;IACzE,OAAO,CAAC,qBAAqB,CAA0B;IACvD,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,uBAAuB,CAAC,CAA0B;IAC1D,OAAO,CAAC,kBAAkB,CAAC,CAAiD;IAC5E,OAAO,CAAC,mBAAmB,CAAC,CAIT;gBAGlB,YAAY,EAAE,aAAa,EAC3B,kBAAkB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACnE,mBAAmB,CAAC,EAAE,CACrB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,KAClB,OAAO,CAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,uBAAuB,CAAC,EAAE,uBAAuB,EACjD,MAAM,CAAC,EAAE,OAAO;IAWjB;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;;;;;;;;;OAUG;IACH,wBAAwB,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,QAAQ,GAAG,QAAQ,GAAG,OAAkB,GAChD,iBAAiB;IAkCpB;;;;;;;OAOG;IACH,iBAAiB,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,GACd,iBAAiB;IAoBpB;;;OAGG;IACH,qCAAqC,CACpC,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,gBAAgB,GACnC,IAAI;IAwCP;;OAEG;YACW,kBAAkB;IA+DhC;;OAEG;IACG,eAAe,CACpB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,gBAAgB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAiFhB,OAAO,CAAC,mCAAmC;IA0B3C,OAAO,CAAC,kBAAkB;IAS1B,kBAAkB,CAAC,4BAA4B,EAAE,MAAM,GAAG,IAAI;IAI9D;;OAEG;YACW,yBAAyB;IA+KvC;;;;OAIG;YACW,8BAA8B;IAgI5C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAajC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAMhC;;OAEG;YACW,4BAA4B;IAuC1C;;OAEG;IACG,mBAAmB,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC;IA6DhB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;YACW,mBAAmB;IAkBjC;;OAEG;YACW,cAAc;IAkD5B;;OAEG;IACH,OAAO,CAAC,cAAc;IA8CtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;YACW,uBAAuB;IAmcrC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI5D;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAI9D;;OAEG;IACH,iBAAiB,IAAI,iBAAiB,EAAE;IAMxC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,GAAG,IAAI;IAalE;;OAEG;IACH,kBAAkB,IAAI,YAAY,EAAE;IAMpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAOxD;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAM1D;;OAEG;IACH,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAQhE;;;OAGG;IACH,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAQtE;;OAEG;IACH,cAAc,IAAI,iBAAiB,EAAE;IAIrC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAK3D;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK1C;;;;;OAKG;YACW,YAAY;IAkD1B;;OAEG;IACG,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3E;;OAEG;IACG,oBAAoB,CACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5E;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzE;;OAEG;IACG,yBAAyB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,yBAAyB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAYhB;;OAEG;IACH,OAAO,CAAC,WAAW,GAAE,MAA4B,GAAG,IAAI;IAgBxD;;OAEG;IACH,cAAc,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;KAC5D;IAqBD;;OAEG;IACH,YAAY,CACX,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,EAC/D,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gCAAgC,EAAE,CAAC,GACnE,IAAI;IA4BP;;OAEG;YACW,4BAA4B;IAW1C;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWrE;;OAEG;IACG,6BAA6B,CAClC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAchB;;OAEG;YACW,mBAAmB;CA0CjC"}
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
- * CURRENTLY BEING HANDLED 'per repository'
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
- activitySink;
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(activitySink, getParentSessionId, resumeParentSession, procedureAnalyzer, sharedApplicationServer, logger) {
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
- createLinearAgentSession(sessionId, issueId, issueMinimal, workspace, platform = "linear") {
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 createLinearAgentSession}, this does NOT require issue
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
- updateAgentSessionWithClaudeSessionId(sessionId, claudeSystemMessage) {
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.updateAgentSessionWithClaudeSessionId(sessionId, message);
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 result = await this.activitySink.postActivity(session.externalSessionId, content, options);
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 result = await this.activitySink.postActivity(session.externalSessionId, input.content, options);
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
  }