@generacy-ai/generacy-plugin-copilot 0.0.0-preview-20260304013206

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 (47) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +140 -0
  3. package/dist/errors.d.ts +70 -0
  4. package/dist/errors.d.ts.map +1 -0
  5. package/dist/errors.js +116 -0
  6. package/dist/errors.js.map +1 -0
  7. package/dist/github/client.d.ts +46 -0
  8. package/dist/github/client.d.ts.map +1 -0
  9. package/dist/github/client.js +165 -0
  10. package/dist/github/client.js.map +1 -0
  11. package/dist/github/types.d.ts +91 -0
  12. package/dist/github/types.d.ts.map +1 -0
  13. package/dist/github/types.js +7 -0
  14. package/dist/github/types.js.map +1 -0
  15. package/dist/index.d.ts +19 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +22 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/plugin/copilot-plugin.d.ts +90 -0
  20. package/dist/plugin/copilot-plugin.d.ts.map +1 -0
  21. package/dist/plugin/copilot-plugin.js +289 -0
  22. package/dist/plugin/copilot-plugin.js.map +1 -0
  23. package/dist/polling/status-poller.d.ts +36 -0
  24. package/dist/polling/status-poller.d.ts.map +1 -0
  25. package/dist/polling/status-poller.js +142 -0
  26. package/dist/polling/status-poller.js.map +1 -0
  27. package/dist/polling/types.d.ts +62 -0
  28. package/dist/polling/types.d.ts.map +1 -0
  29. package/dist/polling/types.js +16 -0
  30. package/dist/polling/types.js.map +1 -0
  31. package/dist/schemas.d.ts +341 -0
  32. package/dist/schemas.d.ts.map +1 -0
  33. package/dist/schemas.js +176 -0
  34. package/dist/schemas.js.map +1 -0
  35. package/dist/types.d.ts +161 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +21 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/workspace/types.d.ts +61 -0
  40. package/dist/workspace/types.d.ts.map +1 -0
  41. package/dist/workspace/types.js +7 -0
  42. package/dist/workspace/types.js.map +1 -0
  43. package/dist/workspace/workspace-manager.d.ts +65 -0
  44. package/dist/workspace/workspace-manager.d.ts.map +1 -0
  45. package/dist/workspace/workspace-manager.js +294 -0
  46. package/dist/workspace/workspace-manager.js.map +1 -0
  47. package/package.json +58 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @generacy-ai/generacy-plugin-copilot
