shipmyagent 1.0.2 → 1.0.19
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 +6 -0
- package/bin/cli.js +34 -0
- package/bin/cli.js.map +1 -0
- package/bin/commands/init.d.ts.map +1 -0
- package/bin/commands/init.js +199 -0
- package/bin/commands/init.js.map +1 -0
- package/bin/commands/start.d.ts.map +1 -0
- package/bin/commands/start.js +220 -0
- package/bin/commands/start.js.map +1 -0
- package/bin/index.js +4 -0
- package/bin/index.js.map +1 -0
- package/bin/integrations/feishu.d.ts.map +1 -0
- package/bin/integrations/feishu.js +654 -0
- package/bin/integrations/feishu.js.map +1 -0
- package/bin/integrations/qq.d.ts.map +1 -0
- package/bin/integrations/qq.js +712 -0
- package/bin/integrations/qq.js.map +1 -0
- package/bin/integrations/telegram.d.ts.map +1 -0
- package/bin/integrations/telegram.js +876 -0
- package/bin/integrations/telegram.js.map +1 -0
- package/bin/runtime/agent.d.ts.map +1 -0
- package/bin/runtime/agent.js +1653 -0
- package/bin/runtime/agent.js.map +1 -0
- package/bin/runtime/chat-store.d.ts.map +1 -0
- package/bin/runtime/chat-store.js +84 -0
- package/bin/runtime/chat-store.js.map +1 -0
- package/bin/runtime/index.d.ts.map +1 -0
- package/bin/runtime/index.js +7 -0
- package/bin/runtime/index.js.map +1 -0
- package/bin/runtime/logger.d.ts.map +1 -0
- package/bin/runtime/logger.js +103 -0
- package/bin/runtime/logger.js.map +1 -0
- package/bin/runtime/permission.d.ts.map +1 -0
- package/bin/runtime/permission.js +373 -0
- package/bin/runtime/permission.js.map +1 -0
- package/bin/runtime/run-manager.d.ts.map +1 -0
- package/bin/runtime/run-manager.js +41 -0
- package/bin/runtime/run-manager.js.map +1 -0
- package/bin/runtime/run-queue.d.ts.map +1 -0
- package/bin/runtime/run-queue.js +54 -0
- package/bin/runtime/run-queue.js.map +1 -0
- package/bin/runtime/run-store.d.ts.map +1 -0
- package/bin/runtime/run-store.js +39 -0
- package/bin/runtime/run-store.js.map +1 -0
- package/bin/runtime/run-types.d.ts.map +1 -0
- package/bin/runtime/run-types.js +2 -0
- package/bin/runtime/run-types.js.map +1 -0
- package/bin/runtime/run-worker.d.ts.map +1 -0
- package/bin/runtime/run-worker.js +122 -0
- package/bin/runtime/run-worker.js.map +1 -0
- package/bin/runtime/scheduler.d.ts.map +1 -0
- package/bin/runtime/scheduler.js +150 -0
- package/bin/runtime/scheduler.js.map +1 -0
- package/bin/runtime/ship-prompts.d.ts.map +1 -0
- package/bin/runtime/ship-prompts.js +31 -0
- package/bin/runtime/ship-prompts.js.map +1 -0
- package/bin/runtime/task-executor.d.ts.map +1 -0
- package/bin/runtime/task-executor.js +114 -0
- package/bin/runtime/task-executor.js.map +1 -0
- package/bin/runtime/tools.d.ts.map +1 -0
- package/bin/runtime/tools.js +299 -0
- package/bin/runtime/tools.js.map +1 -0
- package/bin/server/index.d.ts.map +1 -0
- package/bin/server/index.js +202 -0
- package/bin/server/index.js.map +1 -0
- package/bin/server/interactive.d.ts.map +1 -0
- package/bin/server/interactive.js +232 -0
- package/bin/server/interactive.js.map +1 -0
- package/bin/utils.d.ts.map +1 -0
- package/bin/utils.js +366 -0
- package/bin/utils.js.map +1 -0
- package/package.json +57 -20
- package/public/app.js +510 -0
- package/public/index.html +121 -0
- package/public/styles.css +786 -0
- package/scripts/ensure-sma-bin.mjs +48 -0
- package/dist/cli.d.ts +0 -3
- package/dist/cli.js +0 -8
- package/dist/cli.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -7
- package/dist/index.js.map +0 -1
- /package/{dist → bin}/cli.d.ts.map +0 -0
- /package/{dist → bin}/index.d.ts.map +0 -0
package/README.md
CHANGED
package/bin/cli.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { initCommand } from "./commands/init.js";
|
|
4
|
+
import { startCommand } from "./commands/start.js";
|
|
5
|
+
import { readFileSync } from "fs";
|
|
6
|
+
import { join, dirname, basename } from "path";
|
|
7
|
+
import { fileURLToPath } from "url";
|
|
8
|
+
// 在 ES 模块中获取 __dirname
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
// 动态读取版本号
|
|
12
|
+
const packageJson = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
|
|
13
|
+
const program = new Command();
|
|
14
|
+
program
|
|
15
|
+
.name(basename(process.argv[1] || "shipmyagent"))
|
|
16
|
+
.description("把一个代码仓库,启动成一个可对话、可调度、可审计的 Agent Runtime")
|
|
17
|
+
.version(packageJson.version);
|
|
18
|
+
// Init command
|
|
19
|
+
program
|
|
20
|
+
.command("init [path]")
|
|
21
|
+
.description("初始化 ShipMyAgent 项目")
|
|
22
|
+
.action(initCommand);
|
|
23
|
+
// Start command
|
|
24
|
+
program
|
|
25
|
+
.command("start [path]")
|
|
26
|
+
.description("启动 Agent Runtime")
|
|
27
|
+
.option("-p, --port <port>", "服务端口", "3000")
|
|
28
|
+
.option("-h, --host <host>", "服务主机", "0.0.0.0")
|
|
29
|
+
.option("--interactive-web", "启动交互式 Web 界面", false)
|
|
30
|
+
.option("--interactive-port <port>", "交互式 Web 界面端口", "3001")
|
|
31
|
+
.action(startCommand);
|
|
32
|
+
// Default: start current directory
|
|
33
|
+
program.parse();
|
|
34
|
+
//# sourceMappingURL=cli.js.map
|
package/bin/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,uBAAuB;AACvB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,UAAU;AACV,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;KAChD,WAAW,CACV,yCAAyC,CAC1C;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,SAAS,CAAC;KAC9C,MAAM,CAAC,mBAAmB,EAAE,cAAc,EAAE,KAAK,CAAC;KAClD,MAAM,CAAC,2BAA2B,EAAE,cAAc,EAAE,MAAM,CAAC;KAC3D,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,mCAAmC;AACnC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAsBA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,GAAG,GAAE,MAAY,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8M7F"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import prompts from 'prompts';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import { getAgentMdPath, getShipJsonPath, getShipDirPath, getTasksDirPath, getRunsDirPath, getQueueDirPath, getRoutesDirPath, getApprovalsDirPath, getLogsDirPath, getCacheDirPath, getChatsDirPath, ensureDir, saveJson, DEFAULT_SHIP_JSON, MODEL_CONFIGS, } from '../utils.js';
|
|
5
|
+
export async function initCommand(cwd = '.', options = {}) {
|
|
6
|
+
const projectRoot = path.resolve(cwd);
|
|
7
|
+
const LLM_API_KEY = '${LLM_API_KEY}';
|
|
8
|
+
const LLM_BASE_URL = '${LLM_BASE_URL}';
|
|
9
|
+
const LLM_MODEL = '${LLM_MODEL}';
|
|
10
|
+
const TELEGRAM_BOT_TOKEN = '${TELEGRAM_BOT_TOKEN}';
|
|
11
|
+
const FEISHU_APP_ID = '${FEISHU_APP_ID}';
|
|
12
|
+
const FEISHU_APP_SECRET = '${FEISHU_APP_SECRET}';
|
|
13
|
+
console.log(`🚀 Initializing ShipMyAgent project: ${projectRoot}`);
|
|
14
|
+
// Check if Agent.md and ship.json already exist
|
|
15
|
+
const existingAgentMd = fs.existsSync(getAgentMdPath(projectRoot));
|
|
16
|
+
const existingShipJson = fs.existsSync(getShipJsonPath(projectRoot));
|
|
17
|
+
if (existingAgentMd || existingShipJson) {
|
|
18
|
+
if (!options.force) {
|
|
19
|
+
const response = await prompts({
|
|
20
|
+
type: 'confirm',
|
|
21
|
+
name: 'overwrite',
|
|
22
|
+
message: 'Project already initialized. Overwrite existing configuration?',
|
|
23
|
+
initial: false,
|
|
24
|
+
});
|
|
25
|
+
if (!response.overwrite) {
|
|
26
|
+
console.log('❌ Initialization cancelled');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Collect configuration information
|
|
32
|
+
const response = await prompts([
|
|
33
|
+
{
|
|
34
|
+
type: 'text',
|
|
35
|
+
name: 'name',
|
|
36
|
+
message: 'Agent name',
|
|
37
|
+
initial: path.basename(projectRoot),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'select',
|
|
41
|
+
name: 'model',
|
|
42
|
+
message: 'Select LLM model',
|
|
43
|
+
choices: [
|
|
44
|
+
{ title: 'Claude Sonnet 4', value: 'claude-sonnet-4-5' },
|
|
45
|
+
{ title: 'Claude Haiku', value: 'claude-haiku' },
|
|
46
|
+
{ title: 'Claude 3.5 Sonnet', value: 'claude-3-5-sonnet-20241022' },
|
|
47
|
+
{ title: 'Claude 3 Opus', value: 'claude-3-opus-20240229' },
|
|
48
|
+
{ title: 'GPT-4', value: 'gpt-4' },
|
|
49
|
+
{ title: 'GPT-4 Turbo', value: 'gpt-4-turbo' },
|
|
50
|
+
{ title: 'GPT-4o', value: 'gpt-4o' },
|
|
51
|
+
{ title: 'GPT-3.5 Turbo', value: 'gpt-3.5-turbo' },
|
|
52
|
+
{ title: 'DeepSeek Chat', value: 'deepseek-chat' },
|
|
53
|
+
{ title: 'Custom model', value: 'custom' },
|
|
54
|
+
],
|
|
55
|
+
initial: 0,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'select',
|
|
59
|
+
name: 'integration',
|
|
60
|
+
message: 'Select messaging integration',
|
|
61
|
+
choices: [
|
|
62
|
+
{ title: 'None', value: 'none' },
|
|
63
|
+
{ title: 'Telegram', value: 'telegram' },
|
|
64
|
+
{ title: 'Feishu', value: 'feishu' },
|
|
65
|
+
{ title: 'QQ', value: 'qq' },
|
|
66
|
+
],
|
|
67
|
+
initial: 0,
|
|
68
|
+
},
|
|
69
|
+
]);
|
|
70
|
+
// Create configuration files
|
|
71
|
+
const agentMdPath = getAgentMdPath(projectRoot);
|
|
72
|
+
const shipJsonPath = getShipJsonPath(projectRoot);
|
|
73
|
+
// Save Agent.md (default user identity definition)
|
|
74
|
+
const defaultAgentMd = `# Agent Role
|
|
75
|
+
|
|
76
|
+
You are a helpful project assistant.
|
|
77
|
+
|
|
78
|
+
## Your Purpose
|
|
79
|
+
|
|
80
|
+
Help users understand and work with their codebase by exploring, analyzing, and providing insights.
|
|
81
|
+
|
|
82
|
+
## Your Approach
|
|
83
|
+
|
|
84
|
+
- Read and analyze code to answer questions
|
|
85
|
+
- Provide specific, actionable guidance
|
|
86
|
+
- Explain what you find in the project
|
|
87
|
+
- Only modify files when explicitly requested
|
|
88
|
+
`;
|
|
89
|
+
await fs.writeFile(agentMdPath, defaultAgentMd);
|
|
90
|
+
console.log(`✅ Created Agent.md`);
|
|
91
|
+
// Save ship.json
|
|
92
|
+
// Build LLM configuration
|
|
93
|
+
const selectedModel = response.model || 'claude-sonnet-4-5';
|
|
94
|
+
const modelTemplate = MODEL_CONFIGS[selectedModel] || MODEL_CONFIGS.custom;
|
|
95
|
+
const llmConfig = {
|
|
96
|
+
provider: modelTemplate.provider,
|
|
97
|
+
model: selectedModel === 'custom' ? LLM_MODEL : selectedModel, // custom needs env
|
|
98
|
+
baseUrl: selectedModel === 'custom' ? LLM_BASE_URL : modelTemplate.baseUrl,
|
|
99
|
+
apiKey: LLM_API_KEY,
|
|
100
|
+
temperature: 0.7,
|
|
101
|
+
};
|
|
102
|
+
const shipConfig = {
|
|
103
|
+
name: response.name || path.basename(projectRoot),
|
|
104
|
+
version: '1.0.0',
|
|
105
|
+
llm: llmConfig,
|
|
106
|
+
permissions: DEFAULT_SHIP_JSON.permissions,
|
|
107
|
+
integrations: {
|
|
108
|
+
telegram: {
|
|
109
|
+
enabled: response.integration === 'telegram',
|
|
110
|
+
botToken: response.integration === 'telegram' ? TELEGRAM_BOT_TOKEN : undefined,
|
|
111
|
+
chatId: undefined,
|
|
112
|
+
},
|
|
113
|
+
feishu: {
|
|
114
|
+
enabled: response.integration === 'feishu',
|
|
115
|
+
appId: response.integration === 'feishu' ? FEISHU_APP_ID : undefined,
|
|
116
|
+
appSecret: response.integration === 'feishu' ? FEISHU_APP_SECRET : undefined,
|
|
117
|
+
domain: 'https://open.feishu.cn',
|
|
118
|
+
},
|
|
119
|
+
qq: {
|
|
120
|
+
enabled: response.integration === 'qq',
|
|
121
|
+
appId: response.integration === 'qq' ? '${QQ_APP_ID}' : undefined,
|
|
122
|
+
appSecret: response.integration === 'qq' ? '${QQ_APP_SECRET}' : undefined,
|
|
123
|
+
sandbox: false,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
await saveJson(shipJsonPath, shipConfig);
|
|
128
|
+
console.log(`✅ Created ship.json`);
|
|
129
|
+
// Create .ship directory structure
|
|
130
|
+
const dirs = [
|
|
131
|
+
getShipDirPath(projectRoot),
|
|
132
|
+
getTasksDirPath(projectRoot),
|
|
133
|
+
getRunsDirPath(projectRoot),
|
|
134
|
+
getQueueDirPath(projectRoot),
|
|
135
|
+
getRoutesDirPath(projectRoot),
|
|
136
|
+
getApprovalsDirPath(projectRoot),
|
|
137
|
+
getLogsDirPath(projectRoot),
|
|
138
|
+
getCacheDirPath(projectRoot),
|
|
139
|
+
getChatsDirPath(projectRoot),
|
|
140
|
+
];
|
|
141
|
+
for (const dir of dirs) {
|
|
142
|
+
await ensureDir(dir);
|
|
143
|
+
}
|
|
144
|
+
console.log(`✅ Created .ship/ directory structure`);
|
|
145
|
+
// Create sample task file
|
|
146
|
+
const sampleTaskPath = path.join(getTasksDirPath(projectRoot), 'sample-task.md');
|
|
147
|
+
const sampleTaskContent = `---
|
|
148
|
+
id: sample-task
|
|
149
|
+
name: Sample Task
|
|
150
|
+
cron: "0 9 * * *"
|
|
151
|
+
notify: telegram
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
This is a sample task.
|
|
155
|
+
|
|
156
|
+
Please scan the repository for TODO comments and generate a report.
|
|
157
|
+
`;
|
|
158
|
+
await fs.writeFile(sampleTaskPath, sampleTaskContent);
|
|
159
|
+
console.log(`✅ Created sample task file`);
|
|
160
|
+
console.log('\n🎉 Initialization complete!\n');
|
|
161
|
+
console.log(`📦 Current model: ${llmConfig.provider} / ${llmConfig.model}`);
|
|
162
|
+
console.log(`🌐 API URL: ${llmConfig.baseUrl}\n`);
|
|
163
|
+
if (response.integration === 'feishu') {
|
|
164
|
+
console.log('📱 Feishu integration enabled');
|
|
165
|
+
console.log(' Please configure FEISHU_APP_ID and FEISHU_APP_SECRET in ship.json');
|
|
166
|
+
console.log(' or set environment variables: FEISHU_APP_ID and FEISHU_APP_SECRET\n');
|
|
167
|
+
}
|
|
168
|
+
else if (response.integration === 'telegram') {
|
|
169
|
+
console.log('📱 Telegram integration enabled');
|
|
170
|
+
console.log(' Please configure TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID (optional) in ship.json');
|
|
171
|
+
console.log(' or set environment variables: TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID\n');
|
|
172
|
+
}
|
|
173
|
+
else if (response.integration === 'qq') {
|
|
174
|
+
console.log('📱 QQ integration enabled');
|
|
175
|
+
console.log(' Please configure QQ_APP_ID and QQ_APP_SECRET in ship.json');
|
|
176
|
+
console.log(' or set environment variables: QQ_APP_ID and QQ_APP_SECRET\n');
|
|
177
|
+
}
|
|
178
|
+
console.log('Next steps:');
|
|
179
|
+
console.log(' 1. Edit Agent.md to customize agent behavior');
|
|
180
|
+
console.log(' 2. Edit ship.json to modify LLM configuration (baseUrl, apiKey, temperature, etc.)');
|
|
181
|
+
if (response.integration === 'feishu') {
|
|
182
|
+
console.log(' 3. Configure Feishu App ID and App Secret');
|
|
183
|
+
console.log(' 4. Run "shipmyagent start" to start the agent\n');
|
|
184
|
+
}
|
|
185
|
+
else if (response.integration === 'telegram') {
|
|
186
|
+
console.log(' 3. Configure Telegram Bot Token and Chat ID (optional)');
|
|
187
|
+
console.log(' 4. Run "shipmyagent start" to start the agent\n');
|
|
188
|
+
}
|
|
189
|
+
else if (response.integration === 'qq') {
|
|
190
|
+
console.log(' 3. Configure QQ App ID and App Secret');
|
|
191
|
+
console.log(' 4. Run "shipmyagent start" to start the agent\n');
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
console.log(' 3. Run "shipmyagent start" to start the agent\n');
|
|
195
|
+
}
|
|
196
|
+
console.log('💡 Tip: API Key is recommended to use environment variables (e.g. ${ANTHROPIC_API_KEY} or ${OPENAI_API_KEY})\n');
|
|
197
|
+
console.log('To switch models or modify configuration, edit the llm field in ship.json directly.\n');
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAmBA,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,YAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6P1F"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { createLogger } from '../runtime/logger.js';
|
|
4
|
+
import { createPermissionEngine } from '../runtime/permission.js';
|
|
5
|
+
import { createTaskScheduler } from '../runtime/scheduler.js';
|
|
6
|
+
import { createTaskExecutor } from '../runtime/task-executor.js';
|
|
7
|
+
import { createToolExecutor } from '../runtime/tools.js';
|
|
8
|
+
import { createAgentRuntime } from '../runtime/agent.js';
|
|
9
|
+
import { RunManager } from '../runtime/run-manager.js';
|
|
10
|
+
import { RunWorker } from '../runtime/run-worker.js';
|
|
11
|
+
import { createServer } from '../server/index.js';
|
|
12
|
+
import { createInteractiveServer } from '../server/interactive.js';
|
|
13
|
+
import { createTelegramBot } from '../integrations/telegram.js';
|
|
14
|
+
import { createFeishuBot } from '../integrations/feishu.js';
|
|
15
|
+
import { createQQBot } from '../integrations/qq.js';
|
|
16
|
+
import { getAgentMdPath, getShipJsonPath, loadShipConfig, DEFAULT_SHELL_GUIDE } from '../utils.js';
|
|
17
|
+
import { DEFAULT_SHIP_PROMPTS } from '../runtime/ship-prompts.js';
|
|
18
|
+
import { fileURLToPath } from 'url';
|
|
19
|
+
export async function startCommand(cwd = '.', options) {
|
|
20
|
+
const projectRoot = path.resolve(cwd);
|
|
21
|
+
const isPlaceholder = (value) => value === '${}';
|
|
22
|
+
let version = 'unknown';
|
|
23
|
+
try {
|
|
24
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
25
|
+
const __dirname = path.dirname(__filename);
|
|
26
|
+
const pkg = await fs.readJson(path.join(__dirname, '../../package.json'));
|
|
27
|
+
if (pkg && typeof pkg.version === 'string')
|
|
28
|
+
version = pkg.version;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// ignore
|
|
32
|
+
}
|
|
33
|
+
console.log(`🚀 Starting ShipMyAgent v${version}: ${projectRoot}`);
|
|
34
|
+
// Check if initialized
|
|
35
|
+
if (!fs.existsSync(getAgentMdPath(projectRoot))) {
|
|
36
|
+
console.error('❌ Project not initialized. Please run "shipmyagent init" first');
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
if (!fs.existsSync(getShipJsonPath(projectRoot))) {
|
|
40
|
+
console.error('❌ ship.json does not exist. Please run "shipmyagent init" first');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
// Read configuration
|
|
44
|
+
let shipConfig;
|
|
45
|
+
try {
|
|
46
|
+
shipConfig = loadShipConfig(projectRoot);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error('❌ Failed to read ship.json:', error);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
// Create logger
|
|
53
|
+
const logger = createLogger(projectRoot, 'info');
|
|
54
|
+
logger.info('=== ShipMyAgent Starting ===');
|
|
55
|
+
logger.info(`Project: ${projectRoot}`);
|
|
56
|
+
logger.info(`Model: ${shipConfig.llm?.provider} / ${shipConfig.llm?.model}`);
|
|
57
|
+
// Create permission engine
|
|
58
|
+
const permissionEngine = createPermissionEngine(projectRoot);
|
|
59
|
+
logger.info('Permission engine initialized');
|
|
60
|
+
// Create tool executor
|
|
61
|
+
const toolExecutor = createToolExecutor({
|
|
62
|
+
projectRoot,
|
|
63
|
+
permissionEngine,
|
|
64
|
+
logger,
|
|
65
|
+
});
|
|
66
|
+
logger.info('Tool executor initialized');
|
|
67
|
+
// Create Agent Runtime
|
|
68
|
+
const userAgentMd = fs.readFileSync(getAgentMdPath(projectRoot), 'utf-8').trim();
|
|
69
|
+
const agentMd = [
|
|
70
|
+
userAgentMd || 'You are a helpful project assistant.',
|
|
71
|
+
`---\n\n${DEFAULT_SHIP_PROMPTS}`,
|
|
72
|
+
`---\n\n${DEFAULT_SHELL_GUIDE}`,
|
|
73
|
+
]
|
|
74
|
+
.filter(Boolean)
|
|
75
|
+
.join('\n\n');
|
|
76
|
+
const agentContext = {
|
|
77
|
+
projectRoot,
|
|
78
|
+
config: shipConfig,
|
|
79
|
+
agentMd,
|
|
80
|
+
};
|
|
81
|
+
const agentRuntime = createAgentRuntime(agentContext);
|
|
82
|
+
await agentRuntime.initialize();
|
|
83
|
+
logger.info('Agent Runtime initialized');
|
|
84
|
+
// Create task executor
|
|
85
|
+
const taskExecutor = createTaskExecutor(toolExecutor, logger, agentRuntime, projectRoot);
|
|
86
|
+
logger.info('Task executor initialized');
|
|
87
|
+
// Create Run manager/worker (Tasks v2)
|
|
88
|
+
const runManager = new RunManager(projectRoot);
|
|
89
|
+
const runWorker = new RunWorker(projectRoot, logger, taskExecutor, { maxConcurrent: 1, pollIntervalMs: 1000 });
|
|
90
|
+
runWorker.start();
|
|
91
|
+
logger.info('Run worker started');
|
|
92
|
+
// Create task scheduler
|
|
93
|
+
const taskScheduler = createTaskScheduler(projectRoot, logger, async (task) => {
|
|
94
|
+
const run = await runManager.createAndEnqueueTaskRun(task);
|
|
95
|
+
logger.info(`Enqueued scheduled run: ${run.runId} (${task.id})`);
|
|
96
|
+
});
|
|
97
|
+
logger.info('Task scheduler initialized');
|
|
98
|
+
// Create server context
|
|
99
|
+
const serverContext = {
|
|
100
|
+
projectRoot,
|
|
101
|
+
logger,
|
|
102
|
+
permissionEngine,
|
|
103
|
+
taskScheduler,
|
|
104
|
+
taskExecutor,
|
|
105
|
+
toolExecutor,
|
|
106
|
+
};
|
|
107
|
+
// Create and start server
|
|
108
|
+
const server = createServer(serverContext);
|
|
109
|
+
// Create Telegram Bot (if enabled)
|
|
110
|
+
let telegramBot = null;
|
|
111
|
+
if (shipConfig.integrations?.telegram?.enabled) {
|
|
112
|
+
logger.info('Telegram integration enabled');
|
|
113
|
+
telegramBot = createTelegramBot(projectRoot, shipConfig.integrations.telegram, logger);
|
|
114
|
+
}
|
|
115
|
+
// Create Feishu Bot (if enabled)
|
|
116
|
+
let feishuBot = null;
|
|
117
|
+
if (shipConfig.integrations?.feishu?.enabled) {
|
|
118
|
+
logger.info('Feishu integration enabled');
|
|
119
|
+
// Read Feishu configuration from environment variables or config
|
|
120
|
+
const feishuConfig = {
|
|
121
|
+
enabled: true,
|
|
122
|
+
appId: (shipConfig.integrations.feishu.appId && !isPlaceholder(shipConfig.integrations.feishu.appId)
|
|
123
|
+
? shipConfig.integrations.feishu.appId
|
|
124
|
+
: undefined) || process.env.FEISHU_APP_ID || '',
|
|
125
|
+
appSecret: (shipConfig.integrations.feishu.appSecret && !isPlaceholder(shipConfig.integrations.feishu.appSecret)
|
|
126
|
+
? shipConfig.integrations.feishu.appSecret
|
|
127
|
+
: undefined) || process.env.FEISHU_APP_SECRET || '',
|
|
128
|
+
domain: shipConfig.integrations.feishu.domain || 'https://open.feishu.cn',
|
|
129
|
+
adminUserIds: Array.isArray(shipConfig.integrations.feishu.adminUserIds)
|
|
130
|
+
? shipConfig.integrations.feishu.adminUserIds
|
|
131
|
+
: undefined,
|
|
132
|
+
};
|
|
133
|
+
feishuBot = await createFeishuBot(projectRoot, feishuConfig, logger);
|
|
134
|
+
}
|
|
135
|
+
// Create QQ Bot (if enabled)
|
|
136
|
+
let qqBot = null;
|
|
137
|
+
if (shipConfig.integrations?.qq?.enabled) {
|
|
138
|
+
logger.info('QQ integration enabled');
|
|
139
|
+
const qqConfig = {
|
|
140
|
+
enabled: true,
|
|
141
|
+
appId: (shipConfig.integrations.qq.appId && !isPlaceholder(shipConfig.integrations.qq.appId)
|
|
142
|
+
? shipConfig.integrations.qq.appId
|
|
143
|
+
: undefined) || process.env.QQ_APP_ID || '',
|
|
144
|
+
appSecret: (shipConfig.integrations.qq.appSecret && !isPlaceholder(shipConfig.integrations.qq.appSecret)
|
|
145
|
+
? shipConfig.integrations.qq.appSecret
|
|
146
|
+
: undefined) || process.env.QQ_APP_SECRET || '',
|
|
147
|
+
sandbox: typeof shipConfig.integrations.qq.sandbox === 'boolean'
|
|
148
|
+
? shipConfig.integrations.qq.sandbox
|
|
149
|
+
: (process.env.QQ_SANDBOX || '').toLowerCase() === 'true',
|
|
150
|
+
};
|
|
151
|
+
qqBot = await createQQBot(projectRoot, qqConfig, logger);
|
|
152
|
+
}
|
|
153
|
+
// 创建交互式 Web 服务器(如果已启用)
|
|
154
|
+
let interactiveServer = null;
|
|
155
|
+
if (options.interactiveWeb) {
|
|
156
|
+
logger.info('交互式 Web 界面已启用');
|
|
157
|
+
interactiveServer = createInteractiveServer({
|
|
158
|
+
agentApiUrl: `http://${(options.host === '0.0.0.0' || options.host === '::') ? '127.0.0.1' : options.host}:${options.port}`,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// 处理进程信号
|
|
162
|
+
let isShuttingDown = false;
|
|
163
|
+
const shutdown = async (signal) => {
|
|
164
|
+
if (isShuttingDown)
|
|
165
|
+
return;
|
|
166
|
+
isShuttingDown = true;
|
|
167
|
+
logger.info(`Received ${signal} signal, shutting down...`);
|
|
168
|
+
// Stop Telegram Bot
|
|
169
|
+
if (telegramBot) {
|
|
170
|
+
await telegramBot.stop();
|
|
171
|
+
}
|
|
172
|
+
// Stop Feishu Bot
|
|
173
|
+
if (feishuBot) {
|
|
174
|
+
await feishuBot.stop();
|
|
175
|
+
}
|
|
176
|
+
// Stop QQ Bot
|
|
177
|
+
if (qqBot) {
|
|
178
|
+
await qqBot.stop();
|
|
179
|
+
}
|
|
180
|
+
await runWorker.stop();
|
|
181
|
+
// 停止交互式 Web 服务器
|
|
182
|
+
if (interactiveServer) {
|
|
183
|
+
await interactiveServer.stop();
|
|
184
|
+
}
|
|
185
|
+
// 停止服务器
|
|
186
|
+
await server.stop();
|
|
187
|
+
// Save logs
|
|
188
|
+
await logger.saveAllLogs();
|
|
189
|
+
logger.info('👋 ShipMyAgent stopped');
|
|
190
|
+
process.exit(0);
|
|
191
|
+
};
|
|
192
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
193
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
194
|
+
// Start server
|
|
195
|
+
await server.start({
|
|
196
|
+
port: options.port,
|
|
197
|
+
host: options.host,
|
|
198
|
+
});
|
|
199
|
+
// 启动交互式 Web 服务器(如果已启用)
|
|
200
|
+
if (interactiveServer) {
|
|
201
|
+
await interactiveServer.start({
|
|
202
|
+
port: options.interactivePort || 3001,
|
|
203
|
+
host: options.host,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// 启动 Telegram Bot
|
|
207
|
+
if (telegramBot) {
|
|
208
|
+
await telegramBot.start();
|
|
209
|
+
}
|
|
210
|
+
// Start Feishu Bot
|
|
211
|
+
if (feishuBot) {
|
|
212
|
+
await feishuBot.start();
|
|
213
|
+
}
|
|
214
|
+
// Start QQ Bot
|
|
215
|
+
if (qqBot) {
|
|
216
|
+
await qqBot.start();
|
|
217
|
+
}
|
|
218
|
+
logger.info('=== ShipMyAgent Started ===');
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
package/bin/index.js
ADDED
package/bin/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,OAAe,OAAO;IAC1C,OAAO,UAAU,IAAI,GAAG,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feishu.d.ts","sourceRoot":"","sources":["../../src/integrations/feishu.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAsB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAM/E,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAYD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,sBAAsB,CAA+B;IAC7D,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,SAAS,CAAY;IAG7B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAgE;gBAGhF,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS;IAcpC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;YAcL,aAAa;YAYb,gBAAgB;YAWhB,oBAAoB;YAiBpB,uBAAuB;IAarC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;YAQT,mBAAmB;YAWnB,gBAAgB;IAc9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAkB9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA8Dd,sBAAsB;YA8CtB,aAAa;YAyFb,aAAa;YA8Cb,eAAe;YA2Hf,WAAW;YAoCX,eAAe;YAkBf,gBAAgB;IASxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB5B;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA4B3B"}
|