@proletariat/cli 0.3.64 → 0.3.66

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 (58) hide show
  1. package/dist/commands/agents/index.d.ts +11 -0
  2. package/dist/commands/agents/index.js +105 -0
  3. package/dist/commands/agents/index.js.map +1 -0
  4. package/dist/commands/pr/checks.d.ts +20 -0
  5. package/dist/commands/pr/checks.js +154 -0
  6. package/dist/commands/pr/checks.js.map +1 -0
  7. package/dist/commands/pr/index.js +10 -2
  8. package/dist/commands/pr/index.js.map +1 -1
  9. package/dist/commands/pr/merge.d.ts +22 -0
  10. package/dist/commands/pr/merge.js +145 -0
  11. package/dist/commands/pr/merge.js.map +1 -0
  12. package/dist/commands/version/bump.d.ts +13 -0
  13. package/dist/commands/version/bump.js +125 -0
  14. package/dist/commands/version/bump.js.map +1 -0
  15. package/dist/commands/work/start.js +147 -99
  16. package/dist/commands/work/start.js.map +1 -1
  17. package/dist/lib/database/index.d.ts +1 -1
  18. package/dist/lib/database/index.js +9 -107
  19. package/dist/lib/database/index.js.map +1 -1
  20. package/dist/lib/database/migrations/0001_baseline.d.ts +9 -0
  21. package/dist/lib/database/migrations/0001_baseline.js +18 -0
  22. package/dist/lib/database/migrations/0001_baseline.js.map +1 -0
  23. package/dist/lib/database/migrations/index.d.ts +12 -0
  24. package/dist/lib/database/migrations/index.js +15 -0
  25. package/dist/lib/database/migrations/index.js.map +1 -0
  26. package/dist/lib/database/migrator.d.ts +27 -0
  27. package/dist/lib/database/migrator.js +42 -0
  28. package/dist/lib/database/migrator.js.map +1 -0
  29. package/dist/lib/database/workspace-schema.d.ts +7 -0
  30. package/dist/lib/database/workspace-schema.js +109 -0
  31. package/dist/lib/database/workspace-schema.js.map +1 -0
  32. package/dist/lib/events/events.d.ts +5 -0
  33. package/dist/lib/events/index.d.ts +1 -1
  34. package/dist/lib/events/index.js.map +1 -1
  35. package/dist/lib/execution/runners.js +14 -6
  36. package/dist/lib/execution/runners.js.map +1 -1
  37. package/dist/lib/external-issues/outbound-sync.d.ts +21 -16
  38. package/dist/lib/external-issues/outbound-sync.js +64 -49
  39. package/dist/lib/external-issues/outbound-sync.js.map +1 -1
  40. package/dist/lib/pmo/sync-manager.js +5 -1
  41. package/dist/lib/pmo/sync-manager.js.map +1 -1
  42. package/dist/lib/pr/index.d.ts +28 -0
  43. package/dist/lib/pr/index.js +53 -1
  44. package/dist/lib/pr/index.js.map +1 -1
  45. package/dist/lib/registry/index.d.ts +52 -0
  46. package/dist/lib/registry/index.js +169 -0
  47. package/dist/lib/registry/index.js.map +1 -0
  48. package/dist/lib/work-lifecycle/adapter.d.ts +34 -0
  49. package/dist/lib/work-lifecycle/adapter.js +103 -0
  50. package/dist/lib/work-lifecycle/adapter.js.map +1 -0
  51. package/dist/lib/work-lifecycle/events.d.ts +52 -0
  52. package/dist/lib/work-lifecycle/events.js +12 -0
  53. package/dist/lib/work-lifecycle/events.js.map +1 -0
  54. package/dist/lib/work-lifecycle/index.d.ts +9 -0
  55. package/dist/lib/work-lifecycle/index.js +9 -0
  56. package/dist/lib/work-lifecycle/index.js.map +1 -0
  57. package/oclif.manifest.json +2444 -2203
  58. package/package.json +1 -1
