@proletariat/cli 0.3.66 → 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.
- package/dist/commands/pr/merge.js +29 -2
- package/dist/commands/pr/merge.js.map +1 -1
- package/dist/commands/work/hooks/add.d.ts +16 -0
- package/dist/commands/work/hooks/add.js +169 -0
- package/dist/commands/work/hooks/add.js.map +1 -0
- package/dist/commands/work/hooks/index.d.ts +11 -0
- package/dist/commands/work/hooks/index.js +44 -0
- package/dist/commands/work/hooks/index.js.map +1 -0
- package/dist/commands/work/hooks/list.d.ts +12 -0
- package/dist/commands/work/hooks/list.js +81 -0
- package/dist/commands/work/hooks/list.js.map +1 -0
- package/dist/commands/work/hooks/remove.d.ts +14 -0
- package/dist/commands/work/hooks/remove.js +94 -0
- package/dist/commands/work/hooks/remove.js.map +1 -0
- package/dist/commands/work/hooks/toggle.d.ts +16 -0
- package/dist/commands/work/hooks/toggle.js +79 -0
- package/dist/commands/work/hooks/toggle.js.map +1 -0
- package/dist/commands/work/index.js +4 -0
- package/dist/commands/work/index.js.map +1 -1
- package/dist/lib/database/migrations/0002_work_hooks.d.ts +8 -0
- package/dist/lib/database/migrations/0002_work_hooks.js +16 -0
- package/dist/lib/database/migrations/0002_work_hooks.js.map +1 -0
- package/dist/lib/database/migrations/index.js +2 -0
- package/dist/lib/database/migrations/index.js.map +1 -1
- package/dist/lib/events/events.d.ts +2 -1
- package/dist/lib/external-issues/outbound-sync.d.ts +14 -0
- package/dist/lib/external-issues/outbound-sync.js +94 -0
- package/dist/lib/external-issues/outbound-sync.js.map +1 -1
- package/dist/lib/linear/sync.d.ts +5 -0
- package/dist/lib/linear/sync.js +25 -0
- package/dist/lib/linear/sync.js.map +1 -1
- package/dist/lib/pmo/schema.d.ts +2 -0
- package/dist/lib/pmo/schema.js +17 -0
- package/dist/lib/pmo/schema.js.map +1 -1
- package/dist/lib/pmo/sync-manager.js +3 -0
- package/dist/lib/pmo/sync-manager.js.map +1 -1
- package/dist/lib/work-lifecycle/events.d.ts +11 -0
- package/dist/lib/work-lifecycle/hooks/executor.d.ts +15 -0
- package/dist/lib/work-lifecycle/hooks/executor.js +102 -0
- package/dist/lib/work-lifecycle/hooks/executor.js.map +1 -0
- package/dist/lib/work-lifecycle/hooks/index.d.ts +12 -0
- package/dist/lib/work-lifecycle/hooks/index.js +12 -0
- package/dist/lib/work-lifecycle/hooks/index.js.map +1 -0
- package/dist/lib/work-lifecycle/hooks/manager.d.ts +43 -0
- package/dist/lib/work-lifecycle/hooks/manager.js +93 -0
- package/dist/lib/work-lifecycle/hooks/manager.js.map +1 -0
- package/dist/lib/work-lifecycle/hooks/storage.d.ts +58 -0
- package/dist/lib/work-lifecycle/hooks/storage.js +117 -0
- package/dist/lib/work-lifecycle/hooks/storage.js.map +1 -0
- package/dist/lib/work-lifecycle/hooks/types.d.ts +68 -0
- package/dist/lib/work-lifecycle/hooks/types.js +17 -0
- package/dist/lib/work-lifecycle/hooks/types.js.map +1 -0
- package/dist/lib/work-lifecycle/index.d.ts +1 -0
- package/dist/lib/work-lifecycle/index.js +1 -0
- package/dist/lib/work-lifecycle/index.js.map +1 -1
- package/oclif.manifest.json +4400 -4072
- package/package.json +1 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Args, Flags } from '@oclif/core';
|
|
2
2
|
import { PMOCommand, pmoBaseFlags, } from '../../lib/pmo/index.js';
|
|
3
3
|
import { styles } from '../../lib/styles.js';
|
|
4
|
-
import { isGHInstalled, isGHAuthenticated, getPRByNumber, listOpenPRs, mergePR, } from '../../lib/pr/index.js';
|
|
4
|
+
import { isGHInstalled, isGHAuthenticated, getPRByNumber, listOpenPRs, mergePR, getGitHubRepo, } from '../../lib/pr/index.js';
|
|
5
5
|
import { shouldOutputJson, outputErrorAsJson, outputSuccessAsJson, createMetadata, } from '../../lib/prompt-json.js';
|
|
6
6
|
import { FlagResolver } from '../../lib/flags/index.js';
|
|
7
|
+
import { getEventBus } from '../../lib/events/event-bus.js';
|
|
7
8
|
export default class PRMerge extends PMOCommand {
|
|
8
9
|
static description = 'Merge a GitHub pull request by number';
|
|
9
10
|
static examples = [
|
|
@@ -105,12 +106,14 @@ export default class PRMerge extends PMOCommand {
|
|
|
105
106
|
if (!result.success) {
|
|
106
107
|
return handleError('MERGE_FAILED', `Failed to merge PR #${prNumber}: ${result.error}`);
|
|
107
108
|
}
|
|
108
|
-
// Update ticket metadata if PR was linked
|
|
109
|
+
// Update ticket metadata if PR was linked and emit merge event for outbound sync
|
|
110
|
+
let linkedTicketId;
|
|
109
111
|
if (this.hasPMO) {
|
|
110
112
|
try {
|
|
111
113
|
const allTickets = await this.storage.listTickets(flags.project);
|
|
112
114
|
const linkedTicket = allTickets.find(t => t.metadata?.pr_number === String(prNumber));
|
|
113
115
|
if (linkedTicket) {
|
|
116
|
+
linkedTicketId = linkedTicket.id;
|
|
114
117
|
await this.storage.updateTicket(linkedTicket.id, {
|
|
115
118
|
metadata: {
|
|
116
119
|
...linkedTicket.metadata,
|
|
@@ -123,6 +126,25 @@ export default class PRMerge extends PMOCommand {
|
|
|
123
126
|
// Non-critical - don't fail the merge if PMO update fails
|
|
124
127
|
}
|
|
125
128
|
}
|
|
129
|
+
// Emit work:pr_merged event for outbound sync (e.g., Linear auto-transition)
|
|
130
|
+
if (linkedTicketId) {
|
|
131
|
+
try {
|
|
132
|
+
const repo = getGitHubRepo();
|
|
133
|
+
const prUrl = repo ? `https://github.com/${repo}/pull/${prNumber}` : null;
|
|
134
|
+
getEventBus().emit('work:pr_merged', {
|
|
135
|
+
workItemId: linkedTicketId,
|
|
136
|
+
source: 'github',
|
|
137
|
+
prNumber,
|
|
138
|
+
prTitle: prInfo.title,
|
|
139
|
+
prUrl,
|
|
140
|
+
mergeMethod: method,
|
|
141
|
+
timestamp: new Date(),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Non-critical - don't fail the merge if event emission fails
|
|
146
|
+
}
|
|
147
|
+
}
|
|
126
148
|
if (jsonMode) {
|
|
127
149
|
outputSuccessAsJson({
|
|
128
150
|
merged: true,
|
|
@@ -130,6 +152,8 @@ export default class PRMerge extends PMOCommand {
|
|
|
130
152
|
title: prInfo.title,
|
|
131
153
|
method,
|
|
132
154
|
branchDeleted: flags['delete-branch'],
|
|
155
|
+
linkedTicket: linkedTicketId ?? null,
|
|
156
|
+
linearSyncEmitted: !!linkedTicketId,
|
|
133
157
|
}, createMetadata('pr merge', flags));
|
|
134
158
|
return;
|
|
135
159
|
}
|
|
@@ -140,6 +164,9 @@ export default class PRMerge extends PMOCommand {
|
|
|
140
164
|
if (flags['delete-branch']) {
|
|
141
165
|
this.log(styles.muted(` Branch ${prInfo.headBranch} deleted`));
|
|
142
166
|
}
|
|
167
|
+
if (linkedTicketId) {
|
|
168
|
+
this.log(styles.muted(` Linear sync triggered for ${linkedTicketId}`));
|
|
169
|
+
}
|
|
143
170
|
}
|
|
144
171
|
}
|
|
145
172
|
//# sourceMappingURL=merge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/commands/pr/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,OAAO,
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/commands/pr/merge.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":"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"}
|
|
@@ -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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,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,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IACrD,MAAM,CAAC,WAAW,GAAG,8BAA8B,CAAA;IAEnD,MAAM,CAAC,QAAQ,GAAG;QAChB,kDAAkD;QAClD,iDAAiD;KAClD,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,YAAY;KAChB,CAAA;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACzD,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,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAA;YAChI,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;YAE3C,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;YAExB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAA;gBAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,IAAI,QAAQ,EAAE,CAAC;wBACb,iBAAiB,CAAC,UAAU,EAAE,sBAAsB,EAAE,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAA;oBACnG,CAAC;oBACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;oBAC7C,OAAM;gBACR,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;oBACzC,OAAO,EAAE,wBAAwB;oBACjC,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,UAAU,GAAG;oBAC1D,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;oBACvB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,IAAI,SAAS;oBAC5D,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI;oBACvE,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAM;gBACR,CAAC;gBACD,QAAQ,GAAG,QAAQ,CAAA;YACrB,CAAC;YAED,gBAAgB;YAChB,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,QAAQ,EAAE,CAAC;oBACb,iBAAiB,CAAC,WAAW,EAAE,SAAS,QAAQ,cAAc,EAAE,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAA;gBAC7G,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,SAAS,QAAQ,cAAc,CAAC,CAAA;YAC7C,CAAC;YAED,YAAY;YACZ,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAE3B,IAAI,QAAQ,EAAE,CAAC;gBACb,mBAAmB,CACjB;oBACE,OAAO,EAAE;wBACP,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB;oBACD,OAAO,EAAE,SAAS,IAAI,CAAC,IAAI,YAAY;iBACxC,EACD,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAC3C,CAAA;YACH,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAA;YACxD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YACjD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAC9E,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAA;QACZ,CAAC;IACH,CAAC"}
|
|
@@ -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
|
+
}
|