@proletariat/cli 0.3.65 → 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.
@@ -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
+ }