@@ -0,0 +1,11 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Agents extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ status: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
@@ -0,0 +1,105 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { getMachineAgents } from '../../lib/registry/index.js';
4
+ export default class Agents extends Command {
5
+ static description = 'List all agents across all projects (machine-wide registry)';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %>',
8
+ '<%= config.bin %> <%= command.id %> --status running',
9
+ '<%= config.bin %> <%= command.id %> --project /path/to/project',
10
+ '<%= config.bin %> <%= command.id %> --json',
11
+ ];
12
+ static flags = {
13
+ status: Flags.string({
14
+ char: 's',
15
+ description: 'Filter by agent status',
16
+ options: ['running', 'idle', 'completed'],
17
+ }),
18
+ project: Flags.string({
19
+ char: 'p',
20
+ description: 'Filter by project path',
21
+ }),
22
+ json: Flags.boolean({
23
+ description: 'Output as JSON',
24
+ default: false,
25
+ }),
26
+ };
27
+ async run() {
28
+ const { flags } = await this.parse(Agents);
29
+ const agents = getMachineAgents({
30
+ status: flags.status,
31
+ projectPath: flags.project,
32
+ });
33
+ // JSON output mode
34
+ if (flags.json) {
35
+ this.log(JSON.stringify({ agents }, null, 2));
36
+ return;
37
+ }
38
+ if (agents.length === 0) {
39
+ const filterDesc = flags.status ? ` with status "${flags.status}"` : '';
40
+ this.log(chalk.yellow(`No agents found${filterDesc}.`));
41
+ this.log(chalk.dim('Agents are registered when you run "prlt work start".'));
42
+ return;
43
+ }
44
+ // Group by project
45
+ const byProject = new Map();
46
+ for (const agent of agents) {
47
+ const list = byProject.get(agent.projectPath) || [];
48
+ list.push(agent);
49
+ byProject.set(agent.projectPath, list);
50
+ }
51
+ this.log(chalk.bold.cyan('\n Machine-Wide Agent Registry\n'));
52
+ for (const [projectPath, projectAgents] of byProject) {
53
+ this.log(chalk.bold(` ${projectPath}`));
54
+ for (const agent of projectAgents) {
55
+ const statusIcon = agent.status === 'running' ? '🟢'
56
+ : agent.status === 'idle' ? '🟡'
57
+ : '⚪';
58
+ const statusColor = agent.status === 'running' ? chalk.green
59
+ : agent.status === 'idle' ? chalk.yellow
60
+ : chalk.dim;
61
+ const parts = [
62
+ `${statusIcon} ${chalk.bold(agent.agentName)}`,
63
+ statusColor(agent.status),
64
+ ];
65
+ if (agent.ticketId) {
66
+ parts.push(chalk.blue(agent.ticketId));
67
+ }
68
+ this.log(` ${parts.join(' ')}`);
69
+ const spawnedAt = formatRelativeTime(agent.spawnedAt);
70
+ const lastSeen = formatRelativeTime(agent.lastSeenAt);
71
+ this.log(chalk.dim(` spawned ${spawnedAt} | last seen ${lastSeen}`));
72
+ if (agent.sessionId) {
73
+ this.log(chalk.dim(` session: ${agent.sessionId}`));
74
+ }
75
+ }
76
+ this.log('');
77
+ }
78
+ // Summary
79
+ const running = agents.filter(a => a.status === 'running').length;
80
+ const idle = agents.filter(a => a.status === 'idle').length;
81
+ const completed = agents.filter(a => a.status === 'completed').length;
82
+ this.log(chalk.bold(' Summary:'));
83
+ this.log(` ${chalk.green(`${running} running`)} ${chalk.yellow(`${idle} idle`)} ${chalk.dim(`${completed} completed`)}`);
84
+ this.log(` ${byProject.size} project(s)\n`);
85
+ }
86
+ }
87
+ function formatRelativeTime(isoString) {
88
+ const now = Date.now();
89
+ const then = new Date(isoString).getTime();
90
+ const diffMs = now - then;
91
+ if (diffMs < 0)
92
+ return 'just now';
93
+ const seconds = Math.floor(diffMs / 1000);
94
+ if (seconds < 60)
95
+ return `${seconds}s ago`;
96
+ const minutes = Math.floor(seconds / 60);
97
+ if (minutes < 60)
98
+ return `${minutes}m ago`;
99
+ const hours = Math.floor(minutes / 60);
100
+ if (hours < 24)
101
+ return `${hours}h ago`;
102
+ const days = Math.floor(hours / 24);
103
+ return `${days}d ago`;
104
+ }
105
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agents/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class PRChecks extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ prNumber: import("@oclif/core/interfaces").Arg<number | undefined, {
7
+ max?: number;
8
+ min?: number;
9
+ }>;
10
+ };
11
+ static flags: {
12
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ };
16
+ private hasPMO;
17
+ init(): Promise<void>;
18
+ execute(): Promise<void>;
19
+ private getCheckIcon;
20
+ }
@@ -0,0 +1,154 @@
1
+ import { Args } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags, } from '../../lib/pmo/index.js';
3
+ import { styles, divider } from '../../lib/styles.js';
4
+ import { isGHInstalled, isGHAuthenticated, getPRByNumber, getPRForBranch, getCurrentBranch, listOpenPRs, getPRChecks, } from '../../lib/pr/index.js';
5
+ import { shouldOutputJson, outputErrorAsJson, outputSuccessAsJson, createMetadata, } from '../../lib/prompt-json.js';
6
+ import { FlagResolver } from '../../lib/flags/index.js';
7
+ export default class PRChecks extends PMOCommand {
8
+ static description = 'Show CI check status for a pull request';
9
+ static examples = [
10
+ '<%= config.bin %> <%= command.id %>',
11
+ '<%= config.bin %> <%= command.id %> 123',
12
+ '<%= config.bin %> <%= command.id %> --json',
13
+ ];
14
+ static args = {
15
+ prNumber: Args.integer({
16
+ description: 'PR number (defaults to PR for current branch)',
17
+ required: false,
18
+ }),
19
+ };
20
+ static flags = {
21
+ ...pmoBaseFlags,
22
+ };
23
+ // Flag to track if PMO is available
24
+ hasPMO = true;
25
+ async init() {
26
+ try {
27
+ await super.init();
28
+ }
29
+ catch {
30
+ this.hasPMO = false;
31
+ }
32
+ }
33
+ async execute() {
34
+ const { args, flags } = await this.parse(PRChecks);
35
+ const jsonMode = shouldOutputJson(flags);
36
+ const handleError = (code, message) => {
37
+ if (jsonMode) {
38
+ outputErrorAsJson(code, message, createMetadata('pr checks', flags));
39
+ this.exit(1);
40
+ }
41
+ this.error(message);
42
+ };
43
+ // Check gh CLI
44
+ if (!isGHInstalled()) {
45
+ return handleError('GH_NOT_INSTALLED', 'GitHub CLI (gh) is not installed. Install it from https://cli.github.com/');
46
+ }
47
+ if (!isGHAuthenticated()) {
48
+ return handleError('GH_NOT_AUTHENTICATED', 'GitHub CLI is not authenticated. Run "gh auth login" first.');
49
+ }
50
+ let prNumber = args.prNumber;
51
+ // If no PR number, try to detect from current branch
52
+ if (!prNumber) {
53
+ const currentBranch = getCurrentBranch();
54
+ if (currentBranch) {
55
+ const branchPR = getPRForBranch(currentBranch);
56
+ if (branchPR) {
57
+ prNumber = branchPR.number;
58
+ }
59
+ }
60
+ }
61
+ // Still no PR number - prompt for selection
62
+ if (!prNumber) {
63
+ const openPRs = listOpenPRs();
64
+ if (openPRs.length === 0) {
65
+ return handleError('NO_OPEN_PRS', 'No open pull requests found.');
66
+ }
67
+ const resolver = new FlagResolver({
68
+ commandName: 'pr checks',
69
+ baseCommand: 'prlt pr checks',
70
+ jsonMode,
71
+ flags: {},
72
+ });
73
+ resolver.addPrompt({
74
+ flagName: 'pr',
75
+ type: 'list',
76
+ message: 'Select PR to view checks:',
77
+ choices: () => openPRs.map(pr => ({
78
+ name: `#${pr.number} - ${pr.title} (${pr.headBranch})`,
79
+ value: String(pr.number),
80
+ })),
81
+ });
82
+ const resolved = await resolver.resolve();
83
+ prNumber = parseInt(resolved.pr, 10);
84
+ }
85
+ // Verify PR exists
86
+ const prInfo = getPRByNumber(prNumber);
87
+ if (!prInfo) {
88
+ return handleError('PR_NOT_FOUND', `PR #${prNumber} not found.`);
89
+ }
90
+ // Get checks
91
+ const checks = getPRChecks(prNumber);
92
+ if (jsonMode) {
93
+ outputSuccessAsJson({
94
+ prNumber,
95
+ title: prInfo.title,
96
+ url: prInfo.url,
97
+ checks: checks.map(c => ({
98
+ name: c.name,
99
+ status: c.status,
100
+ conclusion: c.conclusion,
101
+ url: c.url,
102
+ })),
103
+ summary: {
104
+ total: checks.length,
105
+ passing: checks.filter(c => c.conclusion === 'SUCCESS').length,
106
+ failing: checks.filter(c => c.conclusion === 'FAILURE').length,
107
+ pending: checks.filter(c => c.status === 'IN_PROGRESS' || c.status === 'QUEUED').length,
108
+ },
109
+ }, createMetadata('pr checks', flags));
110
+ return;
111
+ }
112
+ // Interactive output
113
+ this.log('');
114
+ this.log(styles.header(`CI Checks: PR #${prNumber}`));
115
+ this.log(styles.muted(` ${prInfo.title}`));
116
+ this.log(styles.muted(` ${prInfo.url}`));
117
+ this.log(divider(60));
118
+ if (checks.length === 0) {
119
+ this.log(styles.muted(' No CI checks found for this PR.'));
120
+ return;
121
+ }
122
+ for (const check of checks) {
123
+ const icon = this.getCheckIcon(check.status, check.conclusion);
124
+ const statusText = check.conclusion || check.status;
125
+ this.log(`${icon} ${check.name} ${styles.muted(`(${statusText})`)}`);
126
+ }
127
+ this.log('');
128
+ this.log(divider(60));
129
+ const passing = checks.filter(c => c.conclusion === 'SUCCESS').length;
130
+ const failing = checks.filter(c => c.conclusion === 'FAILURE').length;
131
+ const pending = checks.filter(c => c.status === 'IN_PROGRESS' || c.status === 'QUEUED').length;
132
+ const parts = [];
133
+ parts.push(`Total: ${checks.length}`);
134
+ if (passing > 0)
135
+ parts.push(styles.success(`Passing: ${passing}`));
136
+ if (failing > 0)
137
+ parts.push(styles.error(`Failing: ${failing}`));
138
+ if (pending > 0)
139
+ parts.push(styles.warning(`Pending: ${pending}`));
140
+ this.log(parts.join(' | '));
141
+ }
142
+ getCheckIcon(status, conclusion) {
143
+ if (conclusion === 'SUCCESS')
144
+ return styles.success('✓');
145
+ if (conclusion === 'FAILURE')
146
+ return styles.error('✗');
147
+ if (conclusion === 'CANCELLED' || conclusion === 'SKIPPED')
148
+ return styles.muted('○');
149
+ if (status === 'IN_PROGRESS' || status === 'QUEUED')
150
+ return styles.warning('●');
151
+ return styles.muted('?');
152
+ }
153
+ }
154
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/pr/checks.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,8 @@ export default class PR extends PMOCommand {
11
11
  ...pmoBaseFlags,
12
12
  action: Flags.string({
13
13
  char: 'a',
14
- description: 'Action to perform (list, create, link, status)',
15
- options: ['list', 'create', 'link', 'status'],
14
+ description: 'Action to perform (list, create, merge, checks, link, status)',
15
+ options: ['list', 'create', 'merge', 'checks', 'link', 'status'],
16
16
  }),
17
17
  };
