@proletariat/cli 0.3.65 → 0.3.67

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 (79) 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 +172 -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/hooks/add.d.ts +16 -0
  16. package/dist/commands/work/hooks/add.js +169 -0
  17. package/dist/commands/work/hooks/add.js.map +1 -0
  18. package/dist/commands/work/hooks/index.d.ts +11 -0
  19. package/dist/commands/work/hooks/index.js +44 -0
  20. package/dist/commands/work/hooks/index.js.map +1 -0
  21. package/dist/commands/work/hooks/list.d.ts +12 -0
  22. package/dist/commands/work/hooks/list.js +81 -0
  23. package/dist/commands/work/hooks/list.js.map +1 -0
  24. package/dist/commands/work/hooks/remove.d.ts +14 -0
  25. package/dist/commands/work/hooks/remove.js +94 -0
  26. package/dist/commands/work/hooks/remove.js.map +1 -0
  27. package/dist/commands/work/hooks/toggle.d.ts +16 -0
  28. package/dist/commands/work/hooks/toggle.js +79 -0
  29. package/dist/commands/work/hooks/toggle.js.map +1 -0
  30. package/dist/commands/work/index.js +4 -0
  31. package/dist/commands/work/index.js.map +1 -1
  32. package/dist/commands/work/start.js +25 -0
  33. package/dist/commands/work/start.js.map +1 -1
  34. package/dist/lib/database/migrations/0002_work_hooks.d.ts +8 -0
  35. package/dist/lib/database/migrations/0002_work_hooks.js +16 -0
  36. package/dist/lib/database/migrations/0002_work_hooks.js.map +1 -0
  37. package/dist/lib/database/migrations/index.js +2 -0
  38. package/dist/lib/database/migrations/index.js.map +1 -1
  39. package/dist/lib/events/events.d.ts +2 -1
  40. package/dist/lib/execution/runners.js +14 -6
  41. package/dist/lib/execution/runners.js.map +1 -1
  42. package/dist/lib/external-issues/outbound-sync.d.ts +14 -0
  43. package/dist/lib/external-issues/outbound-sync.js +94 -0
  44. package/dist/lib/external-issues/outbound-sync.js.map +1 -1
  45. package/dist/lib/linear/sync.d.ts +5 -0
  46. package/dist/lib/linear/sync.js +25 -0
  47. package/dist/lib/linear/sync.js.map +1 -1
  48. package/dist/lib/pmo/schema.d.ts +2 -0
  49. package/dist/lib/pmo/schema.js +17 -0
  50. package/dist/lib/pmo/schema.js.map +1 -1
  51. package/dist/lib/pmo/sync-manager.js +3 -0
  52. package/dist/lib/pmo/sync-manager.js.map +1 -1
  53. package/dist/lib/pr/index.d.ts +28 -0
  54. package/dist/lib/pr/index.js +53 -1
  55. package/dist/lib/pr/index.js.map +1 -1
  56. package/dist/lib/registry/index.d.ts +52 -0
  57. package/dist/lib/registry/index.js +169 -0
  58. package/dist/lib/registry/index.js.map +1 -0
  59. package/dist/lib/work-lifecycle/events.d.ts +11 -0
  60. package/dist/lib/work-lifecycle/hooks/executor.d.ts +15 -0
  61. package/dist/lib/work-lifecycle/hooks/executor.js +102 -0
  62. package/dist/lib/work-lifecycle/hooks/executor.js.map +1 -0
  63. package/dist/lib/work-lifecycle/hooks/index.d.ts +12 -0
  64. package/dist/lib/work-lifecycle/hooks/index.js +12 -0
  65. package/dist/lib/work-lifecycle/hooks/index.js.map +1 -0
  66. package/dist/lib/work-lifecycle/hooks/manager.d.ts +43 -0
  67. package/dist/lib/work-lifecycle/hooks/manager.js +93 -0
  68. package/dist/lib/work-lifecycle/hooks/manager.js.map +1 -0
  69. package/dist/lib/work-lifecycle/hooks/storage.d.ts +58 -0
  70. package/dist/lib/work-lifecycle/hooks/storage.js +117 -0
  71. package/dist/lib/work-lifecycle/hooks/storage.js.map +1 -0
  72. package/dist/lib/work-lifecycle/hooks/types.d.ts +68 -0
  73. package/dist/lib/work-lifecycle/hooks/types.js +17 -0
  74. package/dist/lib/work-lifecycle/hooks/types.js.map +1 -0
  75. package/dist/lib/work-lifecycle/index.d.ts +1 -0
  76. package/dist/lib/work-lifecycle/index.js +1 -0
  77. package/dist/lib/work-lifecycle/index.js.map +1 -1
  78. package/oclif.manifest.json +6245 -5676
  79. package/package.json +1 -1
