agentopia 1.0.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/.claude/settings.local.json +28 -0
- package/dist/app.d.ts +10 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +121 -0
- package/dist/app.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -0
- package/dist/db/database.d.ts +5 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +39 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/schema.d.ts +3 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +621 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +9 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware/auth.d.ts +13 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +733 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/routes/agents.d.ts +3 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +1058 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/issues.d.ts +4 -0
- package/dist/routes/issues.d.ts.map +1 -0
- package/dist/routes/issues.js +946 -0
- package/dist/routes/issues.js.map +1 -0
- package/dist/routes/knowledge.d.ts +3 -0
- package/dist/routes/knowledge.d.ts.map +1 -0
- package/dist/routes/knowledge.js +117 -0
- package/dist/routes/knowledge.js.map +1 -0
- package/dist/routes/memories.d.ts +3 -0
- package/dist/routes/memories.d.ts.map +1 -0
- package/dist/routes/memories.js +115 -0
- package/dist/routes/memories.js.map +1 -0
- package/dist/routes/messages.d.ts +3 -0
- package/dist/routes/messages.d.ts.map +1 -0
- package/dist/routes/messages.js +130 -0
- package/dist/routes/messages.js.map +1 -0
- package/dist/routes/projects.d.ts +3 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +754 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/templates.d.ts +3 -0
- package/dist/routes/templates.d.ts.map +1 -0
- package/dist/routes/templates.js +117 -0
- package/dist/routes/templates.js.map +1 -0
- package/dist/routes/ui.d.ts +3 -0
- package/dist/routes/ui.d.ts.map +1 -0
- package/dist/routes/ui.js +38 -0
- package/dist/routes/ui.js.map +1 -0
- package/dist/services/agent-hierarchy.d.ts +14 -0
- package/dist/services/agent-hierarchy.d.ts.map +1 -0
- package/dist/services/agent-hierarchy.js +58 -0
- package/dist/services/agent-hierarchy.js.map +1 -0
- package/dist/services/agent-issue-batch.d.ts +17 -0
- package/dist/services/agent-issue-batch.d.ts.map +1 -0
- package/dist/services/agent-issue-batch.js +57 -0
- package/dist/services/agent-issue-batch.js.map +1 -0
- package/dist/services/controller.d.ts +4 -0
- package/dist/services/controller.d.ts.map +1 -0
- package/dist/services/controller.js +237 -0
- package/dist/services/controller.js.map +1 -0
- package/dist/services/langgraph-runner.d.ts +33 -0
- package/dist/services/langgraph-runner.d.ts.map +1 -0
- package/dist/services/langgraph-runner.js +478 -0
- package/dist/services/langgraph-runner.js.map +1 -0
- package/dist/services/orchestrator.d.ts +9 -0
- package/dist/services/orchestrator.d.ts.map +1 -0
- package/dist/services/orchestrator.js +116 -0
- package/dist/services/orchestrator.js.map +1 -0
- package/dist/services/pre-controller.d.ts +7 -0
- package/dist/services/pre-controller.d.ts.map +1 -0
- package/dist/services/pre-controller.js +101 -0
- package/dist/services/pre-controller.js.map +1 -0
- package/dist/services/process-manager.d.ts +67 -0
- package/dist/services/process-manager.d.ts.map +1 -0
- package/dist/services/process-manager.js +938 -0
- package/dist/services/process-manager.js.map +1 -0
- package/dist/services/project-permissions.d.ts +84 -0
- package/dist/services/project-permissions.d.ts.map +1 -0
- package/dist/services/project-permissions.js +129 -0
- package/dist/services/project-permissions.js.map +1 -0
- package/dist/services/scheduler.d.ts +6 -0
- package/dist/services/scheduler.d.ts.map +1 -0
- package/dist/services/scheduler.js +300 -0
- package/dist/services/scheduler.js.map +1 -0
- package/dist/services/system-prompt.d.ts +3 -0
- package/dist/services/system-prompt.d.ts.map +1 -0
- package/dist/services/system-prompt.js +285 -0
- package/dist/services/system-prompt.js.map +1 -0
- package/dist/services/terminal.d.ts +18 -0
- package/dist/services/terminal.d.ts.map +1 -0
- package/dist/services/terminal.js +222 -0
- package/dist/services/terminal.js.map +1 -0
- package/dist/services/websocket.d.ts +15 -0
- package/dist/services/websocket.d.ts.map +1 -0
- package/dist/services/websocket.js +204 -0
- package/dist/services/websocket.js.map +1 -0
- package/dist/types.d.ts +108 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/env.ini +18 -0
- package/package.json +38 -0
- package/project_id +0 -0
- package/public/admin-users.html +188 -0
- package/public/agent.html +199 -0
- package/public/css/issues.css +275 -0
- package/public/css/style.css +1299 -0
- package/public/index.html +166 -0
- package/public/issue.html +76 -0
- package/public/js/agent.js +19 -0
- package/public/js/common.js +735 -0
- package/public/js/dashboard.js +772 -0
- package/public/js/files-panel.js +703 -0
- package/public/js/interactive-terminal.js +201 -0
- package/public/js/issue-renderer.js +559 -0
- package/public/js/issue.js +57 -0
- package/public/js/project.js +2425 -0
- package/public/js/terminal.js +564 -0
- package/public/project.html +430 -0
- package/public/terminal.html +67 -0
- package/public/vendor/marked.js +74 -0
- package/public/vendor/xterm-addon-fit.js +2 -0
- package/public/vendor/xterm.css +209 -0
- package/public/vendor/xterm.js +2 -0
- package/send_message_and_update_issue.js +65 -0
- package/tsconfig.json +19 -0
- package/update_round2_and_create_round3.js +284 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/services/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/services/system-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAM1C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAuSxE"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildSystemPrompt = buildSystemPrompt;
|
|
4
|
+
const database_1 = require("../db/database");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
const agent_hierarchy_1 = require("./agent-hierarchy");
|
|
7
|
+
const BASE_URL = () => `http://localhost:${config_1.config.port}`;
|
|
8
|
+
function buildSystemPrompt(agent, project) {
|
|
9
|
+
const db = (0, database_1.getDatabase)();
|
|
10
|
+
const base = BASE_URL();
|
|
11
|
+
const effectiveCommand = (agent.command_template || project.command_template || config_1.config.defaultCommandTemplate || '').trim().toLowerCase();
|
|
12
|
+
const header = `# Argus Multi-Agent Platform — System Instructions
|
|
13
|
+
|
|
14
|
+
You are agent "${agent.name}" in project "${project.name}".
|
|
15
|
+
You are running inside Argus, a multi-agent collaboration platform. Multiple agents work together on a shared project. You coordinate through an issue tracker (like GitHub Issues) where everyone can see all issues and comments.
|
|
16
|
+
|
|
17
|
+
## Your Identity
|
|
18
|
+
- **Agent ID**: ${agent.id}
|
|
19
|
+
- **Agent Name**: ${agent.name}
|
|
20
|
+
- **Role**: ${agent.role || '(not specified)'}
|
|
21
|
+
- **Is Controller**: ${agent.is_controller ? 'Yes' : 'No'}
|
|
22
|
+
- **Project ID**: ${project.id}`;
|
|
23
|
+
// Agent list
|
|
24
|
+
const hierarchyAgents = (0, agent_hierarchy_1.loadProjectHierarchyAgents)(db, project.id);
|
|
25
|
+
const hierarchyById = new Map(hierarchyAgents.map((item) => [item.id, item]));
|
|
26
|
+
const agents = db.prepare(`
|
|
27
|
+
SELECT a.id, a.name, a.role, a.is_controller, a.status, a.parent_agent_id, parent.name as parent_name
|
|
28
|
+
FROM agents a
|
|
29
|
+
LEFT JOIN agents parent ON parent.id = a.parent_agent_id
|
|
30
|
+
WHERE a.project_id = ?
|
|
31
|
+
ORDER BY a.is_controller DESC, a.created_at
|
|
32
|
+
`).all(project.id);
|
|
33
|
+
const agentList = agents.map(a => ` - ${a.name} (ID: ${a.id}, Role: ${a.role || '-'}, Status: ${a.status}${a.is_controller ? ', Controller' : ''}${a.parent_name ? `, Parent: ${a.parent_name}` : ''})`).join('\n');
|
|
34
|
+
const parentAgent = agent.parent_agent_id ? hierarchyById.get(agent.parent_agent_id) || null : null;
|
|
35
|
+
const directChildren = (0, agent_hierarchy_1.getDirectChildAgents)(hierarchyAgents, agent.id);
|
|
36
|
+
const hierarchyNotes = [];
|
|
37
|
+
if (parentAgent) {
|
|
38
|
+
hierarchyNotes.push(`- 你的直接上级是 ${parentAgent.name}(ID: ${parentAgent.id})`);
|
|
39
|
+
}
|
|
40
|
+
if (directChildren.length > 0) {
|
|
41
|
+
hierarchyNotes.push(`- 你的直接下属:${directChildren.map((child) => `${child.name}(ID: ${child.id})`).join('、')}`);
|
|
42
|
+
}
|
|
43
|
+
if (agent.parent_agent_id) {
|
|
44
|
+
hierarchyNotes.push('- 通信限制:只能通过消息与直接上级或直接下属沟通,不能跨级通信。');
|
|
45
|
+
}
|
|
46
|
+
const agentSection = `
|
|
47
|
+
## Agents
|
|
48
|
+
${agentList || ' (none)'}${hierarchyNotes.length > 0 ? `\n\n### Hierarchy\n${hierarchyNotes.join('\n')}` : ''}`;
|
|
49
|
+
// Issue API (available to all)
|
|
50
|
+
// IMPORTANT: use "env -u LD_PRELOAD curl" to bypass any proxy for localhost
|
|
51
|
+
const C = 'env -u LD_PRELOAD curl';
|
|
52
|
+
const issueSection = `
|
|
53
|
+
## Issue Tracker API
|
|
54
|
+
All agents share a project-wide issue tracker. Issues are visible to everyone.
|
|
55
|
+
|
|
56
|
+
**IMPORTANT**: Always use \`env -u LD_PRELOAD curl\` instead of plain \`curl\` to ensure localhost connections work.
|
|
57
|
+
|
|
58
|
+
**List open issues:**
|
|
59
|
+
\`\`\`bash
|
|
60
|
+
${C} "${base}/api/projects/${project.id}/issues?status=open"
|
|
61
|
+
\`\`\`
|
|
62
|
+
|
|
63
|
+
**List issues assigned to you:**
|
|
64
|
+
\`\`\`bash
|
|
65
|
+
${C} "${base}/api/projects/${project.id}/issues?assigned_to=${agent.id}"
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
**Create an issue:**
|
|
69
|
+
\`\`\`bash
|
|
70
|
+
${C} -X POST ${base}/api/projects/${project.id}/issues \\
|
|
71
|
+
-H "Content-Type: application/json" \\
|
|
72
|
+
-d '{"title":"Issue title","body":"Description","created_by":"${agent.id}","assigned_to":"AGENT_ID_or_user_or_all","labels":"bug,urgent"}'
|
|
73
|
+
\`\`\`
|
|
74
|
+
|
|
75
|
+
**View issue detail + comments:**
|
|
76
|
+
\`\`\`bash
|
|
77
|
+
${C} ${base}/api/issues/{issue_id}
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
**Update issue (status, assignment, etc.):**
|
|
81
|
+
\`\`\`bash
|
|
82
|
+
${C} -X PUT ${base}/api/issues/{issue_id} \\
|
|
83
|
+
-H "Content-Type: application/json" \\
|
|
84
|
+
-d '{"status":"done","actor":"${agent.id}"}'
|
|
85
|
+
\`\`\`
|
|
86
|
+
Status values: \`open\`, \`in_progress\`, \`pending\` (waiting for sub-issues), \`done\`, \`closed\`
|
|
87
|
+
|
|
88
|
+
**Add a comment to an issue:**
|
|
89
|
+
\`\`\`bash
|
|
90
|
+
${C} -X POST ${base}/api/issues/{issue_id}/comments \\
|
|
91
|
+
-H "Content-Type: application/json" \\
|
|
92
|
+
-d '{"author_id":"${agent.id}","body":"Comment text"}'
|
|
93
|
+
\`\`\`
|
|
94
|
+
|
|
95
|
+
**Add issue dependency (blocks/related_to):**
|
|
96
|
+
\`\`\`bash
|
|
97
|
+
${C} -X POST ${base}/api/issues/{issue_id}/relations \\
|
|
98
|
+
-H "Content-Type: application/json" \\
|
|
99
|
+
-d '{"type":"blocks","target_issue_id":"TARGET_ISSUE_ID","actor":"${agent.id}"}'
|
|
100
|
+
\`\`\`
|
|
101
|
+
|
|
102
|
+
**Check agent status / logs:**
|
|
103
|
+
\`\`\`bash
|
|
104
|
+
${C} ${base}/api/agents/{agent_id}/status
|
|
105
|
+
${C} ${base}/api/agents/{agent_id}/logs?limit=50
|
|
106
|
+
\`\`\``;
|
|
107
|
+
// Controller-only management
|
|
108
|
+
let managementSection = '';
|
|
109
|
+
if (agent.is_controller) {
|
|
110
|
+
managementSection = `
|
|
111
|
+
## Agent Management (Controller Only)
|
|
112
|
+
|
|
113
|
+
**Create agent:**
|
|
114
|
+
\`\`\`bash
|
|
115
|
+
${C} -X POST ${base}/api/projects/${project.id}/agents \\
|
|
116
|
+
-H "Content-Type: application/json" \\
|
|
117
|
+
-d '{"name":"agent-name","role":"Role description","working_directory":"/path"}'
|
|
118
|
+
\`\`\`
|
|
119
|
+
|
|
120
|
+
**Start agent:**
|
|
121
|
+
\`\`\`bash
|
|
122
|
+
${C} -X POST ${base}/api/agents/{agent_id}/start \\
|
|
123
|
+
-H "Content-Type: application/json" -d '{}'
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
**Stop / Delete agent:**
|
|
127
|
+
\`\`\`bash
|
|
128
|
+
${C} -X POST ${base}/api/agents/{agent_id}/stop
|
|
129
|
+
${C} -X DELETE ${base}/api/agents/{agent_id}
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
**Update agent (role, working_directory, custom_instructions):**
|
|
133
|
+
\`\`\`bash
|
|
134
|
+
${C} -X PUT ${base}/api/agents/{agent_id} \\
|
|
135
|
+
-H "Content-Type: application/json" \\
|
|
136
|
+
-d '{"role":"new role","working_directory":"/new/path","custom_instructions":"extra instructions"}'
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
**Update project settings (name, description, task_description):**
|
|
140
|
+
\`\`\`bash
|
|
141
|
+
${C} -X PUT ${base}/api/projects/${project.id} \\
|
|
142
|
+
-H "Content-Type: application/json" \\
|
|
143
|
+
-d '{"name":"new-name","description":"new description","task_description":"updated task"}'
|
|
144
|
+
\`\`\`
|
|
145
|
+
|
|
146
|
+
## Controller Workflow
|
|
147
|
+
1. Review project task and open issues
|
|
148
|
+
2. Create worker agents as needed
|
|
149
|
+
3. Create issues and assign them to workers
|
|
150
|
+
4. Start agents to work on their assigned issues
|
|
151
|
+
5. Monitor progress via issue comments and agent logs
|
|
152
|
+
6. Close completed issues
|
|
153
|
+
7. Create a summary issue for the user when done`;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
managementSection = `
|
|
157
|
+
## Worker Guidelines
|
|
158
|
+
- Focus on your assigned issues
|
|
159
|
+
- Update issue status when you start (\`in_progress\`) and finish (\`done\`)
|
|
160
|
+
- Add comments to issues to report progress or ask questions
|
|
161
|
+
- Create new issues if you discover problems. If the new issue is a sub-task of your current issue, set \`parent_id\` to link them: \`{"title":"sub-task","parent_id":"<current-issue-id>",...}\`
|
|
162
|
+
- When all child issues of a parent complete, the system automatically notifies the parent
|
|
163
|
+
- You cannot create or manage other agents — only the controller can`;
|
|
164
|
+
}
|
|
165
|
+
// Knowledge base: auto-inject high importance entries
|
|
166
|
+
const knowledgeEntries = db.prepare("SELECT title, content FROM knowledge_entries WHERE project_id = ? AND importance = 'high' ORDER BY updated_at DESC").all(project.id);
|
|
167
|
+
const knowledgeSection = `
|
|
168
|
+
## Project Knowledge Base
|
|
169
|
+
${knowledgeEntries.length > 0
|
|
170
|
+
? knowledgeEntries.map(k => `### ${k.title}\n${k.content}`).join('\n\n')
|
|
171
|
+
: '(empty)'}
|
|
172
|
+
|
|
173
|
+
**Query knowledge:**
|
|
174
|
+
\`\`\`bash
|
|
175
|
+
${C} "${base}/api/projects/${project.id}/knowledge?tag=TAG&importance=LEVEL"
|
|
176
|
+
\`\`\`
|
|
177
|
+
|
|
178
|
+
**Add knowledge** (when you discover important patterns, pitfalls, or conventions):
|
|
179
|
+
\`\`\`bash
|
|
180
|
+
${C} -X POST ${base}/api/projects/${project.id}/knowledge \\
|
|
181
|
+
-H "Content-Type: application/json" \\
|
|
182
|
+
-d '{"title":"Title","content":"What you learned","tags":"tag1,tag2","importance":"high","created_by":"${agent.id}"}'
|
|
183
|
+
\`\`\`
|
|
184
|
+
importance: \`high\` (auto-injected to all agents), \`medium\` (queryable), \`low\`
|
|
185
|
+
|
|
186
|
+
**Update existing knowledge:**
|
|
187
|
+
\`\`\`bash
|
|
188
|
+
${C} -X PUT ${base}/api/knowledge/{id} \\
|
|
189
|
+
-H "Content-Type: application/json" \\
|
|
190
|
+
-d '{"content":"Updated content","importance":"high"}'
|
|
191
|
+
\`\`\`
|
|
192
|
+
|
|
193
|
+
Record knowledge when you encounter: project conventions, recurring bugs, environment quirks, build/deploy notes, or anything future agents should know.
|
|
194
|
+
|
|
195
|
+
**Full-text search knowledge:**
|
|
196
|
+
\`\`\`bash
|
|
197
|
+
${C} "${base}/api/projects/${project.id}/knowledge?q=search+terms"
|
|
198
|
+
\`\`\``;
|
|
199
|
+
// Agent memories: inject recent relevant memories
|
|
200
|
+
const agentMemories = db.prepare(`
|
|
201
|
+
SELECT content, tags, scope, created_at FROM agent_memories
|
|
202
|
+
WHERE project_id = ? AND (agent_id = ? OR scope = 'project')
|
|
203
|
+
AND (expires_at IS NULL OR expires_at > datetime('now'))
|
|
204
|
+
ORDER BY created_at DESC LIMIT 10
|
|
205
|
+
`).all(project.id, agent.id);
|
|
206
|
+
const memoriesSection = `
|
|
207
|
+
## Agent Memories
|
|
208
|
+
${agentMemories.length > 0
|
|
209
|
+
? agentMemories.map(m => `- [${m.scope}] ${m.content}${m.tags ? ` (tags: ${m.tags})` : ''}`).join('\n')
|
|
210
|
+
: '(none)'}
|
|
211
|
+
|
|
212
|
+
**Save a memory** (persists across sessions):
|
|
213
|
+
\`\`\`bash
|
|
214
|
+
${C} -X POST ${base}/api/agents/${agent.id}/memories \\
|
|
215
|
+
-H "Content-Type: application/json" \\
|
|
216
|
+
-d '{"content":"What to remember","tags":"tag1,tag2","scope":"private"}'
|
|
217
|
+
\`\`\`
|
|
218
|
+
scope: \`private\` (only this agent), \`project\` (shared with all agents)
|
|
219
|
+
|
|
220
|
+
**Search memories:**
|
|
221
|
+
\`\`\`bash
|
|
222
|
+
${C} "${base}/api/agents/${agent.id}/memories?q=search+terms"
|
|
223
|
+
\`\`\``;
|
|
224
|
+
// Direct messages: inject unread messages
|
|
225
|
+
const unreadMessages = db.prepare(`
|
|
226
|
+
SELECT m.id, m.subject, m.body, m.from_agent_id, m.created_at, a.name as from_name
|
|
227
|
+
FROM agent_messages m
|
|
228
|
+
LEFT JOIN agents a ON a.id = m.from_agent_id
|
|
229
|
+
WHERE m.to_agent_id = ? AND m.status = 'unread'
|
|
230
|
+
ORDER BY m.created_at DESC LIMIT 5
|
|
231
|
+
`).all(agent.id);
|
|
232
|
+
const messagesSection = `
|
|
233
|
+
## Direct Messages
|
|
234
|
+
${unreadMessages.length > 0
|
|
235
|
+
? `**Unread messages (${unreadMessages.length}):**\n` + unreadMessages.map(m => `- From **${m.from_name || m.from_agent_id}**: ${m.subject ? `[${m.subject}] ` : ''}${m.body.slice(0, 200)}${m.body.length > 200 ? '...' : ''}`).join('\n')
|
|
236
|
+
: '(no unread messages)'}
|
|
237
|
+
|
|
238
|
+
**Send a message to another agent:**
|
|
239
|
+
\`\`\`bash
|
|
240
|
+
${C} -X POST ${base}/api/agents/${agent.id}/messages/send \\
|
|
241
|
+
-H "Content-Type: application/json" \\
|
|
242
|
+
-d '{"to":"TARGET_AGENT_ID","subject":"Subject","body":"Message content"}'
|
|
243
|
+
\`\`\`
|
|
244
|
+
|
|
245
|
+
**Check inbox:**
|
|
246
|
+
\`\`\`bash
|
|
247
|
+
${C} "${base}/api/agents/${agent.id}/messages?status=unread"
|
|
248
|
+
\`\`\`
|
|
249
|
+
|
|
250
|
+
**Mark message as read:**
|
|
251
|
+
\`\`\`bash
|
|
252
|
+
${C} -X PUT ${base}/api/agents/${agent.id}/messages/{message_id}
|
|
253
|
+
\`\`\``;
|
|
254
|
+
const toolExecutionSection = effectiveCommand.startsWith('codex')
|
|
255
|
+
? `
|
|
256
|
+
## Codex 执行约束
|
|
257
|
+
- 对于需要持续运行、后续还要继续交互的命令,第一次就必须使用带 \`tty: true\` 的交互会话。典型例子:dev server、\`tail -f\`、\`watch\`、REPL、\`ssh\`、\`sqlite3\` 交互模式、\`google-chrome --headless --remote-debugging-port=...\`。
|
|
258
|
+
- 只有在拿到交互命令返回的 \`session_id\` 之后,才能继续对该会话调用 \`write_stdin\`。不要对已经结束、没有 tty、或 stdin 已关闭的命令会话继续写入。
|
|
259
|
+
- 如果命令只是一次性执行,不需要后续交互,就不要再调用 \`write_stdin\`;直接等待命令完成并读取输出。
|
|
260
|
+
- 需要后台服务时,优先把“启动 + 检查 + 清理”放进同一个一次性脚本里完成;除非明确需要持续交互,否则不要把浏览器、服务器、调试端口单独常驻后再尝试补写 stdin。
|
|
261
|
+
- 如果你看到 \`stdin is closed for this session\`、\`write_stdin failed\` 或类似提示,立刻放弃旧会话,重新创建新的 tty 会话,不要沿用出错会话。
|
|
262
|
+
- 做 UI/浏览器验证时,优先使用一次性脚本完成完整验证流程;只有在确实需要保持进程存活时才开交互 tty。`
|
|
263
|
+
: '';
|
|
264
|
+
const customSection = agent.custom_instructions
|
|
265
|
+
? `\n## Custom Instructions\n${agent.custom_instructions}`
|
|
266
|
+
: '';
|
|
267
|
+
const languageSection = `
|
|
268
|
+
## 工作语言
|
|
269
|
+
所有沟通和输出请使用**中文**。包括:issue标题和描述、issue评论、代码注释(如有必要)、与其他agent的交流。代码本身(变量名、函数名等)保持英文。`;
|
|
270
|
+
return `${header}
|
|
271
|
+
${agentSection}
|
|
272
|
+
${issueSection}
|
|
273
|
+
${managementSection}
|
|
274
|
+
${customSection}
|
|
275
|
+
${knowledgeSection}
|
|
276
|
+
${memoriesSection}
|
|
277
|
+
${messagesSection}
|
|
278
|
+
${toolExecutionSection}
|
|
279
|
+
${languageSection}
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
# Your Task Begins Below
|
|
283
|
+
`;
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/services/system-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as pty from 'node-pty';
|
|
2
|
+
export interface PtySession {
|
|
3
|
+
pty: pty.IPty;
|
|
4
|
+
agentId: string;
|
|
5
|
+
createdAt: number;
|
|
6
|
+
outputBuffer: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get or create a PTY session for an agent.
|
|
10
|
+
* If `newSession` is true, kill any existing session first.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getOrCreatePtySession(agentId: string, newSession: boolean, cols?: number, rows?: number): PtySession;
|
|
13
|
+
export declare function hasPtySession(agentId: string): boolean;
|
|
14
|
+
export declare function killPtySession(agentId: string): boolean;
|
|
15
|
+
export declare function killAllPtySessions(): void;
|
|
16
|
+
export declare function getPtyOutputBuffer(agentId: string): string;
|
|
17
|
+
export declare function getPtySession(agentId: string): PtySession | undefined;
|
|
18
|
+
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/services/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAQhC,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AA6DD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,EACnB,IAAI,GAAE,MAAY,EAClB,IAAI,GAAE,MAAW,GAChB,UAAU,CA+FZ;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAWvD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAErE"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.getOrCreatePtySession = getOrCreatePtySession;
|
|
40
|
+
exports.hasPtySession = hasPtySession;
|
|
41
|
+
exports.killPtySession = killPtySession;
|
|
42
|
+
exports.killAllPtySessions = killAllPtySessions;
|
|
43
|
+
exports.getPtyOutputBuffer = getPtyOutputBuffer;
|
|
44
|
+
exports.getPtySession = getPtySession;
|
|
45
|
+
const pty = __importStar(require("node-pty"));
|
|
46
|
+
const path_1 = __importDefault(require("path"));
|
|
47
|
+
const os_1 = __importDefault(require("os"));
|
|
48
|
+
const database_1 = require("../db/database");
|
|
49
|
+
const config_1 = require("../config");
|
|
50
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
51
|
+
// Map of agentId -> active PTY session
|
|
52
|
+
const ptySessions = new Map();
|
|
53
|
+
const PTY_OUTPUT_BUFFER_MAX = 200000;
|
|
54
|
+
function splitCommandTemplate(template) {
|
|
55
|
+
const tokens = [];
|
|
56
|
+
let current = '';
|
|
57
|
+
let quote = null;
|
|
58
|
+
let escape = false;
|
|
59
|
+
for (const ch of template) {
|
|
60
|
+
if (escape) {
|
|
61
|
+
current += ch;
|
|
62
|
+
escape = false;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (quote === "'") {
|
|
66
|
+
if (ch === "'")
|
|
67
|
+
quote = null;
|
|
68
|
+
else
|
|
69
|
+
current += ch;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (ch === '\\') {
|
|
73
|
+
escape = true;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (quote === '"') {
|
|
77
|
+
if (ch === '"')
|
|
78
|
+
quote = null;
|
|
79
|
+
else
|
|
80
|
+
current += ch;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (ch === '"' || ch === "'") {
|
|
84
|
+
quote = ch;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (/\s/.test(ch)) {
|
|
88
|
+
if (current) {
|
|
89
|
+
tokens.push(current);
|
|
90
|
+
current = '';
|
|
91
|
+
}
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
current += ch;
|
|
95
|
+
}
|
|
96
|
+
if (escape)
|
|
97
|
+
current += '\\';
|
|
98
|
+
if (current)
|
|
99
|
+
tokens.push(current);
|
|
100
|
+
return tokens;
|
|
101
|
+
}
|
|
102
|
+
function needsShellExecution(template) {
|
|
103
|
+
return /[|&;<>()`$]/.test(template);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get or create a PTY session for an agent.
|
|
107
|
+
* If `newSession` is true, kill any existing session first.
|
|
108
|
+
*/
|
|
109
|
+
function getOrCreatePtySession(agentId, newSession, cols = 120, rows = 30) {
|
|
110
|
+
if (!newSession && ptySessions.has(agentId)) {
|
|
111
|
+
return ptySessions.get(agentId);
|
|
112
|
+
}
|
|
113
|
+
// Kill existing session if any
|
|
114
|
+
killPtySession(agentId);
|
|
115
|
+
// Get agent info for working directory
|
|
116
|
+
const db = (0, database_1.getDatabase)();
|
|
117
|
+
const agent = db.prepare('SELECT * FROM agents WHERE id = ?').get(agentId);
|
|
118
|
+
let cwd = agent?.working_directory || process.cwd();
|
|
119
|
+
if (cwd.startsWith('~/'))
|
|
120
|
+
cwd = path_1.default.join(os_1.default.homedir(), cwd.slice(2));
|
|
121
|
+
// Get command template: agent-level > project-level > default
|
|
122
|
+
let commandTemplate = 'claude';
|
|
123
|
+
if (agent) {
|
|
124
|
+
if (agent.command_template) {
|
|
125
|
+
commandTemplate = agent.command_template.trim() || 'claude';
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const project = db.prepare('SELECT command_template FROM projects WHERE id = ?').get(agent.project_id);
|
|
129
|
+
if (project?.command_template) {
|
|
130
|
+
commandTemplate = project.command_template.trim() || 'claude';
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
commandTemplate = config_1.config.defaultCommandTemplate || 'claude';
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const parsed = splitCommandTemplate(commandTemplate);
|
|
138
|
+
const baseCommand = parsed[0] || 'claude';
|
|
139
|
+
const baseArgs = parsed.slice(1);
|
|
140
|
+
// Build session args for Claude-family CLIs.
|
|
141
|
+
const sessionId = agent?.session_id || undefined;
|
|
142
|
+
const toolName = path_1.default.basename(baseCommand).toLowerCase();
|
|
143
|
+
const isClaudeFamily = toolName === 'cld' || toolName === 'claude' || toolName === 'ccr';
|
|
144
|
+
const sessionArgs = [];
|
|
145
|
+
if (isClaudeFamily) {
|
|
146
|
+
sessionArgs.push('--dangerously-skip-permissions');
|
|
147
|
+
if (sessionId) {
|
|
148
|
+
sessionArgs.push('--resume', sessionId);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const ptyOptions = {
|
|
152
|
+
name: 'xterm-256color',
|
|
153
|
+
cols,
|
|
154
|
+
rows,
|
|
155
|
+
cwd,
|
|
156
|
+
env: {
|
|
157
|
+
...process.env,
|
|
158
|
+
no_proxy: [process.env.no_proxy, 'localhost', '127.0.0.1'].filter(Boolean).join(','),
|
|
159
|
+
NO_PROXY: [process.env.NO_PROXY, 'localhost', '127.0.0.1'].filter(Boolean).join(','),
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
const finalArgs = [...baseArgs, ...sessionArgs];
|
|
163
|
+
let ptyProcess;
|
|
164
|
+
if (needsShellExecution(commandTemplate)) {
|
|
165
|
+
const escapeArg = (arg) => "'" + arg.replace(/'/g, "'\\''") + "'";
|
|
166
|
+
const shellCommand = [commandTemplate, ...sessionArgs.map(escapeArg)].join(' ');
|
|
167
|
+
logger_1.default.info(`Spawning PTY for agent ${agentId} via shell: ${shellCommand} in ${cwd}`);
|
|
168
|
+
ptyProcess = pty.spawn('/bin/sh', ['-lc', shellCommand], ptyOptions);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
logger_1.default.info(`Spawning PTY for agent ${agentId}: ${baseCommand} ${finalArgs.join(' ')} in ${cwd}`);
|
|
172
|
+
ptyProcess = pty.spawn(baseCommand, finalArgs, ptyOptions);
|
|
173
|
+
}
|
|
174
|
+
const session = {
|
|
175
|
+
pty: ptyProcess,
|
|
176
|
+
agentId,
|
|
177
|
+
createdAt: Date.now(),
|
|
178
|
+
outputBuffer: '',
|
|
179
|
+
};
|
|
180
|
+
// Keep a rolling output buffer so clients that reconnect (or attach late)
|
|
181
|
+
// can still render the latest terminal content.
|
|
182
|
+
ptyProcess.onData((data) => {
|
|
183
|
+
session.outputBuffer += data;
|
|
184
|
+
if (session.outputBuffer.length > PTY_OUTPUT_BUFFER_MAX) {
|
|
185
|
+
session.outputBuffer = session.outputBuffer.slice(-PTY_OUTPUT_BUFFER_MAX);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
ptySessions.set(agentId, session);
|
|
189
|
+
ptyProcess.onExit(({ exitCode }) => {
|
|
190
|
+
logger_1.default.info(`PTY for agent ${agentId} exited with code ${exitCode}`);
|
|
191
|
+
ptySessions.delete(agentId);
|
|
192
|
+
});
|
|
193
|
+
return session;
|
|
194
|
+
}
|
|
195
|
+
function hasPtySession(agentId) {
|
|
196
|
+
return ptySessions.has(agentId);
|
|
197
|
+
}
|
|
198
|
+
function killPtySession(agentId) {
|
|
199
|
+
const session = ptySessions.get(agentId);
|
|
200
|
+
if (!session)
|
|
201
|
+
return false;
|
|
202
|
+
try {
|
|
203
|
+
session.pty.kill();
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
logger_1.default.error(e, `Failed to kill PTY for agent ${agentId}`);
|
|
207
|
+
}
|
|
208
|
+
ptySessions.delete(agentId);
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
function killAllPtySessions() {
|
|
212
|
+
for (const [agentId] of ptySessions) {
|
|
213
|
+
killPtySession(agentId);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function getPtyOutputBuffer(agentId) {
|
|
217
|
+
return ptySessions.get(agentId)?.outputBuffer || '';
|
|
218
|
+
}
|
|
219
|
+
function getPtySession(agentId) {
|
|
220
|
+
return ptySessions.get(agentId);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/services/terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FastifyInstance } from 'fastify';
|
|
2
|
+
export declare function setupWebSocket(fastify: FastifyInstance): void;
|
|
3
|
+
export declare function broadcastToAgent(agentId: string, data: object): void;
|
|
4
|
+
/**
|
|
5
|
+
* Broadcast a project-level event to all connected clients.
|
|
6
|
+
* Event types: agent_status, issue_created, issue_updated, comment_added
|
|
7
|
+
*/
|
|
8
|
+
export declare function broadcastToProject(projectId: string, event: ProjectEvent): void;
|
|
9
|
+
export declare function clearAllPtyCleanupTimers(): void;
|
|
10
|
+
export interface ProjectEvent {
|
|
11
|
+
type: 'agent_status' | 'issue_created' | 'issue_updated' | 'comment_added' | 'agent_message';
|
|
12
|
+
projectId: string;
|
|
13
|
+
data: Record<string, any>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoB1C,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAwK7D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAUpE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAU/E;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,CAAC;IAC7F,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B"}
|