@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.
- package/README.md +368 -0
- package/bin/acip.js +3 -0
- package/dist/commands/call.d.ts +3 -0
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +65 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +144 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy.d.ts +3 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +280 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +3 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +218 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +289 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +80 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +69 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +118 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/monitor.d.ts +3 -0
- package/dist/commands/monitor.d.ts.map +1 -0
- package/dist/commands/monitor.js +51 -0
- package/dist/commands/monitor.js.map +1 -0
- package/dist/commands/new.d.ts +3 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +252 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/project.d.ts +13 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +149 -0
- package/dist/utils/project.js.map +1 -0
- package/package.json +87 -0
- package/templates/.env.example.template +9 -0
- package/templates/.gitignore.template +31 -0
- package/templates/README.md.template +33 -0
- package/templates/advanced/src/components/assistant.js.template +66 -0
- package/templates/advanced/src/components/assistant.ts.template +71 -0
- package/templates/advanced/src/index.js.template +45 -0
- package/templates/advanced/src/index.ts.template +45 -0
- package/templates/basic/src/config/index.js.template +28 -0
- package/templates/basic/src/config/index.ts.template +28 -0
- package/templates/basic/src/index.js.template +29 -0
- package/templates/basic/src/index.ts.template +29 -0
- package/templates/package.json.template +21 -0
- package/templates/tsconfig.json.template +17 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { NodeClient, NodeType, MessageType } from '@acip/core';
|
|
3
|
+
export default function monitorCommand(program) {
|
|
4
|
+
program
|
|
5
|
+
.command('monitor')
|
|
6
|
+
.description('Monitor real-time events from the ACIP infrastructure')
|
|
7
|
+
.option('-g, --gateway <url>', 'Gateway URL', 'ws://localhost:51000/acip-node/admin-panel/auth=')
|
|
8
|
+
.option('--fusion', 'Monitor rule engine fusion events', true)
|
|
9
|
+
.action(async (options) => {
|
|
10
|
+
console.log(chalk.blue(`[CLI] Connecting to Gateway at ${options.gateway}...`));
|
|
11
|
+
const client = new NodeClient({
|
|
12
|
+
nodeType: NodeType.AdminPanel,
|
|
13
|
+
nodeName: 'ACIP-CLI-Monitor',
|
|
14
|
+
gatewayUrl: options.gateway || 'ws://localhost:51000/acip-node/admin-panel/auth='
|
|
15
|
+
});
|
|
16
|
+
try {
|
|
17
|
+
await client.connect();
|
|
18
|
+
console.log(chalk.green(`[CLI] Connected. Monitoring events... (Press Ctrl+C to stop)`));
|
|
19
|
+
client.on('message', (message) => {
|
|
20
|
+
if (options.fusion && message.type === MessageType.FusionEvent) {
|
|
21
|
+
displayFusionEvent(message.data);
|
|
22
|
+
}
|
|
23
|
+
else if (message.type === MessageType.ReportInference) {
|
|
24
|
+
displayInferenceEvent(message.data);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
// 保持运行
|
|
28
|
+
process.on('SIGINT', async () => {
|
|
29
|
+
console.log(chalk.yellow('\n[CLI] Stopping monitor...'));
|
|
30
|
+
await client.disconnect();
|
|
31
|
+
process.exit(0);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error(chalk.red(`[CLI] Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function displayFusionEvent(data) {
|
|
41
|
+
const time = new Date(data.timestamp).toLocaleTimeString();
|
|
42
|
+
console.log(`${chalk.dim(`[${time}]`)} ${chalk.bold.magenta('⚡ FUSION MATCHED:')} ${chalk.white(data.ruleName)}`);
|
|
43
|
+
console.log(` ${chalk.dim('├─ Rule ID:')} ${data.ruleId}`);
|
|
44
|
+
console.log(` ${chalk.dim('├─ Modalities:')} ${chalk.cyan(data.matchedModalities.join(' + '))}`);
|
|
45
|
+
console.log(` ${chalk.dim('└─ Action:')} ${chalk.yellow(`${data.action.target}.${data.action.action}`)}`);
|
|
46
|
+
}
|
|
47
|
+
function displayInferenceEvent(data) {
|
|
48
|
+
const time = new Date(data.timestamp).toLocaleTimeString();
|
|
49
|
+
console.log(`${chalk.dim(`[${time}]`)} ${chalk.blue('ℹ INFERENCE:')} ${chalk.cyan(data.modality)} from ${chalk.white(data.modelName)} (Conf: ${data.confidence.toFixed(2)})`);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyKpC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkGzD"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
// 可创建的资源类型
|
|
6
|
+
const RESOURCE_TYPES = ['component', 'model', 'tool', 'config'];
|
|
7
|
+
// 资源模板内容
|
|
8
|
+
const TEMPLATES = {
|
|
9
|
+
component: (name, isTs) => {
|
|
10
|
+
const typeAnnotation = isTs ? ': any' : '';
|
|
11
|
+
return `/**
|
|
12
|
+
* ${name} Component
|
|
13
|
+
*/
|
|
14
|
+
${isTs ? 'import { ACIP } from \'@acip/sdk\';\n\n' : ''}export function ${name}(props${typeAnnotation}) {
|
|
15
|
+
// 组件实现
|
|
16
|
+
return {
|
|
17
|
+
name: '${name}',
|
|
18
|
+
|
|
19
|
+
// 组件方法
|
|
20
|
+
async initialize() {
|
|
21
|
+
// 初始化逻辑
|
|
22
|
+
return true;
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
async process(input${typeAnnotation}) {
|
|
26
|
+
// 处理输入
|
|
27
|
+
return {
|
|
28
|
+
result: 'Processed by ${name}'
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
`;
|
|
34
|
+
},
|
|
35
|
+
model: (name, isTs) => {
|
|
36
|
+
return `/**
|
|
37
|
+
* ${name} Model
|
|
38
|
+
*/
|
|
39
|
+
${isTs ? 'import { ModelConfig } from \'@acip/sdk\';\n\n' : ''}${isTs ? `interface ${name}Props {
|
|
40
|
+
apiKey?: string;
|
|
41
|
+
baseUrl?: string;
|
|
42
|
+
version?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
` : ''}export const ${name}Model = {
|
|
46
|
+
name: '${name}',
|
|
47
|
+
|
|
48
|
+
// 模型配置
|
|
49
|
+
${isTs ? `config${isTs ? ': ModelConfig' : ''} = ` : 'config: '}{
|
|
50
|
+
provider: '${name.toLowerCase()}',
|
|
51
|
+
supportedFeatures: ['text-generation', 'embeddings'],
|
|
52
|
+
maxTokens: 8192,
|
|
53
|
+
inputCostPer1KTokens: 0.01,
|
|
54
|
+
outputCostPer1KTokens: 0.03
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
// 创建客户端
|
|
58
|
+
createClient(${isTs ? 'props: ' + name + 'Props' : 'props'}) {
|
|
59
|
+
const { apiKey, baseUrl = 'https://api.example.com', version = 'v1' } = props;
|
|
60
|
+
|
|
61
|
+
// 在这里初始化与该模型提供商的API客户端
|
|
62
|
+
return {
|
|
63
|
+
// 客户端方法
|
|
64
|
+
generate: async (prompt${isTs ? ': string' : ''}) => {
|
|
65
|
+
// 实现生成逻辑
|
|
66
|
+
console.log(\`Calling ${name} API with prompt: \${prompt}\`);
|
|
67
|
+
return { text: 'Generated response from ${name}' };
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
getEmbedding: async (text${isTs ? ': string' : ''}) => {
|
|
71
|
+
// 实现嵌入逻辑
|
|
72
|
+
return [0.1, 0.2, 0.3, 0.4]; // 示例嵌入
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
`;
|
|
78
|
+
},
|
|
79
|
+
tool: (name, isTs) => {
|
|
80
|
+
return `/**
|
|
81
|
+
* ${name} Tool
|
|
82
|
+
*/
|
|
83
|
+
${isTs ? 'import { ToolDefinition } from \'@acip/sdk\';\n\n' : ''}export const ${name.charAt(0).toLowerCase() + name.slice(1)}Tool = ${isTs ? 'ToolDefinition = ' : ''}{
|
|
84
|
+
name: '${name.charAt(0).toLowerCase() + name.slice(1)}',
|
|
85
|
+
description: 'A tool for ${name}',
|
|
86
|
+
parameters: {
|
|
87
|
+
type: 'object',
|
|
88
|
+
properties: {
|
|
89
|
+
query: {
|
|
90
|
+
type: 'string',
|
|
91
|
+
description: 'The query to process'
|
|
92
|
+
},
|
|
93
|
+
options: {
|
|
94
|
+
type: 'object',
|
|
95
|
+
description: 'Additional options',
|
|
96
|
+
properties: {
|
|
97
|
+
maxResults: {
|
|
98
|
+
type: 'number',
|
|
99
|
+
description: 'Maximum number of results to return'
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
required: ['query']
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
// Tool handler implementation
|
|
108
|
+
async handler(params${isTs ? ': { query: string; options?: { maxResults?: number } }' : ''}) {
|
|
109
|
+
const { query, options = {} } = params;
|
|
110
|
+
const { maxResults = 5 } = options;
|
|
111
|
+
|
|
112
|
+
console.log(\`Processing query "\${query}" with ${name} tool\`);
|
|
113
|
+
|
|
114
|
+
// 实现工具逻辑
|
|
115
|
+
const results = [
|
|
116
|
+
{ id: 1, title: 'Result 1 for ' + query },
|
|
117
|
+
{ id: 2, title: 'Result 2 for ' + query },
|
|
118
|
+
{ id: 3, title: 'Result 3 for ' + query }
|
|
119
|
+
].slice(0, maxResults);
|
|
120
|
+
|
|
121
|
+
return {
|
|
122
|
+
results,
|
|
123
|
+
count: results.length,
|
|
124
|
+
processed: query
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
`;
|
|
129
|
+
},
|
|
130
|
+
config: (name, isTs) => {
|
|
131
|
+
const typeAnnotation = isTs ? ': Record<string, any>' : '';
|
|
132
|
+
return `/**
|
|
133
|
+
* ${name} Configuration
|
|
134
|
+
*/
|
|
135
|
+
export const ${name.charAt(0).toLowerCase() + name.slice(1)}Config${typeAnnotation} = {
|
|
136
|
+
// 配置值
|
|
137
|
+
enabled: true,
|
|
138
|
+
timeout: 30000,
|
|
139
|
+
retryAttempts: 3,
|
|
140
|
+
|
|
141
|
+
// 环境特定配置
|
|
142
|
+
development: {
|
|
143
|
+
debug: true,
|
|
144
|
+
logLevel: 'verbose'
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
production: {
|
|
148
|
+
debug: false,
|
|
149
|
+
logLevel: 'error'
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
// 获取当前环境配置
|
|
153
|
+
getEnvConfig() {
|
|
154
|
+
const env = process.env.NODE_ENV || 'development';
|
|
155
|
+
return this[env] || this.development;
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
`;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
export default function newCommand(program) {
|
|
162
|
+
program
|
|
163
|
+
.command('new <type> [name]')
|
|
164
|
+
.description('Create a new resource (component, model, tool, config)')
|
|
165
|
+
.option('-d, --directory <dir>', 'Target directory', '')
|
|
166
|
+
.option('--ts', 'Use TypeScript (default)', true)
|
|
167
|
+
.option('--js', 'Use JavaScript instead of TypeScript')
|
|
168
|
+
.action(async (type, name, options) => {
|
|
169
|
+
// 验证资源类型
|
|
170
|
+
if (!RESOURCE_TYPES.includes(type)) {
|
|
171
|
+
console.error(chalk.red(`Error: Invalid resource type '${type}'.`));
|
|
172
|
+
console.log(`Available types: ${RESOURCE_TYPES.join(', ')}`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// 如果没有提供名称,提示用户输入
|
|
176
|
+
if (!name) {
|
|
177
|
+
const answers = await inquirer.prompt([
|
|
178
|
+
{
|
|
179
|
+
type: 'input',
|
|
180
|
+
name: 'name',
|
|
181
|
+
message: `What is the name of your ${type}?`,
|
|
182
|
+
validate: (input) => {
|
|
183
|
+
if (/^[A-Z][a-zA-Z0-9]*$/.test(input))
|
|
184
|
+
return true;
|
|
185
|
+
return 'Name must start with an uppercase letter and contain only alphanumeric characters.';
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
]);
|
|
189
|
+
name = answers.name;
|
|
190
|
+
}
|
|
191
|
+
// 使用TypeScript还是JavaScript
|
|
192
|
+
const useTypeScript = options.js ? false : options.ts;
|
|
193
|
+
const fileExt = useTypeScript ? 'ts' : 'js';
|
|
194
|
+
// 确定目标目录
|
|
195
|
+
let targetDir;
|
|
196
|
+
if (options.directory) {
|
|
197
|
+
targetDir = path.resolve(process.cwd(), options.directory);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
// 默认目录逻辑
|
|
201
|
+
const srcDir = path.resolve(process.cwd(), 'src');
|
|
202
|
+
if (fs.existsSync(srcDir)) {
|
|
203
|
+
const typeDirs = {
|
|
204
|
+
component: 'components',
|
|
205
|
+
model: 'models',
|
|
206
|
+
tool: 'tools',
|
|
207
|
+
config: 'config'
|
|
208
|
+
};
|
|
209
|
+
targetDir = path.join(srcDir, typeDirs[type] || '');
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
targetDir = process.cwd();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// 确保目录存在
|
|
216
|
+
fs.ensureDirSync(targetDir);
|
|
217
|
+
// 生成文件名
|
|
218
|
+
const fileName = `${name}.${fileExt}`;
|
|
219
|
+
const filePath = path.join(targetDir, fileName);
|
|
220
|
+
// 检查文件是否已存在
|
|
221
|
+
if (fs.existsSync(filePath)) {
|
|
222
|
+
const { overwrite } = await inquirer.prompt([
|
|
223
|
+
{
|
|
224
|
+
type: 'confirm',
|
|
225
|
+
name: 'overwrite',
|
|
226
|
+
message: `${fileName} already exists. Do you want to overwrite it?`,
|
|
227
|
+
default: false
|
|
228
|
+
}
|
|
229
|
+
]);
|
|
230
|
+
if (!overwrite) {
|
|
231
|
+
console.log(chalk.yellow('Operation cancelled.'));
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// 获取模板内容
|
|
236
|
+
const template = TEMPLATES[type];
|
|
237
|
+
if (!template) {
|
|
238
|
+
console.error(chalk.red(`Error: Template for ${type} not found.`));
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const content = template(name, useTypeScript);
|
|
242
|
+
// 写入文件
|
|
243
|
+
try {
|
|
244
|
+
fs.writeFileSync(filePath, content);
|
|
245
|
+
console.log(chalk.green(`Successfully created ${type}: ${chalk.bold(filePath)}`));
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error(chalk.red('Error creating file:'), error);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import updateNotifier from 'update-notifier';
|
|
5
|
+
import boxen from 'boxen';
|
|
6
|
+
import { readFileSync } from 'fs';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { dirname, join } from 'path';
|
|
9
|
+
// 获取当前文件路径
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
// 读取package.json
|
|
13
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
|
|
14
|
+
// 导入命令
|
|
15
|
+
import initCommand from './commands/init.js';
|
|
16
|
+
import newCommand from './commands/new.js';
|
|
17
|
+
import configCommand from './commands/config.js';
|
|
18
|
+
import devCommand from './commands/dev.js';
|
|
19
|
+
import deployCommand from './commands/deploy.js';
|
|
20
|
+
import doctorCommand from './commands/doctor.js';
|
|
21
|
+
import listCommand from './commands/list.js';
|
|
22
|
+
import inspectCommand from './commands/inspect.js';
|
|
23
|
+
import callCommand from './commands/call.js';
|
|
24
|
+
import monitorCommand from './commands/monitor.js';
|
|
25
|
+
// 检查更新
|
|
26
|
+
const notifier = updateNotifier({ pkg });
|
|
27
|
+
if (notifier.update) {
|
|
28
|
+
console.log(boxen(`${chalk.bold('Update available!')} ${chalk.dim(notifier.update.current)} → ${chalk.green(notifier.update.latest)}\nRun ${chalk.cyan(`npm i -g @acip/cli`)} to update`, {
|
|
29
|
+
padding: 1,
|
|
30
|
+
margin: 1,
|
|
31
|
+
align: 'center',
|
|
32
|
+
borderColor: 'yellow',
|
|
33
|
+
borderStyle: 'round',
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
// 创建程序实例
|
|
37
|
+
const program = new Command();
|
|
38
|
+
// 设置版本和描述
|
|
39
|
+
program
|
|
40
|
+
.name('acip')
|
|
41
|
+
.description('ACIP CLI - Command Line Interface for Adaptive Contextual Intelligence Protocol')
|
|
42
|
+
.version(pkg.version, '-v, --version', 'Output the current version');
|
|
43
|
+
// 注册命令
|
|
44
|
+
initCommand(program);
|
|
45
|
+
newCommand(program);
|
|
46
|
+
configCommand(program);
|
|
47
|
+
devCommand(program);
|
|
48
|
+
deployCommand(program);
|
|
49
|
+
doctorCommand(program);
|
|
50
|
+
listCommand(program);
|
|
51
|
+
inspectCommand(program);
|
|
52
|
+
callCommand(program);
|
|
53
|
+
monitorCommand(program);
|
|
54
|
+
// 添加帮助信息
|
|
55
|
+
program.on('--help', () => {
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log('Examples:');
|
|
58
|
+
console.log(' $ acip init my-acip-project');
|
|
59
|
+
console.log(' $ acip new component MyComponent');
|
|
60
|
+
console.log(' $ acip config set apiKey YOUR_API_KEY');
|
|
61
|
+
console.log(' $ acip dev');
|
|
62
|
+
console.log(' $ acip deploy');
|
|
63
|
+
console.log(' $ acip inspect device-001');
|
|
64
|
+
console.log(' $ acip call device-001 motor move --priority high --params \'{"x": 10, "y": 20}\'');
|
|
65
|
+
});
|
|
66
|
+
// 解析参数并执行
|
|
67
|
+
program.parse(process.argv);
|
|
68
|
+
// 如果没有提供参数,显示帮助
|
|
69
|
+
if (!process.argv.slice(2).length) {
|
|
70
|
+
console.log(boxen(`${chalk.bold.blue('ACIP CLI')} ${chalk.dim('v' + pkg.version)}\n${chalk.dim('Adaptive Contextual Intelligence Protocol')}\n\n${chalk.yellow('Type `acip --help` to see available commands')}`, {
|
|
71
|
+
padding: 1,
|
|
72
|
+
margin: 1,
|
|
73
|
+
align: 'center',
|
|
74
|
+
borderColor: 'blue',
|
|
75
|
+
borderStyle: 'round',
|
|
76
|
+
}));
|
|
77
|
+
process.exit(0);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface ProjectOptions {
|
|
2
|
+
projectPath: string;
|
|
3
|
+
template: string;
|
|
4
|
+
useTypeScript: boolean;
|
|
5
|
+
projectName: string;
|
|
6
|
+
force?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 创建项目结构
|
|
10
|
+
*/
|
|
11
|
+
export declare function createProjectStructure(options: ProjectOptions): Promise<void>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsFnF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname } from 'path';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
/**
|
|
9
|
+
* 创建项目结构
|
|
10
|
+
*/
|
|
11
|
+
export async function createProjectStructure(options) {
|
|
12
|
+
const { projectPath, template, useTypeScript, projectName } = options;
|
|
13
|
+
// 确保目录存在
|
|
14
|
+
fs.ensureDirSync(projectPath);
|
|
15
|
+
// 创建基本目录结构
|
|
16
|
+
const directories = [
|
|
17
|
+
'src',
|
|
18
|
+
'src/components',
|
|
19
|
+
'src/models',
|
|
20
|
+
'src/utils',
|
|
21
|
+
'src/config',
|
|
22
|
+
'public',
|
|
23
|
+
'tests'
|
|
24
|
+
];
|
|
25
|
+
for (const dir of directories) {
|
|
26
|
+
fs.ensureDirSync(path.join(projectPath, dir));
|
|
27
|
+
}
|
|
28
|
+
// 使用模板系统创建文件
|
|
29
|
+
const templatesDir = path.join(__dirname, '../../templates');
|
|
30
|
+
// 创建package.json
|
|
31
|
+
const devDeps = useTypeScript ? {
|
|
32
|
+
'typescript': '^5.1.6',
|
|
33
|
+
'@types/node': '^20.4.2',
|
|
34
|
+
'ts-node': '^10.9.1'
|
|
35
|
+
} : {};
|
|
36
|
+
const packageJson = {
|
|
37
|
+
name: projectName,
|
|
38
|
+
version: '0.1.0',
|
|
39
|
+
description: 'An ACIP (Adaptive Contextual Intelligence Protocol) project',
|
|
40
|
+
main: useTypeScript ? 'dist/index.js' : 'src/index.js',
|
|
41
|
+
type: 'module',
|
|
42
|
+
scripts: {
|
|
43
|
+
start: useTypeScript ? 'node dist/index.js' : 'node src/index.js',
|
|
44
|
+
dev: useTypeScript ? 'ts-node src/index.ts' : 'node src/index.js',
|
|
45
|
+
build: useTypeScript ? 'tsc' : 'echo "No build step required"',
|
|
46
|
+
test: 'echo "Error: no test specified" && exit 1'
|
|
47
|
+
},
|
|
48
|
+
keywords: ['acip', 'ai', 'contextual-intelligence'],
|
|
49
|
+
author: '',
|
|
50
|
+
license: 'MIT',
|
|
51
|
+
dependencies: {
|
|
52
|
+
'@acip/sdk': '^0.1.0',
|
|
53
|
+
'dotenv': '^16.3.1'
|
|
54
|
+
},
|
|
55
|
+
devDependencies: devDeps
|
|
56
|
+
};
|
|
57
|
+
await fs.writeJson(path.join(projectPath, 'package.json'), packageJson, { spaces: 2 });
|
|
58
|
+
// 创建README.md
|
|
59
|
+
await createFileFromTemplate(path.join(templatesDir, 'README.md.template'), path.join(projectPath, 'README.md'), { projectName });
|
|
60
|
+
// 创建.gitignore
|
|
61
|
+
await fs.copy(path.join(templatesDir, '.gitignore.template'), path.join(projectPath, '.gitignore'));
|
|
62
|
+
// 创建TypeScript配置
|
|
63
|
+
if (useTypeScript) {
|
|
64
|
+
await fs.copy(path.join(templatesDir, 'tsconfig.json.template'), path.join(projectPath, 'tsconfig.json'));
|
|
65
|
+
}
|
|
66
|
+
// 创建.env.example
|
|
67
|
+
await fs.copy(path.join(templatesDir, '.env.example.template'), path.join(projectPath, '.env.example'));
|
|
68
|
+
// 根据模板创建示例文件
|
|
69
|
+
await createTemplateFiles(projectPath, template, useTypeScript, templatesDir);
|
|
70
|
+
console.log(chalk.green('\nProject structure created successfully!'));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 从模板创建文件并替换占位符
|
|
74
|
+
*/
|
|
75
|
+
async function createFileFromTemplate(templatePath, targetPath, replacements) {
|
|
76
|
+
let content = await fs.readFile(templatePath, 'utf-8');
|
|
77
|
+
// 替换所有占位符
|
|
78
|
+
for (const [key, value] of Object.entries(replacements)) {
|
|
79
|
+
const placeholder = `{{${key}}}`;
|
|
80
|
+
content = content.replace(new RegExp(placeholder, 'g'), value);
|
|
81
|
+
}
|
|
82
|
+
await fs.writeFile(targetPath, content);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 根据模板创建示例文件
|
|
86
|
+
*/
|
|
87
|
+
async function createTemplateFiles(projectPath, template, useTypeScript, templatesDir) {
|
|
88
|
+
const fileExt = useTypeScript ? 'ts' : 'js';
|
|
89
|
+
const srcDir = path.join(projectPath, 'src');
|
|
90
|
+
const templateDir = path.join(templatesDir, template);
|
|
91
|
+
// 创建入口文件
|
|
92
|
+
const indexTemplatePath = path.join(templateDir, 'src', `index.${fileExt}.template`);
|
|
93
|
+
if (await fs.pathExists(indexTemplatePath)) {
|
|
94
|
+
await fs.copy(indexTemplatePath, path.join(srcDir, `index.${fileExt}`));
|
|
95
|
+
}
|
|
96
|
+
// 创建配置文件
|
|
97
|
+
const configTemplatePath = path.join(templateDir, 'src', 'config', `index.${fileExt}.template`);
|
|
98
|
+
if (await fs.pathExists(configTemplatePath)) {
|
|
99
|
+
await fs.copy(configTemplatePath, path.join(srcDir, 'config', `index.${fileExt}`));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// 如果模板不存在,使用默认配置
|
|
103
|
+
const configContent = createConfigFile(useTypeScript);
|
|
104
|
+
await fs.writeFile(path.join(srcDir, 'config', `index.${fileExt}`), configContent);
|
|
105
|
+
}
|
|
106
|
+
// 对于advanced模板,创建assistant组件
|
|
107
|
+
if (template === 'advanced') {
|
|
108
|
+
const assistantTemplatePath = path.join(templateDir, 'src', 'components', `assistant.${fileExt}.template`);
|
|
109
|
+
if (await fs.pathExists(assistantTemplatePath)) {
|
|
110
|
+
await fs.copy(assistantTemplatePath, path.join(srcDir, 'components', `assistant.${fileExt}`));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 创建配置文件内容(后备方案)
|
|
116
|
+
*/
|
|
117
|
+
function createConfigFile(useTypeScript) {
|
|
118
|
+
const typeAnnotation = useTypeScript ? ': Record<string, any>' : '';
|
|
119
|
+
return `// 应用配置
|
|
120
|
+
export const appConfig${typeAnnotation} = {
|
|
121
|
+
name: 'ACIP Example App',
|
|
122
|
+
version: '0.1.0',
|
|
123
|
+
description: 'An example application using ACIP SDK',
|
|
124
|
+
port: process.env.APP_PORT || 3000,
|
|
125
|
+
environment: process.env.NODE_ENV || 'development'
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// AI模型配置
|
|
129
|
+
export const modelConfig${typeAnnotation} = {
|
|
130
|
+
defaultModelId: process.env.DEFAULT_MODEL_ID || 'gpt-4',
|
|
131
|
+
fallbackModelId: 'gpt-3.5-turbo',
|
|
132
|
+
maxTokens: 8192,
|
|
133
|
+
temperature: 0.7,
|
|
134
|
+
topP: 1,
|
|
135
|
+
cacheEnabled: true,
|
|
136
|
+
cacheTTL: 3600 // 1小时
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// 安全配置
|
|
140
|
+
export const securityConfig${typeAnnotation} = {
|
|
141
|
+
contentModerationEnabled: true,
|
|
142
|
+
rateLimit: {
|
|
143
|
+
windowMs: 15 * 60 * 1000, // 15分钟
|
|
144
|
+
max: 100 // 每个IP限制请求数
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
`;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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"}
|