@dotsetlabs/dotclaw 1.1.0 → 1.3.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/README.md +1 -0
- package/config-examples/runtime.json +19 -0
- package/container/agent-runner/package-lock.json +2 -2
- package/container/agent-runner/package.json +1 -1
- package/container/agent-runner/src/container-protocol.ts +3 -0
- package/container/agent-runner/src/index.ts +20 -1
- package/container/agent-runner/src/ipc.ts +35 -0
- package/container/agent-runner/src/tools.ts +115 -0
- package/dist/agent-context.d.ts +1 -0
- package/dist/agent-context.d.ts.map +1 -1
- package/dist/agent-context.js +8 -1
- package/dist/agent-context.js.map +1 -1
- package/dist/agent-execution.d.ts +7 -0
- package/dist/agent-execution.d.ts.map +1 -1
- package/dist/agent-execution.js +12 -6
- package/dist/agent-execution.js.map +1 -1
- package/dist/background-job-classifier.d.ts +16 -0
- package/dist/background-job-classifier.d.ts.map +1 -0
- package/dist/background-job-classifier.js +124 -0
- package/dist/background-job-classifier.js.map +1 -0
- package/dist/background-jobs.d.ts +47 -0
- package/dist/background-jobs.d.ts.map +1 -0
- package/dist/background-jobs.js +406 -0
- package/dist/background-jobs.js.map +1 -0
- package/dist/container-protocol.d.ts +3 -0
- package/dist/container-protocol.d.ts.map +1 -1
- package/dist/container-runner.d.ts +1 -0
- package/dist/container-runner.d.ts.map +1 -1
- package/dist/container-runner.js +2 -2
- package/dist/container-runner.js.map +1 -1
- package/dist/dashboard.d.ts +1 -0
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +8 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/db.d.ts +39 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +198 -0
- package/dist/db.js.map +1 -1
- package/dist/index.js +257 -224
- package/dist/index.js.map +1 -1
- package/dist/metrics.d.ts +1 -0
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +9 -0
- package/dist/metrics.js.map +1 -1
- package/dist/runtime-config.d.ts +22 -4
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +29 -5
- package/dist/runtime-config.js.map +1 -1
- package/dist/task-scheduler.d.ts +5 -0
- package/dist/task-scheduler.d.ts.map +1 -1
- package/dist/task-scheduler.js +121 -2
- package/dist/task-scheduler.js.map +1 -1
- package/dist/tool-policy.d.ts.map +1 -1
- package/dist/tool-policy.js +6 -0
- package/dist/tool-policy.js.map +1 -1
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ Personal OpenRouter-based assistant for Telegram. Each request runs inside an is
|
|
|
8
8
|
- Containerized agent runtime with strict mounts
|
|
9
9
|
- Long-term memory with embeddings and semantic search
|
|
10
10
|
- Scheduled tasks (cron and one-off)
|
|
11
|
+
- Background jobs for long-running work
|
|
11
12
|
- Tool policies and daily budgets
|
|
12
13
|
- Plugin tools and Autotune optimization
|
|
13
14
|
- Prometheus-compatible metrics
|
|
@@ -15,6 +15,25 @@
|
|
|
15
15
|
"embeddings": {
|
|
16
16
|
"enabled": true
|
|
17
17
|
}
|
|
18
|
+
},
|
|
19
|
+
"backgroundJobs": {
|
|
20
|
+
"enabled": true,
|
|
21
|
+
"maxConcurrent": 2,
|
|
22
|
+
"maxRuntimeMs": 2400000,
|
|
23
|
+
"autoSpawn": {
|
|
24
|
+
"enabled": true,
|
|
25
|
+
"foregroundTimeoutMs": 180000,
|
|
26
|
+
"onTimeout": true,
|
|
27
|
+
"onToolLimit": true,
|
|
28
|
+
"classifier": {
|
|
29
|
+
"enabled": true,
|
|
30
|
+
"model": "openai/gpt-5-nano",
|
|
31
|
+
"timeoutMs": 3000,
|
|
32
|
+
"maxOutputTokens": 32,
|
|
33
|
+
"temperature": 0,
|
|
34
|
+
"confidenceThreshold": 0.6
|
|
35
|
+
}
|
|
36
|
+
}
|
|
18
37
|
}
|
|
19
38
|
},
|
|
20
39
|
"agent": {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dotclaw-agent-runner",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "dotclaw-agent-runner",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.2.0",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@openrouter/sdk": "^0.3.0",
|
|
12
12
|
"cron-parser": "^5.0.0",
|
|
@@ -9,9 +9,12 @@ export interface ContainerInput {
|
|
|
9
9
|
isMain: boolean;
|
|
10
10
|
isScheduledTask?: boolean;
|
|
11
11
|
isBackgroundTask?: boolean;
|
|
12
|
+
isBackgroundJob?: boolean;
|
|
12
13
|
taskId?: string;
|
|
14
|
+
jobId?: string;
|
|
13
15
|
userId?: string;
|
|
14
16
|
userName?: string;
|
|
17
|
+
maxToolSteps?: number;
|
|
15
18
|
memoryRecall?: string[];
|
|
16
19
|
userProfile?: string | null;
|
|
17
20
|
memoryStats?: {
|
|
@@ -316,6 +316,8 @@ function buildSystemInstructions(params: {
|
|
|
316
316
|
isScheduledTask: boolean;
|
|
317
317
|
isBackgroundTask: boolean;
|
|
318
318
|
taskId?: string;
|
|
319
|
+
isBackgroundJob: boolean;
|
|
320
|
+
jobId?: string;
|
|
319
321
|
planBlock?: string;
|
|
320
322
|
taskExtractionPack?: PromptPack | null;
|
|
321
323
|
responseQualityPack?: PromptPack | null;
|
|
@@ -334,8 +336,13 @@ function buildSystemInstructions(params: {
|
|
|
334
336
|
'- `NpmInstall`: install npm dependencies in the workspace.',
|
|
335
337
|
'- `mcp__dotclaw__send_message`: send Telegram messages.',
|
|
336
338
|
'- `mcp__dotclaw__schedule_task`: schedule tasks.',
|
|
339
|
+
'- `mcp__dotclaw__run_task`: run a scheduled task immediately.',
|
|
337
340
|
'- `mcp__dotclaw__list_tasks`, `mcp__dotclaw__pause_task`, `mcp__dotclaw__resume_task`, `mcp__dotclaw__cancel_task`.',
|
|
338
341
|
'- `mcp__dotclaw__update_task`: update a task (state, prompt, schedule, status).',
|
|
342
|
+
'- `mcp__dotclaw__spawn_job`: start a background job.',
|
|
343
|
+
'- `mcp__dotclaw__job_status`, `mcp__dotclaw__list_jobs`, `mcp__dotclaw__cancel_job`.',
|
|
344
|
+
'- `mcp__dotclaw__job_update`: log job progress or notify the user.',
|
|
345
|
+
'Rule: If the task is likely to take more than ~2 minutes or needs multi-step research/coding, you MUST call `mcp__dotclaw__spawn_job` immediately and tell the user you queued it. Do not run long tasks in the foreground.',
|
|
339
346
|
'- `mcp__dotclaw__register_group`: main group only.',
|
|
340
347
|
'- `mcp__dotclaw__remove_group`, `mcp__dotclaw__list_groups`: main group only.',
|
|
341
348
|
'- `mcp__dotclaw__set_model`: main group only.',
|
|
@@ -424,6 +431,12 @@ function buildSystemInstructions(params: {
|
|
|
424
431
|
const backgroundNote = params.isBackgroundTask
|
|
425
432
|
? 'You are running in the background for a user request. Focus on completing the task and return a complete response without asking follow-up questions unless strictly necessary.'
|
|
426
433
|
: '';
|
|
434
|
+
const jobNote = params.isBackgroundJob
|
|
435
|
+
? `You are running as a background job${params.jobId ? ` (job id: ${params.jobId})` : ''}. Return a complete result. Use \`mcp__dotclaw__job_update\` for progress if needed. Prefer writing large outputs to the job artifacts directory.`
|
|
436
|
+
: '';
|
|
437
|
+
const jobArtifactsNote = params.isBackgroundJob && params.jobId
|
|
438
|
+
? `Job artifacts directory: /workspace/group/jobs/${params.jobId}`
|
|
439
|
+
: '';
|
|
427
440
|
|
|
428
441
|
const taskExtractionBlock = params.taskExtractionPack
|
|
429
442
|
? formatTaskExtractionPack({
|
|
@@ -477,6 +490,8 @@ function buildSystemInstructions(params: {
|
|
|
477
490
|
`You are ${params.assistantName}, a personal assistant running inside DotClaw.`,
|
|
478
491
|
scheduledNote,
|
|
479
492
|
backgroundNote,
|
|
493
|
+
jobNote,
|
|
494
|
+
jobArtifactsNote,
|
|
480
495
|
toolsDoc,
|
|
481
496
|
browserAutomation,
|
|
482
497
|
groupNotes,
|
|
@@ -817,7 +832,9 @@ export async function runAgentOnce(input: ContainerInput): Promise<ContainerOutp
|
|
|
817
832
|
config.temperature = input.modelTemperature;
|
|
818
833
|
}
|
|
819
834
|
const openrouterOptions = getOpenRouterOptions(agentConfig);
|
|
820
|
-
const maxToolSteps =
|
|
835
|
+
const maxToolSteps = Number.isFinite(input.maxToolSteps)
|
|
836
|
+
? Math.max(1, Math.floor(input.maxToolSteps as number))
|
|
837
|
+
: agent.tools.maxToolSteps;
|
|
821
838
|
const memoryExtractionEnabled = agent.memory.extraction.enabled;
|
|
822
839
|
const isDaemon = process.env.DOTCLAW_DAEMON === '1';
|
|
823
840
|
const memoryExtractionAsync = agent.memory.extraction.async;
|
|
@@ -1064,6 +1081,8 @@ export async function runAgentOnce(input: ContainerInput): Promise<ContainerOutp
|
|
|
1064
1081
|
isScheduledTask: !!input.isScheduledTask,
|
|
1065
1082
|
isBackgroundTask: !!input.isBackgroundTask,
|
|
1066
1083
|
taskId: input.taskId,
|
|
1084
|
+
isBackgroundJob: !!input.isBackgroundJob,
|
|
1085
|
+
jobId: input.jobId,
|
|
1067
1086
|
planBlock: planBlockValue,
|
|
1068
1087
|
taskExtractionPack: taskPackResult?.pack || null,
|
|
1069
1088
|
responseQualityPack: responseQualityResult?.pack || null,
|
|
@@ -258,6 +258,41 @@ export function createIpcHandlers(ctx: IpcContext, config: IpcConfig) {
|
|
|
258
258
|
return requestResponse('list_groups', {}, config);
|
|
259
259
|
},
|
|
260
260
|
|
|
261
|
+
async runTask(taskId: string) {
|
|
262
|
+
return requestResponse('run_task', { task_id: taskId }, config);
|
|
263
|
+
},
|
|
264
|
+
|
|
265
|
+
async spawnJob(args: {
|
|
266
|
+
prompt: string;
|
|
267
|
+
context_mode?: 'group' | 'isolated';
|
|
268
|
+
timeout_ms?: number;
|
|
269
|
+
max_tool_steps?: number;
|
|
270
|
+
tool_allow?: string[];
|
|
271
|
+
tool_deny?: string[];
|
|
272
|
+
model_override?: string;
|
|
273
|
+
priority?: number;
|
|
274
|
+
tags?: string[];
|
|
275
|
+
target_group?: string;
|
|
276
|
+
}) {
|
|
277
|
+
return requestResponse('spawn_job', args as Record<string, unknown>, config);
|
|
278
|
+
},
|
|
279
|
+
|
|
280
|
+
async jobStatus(jobId: string) {
|
|
281
|
+
return requestResponse('job_status', { job_id: jobId }, config);
|
|
282
|
+
},
|
|
283
|
+
|
|
284
|
+
async listJobs(args: { status?: string; limit?: number; target_group?: string }) {
|
|
285
|
+
return requestResponse('list_jobs', args as Record<string, unknown>, config);
|
|
286
|
+
},
|
|
287
|
+
|
|
288
|
+
async cancelJob(jobId: string) {
|
|
289
|
+
return requestResponse('cancel_job', { job_id: jobId }, config);
|
|
290
|
+
},
|
|
291
|
+
|
|
292
|
+
async jobUpdate(args: { job_id: string; message: string; level?: string; notify?: boolean; data?: Record<string, unknown> }) {
|
|
293
|
+
return requestResponse('job_update', args as Record<string, unknown>, config);
|
|
294
|
+
},
|
|
295
|
+
|
|
261
296
|
async setModel(args: { model: string; scope?: 'global' | 'group' | 'user'; target_id?: string }) {
|
|
262
297
|
if (!isMain) {
|
|
263
298
|
return { ok: false, error: 'Only the main group can change the model.' };
|
|
@@ -1456,6 +1456,20 @@ export function createTools(ctx: IpcContext, config: AgentRuntimeConfig['agent']
|
|
|
1456
1456
|
ipc.scheduleTask(args))
|
|
1457
1457
|
});
|
|
1458
1458
|
|
|
1459
|
+
const runTaskTool = tool({
|
|
1460
|
+
name: 'mcp__dotclaw__run_task',
|
|
1461
|
+
description: 'Run an existing scheduled task immediately without modifying its schedule.',
|
|
1462
|
+
inputSchema: z.object({
|
|
1463
|
+
task_id: z.string()
|
|
1464
|
+
}),
|
|
1465
|
+
outputSchema: z.object({
|
|
1466
|
+
ok: z.boolean(),
|
|
1467
|
+
result: z.any().optional(),
|
|
1468
|
+
error: z.string().optional()
|
|
1469
|
+
}),
|
|
1470
|
+
execute: wrapExecute('mcp__dotclaw__run_task', async ({ task_id }: { task_id: string }) => ipc.runTask(task_id))
|
|
1471
|
+
});
|
|
1472
|
+
|
|
1459
1473
|
const listTasksTool = tool({
|
|
1460
1474
|
name: 'mcp__dotclaw__list_tasks',
|
|
1461
1475
|
description: 'List all scheduled tasks.',
|
|
@@ -1523,6 +1537,101 @@ export function createTools(ctx: IpcContext, config: AgentRuntimeConfig['agent']
|
|
|
1523
1537
|
ipc.updateTask(args))
|
|
1524
1538
|
});
|
|
1525
1539
|
|
|
1540
|
+
const spawnJobTool = tool({
|
|
1541
|
+
name: 'mcp__dotclaw__spawn_job',
|
|
1542
|
+
description: 'Start a background job that runs asynchronously and reports results later.',
|
|
1543
|
+
inputSchema: z.object({
|
|
1544
|
+
prompt: z.string(),
|
|
1545
|
+
context_mode: z.enum(['group', 'isolated']).optional(),
|
|
1546
|
+
timeout_ms: z.number().optional(),
|
|
1547
|
+
max_tool_steps: z.number().optional(),
|
|
1548
|
+
tool_allow: z.array(z.string()).optional(),
|
|
1549
|
+
tool_deny: z.array(z.string()).optional(),
|
|
1550
|
+
model_override: z.string().optional(),
|
|
1551
|
+
priority: z.number().optional(),
|
|
1552
|
+
tags: z.array(z.string()).optional(),
|
|
1553
|
+
target_group: z.string().optional()
|
|
1554
|
+
}),
|
|
1555
|
+
outputSchema: z.object({
|
|
1556
|
+
ok: z.boolean(),
|
|
1557
|
+
result: z.any().optional(),
|
|
1558
|
+
error: z.string().optional()
|
|
1559
|
+
}),
|
|
1560
|
+
execute: wrapExecute('mcp__dotclaw__spawn_job', async (args: {
|
|
1561
|
+
prompt: string;
|
|
1562
|
+
context_mode?: 'group' | 'isolated';
|
|
1563
|
+
timeout_ms?: number;
|
|
1564
|
+
max_tool_steps?: number;
|
|
1565
|
+
tool_allow?: string[];
|
|
1566
|
+
tool_deny?: string[];
|
|
1567
|
+
model_override?: string;
|
|
1568
|
+
priority?: number;
|
|
1569
|
+
tags?: string[];
|
|
1570
|
+
target_group?: string;
|
|
1571
|
+
}) => ipc.spawnJob(args))
|
|
1572
|
+
});
|
|
1573
|
+
|
|
1574
|
+
const jobStatusTool = tool({
|
|
1575
|
+
name: 'mcp__dotclaw__job_status',
|
|
1576
|
+
description: 'Get the status of a background job.',
|
|
1577
|
+
inputSchema: z.object({
|
|
1578
|
+
job_id: z.string()
|
|
1579
|
+
}),
|
|
1580
|
+
outputSchema: z.object({
|
|
1581
|
+
ok: z.boolean(),
|
|
1582
|
+
result: z.any().optional(),
|
|
1583
|
+
error: z.string().optional()
|
|
1584
|
+
}),
|
|
1585
|
+
execute: wrapExecute('mcp__dotclaw__job_status', async ({ job_id }: { job_id: string }) => ipc.jobStatus(job_id))
|
|
1586
|
+
});
|
|
1587
|
+
|
|
1588
|
+
const listJobsTool = tool({
|
|
1589
|
+
name: 'mcp__dotclaw__list_jobs',
|
|
1590
|
+
description: 'List background jobs for the group.',
|
|
1591
|
+
inputSchema: z.object({
|
|
1592
|
+
status: z.string().optional(),
|
|
1593
|
+
limit: z.number().optional(),
|
|
1594
|
+
target_group: z.string().optional()
|
|
1595
|
+
}),
|
|
1596
|
+
outputSchema: z.object({
|
|
1597
|
+
ok: z.boolean(),
|
|
1598
|
+
result: z.any().optional(),
|
|
1599
|
+
error: z.string().optional()
|
|
1600
|
+
}),
|
|
1601
|
+
execute: wrapExecute('mcp__dotclaw__list_jobs', async (args: { status?: string; limit?: number; target_group?: string }) => ipc.listJobs(args))
|
|
1602
|
+
});
|
|
1603
|
+
|
|
1604
|
+
const cancelJobTool = tool({
|
|
1605
|
+
name: 'mcp__dotclaw__cancel_job',
|
|
1606
|
+
description: 'Cancel a background job.',
|
|
1607
|
+
inputSchema: z.object({
|
|
1608
|
+
job_id: z.string()
|
|
1609
|
+
}),
|
|
1610
|
+
outputSchema: z.object({
|
|
1611
|
+
ok: z.boolean(),
|
|
1612
|
+
error: z.string().optional()
|
|
1613
|
+
}),
|
|
1614
|
+
execute: wrapExecute('mcp__dotclaw__cancel_job', async ({ job_id }: { job_id: string }) => ipc.cancelJob(job_id))
|
|
1615
|
+
});
|
|
1616
|
+
|
|
1617
|
+
const jobUpdateTool = tool({
|
|
1618
|
+
name: 'mcp__dotclaw__job_update',
|
|
1619
|
+
description: 'Log progress or send a notification for a background job.',
|
|
1620
|
+
inputSchema: z.object({
|
|
1621
|
+
job_id: z.string(),
|
|
1622
|
+
message: z.string(),
|
|
1623
|
+
level: z.enum(['info', 'progress', 'warn', 'error']).optional(),
|
|
1624
|
+
notify: z.boolean().optional(),
|
|
1625
|
+
data: z.record(z.string(), z.any()).optional()
|
|
1626
|
+
}),
|
|
1627
|
+
outputSchema: z.object({
|
|
1628
|
+
ok: z.boolean(),
|
|
1629
|
+
error: z.string().optional()
|
|
1630
|
+
}),
|
|
1631
|
+
execute: wrapExecute('mcp__dotclaw__job_update', async (args: { job_id: string; message: string; level?: string; notify?: boolean; data?: Record<string, unknown> }) =>
|
|
1632
|
+
ipc.jobUpdate(args))
|
|
1633
|
+
});
|
|
1634
|
+
|
|
1526
1635
|
const registerGroupTool = tool({
|
|
1527
1636
|
name: 'mcp__dotclaw__register_group',
|
|
1528
1637
|
description: 'Register a new Telegram chat (main group only).',
|
|
@@ -1692,11 +1801,17 @@ export function createTools(ctx: IpcContext, config: AgentRuntimeConfig['agent']
|
|
|
1692
1801
|
npmInstallTool,
|
|
1693
1802
|
sendMessageTool,
|
|
1694
1803
|
scheduleTaskTool,
|
|
1804
|
+
runTaskTool,
|
|
1695
1805
|
listTasksTool,
|
|
1696
1806
|
pauseTaskTool,
|
|
1697
1807
|
resumeTaskTool,
|
|
1698
1808
|
cancelTaskTool,
|
|
1699
1809
|
updateTaskTool,
|
|
1810
|
+
spawnJobTool,
|
|
1811
|
+
jobStatusTool,
|
|
1812
|
+
listJobsTool,
|
|
1813
|
+
cancelJobTool,
|
|
1814
|
+
jobUpdateTool,
|
|
1700
1815
|
memoryUpsertTool,
|
|
1701
1816
|
memoryForgetTool,
|
|
1702
1817
|
memoryListTool,
|
package/dist/agent-context.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-context.d.ts","sourceRoot":"","sources":["../src/agent-context.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+C,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG3F,OAAO,EAAgB,iBAAiB,EAAE,sBAAsB,EAAE,eAAe,EAAwB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxJ,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC9G,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE;YAAE,cAAc,CAAC,EAAE,MAAM,CAAC;YAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC3H,aAAa,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IACpD,YAAY,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IACjD,aAAa,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACzD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AA4BF,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-context.d.ts","sourceRoot":"","sources":["../src/agent-context.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+C,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG3F,OAAO,EAAgB,iBAAiB,EAAE,sBAAsB,EAAE,eAAe,EAAwB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxJ,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC9G,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE;YAAE,cAAc,CAAC,EAAE,MAAM,CAAC;YAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC3H,aAAa,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IACpD,YAAY,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IACjD,aAAa,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACzD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AA4BF,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwFxB"}
|
package/dist/agent-context.js
CHANGED
|
@@ -64,9 +64,16 @@ export async function buildAgentContext(params) {
|
|
|
64
64
|
userId: params.userId ?? null,
|
|
65
65
|
toolPolicy: baseToolPolicy
|
|
66
66
|
});
|
|
67
|
-
|
|
67
|
+
let toolPolicy = params.toolDeny && params.toolDeny.length > 0
|
|
68
68
|
? mergeToolPolicyDeny(budgetedToolPolicy, params.toolDeny)
|
|
69
69
|
: budgetedToolPolicy;
|
|
70
|
+
if (params.toolAllow && params.toolAllow.length > 0) {
|
|
71
|
+
const allowSet = new Set(params.toolAllow.map(item => item.trim()).filter(Boolean));
|
|
72
|
+
toolPolicy = {
|
|
73
|
+
...toolPolicy,
|
|
74
|
+
allow: (toolPolicy.allow || []).filter(name => allowSet.has(name))
|
|
75
|
+
};
|
|
76
|
+
}
|
|
70
77
|
const toolReliability = getToolReliability({ groupFolder: params.groupFolder, limit: 200 })
|
|
71
78
|
.map(row => ({
|
|
72
79
|
name: row.tool_name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-context.js","sourceRoot":"","sources":["../src/agent-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAc,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,eAAe,EAAE,oBAAoB,EAAqB,MAAM,qBAAqB,CAAC;AACxJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAiBxD;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,iBAAoC,EACpC,eAAuB,EACvB,aAAqB;IAErB,MAAM,aAAa,GAAG,iBAAiB,CAAC,cAAc,CAAC;IACvD,MAAM,aAAa,GAAG,iBAAiB,CAAC,qBAAqB,IAAI,eAAe,CAAC;IAEjF,gDAAgD;IAChD,MAAM,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC;IAEtD,2BAA2B;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC;IACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,WAAW,CAAC,CAAC;IAEnE,8DAA8D;IAC9D,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAC/C,aAAa,CACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-context.js","sourceRoot":"","sources":["../src/agent-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,15 +31,20 @@ export declare function executeAgentRun(params: {
|
|
|
31
31
|
recallQuery: string;
|
|
32
32
|
recallMaxResults: number;
|
|
33
33
|
recallMaxTokens: number;
|
|
34
|
+
toolAllow?: string[];
|
|
34
35
|
toolDeny?: string[];
|
|
36
|
+
modelOverride?: string;
|
|
35
37
|
sessionId?: string;
|
|
36
38
|
persistSession?: boolean;
|
|
37
39
|
onSessionUpdate?: (sessionId: string) => void;
|
|
38
40
|
useGroupLock?: boolean;
|
|
41
|
+
useSemaphore?: boolean;
|
|
39
42
|
abortSignal?: AbortSignal;
|
|
40
43
|
isScheduledTask?: boolean;
|
|
41
44
|
isBackgroundTask?: boolean;
|
|
42
45
|
taskId?: string;
|
|
46
|
+
jobId?: string;
|
|
47
|
+
isBackgroundJob?: boolean;
|
|
43
48
|
streaming?: {
|
|
44
49
|
enabled: boolean;
|
|
45
50
|
draftId: number;
|
|
@@ -52,6 +57,8 @@ export declare function executeAgentRun(params: {
|
|
|
52
57
|
lastActivity: string;
|
|
53
58
|
isRegistered: boolean;
|
|
54
59
|
}>;
|
|
60
|
+
maxToolSteps?: number;
|
|
61
|
+
timeoutMs?: number;
|
|
55
62
|
}): Promise<{
|
|
56
63
|
output: ContainerOutput;
|
|
57
64
|
context: AgentContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-execution.d.ts","sourceRoot":"","sources":["../src/agent-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,OAAO,EAAE,YAAY,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY;CAInD;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,SAAS,CAWZ;AAkBD,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-execution.d.ts","sourceRoot":"","sources":["../src/agent-execution.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-execution.js
CHANGED
|
@@ -47,6 +47,7 @@ export async function executeAgentRun(params) {
|
|
|
47
47
|
const isMain = group.folder === MAIN_GROUP_FOLDER;
|
|
48
48
|
const persistSession = params.persistSession !== false;
|
|
49
49
|
const useGroupLock = params.useGroupLock !== false;
|
|
50
|
+
const useSemaphore = params.useSemaphore !== false;
|
|
50
51
|
writeTasksSnapshot(group.folder, isMain, buildTaskSnapshot());
|
|
51
52
|
if (isMain && params.availableGroups) {
|
|
52
53
|
writeGroupsSnapshot(group.folder, isMain, params.availableGroups);
|
|
@@ -57,6 +58,7 @@ export async function executeAgentRun(params) {
|
|
|
57
58
|
recallQuery: params.recallQuery,
|
|
58
59
|
recallMaxResults: params.recallMaxResults,
|
|
59
60
|
recallMaxTokens: params.recallMaxTokens,
|
|
61
|
+
toolAllow: params.toolAllow,
|
|
60
62
|
toolDeny: params.toolDeny
|
|
61
63
|
});
|
|
62
64
|
const runContainer = () => runContainerAgent(group, {
|
|
@@ -68,6 +70,8 @@ export async function executeAgentRun(params) {
|
|
|
68
70
|
isScheduledTask: params.isScheduledTask,
|
|
69
71
|
isBackgroundTask: params.isBackgroundTask,
|
|
70
72
|
taskId: params.taskId,
|
|
73
|
+
jobId: params.jobId,
|
|
74
|
+
isBackgroundJob: params.isBackgroundJob,
|
|
71
75
|
userId: params.userId ?? undefined,
|
|
72
76
|
userName: params.userName,
|
|
73
77
|
memoryRecall: context.memoryRecall,
|
|
@@ -77,17 +81,19 @@ export async function executeAgentRun(params) {
|
|
|
77
81
|
toolReliability: context.toolReliability,
|
|
78
82
|
behaviorConfig: context.behaviorConfig,
|
|
79
83
|
toolPolicy: context.toolPolicy,
|
|
80
|
-
modelOverride: context.resolvedModel.model,
|
|
84
|
+
modelOverride: params.modelOverride || context.resolvedModel.model,
|
|
81
85
|
modelContextTokens: context.resolvedModel.override?.context_window,
|
|
82
86
|
modelMaxOutputTokens: context.resolvedModel.override?.max_output_tokens,
|
|
83
87
|
modelTemperature: context.resolvedModel.override?.temperature,
|
|
84
|
-
streaming: params.streaming
|
|
85
|
-
|
|
88
|
+
streaming: params.streaming,
|
|
89
|
+
maxToolSteps: params.maxToolSteps
|
|
90
|
+
}, { abortSignal: params.abortSignal, timeoutMs: params.timeoutMs });
|
|
86
91
|
let output;
|
|
87
92
|
try {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
const runner = () => (useGroupLock ? withGroupLock(group.folder, () => runContainer()) : runContainer());
|
|
94
|
+
output = useSemaphore
|
|
95
|
+
? await runWithAgentSemaphore(runner)
|
|
96
|
+
: await runner();
|
|
91
97
|
}
|
|
92
98
|
catch (err) {
|
|
93
99
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-execution.js","sourceRoot":"","sources":["../src/agent-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAerK,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,OAAO,CAAe;IACtB,YAAY,OAAe,EAAE,OAAqB;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAGD,MAAM,UAAU,eAAe,CAAC,MAM/B;IACC,OAAO;QACL,QAAQ,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACzE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;QACnC,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,WAAW,EAAE,CAAC,CAAC,YAAY;QAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,cAAc,EAAE,CAAC,CAAC,cAAc;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;QAChC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC;QAC/B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;KACjC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-execution.js","sourceRoot":"","sources":["../src/agent-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { NewMessage } from './types.js';
|
|
2
|
+
export type BackgroundJobClassifierResult = {
|
|
3
|
+
shouldBackground: boolean;
|
|
4
|
+
confidence: number;
|
|
5
|
+
reason?: string;
|
|
6
|
+
latencyMs?: number;
|
|
7
|
+
model?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function classifyBackgroundJob(params: {
|
|
11
|
+
lastMessage: NewMessage;
|
|
12
|
+
recentMessages: NewMessage[];
|
|
13
|
+
isGroup: boolean;
|
|
14
|
+
chatType: string;
|
|
15
|
+
}): Promise<BackgroundJobClassifierResult>;
|
|
16
|
+
//# sourceMappingURL=background-job-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-job-classifier.d.ts","sourceRoot":"","sources":["../src/background-job-classifier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,MAAM,MAAM,6BAA6B,GAAG;IAC1C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA+FF,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,WAAW,EAAE,UAAU,CAAC;IACxB,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAkDzC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { loadRuntimeConfig } from './runtime-config.js';
|
|
2
|
+
const CLASSIFIER_SYSTEM_PROMPT = [
|
|
3
|
+
'You are a routing classifier for DotClaw.',
|
|
4
|
+
'Decide whether the user request should be run as a long-running background job.',
|
|
5
|
+
'Return JSON only: {"background":true|false,"confidence":0-1,"reason":"...","estimated_minutes":number}.',
|
|
6
|
+
'Background=true if the task is likely to take more than ~2 minutes or requires multi-step research/coding or many tool calls.',
|
|
7
|
+
'Background=false for quick answers, short clarifications, or simple tasks.',
|
|
8
|
+
'Keep reason short.'
|
|
9
|
+
].join('\n');
|
|
10
|
+
function extractJson(text) {
|
|
11
|
+
const trimmed = text.trim();
|
|
12
|
+
if (!trimmed)
|
|
13
|
+
return null;
|
|
14
|
+
if (trimmed.startsWith('{') && trimmed.endsWith('}'))
|
|
15
|
+
return trimmed;
|
|
16
|
+
const start = trimmed.indexOf('{');
|
|
17
|
+
const end = trimmed.lastIndexOf('}');
|
|
18
|
+
if (start >= 0 && end > start) {
|
|
19
|
+
return trimmed.slice(start, end + 1);
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
function buildClassifierPayload(params) {
|
|
24
|
+
const recent = params.recentMessages.slice(-3).map(m => ({
|
|
25
|
+
sender: m.sender_name,
|
|
26
|
+
content: m.content
|
|
27
|
+
}));
|
|
28
|
+
const payload = {
|
|
29
|
+
last_message: params.lastMessage.content,
|
|
30
|
+
recent_messages: recent,
|
|
31
|
+
is_group: params.isGroup,
|
|
32
|
+
chat_type: params.chatType
|
|
33
|
+
};
|
|
34
|
+
return JSON.stringify(payload);
|
|
35
|
+
}
|
|
36
|
+
async function callClassifier(params) {
|
|
37
|
+
const controller = new AbortController();
|
|
38
|
+
const timeout = setTimeout(() => controller.abort(), params.timeoutMs);
|
|
39
|
+
const startedAt = Date.now();
|
|
40
|
+
try {
|
|
41
|
+
const headers = {
|
|
42
|
+
'Content-Type': 'application/json',
|
|
43
|
+
Authorization: `Bearer ${params.apiKey}`
|
|
44
|
+
};
|
|
45
|
+
if (params.siteUrl)
|
|
46
|
+
headers['HTTP-Referer'] = params.siteUrl;
|
|
47
|
+
if (params.siteName)
|
|
48
|
+
headers['X-Title'] = params.siteName;
|
|
49
|
+
const body = {
|
|
50
|
+
model: params.model,
|
|
51
|
+
messages: [
|
|
52
|
+
{ role: 'system', content: CLASSIFIER_SYSTEM_PROMPT },
|
|
53
|
+
{ role: 'user', content: params.input }
|
|
54
|
+
],
|
|
55
|
+
max_tokens: params.maxOutputTokens,
|
|
56
|
+
temperature: params.temperature
|
|
57
|
+
};
|
|
58
|
+
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
|
|
59
|
+
method: 'POST',
|
|
60
|
+
headers,
|
|
61
|
+
body: JSON.stringify(body),
|
|
62
|
+
signal: controller.signal
|
|
63
|
+
});
|
|
64
|
+
const latencyMs = Date.now() - startedAt;
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
const text = await response.text();
|
|
67
|
+
throw new Error(`OpenRouter HTTP ${response.status}: ${text.slice(0, 300)}`);
|
|
68
|
+
}
|
|
69
|
+
const json = await response.json();
|
|
70
|
+
const text = json.choices?.[0]?.message?.content ?? '';
|
|
71
|
+
return { text, latencyMs };
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
clearTimeout(timeout);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export async function classifyBackgroundJob(params) {
|
|
78
|
+
const runtime = loadRuntimeConfig();
|
|
79
|
+
const classifierConfig = runtime.host.backgroundJobs.autoSpawn.classifier;
|
|
80
|
+
if (!classifierConfig.enabled) {
|
|
81
|
+
return { shouldBackground: false, confidence: 0 };
|
|
82
|
+
}
|
|
83
|
+
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
84
|
+
if (!apiKey) {
|
|
85
|
+
return { shouldBackground: false, confidence: 0, error: 'OPENROUTER_API_KEY is not set' };
|
|
86
|
+
}
|
|
87
|
+
const input = buildClassifierPayload(params);
|
|
88
|
+
const model = classifierConfig.model;
|
|
89
|
+
try {
|
|
90
|
+
const { text, latencyMs } = await callClassifier({
|
|
91
|
+
apiKey,
|
|
92
|
+
model,
|
|
93
|
+
timeoutMs: classifierConfig.timeoutMs,
|
|
94
|
+
maxOutputTokens: classifierConfig.maxOutputTokens,
|
|
95
|
+
temperature: classifierConfig.temperature,
|
|
96
|
+
input,
|
|
97
|
+
siteUrl: runtime.agent.openrouter.siteUrl || undefined,
|
|
98
|
+
siteName: runtime.agent.openrouter.siteName || undefined
|
|
99
|
+
});
|
|
100
|
+
const jsonText = extractJson(text);
|
|
101
|
+
if (!jsonText) {
|
|
102
|
+
return { shouldBackground: false, confidence: 0, latencyMs, model, error: 'Classifier returned no JSON' };
|
|
103
|
+
}
|
|
104
|
+
const parsed = JSON.parse(jsonText);
|
|
105
|
+
const confidence = Number.isFinite(parsed.confidence) ? Number(parsed.confidence) : 0;
|
|
106
|
+
const shouldBackground = parsed.background === true && confidence >= classifierConfig.confidenceThreshold;
|
|
107
|
+
return {
|
|
108
|
+
shouldBackground,
|
|
109
|
+
confidence,
|
|
110
|
+
reason: typeof parsed.reason === 'string' ? parsed.reason : undefined,
|
|
111
|
+
latencyMs,
|
|
112
|
+
model
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
return {
|
|
117
|
+
shouldBackground: false,
|
|
118
|
+
confidence: 0,
|
|
119
|
+
error: err instanceof Error ? err.message : String(err),
|
|
120
|
+
model
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=background-job-classifier.js.map
|