@acip/cli 1.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.
Files changed (64) hide show
  1. package/README.md +368 -0
  2. package/bin/acip.js +3 -0
  3. package/dist/commands/call.d.ts +3 -0
  4. package/dist/commands/call.d.ts.map +1 -0
  5. package/dist/commands/call.js +65 -0
  6. package/dist/commands/call.js.map +1 -0
  7. package/dist/commands/config.d.ts +3 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +144 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/deploy.d.ts +3 -0
  12. package/dist/commands/deploy.d.ts.map +1 -0
  13. package/dist/commands/deploy.js +280 -0
  14. package/dist/commands/deploy.js.map +1 -0
  15. package/dist/commands/dev.d.ts +3 -0
  16. package/dist/commands/dev.d.ts.map +1 -0
  17. package/dist/commands/dev.js +218 -0
  18. package/dist/commands/dev.js.map +1 -0
  19. package/dist/commands/doctor.d.ts +3 -0
  20. package/dist/commands/doctor.d.ts.map +1 -0
  21. package/dist/commands/doctor.js +289 -0
  22. package/dist/commands/doctor.js.map +1 -0
  23. package/dist/commands/init.d.ts +3 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +80 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/inspect.d.ts +3 -0
  28. package/dist/commands/inspect.d.ts.map +1 -0
  29. package/dist/commands/inspect.js +69 -0
  30. package/dist/commands/inspect.js.map +1 -0
  31. package/dist/commands/list.d.ts +3 -0
  32. package/dist/commands/list.d.ts.map +1 -0
  33. package/dist/commands/list.js +118 -0
  34. package/dist/commands/list.js.map +1 -0
  35. package/dist/commands/monitor.d.ts +3 -0
  36. package/dist/commands/monitor.d.ts.map +1 -0
  37. package/dist/commands/monitor.js +51 -0
  38. package/dist/commands/monitor.js.map +1 -0
  39. package/dist/commands/new.d.ts +3 -0
  40. package/dist/commands/new.d.ts.map +1 -0
  41. package/dist/commands/new.js +252 -0
  42. package/dist/commands/new.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +79 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/utils/project.d.ts +13 -0
  48. package/dist/utils/project.d.ts.map +1 -0
  49. package/dist/utils/project.js +149 -0
  50. package/dist/utils/project.js.map +1 -0
  51. package/package.json +87 -0
  52. package/templates/.env.example.template +9 -0
  53. package/templates/.gitignore.template +31 -0
  54. package/templates/README.md.template +33 -0
  55. package/templates/advanced/src/components/assistant.js.template +66 -0
  56. package/templates/advanced/src/components/assistant.ts.template +71 -0
  57. package/templates/advanced/src/index.js.template +45 -0
  58. package/templates/advanced/src/index.ts.template +45 -0
  59. package/templates/basic/src/config/index.js.template +28 -0
  60. package/templates/basic/src/config/index.ts.template +28 -0
  61. package/templates/basic/src/index.js.template +29 -0
  62. package/templates/basic/src/index.ts.template +29 -0
  63. package/templates/package.json.template +21 -0
  64. package/templates/tsconfig.json.template +17 -0
