godcrm/backend/services/agent-job/query.js
GOD CRM Release f89e074dd1
Some checks failed
CI / Lint / Typecheck / Test / Build (push) Has been cancelled
CI / PostgreSQL Integration Tests (push) Has been cancelled
GOD CRM — public scrubbed snapshot
Governed substrate for autonomous agents: scoped identity (passports),
audited actions, MCP workspace. Infra IPs and secrets redacted for public release.
2026-08-10 04:01:45 +03:00

71 lines
1.7 KiB
JavaScript

/**
* AgentJobService — Query Module
*
* getJob, getJobByUuid, getPendingJobs, getJobsForConversation, getStalledJobs.
*/
import { dbGet, dbAll } from '../../database/connection.js';
/**
* Get a job by its database ID
*/
export async function getJob(jobId) {
return dbGet(
`SELECT * FROM agent_jobs WHERE id = $1`,
[jobId]
);
}
/**
* Get a job by its UUID
*/
export async function getJobByUuid(jobUuid) {
return dbGet(
`SELECT * FROM agent_jobs WHERE job_id = $1`,
[jobUuid]
);
}
/**
* Get all pending jobs (for worker polling)
*/
export async function getPendingJobs(limit = 10) {
return dbAll(
`SELECT * FROM agent_jobs WHERE status = 'pending' ORDER BY created_at ASC LIMIT $1`,
[limit]
);
}
/**
* Get all jobs for a conversation
*/
export async function getJobsForConversation(conversationId) {
return dbAll(
`SELECT * FROM agent_jobs WHERE conversation_id = $1 ORDER BY created_at DESC`,
[conversationId]
);
}
/**
* Check if the conversation's processing has been cancelled.
* Used by agent loop to detect user-initiated stop between iterations.
* Returns true if the conversation is no longer marked as processing
* (cancelJob sets is_processing=false).
*/
export async function isConversationCancelled(conversationId) {
const row = await dbGet(
`SELECT is_processing FROM conversations WHERE id = $1`,
[conversationId]
);
if (!row) return true;
return !row.is_processing && row.is_processing !== undefined;
}
/**
* Get stalled jobs (processing but past timeout)
*/
export async function getStalledJobs() {
return dbAll(
`SELECT * FROM agent_jobs WHERE status = 'processing' AND timeout_at < NOW()`
);
}