centy 0.7.2 → 0.7.3
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/close.d.ts +3 -2
- package/dist/commands/close.d.ts.map +1 -1
- package/dist/commands/close.js +45 -38
- package/dist/commands/close.js.map +1 -1
- package/dist/commands/{delete/issue.d.ts → delete.d.ts} +4 -3
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/{delete/issue.js → delete.js} +25 -17
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/{duplicate/issue.d.ts → duplicate.d.ts} +5 -3
- package/dist/commands/duplicate.d.ts.map +1 -0
- package/dist/commands/{duplicate/issue.js → duplicate.js} +38 -24
- package/dist/commands/duplicate.js.map +1 -0
- package/dist/commands/{list/issues.d.ts → list.d.ts} +7 -5
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +96 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/{move/issue.d.ts → move.d.ts} +5 -3
- package/dist/commands/move.d.ts.map +1 -0
- package/dist/commands/{move/issue.js → move.js} +34 -17
- package/dist/commands/move.js.map +1 -0
- package/dist/commands/{update/issue.d.ts → update.d.ts} +7 -8
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +101 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/daemon/daemon-duplicate-item.d.ts +6 -0
- package/dist/daemon/daemon-duplicate-item.d.ts.map +1 -0
- package/dist/daemon/daemon-duplicate-item.js +9 -0
- package/dist/daemon/daemon-duplicate-item.js.map +1 -0
- package/dist/daemon/daemon-list-items.d.ts +6 -0
- package/dist/daemon/daemon-list-items.d.ts.map +1 -0
- package/dist/daemon/daemon-list-items.js +9 -0
- package/dist/daemon/daemon-list-items.js.map +1 -0
- package/dist/daemon/daemon-move-item.d.ts +6 -0
- package/dist/daemon/daemon-move-item.d.ts.map +1 -0
- package/dist/daemon/daemon-move-item.js +9 -0
- package/dist/daemon/daemon-move-item.js.map +1 -0
- package/dist/daemon/daemon-update-item.d.ts +6 -0
- package/dist/daemon/daemon-update-item.d.ts.map +1 -0
- package/dist/daemon/daemon-update-item.js +9 -0
- package/dist/daemon/daemon-update-item.js.map +1 -0
- package/dist/daemon/generated/centy/v1/generic_item.d.ts +36 -0
- package/dist/daemon/generated/centy/v1/generic_item.d.ts.map +1 -1
- package/dist/daemon/grpc-client-items.d.ts +3 -1
- package/dist/daemon/grpc-client-items.d.ts.map +1 -1
- package/dist/lib/resolve-item-id/resolve-item-id.d.ts +7 -0
- package/dist/lib/resolve-item-id/resolve-item-id.d.ts.map +1 -0
- package/dist/lib/resolve-item-id/resolve-item-id.js +23 -0
- package/dist/lib/resolve-item-id/resolve-item-id.js.map +1 -0
- package/oclif.manifest.json +501 -778
- package/package.json +1 -1
- package/proto/centy/v1/centy.proto +6 -0
- package/proto/centy/v1/generic_item.proto +31 -0
- package/dist/commands/close/issue.d.ts +0 -16
- package/dist/commands/close/issue.d.ts.map +0 -1
- package/dist/commands/close/issue.js +0 -58
- package/dist/commands/close/issue.js.map +0 -1
- package/dist/commands/delete/doc.d.ts +0 -17
- package/dist/commands/delete/doc.d.ts.map +0 -1
- package/dist/commands/delete/doc.js +0 -75
- package/dist/commands/delete/doc.js.map +0 -1
- package/dist/commands/delete/issue.d.ts.map +0 -1
- package/dist/commands/delete/issue.js.map +0 -1
- package/dist/commands/duplicate/doc.d.ts +0 -19
- package/dist/commands/duplicate/doc.d.ts.map +0 -1
- package/dist/commands/duplicate/doc.js +0 -87
- package/dist/commands/duplicate/doc.js.map +0 -1
- package/dist/commands/duplicate/issue.d.ts.map +0 -1
- package/dist/commands/duplicate/issue.js.map +0 -1
- package/dist/commands/list/docs.d.ts +0 -15
- package/dist/commands/list/docs.d.ts.map +0 -1
- package/dist/commands/list/docs.js +0 -60
- package/dist/commands/list/docs.js.map +0 -1
- package/dist/commands/list/issues.d.ts.map +0 -1
- package/dist/commands/list/issues.js +0 -86
- package/dist/commands/list/issues.js.map +0 -1
- package/dist/commands/move/doc.d.ts +0 -18
- package/dist/commands/move/doc.d.ts.map +0 -1
- package/dist/commands/move/doc.js +0 -82
- package/dist/commands/move/doc.js.map +0 -1
- package/dist/commands/move/issue.d.ts.map +0 -1
- package/dist/commands/move/issue.js.map +0 -1
- package/dist/commands/update/doc.d.ts +0 -20
- package/dist/commands/update/doc.d.ts.map +0 -1
- package/dist/commands/update/doc.js +0 -73
- package/dist/commands/update/doc.js.map +0 -1
- package/dist/commands/update/issue.d.ts.map +0 -1
- package/dist/commands/update/issue.js +0 -107
- package/dist/commands/update/issue.js.map +0 -1
package/dist/commands/close.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
2
|
/**
|
|
3
|
-
* Close an
|
|
3
|
+
* Close an item by setting its status to closed
|
|
4
4
|
*/
|
|
5
5
|
export default class Close extends Command {
|
|
6
6
|
static args: {
|
|
7
|
-
|
|
7
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
9
|
};
|
|
9
10
|
static description: string;
|
|
10
11
|
static examples: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../src/commands/close.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../src/commands/close.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAYlD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IAExC,OAAgB,IAAI;;;MASnB;IAGD,OAAgB,WAAW,SAAkD;IAG7E,OAAgB,QAAQ,WAKvB;IAGD,OAAgB,KAAK;;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwDlC"}
|
package/dist/commands/close.js
CHANGED
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
// eslint-disable-next-line import/order
|
|
2
2
|
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
-
import {
|
|
3
|
+
import { daemonUpdateItem } from '../daemon/daemon-update-item.js';
|
|
4
4
|
import { projectFlag } from '../flags/project-flag.js';
|
|
5
|
-
import { CloseEntityError } from '../lib/close/close-entity-error.js';
|
|
6
5
|
import { ensureInitialized, NotInitializedError, } from '../utils/ensure-initialized.js';
|
|
7
6
|
import { resolveProjectPath } from '../utils/resolve-project-path.js';
|
|
7
|
+
import { toPlural } from '../utils/to-plural.js';
|
|
8
|
+
import { resolveItemId } from '../lib/resolve-item-id/resolve-item-id.js';
|
|
8
9
|
/**
|
|
9
|
-
* Close an
|
|
10
|
+
* Close an item by setting its status to closed
|
|
10
11
|
*/
|
|
11
12
|
// eslint-disable-next-line custom/no-default-class-export, class-export/class-export
|
|
12
13
|
export default class Close extends Command {
|
|
13
14
|
// eslint-disable-next-line no-restricted-syntax
|
|
14
15
|
static args = {
|
|
15
|
-
|
|
16
|
-
description: '
|
|
16
|
+
type: Args.string({
|
|
17
|
+
description: 'Item type (e.g., issue, epic, or custom type)',
|
|
18
|
+
required: true,
|
|
19
|
+
}),
|
|
20
|
+
id: Args.string({
|
|
21
|
+
description: 'Item ID (UUID or display number)',
|
|
17
22
|
required: true,
|
|
18
23
|
}),
|
|
19
24
|
};
|
|
20
25
|
// eslint-disable-next-line no-restricted-syntax
|
|
21
|
-
static description = 'Close an
|
|
26
|
+
static description = 'Close an item by setting its status to closed';
|
|
22
27
|
// eslint-disable-next-line no-restricted-syntax
|
|
23
28
|
static examples = [
|
|
24
|
-
'<%= config.bin %> close 1',
|
|
25
|
-
'<%= config.bin %> close
|
|
26
|
-
'<%= config.bin %> close
|
|
29
|
+
'<%= config.bin %> close issue 1',
|
|
30
|
+
'<%= config.bin %> close epic 1',
|
|
31
|
+
'<%= config.bin %> close issue abc123-uuid',
|
|
32
|
+
'<%= config.bin %> close epic 1 --project centy-daemon',
|
|
27
33
|
];
|
|
28
34
|
// eslint-disable-next-line no-restricted-syntax
|
|
29
35
|
static flags = {
|
|
@@ -35,11 +41,7 @@ export default class Close extends Command {
|
|
|
35
41
|
};
|
|
36
42
|
async run() {
|
|
37
43
|
const { args, flags } = await this.parse(Close);
|
|
38
|
-
const
|
|
39
|
-
if (!displayNumberMatch) {
|
|
40
|
-
this.error('Invalid identifier. Please provide a display number (e.g., 1 or #1)');
|
|
41
|
-
}
|
|
42
|
-
const displayNumber = Number.parseInt(displayNumberMatch[1], 10);
|
|
44
|
+
const itemType = toPlural(args.type);
|
|
43
45
|
const cwd = await resolveProjectPath(flags.project);
|
|
44
46
|
try {
|
|
45
47
|
await ensureInitialized(cwd);
|
|
@@ -50,31 +52,36 @@ export default class Close extends Command {
|
|
|
50
52
|
}
|
|
51
53
|
throw error instanceof Error ? error : new Error(String(error));
|
|
52
54
|
}
|
|
53
|
-
await
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
projectPath: cwd,
|
|
59
|
-
issueId,
|
|
60
|
-
status: 'closed',
|
|
61
|
-
title: '',
|
|
62
|
-
description: '',
|
|
63
|
-
priority: 0,
|
|
64
|
-
customFields: {},
|
|
65
|
-
});
|
|
66
|
-
if (!response.success) {
|
|
67
|
-
throw new CloseEntityError(response.error);
|
|
68
|
-
}
|
|
69
|
-
if (json) {
|
|
70
|
-
log(JSON.stringify({
|
|
71
|
-
type: 'issue',
|
|
72
|
-
displayNumber: response.issue.displayNumber,
|
|
55
|
+
const itemId = await resolveItemId(args.id, itemType, cwd, msg => this.error(msg));
|
|
56
|
+
const response = await daemonUpdateItem({
|
|
57
|
+
projectPath: cwd,
|
|
58
|
+
itemType,
|
|
59
|
+
itemId,
|
|
73
60
|
status: 'closed',
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
61
|
+
title: '',
|
|
62
|
+
body: '',
|
|
63
|
+
priority: 0,
|
|
64
|
+
customFields: {},
|
|
65
|
+
});
|
|
66
|
+
if (!response.success) {
|
|
67
|
+
this.error(response.error);
|
|
68
|
+
}
|
|
69
|
+
const item = response.item;
|
|
70
|
+
const meta = item.metadata;
|
|
71
|
+
const displayNum = meta !== undefined && meta.displayNumber > 0
|
|
72
|
+
? `#${meta.displayNumber}`
|
|
73
|
+
: itemId;
|
|
74
|
+
if (flags.json) {
|
|
75
|
+
this.log(JSON.stringify({
|
|
76
|
+
type: args.type,
|
|
77
|
+
id: item.id,
|
|
78
|
+
displayNumber: meta !== undefined ? meta.displayNumber : undefined,
|
|
79
|
+
status: 'closed',
|
|
80
|
+
}, null, 2));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.log(`Closed ${args.type} ${displayNum}`);
|
|
84
|
+
}
|
|
78
85
|
}
|
|
79
86
|
}
|
|
80
87
|
//# sourceMappingURL=close.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close.js","sourceRoot":"","sources":["../../src/commands/close.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"close.js","sourceRoot":"","sources":["../../src/commands/close.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
2
|
/**
|
|
3
|
-
* Delete an
|
|
3
|
+
* Delete an item by type and identifier
|
|
4
4
|
*/
|
|
5
|
-
export default class
|
|
5
|
+
export default class Delete extends Command {
|
|
6
6
|
static args: {
|
|
7
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
8
|
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
9
|
};
|
|
9
10
|
static description: string;
|
|
@@ -14,4 +15,4 @@ export default class DeleteIssue extends Command {
|
|
|
14
15
|
};
|
|
15
16
|
run(): Promise<void>;
|
|
16
17
|
}
|
|
17
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAYlD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IAEzC,OAAgB,IAAI;;;MASnB;IAGD,OAAgB,WAAW,SAA0C;IAGrE,OAAgB,QAAQ,WAKvB;IAGD,OAAgB,KAAK;;;MAOpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiDlC"}
|
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
// eslint-disable-next-line import/order
|
|
2
2
|
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
-
import { daemonDeleteItem } from '
|
|
4
|
-
import { projectFlag } from '
|
|
5
|
-
import { ensureInitialized, NotInitializedError, } from '
|
|
6
|
-
import { resolveProjectPath } from '
|
|
3
|
+
import { daemonDeleteItem } from '../daemon/daemon-delete-item.js';
|
|
4
|
+
import { projectFlag } from '../flags/project-flag.js';
|
|
5
|
+
import { ensureInitialized, NotInitializedError, } from '../utils/ensure-initialized.js';
|
|
6
|
+
import { resolveProjectPath } from '../utils/resolve-project-path.js';
|
|
7
|
+
import { toPlural } from '../utils/to-plural.js';
|
|
8
|
+
import { resolveItemId } from '../lib/resolve-item-id/resolve-item-id.js';
|
|
7
9
|
/**
|
|
8
|
-
* Delete an
|
|
10
|
+
* Delete an item by type and identifier
|
|
9
11
|
*/
|
|
10
12
|
// eslint-disable-next-line custom/no-default-class-export, class-export/class-export
|
|
11
|
-
export default class
|
|
13
|
+
export default class Delete extends Command {
|
|
12
14
|
// eslint-disable-next-line no-restricted-syntax
|
|
13
15
|
static args = {
|
|
16
|
+
type: Args.string({
|
|
17
|
+
description: 'Item type (e.g., issue, epic, or custom type)',
|
|
18
|
+
required: true,
|
|
19
|
+
}),
|
|
14
20
|
id: Args.string({
|
|
15
|
-
description: '
|
|
21
|
+
description: 'Item ID (UUID, display number, or slug)',
|
|
16
22
|
required: true,
|
|
17
23
|
}),
|
|
18
24
|
};
|
|
19
25
|
// eslint-disable-next-line no-restricted-syntax
|
|
20
|
-
static description = 'Delete an
|
|
26
|
+
static description = 'Delete an item by type and identifier';
|
|
21
27
|
// eslint-disable-next-line no-restricted-syntax
|
|
22
28
|
static examples = [
|
|
23
29
|
'<%= config.bin %> delete issue 1',
|
|
24
|
-
'<%= config.bin %> delete
|
|
25
|
-
'<%= config.bin %> delete
|
|
26
|
-
'<%= config.bin %> delete
|
|
30
|
+
'<%= config.bin %> delete epic 1 --force',
|
|
31
|
+
'<%= config.bin %> delete bug abc123-uuid',
|
|
32
|
+
'<%= config.bin %> delete epic 1 --project centy-daemon',
|
|
27
33
|
];
|
|
28
34
|
// eslint-disable-next-line no-restricted-syntax
|
|
29
35
|
static flags = {
|
|
@@ -35,7 +41,8 @@ export default class DeleteIssue extends Command {
|
|
|
35
41
|
project: projectFlag,
|
|
36
42
|
};
|
|
37
43
|
async run() {
|
|
38
|
-
const { args, flags } = await this.parse(
|
|
44
|
+
const { args, flags } = await this.parse(Delete);
|
|
45
|
+
const itemType = toPlural(args.type);
|
|
39
46
|
const cwd = await resolveProjectPath(flags.project);
|
|
40
47
|
try {
|
|
41
48
|
await ensureInitialized(cwd);
|
|
@@ -53,7 +60,7 @@ export default class DeleteIssue extends Command {
|
|
|
53
60
|
output: process.stdout,
|
|
54
61
|
});
|
|
55
62
|
const answer = await new Promise(resolve => {
|
|
56
|
-
rl.question(`Are you sure you want to delete
|
|
63
|
+
rl.question(`Are you sure you want to delete ${args.type} ${args.id}? (y/N) `, resolve);
|
|
57
64
|
});
|
|
58
65
|
rl.close();
|
|
59
66
|
if (answer.toLowerCase() !== 'y') {
|
|
@@ -61,16 +68,17 @@ export default class DeleteIssue extends Command {
|
|
|
61
68
|
return;
|
|
62
69
|
}
|
|
63
70
|
}
|
|
71
|
+
const itemId = await resolveItemId(args.id, itemType, cwd, msg => this.error(msg));
|
|
64
72
|
const response = await daemonDeleteItem({
|
|
65
73
|
projectPath: cwd,
|
|
66
|
-
itemType
|
|
67
|
-
itemId
|
|
74
|
+
itemType,
|
|
75
|
+
itemId,
|
|
68
76
|
force: false,
|
|
69
77
|
});
|
|
70
78
|
if (!response.success) {
|
|
71
79
|
this.error(response.error);
|
|
72
80
|
}
|
|
73
|
-
this.log(`Deleted
|
|
81
|
+
this.log(`Deleted ${args.type} ${args.id}`);
|
|
74
82
|
}
|
|
75
83
|
}
|
|
76
|
-
//# sourceMappingURL=
|
|
84
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
2
|
/**
|
|
3
|
-
* Duplicate an
|
|
3
|
+
* Duplicate an item of any type to the same or a different project
|
|
4
4
|
*/
|
|
5
|
-
export default class
|
|
5
|
+
export default class Duplicate extends Command {
|
|
6
6
|
static args: {
|
|
7
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
8
|
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
9
|
};
|
|
9
10
|
static description: string;
|
|
@@ -11,8 +12,9 @@ export default class DuplicateIssue extends Command {
|
|
|
11
12
|
static flags: {
|
|
12
13
|
to: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
14
|
title: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
'new-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
16
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
17
|
};
|
|
16
18
|
run(): Promise<void>;
|
|
17
19
|
}
|
|
18
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=duplicate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../src/commands/duplicate.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAYlD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAE5C,OAAgB,IAAI;;;MASnB;IAGD,OAAgB,WAAW,SAC6B;IAGxD,OAAgB,QAAQ,WAKvB;IAGD,OAAgB,KAAK;;;;;MAYpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4DlC"}
|
|
@@ -1,48 +1,57 @@
|
|
|
1
1
|
// eslint-disable-next-line import/order
|
|
2
2
|
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { resolveProjectPath } from '
|
|
3
|
+
import { daemonDuplicateItem } from '../daemon/daemon-duplicate-item.js';
|
|
4
|
+
import { ensureInitialized, NotInitializedError, } from '../utils/ensure-initialized.js';
|
|
5
|
+
import { projectFlag } from '../flags/project-flag.js';
|
|
6
|
+
import { resolveProjectPath } from '../utils/resolve-project-path.js';
|
|
7
|
+
import { toPlural } from '../utils/to-plural.js';
|
|
8
|
+
import { resolveItemId } from '../lib/resolve-item-id/resolve-item-id.js';
|
|
7
9
|
/**
|
|
8
|
-
* Duplicate an
|
|
10
|
+
* Duplicate an item of any type to the same or a different project
|
|
9
11
|
*/
|
|
10
12
|
// eslint-disable-next-line custom/no-default-class-export, class-export/class-export
|
|
11
|
-
export default class
|
|
13
|
+
export default class Duplicate extends Command {
|
|
12
14
|
// eslint-disable-next-line no-restricted-syntax
|
|
13
15
|
static args = {
|
|
16
|
+
type: Args.string({
|
|
17
|
+
description: 'Item type (e.g., issue, epic, or custom type)',
|
|
18
|
+
required: true,
|
|
19
|
+
}),
|
|
14
20
|
id: Args.string({
|
|
15
|
-
description: '
|
|
21
|
+
description: 'Item ID (UUID, display number, or slug)',
|
|
16
22
|
required: true,
|
|
17
23
|
}),
|
|
18
24
|
};
|
|
19
25
|
// eslint-disable-next-line no-restricted-syntax
|
|
20
|
-
static description = 'Duplicate an
|
|
26
|
+
static description = 'Duplicate an item to the same or a different project';
|
|
21
27
|
// eslint-disable-next-line no-restricted-syntax
|
|
22
28
|
static examples = [
|
|
23
29
|
'<%= config.bin %> duplicate issue 1',
|
|
24
|
-
'<%= config.bin %> duplicate
|
|
25
|
-
'<%= config.bin %> duplicate
|
|
26
|
-
'<%= config.bin %> duplicate
|
|
30
|
+
'<%= config.bin %> duplicate epic 1 --title "Copy of epic"',
|
|
31
|
+
'<%= config.bin %> duplicate bug abc123-uuid --to /path/to/other/project',
|
|
32
|
+
'<%= config.bin %> duplicate epic 1 --project centy-daemon',
|
|
27
33
|
];
|
|
28
34
|
// eslint-disable-next-line no-restricted-syntax
|
|
29
35
|
static flags = {
|
|
30
36
|
to: Flags.string({
|
|
31
|
-
|
|
32
|
-
description: 'Target project path (defaults to same project if not specified)',
|
|
37
|
+
description: 'Target project path (defaults to same project)',
|
|
33
38
|
}),
|
|
34
39
|
title: Flags.string({
|
|
40
|
+
char: 't',
|
|
35
41
|
description: 'Title for the duplicate (defaults to "Copy of {original}")',
|
|
36
42
|
}),
|
|
43
|
+
'new-id': Flags.string({
|
|
44
|
+
description: 'New ID for the copy (for slug-identified types)',
|
|
45
|
+
}),
|
|
37
46
|
project: projectFlag,
|
|
38
47
|
};
|
|
39
48
|
async run() {
|
|
40
|
-
const { args, flags } = await this.parse(
|
|
49
|
+
const { args, flags } = await this.parse(Duplicate);
|
|
50
|
+
const itemType = toPlural(args.type);
|
|
41
51
|
const sourceProjectPath = await resolveProjectPath(flags.project);
|
|
42
|
-
const targetProjectPath = flags.to
|
|
52
|
+
const targetProjectPath = flags.to !== undefined
|
|
43
53
|
? await resolveProjectPath(flags.to)
|
|
44
54
|
: sourceProjectPath;
|
|
45
|
-
// Ensure source project is initialized
|
|
46
55
|
try {
|
|
47
56
|
await ensureInitialized(sourceProjectPath);
|
|
48
57
|
}
|
|
@@ -52,7 +61,6 @@ export default class DuplicateIssue extends Command {
|
|
|
52
61
|
}
|
|
53
62
|
throw error instanceof Error ? error : new Error(String(error));
|
|
54
63
|
}
|
|
55
|
-
// Ensure target project is initialized (if different)
|
|
56
64
|
if (targetProjectPath !== sourceProjectPath) {
|
|
57
65
|
try {
|
|
58
66
|
await ensureInitialized(targetProjectPath);
|
|
@@ -64,19 +72,25 @@ export default class DuplicateIssue extends Command {
|
|
|
64
72
|
throw error instanceof Error ? error : new Error(String(error));
|
|
65
73
|
}
|
|
66
74
|
}
|
|
67
|
-
const
|
|
75
|
+
const itemId = await resolveItemId(args.id, itemType, sourceProjectPath, msg => this.error(msg));
|
|
76
|
+
const response = await daemonDuplicateItem({
|
|
68
77
|
sourceProjectPath,
|
|
69
|
-
|
|
78
|
+
itemType,
|
|
79
|
+
itemId,
|
|
70
80
|
targetProjectPath,
|
|
81
|
+
newId: flags['new-id'] !== undefined ? flags['new-id'] : '',
|
|
71
82
|
newTitle: flags.title !== undefined ? flags.title : '',
|
|
72
83
|
});
|
|
73
84
|
if (!response.success) {
|
|
74
85
|
this.error(response.error);
|
|
75
86
|
}
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
87
|
+
const newItem = response.item;
|
|
88
|
+
const meta = newItem.metadata;
|
|
89
|
+
const displayNum = meta !== undefined && meta.displayNumber > 0
|
|
90
|
+
? `#${meta.displayNumber}`
|
|
91
|
+
: newItem.id;
|
|
92
|
+
const locationInfo = targetProjectPath !== sourceProjectPath ? ` in ${targetProjectPath}` : '';
|
|
93
|
+
this.log(`Duplicated ${args.type} → ${displayNum} "${newItem.title}"${locationInfo}`);
|
|
80
94
|
}
|
|
81
95
|
}
|
|
82
|
-
//# sourceMappingURL=
|
|
96
|
+
//# sourceMappingURL=duplicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicate.js","sourceRoot":"","sources":["../../src/commands/duplicate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
2
|
/**
|
|
3
|
-
* List
|
|
3
|
+
* List items of any type
|
|
4
4
|
*/
|
|
5
|
-
export default class
|
|
5
|
+
export default class List extends Command {
|
|
6
|
+
static args: {
|
|
7
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
6
9
|
static description: string;
|
|
7
|
-
static aliases: string[];
|
|
8
10
|
static examples: string[];
|
|
9
11
|
static flags: {
|
|
10
12
|
status: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
13
|
priority: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'include-deleted': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
15
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
-
draft: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
16
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
17
|
};
|
|
16
18
|
run(): Promise<void>;
|
|
17
19
|
}
|
|
18
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAWlD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IAEvC,OAAgB,IAAI;;MAKnB;IAGD,OAAgB,WAAW,SAA2B;IAGtD,OAAgB,QAAQ,WAOvB;IAGD,OAAgB,KAAK;;;;;;MAkBpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoDlC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// eslint-disable-next-line import/order
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import { daemonListItems } from '../daemon/daemon-list-items.js';
|
|
4
|
+
import { projectFlag } from '../flags/project-flag.js';
|
|
5
|
+
import { ensureInitialized, NotInitializedError, } from '../utils/ensure-initialized.js';
|
|
6
|
+
import { resolveProjectPath } from '../utils/resolve-project-path.js';
|
|
7
|
+
import { toPlural } from '../utils/to-plural.js';
|
|
8
|
+
/**
|
|
9
|
+
* List items of any type
|
|
10
|
+
*/
|
|
11
|
+
// eslint-disable-next-line custom/no-default-class-export, class-export/class-export
|
|
12
|
+
export default class List extends Command {
|
|
13
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
14
|
+
static args = {
|
|
15
|
+
type: Args.string({
|
|
16
|
+
description: 'Item type (e.g., issue, doc, epic, or custom type)',
|
|
17
|
+
required: true,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
21
|
+
static description = 'List items of any type';
|
|
22
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
23
|
+
static examples = [
|
|
24
|
+
'<%= config.bin %> list issues',
|
|
25
|
+
'<%= config.bin %> list epics',
|
|
26
|
+
'<%= config.bin %> list epics --status open',
|
|
27
|
+
'<%= config.bin %> list epics --priority 1',
|
|
28
|
+
'<%= config.bin %> list bugs --json',
|
|
29
|
+
'<%= config.bin %> list issues --project centy-daemon',
|
|
30
|
+
];
|
|
31
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
32
|
+
static flags = {
|
|
33
|
+
status: Flags.string({
|
|
34
|
+
char: 's',
|
|
35
|
+
description: 'Filter by status (e.g., open, in-progress, closed)',
|
|
36
|
+
}),
|
|
37
|
+
priority: Flags.integer({
|
|
38
|
+
char: 'p',
|
|
39
|
+
description: 'Filter by priority level (1 = highest)',
|
|
40
|
+
}),
|
|
41
|
+
'include-deleted': Flags.boolean({
|
|
42
|
+
description: 'Include soft-deleted items',
|
|
43
|
+
default: false,
|
|
44
|
+
}),
|
|
45
|
+
json: Flags.boolean({
|
|
46
|
+
description: 'Output as JSON',
|
|
47
|
+
default: false,
|
|
48
|
+
}),
|
|
49
|
+
project: projectFlag,
|
|
50
|
+
};
|
|
51
|
+
async run() {
|
|
52
|
+
const { args, flags } = await this.parse(List);
|
|
53
|
+
const itemType = toPlural(args.type);
|
|
54
|
+
const cwd = await resolveProjectPath(flags.project);
|
|
55
|
+
try {
|
|
56
|
+
await ensureInitialized(cwd);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error instanceof NotInitializedError) {
|
|
60
|
+
this.error(error.message);
|
|
61
|
+
}
|
|
62
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
63
|
+
}
|
|
64
|
+
const response = await daemonListItems({
|
|
65
|
+
projectPath: cwd,
|
|
66
|
+
itemType,
|
|
67
|
+
status: flags.status !== undefined ? flags.status : '',
|
|
68
|
+
priority: flags.priority !== undefined ? flags.priority : 0,
|
|
69
|
+
includeDeleted: flags['include-deleted'],
|
|
70
|
+
limit: 0,
|
|
71
|
+
offset: 0,
|
|
72
|
+
});
|
|
73
|
+
if (!response.success) {
|
|
74
|
+
this.error(response.error);
|
|
75
|
+
}
|
|
76
|
+
if (flags.json) {
|
|
77
|
+
this.log(JSON.stringify(response.items, null, 2));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (response.items.length === 0) {
|
|
81
|
+
this.log(`No ${itemType} found.`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
this.log(`Found ${response.totalCount} ${itemType}:\n`);
|
|
85
|
+
for (const item of response.items) {
|
|
86
|
+
const meta = item.metadata;
|
|
87
|
+
const displayNum = meta !== undefined && meta.displayNumber > 0
|
|
88
|
+
? `#${meta.displayNumber} `
|
|
89
|
+
: '';
|
|
90
|
+
const status = meta !== undefined && meta.status !== '' ? ` [${meta.status}]` : '';
|
|
91
|
+
const priority = meta !== undefined && meta.priority > 0 ? ` [P${meta.priority}]` : '';
|
|
92
|
+
this.log(`${displayNum}${item.title}${status}${priority}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
2
|
/**
|
|
3
|
-
* Move an
|
|
3
|
+
* Move an item of any type to a different project
|
|
4
4
|
*/
|
|
5
|
-
export default class
|
|
5
|
+
export default class Move extends Command {
|
|
6
6
|
static args: {
|
|
7
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
8
|
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
9
|
};
|
|
9
10
|
static description: string;
|
|
10
11
|
static examples: string[];
|
|
11
12
|
static flags: {
|
|
12
13
|
to: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'new-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
15
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
16
|
};
|
|
15
17
|
run(): Promise<void>;
|
|
16
18
|
}
|
|
17
|
-
//# sourceMappingURL=
|
|
19
|
+
//# sourceMappingURL=move.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAYlD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IAEvC,OAAgB,IAAI;;;MASnB;IAGD,OAAgB,WAAW,SAAwC;IAGnE,OAAgB,QAAQ,WAKvB;IAGD,OAAgB,KAAK;;;;MAUpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwDlC"}
|