package/README.md ADDED
@@ -0,0 +1,368 @@
1
+ # @acip/cli
2
+
3
+ ACIP命令行工具 - 用于Adaptive Contextual Intelligence Protocol的官方CLI
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ # 使用npm全局安装
9
+ npm install -g @acip/cli
10
+
11
+ # 或使用pnpm (推荐)
12
+ pnpm add -g @acip/cli
13
+
14
+ # 在项目内安装
15
+ npm install --save-dev @acip/cli
16
+ ```
17
+
18
+ ## 快速开始
19
+
20
+ ```bash
21
+ # 创建新的ACIP项目
22
+ acip init my-acip-project
23
+
24
+ # 进入项目目录
25
+ cd my-acip-project
26
+
27
+ # 安装依赖
28
+ npm install
29
+
30
+ # 启动开发服务器
31
+ acip dev
32
+ ```
33
+
34
+ ## 命令列表
35
+
36
+ ### `acip init [项目名称]`
37
+
38
+ 初始化一个新的ACIP项目。
39
+
40
+ **选项:**
41
+ - `--typescript` - 使用TypeScript (默认)
42
+ - `--javascript` - 使用JavaScript
43
+ - `-f, --force` - 覆盖已存在的文件
44
+ - `--skip-prompts` - 跳过所有提示并使用默认值
45
+ - `-t, --template <名称>` - 指定模板 (basic | advanced)
46
+
47
+ **示例:**
48
+ ```bash
49
+ # 创建TypeScript项目
50
+ acip init my-project
51
+
52
+ # 创建JavaScript项目
53
+ acip init my-project --javascript
54
+
55
+ # 使用高级模板
56
+ acip init my-project --template advanced
57
+ ```
58
+
59
+ ### `acip new <类型> [名称]`
60
+
61
+ 创建新的资源 (component, model, tool, config)。
62
+
63
+ **选项:**
64
+ - `-d, --directory <目录>` - 目标目录
65
+ - `--ts` - 使用TypeScript (默认)
66
+ - `--js` - 使用JavaScript
67
+
68
+ **示例:**
69
+ ```bash
70
+ # 创建组件
71
+ acip new component MyComponent
72
+
73
+ # 创建模型
74
+ acip new model GPTModel
75
+
76
+ # 创建工具
77
+ acip new tool SearchTool
78
+
79
+ # 创建配置文件
80
+ acip new config DatabaseConfig
81
+ ```
82
+
83
+ ### `acip config`
84
+
85
+ 管理ACIP配置。
86
+
87
+ **子命令:**
88
+ - `acip config get <key>` - 获取配置值
89
+ - `acip config set <key> <value>` - 设置配置值
90
+ - `acip config list` - 列出所有配置
91
+ - `acip config delete <key>` - 删除配置值
92
+
93
+ **选项:**
94
+ - `-g, --global` - 使用全局配置
95
+
96
+ **示例:**
97
+ ```bash
98
+ # 设置API密钥
99
+ acip config set apiKey YOUR_API_KEY
100
+
101
+ # 设置默认模型
102
+ acip config set defaultModel gpt-4
103
+
104
+ # 查看所有配置
105
+ acip config list
106
+
107
+ # 获取特定配置
108
+ acip config get apiKey
109
+ ```
110
+
111
+ ### `acip dev`
112
+
113
+ 启动开发服务器。
114
+
115
+ **选项:**
116
+ - `-p, --port <端口>` - 服务器端口 (默认: 3000)
117
+ - `-h, --host <主机>` - 服务器主机 (默认: localhost)
118
+ - `--https` - 使用HTTPS
119
+ - `-o, --open` - 在浏览器中打开
120
+ - `--no-watch` - 禁用文件监听
121
+
122
+ **示例:**
123
+ ```bash
124
+ # 使用默认配置启动
125
+ acip dev
126
+
127
+ # 指定端口
128
+ acip dev --port 8080
129
+
130
+ # 使用HTTPS并自动打开浏览器
131
+ acip dev --https --open
132
+ ```
133
+
134
+ ### `acip deploy [环境]`
135
+
136
+ 部署ACIP应用。
137
+
138
+ **环境:**
139
+ - `production` - 生产环境 (默认)
140
+ - `staging` - 预发布环境
141
+ - `development` - 开发环境
142
+
143
+ **选项:**
144
+ - `--dry-run` - 模拟部署,不做实际更改
145
+ - `--verbose` - 显示详细输出
146
+ - `--config <路径>` - 部署配置文件路径
147
+ - `--force` - 强制部署,忽略警告
148
+ - `--no-build` - 跳过构建步骤
149
+
150
+ **示例:**
151
+ ```bash
152
+ # 部署到生产环境
153
+ acip deploy production
154
+
155
+ # 部署到预发布环境
156
+ acip deploy staging
157
+
158
+ # 模拟部署
159
+ acip deploy --dry-run
160
+ ```
161
+
162
+ ### `acip doctor`
163
+
164
+ 诊断ACIP开发环境。
165
+
166
+ **选项:**
167
+ - `--verbose` - 显示详细输出
168
+
169
+ **检查项目:**
170
+ - Node.js版本
171
+ - 包管理器 (npm/pnpm)
172
+ - TypeScript
173
+ - 当前项目状态
174
+ - ACIP core模块
175
+ - 环境变量
176
+ - 网络连接
177
+
178
+ **示例:**
179
+ ```bash
180
+ # 运行诊断
181
+ acip doctor
182
+
183
+ # 显示详细信息
184
+ acip doctor --verbose
185
+ ```
186
+
187
+ ### `acip list [类型]` / `acip ls [类型]`
188
+
189
+ 列出项目资源。
190
+
191
+ **类型:**
192
+ - `components` - 组件
193
+ - `models` - 模型
194
+ - `tools` - 工具
195
+ - `config` - 配置
196
+
197
+ **选项:**
198
+ - `-v, --verbose` - 显示详细信息
199
+ - `-j, --json` - 以JSON格式输出
200
+
201
+ **示例:**
202
+ ```bash
203
+ # 列出所有资源
204
+ acip list
205
+
206
+ # 只列出组件
207
+ acip list components
208
+
209
+ # 以JSON格式输出
210
+ acip list --json
211
+
212
+ # 显示详细信息
213
+ acip ls --verbose
214
+ ```
215
+
216
+ ## 项目结构
217
+
218
+ 使用`acip init`创建的项目具有以下结构:
219
+
220
+ ```
221
+ my-acip-project/
222
+ ├── src/
223
+ │ ├── components/ # ACIP组件
224
+ │ ├── models/ # AI模型配置
225
+ │ ├── tools/ # 工具定义
226
+ │ ├── config/ # 配置文件
227
+ │ ├── utils/ # 工具函数
228
+ │ └── index.ts # 入口文件
229
+ ├── public/ # 静态资源
230
+ ├── tests/ # 测试文件
231
+ ├── package.json # 项目配置
232
+ ├── tsconfig.json # TypeScript配置
233
+ ├── .env.example # 环境变量示例
234
+ ├── .gitignore # Git忽略文件
235
+ └── README.md # 项目说明
236
+ ```
237
+
238
+ ## 环境变量
239
+
240
+ 在项目根目录创建`.env`文件:
241
+
242
+ ```env
243
+ # API密钥
244
+ ACIP_API_KEY=your_api_key_here
245
+
246
+ # 默认AI模型
247
+ DEFAULT_MODEL_ID=gpt-4
248
+
249
+ # 应用配置
250
+ APP_PORT=3000
251
+ NODE_ENV=development
252
+ ```
253
+
254
+ ## 配置文件
255
+
256
+ CLI工具的配置存储在:
257
+ - **macOS/Linux**: `~/.config/acip/config.json`
258
+ - **Windows**: `%APPDATA%\acip\config.json`
259
+
260
+ ## 开发
261
+
262
+ ### 本地开发
263
+
264
+ ```bash
265
+ # 克隆仓库
266
+ git clone https://github.com/your-org/acip.git
267
+ cd acip/packages/cli
268
+
269
+ # 安装依赖
270
+ pnpm install
271
+
272
+ # 构建
273
+ pnpm build
274
+
275
+ # 运行开发模式
276
+ pnpm dev
277
+
278
+ # 运行测试
279
+ pnpm test
280
+
281
+ # 代码检查
282
+ pnpm lint
283
+ ```
284
+
285
+ ### 测试
286
+
287
+ ```bash
288
+ # 运行所有测试
289
+ pnpm test
290
+
291
+ # 运行测试并生成覆盖率报告
292
+ pnpm test --coverage
293
+
294
+ # 监听模式
295
+ pnpm test --watch
296
+ ```
297
+
298
+ ### 代码规范
299
+
300
+ ```bash
301
+ # 检查代码规范
302
+ pnpm lint
303
+
304
+ # 自动修复代码规范问题
305
+ pnpm lint:fix
306
+ ```
307
+
308
+ ## 故障排除
309
+
310
+ ### 命令未找到
311
+
312
+ 如果安装后无法运行`acip`命令:
313
+
314
+ 1. 确保npm全局bin目录在PATH中:
315
+ ```bash
316
+ npm config get prefix
317
+ ```
318
+
319
+ 2. 将输出路径添加到PATH环境变量
320
+
321
+ ### Node版本错误
322
+
323
+ ACIP CLI需要Node.js >= 18.0.0:
324
+
325
+ ```bash
326
+ # 检查Node版本
327
+ node --version
328
+
329
+ # 升级Node (使用nvm)
330
+ nvm install 18
331
+ nvm use 18
332
+ ```
333
+
334
+ ### 依赖安装失败
335
+
336
+ ```bash
337
+ # 清除缓存
338
+ npm cache clean --force
339
+
340
+ # 删除node_modules和package-lock.json
341
+ rm -rf node_modules package-lock.json
342
+
343
+ # 重新安装
344
+ npm install
345
+ ```
346
+
347
+ ## 贡献
348
+
349
+ 欢迎贡献! 请查看[贡献指南](../../CONTRIBUTING.md)。
350
+
351
+ ## 许可证
352
+
353
+ MIT © ACIP Team
354
+
355
+ ## 链接
356
+
357
+ - [ACIP文档](https://acip.dev/docs)
358
+ - [GitHub仓库](https://github.com/your-org/acip)
359
+ - [问题追踪](https://github.com/your-org/acip/issues)
360
+ - [更新日志](./CHANGELOG.md)
361
+
362
+ ## 支持
363
+
364
+ 如遇问题,请:
365
+ 1. 运行`acip doctor`诊断环境
366
+ 2. 查看[文档](https://acip.dev/docs)
367
+ 3. 搜索或提交[Issue](https://github.com/your-org/acip/issues)
368
+ 4. 加入[Discord社区](https://discord.gg/acip)
package/bin/acip.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ require('../dist/index.js');
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export default function callCommand(program: Command): void;
3
+ //# sourceMappingURL=call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD1D"}
@@ -0,0 +1,65 @@
1
+ import chalk from 'chalk';
2
+ import { NodeClient, NodeType, PriorityLevel } from '@acip/core';
3
+ export default function callCommand(program) {
4
+ program
5
+ .command('call <deviceId> <target> <action>')
6
+ .description('Send an abstract control command to a node')
7
+ .option('-g, --gateway <url>', 'Gateway URL', 'ws://localhost:51000/acip-node/admin-panel/auth=')
8
+ .option('-p, --priority <level>', 'QoS Priority (critical_rt, high, normal, low, background)', 'normal')
9
+ .option('-m, --params <json>', 'Command parameters as JSON string', '{}')
10
+ .option('-j, --json', 'Output as JSON')
11
+ .action(async (deviceId, target, action, options) => {
12
+ console.log(chalk.blue(`[CLI] Connecting to Gateway at ${options.gateway}...`));
13
+ const client = new NodeClient({
14
+ nodeType: NodeType.AdminPanel,
15
+ nodeName: 'ACIP-CLI-Caller',
16
+ gatewayUrl: options.gateway || 'ws://localhost:51000/acip-node/admin-panel/auth='
17
+ });
18
+ try {
19
+ await client.connect();
20
+ console.log(chalk.green(`[CLI] Connected. Sending command to ${deviceId}: ${target}.${action}`));
21
+ // 解析参数
22
+ let params = {};
23
+ try {
24
+ params = JSON.parse(options.params || '{}');
25
+ }
26
+ catch (e) {
27
+ console.error(chalk.red(`[CLI] Error: Invalid JSON parameters: ${options.params}`));
28
+ process.exit(1);
29
+ }
30
+ // 映射优先级
31
+ const priority = mapPriority(options.priority || 'normal');
32
+ // 真实发送逻辑 (v1.2.0 基础设施化)
33
+ // 我们将 deviceId 作为 target 传递给网关,网关会根据 target 路由
34
+ const response = await client.sendCommand({
35
+ target: deviceId, // 路由目标
36
+ action: `${target}.${action}`, // 实际动作
37
+ params,
38
+ expiresAt: Date.now() + 10000, // 10 秒有效期
39
+ }, priority);
40
+ if (options.json) {
41
+ console.log(JSON.stringify(response, null, 2));
42
+ }
43
+ else {
44
+ console.log(chalk.bold.green(`[CLI] Command executed successfully!`));
45
+ console.log(chalk.dim(`[CLI] Response: ${JSON.stringify(response, null, 2)}`));
46
+ }
47
+ await client.disconnect();
48
+ }
49
+ catch (error) {
50
+ console.error(chalk.red(`[CLI] Error: ${error instanceof Error ? error.message : String(error)}`));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ }
55
+ function mapPriority(level) {
56
+ switch (level.toLowerCase()) {
57
+ case 'critical_rt': return PriorityLevel.CriticalRT;
58
+ case 'high': return PriorityLevel.High;
59
+ case 'normal': return PriorityLevel.Normal;
60
+ case 'low': return PriorityLevel.Low;
61
+ case 'background': return PriorityLevel.Background;
62
+ default: return PriorityLevel.Normal;
63
+ }
64
+ }
65
+ //# sourceMappingURL=call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export default function configCommand(program: Command): void;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgJ5D"}
@@ -0,0 +1,144 @@
1
+ import chalk from 'chalk';
2
+ import Conf from 'conf';
3
+ export default function configCommand(program) {
4
+ // 创建配置存储实例
5
+ const config = new Conf({
6
+ projectName: 'acip',
7
+ schema: {
8
+ apiKey: {
9
+ type: 'string'
10
+ },
11
+ defaultModel: {
12
+ type: 'string',
13
+ default: 'gpt-4'
14
+ },
15
+ telemetryEnabled: {
16
+ type: 'boolean',
17
+ default: true
18
+ },
19
+ // 用户自定义配置
20
+ userSettings: {
21
+ type: 'object',
22
+ default: {}
23
+ }
24
+ }
25
+ });
26
+ // Helper function to validate config key
27
+ function isValidConfigKey(key) {
28
+ return ['apiKey', 'defaultModel', 'telemetryEnabled', 'userSettings'].includes(key);
29
+ }
30
+ program
31
+ .command('config')
32
+ .description('Manage ACIP configuration')
33
+ .option('-g, --global', 'Use global configuration', false)
34
+ .action(async (options) => {
35
+ // 显示可用的配置命令帮助
36
+ console.log(chalk.blue('ACIP Configuration Management\n'));
37
+ console.log('Usage:');
38
+ console.log(' acip config get <key> Get a configuration value');
39
+ console.log(' acip config set <key> <value> Set a configuration value');
40
+ console.log(' acip config list List all configuration values');
41
+ console.log(' acip config delete <key> Delete a configuration value\n');
42
+ console.log('Examples:');
43
+ console.log(' acip config get apiKey');
44
+ console.log(' acip config set defaultModel gpt-4');
45
+ console.log(' acip config list');
46
+ console.log(' acip config delete telemetryEnabled\n');
47
+ console.log(chalk.dim('Use --global (-g) flag to access global configuration'));
48
+ });
49
+ // 获取配置
50
+ program
51
+ .command('config:get <key>')
52
+ .description('Get a configuration value')
53
+ .option('-g, --global', 'Use global configuration', false)
54
+ .action((key, options) => {
55
+ try {
56
+ if (!isValidConfigKey(key)) {
57
+ console.log(chalk.yellow(`Invalid configuration key: '${key}'`));
58
+ return;
59
+ }
60
+ const value = config.get(key);
61
+ if (value === undefined) {
62
+ console.log(chalk.yellow(`Configuration key '${key}' not found.`));
63
+ }
64
+ else {
65
+ if (typeof value === 'object') {
66
+ console.log(JSON.stringify(value, null, 2));
67
+ }
68
+ else {
69
+ console.log(value);
70
+ }
71
+ }
72
+ }
73
+ catch (error) {
74
+ console.error(chalk.red('Error reading configuration:'), error instanceof Error ? error.message : String(error));
75
+ }
76
+ });
77
+ // 设置配置
78
+ program
79
+ .command('config:set <key> <value>')
80
+ .description('Set a configuration value')
81
+ .option('-g, --global', 'Use global configuration', false)
82
+ .action((key, value, options) => {
83
+ try {
84
+ if (!isValidConfigKey(key)) {
85
+ console.log(chalk.yellow(`Invalid configuration key: '${key}'`));
86
+ return;
87
+ }
88
+ // 尝试解析为JSON,如果失败则保持为字符串
89
+ let parsedValue;
90
+ try {
91
+ parsedValue = JSON.parse(value);
92
+ }
93
+ catch (e) {
94
+ parsedValue = value;
95
+ }
96
+ config.set(key, parsedValue);
97
+ console.log(chalk.green(`Configuration '${key}' set successfully.`));
98
+ }
99
+ catch (error) {
100
+ console.error(chalk.red('Error setting configuration:'), error instanceof Error ? error.message : String(error));
101
+ }
102
+ });
103
+ // 列出所有配置
104
+ program
105
+ .command('config:list')
106
+ .description('List all configuration values')
107
+ .option('-g, --global', 'Use global configuration', false)
108
+ .action((options) => {
109
+ try {
110
+ const allConfig = config.store;
111
+ console.log(chalk.blue('Current Configuration:'));
112
+ console.log(JSON.stringify(allConfig, null, 2));
113
+ // 显示配置文件路径
114
+ console.log(chalk.dim(`\nConfiguration stored at: ${config.path}`));
115
+ }
116
+ catch (error) {
117
+ console.error(chalk.red('Error listing configuration:'), error instanceof Error ? error.message : String(error));
118
+ }
119
+ });
120
+ // 删除配置
121
+ program
122
+ .command('config:delete <key>')
123
+ .description('Delete a configuration value')
124
+ .option('-g, --global', 'Use global configuration', false)
125
+ .action((key, options) => {
126
+ try {
127
+ if (!isValidConfigKey(key)) {
128
+ console.log(chalk.yellow(`Invalid configuration key: '${key}'`));
129
+ return;
130
+ }
131
+ if (config.has(key)) {
132
+ config.delete(key);
133
+ console.log(chalk.green(`Configuration '${key}' deleted successfully.`));
134
+ }
135
+ else {
136
+ console.log(chalk.yellow(`Configuration key '${key}' not found.`));
137
+ }
138
+ }
139
+ catch (error) {
140
+ console.error(chalk.red('Error deleting configuration:'), error instanceof Error ? error.message : String(error));
141
+ }
142
+ });
143
+ }
144
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export default function deployCommand(program: Command): void;
3
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE5D"}