@dotsetlabs/dotclaw 1.3.0 → 1.5.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 +9 -0
- package/config-examples/runtime.json +106 -3
- package/container/agent-runner/package-lock.json +2 -2
- package/container/agent-runner/package.json +1 -1
- package/container/agent-runner/src/agent-config.ts +20 -2
- package/container/agent-runner/src/container-protocol.ts +11 -0
- package/container/agent-runner/src/index.ts +128 -11
- package/container/agent-runner/src/tools.ts +84 -5
- package/dist/agent-context.d.ts +5 -0
- package/dist/agent-context.d.ts.map +1 -1
- package/dist/agent-context.js +19 -8
- package/dist/agent-context.js.map +1 -1
- package/dist/agent-execution.d.ts +6 -0
- package/dist/agent-execution.d.ts.map +1 -1
- package/dist/agent-execution.js +61 -4
- package/dist/agent-execution.js.map +1 -1
- package/dist/background-job-classifier.d.ts +4 -0
- package/dist/background-job-classifier.d.ts.map +1 -1
- package/dist/background-job-classifier.js +36 -15
- package/dist/background-job-classifier.js.map +1 -1
- package/dist/background-jobs.d.ts.map +1 -1
- package/dist/background-jobs.js +81 -4
- package/dist/background-jobs.js.map +1 -1
- package/dist/cli.js +343 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -3
- package/dist/config.js.map +1 -1
- package/dist/container-protocol.d.ts +11 -0
- package/dist/container-protocol.d.ts.map +1 -1
- package/dist/container-runner.d.ts.map +1 -1
- package/dist/container-runner.js +9 -1
- package/dist/container-runner.js.map +1 -1
- package/dist/dashboard.d.ts +5 -0
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +58 -8
- package/dist/dashboard.js.map +1 -1
- package/dist/db.d.ts +11 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +36 -0
- package/dist/db.js.map +1 -1
- package/dist/index.js +300 -37
- package/dist/index.js.map +1 -1
- package/dist/json-helpers.d.ts +6 -0
- package/dist/json-helpers.d.ts.map +1 -0
- package/dist/json-helpers.js +17 -0
- package/dist/json-helpers.js.map +1 -0
- package/dist/logger.d.ts +0 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/metrics.d.ts +3 -0
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +35 -1
- package/dist/metrics.js.map +1 -1
- package/dist/planner-probe.d.ts +14 -0
- package/dist/planner-probe.d.ts.map +1 -0
- package/dist/planner-probe.js +97 -0
- package/dist/planner-probe.js.map +1 -0
- package/dist/progress.d.ts +27 -0
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +151 -0
- package/dist/progress.js.map +1 -1
- package/dist/request-router.d.ts +34 -0
- package/dist/request-router.d.ts.map +1 -0
- package/dist/request-router.js +148 -0
- package/dist/request-router.js.map +1 -0
- package/dist/runtime-config.d.ts +67 -0
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +177 -14
- package/dist/runtime-config.js.map +1 -1
- package/dist/task-scheduler.d.ts.map +1 -1
- package/dist/task-scheduler.js +56 -9
- package/dist/task-scheduler.js.map +1 -1
- package/dist/trace-writer.d.ts +1 -0
- package/dist/trace-writer.d.ts.map +1 -1
- package/dist/trace-writer.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { NewMessage } from './types.js';
|
|
2
|
+
export type PlannerProbeResult = {
|
|
3
|
+
shouldBackground: boolean;
|
|
4
|
+
steps: string[];
|
|
5
|
+
tools: string[];
|
|
6
|
+
latencyMs?: number;
|
|
7
|
+
model?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function probePlanner(params: {
|
|
11
|
+
lastMessage: NewMessage;
|
|
12
|
+
recentMessages: NewMessage[];
|
|
13
|
+
}): Promise<PlannerProbeResult>;
|
|
14
|
+
//# sourceMappingURL=planner-probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner-probe.d.ts","sourceRoot":"","sources":["../src/planner-probe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsBF,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,WAAW,EAAE,UAAU,CAAC;IACxB,cAAc,EAAE,UAAU,EAAE,CAAC;CAC9B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2E9B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { loadRuntimeConfig } from './runtime-config.js';
|
|
2
|
+
import { extractJson } from './json-helpers.js';
|
|
3
|
+
const PLANNER_SYSTEM_PROMPT = [
|
|
4
|
+
'You are a planning router for DotClaw.',
|
|
5
|
+
'Given a user request, produce a concise plan in JSON.',
|
|
6
|
+
'Return JSON only with keys:',
|
|
7
|
+
'- steps: array of short action steps',
|
|
8
|
+
'- tools: array of tool names you expect to use (if any)',
|
|
9
|
+
'Keep arrays short. Use empty arrays if not needed.'
|
|
10
|
+
].join('\n');
|
|
11
|
+
function buildPlannerPayload(params) {
|
|
12
|
+
const recent = params.recentMessages.slice(-4).map(m => ({
|
|
13
|
+
sender: m.sender_name,
|
|
14
|
+
content: m.content
|
|
15
|
+
}));
|
|
16
|
+
return JSON.stringify({
|
|
17
|
+
last_message: params.lastMessage.content,
|
|
18
|
+
recent_messages: recent
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export async function probePlanner(params) {
|
|
22
|
+
const runtime = loadRuntimeConfig();
|
|
23
|
+
const config = runtime.host.routing.plannerProbe;
|
|
24
|
+
if (!config.enabled) {
|
|
25
|
+
return { shouldBackground: false, steps: [], tools: [] };
|
|
26
|
+
}
|
|
27
|
+
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
28
|
+
if (!apiKey) {
|
|
29
|
+
return { shouldBackground: false, steps: [], tools: [], error: 'OPENROUTER_API_KEY is not set' };
|
|
30
|
+
}
|
|
31
|
+
const input = buildPlannerPayload(params);
|
|
32
|
+
const controller = new AbortController();
|
|
33
|
+
const timeout = setTimeout(() => controller.abort(), config.timeoutMs);
|
|
34
|
+
const startedAt = Date.now();
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
Authorization: `Bearer ${apiKey}`
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify({
|
|
43
|
+
model: config.model,
|
|
44
|
+
messages: [
|
|
45
|
+
{ role: 'system', content: PLANNER_SYSTEM_PROMPT },
|
|
46
|
+
{ role: 'user', content: input }
|
|
47
|
+
],
|
|
48
|
+
max_tokens: config.maxOutputTokens,
|
|
49
|
+
temperature: config.temperature
|
|
50
|
+
}),
|
|
51
|
+
signal: controller.signal
|
|
52
|
+
});
|
|
53
|
+
const latencyMs = Date.now() - startedAt;
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
const text = await response.text();
|
|
56
|
+
return {
|
|
57
|
+
shouldBackground: false,
|
|
58
|
+
steps: [],
|
|
59
|
+
tools: [],
|
|
60
|
+
latencyMs,
|
|
61
|
+
model: config.model,
|
|
62
|
+
error: `OpenRouter HTTP ${response.status}: ${text.slice(0, 300)}`
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const json = await response.json();
|
|
66
|
+
const text = json.choices?.[0]?.message?.content ?? '';
|
|
67
|
+
const jsonText = extractJson(text);
|
|
68
|
+
if (!jsonText) {
|
|
69
|
+
return { shouldBackground: false, steps: [], tools: [], latencyMs, model: config.model, error: 'Planner probe returned no JSON' };
|
|
70
|
+
}
|
|
71
|
+
let steps = [];
|
|
72
|
+
let tools = [];
|
|
73
|
+
try {
|
|
74
|
+
const parsed = JSON.parse(jsonText);
|
|
75
|
+
steps = Array.isArray(parsed.steps) ? parsed.steps.filter(item => typeof item === 'string') : [];
|
|
76
|
+
tools = Array.isArray(parsed.tools) ? parsed.tools.filter(item => typeof item === 'string') : [];
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return { shouldBackground: false, steps: [], tools: [], latencyMs, model: config.model, error: 'Planner probe JSON parse failed' };
|
|
80
|
+
}
|
|
81
|
+
const shouldBackground = steps.length >= config.minSteps || tools.length >= config.minTools;
|
|
82
|
+
return { shouldBackground, steps, tools, latencyMs, model: config.model };
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
return {
|
|
86
|
+
shouldBackground: false,
|
|
87
|
+
steps: [],
|
|
88
|
+
tools: [],
|
|
89
|
+
model: config.model,
|
|
90
|
+
error: err instanceof Error ? err.message : String(err)
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
clearTimeout(timeout);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=planner-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner-probe.js","sourceRoot":"","sources":["../src/planner-probe.ts"],"names":[],"mappings":"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"}
|
package/dist/progress.d.ts
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
export declare const DEFAULT_PROGRESS_MESSAGES: string[];
|
|
2
|
+
export declare const DEFAULT_PROGRESS_STAGES: Record<string, string>;
|
|
3
|
+
export declare function formatPlanStepList(params: {
|
|
4
|
+
steps: string[];
|
|
5
|
+
currentStep?: number;
|
|
6
|
+
maxSteps?: number;
|
|
7
|
+
}): string;
|
|
8
|
+
export declare function formatProgressWithPlan(params: {
|
|
9
|
+
steps: string[];
|
|
10
|
+
currentStep?: number;
|
|
11
|
+
stage?: string;
|
|
12
|
+
}): string;
|
|
2
13
|
export declare function parseProgressMessages(raw: string | undefined, fallback?: string[]): string[];
|
|
14
|
+
export declare function createProgressManager(params: {
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
initialDelayMs: number;
|
|
17
|
+
intervalMs: number;
|
|
18
|
+
maxUpdates: number;
|
|
19
|
+
messages: string[];
|
|
20
|
+
stageMessages?: Record<string, string>;
|
|
21
|
+
stageThrottleMs?: number;
|
|
22
|
+
send: (text: string) => Promise<void>;
|
|
23
|
+
onError?: (err: unknown) => void;
|
|
24
|
+
}): {
|
|
25
|
+
start: () => void;
|
|
26
|
+
stop: () => void;
|
|
27
|
+
setStage: (stage: string) => void;
|
|
28
|
+
notify: (text: string) => void;
|
|
29
|
+
};
|
|
3
30
|
export declare function createProgressNotifier(params: {
|
|
4
31
|
enabled: boolean;
|
|
5
32
|
initialDelayMs: number;
|
package/dist/progress.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,UAIrC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,WAA4B,GAAG,MAAM,EAAE,CAiB7G;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CA4D1C"}
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,UAIrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO1D,CAAC;AAOF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAe/G;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAYhH;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,WAA4B,GAAG,MAAM,EAAE,CAiB7G;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,CAgG7G;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CA4D1C"}
|
package/dist/progress.js
CHANGED
|
@@ -3,6 +3,51 @@ export const DEFAULT_PROGRESS_MESSAGES = [
|
|
|
3
3
|
'Still working. Thanks for your patience.',
|
|
4
4
|
'Almost there. I will send the result as soon as it is ready.'
|
|
5
5
|
];
|
|
6
|
+
export const DEFAULT_PROGRESS_STAGES = {
|
|
7
|
+
ack: 'On it. I will get started now.',
|
|
8
|
+
planning: 'Planning the best approach.',
|
|
9
|
+
searching: 'Gathering information and context.',
|
|
10
|
+
coding: 'Working on the implementation.',
|
|
11
|
+
drafting: 'Drafting the response.',
|
|
12
|
+
finalizing: 'Finalizing everything.'
|
|
13
|
+
};
|
|
14
|
+
function normalizeSteps(steps) {
|
|
15
|
+
if (!Array.isArray(steps))
|
|
16
|
+
return [];
|
|
17
|
+
return steps.map(step => step.trim()).filter(Boolean);
|
|
18
|
+
}
|
|
19
|
+
export function formatPlanStepList(params) {
|
|
20
|
+
const cleaned = normalizeSteps(params.steps);
|
|
21
|
+
if (cleaned.length === 0)
|
|
22
|
+
return '';
|
|
23
|
+
const total = cleaned.length;
|
|
24
|
+
const maxSteps = Number.isFinite(params.maxSteps)
|
|
25
|
+
? Math.max(1, Math.floor(params.maxSteps))
|
|
26
|
+
: 4;
|
|
27
|
+
const limited = cleaned.slice(0, maxSteps);
|
|
28
|
+
const current = Number.isFinite(params.currentStep)
|
|
29
|
+
? Math.min(Math.max(1, Math.floor(params.currentStep)), total)
|
|
30
|
+
: null;
|
|
31
|
+
return limited.map((step, index) => {
|
|
32
|
+
const marker = current && index + 1 === current ? '->' : '*';
|
|
33
|
+
return `${marker} ${step}`;
|
|
34
|
+
}).join('\n');
|
|
35
|
+
}
|
|
36
|
+
export function formatProgressWithPlan(params) {
|
|
37
|
+
const normalizedStage = params.stage ? params.stage.trim().toLowerCase() : '';
|
|
38
|
+
const fallback = DEFAULT_PROGRESS_STAGES[normalizedStage] || DEFAULT_PROGRESS_MESSAGES[0];
|
|
39
|
+
const cleaned = normalizeSteps(params.steps);
|
|
40
|
+
if (cleaned.length === 0)
|
|
41
|
+
return fallback;
|
|
42
|
+
const total = cleaned.length;
|
|
43
|
+
const current = Number.isFinite(params.currentStep)
|
|
44
|
+
? Math.min(Math.max(1, Math.floor(params.currentStep)), total)
|
|
45
|
+
: 1;
|
|
46
|
+
const list = formatPlanStepList({ steps: cleaned, currentStep: current, maxSteps: 4 });
|
|
47
|
+
if (!list)
|
|
48
|
+
return fallback;
|
|
49
|
+
return `Working on your request (step ${current}/${total}):\n${list}`;
|
|
50
|
+
}
|
|
6
51
|
export function parseProgressMessages(raw, fallback = DEFAULT_PROGRESS_MESSAGES) {
|
|
7
52
|
if (!raw)
|
|
8
53
|
return fallback;
|
|
@@ -24,6 +69,112 @@ export function parseProgressMessages(raw, fallback = DEFAULT_PROGRESS_MESSAGES)
|
|
|
24
69
|
const parts = trimmed.split('|').map(item => item.trim()).filter(Boolean);
|
|
25
70
|
return parts.length > 0 ? parts : fallback;
|
|
26
71
|
}
|
|
72
|
+
export function createProgressManager(params) {
|
|
73
|
+
const maxUpdates = Math.max(0, Math.floor(params.maxUpdates));
|
|
74
|
+
const initialDelay = Math.max(0, Math.floor(params.initialDelayMs));
|
|
75
|
+
const intervalDelay = Math.max(0, Math.floor(params.intervalMs));
|
|
76
|
+
const messages = params.messages && params.messages.length > 0 ? params.messages : DEFAULT_PROGRESS_MESSAGES;
|
|
77
|
+
const stageMessages = params.stageMessages && Object.keys(params.stageMessages).length > 0
|
|
78
|
+
? params.stageMessages
|
|
79
|
+
: DEFAULT_PROGRESS_STAGES;
|
|
80
|
+
const stageThrottleMs = Math.max(0, Math.floor(params.stageThrottleMs ?? 20_000));
|
|
81
|
+
let stopped = false;
|
|
82
|
+
let updateCount = 0;
|
|
83
|
+
let initialTimer = null;
|
|
84
|
+
let intervalTimer = null;
|
|
85
|
+
let lastStageSent = null;
|
|
86
|
+
let lastSentAt = 0;
|
|
87
|
+
const stop = () => {
|
|
88
|
+
stopped = true;
|
|
89
|
+
if (initialTimer)
|
|
90
|
+
clearTimeout(initialTimer);
|
|
91
|
+
if (intervalTimer)
|
|
92
|
+
clearInterval(intervalTimer);
|
|
93
|
+
initialTimer = null;
|
|
94
|
+
intervalTimer = null;
|
|
95
|
+
};
|
|
96
|
+
const ensureInterval = () => {
|
|
97
|
+
if (intervalDelay <= 0 || intervalTimer)
|
|
98
|
+
return;
|
|
99
|
+
intervalTimer = setInterval(() => {
|
|
100
|
+
void sendFallback();
|
|
101
|
+
}, intervalDelay);
|
|
102
|
+
};
|
|
103
|
+
const sendText = async (text) => {
|
|
104
|
+
if (stopped || !params.enabled)
|
|
105
|
+
return;
|
|
106
|
+
if (maxUpdates === 0)
|
|
107
|
+
return;
|
|
108
|
+
if (updateCount >= maxUpdates) {
|
|
109
|
+
stop();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
updateCount += 1;
|
|
113
|
+
ensureInterval();
|
|
114
|
+
lastSentAt = Date.now();
|
|
115
|
+
try {
|
|
116
|
+
await params.send(text);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
params.onError?.(err);
|
|
120
|
+
}
|
|
121
|
+
if (updateCount >= maxUpdates) {
|
|
122
|
+
stop();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const sendFallback = async () => {
|
|
126
|
+
if (stopped || !params.enabled)
|
|
127
|
+
return;
|
|
128
|
+
if (updateCount >= maxUpdates) {
|
|
129
|
+
stop();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const index = Math.min(updateCount, messages.length - 1);
|
|
133
|
+
const text = messages[index];
|
|
134
|
+
if (!text)
|
|
135
|
+
return;
|
|
136
|
+
await sendText(text);
|
|
137
|
+
};
|
|
138
|
+
const start = () => {
|
|
139
|
+
if (!params.enabled)
|
|
140
|
+
return;
|
|
141
|
+
if (maxUpdates === 0)
|
|
142
|
+
return;
|
|
143
|
+
if (messages.length === 0)
|
|
144
|
+
return;
|
|
145
|
+
if (initialDelay === 0) {
|
|
146
|
+
void sendFallback();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
initialTimer = setTimeout(() => {
|
|
150
|
+
void sendFallback();
|
|
151
|
+
}, initialDelay);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
const setStage = (stage) => {
|
|
155
|
+
if (!params.enabled || stopped)
|
|
156
|
+
return;
|
|
157
|
+
const normalized = stage.trim().toLowerCase();
|
|
158
|
+
if (!normalized)
|
|
159
|
+
return;
|
|
160
|
+
if (normalized === lastStageSent)
|
|
161
|
+
return;
|
|
162
|
+
const text = stageMessages[normalized];
|
|
163
|
+
if (!text)
|
|
164
|
+
return;
|
|
165
|
+
const now = Date.now();
|
|
166
|
+
if (now - lastSentAt < stageThrottleMs)
|
|
167
|
+
return;
|
|
168
|
+
lastStageSent = normalized;
|
|
169
|
+
void sendText(text);
|
|
170
|
+
};
|
|
171
|
+
const notify = (text) => {
|
|
172
|
+
if (!text)
|
|
173
|
+
return;
|
|
174
|
+
void sendText(text);
|
|
175
|
+
};
|
|
176
|
+
return { start, stop, setStage, notify };
|
|
177
|
+
}
|
|
27
178
|
export function createProgressNotifier(params) {
|
|
28
179
|
const maxUpdates = Math.max(0, Math.floor(params.maxUpdates));
|
|
29
180
|
const initialDelay = Math.max(0, Math.floor(params.initialDelayMs));
|
package/dist/progress.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { NewMessage } from './types.js';
|
|
2
|
+
export type TaskProfile = 'fast' | 'standard' | 'deep' | 'background';
|
|
3
|
+
export type RoutingDecision = {
|
|
4
|
+
profile: TaskProfile;
|
|
5
|
+
reason: string;
|
|
6
|
+
shouldRunClassifier: boolean;
|
|
7
|
+
shouldBackground: boolean;
|
|
8
|
+
estimatedMinutes?: number;
|
|
9
|
+
modelOverride?: string;
|
|
10
|
+
maxOutputTokens?: number;
|
|
11
|
+
maxToolSteps?: number;
|
|
12
|
+
toolAllow?: string[];
|
|
13
|
+
toolDeny?: string[];
|
|
14
|
+
recallMaxResults?: number;
|
|
15
|
+
recallMaxTokens?: number;
|
|
16
|
+
enablePlanner: boolean;
|
|
17
|
+
enableResponseValidation: boolean;
|
|
18
|
+
responseValidationMaxRetries?: number;
|
|
19
|
+
enableMemoryRecall: boolean;
|
|
20
|
+
enableMemoryExtraction: boolean;
|
|
21
|
+
progress: {
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
initialMs: number;
|
|
24
|
+
intervalMs: number;
|
|
25
|
+
maxUpdates: number;
|
|
26
|
+
messages: string[];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export declare function routeRequest(params: {
|
|
30
|
+
prompt: string;
|
|
31
|
+
lastMessage: NewMessage;
|
|
32
|
+
}): RoutingDecision;
|
|
33
|
+
export declare function routePrompt(prompt: string): RoutingDecision;
|
|
34
|
+
//# sourceMappingURL=request-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-router.d.ts","sourceRoot":"","sources":["../src/request-router.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,YAAY,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;IAClC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;IAChC,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH,CAAC;AAkCF,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,UAAU,CAAC;CACzB,GAAG,eAAe,CA+GlB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAa3D"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { loadRuntimeConfig } from './runtime-config.js';
|
|
2
|
+
const GREETING_REGEX = /^(hi|hello|hey|yo|sup|what's up|who are you|what can you do|help|thanks|thank you)[!.?]*$/i;
|
|
3
|
+
function normalizeText(value) {
|
|
4
|
+
return value.trim().toLowerCase();
|
|
5
|
+
}
|
|
6
|
+
function hasKeyword(text, keywords) {
|
|
7
|
+
return keywords.some(keyword => keyword && text.includes(keyword.toLowerCase()));
|
|
8
|
+
}
|
|
9
|
+
function estimateMinutes(textLength, multiplier = 1) {
|
|
10
|
+
if (!Number.isFinite(textLength) || textLength <= 0)
|
|
11
|
+
return 1;
|
|
12
|
+
const base = Math.max(1, Math.ceil(textLength / 800));
|
|
13
|
+
return Math.min(60, Math.max(1, Math.round(base * multiplier)));
|
|
14
|
+
}
|
|
15
|
+
function resolveProgressConfig(params) {
|
|
16
|
+
const override = params.override || {};
|
|
17
|
+
return {
|
|
18
|
+
enabled: typeof override.enabled === 'boolean' ? override.enabled : params.defaultProgress.enabled,
|
|
19
|
+
initialMs: Number.isFinite(override.initialMs) ? Math.max(0, Number(override.initialMs)) : params.defaultProgress.initialMs,
|
|
20
|
+
intervalMs: Number.isFinite(override.intervalMs) ? Math.max(0, Number(override.intervalMs)) : params.defaultProgress.intervalMs,
|
|
21
|
+
maxUpdates: Number.isFinite(override.maxUpdates) ? Math.max(0, Math.floor(Number(override.maxUpdates))) : params.defaultProgress.maxUpdates,
|
|
22
|
+
messages: Array.isArray(override.messages) && override.messages.length > 0
|
|
23
|
+
? override.messages.map(item => String(item))
|
|
24
|
+
: params.defaultProgress.messages
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function routeRequest(params) {
|
|
28
|
+
const runtime = loadRuntimeConfig();
|
|
29
|
+
const routing = runtime.host.routing;
|
|
30
|
+
const defaultProgress = {
|
|
31
|
+
enabled: runtime.host.progress.enabled,
|
|
32
|
+
initialMs: runtime.host.progress.initialMs,
|
|
33
|
+
intervalMs: runtime.host.progress.intervalMs,
|
|
34
|
+
maxUpdates: runtime.host.progress.maxUpdates,
|
|
35
|
+
messages: runtime.host.progress.messages
|
|
36
|
+
};
|
|
37
|
+
const fallbackProfile = routing.profiles?.standard;
|
|
38
|
+
const fallbackRecallMaxResults = typeof fallbackProfile?.recallMaxResults === 'number'
|
|
39
|
+
? Math.max(0, Math.floor(fallbackProfile.recallMaxResults))
|
|
40
|
+
: runtime.host.memory.recall.maxResults;
|
|
41
|
+
const fallbackRecallMaxTokens = typeof fallbackProfile?.recallMaxTokens === 'number'
|
|
42
|
+
? Math.max(0, Math.floor(fallbackProfile.recallMaxTokens))
|
|
43
|
+
: runtime.host.memory.recall.maxTokens;
|
|
44
|
+
const fallbackValidationRetries = typeof fallbackProfile?.responseValidationMaxRetries === 'number'
|
|
45
|
+
? Math.max(0, Math.floor(fallbackProfile.responseValidationMaxRetries))
|
|
46
|
+
: runtime.agent.responseValidation.maxRetries;
|
|
47
|
+
if (!routing.enabled) {
|
|
48
|
+
return {
|
|
49
|
+
profile: 'standard',
|
|
50
|
+
reason: 'routing disabled',
|
|
51
|
+
shouldRunClassifier: false,
|
|
52
|
+
shouldBackground: false,
|
|
53
|
+
estimatedMinutes: undefined,
|
|
54
|
+
modelOverride: fallbackProfile?.model,
|
|
55
|
+
maxOutputTokens: fallbackProfile?.maxOutputTokens,
|
|
56
|
+
maxToolSteps: fallbackProfile?.maxToolSteps,
|
|
57
|
+
toolAllow: fallbackProfile?.toolAllow,
|
|
58
|
+
toolDeny: fallbackProfile?.toolDeny,
|
|
59
|
+
recallMaxResults: fallbackRecallMaxResults,
|
|
60
|
+
recallMaxTokens: fallbackRecallMaxTokens,
|
|
61
|
+
enablePlanner: fallbackProfile?.enablePlanner ?? true,
|
|
62
|
+
enableResponseValidation: fallbackProfile?.enableValidation ?? true,
|
|
63
|
+
responseValidationMaxRetries: fallbackValidationRetries,
|
|
64
|
+
enableMemoryRecall: fallbackProfile?.enableMemoryRecall ?? true,
|
|
65
|
+
enableMemoryExtraction: fallbackProfile?.enableMemoryExtraction ?? true,
|
|
66
|
+
progress: resolveProgressConfig({ defaultProgress, override: fallbackProfile?.progress })
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const text = params.lastMessage?.content || params.prompt || '';
|
|
70
|
+
const trimmed = text.trim();
|
|
71
|
+
const normalized = normalizeText(trimmed);
|
|
72
|
+
const length = trimmed.length;
|
|
73
|
+
const isGreeting = GREETING_REGEX.test(trimmed);
|
|
74
|
+
const fastCue = hasKeyword(normalized, routing.fastKeywords);
|
|
75
|
+
const deepCue = hasKeyword(normalized, routing.deepKeywords);
|
|
76
|
+
const backgroundCue = hasKeyword(normalized, routing.backgroundKeywords);
|
|
77
|
+
let profile = 'standard';
|
|
78
|
+
let reason = 'default';
|
|
79
|
+
if (backgroundCue || length >= routing.backgroundMinChars) {
|
|
80
|
+
profile = 'background';
|
|
81
|
+
reason = backgroundCue ? 'background keyword' : 'long prompt length';
|
|
82
|
+
}
|
|
83
|
+
else if (deepCue || length >= routing.maxStandardChars) {
|
|
84
|
+
profile = 'deep';
|
|
85
|
+
reason = deepCue ? 'complexity keyword' : 'prompt length';
|
|
86
|
+
}
|
|
87
|
+
else if (isGreeting || fastCue || length <= routing.maxFastChars) {
|
|
88
|
+
profile = 'fast';
|
|
89
|
+
reason = isGreeting ? 'greeting' : (fastCue ? 'fast keyword' : 'short prompt');
|
|
90
|
+
}
|
|
91
|
+
const profileConfig = routing.profiles?.[profile] || routing.profiles?.standard;
|
|
92
|
+
const recallMaxResults = typeof profileConfig?.recallMaxResults === 'number'
|
|
93
|
+
? Math.max(0, Math.floor(profileConfig.recallMaxResults))
|
|
94
|
+
: runtime.host.memory.recall.maxResults;
|
|
95
|
+
const recallMaxTokens = typeof profileConfig?.recallMaxTokens === 'number'
|
|
96
|
+
? Math.max(0, Math.floor(profileConfig.recallMaxTokens))
|
|
97
|
+
: runtime.host.memory.recall.maxTokens;
|
|
98
|
+
const responseValidationMaxRetries = typeof profileConfig?.responseValidationMaxRetries === 'number'
|
|
99
|
+
? Math.max(0, Math.floor(profileConfig.responseValidationMaxRetries))
|
|
100
|
+
: runtime.agent.responseValidation.maxRetries;
|
|
101
|
+
const progress = resolveProgressConfig({
|
|
102
|
+
defaultProgress,
|
|
103
|
+
override: profileConfig?.progress
|
|
104
|
+
});
|
|
105
|
+
const shouldBackground = profile === 'background';
|
|
106
|
+
const shouldRunClassifier = routing.classifierFallback.enabled
|
|
107
|
+
&& !shouldBackground
|
|
108
|
+
&& profile !== 'fast'
|
|
109
|
+
&& length >= routing.classifierFallback.minChars;
|
|
110
|
+
const estimatedMinutes = (profile === 'deep' || profile === 'background')
|
|
111
|
+
? estimateMinutes(length, profile === 'background' ? 1.5 : 1)
|
|
112
|
+
: undefined;
|
|
113
|
+
return {
|
|
114
|
+
profile,
|
|
115
|
+
reason,
|
|
116
|
+
shouldRunClassifier,
|
|
117
|
+
shouldBackground,
|
|
118
|
+
estimatedMinutes,
|
|
119
|
+
modelOverride: profileConfig?.model,
|
|
120
|
+
maxOutputTokens: profileConfig?.maxOutputTokens,
|
|
121
|
+
maxToolSteps: profileConfig?.maxToolSteps,
|
|
122
|
+
toolAllow: profileConfig?.toolAllow,
|
|
123
|
+
toolDeny: profileConfig?.toolDeny,
|
|
124
|
+
recallMaxResults,
|
|
125
|
+
recallMaxTokens,
|
|
126
|
+
enablePlanner: profileConfig?.enablePlanner ?? true,
|
|
127
|
+
enableResponseValidation: profileConfig?.enableValidation ?? true,
|
|
128
|
+
responseValidationMaxRetries,
|
|
129
|
+
enableMemoryRecall: profileConfig?.enableMemoryRecall ?? true,
|
|
130
|
+
enableMemoryExtraction: profileConfig?.enableMemoryExtraction ?? true,
|
|
131
|
+
progress
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
export function routePrompt(prompt) {
|
|
135
|
+
const message = {
|
|
136
|
+
id: 'system',
|
|
137
|
+
chat_jid: 'system',
|
|
138
|
+
sender: 'system',
|
|
139
|
+
sender_name: 'system',
|
|
140
|
+
content: prompt,
|
|
141
|
+
timestamp: new Date().toISOString()
|
|
142
|
+
};
|
|
143
|
+
return routeRequest({
|
|
144
|
+
prompt,
|
|
145
|
+
lastMessage: message
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=request-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-router.js","sourceRoot":"","sources":["../src/request-router.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime-config.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export type RuntimeConfig = {
|
|
|
26
26
|
tmpfsSize: string;
|
|
27
27
|
runUid: string;
|
|
28
28
|
runGid: string;
|
|
29
|
+
instanceId: string;
|
|
29
30
|
};
|
|
30
31
|
concurrency: {
|
|
31
32
|
maxAgents: number;
|
|
@@ -109,6 +110,12 @@ export type RuntimeConfig = {
|
|
|
109
110
|
contextModeDefault: 'group' | 'isolated';
|
|
110
111
|
toolAllow: string[];
|
|
111
112
|
toolDeny: string[];
|
|
113
|
+
progress: {
|
|
114
|
+
enabled: boolean;
|
|
115
|
+
startDelayMs: number;
|
|
116
|
+
intervalMs: number;
|
|
117
|
+
maxUpdates: number;
|
|
118
|
+
};
|
|
112
119
|
autoSpawn: {
|
|
113
120
|
enabled: boolean;
|
|
114
121
|
foregroundTimeoutMs: number;
|
|
@@ -121,9 +128,60 @@ export type RuntimeConfig = {
|
|
|
121
128
|
maxOutputTokens: number;
|
|
122
129
|
temperature: number;
|
|
123
130
|
confidenceThreshold: number;
|
|
131
|
+
adaptive?: {
|
|
132
|
+
enabled: boolean;
|
|
133
|
+
minThreshold: number;
|
|
134
|
+
maxThreshold: number;
|
|
135
|
+
queueDepthLow: number;
|
|
136
|
+
queueDepthHigh: number;
|
|
137
|
+
};
|
|
124
138
|
};
|
|
125
139
|
};
|
|
126
140
|
};
|
|
141
|
+
routing: {
|
|
142
|
+
enabled: boolean;
|
|
143
|
+
maxFastChars: number;
|
|
144
|
+
maxStandardChars: number;
|
|
145
|
+
backgroundMinChars: number;
|
|
146
|
+
fastKeywords: string[];
|
|
147
|
+
deepKeywords: string[];
|
|
148
|
+
backgroundKeywords: string[];
|
|
149
|
+
classifierFallback: {
|
|
150
|
+
enabled: boolean;
|
|
151
|
+
minChars: number;
|
|
152
|
+
};
|
|
153
|
+
plannerProbe: {
|
|
154
|
+
enabled: boolean;
|
|
155
|
+
model: string;
|
|
156
|
+
timeoutMs: number;
|
|
157
|
+
maxOutputTokens: number;
|
|
158
|
+
temperature: number;
|
|
159
|
+
minChars: number;
|
|
160
|
+
minSteps: number;
|
|
161
|
+
minTools: number;
|
|
162
|
+
};
|
|
163
|
+
profiles: Record<string, {
|
|
164
|
+
model: string;
|
|
165
|
+
maxOutputTokens: number;
|
|
166
|
+
maxToolSteps: number;
|
|
167
|
+
recallMaxResults?: number;
|
|
168
|
+
recallMaxTokens?: number;
|
|
169
|
+
enablePlanner: boolean;
|
|
170
|
+
enableValidation: boolean;
|
|
171
|
+
responseValidationMaxRetries?: number;
|
|
172
|
+
enableMemoryRecall: boolean;
|
|
173
|
+
enableMemoryExtraction: boolean;
|
|
174
|
+
toolAllow?: string[];
|
|
175
|
+
toolDeny?: string[];
|
|
176
|
+
progress?: {
|
|
177
|
+
enabled?: boolean;
|
|
178
|
+
initialMs?: number;
|
|
179
|
+
intervalMs?: number;
|
|
180
|
+
maxUpdates?: number;
|
|
181
|
+
messages?: string[];
|
|
182
|
+
};
|
|
183
|
+
}>;
|
|
184
|
+
};
|
|
127
185
|
toolBudgets: {
|
|
128
186
|
enabled: boolean;
|
|
129
187
|
path: string;
|
|
@@ -191,6 +249,8 @@ export type RuntimeConfig = {
|
|
|
191
249
|
temperature: number;
|
|
192
250
|
maxRetries: number;
|
|
193
251
|
allowToolCalls: boolean;
|
|
252
|
+
minPromptTokens: number;
|
|
253
|
+
minResponseTokens: number;
|
|
194
254
|
};
|
|
195
255
|
tools: {
|
|
196
256
|
maxToolSteps: number;
|
|
@@ -218,6 +278,13 @@ export type RuntimeConfig = {
|
|
|
218
278
|
maxBytes: number;
|
|
219
279
|
httpTimeoutMs: number;
|
|
220
280
|
};
|
|
281
|
+
progress: {
|
|
282
|
+
enabled: boolean;
|
|
283
|
+
minIntervalMs: number;
|
|
284
|
+
notifyTools: string[];
|
|
285
|
+
notifyOnStart: boolean;
|
|
286
|
+
notifyOnError: boolean;
|
|
287
|
+
};
|
|
221
288
|
toolSummary: {
|
|
222
289
|
enabled: boolean;
|
|
223
290
|
maxBytes: number;
|