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,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildControllerTaskPrompt = buildControllerTaskPrompt;
|
|
7
|
+
exports.triggerControllerAgent = triggerControllerAgent;
|
|
8
|
+
const database_1 = require("../db/database");
|
|
9
|
+
const orchestrator_1 = require("./orchestrator");
|
|
10
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
11
|
+
const TRIGGER_DEBOUNCE_MS = 180000; // 3 minutes — reduce idle triggers to save cost
|
|
12
|
+
function buildActivitySnapshot(projectId) {
|
|
13
|
+
const db = (0, database_1.getDatabase)();
|
|
14
|
+
const issueStats = db.prepare(`SELECT
|
|
15
|
+
COUNT(*) AS active_count,
|
|
16
|
+
SUM(CASE WHEN assigned_to IS NULL OR assigned_to = 'all' THEN 1 ELSE 0 END) AS unassigned_count,
|
|
17
|
+
SUM(CASE WHEN assigned_to = 'user' THEN 1 ELSE 0 END) AS user_waiting_count,
|
|
18
|
+
SUM(CASE WHEN status = 'open' THEN 1 ELSE 0 END) AS open_count,
|
|
19
|
+
SUM(CASE WHEN status = 'in_progress' THEN 1 ELSE 0 END) AS in_progress_count,
|
|
20
|
+
MAX(updated_at) AS issue_updated_max
|
|
21
|
+
FROM issues
|
|
22
|
+
WHERE project_id = ? AND status IN ('open', 'in_progress')`).get(projectId);
|
|
23
|
+
const commentStats = db.prepare(`SELECT
|
|
24
|
+
COUNT(*) AS comment_count,
|
|
25
|
+
MAX(ic.created_at) AS comment_created_max
|
|
26
|
+
FROM issue_comments ic
|
|
27
|
+
JOIN issues i ON ic.issue_id = i.id
|
|
28
|
+
WHERE i.project_id = ?`).get(projectId);
|
|
29
|
+
const workerStats = db.prepare(`SELECT
|
|
30
|
+
SUM(CASE WHEN status = 'idle' AND paused = 0 THEN 1 ELSE 0 END) AS idle_count,
|
|
31
|
+
SUM(CASE WHEN status = 'running' THEN 1 ELSE 0 END) AS running_count,
|
|
32
|
+
SUM(CASE WHEN status = 'error' THEN 1 ELSE 0 END) AS error_count,
|
|
33
|
+
SUM(CASE WHEN paused = 1 THEN 1 ELSE 0 END) AS paused_count,
|
|
34
|
+
MAX(finished_at) AS finished_max
|
|
35
|
+
FROM agents
|
|
36
|
+
WHERE project_id = ? AND is_controller = 0`).get(projectId);
|
|
37
|
+
return [
|
|
38
|
+
issueStats?.active_count ?? 0,
|
|
39
|
+
issueStats?.unassigned_count ?? 0,
|
|
40
|
+
issueStats?.user_waiting_count ?? 0,
|
|
41
|
+
issueStats?.open_count ?? 0,
|
|
42
|
+
issueStats?.in_progress_count ?? 0,
|
|
43
|
+
issueStats?.issue_updated_max || '',
|
|
44
|
+
commentStats?.comment_count ?? 0,
|
|
45
|
+
commentStats?.comment_created_max || '',
|
|
46
|
+
workerStats?.idle_count ?? 0,
|
|
47
|
+
workerStats?.running_count ?? 0,
|
|
48
|
+
workerStats?.error_count ?? 0,
|
|
49
|
+
workerStats?.paused_count ?? 0,
|
|
50
|
+
workerStats?.finished_max || '',
|
|
51
|
+
].join('|');
|
|
52
|
+
}
|
|
53
|
+
function buildControllerTaskPrompt(project, triggerIssueNumber) {
|
|
54
|
+
const db = (0, database_1.getDatabase)();
|
|
55
|
+
const issues = triggerIssueNumber
|
|
56
|
+
? db.prepare("SELECT * FROM issues WHERE project_id = ? AND number = ?").all(project.id, triggerIssueNumber)
|
|
57
|
+
: db.prepare("SELECT * FROM issues WHERE project_id = ? AND status IN ('open', 'in_progress') ORDER BY priority DESC, created_at").all(project.id);
|
|
58
|
+
// Pending issues: already decomposed into sub-issues, show summary only
|
|
59
|
+
const pendingIssues = triggerIssueNumber
|
|
60
|
+
? []
|
|
61
|
+
: db.prepare("SELECT * FROM issues WHERE project_id = ? AND status = 'pending' ORDER BY priority DESC, created_at").all(project.id);
|
|
62
|
+
const agents = db.prepare('SELECT id, name, role, status, paused, is_controller FROM agents WHERE project_id = ?').all(project.id);
|
|
63
|
+
const workers = agents.filter((a) => !a.is_controller);
|
|
64
|
+
const priorityLabel = (p) => (p >= 10 ? '🔴 USER' : p >= 5 ? '🟡 CTRL' : '⚪ AGENT');
|
|
65
|
+
// Build child issue count map for parent-child display
|
|
66
|
+
const childCounts = db.prepare(`SELECT parent_id, COUNT(*) as total,
|
|
67
|
+
SUM(CASE WHEN status IN ('done','closed') THEN 1 ELSE 0 END) as completed
|
|
68
|
+
FROM issues WHERE project_id = ? AND parent_id IS NOT NULL
|
|
69
|
+
GROUP BY parent_id`).all(project.id);
|
|
70
|
+
const childCountMap = new Map(childCounts.map((r) => [r.parent_id, r]));
|
|
71
|
+
const unassigned = issues.filter((i) => !i.assigned_to || i.assigned_to === 'all');
|
|
72
|
+
const assigned = issues.filter((i) => i.assigned_to && i.assigned_to !== 'all');
|
|
73
|
+
const formatIssue = (i) => {
|
|
74
|
+
const assignee = i.assigned_to
|
|
75
|
+
? (workers.find((a) => a.id === i.assigned_to)?.name || (i.assigned_to === 'user' ? 'User' : i.assigned_to))
|
|
76
|
+
: 'unassigned';
|
|
77
|
+
const labels = i.labels ? ` [${i.labels}]` : '';
|
|
78
|
+
// Parent-child info
|
|
79
|
+
const parentInfo = i.parent_id
|
|
80
|
+
? ` [child of #${db.prepare('SELECT number FROM issues WHERE id = ?').get(i.parent_id)?.number || '?'}]`
|
|
81
|
+
: '';
|
|
82
|
+
const cc = childCountMap.get(i.id);
|
|
83
|
+
const childInfo = cc ? ` [children: ${cc.completed}/${cc.total} done]` : '';
|
|
84
|
+
const comments = db.prepare('SELECT author_id, body, created_at FROM issue_comments WHERE issue_id = ? ORDER BY created_at').all(i.id);
|
|
85
|
+
const commentsText = comments.length > 0
|
|
86
|
+
? '\n Comments:\n' + comments.map((c) => {
|
|
87
|
+
const author = c.author_id === 'user'
|
|
88
|
+
? 'User'
|
|
89
|
+
: (workers.find((a) => a.id === c.author_id)?.name || c.author_id.slice(0, 8));
|
|
90
|
+
return ` [${author}] ${c.body || ''}`;
|
|
91
|
+
}).join('\n')
|
|
92
|
+
: '';
|
|
93
|
+
return `#${i.number} [${priorityLabel(i.priority)}] [${i.status}] ${i.title} -> ${assignee}${labels}${parentInfo}${childInfo}\n ${i.body || ''}${commentsText}`;
|
|
94
|
+
};
|
|
95
|
+
const doneRecent = db.prepare("SELECT * FROM issues WHERE project_id = ? AND status IN ('done', 'closed') ORDER BY updated_at DESC").all(project.id);
|
|
96
|
+
const triggerHint = triggerIssueNumber
|
|
97
|
+
? `\n## Trigger Context\n本次由 issue #${triggerIssueNumber} 触发,仅展示该 issue 信息。如需查看所有 issue,请通过 API 查询。\n`
|
|
98
|
+
: '';
|
|
99
|
+
return `## Project Task
|
|
100
|
+
${project.task_description}
|
|
101
|
+
${triggerHint}
|
|
102
|
+
## Unassigned Issues (${unassigned.length}) - ACTION REQUIRED
|
|
103
|
+
${unassigned.map(formatIssue).join('\n\n') || 'None - all issues are assigned.'}
|
|
104
|
+
|
|
105
|
+
## Assigned / In-Progress Issues (${assigned.length})
|
|
106
|
+
${assigned.map(formatIssue).join('\n\n') || 'None.'}
|
|
107
|
+
|
|
108
|
+
## Pending Issues (${pendingIssues.length}) — waiting for sub-issues to complete
|
|
109
|
+
${pendingIssues.map((i) => {
|
|
110
|
+
const assignee = i.assigned_to
|
|
111
|
+
? (workers.find((a) => a.id === i.assigned_to)?.name || (i.assigned_to === 'user' ? 'User' : i.assigned_to))
|
|
112
|
+
: 'unassigned';
|
|
113
|
+
const cc = childCountMap.get(i.id);
|
|
114
|
+
const progress = cc ? ` [${cc.completed}/${cc.total} done]` : '';
|
|
115
|
+
return `#${i.number} [pending] ${i.title} -> ${assignee}${progress}`;
|
|
116
|
+
}).join('\n') || 'None.'}
|
|
117
|
+
|
|
118
|
+
## Recently Completed (${doneRecent.length})
|
|
119
|
+
${doneRecent.map((i) => `#${i.number} [${i.status}] ${i.title}`).join('\n') || 'None.'}
|
|
120
|
+
|
|
121
|
+
## Existing Workers
|
|
122
|
+
${workers.map((a) => {
|
|
123
|
+
let line = `- ${a.name} (ID: ${a.id}, Status: ${a.status}${a.paused ? ', ⏸ PAUSED' : ''}, Role: ${a.role})`;
|
|
124
|
+
if (a.paused) {
|
|
125
|
+
line = `- ⏸ ${a.name} PAUSED (ID: ${a.id}, Role: ${a.role}) — user paused, do NOT start, do NOT assign issues, do NOT call unpause`;
|
|
126
|
+
}
|
|
127
|
+
else if (a.status === 'error') {
|
|
128
|
+
const errLog = db.prepare("SELECT content FROM conversation_logs WHERE agent_id = ? AND stream = 'stderr' ORDER BY id DESC LIMIT 1").get(a.id);
|
|
129
|
+
const errMsg = errLog?.content || 'Unknown error';
|
|
130
|
+
line = `- ⚠️ ${a.name} ERRORED (ID: ${a.id}, Role: ${a.role}) — last error: ${errMsg}`;
|
|
131
|
+
}
|
|
132
|
+
return line;
|
|
133
|
+
}).join('\n') || '(none yet)'}
|
|
134
|
+
|
|
135
|
+
## Rules
|
|
136
|
+
1. **复用agent。** NEVER create a new agent if one with a similar role already exists. Reuse existing agents.
|
|
137
|
+
2. **分配unassigned issues。** 将未分配的issue分配给合适的idle agent,或"user"用于需要人工处理的任务。
|
|
138
|
+
3. **不要手动启动agent。** 系统会自动启动有assigned issue的idle agent,你只需要分配issue即可。**NEVER start paused agents。NEVER assign issues to paused agents。NEVER call unpause on paused agents — only the user can unpause。**
|
|
139
|
+
4. **拆分issue用parent_id。** 将大issue拆成子issue时,创建子issue时设置\`parent_id\`指向父issue的ID,然后将父issue状态设为\`pending\`。系统会自动追踪子issue进度,全部完成后自动通知。创建子issue示例:\`{"title":"子任务","parent_id":"父issue的ID",...}\`
|
|
140
|
+
5. **用户issue自动回流。** 用户创建的issue完成后,系统会自动assign回user,你不需要手动处理。但如果你发现用户issue的结果需要补充说明,可以添加评论。
|
|
141
|
+
6. **NEVER自己写代码。** Controller只负责协调和决策。所有代码修改(无论大小)都必须分配给开发agent。
|
|
142
|
+
7. **与用户沟通用issue。** 需要用户输入、审批、决策时,创建issue assigned给"user"。
|
|
143
|
+
8. **NEVER长时间等待。** 不要用sleep/wait/poll。如需等worker完成就直接退出,系统会在worker完成后自动触发你。每次turn应在60秒内完成。
|
|
144
|
+
9. **需求需用户确认。** 产品agent提出的新功能需求必须先分配给"user"等待确认。Bug修复可以直接分配开发。
|
|
145
|
+
10. **开发→测试流程。** 开发完成后创建测试验证issue(设parent_id关联父issue)分配给测试agent。测试通过标done,发现bug创建bug issue分配给开发。
|
|
146
|
+
11. **新issue还是新session。** 启动worker时通过start API的\`force_new_session\`决定:任务相关用默认session,全新任务用\`"force_new_session": true\`。
|
|
147
|
+
|
|
148
|
+
Assignable targets: ${agents.map((a) => `"${a.id}" (${a.name})`).join(', ')}, "user" for human tasks, or "all" to broadcast to everyone.`;
|
|
149
|
+
}
|
|
150
|
+
const lastTriggerTime = new Map();
|
|
151
|
+
const lastTriggerAtMs = new Map();
|
|
152
|
+
const lastTriggerSnapshot = new Map();
|
|
153
|
+
function hasNewActivity(projectId, since) {
|
|
154
|
+
const db = (0, database_1.getDatabase)();
|
|
155
|
+
const newIssues = db.prepare("SELECT 1 FROM issues WHERE project_id = ? AND (created_at > ? OR updated_at > ?) LIMIT 1").get(projectId, since, since);
|
|
156
|
+
if (newIssues)
|
|
157
|
+
return true;
|
|
158
|
+
const newComments = db.prepare("SELECT 1 FROM issue_comments ic JOIN issues i ON ic.issue_id = i.id WHERE i.project_id = ? AND ic.created_at > ? LIMIT 1").get(projectId, since);
|
|
159
|
+
if (newComments)
|
|
160
|
+
return true;
|
|
161
|
+
const agentChanges = db.prepare("SELECT 1 FROM agents WHERE project_id = ? AND is_controller = 0 AND finished_at > ? LIMIT 1").get(projectId, since);
|
|
162
|
+
if (agentChanges)
|
|
163
|
+
return true;
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
function nowAsDbTimestamp() {
|
|
167
|
+
return new Date().toISOString().replace('T', ' ').replace('Z', '');
|
|
168
|
+
}
|
|
169
|
+
function triggerControllerAgent(project, skipActivityCheck = false, triggerIssueNumber) {
|
|
170
|
+
const db = (0, database_1.getDatabase)();
|
|
171
|
+
const controller = db.prepare('SELECT * FROM agents WHERE project_id = ? AND is_controller = 1').get(project.id);
|
|
172
|
+
if (!controller) {
|
|
173
|
+
logger_1.default.warn(`No controller agent found for project ${project.id}`);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (controller.status === 'running') {
|
|
177
|
+
logger_1.default.info(`Controller agent for project ${project.id} is already running, skipping.`);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (controller.paused) {
|
|
181
|
+
logger_1.default.info(`Controller agent for project ${project.id} is paused, skipping.`);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const now = Date.now();
|
|
185
|
+
// Idle-period optimization: skip LLM call entirely when controller has nothing to do.
|
|
186
|
+
if (!triggerIssueNumber) {
|
|
187
|
+
// Check 1: any issues that need controller to assign or handle?
|
|
188
|
+
const needsControllerAction = db.prepare(`SELECT 1 FROM issues WHERE project_id = ? AND status IN ('open', 'in_progress')
|
|
189
|
+
AND (assigned_to IS NULL OR assigned_to = 'all' OR assigned_to IN (
|
|
190
|
+
SELECT id FROM agents WHERE project_id = ? AND is_controller = 1
|
|
191
|
+
)) LIMIT 1`).get(project.id, project.id);
|
|
192
|
+
if (!needsControllerAction) {
|
|
193
|
+
// Check 2: any workers in error state that controller might need to handle?
|
|
194
|
+
const errorWorkers = db.prepare(`SELECT 1 FROM agents WHERE project_id = ? AND is_controller = 0 AND status = 'error' AND paused = 0 LIMIT 1`).get(project.id);
|
|
195
|
+
if (!errorWorkers) {
|
|
196
|
+
logger_1.default.info(`Skipping controller trigger: no unassigned issues and no errored workers in project "${project.name}"`);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// If there are errored workers, let controller handle them
|
|
200
|
+
logger_1.default.info(`Controller trigger: errored workers detected in project "${project.name}"`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (!skipActivityCheck) {
|
|
204
|
+
const lastAt = lastTriggerAtMs.get(project.id);
|
|
205
|
+
if (lastAt && now - lastAt < TRIGGER_DEBOUNCE_MS) {
|
|
206
|
+
logger_1.default.info(`Skipping controller trigger: debounced (${now - lastAt}ms < ${TRIGGER_DEBOUNCE_MS}ms) for project "${project.name}"`);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const since = lastTriggerTime.get(project.id);
|
|
210
|
+
if (since && !hasNewActivity(project.id, since)) {
|
|
211
|
+
logger_1.default.info(`Skipping controller trigger: no new activity since last run for project "${project.name}"`);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const snapshot = buildActivitySnapshot(project.id);
|
|
216
|
+
if (!skipActivityCheck) {
|
|
217
|
+
const prevSnapshot = lastTriggerSnapshot.get(project.id);
|
|
218
|
+
if (prevSnapshot && prevSnapshot === snapshot) {
|
|
219
|
+
logger_1.default.info(`Skipping controller trigger: no-op snapshot unchanged for project "${project.name}"`);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const triggerTime = nowAsDbTimestamp();
|
|
224
|
+
const taskPrompt = buildControllerTaskPrompt(project, triggerIssueNumber);
|
|
225
|
+
lastTriggerAtMs.set(project.id, now);
|
|
226
|
+
try {
|
|
227
|
+
logger_1.default.info(`Triggering controller agent for project "${project.name}"`);
|
|
228
|
+
(0, orchestrator_1.startControllerOrchestration)({ project, controller, taskPrompt, triggerIssueNumber });
|
|
229
|
+
lastTriggerTime.set(project.id, triggerTime);
|
|
230
|
+
lastTriggerSnapshot.set(project.id, snapshot);
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
lastTriggerAtMs.delete(project.id);
|
|
234
|
+
throw err;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/services/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Agent, Project } from '../types';
|
|
2
|
+
export interface LangGraphControllerInput {
|
|
3
|
+
project: Project;
|
|
4
|
+
controller: Agent;
|
|
5
|
+
taskPrompt: string;
|
|
6
|
+
triggerIssueNumber?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface OrchestrationWorkerAction {
|
|
9
|
+
agentId: string;
|
|
10
|
+
issueIds: string[];
|
|
11
|
+
issueNumbers: number[];
|
|
12
|
+
reason: string;
|
|
13
|
+
}
|
|
14
|
+
export interface OrchestrationDispatchResult {
|
|
15
|
+
agentId: string;
|
|
16
|
+
started: boolean;
|
|
17
|
+
message: string;
|
|
18
|
+
runId?: string;
|
|
19
|
+
pid?: number;
|
|
20
|
+
}
|
|
21
|
+
export type ControllerDecision = 'execute_controller' | 'finish';
|
|
22
|
+
export declare function runControllerWithLangGraph(input: LangGraphControllerInput): Promise<{
|
|
23
|
+
controllerStarted: boolean;
|
|
24
|
+
runId?: string;
|
|
25
|
+
pid?: number;
|
|
26
|
+
decision: ControllerDecision;
|
|
27
|
+
dispatchSummary: string;
|
|
28
|
+
dispatchCount: number;
|
|
29
|
+
controllerReasons: string[];
|
|
30
|
+
actions: OrchestrationWorkerAction[];
|
|
31
|
+
dispatchResults: OrchestrationDispatchResult[];
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=langgraph-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langgraph-runner.d.ts","sourceRoot":"","sources":["../../src/services/langgraph-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAS,OAAO,EAAE,MAAM,UAAU,CAAC;AAQjD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,QAAQ,CAAC;AAiiBjE,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC;IACT,iBAAiB,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,eAAe,EAAE,2BAA2B,EAAE,CAAC;CAChD,CAAC,CA2BD"}
|