@zhixuan92/multi-model-agent-core 2.2.0 → 2.4.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 +2 -1
- package/dist/heartbeat.d.ts +18 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +47 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/readiness/readiness.d.ts.map +1 -1
- package/dist/readiness/readiness.js +2 -10
- package/dist/readiness/readiness.js.map +1 -1
- package/dist/reporting/structured-report.d.ts +0 -1
- package/dist/reporting/structured-report.d.ts.map +1 -1
- package/dist/reporting/structured-report.js +0 -20
- package/dist/reporting/structured-report.js.map +1 -1
- package/dist/review/aggregate-result.d.ts.map +1 -1
- package/dist/review/aggregate-result.js +0 -1
- package/dist/review/aggregate-result.js.map +1 -1
- package/dist/review/quality-reviewer.d.ts +2 -1
- package/dist/review/quality-reviewer.d.ts.map +1 -1
- package/dist/review/quality-reviewer.js +5 -5
- package/dist/review/quality-reviewer.js.map +1 -1
- package/dist/review/reviewer-prompt.d.ts +1 -1
- package/dist/review/reviewer-prompt.d.ts.map +1 -1
- package/dist/review/reviewer-prompt.js +2 -2
- package/dist/review/reviewer-prompt.js.map +1 -1
- package/dist/review/spec-reviewer.d.ts +2 -1
- package/dist/review/spec-reviewer.d.ts.map +1 -1
- package/dist/review/spec-reviewer.js +4 -4
- package/dist/review/spec-reviewer.js.map +1 -1
- package/dist/run-tasks.d.ts.map +1 -1
- package/dist/run-tasks.js +214 -163
- package/dist/run-tasks.js.map +1 -1
- package/dist/types.d.ts +21 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -9
- package/dist/readiness/normalization-budget.d.ts +0 -2
- package/dist/readiness/normalization-budget.d.ts.map +0 -1
- package/dist/readiness/normalization-budget.js +0 -9
- package/dist/readiness/normalization-budget.js.map +0 -1
- package/dist/readiness/normalize-brief.d.ts +0 -17
- package/dist/readiness/normalize-brief.d.ts.map +0 -1
- package/dist/readiness/normalize-brief.js +0 -124
- package/dist/readiness/normalize-brief.js.map +0 -1
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhixuan92/multi-model-agent-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Core library for multi-model-agent: provider runners (Claude, Codex, OpenAI-compatible), routing logic, config schema, and tool/sandbox primitives.",
|
|
@@ -56,6 +56,10 @@
|
|
|
56
56
|
"types": "./dist/run-tasks.d.ts",
|
|
57
57
|
"import": "./dist/run-tasks.js"
|
|
58
58
|
},
|
|
59
|
+
"./heartbeat": {
|
|
60
|
+
"types": "./dist/heartbeat.d.ts",
|
|
61
|
+
"import": "./dist/heartbeat.js"
|
|
62
|
+
},
|
|
59
63
|
"./types": {
|
|
60
64
|
"types": "./dist/types.d.ts",
|
|
61
65
|
"import": "./dist/types.js"
|
|
@@ -64,14 +68,6 @@
|
|
|
64
68
|
"types": "./dist/readiness/readiness.d.ts",
|
|
65
69
|
"import": "./dist/readiness/readiness.js"
|
|
66
70
|
},
|
|
67
|
-
"./readiness/normalization-budget": {
|
|
68
|
-
"types": "./dist/readiness/normalization-budget.d.ts",
|
|
69
|
-
"import": "./dist/readiness/normalization-budget.js"
|
|
70
|
-
},
|
|
71
|
-
"./readiness/normalize-brief": {
|
|
72
|
-
"types": "./dist/readiness/normalize-brief.d.ts",
|
|
73
|
-
"import": "./dist/readiness/normalize-brief.js"
|
|
74
|
-
},
|
|
75
71
|
"./reporting/structured-report": {
|
|
76
72
|
"types": "./dist/reporting/structured-report.d.ts",
|
|
77
73
|
"import": "./dist/reporting/structured-report.js"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalization-budget.d.ts","sourceRoot":"","sources":["../../src/readiness/normalization-budget.ts"],"names":[],"mappings":"AAAA,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKjF"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export function computeNormalizationBudget(maxCostUSD) {
|
|
2
|
-
const FLAT_CEIL = 0.01;
|
|
3
|
-
if (maxCostUSD === undefined)
|
|
4
|
-
return FLAT_CEIL;
|
|
5
|
-
if (maxCostUSD <= 0)
|
|
6
|
-
return 0;
|
|
7
|
-
return Math.min(FLAT_CEIL, 0.2 * maxCostUSD);
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=normalization-budget.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalization-budget.js","sourceRoot":"","sources":["../../src/readiness/normalization-budget.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,0BAA0B,CAAC,UAA8B;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC;IACvB,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,UAAU,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { TaskSpec, MultiModelConfig } from '../types.js';
|
|
2
|
-
export interface NormalizationDecision {
|
|
3
|
-
original: string;
|
|
4
|
-
resolved: string;
|
|
5
|
-
reason: string;
|
|
6
|
-
}
|
|
7
|
-
export interface NormalizationResult {
|
|
8
|
-
normalizedPrompt: string;
|
|
9
|
-
decisions: NormalizationDecision[];
|
|
10
|
-
writeSet: string[];
|
|
11
|
-
verificationPlan: string[];
|
|
12
|
-
unresolved: string[];
|
|
13
|
-
spentCostUSD: number;
|
|
14
|
-
skipped: boolean;
|
|
15
|
-
}
|
|
16
|
-
export declare function normalizeBrief(task: TaskSpec, config: MultiModelConfig): Promise<NormalizationResult>;
|
|
17
|
-
//# sourceMappingURL=normalize-brief.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-brief.d.ts","sourceRoot":"","sources":["../../src/readiness/normalize-brief.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK9D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AA4BD,wBAAsB,cAAc,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,mBAAmB,CAAC,CA2C9B"}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { createProvider } from '../provider.js';
|
|
2
|
-
import { delegateWithEscalation } from '../delegate-with-escalation.js';
|
|
3
|
-
import { computeNormalizationBudget } from './normalization-budget.js';
|
|
4
|
-
const NORMALIZER_PROMPT = `You are a brief normalizer. Given a task brief, analyze it for vagueness and provide concrete normalization.
|
|
5
|
-
|
|
6
|
-
Brief to normalize:
|
|
7
|
-
{prompt}
|
|
8
|
-
|
|
9
|
-
Respond with a structured normalization using these sections:
|
|
10
|
-
|
|
11
|
-
## Summary
|
|
12
|
-
One sentence summary of what needs to be done.
|
|
13
|
-
|
|
14
|
-
## Normalization decisions
|
|
15
|
-
- "original phrase" → "concrete interpretation"
|
|
16
|
-
List each vague element and its concrete resolution.
|
|
17
|
-
|
|
18
|
-
## Files to change
|
|
19
|
-
List the specific files that need modification.
|
|
20
|
-
|
|
21
|
-
## Verification plan
|
|
22
|
-
How to verify the task is done correctly.
|
|
23
|
-
|
|
24
|
-
## Unresolved
|
|
25
|
-
Any elements that still need clarification.
|
|
26
|
-
|
|
27
|
-
## Done condition
|
|
28
|
-
The specific criterion for marking this task complete.`;
|
|
29
|
-
export async function normalizeBrief(task, config) {
|
|
30
|
-
const budget = computeNormalizationBudget(task.maxCostUSD);
|
|
31
|
-
const normalizerTask = {
|
|
32
|
-
prompt: NORMALIZER_PROMPT.replace('{prompt}', task.prompt),
|
|
33
|
-
agentType: 'standard',
|
|
34
|
-
briefQualityPolicy: 'off',
|
|
35
|
-
maxCostUSD: budget,
|
|
36
|
-
tools: 'none',
|
|
37
|
-
};
|
|
38
|
-
try {
|
|
39
|
-
const provider = createProvider('standard', config);
|
|
40
|
-
const result = await delegateWithEscalation(normalizerTask, [provider], { explicitlyPinned: true });
|
|
41
|
-
if (result.status !== 'ok') {
|
|
42
|
-
return {
|
|
43
|
-
normalizedPrompt: task.prompt,
|
|
44
|
-
decisions: [],
|
|
45
|
-
writeSet: [],
|
|
46
|
-
verificationPlan: [],
|
|
47
|
-
unresolved: ['Normalization failed: ' + (result.error || result.status)],
|
|
48
|
-
spentCostUSD: result.usage.costUSD ?? 0,
|
|
49
|
-
skipped: true,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
return parseNormalizationReport(result.output, task.prompt, result.usage.costUSD ?? 0);
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
return {
|
|
56
|
-
normalizedPrompt: task.prompt,
|
|
57
|
-
decisions: [],
|
|
58
|
-
writeSet: [],
|
|
59
|
-
verificationPlan: [],
|
|
60
|
-
unresolved: [err instanceof Error ? err.message : String(err)],
|
|
61
|
-
spentCostUSD: 0,
|
|
62
|
-
skipped: true,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
function parseNormalizationReport(output, originalPrompt, costUSD) {
|
|
67
|
-
const decisions = [];
|
|
68
|
-
const writeSet = [];
|
|
69
|
-
const verificationPlan = [];
|
|
70
|
-
const unresolved = [];
|
|
71
|
-
const decisionMatch = output.match(/## Normalization decisions\n([\s\S]*?)(?=\n##|\n##|$)/i);
|
|
72
|
-
if (decisionMatch) {
|
|
73
|
-
const lines = decisionMatch[1].split('\n').filter(l => l.trim().startsWith('-'));
|
|
74
|
-
for (const line of lines) {
|
|
75
|
-
const match = line.match(/- "([^"]+)" → "?([^"\n]+)"?/);
|
|
76
|
-
if (match) {
|
|
77
|
-
decisions.push({ original: match[1], resolved: match[2], reason: 'normalized' });
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
const filesMatch = output.match(/## Files to change\n([\s\S]*?)(?=\n##|\n##|$)/i);
|
|
82
|
-
if (filesMatch) {
|
|
83
|
-
const lines = filesMatch[1].split('\n').filter(l => l.trim() && !l.trim().startsWith('#'));
|
|
84
|
-
for (const line of lines) {
|
|
85
|
-
const file = line.replace(/^[-*]\s*/, '').trim();
|
|
86
|
-
if (file && !file.startsWith('#')) {
|
|
87
|
-
writeSet.push(file);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const verifyMatch = output.match(/## Verification plan\n([\s\S]*?)(?=\n##|\n##|$)/i);
|
|
92
|
-
if (verifyMatch) {
|
|
93
|
-
const lines = verifyMatch[1].split('\n').filter(l => l.trim() && !l.trim().startsWith('#'));
|
|
94
|
-
for (const line of lines) {
|
|
95
|
-
const item = line.replace(/^[-*]\s*/, '').trim();
|
|
96
|
-
if (item && !item.startsWith('#')) {
|
|
97
|
-
verificationPlan.push(item);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const unresolvedMatch = output.match(/## Unresolved\n([\s\S]*?)(?=\n##|\n##|$)/i);
|
|
102
|
-
if (unresolvedMatch) {
|
|
103
|
-
const lines = unresolvedMatch[1].split('\n').filter(l => l.trim() && !l.trim().startsWith('#'));
|
|
104
|
-
for (const line of lines) {
|
|
105
|
-
const item = line.replace(/^[-*]\s*/, '').trim();
|
|
106
|
-
if (item && !item.startsWith('#')) {
|
|
107
|
-
unresolved.push(item);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
const normalizedPrompt = decisions.length > 0
|
|
112
|
-
? decisions.reduce((prompt, d) => prompt.replace(d.original, d.resolved), originalPrompt)
|
|
113
|
-
: originalPrompt;
|
|
114
|
-
return {
|
|
115
|
-
normalizedPrompt,
|
|
116
|
-
decisions,
|
|
117
|
-
writeSet,
|
|
118
|
-
verificationPlan,
|
|
119
|
-
unresolved,
|
|
120
|
-
spentCostUSD: costUSD,
|
|
121
|
-
skipped: false,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=normalize-brief.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-brief.js","sourceRoot":"","sources":["../../src/readiness/normalize-brief.ts"],"names":[],"mappings":"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"}
|