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":"process-manager.js","sourceRoot":"","sources":["../../src/services/process-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { FastifyReply, FastifyRequest } from 'fastify';
|
|
2
|
+
import Database from 'better-sqlite3';
|
|
3
|
+
import { Project, User } from '../types';
|
|
4
|
+
export type ProjectPermissionLevel = 'none' | 'member' | 'owner' | 'admin' | 'bypass';
|
|
5
|
+
export interface ProjectPermission {
|
|
6
|
+
exists: boolean;
|
|
7
|
+
allowed: boolean;
|
|
8
|
+
canManage: boolean;
|
|
9
|
+
level: ProjectPermissionLevel;
|
|
10
|
+
}
|
|
11
|
+
export interface ProjectRequestContext {
|
|
12
|
+
user: User | null;
|
|
13
|
+
localhostBypass: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function shouldBypassProjectPermissions(user: User | null | undefined, localhostBypass: boolean): boolean;
|
|
16
|
+
export declare function getProjectRequestContext(request: FastifyRequest): ProjectRequestContext;
|
|
17
|
+
export declare function getProjectPermission(db: Database.Database, projectId: string, user: User | null | undefined, localhostBypass?: boolean): ProjectPermission;
|
|
18
|
+
export declare function listAccessibleProjects(db: Database.Database, user: User | null | undefined, localhostBypass?: boolean): Project[];
|
|
19
|
+
export declare function listAccessibleProjectIds(db: Database.Database, user: User | null | undefined, localhostBypass?: boolean): string[];
|
|
20
|
+
export declare function ensureProjectAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, projectId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
21
|
+
permission: ProjectPermission;
|
|
22
|
+
}) | null;
|
|
23
|
+
export declare function ensureAgentAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, agentId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
24
|
+
permission: ProjectPermission;
|
|
25
|
+
entity: {
|
|
26
|
+
id: string;
|
|
27
|
+
project_id: string;
|
|
28
|
+
};
|
|
29
|
+
}) | null;
|
|
30
|
+
export declare function ensureIssueAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, issueId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
31
|
+
permission: ProjectPermission;
|
|
32
|
+
entity: {
|
|
33
|
+
id: string;
|
|
34
|
+
project_id: string;
|
|
35
|
+
};
|
|
36
|
+
}) | null;
|
|
37
|
+
export declare function ensureCommentAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, commentId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
38
|
+
permission: ProjectPermission;
|
|
39
|
+
entity: {
|
|
40
|
+
id: string;
|
|
41
|
+
project_id: string;
|
|
42
|
+
};
|
|
43
|
+
}) | null;
|
|
44
|
+
export declare function ensureMilestoneAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, milestoneId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
45
|
+
permission: ProjectPermission;
|
|
46
|
+
entity: {
|
|
47
|
+
id: string;
|
|
48
|
+
project_id: string;
|
|
49
|
+
};
|
|
50
|
+
}) | null;
|
|
51
|
+
export declare function ensureKnowledgeAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, knowledgeId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
52
|
+
permission: ProjectPermission;
|
|
53
|
+
entity: {
|
|
54
|
+
id: string;
|
|
55
|
+
project_id: string;
|
|
56
|
+
};
|
|
57
|
+
}) | null;
|
|
58
|
+
export declare function ensureMemoryAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, memoryId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
59
|
+
permission: ProjectPermission;
|
|
60
|
+
entity: {
|
|
61
|
+
id: string;
|
|
62
|
+
project_id: string;
|
|
63
|
+
agent_id: string;
|
|
64
|
+
};
|
|
65
|
+
}) | null;
|
|
66
|
+
export declare function ensureMessageAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, messageId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
67
|
+
permission: ProjectPermission;
|
|
68
|
+
entity: {
|
|
69
|
+
id: string;
|
|
70
|
+
project_id: string;
|
|
71
|
+
from_agent_id: string;
|
|
72
|
+
to_agent_id: string;
|
|
73
|
+
};
|
|
74
|
+
}) | null;
|
|
75
|
+
export declare function ensureRelationAccess(db: Database.Database, request: FastifyRequest, reply: FastifyReply, relationId: string, requireManage?: boolean): (ProjectRequestContext & {
|
|
76
|
+
permission: ProjectPermission;
|
|
77
|
+
entity: {
|
|
78
|
+
id: string;
|
|
79
|
+
project_id: string;
|
|
80
|
+
from_issue_id: string;
|
|
81
|
+
to_issue_id: string;
|
|
82
|
+
};
|
|
83
|
+
}) | null;
|
|
84
|
+
//# sourceMappingURL=project-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-permissions.d.ts","sourceRoot":"","sources":["../../src/services/project-permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldBypassProjectPermissions = shouldBypassProjectPermissions;
|
|
4
|
+
exports.getProjectRequestContext = getProjectRequestContext;
|
|
5
|
+
exports.getProjectPermission = getProjectPermission;
|
|
6
|
+
exports.listAccessibleProjects = listAccessibleProjects;
|
|
7
|
+
exports.listAccessibleProjectIds = listAccessibleProjectIds;
|
|
8
|
+
exports.ensureProjectAccess = ensureProjectAccess;
|
|
9
|
+
exports.ensureAgentAccess = ensureAgentAccess;
|
|
10
|
+
exports.ensureIssueAccess = ensureIssueAccess;
|
|
11
|
+
exports.ensureCommentAccess = ensureCommentAccess;
|
|
12
|
+
exports.ensureMilestoneAccess = ensureMilestoneAccess;
|
|
13
|
+
exports.ensureKnowledgeAccess = ensureKnowledgeAccess;
|
|
14
|
+
exports.ensureMemoryAccess = ensureMemoryAccess;
|
|
15
|
+
exports.ensureMessageAccess = ensureMessageAccess;
|
|
16
|
+
exports.ensureRelationAccess = ensureRelationAccess;
|
|
17
|
+
const auth_1 = require("../middleware/auth");
|
|
18
|
+
function shouldBypassProjectPermissions(user, localhostBypass) {
|
|
19
|
+
if (user?.id === 'legacy')
|
|
20
|
+
return true;
|
|
21
|
+
return localhostBypass && !user;
|
|
22
|
+
}
|
|
23
|
+
function getProjectRequestContext(request) {
|
|
24
|
+
return {
|
|
25
|
+
user: (0, auth_1.getRequestUser)(request),
|
|
26
|
+
localhostBypass: (0, auth_1.isLocalhostBypassRequest)(request),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function getProjectPermission(db, projectId, user, localhostBypass = false) {
|
|
30
|
+
const project = db.prepare('SELECT owner_id FROM projects WHERE id = ?').get(projectId);
|
|
31
|
+
if (!project) {
|
|
32
|
+
return { exists: false, allowed: false, canManage: false, level: 'none' };
|
|
33
|
+
}
|
|
34
|
+
if (shouldBypassProjectPermissions(user, localhostBypass)) {
|
|
35
|
+
return { exists: true, allowed: true, canManage: true, level: 'bypass' };
|
|
36
|
+
}
|
|
37
|
+
if (!user) {
|
|
38
|
+
return { exists: true, allowed: false, canManage: false, level: 'none' };
|
|
39
|
+
}
|
|
40
|
+
if (user.role === 'admin') {
|
|
41
|
+
return { exists: true, allowed: true, canManage: true, level: 'admin' };
|
|
42
|
+
}
|
|
43
|
+
if (project.owner_id && project.owner_id === user.id) {
|
|
44
|
+
return { exists: true, allowed: true, canManage: true, level: 'owner' };
|
|
45
|
+
}
|
|
46
|
+
const membership = db.prepare('SELECT role FROM project_members WHERE project_id = ? AND user_id = ?').get(projectId, user.id);
|
|
47
|
+
if (membership) {
|
|
48
|
+
const isOwner = membership.role === 'owner';
|
|
49
|
+
return {
|
|
50
|
+
exists: true,
|
|
51
|
+
allowed: true,
|
|
52
|
+
canManage: isOwner,
|
|
53
|
+
level: isOwner ? 'owner' : 'member',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return { exists: true, allowed: false, canManage: false, level: 'none' };
|
|
57
|
+
}
|
|
58
|
+
function listAccessibleProjects(db, user, localhostBypass = false) {
|
|
59
|
+
if (shouldBypassProjectPermissions(user, localhostBypass) || user?.role === 'admin') {
|
|
60
|
+
return db.prepare('SELECT * FROM projects ORDER BY created_at DESC').all();
|
|
61
|
+
}
|
|
62
|
+
if (!user) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
return db.prepare(`SELECT DISTINCT p.*
|
|
66
|
+
FROM projects p
|
|
67
|
+
LEFT JOIN project_members pm
|
|
68
|
+
ON pm.project_id = p.id AND pm.user_id = ?
|
|
69
|
+
WHERE p.owner_id = ? OR pm.user_id IS NOT NULL
|
|
70
|
+
ORDER BY p.created_at DESC`).all(user.id, user.id);
|
|
71
|
+
}
|
|
72
|
+
function listAccessibleProjectIds(db, user, localhostBypass = false) {
|
|
73
|
+
return listAccessibleProjects(db, user, localhostBypass).map((project) => project.id);
|
|
74
|
+
}
|
|
75
|
+
function ensureProjectAccess(db, request, reply, projectId, requireManage = false) {
|
|
76
|
+
const context = getProjectRequestContext(request);
|
|
77
|
+
const permission = getProjectPermission(db, projectId, context.user, context.localhostBypass);
|
|
78
|
+
if (!permission.exists) {
|
|
79
|
+
reply.code(404).send({ error: 'Project not found' });
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
if (requireManage ? !permission.canManage : !permission.allowed) {
|
|
83
|
+
reply.code(403).send({ error: requireManage ? 'Project management access required' : 'Project access denied' });
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return { ...context, permission };
|
|
87
|
+
}
|
|
88
|
+
function ensureEntityAccess(db, request, reply, query, id, notFoundError, requireManage = false) {
|
|
89
|
+
const entity = db.prepare(query).get(id);
|
|
90
|
+
if (!entity) {
|
|
91
|
+
reply.code(404).send({ error: notFoundError });
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const access = ensureProjectAccess(db, request, reply, entity.project_id, requireManage);
|
|
95
|
+
if (!access)
|
|
96
|
+
return null;
|
|
97
|
+
return { ...access, entity };
|
|
98
|
+
}
|
|
99
|
+
function ensureAgentAccess(db, request, reply, agentId, requireManage = false) {
|
|
100
|
+
return ensureEntityAccess(db, request, reply, 'SELECT id, project_id FROM agents WHERE id = ?', agentId, 'Agent not found', requireManage);
|
|
101
|
+
}
|
|
102
|
+
function ensureIssueAccess(db, request, reply, issueId, requireManage = false) {
|
|
103
|
+
return ensureEntityAccess(db, request, reply, 'SELECT id, project_id FROM issues WHERE id = ?', issueId, 'Issue not found', requireManage);
|
|
104
|
+
}
|
|
105
|
+
function ensureCommentAccess(db, request, reply, commentId, requireManage = false) {
|
|
106
|
+
return ensureEntityAccess(db, request, reply, `SELECT c.id, i.project_id
|
|
107
|
+
FROM issue_comments c
|
|
108
|
+
JOIN issues i ON i.id = c.issue_id
|
|
109
|
+
WHERE c.id = ?`, commentId, 'Comment not found', requireManage);
|
|
110
|
+
}
|
|
111
|
+
function ensureMilestoneAccess(db, request, reply, milestoneId, requireManage = false) {
|
|
112
|
+
return ensureEntityAccess(db, request, reply, 'SELECT id, project_id FROM milestones WHERE id = ?', milestoneId, 'Milestone not found', requireManage);
|
|
113
|
+
}
|
|
114
|
+
function ensureKnowledgeAccess(db, request, reply, knowledgeId, requireManage = false) {
|
|
115
|
+
return ensureEntityAccess(db, request, reply, 'SELECT id, project_id FROM knowledge_entries WHERE id = ?', knowledgeId, 'Knowledge entry not found', requireManage);
|
|
116
|
+
}
|
|
117
|
+
function ensureMemoryAccess(db, request, reply, memoryId, requireManage = false) {
|
|
118
|
+
return ensureEntityAccess(db, request, reply, 'SELECT id, project_id, agent_id FROM agent_memories WHERE id = ?', memoryId, 'Memory not found', requireManage);
|
|
119
|
+
}
|
|
120
|
+
function ensureMessageAccess(db, request, reply, messageId, requireManage = false) {
|
|
121
|
+
return ensureEntityAccess(db, request, reply, 'SELECT id, project_id, from_agent_id, to_agent_id FROM agent_messages WHERE id = ?', messageId, 'Message not found', requireManage);
|
|
122
|
+
}
|
|
123
|
+
function ensureRelationAccess(db, request, reply, relationId, requireManage = false) {
|
|
124
|
+
return ensureEntityAccess(db, request, reply, `SELECT r.id, src.project_id, r.from_issue_id, r.to_issue_id
|
|
125
|
+
FROM issue_relations r
|
|
126
|
+
JOIN issues src ON src.id = r.from_issue_id
|
|
127
|
+
WHERE r.id = ?`, relationId, 'Relation not found', requireManage);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=project-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-permissions.js","sourceRoot":"","sources":["../../src/services/project-permissions.ts"],"names":[],"mappings":";;AAuBA,wEAGC;AAED,4DAKC;AAED,oDA0CC;AAED,wDAqBC;AAED,4DAMC;AAED,kDAqBC;AAsBD,8CAgBC;AAED,8CAgBC;AAED,kDAmBC;AAED,sDAgBC;AAED,sDAgBC;AAED,gDAgBC;AAED,kDAgBC;AAED,oDAmBC;AA3SD,6CAA8E;AAqB9E,SAAgB,8BAA8B,CAAC,IAA6B,EAAE,eAAwB;IACpG,IAAI,IAAI,EAAE,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,eAAe,IAAI,CAAC,IAAI,CAAC;AAClC,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAAuB;IAC9D,OAAO;QACL,IAAI,EAAE,IAAA,qBAAc,EAAC,OAAO,CAAC;QAC7B,eAAe,EAAE,IAAA,+BAAwB,EAAC,OAAO,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAClC,EAAqB,EACrB,SAAiB,EACjB,IAA6B,EAC7B,eAAe,GAAG,KAAK;IAEvB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,SAAS,CAA4C,CAAC;IACnI,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC5E,CAAC;IAED,IAAI,8BAA8B,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3E,CAAC;IAED,IAAI,IAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1E,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAK,CAAC,EAAE,EAAE,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAC3B,uEAAuE,CACxE,CAAC,GAAG,CAAC,SAAS,EAAE,IAAK,CAAC,EAAE,CAAiC,CAAC;IAE3D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC;QAC5C,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;SACpC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3E,CAAC;AAED,SAAgB,sBAAsB,CACpC,EAAqB,EACrB,IAA6B,EAC7B,eAAe,GAAG,KAAK;IAEvB,IAAI,8BAA8B,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QACpF,OAAO,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,EAAe,CAAC;IAC1F,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,CAAC,OAAO,CACf;;;;;gCAK4B,CAC7B,CAAC,GAAG,CAAC,IAAK,CAAC,EAAE,EAAE,IAAK,CAAC,EAAE,CAAc,CAAC;AACzC,CAAC;AAED,SAAgB,wBAAwB,CACtC,EAAqB,EACrB,IAA6B,EAC7B,eAAe,GAAG,KAAK;IAEvB,OAAO,sBAAsB,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,SAAgB,mBAAmB,CACjC,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,SAAiB,EACjB,aAAa,GAAG,KAAK;IAErB,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAE9F,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC;QAChH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,KAAa,EACb,EAAU,EACV,aAAqB,EACrB,aAAa,GAAG,KAAK;IAErB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAkB,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACzF,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,SAAgB,iBAAiB,CAC/B,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,OAAe,EACf,aAAa,GAAG,KAAK;IAErB,OAAO,kBAAkB,CACvB,EAAE,EACF,OAAO,EACP,KAAK,EACL,gDAAgD,EAChD,OAAO,EACP,iBAAiB,EACjB,aAAa,CACd,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAC/B,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,OAAe,EACf,aAAa,GAAG,KAAK;IAErB,OAAO,kBAAkB,CACvB,EAAE,EACF,OAAO,EACP,KAAK,EACL,gDAAgD,EAChD,OAAO,EACP,iBAAiB,EACjB,aAAa,CACd,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CACjC,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,SAAiB,EACjB,aAAa,GAAG,KAAK;IAErB,OAAO,kBAAkB,CACvB,EAAE,EACF,OAAO,EACP,KAAK,EACL;;;oBAGgB,EAChB,SAAS,EACT,mBAAmB,EACnB,aAAa,CACd,CAAC;AACJ,CAAC;AAED,SAAgB,qBAAqB,CACnC,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,WAAmB,EACnB,aAAa,GAAG,KAAK;IAErB,OAAO,kBAAkB,CACvB,EAAE,EACF,OAAO,EACP,KAAK,EACL,oDAAoD,EACpD,WAAW,EACX,qBAAqB,EACrB,aAAa,CACd,CAAC;AACJ,CAAC;AAED,SAAgB,qBAAqB,CACnC,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,WAAmB,EACnB,aAAa,GAAG,KAAK;IAErB,OAAO,kBAAkB,CACvB,EAAE,EACF,OAAO,EACP,KAAK,EACL,2DAA2D,EAC3D,WAAW,EACX,2BAA2B,EAC3B,aAAa,CACd,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,QAAgB,EAChB,aAAa,GAAG,KAAK;IAErB,OAAO,kBAAkB,CACvB,EAAE,EACF,OAAO,EACP,KAAK,EACL,kEAAkE,EAClE,QAAQ,EACR,kBAAkB,EAClB,aAAa,CACd,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CACjC,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,SAAiB,EACjB,aAAa,GAAG,KAAK;IAErB,OAAO,kBAAkB,CACvB,EAAE,EACF,OAAO,EACP,KAAK,EACL,oFAAoF,EACpF,SAAS,EACT,mBAAmB,EACnB,aAAa,CACd,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAClC,EAAqB,EACrB,OAAuB,EACvB,KAAmB,EACnB,UAAkB,EAClB,aAAa,GAAG,KAAK;IAErB,OAAO,kBAAkB,CACvB,EAAE,EACF,OAAO,EACP,KAAK,EACL;;;oBAGgB,EAChB,UAAU,EACV,oBAAoB,EACpB,aAAa,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/services/scheduler.ts"],"names":[],"mappings":"AAkBA,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA6BvF;AA8OD,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAiBxC"}
|
|
@@ -0,0 +1,300 @@
|
|
|
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.findStalePendingIssue = findStalePendingIssue;
|
|
7
|
+
exports.initializeScheduler = initializeScheduler;
|
|
8
|
+
exports.stopAllSchedulers = stopAllSchedulers;
|
|
9
|
+
const node_cron_1 = __importDefault(require("node-cron"));
|
|
10
|
+
const database_1 = require("../db/database");
|
|
11
|
+
const controller_1 = require("./controller");
|
|
12
|
+
const pre_controller_1 = require("./pre-controller");
|
|
13
|
+
const process_manager_1 = require("./process-manager");
|
|
14
|
+
const agent_issue_batch_1 = require("./agent-issue-batch");
|
|
15
|
+
const system_prompt_1 = require("./system-prompt");
|
|
16
|
+
const config_1 = require("../config");
|
|
17
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
18
|
+
let logCleanupTask = null;
|
|
19
|
+
let issueScanTask = null;
|
|
20
|
+
let watchdogTask = null;
|
|
21
|
+
const pendingWatchdogTimers = new Set();
|
|
22
|
+
// Pending issues should normally be waiting on child issues or active blockers.
|
|
23
|
+
// If neither exists anymore, the issue is stale and needs controller review.
|
|
24
|
+
function findStalePendingIssue(projectId) {
|
|
25
|
+
const db = (0, database_1.getDatabase)();
|
|
26
|
+
return db.prepare(`
|
|
27
|
+
SELECT i.number
|
|
28
|
+
FROM issues i
|
|
29
|
+
LEFT JOIN (
|
|
30
|
+
SELECT parent_id,
|
|
31
|
+
SUM(CASE WHEN status NOT IN ('done', 'closed') THEN 1 ELSE 0 END) AS active_children
|
|
32
|
+
FROM issues
|
|
33
|
+
WHERE project_id = ? AND parent_id IS NOT NULL
|
|
34
|
+
GROUP BY parent_id
|
|
35
|
+
) child_stats ON child_stats.parent_id = i.id
|
|
36
|
+
LEFT JOIN (
|
|
37
|
+
SELECT r.to_issue_id AS issue_id,
|
|
38
|
+
SUM(CASE WHEN blocker.status NOT IN ('done', 'closed') THEN 1 ELSE 0 END) AS active_blockers
|
|
39
|
+
FROM issue_relations r
|
|
40
|
+
JOIN issues blocker ON blocker.id = r.from_issue_id
|
|
41
|
+
JOIN issues blocked ON blocked.id = r.to_issue_id
|
|
42
|
+
WHERE blocked.project_id = ? AND r.relation_type = 'blocks'
|
|
43
|
+
GROUP BY r.to_issue_id
|
|
44
|
+
) blocker_stats ON blocker_stats.issue_id = i.id
|
|
45
|
+
WHERE i.project_id = ?
|
|
46
|
+
AND i.status = 'pending'
|
|
47
|
+
AND COALESCE(i.assigned_to, '') <> 'user'
|
|
48
|
+
AND COALESCE(child_stats.active_children, 0) = 0
|
|
49
|
+
AND COALESCE(blocker_stats.active_blockers, 0) = 0
|
|
50
|
+
ORDER BY i.priority DESC, i.updated_at ASC, i.created_at ASC
|
|
51
|
+
LIMIT 1
|
|
52
|
+
`).get(projectId, projectId, projectId);
|
|
53
|
+
}
|
|
54
|
+
function startLogCleanup() {
|
|
55
|
+
// Run daily at 3:00 AM
|
|
56
|
+
logCleanupTask = node_cron_1.default.schedule('0 3 * * *', () => {
|
|
57
|
+
try {
|
|
58
|
+
const db = (0, database_1.getDatabase)();
|
|
59
|
+
const days = config_1.config.logRetentionDays;
|
|
60
|
+
const result = db.prepare("DELETE FROM conversation_logs WHERE created_at < datetime('now', ?)").run(`-${days} days`);
|
|
61
|
+
if (result.changes > 0) {
|
|
62
|
+
logger_1.default.info(`Log cleanup: deleted ${result.changes} log entries older than ${days} days`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
logger_1.default.error(e, 'Log cleanup failed');
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
logger_1.default.info(`Log cleanup scheduled: retain ${config_1.config.logRetentionDays} days`);
|
|
70
|
+
}
|
|
71
|
+
// Periodic issue scan: every minute, check all active projects for open issues
|
|
72
|
+
// and trigger controller if there are issues needing attention
|
|
73
|
+
function startIssueScan() {
|
|
74
|
+
issueScanTask = node_cron_1.default.schedule('* * * * *', () => {
|
|
75
|
+
try {
|
|
76
|
+
const db = (0, database_1.getDatabase)();
|
|
77
|
+
const projects = db.prepare("SELECT * FROM projects WHERE status = 'active'").all();
|
|
78
|
+
for (const project of projects) {
|
|
79
|
+
let controllerTriggered = false;
|
|
80
|
+
// Check if there are any open/in_progress issues in this project
|
|
81
|
+
const hasOpenIssues = db.prepare("SELECT 1 FROM issues WHERE project_id = ? AND status IN ('open', 'in_progress') LIMIT 1").get(project.id);
|
|
82
|
+
const stalePendingIssue = findStalePendingIssue(project.id);
|
|
83
|
+
if (!hasOpenIssues && !stalePendingIssue)
|
|
84
|
+
continue;
|
|
85
|
+
// Directly start idle workers that have assigned open/in_progress issues
|
|
86
|
+
const idleWorkersWithIssues = db.prepare(`
|
|
87
|
+
SELECT a.* FROM agents a
|
|
88
|
+
WHERE a.project_id = ? AND a.is_controller = 0 AND a.status = 'idle' AND a.paused = 0
|
|
89
|
+
AND EXISTS (
|
|
90
|
+
SELECT 1 FROM issues i
|
|
91
|
+
WHERE i.project_id = ? AND i.assigned_to = a.id AND i.status IN ('open', 'in_progress')
|
|
92
|
+
)
|
|
93
|
+
`).all(project.id, project.id);
|
|
94
|
+
for (const worker of idleWorkersWithIssues) {
|
|
95
|
+
if ((0, process_manager_1.isAgentRunning)(worker.id))
|
|
96
|
+
continue;
|
|
97
|
+
// Cooldown: skip agents that just finished to avoid low-output tail restarts
|
|
98
|
+
if ((0, process_manager_1.isAgentInCooldown)(worker.id))
|
|
99
|
+
continue;
|
|
100
|
+
// Skip agents with consecutive low-output runs (tail request avoidance)
|
|
101
|
+
if ((0, process_manager_1.shouldSkipAutoRestart)(worker.id))
|
|
102
|
+
continue;
|
|
103
|
+
try {
|
|
104
|
+
// Build prompt same as /api/agents/:id/start
|
|
105
|
+
const parts = [];
|
|
106
|
+
if (worker.role)
|
|
107
|
+
parts.push(`Role: ${worker.role}`);
|
|
108
|
+
if (project.task_description)
|
|
109
|
+
parts.push(`Task: ${project.task_description}`);
|
|
110
|
+
const issues = db.prepare("SELECT * FROM issues WHERE project_id = ? AND assigned_to = ? AND status IN ('open', 'in_progress') ORDER BY priority DESC, created_at").all(project.id, worker.id);
|
|
111
|
+
if (issues.length > 0) {
|
|
112
|
+
const issueBatch = (0, agent_issue_batch_1.getAgentIssueBatch)(issues);
|
|
113
|
+
parts.push((0, agent_issue_batch_1.buildAssignedIssuesPrompt)(issueBatch));
|
|
114
|
+
(0, agent_issue_batch_1.markCurrentBatchInProgress)(db, issueBatch);
|
|
115
|
+
}
|
|
116
|
+
const prompt = parts.join('\n\n');
|
|
117
|
+
if (!prompt)
|
|
118
|
+
continue;
|
|
119
|
+
const commandTemplate = worker.command_template || project.command_template || config_1.config.defaultCommandTemplate;
|
|
120
|
+
const isRawShell = /^\s*(bash|sh|zsh)\s+-c\b/.test(commandTemplate);
|
|
121
|
+
const systemPrompt = isRawShell ? undefined : (0, system_prompt_1.buildSystemPrompt)(worker, project);
|
|
122
|
+
const issueBatch = (0, agent_issue_batch_1.getAgentIssueBatch)(issues);
|
|
123
|
+
logger_1.default.info(`Issue scan: auto-starting idle worker "${worker.name}" with ${issueBatch.currentBatch.length}/${issueBatch.activeIssues.length} assigned issue(s) in current batch for project "${project.name}"`);
|
|
124
|
+
(0, process_manager_1.startAgentProcess)(worker, prompt, commandTemplate, systemPrompt);
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
logger_1.default.error(e, `Issue scan: failed to auto-start worker "${worker.name}"`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Trigger controller for unassigned issues that need controller to assign
|
|
131
|
+
const needsController = db.prepare(`SELECT 1 FROM issues WHERE project_id = ? AND status IN ('open', 'in_progress')
|
|
132
|
+
AND (assigned_to IS NULL OR assigned_to = 'all')
|
|
133
|
+
LIMIT 1`).get(project.id);
|
|
134
|
+
if (needsController) {
|
|
135
|
+
logger_1.default.info(`Issue scan: issues needing controller attention in project "${project.name}", triggering controller`);
|
|
136
|
+
(0, controller_1.triggerControllerAgent)(project);
|
|
137
|
+
controllerTriggered = true;
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// Check for stale in_progress issues: assigned agent is idle (not paused),
|
|
141
|
+
// issue not updated for 5+ minutes. This catches cases where agent crashed
|
|
142
|
+
// or controller was interrupted mid-assignment.
|
|
143
|
+
// Exclude issues assigned to the controller itself to avoid self-trigger loops.
|
|
144
|
+
const staleIssue = db.prepare(`
|
|
145
|
+
SELECT i.number FROM issues i
|
|
146
|
+
JOIN agents a ON i.assigned_to = a.id
|
|
147
|
+
WHERE i.project_id = ? AND i.status = 'in_progress'
|
|
148
|
+
AND a.status = 'idle' AND a.paused = 0 AND a.is_controller = 0
|
|
149
|
+
AND i.updated_at < datetime('now', '-5 minutes')
|
|
150
|
+
ORDER BY i.priority DESC
|
|
151
|
+
LIMIT 1
|
|
152
|
+
`).get(project.id);
|
|
153
|
+
if (staleIssue) {
|
|
154
|
+
// Try pre-controller first to restart idle worker directly (avoid expensive LLM controller call)
|
|
155
|
+
if ((0, pre_controller_1.tryHandleWithoutLLM)(project.id, staleIssue.number)) {
|
|
156
|
+
logger_1.default.info(`Issue scan: stale issue #${staleIssue.number} handled by pre-controller (direct worker restart)`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
logger_1.default.info(`Issue scan: stale in_progress issue #${staleIssue.number} with idle agent in project "${project.name}", re-triggering controller`);
|
|
160
|
+
(0, controller_1.triggerControllerAgent)(project, false, staleIssue.number);
|
|
161
|
+
controllerTriggered = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (stalePendingIssue && !controllerTriggered) {
|
|
165
|
+
logger_1.default.info(`Issue scan: stale pending issue #${stalePendingIssue.number} in project "${project.name}", forcing controller review`);
|
|
166
|
+
(0, controller_1.triggerControllerAgent)(project, true, stalePendingIssue.number);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
logger_1.default.error(e, 'Issue scan failed');
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
logger_1.default.info('Issue scan scheduled: every 1 minute');
|
|
175
|
+
}
|
|
176
|
+
// hasActiveChildren removed — replaced by CPU activity detection in process-manager.ts
|
|
177
|
+
// Watchdog: detect agents stuck in 'running' state.
|
|
178
|
+
// Two checks:
|
|
179
|
+
// 1. Process tracked in-memory: kill if idle (no output) for > IDLE_TIMEOUT
|
|
180
|
+
// 2. DB says 'running' but no in-memory process: orphaned state, reset to idle
|
|
181
|
+
function startWatchdog() {
|
|
182
|
+
watchdogTask = node_cron_1.default.schedule('*/5 * * * *', () => {
|
|
183
|
+
try {
|
|
184
|
+
const db = (0, database_1.getDatabase)();
|
|
185
|
+
const runningAgents = db.prepare("SELECT * FROM agents WHERE status = 'running'").all();
|
|
186
|
+
for (const agent of runningAgents) {
|
|
187
|
+
if ((0, process_manager_1.isAgentRunning)(agent.id)) {
|
|
188
|
+
// Check if agent already produced Final Result but process hasn't exited
|
|
189
|
+
// (e.g., child curl stuck on a network request after completion)
|
|
190
|
+
const finalResultAge = (0, process_manager_1.getAgentFinalResultAge)(agent.id);
|
|
191
|
+
if (finalResultAge >= process_manager_1.FINAL_RESULT_KILL_DELAY_MS) {
|
|
192
|
+
const ageMin = Math.round(finalResultAge / 60000);
|
|
193
|
+
logger_1.default.warn(`Watchdog: agent "${agent.name}" produced Final Result ${ageMin} min ago but process still running, force-killing`);
|
|
194
|
+
db.prepare("INSERT INTO conversation_logs (agent_id, run_id, content, stream) VALUES (?, ?, ?, 'stderr')").run(agent.id, '', `[Argus] Watchdog: process force-killed — Final Result received ${ageMin} min ago but child process stuck`);
|
|
195
|
+
(0, process_manager_1.clearCpuSnapshot)(agent.id);
|
|
196
|
+
db.prepare("UPDATE agents SET status = 'stopped' WHERE id = ?").run(agent.id);
|
|
197
|
+
(0, process_manager_1.stopAgentProcess)(agent.id);
|
|
198
|
+
const t1 = setTimeout(() => {
|
|
199
|
+
pendingWatchdogTimers.delete(t1);
|
|
200
|
+
if (!(0, database_1.isDatabaseOpen)())
|
|
201
|
+
return;
|
|
202
|
+
const current = db.prepare('SELECT status FROM agents WHERE id = ?').get(agent.id);
|
|
203
|
+
if (current?.status === 'stopped') {
|
|
204
|
+
db.prepare("UPDATE agents SET status = 'idle' WHERE id = ?").run(agent.id);
|
|
205
|
+
}
|
|
206
|
+
}, 10000);
|
|
207
|
+
pendingWatchdogTimers.add(t1);
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
// Process exists in-memory — check if it's been silent too long
|
|
211
|
+
const idleMs = (0, process_manager_1.getAgentIdleMs)(agent.id);
|
|
212
|
+
if (idleMs >= process_manager_1.DEFAULT_IDLE_TIMEOUT_MS) {
|
|
213
|
+
// Before killing, check child process CPU activity to distinguish
|
|
214
|
+
// "running a long Bash command" from "truly stuck".
|
|
215
|
+
if (agent.pid) {
|
|
216
|
+
const cpuStatus = (0, process_manager_1.checkChildCpuActivity)(agent.id, agent.pid);
|
|
217
|
+
if (cpuStatus === 'active') {
|
|
218
|
+
logger_1.default.info(`Watchdog: agent "${agent.name}" idle for ${Math.round(idleMs / 60000)} min but child processes are CPU-active, resetting timer`);
|
|
219
|
+
(0, process_manager_1.resetAgentActivity)(agent.id);
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
if (cpuStatus === 'warming') {
|
|
223
|
+
logger_1.default.info(`Watchdog: agent "${agent.name}" idle for ${Math.round(idleMs / 60000)} min, child CPU unchanged but below stale threshold, waiting`);
|
|
224
|
+
(0, process_manager_1.resetAgentActivity)(agent.id);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
// cpuStatus === 'stale' or 'no_children' → proceed to kill
|
|
228
|
+
if (cpuStatus === 'stale') {
|
|
229
|
+
logger_1.default.warn(`Watchdog: agent "${agent.name}" child processes exist but CPU stale for multiple scans, killing`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
(0, process_manager_1.clearCpuSnapshot)(agent.id);
|
|
233
|
+
const idleMin = Math.round(idleMs / 60000);
|
|
234
|
+
logger_1.default.warn(`Watchdog: agent "${agent.name}" has no output for ${idleMin} min, killing (pid=${agent.pid})`);
|
|
235
|
+
db.prepare("INSERT INTO conversation_logs (agent_id, run_id, content, stream) VALUES (?, ?, ?, 'stderr')").run(agent.id, '', `[Argus] Watchdog: process killed after ${idleMin} minutes with no output`);
|
|
236
|
+
// Set to 'idle' before killing. The close handler will see status != 'running'
|
|
237
|
+
// (since we set idle here) and will keep it as idle (code 0 → idle, code != 0
|
|
238
|
+
// but status already idle → close handler reads current status and respects
|
|
239
|
+
// 'stopped'; for 'idle' it would set error). So we use 'stopped' to prevent
|
|
240
|
+
// error, then reset to idle after stop completes.
|
|
241
|
+
db.prepare("UPDATE agents SET status = 'stopped' WHERE id = ?").run(agent.id);
|
|
242
|
+
(0, process_manager_1.stopAgentProcess)(agent.id);
|
|
243
|
+
// After close handler fires (preserving 'stopped'), reset to idle so agent
|
|
244
|
+
// can be re-dispatched by issue scan
|
|
245
|
+
const t2 = setTimeout(() => {
|
|
246
|
+
pendingWatchdogTimers.delete(t2);
|
|
247
|
+
if (!(0, database_1.isDatabaseOpen)())
|
|
248
|
+
return;
|
|
249
|
+
const current = db.prepare('SELECT status FROM agents WHERE id = ?').get(agent.id);
|
|
250
|
+
if (current?.status === 'stopped') {
|
|
251
|
+
db.prepare("UPDATE agents SET status = 'idle' WHERE id = ?").run(agent.id);
|
|
252
|
+
}
|
|
253
|
+
}, 10000);
|
|
254
|
+
pendingWatchdogTimers.add(t2);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
// DB says running but process is gone — orphaned state (e.g., Argus restarted)
|
|
259
|
+
const startedAt = agent.started_at
|
|
260
|
+
? new Date(agent.started_at + (agent.started_at.includes('Z') ? '' : 'Z')).getTime()
|
|
261
|
+
: 0;
|
|
262
|
+
const runtimeMin = startedAt ? Math.round((Date.now() - startedAt) / 60000) : '?';
|
|
263
|
+
logger_1.default.warn(`Watchdog: agent "${agent.name}" marked running for ${runtimeMin} min but process is gone, resetting to idle`);
|
|
264
|
+
db.prepare("UPDATE agents SET status = 'idle', pid = NULL, finished_at = datetime('now') WHERE id = ?")
|
|
265
|
+
.run(agent.id);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch (e) {
|
|
270
|
+
logger_1.default.error(e, 'Watchdog scan failed');
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
logger_1.default.info(`Watchdog scheduled: every 5 minutes, idle timeout ${process_manager_1.DEFAULT_IDLE_TIMEOUT_MS / 60000} minutes`);
|
|
274
|
+
}
|
|
275
|
+
function initializeScheduler() {
|
|
276
|
+
startLogCleanup();
|
|
277
|
+
startIssueScan();
|
|
278
|
+
startWatchdog();
|
|
279
|
+
logger_1.default.info('Scheduler initialized');
|
|
280
|
+
}
|
|
281
|
+
function stopAllSchedulers() {
|
|
282
|
+
if (logCleanupTask) {
|
|
283
|
+
logCleanupTask.stop();
|
|
284
|
+
logCleanupTask = null;
|
|
285
|
+
}
|
|
286
|
+
if (issueScanTask) {
|
|
287
|
+
issueScanTask.stop();
|
|
288
|
+
issueScanTask = null;
|
|
289
|
+
}
|
|
290
|
+
if (watchdogTask) {
|
|
291
|
+
watchdogTask.stop();
|
|
292
|
+
watchdogTask = null;
|
|
293
|
+
}
|
|
294
|
+
// Cancel any pending watchdog setTimeout timers
|
|
295
|
+
for (const timer of pendingWatchdogTimers)
|
|
296
|
+
clearTimeout(timer);
|
|
297
|
+
pendingWatchdogTimers.clear();
|
|
298
|
+
logger_1.default.info('All schedulers stopped');
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=scheduler.js.map
|