@proletariat/cli 0.3.96 → 0.3.98
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/commands/gc.d.ts +1 -0
- package/dist/commands/gc.js +31 -1
- package/dist/commands/gc.js.map +1 -1
- package/dist/commands/linear/connect.d.ts +5 -0
- package/dist/commands/linear/connect.js +84 -0
- package/dist/commands/linear/connect.js.map +1 -1
- package/dist/commands/orchestrate/index.js +18 -10
- package/dist/commands/orchestrate/index.js.map +1 -1
- package/dist/commands/qa/index.js +1 -1
- package/dist/commands/session/watch.d.ts +1 -0
- package/dist/commands/session/watch.js +46 -2
- package/dist/commands/session/watch.js.map +1 -1
- package/dist/commands/watch/index.d.ts +28 -0
- package/dist/commands/watch/index.js +172 -0
- package/dist/commands/watch/index.js.map +1 -0
- package/dist/commands/work/complete.d.ts +1 -0
- package/dist/commands/work/complete.js +38 -31
- package/dist/commands/work/complete.js.map +1 -1
- package/dist/commands/{ticket/index.d.ts → work/drop.d.ts} +5 -4
- package/dist/commands/work/drop.js +215 -0
- package/dist/commands/work/drop.js.map +1 -0
- package/dist/commands/work/linear.js +1 -1
- package/dist/commands/work/linear.js.map +1 -1
- package/dist/commands/work/ready.d.ts +1 -0
- package/dist/commands/work/ready.js +46 -30
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/ship.d.ts +1 -0
- package/dist/commands/work/ship.js +56 -40
- package/dist/commands/work/ship.js.map +1 -1
- package/dist/commands/work/start.d.ts +2 -0
- package/dist/commands/work/start.js +238 -83
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/stop.d.ts +1 -0
- package/dist/commands/work/stop.js +40 -0
- package/dist/commands/work/stop.js.map +1 -1
- package/dist/lib/agents/commands.js +7 -5
- package/dist/lib/agents/commands.js.map +1 -1
- package/dist/lib/asana/client.d.ts +4 -1
- package/dist/lib/asana/client.js +15 -0
- package/dist/lib/asana/client.js.map +1 -1
- package/dist/lib/asana/index.d.ts +1 -1
- package/dist/lib/asana/types.d.ts +4 -0
- package/dist/lib/database/credential-store.js +1 -0
- package/dist/lib/database/credential-store.js.map +1 -1
- package/dist/lib/database/drizzle-schema.d.ts +17 -0
- package/dist/lib/database/drizzle-schema.js +1 -0
- package/dist/lib/database/drizzle-schema.js.map +1 -1
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.d.ts +9 -0
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js +23 -0
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js.map +1 -0
- package/dist/lib/database/migrations/0020_transition_map.d.ts +2 -0
- package/dist/lib/database/migrations/0020_transition_map.js +27 -0
- package/dist/lib/database/migrations/0020_transition_map.js.map +1 -0
- package/dist/lib/database/migrations/index.js +4 -0
- package/dist/lib/database/migrations/index.js.map +1 -1
- package/dist/lib/execution/config.d.ts +10 -0
- package/dist/lib/execution/config.js +24 -0
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/preflight.d.ts +51 -0
- package/dist/lib/execution/preflight.js +278 -0
- package/dist/lib/execution/preflight.js.map +1 -0
- package/dist/lib/execution/runners/prompt-builder.d.ts +6 -0
- package/dist/lib/execution/runners/prompt-builder.js +38 -7
- package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
- package/dist/lib/execution/session-utils.d.ts +23 -0
- package/dist/lib/execution/session-utils.js +69 -0
- package/dist/lib/execution/session-utils.js.map +1 -1
- package/dist/lib/execution/spawner.d.ts +11 -1
- package/dist/lib/execution/spawner.js +44 -16
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/storage.d.ts +6 -0
- package/dist/lib/execution/storage.js +18 -0
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/execution/ticket-refs.d.ts +71 -0
- package/dist/lib/execution/ticket-refs.js +125 -0
- package/dist/lib/execution/ticket-refs.js.map +1 -0
- package/dist/lib/execution/types.d.ts +7 -2
- package/dist/lib/execution/types.js +5 -3
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/external-issues/index.d.ts +1 -0
- package/dist/lib/external-issues/index.js +2 -0
- package/dist/lib/external-issues/index.js.map +1 -1
- package/dist/lib/external-issues/linear.js +1 -1
- package/dist/lib/external-issues/linear.js.map +1 -1
- package/dist/lib/external-issues/ticket-builder.d.ts +21 -0
- package/dist/lib/external-issues/ticket-builder.js +43 -0
- package/dist/lib/external-issues/ticket-builder.js.map +1 -0
- package/dist/lib/external-issues/work-start.js +1 -1
- package/dist/lib/external-issues/work-start.js.map +1 -1
- package/dist/lib/gc/index.d.ts +67 -6
- package/dist/lib/gc/index.js +293 -15
- package/dist/lib/gc/index.js.map +1 -1
- package/dist/lib/github/client.d.ts +84 -0
- package/dist/lib/github/client.js +123 -0
- package/dist/lib/github/client.js.map +1 -0
- package/dist/lib/github/config.d.ts +42 -0
- package/dist/lib/github/config.js +115 -0
- package/dist/lib/github/config.js.map +1 -0
- package/dist/lib/github/types.d.ts +71 -0
- package/dist/lib/github/types.js +50 -0
- package/dist/lib/github/types.js.map +1 -0
- package/dist/lib/jira/client.d.ts +113 -0
- package/dist/lib/jira/client.js +208 -0
- package/dist/lib/jira/client.js.map +1 -0
- package/dist/lib/jira/config.d.ts +9 -0
- package/dist/lib/jira/config.js +30 -0
- package/dist/lib/jira/config.js.map +1 -1
- package/dist/lib/jira/index.d.ts +6 -2
- package/dist/lib/jira/index.js +4 -2
- package/dist/lib/jira/index.js.map +1 -1
- package/dist/lib/jira/types.d.ts +118 -0
- package/dist/lib/jira/types.js +45 -0
- package/dist/lib/jira/types.js.map +1 -0
- package/dist/lib/linear/config.d.ts +10 -0
- package/dist/lib/linear/config.js +33 -0
- package/dist/lib/linear/config.js.map +1 -1
- package/dist/lib/mcp/tools/index.d.ts +0 -2
- package/dist/lib/mcp/tools/index.js +0 -2
- package/dist/lib/mcp/tools/index.js.map +1 -1
- package/dist/lib/orchestrate/index.d.ts +2 -0
- package/dist/lib/orchestrate/index.js +1 -0
- package/dist/lib/orchestrate/index.js.map +1 -1
- package/dist/lib/orchestrate/simple-poller.d.ts +57 -0
- package/dist/lib/orchestrate/simple-poller.js +324 -0
- package/dist/lib/orchestrate/simple-poller.js.map +1 -0
- package/dist/lib/pmo/storage/index.js +16 -5
- package/dist/lib/pmo/storage/index.js.map +1 -1
- package/dist/lib/prompt-json.d.ts +31 -0
- package/dist/lib/prompt-json.js.map +1 -1
- package/dist/lib/providers/asana-provider.d.ts +27 -0
- package/dist/lib/providers/asana-provider.js +426 -0
- package/dist/lib/providers/asana-provider.js.map +1 -0
- package/dist/lib/providers/auto-mapper.d.ts +45 -0
- package/dist/lib/providers/auto-mapper.js +138 -0
- package/dist/lib/providers/auto-mapper.js.map +1 -0
- package/dist/lib/providers/github-provider.d.ts +34 -0
- package/dist/lib/providers/github-provider.js +418 -0
- package/dist/lib/providers/github-provider.js.map +1 -0
- package/dist/lib/providers/index.d.ts +3 -0
- package/dist/lib/providers/index.js +3 -0
- package/dist/lib/providers/index.js.map +1 -1
- package/dist/lib/providers/jira-provider.d.ts +31 -0
- package/dist/lib/providers/jira-provider.js +383 -0
- package/dist/lib/providers/jira-provider.js.map +1 -0
- package/dist/lib/providers/linear-provider.js +6 -7
- package/dist/lib/providers/linear-provider.js.map +1 -1
- package/dist/lib/providers/resolver.js +54 -0
- package/dist/lib/providers/resolver.js.map +1 -1
- package/dist/lib/providers/state-intents.d.ts +20 -0
- package/dist/lib/providers/state-intents.js +61 -7
- package/dist/lib/providers/state-intents.js.map +1 -1
- package/dist/lib/providers/state-resolution.d.ts +15 -11
- package/dist/lib/providers/state-resolution.js +54 -48
- package/dist/lib/providers/state-resolution.js.map +1 -1
- package/dist/lib/providers/transition-map.d.ts +59 -0
- package/dist/lib/providers/transition-map.js +113 -0
- package/dist/lib/providers/transition-map.js.map +1 -0
- package/dist/lib/providers/types.d.ts +1 -1
- package/dist/lib/session/index.d.ts +3 -1
- package/dist/lib/session/index.js +3 -1
- package/dist/lib/session/index.js.map +1 -1
- package/dist/lib/session/tmux-watchdog.d.ts +157 -0
- package/dist/lib/session/tmux-watchdog.js +424 -0
- package/dist/lib/session/tmux-watchdog.js.map +1 -0
- package/dist/lib/session/watcher.d.ts +22 -4
- package/dist/lib/session/watcher.js +66 -8
- package/dist/lib/session/watcher.js.map +1 -1
- package/dist/lib/work-lifecycle/post-execution.js +26 -1
- package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
- package/dist/lib/work-lifecycle/transition.d.ts +73 -0
- package/dist/lib/work-lifecycle/transition.js +138 -0
- package/dist/lib/work-lifecycle/transition.js.map +1 -0
- package/dist/lib/work-source/config.d.ts +1 -1
- package/dist/lib/work-source/config.js +11 -1
- package/dist/lib/work-source/config.js.map +1 -1
- package/oclif.manifest.json +936 -1628
- package/package.json +1 -1
- package/dist/commands/ticket/create.d.ts +0 -44
- package/dist/commands/ticket/create.js +0 -760
- package/dist/commands/ticket/create.js.map +0 -1
- package/dist/commands/ticket/delete.d.ts +0 -17
- package/dist/commands/ticket/delete.js +0 -204
- package/dist/commands/ticket/delete.js.map +0 -1
- package/dist/commands/ticket/edit.d.ts +0 -28
- package/dist/commands/ticket/edit.js +0 -402
- package/dist/commands/ticket/edit.js.map +0 -1
- package/dist/commands/ticket/index.js +0 -74
- package/dist/commands/ticket/index.js.map +0 -1
- package/dist/commands/ticket/list.d.ts +0 -33
- package/dist/commands/ticket/list.js +0 -519
- package/dist/commands/ticket/list.js.map +0 -1
- package/dist/commands/ticket/move.d.ts +0 -27
- package/dist/commands/ticket/move.js +0 -413
- package/dist/commands/ticket/move.js.map +0 -1
- package/dist/commands/ticket/show.d.ts +0 -14
- package/dist/commands/ticket/show.js +0 -110
- package/dist/commands/ticket/show.js.map +0 -1
- package/dist/commands/ticket/update.d.ts +0 -28
- package/dist/commands/ticket/update.js +0 -458
- package/dist/commands/ticket/update.js.map +0 -1
- package/dist/lib/mcp/tools/action.d.ts +0 -6
- package/dist/lib/mcp/tools/action.js +0 -123
- package/dist/lib/mcp/tools/action.js.map +0 -1
- package/dist/lib/mcp/tools/ticket.d.ts +0 -6
- package/dist/lib/mcp/tools/ticket.js +0 -464
- package/dist/lib/mcp/tools/ticket.js.map +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Issues Ticket Provider
|
|
3
|
+
*
|
|
4
|
+
* Writes ticket operations directly to GitHub Issues via REST API,
|
|
5
|
+
* then updates local PMO to keep it in sync.
|
|
6
|
+
*
|
|
7
|
+
* State mapping strategy:
|
|
8
|
+
* - Uses labels to represent workflow states (e.g., "status: In Progress")
|
|
9
|
+
* - Terminal states (completed, dropped) also close/reopen the issue
|
|
10
|
+
* - Auth via GITHUB_TOKEN environment variable or stored credential
|
|
11
|
+
*
|
|
12
|
+
* Follows the same pattern as ClickUpTicketProvider:
|
|
13
|
+
* - Write to GitHub first
|
|
14
|
+
* - Update local PMO as best-effort fallback
|
|
15
|
+
*/
|
|
16
|
+
import type Database from 'better-sqlite3';
|
|
17
|
+
import type { TicketFilter, CreateTicketInput, UpdateTicketInput } from '../pmo/types.js';
|
|
18
|
+
import type { TicketProvider, TicketProviderName, ProviderMoveResult, ProviderDeleteResult, ProviderListResult, ProviderCreateResult, ProviderGetResult, ProviderUpdateResult, ProviderAssignResult, ProviderStorage } from './types.js';
|
|
19
|
+
export declare class GitHubIssuesTicketProvider implements TicketProvider {
|
|
20
|
+
private db;
|
|
21
|
+
private storage;
|
|
22
|
+
private projectId;
|
|
23
|
+
readonly name: TicketProviderName;
|
|
24
|
+
constructor(db: Database.Database, storage: ProviderStorage, projectId: string);
|
|
25
|
+
private getTokenOrFail;
|
|
26
|
+
private getConfigOrFail;
|
|
27
|
+
moveTicket(ticketId: string, newState: string): Promise<ProviderMoveResult>;
|
|
28
|
+
deleteTicket(ticketId: string): Promise<ProviderDeleteResult>;
|
|
29
|
+
listTickets(_projectId?: string, filter?: TicketFilter): Promise<ProviderListResult>;
|
|
30
|
+
createTicket(projectId: string, input: CreateTicketInput): Promise<ProviderCreateResult>;
|
|
31
|
+
getTicket(ticketId: string): Promise<ProviderGetResult>;
|
|
32
|
+
updateTicket(ticketId: string, input: UpdateTicketInput): Promise<ProviderUpdateResult>;
|
|
33
|
+
assignTicket(ticketId: string, assignee: string): Promise<ProviderAssignResult>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Issues Ticket Provider
|
|
3
|
+
*
|
|
4
|
+
* Writes ticket operations directly to GitHub Issues via REST API,
|
|
5
|
+
* then updates local PMO to keep it in sync.
|
|
6
|
+
*
|
|
7
|
+
* State mapping strategy:
|
|
8
|
+
* - Uses labels to represent workflow states (e.g., "status: In Progress")
|
|
9
|
+
* - Terminal states (completed, dropped) also close/reopen the issue
|
|
10
|
+
* - Auth via GITHUB_TOKEN environment variable or stored credential
|
|
11
|
+
*
|
|
12
|
+
* Follows the same pattern as ClickUpTicketProvider:
|
|
13
|
+
* - Write to GitHub first
|
|
14
|
+
* - Update local PMO as best-effort fallback
|
|
15
|
+
*/
|
|
16
|
+
import { GitHubClient } from '../github/client.js';
|
|
17
|
+
import { getGitHubToken, loadGitHubConfig } from '../github/config.js';
|
|
18
|
+
import { GITHUB_LABEL_TO_PMO_CATEGORY, GITHUB_PRIORITY_LABELS, PMO_PRIORITY_TO_GITHUB_LABEL } from '../github/types.js';
|
|
19
|
+
export class GitHubIssuesTicketProvider {
|
|
20
|
+
db;
|
|
21
|
+
storage;
|
|
22
|
+
projectId;
|
|
23
|
+
name = 'github';
|
|
24
|
+
constructor(db, storage, projectId) {
|
|
25
|
+
this.db = db;
|
|
26
|
+
this.storage = storage;
|
|
27
|
+
this.projectId = projectId;
|
|
28
|
+
}
|
|
29
|
+
getTokenOrFail() {
|
|
30
|
+
const token = getGitHubToken(this.db);
|
|
31
|
+
if (!token)
|
|
32
|
+
throw new Error('GitHub token not configured');
|
|
33
|
+
return token;
|
|
34
|
+
}
|
|
35
|
+
getConfigOrFail() {
|
|
36
|
+
const config = loadGitHubConfig(this.db);
|
|
37
|
+
if (!config)
|
|
38
|
+
throw new Error('GitHub Issues not configured (missing token, owner, or repo)');
|
|
39
|
+
return config;
|
|
40
|
+
}
|
|
41
|
+
async moveTicket(ticketId, newState) {
|
|
42
|
+
let config;
|
|
43
|
+
try {
|
|
44
|
+
config = this.getConfigOrFail();
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return { success: false, provider: 'github', error: 'GitHub Issues not configured' };
|
|
48
|
+
}
|
|
49
|
+
// Look up GitHub issue number from ticket metadata
|
|
50
|
+
const ticket = await this.storage.getTicket(ticketId);
|
|
51
|
+
if (!ticket) {
|
|
52
|
+
return { success: false, provider: 'github', error: `Ticket ${ticketId} not found` };
|
|
53
|
+
}
|
|
54
|
+
const issueNumber = ticket.metadata?.['github.issue_number'];
|
|
55
|
+
if (!issueNumber) {
|
|
56
|
+
return { success: false, provider: 'github', error: `No GitHub issue mapping for ticket ${ticketId}` };
|
|
57
|
+
}
|
|
58
|
+
const client = new GitHubClient(config.token);
|
|
59
|
+
const num = parseInt(issueNumber, 10);
|
|
60
|
+
try {
|
|
61
|
+
// Determine if this state implies open or closed
|
|
62
|
+
const lowerState = newState.toLowerCase();
|
|
63
|
+
const isClosedState = ['done', 'closed', 'complete', 'completed', 'shipped', 'merged',
|
|
64
|
+
'resolved', 'finished', 'canceled', 'cancelled', "won't fix", 'wontfix',
|
|
65
|
+
'dropped', 'archived', 'removed', 'discarded'].includes(lowerState);
|
|
66
|
+
// Get current issue to find existing status labels
|
|
67
|
+
const issue = await client.getIssue(config.owner, config.repo, num);
|
|
68
|
+
// Remove existing status labels
|
|
69
|
+
const prefix = config.statusLabelPrefix ?? 'status:';
|
|
70
|
+
for (const label of issue.labels) {
|
|
71
|
+
if (label.name.toLowerCase().startsWith(prefix.toLowerCase())) {
|
|
72
|
+
try {
|
|
73
|
+
await client.removeLabel(config.owner, config.repo, num, label.name);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Non-fatal: label may already be removed
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Add the new status label
|
|
81
|
+
const statusLabel = `${prefix} ${newState}`;
|
|
82
|
+
try {
|
|
83
|
+
await client.addLabels(config.owner, config.repo, num, [statusLabel]);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// If label doesn't exist, create it then add
|
|
87
|
+
try {
|
|
88
|
+
await client.createLabel(config.owner, config.repo, {
|
|
89
|
+
name: statusLabel,
|
|
90
|
+
color: 'ededed',
|
|
91
|
+
});
|
|
92
|
+
await client.addLabels(config.owner, config.repo, num, [statusLabel]);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Non-fatal: status label is informational
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Close or reopen the issue based on state
|
|
99
|
+
await client.updateIssue(config.owner, config.repo, num, {
|
|
100
|
+
state: isClosedState ? 'closed' : 'open',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
return {
|
|
105
|
+
success: false,
|
|
106
|
+
provider: 'github',
|
|
107
|
+
error: `Failed to update GitHub issue: ${error instanceof Error ? error.message : String(error)}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// Also update local PMO to keep it in sync
|
|
111
|
+
try {
|
|
112
|
+
await this.storage.moveTicket(this.projectId, ticketId, newState);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Non-fatal: GitHub is the source of truth
|
|
116
|
+
}
|
|
117
|
+
return { success: true, provider: 'github' };
|
|
118
|
+
}
|
|
119
|
+
async deleteTicket(ticketId) {
|
|
120
|
+
let config;
|
|
121
|
+
try {
|
|
122
|
+
config = this.getConfigOrFail();
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return { success: false, provider: 'github', error: 'GitHub Issues not configured' };
|
|
126
|
+
}
|
|
127
|
+
// Look up GitHub issue number from ticket metadata
|
|
128
|
+
const ticket = await this.storage.getTicket(ticketId);
|
|
129
|
+
const issueNumber = ticket?.metadata?.['github.issue_number'];
|
|
130
|
+
if (issueNumber) {
|
|
131
|
+
const client = new GitHubClient(config.token);
|
|
132
|
+
const num = parseInt(issueNumber, 10);
|
|
133
|
+
// GitHub issues can't be deleted via API — close them instead
|
|
134
|
+
try {
|
|
135
|
+
await client.updateIssue(config.owner, config.repo, num, { state: 'closed' });
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return {
|
|
139
|
+
success: false,
|
|
140
|
+
provider: 'github',
|
|
141
|
+
error: `Failed to close GitHub issue: ${error instanceof Error ? error.message : String(error)}`,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Also delete the local PMO mirror
|
|
146
|
+
try {
|
|
147
|
+
await this.storage.deleteTicket(ticketId);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// Non-fatal if GitHub close succeeded
|
|
151
|
+
}
|
|
152
|
+
return { success: true, provider: 'github' };
|
|
153
|
+
}
|
|
154
|
+
async listTickets(_projectId, filter) {
|
|
155
|
+
let config;
|
|
156
|
+
try {
|
|
157
|
+
config = this.getConfigOrFail();
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return { success: false, provider: 'github', tickets: [], error: 'GitHub Issues not configured' };
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
const client = new GitHubClient(config.token);
|
|
164
|
+
const issues = await client.listIssues(config.owner, config.repo, {
|
|
165
|
+
state: 'all',
|
|
166
|
+
labels: filter?.label,
|
|
167
|
+
});
|
|
168
|
+
let tickets = issues.map(issue => githubIssueToTicket(issue, config.owner, config.repo, config.statusLabelPrefix));
|
|
169
|
+
// Apply client-side filters
|
|
170
|
+
if (filter?.priority) {
|
|
171
|
+
tickets = tickets.filter(t => t.priority === filter.priority);
|
|
172
|
+
}
|
|
173
|
+
if (filter?.column) {
|
|
174
|
+
tickets = tickets.filter(t => t.statusName === filter.column);
|
|
175
|
+
}
|
|
176
|
+
if (filter?.category) {
|
|
177
|
+
tickets = tickets.filter(t => t.category === filter.category);
|
|
178
|
+
}
|
|
179
|
+
if (filter?.search) {
|
|
180
|
+
const term = filter.search.toLowerCase();
|
|
181
|
+
tickets = tickets.filter(t => t.title.toLowerCase().includes(term) ||
|
|
182
|
+
(t.description || '').toLowerCase().includes(term));
|
|
183
|
+
}
|
|
184
|
+
return { success: true, provider: 'github', tickets };
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
return {
|
|
188
|
+
success: false,
|
|
189
|
+
provider: 'github',
|
|
190
|
+
tickets: [],
|
|
191
|
+
error: error instanceof Error ? error.message : String(error),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
async createTicket(projectId, input) {
|
|
196
|
+
let config;
|
|
197
|
+
try {
|
|
198
|
+
config = this.getConfigOrFail();
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return { success: false, provider: 'github', error: 'GitHub Issues not configured' };
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
const client = new GitHubClient(config.token);
|
|
205
|
+
// Build labels list
|
|
206
|
+
const labels = [...(input.labels || [])];
|
|
207
|
+
// Add priority label if set
|
|
208
|
+
if (input.priority && PMO_PRIORITY_TO_GITHUB_LABEL[input.priority]) {
|
|
209
|
+
labels.push(PMO_PRIORITY_TO_GITHUB_LABEL[input.priority]);
|
|
210
|
+
}
|
|
211
|
+
// Add status label if set
|
|
212
|
+
if (input.statusName) {
|
|
213
|
+
const prefix = config.statusLabelPrefix ?? 'status:';
|
|
214
|
+
labels.push(`${prefix} ${input.statusName}`);
|
|
215
|
+
}
|
|
216
|
+
// Create the issue on GitHub
|
|
217
|
+
const issue = await client.createIssue(config.owner, config.repo, {
|
|
218
|
+
title: input.title,
|
|
219
|
+
body: input.description,
|
|
220
|
+
labels,
|
|
221
|
+
assignees: input.assignee ? [input.assignee] : undefined,
|
|
222
|
+
});
|
|
223
|
+
// Create local PMO mirror ticket
|
|
224
|
+
const mirrorDescription = [
|
|
225
|
+
input.description || '',
|
|
226
|
+
'',
|
|
227
|
+
'---',
|
|
228
|
+
`_Created in GitHub: [#${issue.number}](${issue.html_url})_`,
|
|
229
|
+
].join('\n').trim();
|
|
230
|
+
const pmoTicket = await this.storage.createTicket(projectId, {
|
|
231
|
+
...input,
|
|
232
|
+
title: issue.title,
|
|
233
|
+
description: mirrorDescription,
|
|
234
|
+
metadata: {
|
|
235
|
+
...input.metadata,
|
|
236
|
+
'external_source': 'github',
|
|
237
|
+
'external_id': String(issue.id),
|
|
238
|
+
'external_key': `${config.owner}/${config.repo}#${issue.number}`,
|
|
239
|
+
'external_url': issue.html_url,
|
|
240
|
+
'github.issue_number': String(issue.number),
|
|
241
|
+
'github.owner': config.owner,
|
|
242
|
+
'github.repo': config.repo,
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
return { success: true, provider: 'github', ticket: pmoTicket };
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
return {
|
|
249
|
+
success: false,
|
|
250
|
+
provider: 'github',
|
|
251
|
+
error: error instanceof Error ? error.message : String(error),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
async getTicket(ticketId) {
|
|
256
|
+
// For getTicket, use local PMO since we maintain mirrors
|
|
257
|
+
try {
|
|
258
|
+
const ticket = await this.storage.getTicket(ticketId);
|
|
259
|
+
return { success: true, provider: 'github', ticket };
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
return {
|
|
263
|
+
success: false,
|
|
264
|
+
provider: 'github',
|
|
265
|
+
error: error instanceof Error ? error.message : String(error),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async updateTicket(ticketId, input) {
|
|
270
|
+
let config;
|
|
271
|
+
try {
|
|
272
|
+
config = this.getConfigOrFail();
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
return { success: false, provider: 'github', error: 'GitHub Issues not configured' };
|
|
276
|
+
}
|
|
277
|
+
// Look up GitHub issue number from ticket metadata
|
|
278
|
+
const ticket = await this.storage.getTicket(ticketId);
|
|
279
|
+
const issueNumber = ticket?.metadata?.['github.issue_number'];
|
|
280
|
+
if (issueNumber) {
|
|
281
|
+
const client = new GitHubClient(config.token);
|
|
282
|
+
const num = parseInt(issueNumber, 10);
|
|
283
|
+
// Build GitHub update payload from input fields
|
|
284
|
+
const githubInput = {};
|
|
285
|
+
if (input.title !== undefined)
|
|
286
|
+
githubInput.title = input.title;
|
|
287
|
+
if (input.description !== undefined)
|
|
288
|
+
githubInput.body = input.description ?? undefined;
|
|
289
|
+
// Only call GitHub API if there are relevant fields
|
|
290
|
+
if (Object.keys(githubInput).length > 0) {
|
|
291
|
+
try {
|
|
292
|
+
await client.updateIssue(config.owner, config.repo, num, githubInput);
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
return {
|
|
296
|
+
success: false,
|
|
297
|
+
provider: 'github',
|
|
298
|
+
error: `Failed to update GitHub issue: ${error instanceof Error ? error.message : String(error)}`,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Also update local PMO mirror
|
|
304
|
+
try {
|
|
305
|
+
const updated = await this.storage.updateTicket(ticketId, input);
|
|
306
|
+
return { success: true, provider: 'github', ticket: updated };
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
return {
|
|
310
|
+
success: false,
|
|
311
|
+
provider: 'github',
|
|
312
|
+
error: error instanceof Error ? error.message : String(error),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
async assignTicket(ticketId, assignee) {
|
|
317
|
+
let config;
|
|
318
|
+
try {
|
|
319
|
+
config = this.getConfigOrFail();
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
return { success: false, provider: 'github', error: 'GitHub Issues not configured' };
|
|
323
|
+
}
|
|
324
|
+
// Look up GitHub issue number from ticket metadata
|
|
325
|
+
const ticket = await this.storage.getTicket(ticketId);
|
|
326
|
+
const issueNumber = ticket?.metadata?.['github.issue_number'];
|
|
327
|
+
if (issueNumber) {
|
|
328
|
+
const client = new GitHubClient(config.token);
|
|
329
|
+
const num = parseInt(issueNumber, 10);
|
|
330
|
+
// GitHub uses login usernames for assignment
|
|
331
|
+
try {
|
|
332
|
+
await client.updateIssue(config.owner, config.repo, num, {
|
|
333
|
+
assignees: [assignee],
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
// Non-fatal: assignee resolution is best-effort
|
|
338
|
+
// The assignee name may not match a GitHub username
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Update local PMO mirror
|
|
342
|
+
try {
|
|
343
|
+
await this.storage.updateTicket(ticketId, { assignee });
|
|
344
|
+
return { success: true, provider: 'github' };
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
return {
|
|
348
|
+
success: false,
|
|
349
|
+
provider: 'github',
|
|
350
|
+
error: error instanceof Error ? error.message : String(error),
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Convert a GitHub issue to a normalized PMO Ticket.
|
|
357
|
+
*/
|
|
358
|
+
function githubIssueToTicket(issue, owner, repo, statusLabelPrefix) {
|
|
359
|
+
const prefix = statusLabelPrefix ?? 'status:';
|
|
360
|
+
// Determine status from labels
|
|
361
|
+
let statusName = issue.state === 'closed' ? 'Closed' : 'Open';
|
|
362
|
+
let statusCategory = issue.state === 'closed' ? 'completed' : 'unstarted';
|
|
363
|
+
// Check for status label
|
|
364
|
+
for (const label of issue.labels) {
|
|
365
|
+
if (label.name.toLowerCase().startsWith(prefix.toLowerCase())) {
|
|
366
|
+
statusName = label.name.slice(prefix.length).trim();
|
|
367
|
+
// Try to resolve category from label name
|
|
368
|
+
const category = GITHUB_LABEL_TO_PMO_CATEGORY[statusName.toLowerCase()];
|
|
369
|
+
if (category) {
|
|
370
|
+
statusCategory = category;
|
|
371
|
+
}
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Determine priority from labels
|
|
376
|
+
let priority;
|
|
377
|
+
for (const label of issue.labels) {
|
|
378
|
+
const mapped = GITHUB_PRIORITY_LABELS[label.name.toLowerCase()];
|
|
379
|
+
if (mapped) {
|
|
380
|
+
priority = mapped;
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
// Collect non-status, non-priority labels
|
|
385
|
+
const ticketLabels = issue.labels
|
|
386
|
+
.filter(l => {
|
|
387
|
+
const lower = l.name.toLowerCase();
|
|
388
|
+
return !lower.startsWith(prefix.toLowerCase()) && !GITHUB_PRIORITY_LABELS[lower];
|
|
389
|
+
})
|
|
390
|
+
.map(l => l.name);
|
|
391
|
+
return {
|
|
392
|
+
id: `${owner}/${repo}#${issue.number}`,
|
|
393
|
+
title: issue.title,
|
|
394
|
+
description: issue.body || undefined,
|
|
395
|
+
priority,
|
|
396
|
+
projectId: `${owner}/${repo}`,
|
|
397
|
+
projectName: `${owner}/${repo}`,
|
|
398
|
+
statusId: issue.state,
|
|
399
|
+
statusName,
|
|
400
|
+
statusCategory,
|
|
401
|
+
owner: issue.assignee?.login || undefined,
|
|
402
|
+
assignee: issue.assignee?.login || undefined,
|
|
403
|
+
subtasks: [],
|
|
404
|
+
labels: ticketLabels,
|
|
405
|
+
metadata: {
|
|
406
|
+
external_source: 'github',
|
|
407
|
+
external_key: `${owner}/${repo}#${issue.number}`,
|
|
408
|
+
external_id: String(issue.id),
|
|
409
|
+
external_url: issue.html_url,
|
|
410
|
+
'github.issue_number': String(issue.number),
|
|
411
|
+
'github.owner': owner,
|
|
412
|
+
'github.repo': repo,
|
|
413
|
+
},
|
|
414
|
+
createdAt: new Date(issue.created_at),
|
|
415
|
+
updatedAt: new Date(issue.updated_at),
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=github-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-provider.js","sourceRoot":"","sources":["../../../src/lib/providers/github-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,9 @@ export type { TicketProvider, TicketProviderName, ProviderResult, ProviderMoveRe
|
|
|
9
9
|
export { PMOTicketProvider } from './pmo-provider.js';
|
|
10
10
|
export { LinearTicketProvider } from './linear-provider.js';
|
|
11
11
|
export { TrelloTicketProvider } from './trello-provider.js';
|
|
12
|
+
export { GitHubIssuesTicketProvider } from './github-provider.js';
|
|
13
|
+
export { JiraTicketProvider } from './jira-provider.js';
|
|
14
|
+
export { AsanaTicketProvider } from './asana-provider.js';
|
|
12
15
|
export { EventEmittingProvider, type StatusResolver } from './event-emitting-provider.js';
|
|
13
16
|
export { ProviderStatusMappingStore, type StatusMapping } from './status-mapping.js';
|
|
14
17
|
export { ProviderTriggerStore, TriggerHandler, initTriggerHandler, stopTriggerHandler, TRIGGER_EVENTS, type TriggerEvent, type TriggerConfig, } from './trigger-config.js';
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
export { PMOTicketProvider } from './pmo-provider.js';
|
|
9
9
|
export { LinearTicketProvider } from './linear-provider.js';
|
|
10
10
|
export { TrelloTicketProvider } from './trello-provider.js';
|
|
11
|
+
export { GitHubIssuesTicketProvider } from './github-provider.js';
|
|
12
|
+
export { JiraTicketProvider } from './jira-provider.js';
|
|
13
|
+
export { AsanaTicketProvider } from './asana-provider.js';
|
|
11
14
|
export { EventEmittingProvider } from './event-emitting-provider.js';
|
|
12
15
|
export { ProviderStatusMappingStore } from './status-mapping.js';
|
|
13
16
|
export { ProviderTriggerStore, TriggerHandler, initTriggerHandler, stopTriggerHandler, TRIGGER_EVENTS, } from './trigger-config.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAuB,MAAM,8BAA8B,CAAA;AACzF,OAAO,EAAE,0BAA0B,EAAsB,MAAM,qBAAqB,CAAA;AACpF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GAGf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GAKpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAuB,MAAM,8BAA8B,CAAA;AACzF,OAAO,EAAE,0BAA0B,EAAsB,MAAM,qBAAqB,CAAA;AACpF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GAGf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GAKpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jira Ticket Provider
|
|
3
|
+
*
|
|
4
|
+
* Writes ticket operations directly to Jira via REST API,
|
|
5
|
+
* then updates local PMO to keep it in sync.
|
|
6
|
+
*
|
|
7
|
+
* Follows the same pattern as ClickUpTicketProvider:
|
|
8
|
+
* - Write to Jira first (source of truth)
|
|
9
|
+
* - Update local PMO as best-effort mirror
|
|
10
|
+
* - Use ticket metadata for Jira issue key lookups (no separate mapper table)
|
|
11
|
+
*
|
|
12
|
+
* Supports both Jira Cloud (API v3) and Server (API v2).
|
|
13
|
+
*/
|
|
14
|
+
import type Database from 'better-sqlite3';
|
|
15
|
+
import type { TicketFilter, CreateTicketInput, UpdateTicketInput } from '../pmo/types.js';
|
|
16
|
+
import type { TicketProvider, TicketProviderName, ProviderMoveResult, ProviderDeleteResult, ProviderListResult, ProviderCreateResult, ProviderGetResult, ProviderUpdateResult, ProviderAssignResult, ProviderStorage } from './types.js';
|
|
17
|
+
export declare class JiraTicketProvider implements TicketProvider {
|
|
18
|
+
private db;
|
|
19
|
+
private storage;
|
|
20
|
+
private projectId;
|
|
21
|
+
readonly name: TicketProviderName;
|
|
22
|
+
constructor(db: Database.Database, storage: ProviderStorage, projectId: string);
|
|
23
|
+
private getClientOrFail;
|
|
24
|
+
moveTicket(ticketId: string, newState: string): Promise<ProviderMoveResult>;
|
|
25
|
+
deleteTicket(ticketId: string): Promise<ProviderDeleteResult>;
|
|
26
|
+
listTickets(_projectId?: string, filter?: TicketFilter): Promise<ProviderListResult>;
|
|
27
|
+
createTicket(projectId: string, input: CreateTicketInput): Promise<ProviderCreateResult>;
|
|
28
|
+
getTicket(ticketId: string): Promise<ProviderGetResult>;
|
|
29
|
+
updateTicket(ticketId: string, input: UpdateTicketInput): Promise<ProviderUpdateResult>;
|
|
30
|
+
assignTicket(ticketId: string, assignee: string): Promise<ProviderAssignResult>;
|
|
31
|
+
}
|