18
18
  async execute() {
@@ -45,6 +45,8 @@ export default class PR extends PMOCommand {
45
45
  choices: () => [
46
46
  { name: 'List all open PRs', value: 'list' },
47
47
  { name: 'Create PR from current branch', value: 'create' },
48
+ { name: 'Merge a PR', value: 'merge' },
49
+ { name: 'View CI check status', value: 'checks' },
48
50
  { name: 'Link existing PR to ticket', value: 'link' },
49
51
  { name: 'View PR status for ticket', value: 'status' },
50
52
  { name: 'Cancel', value: 'cancel' },
@@ -66,6 +68,12 @@ export default class PR extends PMOCommand {
66
68
  case 'link':
67
69
  await this.config.runCommand('pr:link', []);
68
70
  break;
71
+ case 'merge':
72
+ await this.config.runCommand('pr:merge', []);
73
+ break;
74
+ case 'checks':
75
+ await this.config.runCommand('pr:checks', []);
76
+ break;
69
77
  case 'status':
70
78
  await this.config.runCommand('pr:status', []);
71
79
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/pr/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/pr/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class PRMerge extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ prNumber: import("@oclif/core/interfaces").Arg<number | undefined, {
7
+ max?: number;
8
+ min?: number;
9
+ }>;
10
+ };
11
+ static flags: {
12
+ method: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'delete-branch': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ admin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ };
19
+ private hasPMO;
20
+ init(): Promise<void>;
21
+ execute(): Promise<void>;
22
+ }
@@ -0,0 +1,145 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags, } from '../../lib/pmo/index.js';
3
+ import { styles } from '../../lib/styles.js';
4
+ import { isGHInstalled, isGHAuthenticated, getPRByNumber, listOpenPRs, mergePR, } from '../../lib/pr/index.js';
5
+ import { shouldOutputJson, outputErrorAsJson, outputSuccessAsJson, createMetadata, } from '../../lib/prompt-json.js';
6
+ import { FlagResolver } from '../../lib/flags/index.js';
7
+ export default class PRMerge extends PMOCommand {
8
+ static description = 'Merge a GitHub pull request by number';
9
+ static examples = [
10
+ '<%= config.bin %> <%= command.id %> 123',
11
+ '<%= config.bin %> <%= command.id %> 123 --method squash',
12
+ '<%= config.bin %> <%= command.id %> 123 --no-delete-branch',
13
+ '<%= config.bin %> <%= command.id %> --json',
14
+ ];
15
+ static args = {
16
+ prNumber: Args.integer({
17
+ description: 'PR number to merge',
18
+ required: false,
19
+ }),
20
+ };
21
+ static flags = {
22
+ ...pmoBaseFlags,
23
+ method: Flags.string({
24
+ description: 'Merge method',
25
+ options: ['merge', 'squash', 'rebase'],
26
+ default: 'merge',
27
+ }),
28
+ 'delete-branch': Flags.boolean({
29
+ description: 'Delete branch after merging',
30
+ default: true,
31
+ allowNo: true,
32
+ }),
33
+ admin: Flags.boolean({
34
+ description: 'Use admin privileges to bypass branch protections',
35
+ default: false,
36
+ }),
37
+ };
38
+ // Flag to track if PMO is available
39
+ hasPMO = true;
40
+ async init() {
41
+ try {
42
+ await super.init();
43
+ }
44
+ catch {
45
+ this.hasPMO = false;
46
+ }
47
+ }
48
+ async execute() {
49
+ const { args, flags } = await this.parse(PRMerge);
50
+ const jsonMode = shouldOutputJson(flags);
51
+ const handleError = (code, message) => {
52
+ if (jsonMode) {
53
+ outputErrorAsJson(code, message, createMetadata('pr merge', flags));
54
+ this.exit(1);
55
+ }
56
+ this.error(message);
57
+ };
58
+ // Check gh CLI
59
+ if (!isGHInstalled()) {
60
+ return handleError('GH_NOT_INSTALLED', 'GitHub CLI (gh) is not installed. Install it from https://cli.github.com/');
61
+ }
62
+ if (!isGHAuthenticated()) {
63
+ return handleError('GH_NOT_AUTHENTICATED', 'GitHub CLI is not authenticated. Run "gh auth login" first.');
64
+ }
65
+ let prNumber = args.prNumber;
66
+ // If no PR number provided, prompt for selection
67
+ if (!prNumber) {
68
+ const openPRs = listOpenPRs();
69
+ if (openPRs.length === 0) {
70
+ return handleError('NO_OPEN_PRS', 'No open pull requests found.');
71
+ }
72
+ const resolver = new FlagResolver({
73
+ commandName: 'pr merge',
74
+ baseCommand: 'prlt pr merge',
75
+ jsonMode,
76
+ flags: {},
77
+ });
78
+ resolver.addPrompt({
79
+ flagName: 'pr',
80
+ type: 'list',
81
+ message: 'Select PR to merge:',
82
+ choices: () => openPRs.map(pr => ({
83
+ name: `#${pr.number} - ${pr.title} (${pr.headBranch})`,
84
+ value: String(pr.number),
85
+ })),
86
+ });
87
+ const resolved = await resolver.resolve();
88
+ prNumber = parseInt(resolved.pr, 10);
89
+ }
90
+ // Verify PR exists and is open
91
+ const prInfo = getPRByNumber(prNumber);
92
+ if (!prInfo) {
93
+ return handleError('PR_NOT_FOUND', `PR #${prNumber} not found.`);
94
+ }
95
+ if (prInfo.state !== 'OPEN') {
96
+ return handleError('PR_NOT_OPEN', `PR #${prNumber} is ${prInfo.state.toLowerCase()}, not open.`);
97
+ }
98
+ // Merge the PR
99
+ const method = flags.method;
100
+ const result = mergePR(prNumber, {
101
+ method,
102
+ deleteBranch: flags['delete-branch'],
103
+ admin: flags.admin,
104
+ });
105
+ if (!result.success) {
106
+ return handleError('MERGE_FAILED', `Failed to merge PR #${prNumber}: ${result.error}`);
107
+ }
108
+ // Update ticket metadata if PR was linked
109
+ if (this.hasPMO) {
110
+ try {
111
+ const allTickets = await this.storage.listTickets(flags.project);
112
+ const linkedTicket = allTickets.find(t => t.metadata?.pr_number === String(prNumber));
113
+ if (linkedTicket) {
114
+ await this.storage.updateTicket(linkedTicket.id, {
115
+ metadata: {
116
+ ...linkedTicket.metadata,
117
+ pr_state: 'MERGED',
118
+ },
119
+ });
120
+ }
121
+ }
122
+ catch {
123
+ // Non-critical - don't fail the merge if PMO update fails
124
+ }
125
+ }
126
+ if (jsonMode) {
127
+ outputSuccessAsJson({
128
+ merged: true,
129
+ prNumber,
130
+ title: prInfo.title,
131
+ method,
132
+ branchDeleted: flags['delete-branch'],
133
+ }, createMetadata('pr merge', flags));
134
+ return;
135
+ }
136
+ this.log('');
137
+ this.log(styles.success(`PR #${prNumber} merged successfully!`));
138
+ this.log(styles.muted(` Title: ${prInfo.title}`));
139
+ this.log(styles.muted(` Method: ${method}`));
140
+ if (flags['delete-branch']) {
141
+ this.log(styles.muted(` Branch ${prInfo.headBranch} deleted`));
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/commands/pr/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class VersionBump extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ }