aranea-sdk-cli 0.3.16 → 0.5.0
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/backlog.d.ts +15 -0
- package/dist/commands/backlog.js +364 -0
- package/dist/commands/control.d.ts +20 -0
- package/dist/commands/control.js +700 -0
- package/dist/commands/registry.d.ts +20 -0
- package/dist/commands/registry.js +662 -0
- package/dist/commands/validate.d.ts +7 -0
- package/dist/commands/validate.js +202 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +5 -1
- package/dist/index.js +11 -1
- package/package.json +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AraneaSDK CLI - Backlog Command
|
|
3
|
+
*
|
|
4
|
+
* Issue/Feature/Idea管理
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* aranea-sdk backlog create --type bug --title "MQTT接続エラー" --desc "..."
|
|
8
|
+
* aranea-sdk backlog list --status open --type bug
|
|
9
|
+
* aranea-sdk backlog get BL-20251227-ABC123
|
|
10
|
+
* aranea-sdk backlog update BL-20251227-ABC123 --status resolved
|
|
11
|
+
* aranea-sdk backlog stats
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
export declare const backlogCommand: Command;
|
|
15
|
+
export default backlogCommand;
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AraneaSDK CLI - Backlog Command
|
|
4
|
+
*
|
|
5
|
+
* Issue/Feature/Idea管理
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* aranea-sdk backlog create --type bug --title "MQTT接続エラー" --desc "..."
|
|
9
|
+
* aranea-sdk backlog list --status open --type bug
|
|
10
|
+
* aranea-sdk backlog get BL-20251227-ABC123
|
|
11
|
+
* aranea-sdk backlog update BL-20251227-ABC123 --status resolved
|
|
12
|
+
* aranea-sdk backlog stats
|
|
13
|
+
*/
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.backlogCommand = void 0;
|
|
19
|
+
const commander_1 = require("commander");
|
|
20
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
21
|
+
const ora_1 = __importDefault(require("ora"));
|
|
22
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
23
|
+
const config_1 = require("../config");
|
|
24
|
+
const auth_1 = require("./auth");
|
|
25
|
+
const TYPE_COLORS = {
|
|
26
|
+
bug: 'red',
|
|
27
|
+
issue: 'yellow',
|
|
28
|
+
feature: 'green',
|
|
29
|
+
enhancement: 'cyan',
|
|
30
|
+
idea: 'magenta',
|
|
31
|
+
debt: 'gray',
|
|
32
|
+
security: 'red',
|
|
33
|
+
docs: 'blue',
|
|
34
|
+
};
|
|
35
|
+
const STATUS_COLORS = {
|
|
36
|
+
pending_audit: 'gray',
|
|
37
|
+
pending_review: 'gray',
|
|
38
|
+
open: 'yellow',
|
|
39
|
+
in_progress: 'cyan',
|
|
40
|
+
resolved: 'green',
|
|
41
|
+
closed: 'gray',
|
|
42
|
+
duplicate: 'gray',
|
|
43
|
+
wontfix: 'gray',
|
|
44
|
+
false_positive: 'gray',
|
|
45
|
+
};
|
|
46
|
+
const PRIORITY_COLORS = {
|
|
47
|
+
critical: 'red',
|
|
48
|
+
high: 'yellow',
|
|
49
|
+
medium: 'white',
|
|
50
|
+
low: 'gray',
|
|
51
|
+
};
|
|
52
|
+
// ========== Helper Functions ==========
|
|
53
|
+
function colorize(text, color) {
|
|
54
|
+
const colorFn = chalk_1.default[color];
|
|
55
|
+
return colorFn ? colorFn(text) : text;
|
|
56
|
+
}
|
|
57
|
+
function formatItem(item, verbose = false) {
|
|
58
|
+
const typeColor = TYPE_COLORS[item.type] || 'white';
|
|
59
|
+
const statusColor = STATUS_COLORS[item.status] || 'white';
|
|
60
|
+
const priorityColor = PRIORITY_COLORS[item.priority] || 'white';
|
|
61
|
+
let output = '';
|
|
62
|
+
// ヘッダー
|
|
63
|
+
output += colorize(`[${item.itemId}]`, 'cyan') + ' ';
|
|
64
|
+
output += colorize(`[${item.type.toUpperCase()}]`, typeColor) + ' ';
|
|
65
|
+
output += colorize(`[${item.priority.toUpperCase()}]`, priorityColor) + ' ';
|
|
66
|
+
output += colorize(`${item.status}`, statusColor) + '\n';
|
|
67
|
+
// タイトル
|
|
68
|
+
output += chalk_1.default.bold(item.title) + '\n';
|
|
69
|
+
if (verbose) {
|
|
70
|
+
// 説明
|
|
71
|
+
output += chalk_1.default.gray('Description: ') + item.description + '\n';
|
|
72
|
+
// コンポーネント・タグ
|
|
73
|
+
output += chalk_1.default.gray('Component: ') + item.component;
|
|
74
|
+
if (item.tags && item.tags.length > 0) {
|
|
75
|
+
output += chalk_1.default.gray(' | Tags: ') + item.tags.join(', ');
|
|
76
|
+
}
|
|
77
|
+
output += '\n';
|
|
78
|
+
// エラーコード
|
|
79
|
+
if (item.errorCode) {
|
|
80
|
+
output += chalk_1.default.gray('Error Code: ') + chalk_1.default.red(item.errorCode) + '\n';
|
|
81
|
+
}
|
|
82
|
+
// 登録情報
|
|
83
|
+
output += chalk_1.default.gray('Source: ') + item.source;
|
|
84
|
+
output += chalk_1.default.gray(' | Submitted: ') + formatDate(item.submittedAt);
|
|
85
|
+
if (item.submittedBy) {
|
|
86
|
+
output += chalk_1.default.gray(' by ') + item.submittedBy;
|
|
87
|
+
}
|
|
88
|
+
output += '\n';
|
|
89
|
+
// Metatron監査
|
|
90
|
+
if (item.metatronAudit) {
|
|
91
|
+
const audit = item.metatronAudit;
|
|
92
|
+
output += chalk_1.default.gray('Metatron Audit: ');
|
|
93
|
+
output += colorize(audit.verdict, audit.verdict === 'approved' ? 'green' : 'yellow');
|
|
94
|
+
output += ` (Quality: ${audit.qualityScore}%)`;
|
|
95
|
+
if (audit.verdictReason) {
|
|
96
|
+
output += ` - ${audit.verdictReason}`;
|
|
97
|
+
}
|
|
98
|
+
output += '\n';
|
|
99
|
+
}
|
|
100
|
+
// Metatron検出
|
|
101
|
+
if (item.metatronDetection) {
|
|
102
|
+
const detection = item.metatronDetection;
|
|
103
|
+
output += chalk_1.default.gray('Metatron Detection: ');
|
|
104
|
+
output += `Confidence ${detection.confidence}% via ${detection.detectionSource}\n`;
|
|
105
|
+
if (detection.analysis?.suggestedFix) {
|
|
106
|
+
output += chalk_1.default.gray('Suggested Fix: ') + detection.analysis.suggestedFix + '\n';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return output;
|
|
111
|
+
}
|
|
112
|
+
function formatDate(timestamp) {
|
|
113
|
+
if (!timestamp)
|
|
114
|
+
return 'N/A';
|
|
115
|
+
if (timestamp._seconds) {
|
|
116
|
+
return new Date(timestamp._seconds * 1000).toLocaleString('ja-JP');
|
|
117
|
+
}
|
|
118
|
+
return new Date(timestamp).toLocaleString('ja-JP');
|
|
119
|
+
}
|
|
120
|
+
// ========== Commands ==========
|
|
121
|
+
exports.backlogCommand = new commander_1.Command('backlog')
|
|
122
|
+
.description('AraneaBacklog - Issue/Feature管理')
|
|
123
|
+
.addHelpText('after', `
|
|
124
|
+
Examples:
|
|
125
|
+
$ aranea-sdk backlog create --type bug --title "MQTT認証エラー" --desc "認証失敗が頻発"
|
|
126
|
+
$ aranea-sdk backlog list --status open
|
|
127
|
+
$ aranea-sdk backlog list --type bug --priority critical
|
|
128
|
+
$ aranea-sdk backlog get BL-20251227-ABC123
|
|
129
|
+
$ aranea-sdk backlog update BL-20251227-ABC123 --status resolved
|
|
130
|
+
$ aranea-sdk backlog stats
|
|
131
|
+
|
|
132
|
+
Type options: bug, issue, feature, enhancement, idea, debt, security, docs
|
|
133
|
+
Status options: pending_audit, pending_review, open, in_progress, resolved, closed, duplicate, wontfix
|
|
134
|
+
Priority options: critical, high, medium, low
|
|
135
|
+
`);
|
|
136
|
+
// ========== create ==========
|
|
137
|
+
exports.backlogCommand
|
|
138
|
+
.command('create')
|
|
139
|
+
.description('新しいBacklogアイテムを作成')
|
|
140
|
+
.requiredOption('--type <type>', 'アイテムタイプ (bug|issue|feature|enhancement|idea|debt|security|docs)')
|
|
141
|
+
.requiredOption('--title <title>', 'タイトル')
|
|
142
|
+
.requiredOption('--desc <description>', '説明')
|
|
143
|
+
.option('--priority <priority>', '優先度 (critical|high|medium|low)', 'medium')
|
|
144
|
+
.option('--component <component>', 'コンポーネント', 'general')
|
|
145
|
+
.option('--tags <tags>', 'タグ (カンマ区切り)')
|
|
146
|
+
.option('--error-code <code>', 'エラーコード')
|
|
147
|
+
.option('--lacis-id <lacisId>', '登録者LacisID')
|
|
148
|
+
.option('--endpoint <env>', '環境 (production|staging)', 'production')
|
|
149
|
+
.action(async (options) => {
|
|
150
|
+
const spinner = (0, ora_1.default)('Creating backlog item...').start();
|
|
151
|
+
try {
|
|
152
|
+
// 認証トークン取得
|
|
153
|
+
const token = await (0, auth_1.getValidToken)();
|
|
154
|
+
if (!token) {
|
|
155
|
+
spinner.fail(chalk_1.default.red('認証が必要です。先に aranea-sdk auth login を実行してください'));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const env = (0, config_1.resolveEnvironment)(options.endpoint);
|
|
159
|
+
(0, config_1.checkStagingAvailability)(env, 'backlog create');
|
|
160
|
+
const endpoint = (0, config_1.getEndpoint)(env);
|
|
161
|
+
const body = {
|
|
162
|
+
type: options.type,
|
|
163
|
+
title: options.title,
|
|
164
|
+
description: options.desc,
|
|
165
|
+
priority: options.priority,
|
|
166
|
+
component: options.component,
|
|
167
|
+
tags: options.tags ? options.tags.split(',').map((t) => t.trim()) : [],
|
|
168
|
+
errorCode: options.errorCode,
|
|
169
|
+
source: 'human',
|
|
170
|
+
submittedBy: options.lacisId || 'cli-user',
|
|
171
|
+
};
|
|
172
|
+
const response = await (0, node_fetch_1.default)(`${endpoint.backlogAPI}?action=create`, {
|
|
173
|
+
method: 'POST',
|
|
174
|
+
headers: {
|
|
175
|
+
'Content-Type': 'application/json',
|
|
176
|
+
Authorization: `Bearer ${token}`,
|
|
177
|
+
},
|
|
178
|
+
body: JSON.stringify(body),
|
|
179
|
+
});
|
|
180
|
+
const result = (await response.json());
|
|
181
|
+
if (!response.ok || !result.ok) {
|
|
182
|
+
spinner.fail(chalk_1.default.red(`Failed: ${result.error || 'Unknown error'}`));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
spinner.succeed(chalk_1.default.green(`Created: ${result.itemId}`));
|
|
186
|
+
console.log('');
|
|
187
|
+
console.log(formatItem(result.item, true));
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
spinner.fail(chalk_1.default.red(`Error: ${error.message}`));
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
// ========== list ==========
|
|
194
|
+
exports.backlogCommand
|
|
195
|
+
.command('list')
|
|
196
|
+
.description('Backlogアイテム一覧')
|
|
197
|
+
.option('--status <status>', 'ステータスでフィルタ')
|
|
198
|
+
.option('--type <type>', 'タイプでフィルタ')
|
|
199
|
+
.option('--priority <priority>', '優先度でフィルタ')
|
|
200
|
+
.option('--component <component>', 'コンポーネントでフィルタ')
|
|
201
|
+
.option('--source <source>', 'ソースでフィルタ (human|metatron)')
|
|
202
|
+
.option('--limit <limit>', '取得件数', '20')
|
|
203
|
+
.option('--endpoint <env>', '環境 (production|staging)', 'production')
|
|
204
|
+
.action(async (options) => {
|
|
205
|
+
const spinner = (0, ora_1.default)('Fetching backlog items...').start();
|
|
206
|
+
try {
|
|
207
|
+
const env = (0, config_1.resolveEnvironment)(options.endpoint);
|
|
208
|
+
(0, config_1.checkStagingAvailability)(env, 'backlog list');
|
|
209
|
+
const endpoint = (0, config_1.getEndpoint)(env);
|
|
210
|
+
const params = new URLSearchParams({ action: 'list' });
|
|
211
|
+
if (options.status)
|
|
212
|
+
params.append('status', options.status);
|
|
213
|
+
if (options.type)
|
|
214
|
+
params.append('type', options.type);
|
|
215
|
+
if (options.priority)
|
|
216
|
+
params.append('priority', options.priority);
|
|
217
|
+
if (options.component)
|
|
218
|
+
params.append('component', options.component);
|
|
219
|
+
if (options.source)
|
|
220
|
+
params.append('source', options.source);
|
|
221
|
+
params.append('limit', options.limit);
|
|
222
|
+
const url = `${endpoint.backlogAPI}?${params.toString()}`;
|
|
223
|
+
const response = await (0, node_fetch_1.default)(url);
|
|
224
|
+
const result = (await response.json());
|
|
225
|
+
if (!response.ok || !result.ok) {
|
|
226
|
+
spinner.fail(chalk_1.default.red(`Failed: ${result.error || 'Unknown error'}`));
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
spinner.succeed(chalk_1.default.green(`Found ${result.count} items`));
|
|
230
|
+
console.log('');
|
|
231
|
+
if (result.items.length === 0) {
|
|
232
|
+
console.log(chalk_1.default.gray('No items found.'));
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
for (const item of result.items) {
|
|
236
|
+
console.log(formatItem(item));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
spinner.fail(chalk_1.default.red(`Error: ${error.message}`));
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
// ========== get ==========
|
|
244
|
+
exports.backlogCommand
|
|
245
|
+
.command('get <itemId>')
|
|
246
|
+
.description('Backlogアイテム詳細')
|
|
247
|
+
.option('--endpoint <env>', '環境 (production|staging)', 'production')
|
|
248
|
+
.action(async (itemId, options) => {
|
|
249
|
+
const spinner = (0, ora_1.default)(`Fetching ${itemId}...`).start();
|
|
250
|
+
try {
|
|
251
|
+
const env = (0, config_1.resolveEnvironment)(options.endpoint);
|
|
252
|
+
(0, config_1.checkStagingAvailability)(env, 'backlog get');
|
|
253
|
+
const endpoint = (0, config_1.getEndpoint)(env);
|
|
254
|
+
const url = `${endpoint.backlogAPI}?action=get&itemId=${itemId}`;
|
|
255
|
+
const response = await (0, node_fetch_1.default)(url);
|
|
256
|
+
const result = (await response.json());
|
|
257
|
+
if (!response.ok || !result.ok) {
|
|
258
|
+
spinner.fail(chalk_1.default.red(`Failed: ${result.error || 'Unknown error'}`));
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
spinner.succeed(chalk_1.default.green(`Found: ${itemId}`));
|
|
262
|
+
console.log('');
|
|
263
|
+
console.log(formatItem(result.item, true));
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
spinner.fail(chalk_1.default.red(`Error: ${error.message}`));
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
// ========== update ==========
|
|
270
|
+
exports.backlogCommand
|
|
271
|
+
.command('update <itemId>')
|
|
272
|
+
.description('Backlogアイテム更新')
|
|
273
|
+
.option('--status <status>', 'ステータス')
|
|
274
|
+
.option('--priority <priority>', '優先度')
|
|
275
|
+
.option('--assigned-to <lacisId>', '担当者')
|
|
276
|
+
.option('--resolution <text>', '解決方法')
|
|
277
|
+
.option('--endpoint <env>', '環境 (production|staging)', 'production')
|
|
278
|
+
.action(async (itemId, options) => {
|
|
279
|
+
const spinner = (0, ora_1.default)(`Updating ${itemId}...`).start();
|
|
280
|
+
try {
|
|
281
|
+
// 認証トークン取得
|
|
282
|
+
const token = await (0, auth_1.getValidToken)();
|
|
283
|
+
if (!token) {
|
|
284
|
+
spinner.fail(chalk_1.default.red('認証が必要です。先に aranea-sdk auth login を実行してください'));
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
const env = (0, config_1.resolveEnvironment)(options.endpoint);
|
|
288
|
+
(0, config_1.checkStagingAvailability)(env, 'backlog update');
|
|
289
|
+
const endpoint = (0, config_1.getEndpoint)(env);
|
|
290
|
+
const body = {};
|
|
291
|
+
if (options.status)
|
|
292
|
+
body.status = options.status;
|
|
293
|
+
if (options.priority)
|
|
294
|
+
body.priority = options.priority;
|
|
295
|
+
if (options.assignedTo)
|
|
296
|
+
body.assignedTo = options.assignedTo;
|
|
297
|
+
if (options.resolution)
|
|
298
|
+
body.resolution = options.resolution;
|
|
299
|
+
if (Object.keys(body).length === 0) {
|
|
300
|
+
spinner.fail(chalk_1.default.red('No update fields specified'));
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
const url = `${endpoint.backlogAPI}?action=update&itemId=${itemId}`;
|
|
304
|
+
const response = await (0, node_fetch_1.default)(url, {
|
|
305
|
+
method: 'POST',
|
|
306
|
+
headers: {
|
|
307
|
+
'Content-Type': 'application/json',
|
|
308
|
+
Authorization: `Bearer ${token}`,
|
|
309
|
+
},
|
|
310
|
+
body: JSON.stringify(body),
|
|
311
|
+
});
|
|
312
|
+
const result = (await response.json());
|
|
313
|
+
if (!response.ok || !result.ok) {
|
|
314
|
+
spinner.fail(chalk_1.default.red(`Failed: ${result.error || 'Unknown error'}`));
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
spinner.succeed(chalk_1.default.green(`Updated: ${itemId}`));
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
spinner.fail(chalk_1.default.red(`Error: ${error.message}`));
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
// ========== stats ==========
|
|
324
|
+
exports.backlogCommand
|
|
325
|
+
.command('stats')
|
|
326
|
+
.description('Backlog統計')
|
|
327
|
+
.option('--endpoint <env>', '環境 (production|staging)', 'production')
|
|
328
|
+
.action(async (options) => {
|
|
329
|
+
const spinner = (0, ora_1.default)('Fetching stats...').start();
|
|
330
|
+
try {
|
|
331
|
+
const env = (0, config_1.resolveEnvironment)(options.endpoint);
|
|
332
|
+
(0, config_1.checkStagingAvailability)(env, 'backlog stats');
|
|
333
|
+
const endpoint = (0, config_1.getEndpoint)(env);
|
|
334
|
+
const url = `${endpoint.backlogAPI}?action=stats`;
|
|
335
|
+
const response = await (0, node_fetch_1.default)(url);
|
|
336
|
+
const result = (await response.json());
|
|
337
|
+
if (!response.ok || !result.ok) {
|
|
338
|
+
spinner.fail(chalk_1.default.red(`Failed: ${result.error || 'Unknown error'}`));
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
spinner.succeed(chalk_1.default.green('Statistics'));
|
|
342
|
+
console.log('');
|
|
343
|
+
const stats = result.stats;
|
|
344
|
+
console.log(chalk_1.default.bold('=== Overview ==='));
|
|
345
|
+
console.log(`Total Active: ${chalk_1.default.cyan(stats.totalActive)}`);
|
|
346
|
+
console.log(`Critical/High Priority: ${chalk_1.default.red(stats.criticalAndHigh)}`);
|
|
347
|
+
console.log('');
|
|
348
|
+
console.log(chalk_1.default.bold('=== By Status ==='));
|
|
349
|
+
for (const [status, count] of Object.entries(stats.byStatus || {})) {
|
|
350
|
+
const color = STATUS_COLORS[status] || 'white';
|
|
351
|
+
console.log(` ${colorize(status, color)}: ${count}`);
|
|
352
|
+
}
|
|
353
|
+
console.log('');
|
|
354
|
+
console.log(chalk_1.default.bold('=== By Type ==='));
|
|
355
|
+
for (const [type, count] of Object.entries(stats.byType || {})) {
|
|
356
|
+
const color = TYPE_COLORS[type] || 'white';
|
|
357
|
+
console.log(` ${colorize(type, color)}: ${count}`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
spinner.fail(chalk_1.default.red(`Error: ${error.message}`));
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
exports.default = exports.backlogCommand;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* control command
|
|
3
|
+
*
|
|
4
|
+
* Control型(UIコンポーネント定義)の管理コマンド
|
|
5
|
+
*
|
|
6
|
+
* 安全設計:
|
|
7
|
+
* - list, show, sync: 許可
|
|
8
|
+
* - add: 類似チェック付きで許可
|
|
9
|
+
* - modify, delete: 禁止(Admin UIのみ)
|
|
10
|
+
*
|
|
11
|
+
* @see doc/APPS/araneaSDK/headDesign/59_METATRON_CONTROL_SUGGESTION.md Section 8
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* aranea-sdk control list [--category <category>] [--type <dataType>]
|
|
15
|
+
* aranea-sdk control show <controlId>
|
|
16
|
+
* aranea-sdk control sync [--dry-run]
|
|
17
|
+
* aranea-sdk control add --id <id> --name <name> --category <category> [--dry-run]
|
|
18
|
+
*/
|
|
19
|
+
import { Command } from 'commander';
|
|
20
|
+
export declare const controlCommand: Command;
|