@@ -0,0 +1,125 @@
1
+ import { Command, Args } from '@oclif/core';
2
+ import { execSync } from 'node:child_process';
3
+ import { readFileSync, writeFileSync } from 'node:fs';
4
+ import { resolve } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { styles } from '../../lib/styles.js';
7
+ import { machineOutputFlags } from '../../lib/pmo/index.js';
8
+ import { shouldOutputJson, createMetadata, outputSuccessAsJson, outputErrorAsJson, } from '../../lib/prompt-json.js';
9
+ const __dirname = fileURLToPath(new URL('.', import.meta.url));
10
+ function bumpVersion(current, type) {
11
+ const parts = current.split('.').map(Number);
12
+ if (parts.length !== 3 || parts.some(isNaN)) {
13
+ throw new Error(`Invalid semver version: ${current}`);
14
+ }
15
+ const [major, minor, patch] = parts;
16
+ switch (type) {
17
+ case 'major':
18
+ return `${major + 1}.0.0`;
19
+ case 'minor':
20
+ return `${major}.${minor + 1}.0`;
21
+ case 'patch':
22
+ return `${major}.${minor}.${patch + 1}`;
23
+ }
24
+ }
25
+ export default class VersionBump extends Command {
26
+ static description = 'Bump the CLI version (major, minor, or patch), commit, push, and create a PR';
27
+ static examples = [
28
+ '<%= config.bin %> version bump patch',
29
+ '<%= config.bin %> version bump minor',
30
+ '<%= config.bin %> version bump major',
31
+ '<%= config.bin %> version bump patch --json',
32
+ ];
33
+ static args = {
34
+ type: Args.string({
35
+ description: 'Version bump type',
36
+ required: true,
37
+ options: ['major', 'minor', 'patch'],
38
+ }),
39
+ };
40
+ static flags = {
41
+ ...machineOutputFlags,
42
+ };
43
+ async run() {
44
+ const { args, flags } = await this.parse(VersionBump);
45
+ const jsonMode = shouldOutputJson(flags);
46
+ const bumpType = args.type;
47
+ // Read current version from package.json
48
+ const pkgPath = resolve(__dirname, '..', '..', '..', 'package.json');
49
+ let pkg;
50
+ try {
51
+ pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
52
+ }
53
+ catch {
54
+ const msg = `Failed to read package.json at ${pkgPath}`;
55
+ if (jsonMode) {
56
+ outputErrorAsJson('PACKAGE_READ_ERROR', msg, createMetadata('version bump', flags));
57
+ }
58
+ this.error(msg);
59
+ }
60
+ const oldVersion = pkg.version;
61
+ const newVersion = bumpVersion(oldVersion, bumpType);
62
+ const branchName = `chore/bump-version-to-${newVersion}`;
63
+ if (!jsonMode) {
64
+ this.log(`\n${styles.header('Version Bump')}`);
65
+ this.log('─'.repeat(50));
66
+ this.log(` ${styles.muted('Current:')} ${oldVersion}`);
67
+ this.log(` ${styles.muted('New:')} ${newVersion}`);
68
+ this.log(` ${styles.muted('Type:')} ${bumpType}`);
69
+ this.log('');
70
+ }
71
+ // Update package.json
72
+ pkg.version = newVersion;
73
+ writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
74
+ if (!jsonMode) {
75
+ this.log(`${styles.success('Updated')} package.json`);
76
+ }
77
+ // Git operations
78
+ try {
79
+ const gitOpts = { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] };
80
+ execSync(`git checkout -b ${branchName}`, gitOpts);
81
+ if (!jsonMode) {
82
+ this.log(`${styles.success('Created')} branch ${styles.code(branchName)}`);
83
+ }
84
+ execSync(`git add ${pkgPath}`, gitOpts);
85
+ execSync(`git commit -m "chore: bump version to ${newVersion}"`, gitOpts);
86
+ if (!jsonMode) {
87
+ this.log(`${styles.success('Committed')} version bump`);
88
+ }
89
+ execSync(`git push -u origin ${branchName}`, gitOpts);
90
+ if (!jsonMode) {
91
+ this.log(`${styles.success('Pushed')} to origin`);
92
+ }
93
+ // Create PR
94
+ const prTitle = `chore: bump version to ${newVersion}`;
95
+ const prBody = [
96
+ '## Summary',
97
+ `- Bump CLI version from ${oldVersion} to ${newVersion} (${bumpType})`,
98
+ '',
99
+ 'Automated version bump via `prlt version bump`.',
100
+ ].join('\n');
101
+ const prUrl = execSync(`gh pr create --title "${prTitle}" --body ${JSON.stringify(prBody)} --base main`, gitOpts).trim();
102
+ if (jsonMode) {
103
+ outputSuccessAsJson({
104
+ oldVersion,
105
+ newVersion,
106
+ bumpType,
107
+ branch: branchName,
108
+ prUrl,
109
+ }, createMetadata('version bump', flags));
110
+ }
111
+ this.log(`\n${styles.success('PR created:')} ${prUrl}\n`);
112
+ }
113
+ catch (error) {
114
+ // Revert package.json on failure
115
+ pkg.version = oldVersion;
116
+ writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
117
+ const msg = error instanceof Error ? error.message : String(error);
118
+ if (jsonMode) {
119
+ outputErrorAsJson('GIT_ERROR', msg, createMetadata('version bump', flags));
120
+ }
121
+ this.error(`Git operation failed: ${msg}`);
122
+ }
123
+ }
124
+ }
125
+ //# sourceMappingURL=bump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bump.js","sourceRoot":"","sources":["../../../src/commands/version/bump.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class WorkHooksAdd extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ event: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'action-type': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'action-value': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ execute(): Promise<void>;
16
+ }
@@ -0,0 +1,169 @@
1
+ import { Flags } from '@oclif/core';
2
+ import * as path from 'node:path';
3
+ import Database from 'better-sqlite3';
4
+ import inquirer from 'inquirer';
5
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
6
+ import { styles } from '../../../lib/styles.js';
7
+ import { getWorkspaceInfo } from '../../../lib/agents/commands.js';
8
+ import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, outputPromptAsJson, buildPromptConfig, createMetadata, } from '../../../lib/prompt-json.js';
9
+ import { withSignalSafePrompt } from '../../../lib/signal-handler.js';
10
+ import { WorkHookStorage, HOOKABLE_EVENTS } from '../../../lib/work-lifecycle/hooks/index.js';
11
+ export default class WorkHooksAdd extends PMOCommand {
12
+ static description = 'Add a work lifecycle hook';
13
+ static examples = [
14
+ '<%= config.bin %> <%= command.id %> --name notify-start --event work:started --action-type log --action-value "Work started on {{workItemId}}"',
15
+ '<%= config.bin %> <%= command.id %> --name deploy-hook --event work:completed --action-type shell --action-value "./scripts/deploy.sh"',
16
+ '<%= config.bin %> <%= command.id %> --name slack-notify --event work:pr_created --action-type webhook --action-value "https://hooks.slack.com/..."',
17
+ ];
18
+ static flags = {
19
+ ...pmoBaseFlags,
20
+ name: Flags.string({
21
+ description: 'Hook name (unique identifier)',
22
+ }),
23
+ event: Flags.string({
24
+ description: 'Event to trigger on',
25
+ options: HOOKABLE_EVENTS,
26
+ }),
27
+ 'action-type': Flags.string({
28
+ description: 'Action type (shell, webhook, or log)',
29
+ options: ['shell', 'webhook', 'log'],
30
+ }),
31
+ 'action-value': Flags.string({
32
+ description: 'Action payload (command, URL, or message template)',
33
+ }),
34
+ description: Flags.string({
35
+ description: 'Optional description',
36
+ }),
37
+ };
38
+ async execute() {
39
+ const { flags } = await this.parse(WorkHooksAdd);
40
+ const jsonMode = shouldOutputJson(flags);
41
+ let workspaceInfo;
42
+ try {
43
+ workspaceInfo = getWorkspaceInfo();
44
+ }
45
+ catch {
46
+ if (jsonMode) {
47
+ outputErrorAsJson('NOT_IN_WORKSPACE', 'Not in a workspace. Run "prlt new" first.', createMetadata('work hooks add', flags));
48
+ }
49
+ this.error('Not in a workspace. Run "prlt new" first.');
50
+ }
51
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
52
+ const db = new Database(dbPath);
53
+ try {
54
+ const hookStorage = new WorkHookStorage(db);
55
+ // Collect name
56
+ let name = flags.name;
57
+ if (!name) {
58
+ const message = 'Hook name:';
59
+ const choices = undefined;
60
+ if (jsonMode) {
61
+ outputPromptAsJson(buildPromptConfig('input', 'name', message, choices), createMetadata('work hooks add', flags));
62
+ }
63
+ const result = await withSignalSafePrompt(() => inquirer.prompt([{
64
+ type: 'input',
65
+ name: 'name',
66
+ message,
67
+ validate: (input) => input.trim().length > 0 || 'Name is required',
68
+ }]));
69
+ name = result.name;
70
+ }
71
+ // Check for duplicate name
72
+ const existing = hookStorage.getByName(name);
73
+ if (existing) {
74
+ if (jsonMode) {
75
+ outputErrorAsJson('DUPLICATE_NAME', `Hook "${name}" already exists.`, createMetadata('work hooks add', flags));
76
+ }
77
+ this.error(`Hook "${name}" already exists.`);
78
+ }
79
+ // Collect event
80
+ let event = flags.event;
81
+ if (!event) {
82
+ const eventChoices = HOOKABLE_EVENTS.map(e => ({ name: e, value: e }));
83
+ const message = 'Event to trigger on:';
84
+ if (jsonMode) {
85
+ outputPromptAsJson(buildPromptConfig('list', 'event', message, eventChoices), createMetadata('work hooks add', flags));
86
+ }
87
+ const result = await withSignalSafePrompt(() => inquirer.prompt([{
88
+ type: 'list',
89
+ name: 'event',
90
+ message,
91
+ choices: eventChoices,
92
+ }]));
93
+ event = result.event;
94
+ }
95
+ // Collect action type
96
+ let actionType = flags['action-type'];
97
+ if (!actionType) {
98
+ const actionChoices = [
99
+ { name: 'shell — Run a shell command', value: 'shell' },
100
+ { name: 'webhook — POST event data to a URL', value: 'webhook' },
101
+ { name: 'log — Print a message to stdout', value: 'log' },
102
+ ];
103
+ const message = 'Action type:';
104
+ if (jsonMode) {
105
+ outputPromptAsJson(buildPromptConfig('list', 'actionType', message, actionChoices), createMetadata('work hooks add', flags));
106
+ }
107
+ const result = await withSignalSafePrompt(() => inquirer.prompt([{
108
+ type: 'list',
109
+ name: 'actionType',
110
+ message,
111
+ choices: actionChoices,
112
+ }]));
113
+ actionType = result.actionType;
114
+ }
115
+ // Collect action value
116
+ let actionValue = flags['action-value'];
117
+ if (!actionValue) {
118
+ const prompts = {
119
+ shell: 'Shell command to run:',
120
+ webhook: 'Webhook URL:',
121
+ log: 'Log message template (use {{workItemId}}, {{event}}, etc.):',
122
+ };
123
+ const message = prompts[actionType];
124
+ if (jsonMode) {
125
+ outputPromptAsJson(buildPromptConfig('input', 'actionValue', message), createMetadata('work hooks add', flags));
126
+ }
127
+ const result = await withSignalSafePrompt(() => inquirer.prompt([{
128
+ type: 'input',
129
+ name: 'actionValue',
130
+ message,
131
+ validate: (input) => input.trim().length > 0 || 'Action value is required',
132
+ }]));
133
+ actionValue = result.actionValue;
134
+ }
135
+ // Collect optional description
136
+ const description = flags.description;
137
+ // Create the hook
138
+ const hook = hookStorage.create({
139
+ name: name,
140
+ event: event,
141
+ actionType: actionType,
142
+ actionValue: actionValue,
143
+ description,
144
+ });
145
+ if (jsonMode) {
146
+ outputSuccessAsJson({
147
+ hook: {
148
+ id: hook.id,
149
+ name: hook.name,
150
+ event: hook.event,
151
+ actionType: hook.actionType,
152
+ actionValue: hook.actionValue,
153
+ enabled: hook.enabled,
154
+ description: hook.description,
155
+ },
156
+ message: `Hook "${hook.name}" created successfully.`,
157
+ }, createMetadata('work hooks add', flags));
158
+ }
159
+ this.log(styles.success(`Hook "${hook.name}" created.`));
160
+ this.log(styles.muted(` Event: ${hook.event}`));
161
+ this.log(styles.muted(` Action: ${hook.actionType} → ${hook.actionValue}`));
162
+ this.log(styles.muted(` ID: ${hook.id}`));
163
+ }
164
+ finally {
165
+ db.close();
166
+ }
167
+ }
168
+ }
169
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/work/hooks/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class WorkHooks extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ };
10
+ execute(): Promise<void>;
11
+ }
@@ -0,0 +1,44 @@
1
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
2
+ import { shouldOutputJson } from '../../../lib/prompt-json.js';
3
+ export default class WorkHooks extends PMOCommand {
4
+ static description = 'Interactive menu for work lifecycle hooks';
5
+ static examples = [
6
+ '<%= config.bin %> <%= command.id %>',
7
+ ];
8
+ static flags = {
9
+ ...pmoBaseFlags,
10
+ };
11
+ async execute() {
12
+ const { flags } = await this.parse(WorkHooks);
13
+ const jsonMode = shouldOutputJson(flags);
14
+ const menuChoices = [
15
+ { id: 'list', name: 'List configured hooks', command: 'prlt work hooks list --json' },
16
+ { id: 'add', name: 'Add a new hook', command: 'prlt work hooks add --json' },
17
+ { id: 'remove', name: 'Remove a hook', command: 'prlt work hooks remove --json' },
18
+ { id: 'cancel', name: 'Cancel', command: '' },
19
+ ];
20
+ const action = await this.selectFromList({
21
+ message: 'Work Lifecycle Hooks - What would you like to do?',
22
+ items: menuChoices,
23
+ getName: (c) => c.name,
24
+ getValue: (c) => c.id,
25
+ getCommand: (c) => c.command,
26
+ jsonMode: jsonMode ? { flags, commandName: 'work hooks' } : null,
27
+ });
28
+ if (action === 'cancel' || !action) {
29
+ return;
30
+ }
31
+ switch (action) {
32
+ case 'list':
33
+ await this.config.runCommand('work:hooks:list');
34
+ break;
35
+ case 'add':
36
+ await this.config.runCommand('work:hooks:add');
37
+ break;
38
+ case 'remove':
39
+ await this.config.runCommand('work:hooks:remove');
40
+ break;
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/work/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,UAAU;IAC/C,MAAM,CAAC,WAAW,GAAG,2CAA2C,CAAA;IAEhE,MAAM,CAAC,QAAQ,GAAG;QAChB,qCAAqC;KACtC,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,YAAY;KAChB,CAAA;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAExC,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,6BAA6B,EAAE;YACrF,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,4BAA4B,EAAE;YAC5E,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,+BAA+B,EAAE;YACjF,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;SAC9C,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;YACvC,OAAO,EAAE,mDAAmD;YAC5D,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;YACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;YACrB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;YAC5B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI;SACjE,CAAC,CAAA;QAEF,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,OAAM;QACR,CAAC;QAED,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;gBAC/C,MAAK;YACP,KAAK,KAAK;gBACR,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;gBAC9C,MAAK;YACP,KAAK,QAAQ;gBACX,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAA;gBACjD,MAAK;QACT,CAAC;IACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class WorkHooksList extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ event: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ execute(): Promise<void>;
12
+ }
@@ -0,0 +1,81 @@
1
+ import { Flags } from '@oclif/core';
2
+ import * as path from 'node:path';
3
+ import Database from 'better-sqlite3';
4
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
5
+ import { styles } from '../../../lib/styles.js';
6
+ import { getWorkspaceInfo } from '../../../lib/agents/commands.js';
7
+ import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../../lib/prompt-json.js';
8
+ import { WorkHookStorage } from '../../../lib/work-lifecycle/hooks/index.js';
9
+ import { HOOKABLE_EVENTS } from '../../../lib/work-lifecycle/hooks/index.js';
10
+ export default class WorkHooksList extends PMOCommand {
11
+ static description = 'List configured work lifecycle hooks';
12
+ static examples = [
13
+ '<%= config.bin %> <%= command.id %>',
14
+ '<%= config.bin %> <%= command.id %> --event work:started',
15
+ ];
16
+ static flags = {
17
+ ...pmoBaseFlags,
18
+ event: Flags.string({
19
+ description: 'Filter by event name',
20
+ options: HOOKABLE_EVENTS,
21
+ }),
22
+ };
23
+ async execute() {
24
+ const { flags } = await this.parse(WorkHooksList);
25
+ const jsonMode = shouldOutputJson(flags);
26
+ let workspaceInfo;
27
+ try {
28
+ workspaceInfo = getWorkspaceInfo();
29
+ }
30
+ catch {
31
+ if (jsonMode) {
32
+ outputErrorAsJson('NOT_IN_WORKSPACE', 'Not in a workspace. Run "prlt new" first.', createMetadata('work hooks list', flags));
33
+ }
34
+ this.error('Not in a workspace. Run "prlt new" first.');
35
+ }
36
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
37
+ const db = new Database(dbPath);
38
+ try {
39
+ const hookStorage = new WorkHookStorage(db);
40
+ const eventFilter = flags.event;
41
+ const hooks = hookStorage.list({ event: eventFilter });
42
+ if (jsonMode) {
43
+ outputSuccessAsJson({
44
+ hooks: hooks.map(h => ({
45
+ id: h.id,
46
+ name: h.name,
47
+ event: h.event,
48
+ actionType: h.actionType,
49
+ actionValue: h.actionValue,
50
+ enabled: h.enabled,
51
+ description: h.description,
52
+ createdAt: h.createdAt,
53
+ })),
54
+ count: hooks.length,
55
+ }, createMetadata('work hooks list', flags));
56
+ }
57
+ if (hooks.length === 0) {
58
+ this.log(styles.info('No hooks configured.'));
59
+ this.log(styles.muted(' Add one with: prlt work hooks add'));
60
+ return;
61
+ }
62
+ this.log(styles.title('Work Lifecycle Hooks'));
63
+ this.log('');
64
+ for (const hook of hooks) {
65
+ const status = hook.enabled ? styles.success('enabled') : styles.muted('disabled');
66
+ this.log(` ${styles.code(hook.name)} ${styles.muted('—')} ${status}`);
67
+ this.log(` Event: ${styles.emphasis(hook.event)}`);
68
+ this.log(` Action: ${hook.actionType} ${styles.muted('→')} ${hook.actionValue}`);
69
+ if (hook.description) {
70
+ this.log(` Desc: ${styles.muted(hook.description)}`);
71
+ }
72
+ this.log('');
73
+ }
74
+ this.log(styles.muted(` ${hooks.length} hook${hooks.length === 1 ? '' : 's'} configured`));
75
+ }
76
+ finally {
77
+ db.close();
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/work/hooks/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAE5E,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;IACnD,MAAM,CAAC,WAAW,GAAG,sCAAsC,CAAA;IAE3D,MAAM,CAAC,QAAQ,GAAG;QAChB,qCAAqC;QACrC,0DAA0D;KAC3D,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,YAAY;QACf,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,eAAe;SACzB,CAAC;KACH,CAAA;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAExC,IAAI,aAAa,CAAA;QACjB,IAAI,CAAC;YACH,aAAa,GAAG,gBAAgB,EAAE,CAAA;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,CAAC,kBAAkB,EAAE,2CAA2C,EAAE,cAAc,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAA;YAC9H,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;QAC5E,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;QAE/B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAA;YAC3C,MAAM,WAAW,GAAI,KAA4B,CAAC,KAAkC,CAAA;YACpF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;YAEtD,IAAI,QAAQ,EAAE,CAAC;gBACb,mBAAmB,CACjB;oBACE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;qBACvB,CAAC,CAAC;oBACH,KAAK,EAAE,KAAK,CAAC,MAAM;iBACpB,EACD,cAAc,CAAC,iBAAiB,EAAE,KAAK,CAAC,CACzC,CAAA;YACH,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAA;gBAC7D,OAAM;YACR,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAA;YAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEZ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;gBAClF,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,CAAA;gBACtE,IAAI,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACtD,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;gBACnF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;gBAC3D,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACd,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;QAC7F,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAA;QACZ,CAAC;IACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class WorkHooksRemove extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ execute(): Promise<void>;
14
+ }
@@ -0,0 +1,94 @@
1
+ import { Args } from '@oclif/core';
2
+ import * as path from 'node:path';
3
+ import Database from 'better-sqlite3';
4
+ import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
5
+ import { styles } from '../../../lib/styles.js';
6
+ import { getWorkspaceInfo } from '../../../lib/agents/commands.js';
7
+ import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../../lib/prompt-json.js';
8
+ import { WorkHookStorage } from '../../../lib/work-lifecycle/hooks/index.js';
9
+ export default class WorkHooksRemove extends PMOCommand {
10
+ static description = 'Remove a work lifecycle hook';
11
+ static examples = [
12
+ '<%= config.bin %> <%= command.id %> notify-start',
13
+ '<%= config.bin %> <%= command.id %> deploy-hook',
14
+ ];
15
+ static args = {
16
+ name: Args.string({
17
+ description: 'Hook name to remove - prompts with dropdown if not provided',
18
+ required: false,
19
+ }),
20
+ };
21
+ static flags = {
22
+ ...pmoBaseFlags,
23
+ };
24
+ async execute() {
25
+ const { args, flags } = await this.parse(WorkHooksRemove);
26
+ const jsonMode = shouldOutputJson(flags);
27
+ let workspaceInfo;
28
+ try {
29
+ workspaceInfo = getWorkspaceInfo();
30
+ }
31
+ catch {
32
+ if (jsonMode) {
33
+ outputErrorAsJson('NOT_IN_WORKSPACE', 'Not in a workspace. Run "prlt new" first.', createMetadata('work hooks remove', flags));
34
+ }
35
+ this.error('Not in a workspace. Run "prlt new" first.');
36
+ }
37
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
38
+ const db = new Database(dbPath);
39
+ try {
40
+ const hookStorage = new WorkHookStorage(db);
41
+ let hookName = args.name;
42
+ if (!hookName) {
43
+ const hooks = hookStorage.list();
44
+ if (hooks.length === 0) {
45
+ if (jsonMode) {
46
+ outputErrorAsJson('NO_HOOKS', 'No hooks configured.', createMetadata('work hooks remove', flags));
47
+ }
48
+ this.log(styles.info('No hooks configured.'));
49
+ return;
50
+ }
51
+ const selected = await this.selectFromList({
52
+ message: 'Select hook to remove:',
53
+ items: hooks,
54
+ getName: (h) => `${h.name} (${h.event} → ${h.actionType})`,
55
+ getValue: (h) => h.name,
56
+ getCommand: (h) => `prlt work hooks remove ${h.name} --json`,
57
+ jsonMode: jsonMode ? { flags, commandName: 'work hooks remove' } : null,
58
+ allowCancel: true,
59
+ });
60
+ if (!selected) {
61
+ return;
62
+ }
63
+ hookName = selected;
64
+ }
65
+ // Find the hook
66
+ const hook = hookStorage.getByName(hookName);
67
+ if (!hook) {
68
+ if (jsonMode) {
69
+ outputErrorAsJson('NOT_FOUND', `Hook "${hookName}" not found.`, createMetadata('work hooks remove', flags));
70
+ }
71
+ this.error(`Hook "${hookName}" not found.`);
72
+ }
73
+ // Delete it
74
+ hookStorage.delete(hook.id);
75
+ if (jsonMode) {
76
+ outputSuccessAsJson({
77
+ removed: {
78
+ id: hook.id,
79
+ name: hook.name,
80
+ event: hook.event,
81
+ },
82
+ message: `Hook "${hook.name}" removed.`,
83
+ }, createMetadata('work hooks remove', flags));
84
+ }
85
+ this.log(styles.success(`Hook "${hook.name}" removed.`));
86
+ this.log(styles.muted(` Event: ${hook.event}`));
87
+ this.log(styles.muted(` Action: ${hook.actionType} → ${hook.actionValue}`));
88
+ }
89
+ finally {
90
+ db.close();
91
+ }
92
+ }
93
+ }
94
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../../src/commands/work/hooks/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { PMOCommand } from '../../../lib/pmo/index.js';
2
+ export default class WorkHooksToggle extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ enable: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ disable: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ execute(): Promise<void>;
16
+ }