3
+ *
4
+ * Core type definitions for Copilot Workspace integration.
5
+ */
6
+ // =============================================================================
7
+ // Type Guards
8
+ // =============================================================================
9
+ /**
10
+ * Type guard for terminal workspace statuses.
11
+ */
12
+ export function isTerminalStatus(status) {
13
+ return ['merged', 'failed', 'not_available'].includes(status);
14
+ }
15
+ /**
16
+ * Type guard for active workspace statuses.
17
+ */
18
+ export function isActiveStatus(status) {
19
+ return ['pending', 'planning', 'implementing', 'review_ready'].includes(status);
20
+ }
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA+MH,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuB;IACpD,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @generacy-ai/generacy-plugin-copilot
3
+ *
4
+ * Workspace management type definitions.
5
+ */
6
+ import type { Workspace, WorkspaceOptions, WorkspaceStatus } from '../types.js';
7
+ import type { PollState } from '../polling/types.js';
8
+ /**
9
+ * Internal workspace representation with mutable state.
10
+ */
11
+ export interface InternalWorkspace {
12
+ /** Public workspace data */
13
+ workspace: Workspace;
14
+ /** Polling state */
15
+ pollState: PollState;
16
+ /** Associated GitHub data */
17
+ github: {
18
+ issueId: number;
19
+ linkedPRNumbers: number[];
20
+ };
21
+ /** Workspace options */
22
+ options: WorkspaceOptions;
23
+ }
24
+ /**
25
+ * Parameters for creating a workspace.
26
+ */
27
+ export interface CreateWorkspaceParams {
28
+ issueUrl: string;
29
+ options?: WorkspaceOptions;
30
+ }
31
+ /**
32
+ * Result of inferring status from GitHub.
33
+ */
34
+ export interface StatusInference {
35
+ /** Inferred status */
36
+ status: WorkspaceStatus;
37
+ /** Associated PR number if found */
38
+ prNumber?: number;
39
+ /** PR URL if found */
40
+ prUrl?: string;
41
+ /** Confidence level */
42
+ confidence: 'high' | 'medium' | 'low';
43
+ }
44
+ /**
45
+ * Workspace storage interface.
46
+ */
47
+ export interface WorkspaceStore {
48
+ /** Get a workspace by ID */
49
+ get(workspaceId: string): InternalWorkspace | undefined;
50
+ /** Set a workspace */
51
+ set(workspaceId: string, workspace: InternalWorkspace): void;
52
+ /** Delete a workspace */
53
+ delete(workspaceId: string): boolean;
54
+ /** Check if workspace exists */
55
+ has(workspaceId: string): boolean;
56
+ /** Get all workspace IDs */
57
+ keys(): Iterable<string>;
58
+ /** Clear all workspaces */
59
+ clear(): void;
60
+ }
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workspace/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,SAAS,EAAE,SAAS,CAAC;IAErB,oBAAoB;IACpB,SAAS,EAAE,SAAS,CAAC;IAErB,6BAA6B;IAC7B,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IAEF,wBAAwB;IACxB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACxD,sBAAsB;IACtB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7D,yBAAyB;IACzB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,gCAAgC;IAChC,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,4BAA4B;IAC5B,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,2BAA2B;IAC3B,KAAK,IAAI,IAAI,CAAC;CACf"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @generacy-ai/generacy-plugin-copilot
3
+ *
4
+ * Workspace management type definitions.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workspace/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @generacy-ai/generacy-plugin-copilot
3
+ *
4
+ * Workspace lifecycle management.
5
+ */
6
+ import type { Logger } from 'pino';
7
+ import { GitHubClient } from '../github/client.js';
8
+ import type { PollingConfig } from '../polling/types.js';
9
+ import type { FileChange, PullRequest, Workspace, WorkspaceOptions, WorkspaceStatus, WorkspaceStatusEvent } from '../types.js';
10
+ import type { CreateWorkspaceParams, WorkspaceStore } from './types.js';
11
+ /**
12
+ * Workspace lifecycle manager.
13
+ */
14
+ export declare class WorkspaceManager {
15
+ private readonly store;
16
+ private readonly githubClient;
17
+ private readonly pollingConfig;
18
+ private readonly defaultOptions;
19
+ private readonly logger?;
20
+ constructor(githubClient: GitHubClient, options?: {
21
+ store?: WorkspaceStore;
22
+ pollingConfig?: Partial<PollingConfig>;
23
+ defaultOptions?: WorkspaceOptions;
24
+ logger?: Logger;
25
+ });
26
+ /**
27
+ * Create a new workspace for tracking.
28
+ */
29
+ createWorkspace(params: CreateWorkspaceParams): Promise<Workspace>;
30
+ /**
31
+ * Get a workspace by ID.
32
+ */
33
+ getWorkspace(workspaceId: string): Promise<Workspace | null>;
34
+ /**
35
+ * Poll the current status of a workspace.
36
+ */
37
+ pollWorkspaceStatus(workspaceId: string): Promise<WorkspaceStatus>;
38
+ /**
39
+ * Get file changes from a completed workspace.
40
+ */
41
+ getChanges(workspaceId: string): Promise<FileChange[]>;
42
+ /**
43
+ * Get the pull request associated with the workspace.
44
+ */
45
+ getPullRequest(workspaceId: string): Promise<PullRequest | null>;
46
+ /**
47
+ * Stream status updates from a workspace.
48
+ */
49
+ streamStatus(workspaceId: string): AsyncIterable<WorkspaceStatusEvent>;
50
+ /**
51
+ * Delete a workspace.
52
+ */
53
+ deleteWorkspace(workspaceId: string): boolean;
54
+ /**
55
+ * Clear all workspaces.
56
+ */
57
+ clear(): void;
58
+ private getInternalWorkspace;
59
+ private inferStatusFromGitHub;
60
+ private mapFileStatus;
61
+ private mapGitHubPRToPluginPR;
62
+ private getReviewStatus;
63
+ private generateWorkspaceId;
64
+ }
65
+ //# sourceMappingURL=workspace-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manager.d.ts","sourceRoot":"","sources":["../../src/workspace/workspace-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,qBAAqB,EAGrB,cAAc,EACf,MAAM,YAAY,CAAC;AAiCpB;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;gBAG/B,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACvC,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ;IASR;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC;IA4CxE;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAKlE;;OAEG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAyBxE;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiC5D;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAuBtE;;OAEG;IACI,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAAC,oBAAoB,CAAC;IAwB7E;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAQ7C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,oBAAoB;YAQd,qBAAqB;IAgDnC,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,mBAAmB;CAG5B"}
@@ -0,0 +1,294 @@
1
+ /**
2
+ * @generacy-ai/generacy-plugin-copilot
3
+ *
4
+ * Workspace lifecycle management.
5
+ */
6
+ import { randomUUID } from 'node:crypto';
7
+ import { WorkspaceNotFoundError, WorkspaceInvalidStateError } from '../errors.js';
8
+ import { parseIssueUrl } from '../github/client.js';
9
+ import { StatusPoller } from '../polling/status-poller.js';
10
+ /**
11
+ * In-memory workspace store.
12
+ */
13
+ class InMemoryWorkspaceStore {
14
+ workspaces = new Map();
15
+ get(workspaceId) {
16
+ return this.workspaces.get(workspaceId);
17
+ }
18
+ set(workspaceId, workspace) {
19
+ this.workspaces.set(workspaceId, workspace);
20
+ }
21
+ delete(workspaceId) {
22
+ return this.workspaces.delete(workspaceId);
23
+ }
24
+ has(workspaceId) {
25
+ return this.workspaces.has(workspaceId);
26
+ }
27
+ keys() {
28
+ return this.workspaces.keys();
29
+ }
30
+ clear() {
31
+ this.workspaces.clear();
32
+ }
33
+ }
34
+ /**
35
+ * Workspace lifecycle manager.
36
+ */
37
+ export class WorkspaceManager {
38
+ store;
39
+ githubClient;
40
+ pollingConfig;
41
+ defaultOptions;
42
+ logger;
43
+ constructor(githubClient, options = {}) {
44
+ this.store = options.store ?? new InMemoryWorkspaceStore();
45
+ this.githubClient = githubClient;
46
+ this.pollingConfig = options.pollingConfig ?? {};
47
+ this.defaultOptions = options.defaultOptions ?? {};
48
+ this.logger = options.logger;
49
+ }
50
+ /**
51
+ * Create a new workspace for tracking.
52
+ */
53
+ async createWorkspace(params) {
54
+ const parsed = parseIssueUrl(params.issueUrl);
55
+ const workspaceId = this.generateWorkspaceId();
56
+ const now = new Date();
57
+ // Verify issue exists
58
+ const issue = await this.githubClient.getIssue(parsed.owner, parsed.repo, parsed.issueNumber);
59
+ const workspace = {
60
+ id: workspaceId,
61
+ issueUrl: params.issueUrl,
62
+ status: 'pending',
63
+ createdAt: now,
64
+ updatedAt: now,
65
+ owner: parsed.owner,
66
+ repo: parsed.repo,
67
+ issueNumber: parsed.issueNumber,
68
+ };
69
+ const internal = {
70
+ workspace,
71
+ pollState: {
72
+ pollCount: 0,
73
+ currentIntervalMs: 5000,
74
+ startedAt: now,
75
+ isActive: false,
76
+ },
77
+ github: {
78
+ issueId: issue.id,
79
+ linkedPRNumbers: [],
80
+ },
81
+ options: { ...this.defaultOptions, ...params.options },
82
+ };
83
+ this.store.set(workspaceId, internal);
84
+ this.logger?.info({ workspaceId, issueUrl: params.issueUrl }, 'Workspace created');
85
+ return workspace;
86
+ }
87
+ /**
88
+ * Get a workspace by ID.
89
+ */
90
+ async getWorkspace(workspaceId) {
91
+ const internal = this.store.get(workspaceId);
92
+ return internal?.workspace ?? null;
93
+ }
94
+ /**
95
+ * Poll the current status of a workspace.
96
+ */
97
+ async pollWorkspaceStatus(workspaceId) {
98
+ const internal = this.getInternalWorkspace(workspaceId);
99
+ const inference = await this.inferStatusFromGitHub(internal);
100
+ // Update workspace if status changed
101
+ if (inference.status !== internal.workspace.status) {
102
+ internal.workspace = {
103
+ ...internal.workspace,
104
+ status: inference.status,
105
+ updatedAt: new Date(),
106
+ pullRequestUrl: inference.prUrl ?? internal.workspace.pullRequestUrl,
107
+ };
108
+ internal.pollState.pollCount++;
109
+ internal.pollState.lastPolledAt = new Date();
110
+ if (inference.prNumber && !internal.github.linkedPRNumbers.includes(inference.prNumber)) {
111
+ internal.github.linkedPRNumbers.push(inference.prNumber);
112
+ }
113
+ this.store.set(workspaceId, internal);
114
+ }
115
+ return inference.status;
116
+ }
117
+ /**
118
+ * Get file changes from a completed workspace.
119
+ */
120
+ async getChanges(workspaceId) {
121
+ const internal = this.getInternalWorkspace(workspaceId);
122
+ if (!['review_ready', 'merged'].includes(internal.workspace.status)) {
123
+ throw new WorkspaceInvalidStateError(workspaceId, internal.workspace.status, ['review_ready', 'merged'], 'get changes');
124
+ }
125
+ const prNumber = internal.github.linkedPRNumbers[0];
126
+ if (!prNumber) {
127
+ return [];
128
+ }
129
+ const files = await this.githubClient.getPullRequestFiles(internal.workspace.owner, internal.workspace.repo, prNumber);
130
+ return files.map((file) => ({
131
+ path: file.filename,
132
+ type: this.mapFileStatus(file.status),
133
+ previousPath: file.previous_filename,
134
+ additions: file.additions,
135
+ deletions: file.deletions,
136
+ patch: file.patch,
137
+ }));
138
+ }
139
+ /**
140
+ * Get the pull request associated with the workspace.
141
+ */
142
+ async getPullRequest(workspaceId) {
143
+ const internal = this.getInternalWorkspace(workspaceId);
144
+ const prNumber = internal.github.linkedPRNumbers[0];
145
+ if (!prNumber) {
146
+ return null;
147
+ }
148
+ const ghPr = await this.githubClient.getPullRequest(internal.workspace.owner, internal.workspace.repo, prNumber);
149
+ const reviews = await this.githubClient.getPullRequestReviews(internal.workspace.owner, internal.workspace.repo, prNumber);
150
+ return this.mapGitHubPRToPluginPR(ghPr, reviews, internal.workspace.issueNumber);
151
+ }
152
+ /**
153
+ * Stream status updates from a workspace.
154
+ */
155
+ async *streamStatus(workspaceId) {
156
+ const internal = this.getInternalWorkspace(workspaceId);
157
+ const poller = new StatusPoller(workspaceId, this.pollingConfig);
158
+ const checkStatus = async () => {
159
+ const inference = await this.inferStatusFromGitHub(internal);
160
+ // Update internal state
161
+ if (inference.status !== internal.workspace.status) {
162
+ internal.workspace = {
163
+ ...internal.workspace,
164
+ status: inference.status,
165
+ updatedAt: new Date(),
166
+ pullRequestUrl: inference.prUrl ?? internal.workspace.pullRequestUrl,
167
+ };
168
+ this.store.set(workspaceId, internal);
169
+ }
170
+ return inference.status;
171
+ };
172
+ yield* poller.streamStatus(checkStatus);
173
+ }
174
+ /**
175
+ * Delete a workspace.
176
+ */
177
+ deleteWorkspace(workspaceId) {
178
+ const deleted = this.store.delete(workspaceId);
179
+ if (deleted) {
180
+ this.logger?.info({ workspaceId }, 'Workspace deleted');
181
+ }
182
+ return deleted;
183
+ }
184
+ /**
185
+ * Clear all workspaces.
186
+ */
187
+ clear() {
188
+ this.store.clear();
189
+ this.logger?.info('All workspaces cleared');
190
+ }
191
+ getInternalWorkspace(workspaceId) {
192
+ const internal = this.store.get(workspaceId);
193
+ if (!internal) {
194
+ throw new WorkspaceNotFoundError(workspaceId);
195
+ }
196
+ return internal;
197
+ }
198
+ async inferStatusFromGitHub(internal) {
199
+ try {
200
+ // Check for linked PRs
201
+ const prs = await this.githubClient.listLinkedPullRequests(internal.workspace.owner, internal.workspace.repo, internal.workspace.issueNumber);
202
+ if (prs.length === 0) {
203
+ // No PRs linked yet - still pending
204
+ return { status: 'pending', confidence: 'medium' };
205
+ }
206
+ // Use the most recent PR
207
+ const pr = prs[0];
208
+ if (pr.merged) {
209
+ return {
210
+ status: 'merged',
211
+ prNumber: pr.number,
212
+ prUrl: pr.html_url,
213
+ confidence: 'high',
214
+ };
215
+ }
216
+ if (pr.state === 'closed') {
217
+ return {
218
+ status: 'failed',
219
+ prNumber: pr.number,
220
+ prUrl: pr.html_url,
221
+ confidence: 'medium',
222
+ };
223
+ }
224
+ // PR is open - check review status
225
+ return {
226
+ status: 'review_ready',
227
+ prNumber: pr.number,
228
+ prUrl: pr.html_url,
229
+ confidence: 'high',
230
+ };
231
+ }
232
+ catch (error) {
233
+ this.logger?.warn({ workspaceId: internal.workspace.id, error }, 'Failed to infer status');
234
+ return { status: 'not_available', confidence: 'low' };
235
+ }
236
+ }
237
+ mapFileStatus(status) {
238
+ switch (status) {
239
+ case 'added':
240
+ return 'added';
241
+ case 'removed':
242
+ return 'deleted';
243
+ case 'renamed':
244
+ return 'renamed';
245
+ default:
246
+ return 'modified';
247
+ }
248
+ }
249
+ mapGitHubPRToPluginPR(ghPr, reviews, issueNumber) {
250
+ return {
251
+ number: ghPr.number,
252
+ url: ghPr.html_url,
253
+ title: ghPr.title,
254
+ body: ghPr.body ?? '',
255
+ state: ghPr.merged ? 'merged' : ghPr.state,
256
+ head: ghPr.head.ref,
257
+ base: ghPr.base.ref,
258
+ mergeable: ghPr.mergeable ?? undefined,
259
+ linkedIssues: [issueNumber],
260
+ reviewStatus: this.getReviewStatus(reviews),
261
+ changedFiles: ghPr.changed_files,
262
+ additions: ghPr.additions,
263
+ deletions: ghPr.deletions,
264
+ };
265
+ }
266
+ getReviewStatus(reviews) {
267
+ if (reviews.length === 0) {
268
+ return 'pending';
269
+ }
270
+ // Get the most recent review state per reviewer
271
+ const latestByReviewer = new Map();
272
+ for (const review of reviews) {
273
+ const existing = latestByReviewer.get(review.user.login);
274
+ if (!existing || new Date(review.submitted_at) > new Date(existing.submitted_at)) {
275
+ latestByReviewer.set(review.user.login, review);
276
+ }
277
+ }
278
+ const states = [...latestByReviewer.values()].map((r) => r.state);
279
+ if (states.includes('CHANGES_REQUESTED')) {
280
+ return 'changes_requested';
281
+ }
282
+ if (states.includes('APPROVED')) {
283
+ return 'approved';
284
+ }
285
+ if (states.includes('DISMISSED')) {
286
+ return 'dismissed';
287
+ }
288
+ return 'pending';
289
+ }
290
+ generateWorkspaceId() {
291
+ return `ws_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
292
+ }
293
+ }
294
+ //# sourceMappingURL=workspace-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../../src/workspace/workspace-manager.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@generacy-ai/generacy-plugin-copilot",
3
+ "version": "0.0.0-preview-20260304013206",
4
+ "description": "GitHub Copilot Workspace agent platform plugin for Generacy - tracks and monitors Copilot Workspace sessions",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "dependencies": {
15
+ "@generacy-ai/latency": "^0.1.0",
16
+ "@generacy-ai/latency-plugin-dev-agent": "^0.1.0",
17
+ "@octokit/rest": "^21.0.2",
18
+ "pino": "^9.0.0",
19
+ "zod": "^3.23.0"
20
+ },
21
+ "devDependencies": {
22
+ "@types/node": "^20.0.0",
23
+ "typescript": "^5.6.0",
24
+ "vitest": "^3.2.4",
25
+ "tsx": "^4.0.0"
26
+ },
27
+ "engines": {
28
+ "node": ">=20.0.0"
29
+ },
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "keywords": [
34
+ "copilot",
35
+ "copilot-workspace",
36
+ "agent",
37
+ "plugin",
38
+ "github",
39
+ "generacy"
40
+ ],
41
+ "license": "Apache-2.0",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/generacy-ai/generacy.git",
45
+ "directory": "packages/generacy-plugin-copilot"
46
+ },
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
50
+ "scripts": {
51
+ "build": "tsc",
52
+ "dev": "tsx watch src/index.ts",
53
+ "test": "vitest run",
54
+ "test:watch": "vitest",
55
+ "lint": "eslint src tests --ext .ts",
56
+ "typecheck": "tsc --noEmit"
57
+ }
58
+ }