@sudosandwich/limps 2.8.0 → 2.10.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 +86 -0
- package/dist/agent-parser.d.ts +6 -0
- package/dist/agent-parser.d.ts.map +1 -1
- package/dist/agent-parser.js +30 -0
- package/dist/agent-parser.js.map +1 -1
- package/dist/cli/config-cmd.d.ts +12 -0
- package/dist/cli/config-cmd.d.ts.map +1 -1
- package/dist/cli/config-cmd.js +143 -1
- package/dist/cli/config-cmd.js.map +1 -1
- package/dist/cli/json-output.d.ts +3 -0
- package/dist/cli/json-output.d.ts.map +1 -1
- package/dist/cli/json-output.js +3 -0
- package/dist/cli/json-output.js.map +1 -1
- package/dist/cli/list-agents.d.ts.map +1 -1
- package/dist/cli/list-agents.js +10 -4
- package/dist/cli/list-agents.js.map +1 -1
- package/dist/cli/next-task.d.ts +27 -3
- package/dist/cli/next-task.d.ts.map +1 -1
- package/dist/cli/next-task.js +261 -35
- package/dist/cli/next-task.js.map +1 -1
- package/dist/cli/plan-repair.d.ts +26 -0
- package/dist/cli/plan-repair.d.ts.map +1 -0
- package/dist/cli/plan-repair.js +145 -0
- package/dist/cli/plan-repair.js.map +1 -0
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +31 -2
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/list.d.ts.map +1 -1
- package/dist/commands/config/list.js +13 -3
- package/dist/commands/config/list.js.map +1 -1
- package/dist/commands/config/scoring.d.ts +13 -0
- package/dist/commands/config/scoring.d.ts.map +1 -0
- package/dist/commands/config/scoring.js +104 -0
- package/dist/commands/config/scoring.js.map +1 -0
- package/dist/commands/config/sync-mcp.d.ts +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/list-agents.d.ts +1 -0
- package/dist/commands/list-agents.d.ts.map +1 -1
- package/dist/commands/list-agents.js +54 -15
- package/dist/commands/list-agents.js.map +1 -1
- package/dist/commands/list-plans.d.ts +1 -0
- package/dist/commands/list-plans.d.ts.map +1 -1
- package/dist/commands/list-plans.js +41 -16
- package/dist/commands/list-plans.js.map +1 -1
- package/dist/commands/next-task.d.ts +1 -0
- package/dist/commands/next-task.d.ts.map +1 -1
- package/dist/commands/next-task.js +61 -25
- package/dist/commands/next-task.js.map +1 -1
- package/dist/commands/reindex.d.ts +12 -0
- package/dist/commands/reindex.d.ts.map +1 -0
- package/dist/commands/reindex.js +64 -0
- package/dist/commands/reindex.js.map +1 -0
- package/dist/commands/repair-plans.d.ts +16 -0
- package/dist/commands/repair-plans.d.ts.map +1 -0
- package/dist/commands/repair-plans.js +141 -0
- package/dist/commands/repair-plans.js.map +1 -0
- package/dist/commands/score-all.d.ts +15 -0
- package/dist/commands/score-all.d.ts.map +1 -0
- package/dist/commands/score-all.js +96 -0
- package/dist/commands/score-all.js.map +1 -0
- package/dist/commands/score-task.d.ts +15 -0
- package/dist/commands/score-task.d.ts.map +1 -0
- package/dist/commands/score-task.js +104 -0
- package/dist/commands/score-task.js.map +1 -0
- package/dist/commands/serve.d.ts +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +6 -3
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +68 -20
- package/dist/commands/status.js.map +1 -1
- package/dist/components/NextTask.d.ts.map +1 -1
- package/dist/components/NextTask.js +2 -1
- package/dist/components/NextTask.js.map +1 -1
- package/dist/config.d.ts +17 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +136 -5
- package/dist/config.js.map +1 -1
- package/dist/graph/schema.d.ts +4 -0
- package/dist/graph/schema.d.ts.map +1 -0
- package/dist/graph/schema.js +77 -0
- package/dist/graph/schema.js.map +1 -0
- package/dist/graph/storage.d.ts +26 -0
- package/dist/graph/storage.d.ts.map +1 -0
- package/dist/graph/storage.js +441 -0
- package/dist/graph/storage.js.map +1 -0
- package/dist/graph/types.d.ts +32 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +11 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/indexer.d.ts +6 -0
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +11 -0
- package/dist/indexer.js.map +1 -1
- package/dist/tools/configure-scoring.d.ts +38 -0
- package/dist/tools/configure-scoring.d.ts.map +1 -0
- package/dist/tools/configure-scoring.js +325 -0
- package/dist/tools/configure-scoring.js.map +1 -0
- package/dist/tools/get-next-task.d.ts.map +1 -1
- package/dist/tools/get-next-task.js +47 -0
- package/dist/tools/get-next-task.js.map +1 -1
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +121 -22
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/process-docs.d.ts.map +1 -1
- package/dist/tools/process-docs.js +10 -1
- package/dist/tools/process-docs.js.map +1 -1
- package/dist/tools/update-task-status.d.ts +1 -1
- package/dist/utils/cli-help.d.ts +32 -0
- package/dist/utils/cli-help.d.ts.map +1 -0
- package/dist/utils/cli-help.js +79 -0
- package/dist/utils/cli-help.js.map +1 -0
- package/dist/utils/config-resolver.d.ts +8 -0
- package/dist/utils/config-resolver.d.ts.map +1 -1
- package/dist/utils/config-resolver.js +22 -1
- package/dist/utils/config-resolver.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/next-task.js
CHANGED
|
@@ -2,8 +2,148 @@
|
|
|
2
2
|
* CLI command: next-task
|
|
3
3
|
* Get the next best task with scoring breakdown.
|
|
4
4
|
*/
|
|
5
|
+
import { existsSync, readFileSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
5
7
|
import { getScoringWeights, getScoringBiases, } from '../config.js';
|
|
6
8
|
import { findPlanDirectory, getAgentFiles } from './list-agents.js';
|
|
9
|
+
import { FrontmatterHandler } from '../utils/frontmatter.js';
|
|
10
|
+
const PLAN_SIGNAL_WEIGHTS = {
|
|
11
|
+
low: 0,
|
|
12
|
+
medium: 5,
|
|
13
|
+
high: 10,
|
|
14
|
+
critical: 20,
|
|
15
|
+
};
|
|
16
|
+
const frontmatterHandler = new FrontmatterHandler();
|
|
17
|
+
function normalizePlanSignal(value) {
|
|
18
|
+
if (typeof value !== 'string') {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const normalized = value.trim().toLowerCase();
|
|
22
|
+
if (normalized === 'low' ||
|
|
23
|
+
normalized === 'medium' ||
|
|
24
|
+
normalized === 'high' ||
|
|
25
|
+
normalized === 'critical') {
|
|
26
|
+
return normalized;
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
function detectPlanSignalKeys(content) {
|
|
31
|
+
return /(^|\n)\s*priority\s*:/i.test(content) || /(^|\n)\s*severity\s*:/i.test(content);
|
|
32
|
+
}
|
|
33
|
+
function detectPlanScoringKeys(content) {
|
|
34
|
+
return /(^|\n)\s*scoring\s*:/i.test(content);
|
|
35
|
+
}
|
|
36
|
+
function parseScoringBias(value) {
|
|
37
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
function parseScoringWeights(value) {
|
|
43
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const weightsValue = value;
|
|
47
|
+
const weights = {};
|
|
48
|
+
const dependency = parseScoringBias(weightsValue.dependency);
|
|
49
|
+
const priority = parseScoringBias(weightsValue.priority);
|
|
50
|
+
const workload = parseScoringBias(weightsValue.workload);
|
|
51
|
+
if (dependency !== undefined) {
|
|
52
|
+
weights.dependency = dependency;
|
|
53
|
+
}
|
|
54
|
+
if (priority !== undefined) {
|
|
55
|
+
weights.priority = priority;
|
|
56
|
+
}
|
|
57
|
+
if (workload !== undefined) {
|
|
58
|
+
weights.workload = workload;
|
|
59
|
+
}
|
|
60
|
+
return Object.keys(weights).length > 0 ? weights : undefined;
|
|
61
|
+
}
|
|
62
|
+
function getPlanScoringOverrides(planDir, options) {
|
|
63
|
+
const planFolder = planDir.split('/').pop();
|
|
64
|
+
if (!planFolder) {
|
|
65
|
+
return {};
|
|
66
|
+
}
|
|
67
|
+
const planFilePath = join(planDir, `${planFolder}-plan.md`);
|
|
68
|
+
if (!existsSync(planFilePath)) {
|
|
69
|
+
return {};
|
|
70
|
+
}
|
|
71
|
+
const content = readFileSync(planFilePath, 'utf-8');
|
|
72
|
+
const parsed = frontmatterHandler.parse(content);
|
|
73
|
+
const priority = normalizePlanSignal(parsed.frontmatter.priority);
|
|
74
|
+
const severity = normalizePlanSignal(parsed.frontmatter.severity);
|
|
75
|
+
const scoring = parsed.frontmatter.scoring;
|
|
76
|
+
const scoringRecord = scoring && typeof scoring === 'object' && !Array.isArray(scoring)
|
|
77
|
+
? scoring
|
|
78
|
+
: undefined;
|
|
79
|
+
const scoringBias = scoringRecord ? parseScoringBias(scoringRecord.bias) : undefined;
|
|
80
|
+
const scoringWeights = scoringRecord ? parseScoringWeights(scoringRecord.weights) : undefined;
|
|
81
|
+
const hasSignalBias = priority !== undefined || severity !== undefined;
|
|
82
|
+
const planSignalBias = (priority ? PLAN_SIGNAL_WEIGHTS[priority] : 0) + (severity ? PLAN_SIGNAL_WEIGHTS[severity] : 0);
|
|
83
|
+
const hasAnyOverrides = scoringBias !== undefined || scoringWeights !== undefined || hasSignalBias;
|
|
84
|
+
if (!options?.suppressWarnings &&
|
|
85
|
+
content.startsWith('---') &&
|
|
86
|
+
(detectPlanSignalKeys(content) || detectPlanScoringKeys(content)) &&
|
|
87
|
+
!hasAnyOverrides) {
|
|
88
|
+
console.warn(`Malformed frontmatter in plan file: ${planFilePath}. Run \`limps repair-plans --check --json\` for a structured report.`);
|
|
89
|
+
}
|
|
90
|
+
if (!hasAnyOverrides) {
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
const overrides = {};
|
|
94
|
+
if (scoringWeights) {
|
|
95
|
+
overrides.weights = scoringWeights;
|
|
96
|
+
}
|
|
97
|
+
if (scoringBias !== undefined || hasSignalBias) {
|
|
98
|
+
overrides.bias = (scoringBias ?? 0) + (hasSignalBias ? planSignalBias : 0);
|
|
99
|
+
}
|
|
100
|
+
return overrides;
|
|
101
|
+
}
|
|
102
|
+
function applyPlanBiasOverride(biases, planFolder, planBias) {
|
|
103
|
+
if (planBias === undefined) {
|
|
104
|
+
return biases;
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
...biases,
|
|
108
|
+
plans: {
|
|
109
|
+
...(biases.plans ?? {}),
|
|
110
|
+
[planFolder]: planBias,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function getBlockedDependencies(deps, allAgents) {
|
|
115
|
+
const blocked = [];
|
|
116
|
+
for (const dep of deps) {
|
|
117
|
+
const depAgent = allAgents.find((agent) => agent.agentNumber === dep);
|
|
118
|
+
if (!depAgent) {
|
|
119
|
+
blocked.push({ id: dep, status: 'MISSING' });
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (depAgent.frontmatter.status !== 'PASS') {
|
|
123
|
+
blocked.push({ id: dep, status: depAgent.frontmatter.status });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return blocked;
|
|
127
|
+
}
|
|
128
|
+
function mergeScoringWeights(base, overrides) {
|
|
129
|
+
if (!overrides) {
|
|
130
|
+
return base;
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
...base,
|
|
134
|
+
...overrides,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function getAgentScoringOverrides(agent) {
|
|
138
|
+
const scoring = agent.frontmatter.scoring;
|
|
139
|
+
if (!scoring || typeof scoring !== 'object' || Array.isArray(scoring)) {
|
|
140
|
+
return {};
|
|
141
|
+
}
|
|
142
|
+
const scoringRecord = scoring;
|
|
143
|
+
const bias = parseScoringBias(scoringRecord.bias);
|
|
144
|
+
const weights = parseScoringWeights(scoringRecord.weights);
|
|
145
|
+
return { bias, weights };
|
|
146
|
+
}
|
|
7
147
|
/**
|
|
8
148
|
* Calculate dependency score.
|
|
9
149
|
* Higher score when all dependencies are satisfied.
|
|
@@ -19,20 +159,13 @@ function calculateDependencyScore(agent, allAgents, maxScore = 40) {
|
|
|
19
159
|
reasons.push('No dependencies (unblocked)');
|
|
20
160
|
return { score: maxScore, reasons };
|
|
21
161
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// Find the dependent agent by number (deps are just agent numbers like "000")
|
|
25
|
-
const depAgent = allAgents.find((a) => a.agentNumber === dep);
|
|
26
|
-
if (depAgent && depAgent.frontmatter.status === 'PASS') {
|
|
27
|
-
satisfiedCount++;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
if (satisfiedCount === deps.length) {
|
|
162
|
+
const blockedDeps = getBlockedDependencies(deps, allAgents);
|
|
163
|
+
if (blockedDeps.length === 0) {
|
|
31
164
|
reasons.push(`All ${deps.length} dependencies satisfied`);
|
|
32
165
|
return { score: maxScore, reasons };
|
|
33
166
|
}
|
|
34
|
-
const
|
|
35
|
-
reasons.push(
|
|
167
|
+
const blockedList = blockedDeps.map((dep) => `${dep.id} (${dep.status})`).join(', ');
|
|
168
|
+
reasons.push(`Blocked by: ${blockedList}`);
|
|
36
169
|
return { score: 0, reasons };
|
|
37
170
|
}
|
|
38
171
|
/**
|
|
@@ -75,14 +208,24 @@ function calculateWorkloadScore(agent, maxScore = 30) {
|
|
|
75
208
|
* @param agent - Agent to score
|
|
76
209
|
* @param biases - Scoring biases configuration
|
|
77
210
|
*/
|
|
78
|
-
function calculateBiasScore(agent, biases) {
|
|
211
|
+
function calculateBiasScore(agent, biases, agentBias) {
|
|
79
212
|
let score = 0;
|
|
80
213
|
const reasons = [];
|
|
214
|
+
const breakdown = {
|
|
215
|
+
plan: 0,
|
|
216
|
+
persona: 0,
|
|
217
|
+
status: 0,
|
|
218
|
+
agent: 0,
|
|
219
|
+
};
|
|
81
220
|
// Plan bias
|
|
82
|
-
|
|
83
|
-
|
|
221
|
+
const planBias = biases.plans?.[agent.planFolder];
|
|
222
|
+
if (planBias !== undefined) {
|
|
223
|
+
const bias = planBias;
|
|
84
224
|
score += bias;
|
|
85
|
-
|
|
225
|
+
breakdown.plan = bias;
|
|
226
|
+
if (bias !== 0) {
|
|
227
|
+
reasons.push(`Plan bias: ${bias > 0 ? '+' : ''}${bias}`);
|
|
228
|
+
}
|
|
86
229
|
}
|
|
87
230
|
// Persona bias
|
|
88
231
|
const persona = agent.frontmatter.persona;
|
|
@@ -91,16 +234,29 @@ function calculateBiasScore(agent, biases) {
|
|
|
91
234
|
: undefined;
|
|
92
235
|
if (personaBias !== undefined) {
|
|
93
236
|
score += personaBias;
|
|
94
|
-
|
|
237
|
+
breakdown.persona = personaBias;
|
|
238
|
+
if (personaBias !== 0) {
|
|
239
|
+
reasons.push(`Persona bias (${persona}): ${personaBias > 0 ? '+' : ''}${personaBias}`);
|
|
240
|
+
}
|
|
95
241
|
}
|
|
96
242
|
// Status bias (mainly for GAP tasks)
|
|
97
243
|
const status = agent.frontmatter.status;
|
|
98
244
|
const statusBias = biases.statuses?.[status];
|
|
99
245
|
if (statusBias !== undefined) {
|
|
100
246
|
score += statusBias;
|
|
101
|
-
|
|
247
|
+
breakdown.status = statusBias;
|
|
248
|
+
if (statusBias !== 0) {
|
|
249
|
+
reasons.push(`Status bias (${status}): ${statusBias > 0 ? '+' : ''}${statusBias}`);
|
|
250
|
+
}
|
|
102
251
|
}
|
|
103
|
-
|
|
252
|
+
if (agentBias !== undefined) {
|
|
253
|
+
score += agentBias;
|
|
254
|
+
breakdown.agent = agentBias;
|
|
255
|
+
if (agentBias !== 0) {
|
|
256
|
+
reasons.push(`Agent bias: ${agentBias > 0 ? '+' : ''}${agentBias}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return { score, reasons, breakdown };
|
|
104
260
|
}
|
|
105
261
|
/**
|
|
106
262
|
* Check if task is eligible (GAP status, dependencies satisfied).
|
|
@@ -112,16 +268,13 @@ function isTaskEligible(agent, allAgents) {
|
|
|
112
268
|
reason: `Status is ${agent.frontmatter.status}, not GAP`,
|
|
113
269
|
};
|
|
114
270
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
reason: `Dependency ${dep} not satisfied`,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
271
|
+
const blockedDeps = getBlockedDependencies(agent.frontmatter.dependencies, allAgents);
|
|
272
|
+
if (blockedDeps.length > 0) {
|
|
273
|
+
const blockedList = blockedDeps.map((dep) => `${dep.id} (${dep.status})`).join(', ');
|
|
274
|
+
return {
|
|
275
|
+
eligible: false,
|
|
276
|
+
reason: `Blocked by: ${blockedList}`,
|
|
277
|
+
};
|
|
125
278
|
}
|
|
126
279
|
return { eligible: true };
|
|
127
280
|
}
|
|
@@ -133,7 +286,7 @@ function isTaskEligible(agent, allAgents) {
|
|
|
133
286
|
* @param weights - Scoring weights configuration
|
|
134
287
|
* @param biases - Scoring biases configuration
|
|
135
288
|
*/
|
|
136
|
-
function scoreTask(agent, allAgents, weights, biases) {
|
|
289
|
+
function scoreTask(agent, allAgents, weights, biases, agentBias) {
|
|
137
290
|
const eligibility = isTaskEligible(agent, allAgents);
|
|
138
291
|
if (!eligibility.eligible) {
|
|
139
292
|
return null;
|
|
@@ -141,7 +294,7 @@ function scoreTask(agent, allAgents, weights, biases) {
|
|
|
141
294
|
const depResult = calculateDependencyScore(agent, allAgents, weights.dependency);
|
|
142
295
|
const priorityResult = calculatePriorityScore(agent, weights.priority);
|
|
143
296
|
const workloadResult = calculateWorkloadScore(agent, weights.workload);
|
|
144
|
-
const biasResult = calculateBiasScore(agent, biases);
|
|
297
|
+
const biasResult = calculateBiasScore(agent, biases, agentBias);
|
|
145
298
|
const baseScore = depResult.score + priorityResult.score + workloadResult.score;
|
|
146
299
|
// Floor total at 0 (no negative scores)
|
|
147
300
|
const totalScore = Math.max(0, baseScore + biasResult.score);
|
|
@@ -154,6 +307,8 @@ function scoreTask(agent, allAgents, weights, biases) {
|
|
|
154
307
|
priorityScore: priorityResult.score,
|
|
155
308
|
workloadScore: workloadResult.score,
|
|
156
309
|
biasScore: biasResult.score,
|
|
310
|
+
biasBreakdown: biasResult.breakdown,
|
|
311
|
+
weights,
|
|
157
312
|
reasons: [
|
|
158
313
|
...depResult.reasons,
|
|
159
314
|
...priorityResult.reasons,
|
|
@@ -170,7 +325,7 @@ function scoreTask(agent, allAgents, weights, biases) {
|
|
|
170
325
|
* @param planId - Plan number or name
|
|
171
326
|
* @returns Structured task data or error message
|
|
172
327
|
*/
|
|
173
|
-
export async function getNextTaskData(config, planId) {
|
|
328
|
+
export async function getNextTaskData(config, planId, options) {
|
|
174
329
|
const planDir = findPlanDirectory(config.plansPath, planId);
|
|
175
330
|
if (!planDir) {
|
|
176
331
|
return { error: `Plan not found: ${planId}` };
|
|
@@ -179,13 +334,17 @@ export async function getNextTaskData(config, planId) {
|
|
|
179
334
|
if (agents.length === 0) {
|
|
180
335
|
return { error: 'No agents found' };
|
|
181
336
|
}
|
|
337
|
+
const planFolder = planDir.split('/').pop() || planId;
|
|
338
|
+
const planOverrides = getPlanScoringOverrides(planDir, options);
|
|
182
339
|
// Get scoring weights and biases from config
|
|
183
|
-
const weights = getScoringWeights(config);
|
|
184
|
-
const biases = getScoringBiases(config);
|
|
340
|
+
const weights = mergeScoringWeights(getScoringWeights(config), planOverrides.weights);
|
|
341
|
+
const biases = applyPlanBiasOverride(getScoringBiases(config), planFolder, planOverrides.bias);
|
|
185
342
|
// Score all eligible tasks
|
|
186
343
|
const scoredTasks = [];
|
|
187
344
|
for (const agent of agents) {
|
|
188
|
-
const
|
|
345
|
+
const agentOverrides = getAgentScoringOverrides(agent);
|
|
346
|
+
const agentWeights = mergeScoringWeights(weights, agentOverrides.weights);
|
|
347
|
+
const score = scoreTask(agent, agents, agentWeights, biases, agentOverrides.bias);
|
|
189
348
|
if (score) {
|
|
190
349
|
scoredTasks.push(score);
|
|
191
350
|
}
|
|
@@ -206,6 +365,73 @@ export async function getNextTaskData(config, planId) {
|
|
|
206
365
|
otherAvailableTasks: scoredTasks.length - 1,
|
|
207
366
|
};
|
|
208
367
|
}
|
|
368
|
+
export function getScoredTasksData(config, planId, options) {
|
|
369
|
+
const planDir = findPlanDirectory(config.plansPath, planId);
|
|
370
|
+
if (!planDir) {
|
|
371
|
+
return { error: `Plan not found: ${planId}` };
|
|
372
|
+
}
|
|
373
|
+
const agents = getAgentFiles(planDir);
|
|
374
|
+
if (agents.length === 0) {
|
|
375
|
+
return { error: 'No agents found' };
|
|
376
|
+
}
|
|
377
|
+
const planFolder = planDir.split('/').pop() || planId;
|
|
378
|
+
const planOverrides = getPlanScoringOverrides(planDir, options);
|
|
379
|
+
const weights = mergeScoringWeights(getScoringWeights(config), planOverrides.weights);
|
|
380
|
+
const biases = applyPlanBiasOverride(getScoringBiases(config), planFolder, planOverrides.bias);
|
|
381
|
+
const scoredTasks = [];
|
|
382
|
+
for (const agent of agents) {
|
|
383
|
+
const agentOverrides = getAgentScoringOverrides(agent);
|
|
384
|
+
const agentWeights = mergeScoringWeights(weights, agentOverrides.weights);
|
|
385
|
+
const score = scoreTask(agent, agents, agentWeights, biases, agentOverrides.bias);
|
|
386
|
+
if (score) {
|
|
387
|
+
scoredTasks.push(score);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (scoredTasks.length === 0) {
|
|
391
|
+
const passCount = agents.filter((a) => a.frontmatter.status === 'PASS').length;
|
|
392
|
+
if (passCount === agents.length) {
|
|
393
|
+
return { error: 'All tasks completed!' };
|
|
394
|
+
}
|
|
395
|
+
return { error: 'No available tasks (all blocked or in progress)' };
|
|
396
|
+
}
|
|
397
|
+
scoredTasks.sort((a, b) => b.totalScore - a.totalScore);
|
|
398
|
+
const planName = planDir.split('/').pop() || planId;
|
|
399
|
+
return { planName, tasks: scoredTasks };
|
|
400
|
+
}
|
|
401
|
+
export function getScoredTaskById(config, taskId, options) {
|
|
402
|
+
const [planPart] = taskId.split('#');
|
|
403
|
+
if (!planPart) {
|
|
404
|
+
return { error: `Invalid task ID: ${taskId}` };
|
|
405
|
+
}
|
|
406
|
+
const planDir = findPlanDirectory(config.plansPath, planPart);
|
|
407
|
+
if (!planDir) {
|
|
408
|
+
return { error: `Plan not found: ${planPart}` };
|
|
409
|
+
}
|
|
410
|
+
const agents = getAgentFiles(planDir);
|
|
411
|
+
if (agents.length === 0) {
|
|
412
|
+
return { error: 'No agents found' };
|
|
413
|
+
}
|
|
414
|
+
const target = agents.find((agent) => agent.taskId === taskId);
|
|
415
|
+
if (!target) {
|
|
416
|
+
return { error: `Task not found: ${taskId}` };
|
|
417
|
+
}
|
|
418
|
+
const eligibility = isTaskEligible(target, agents);
|
|
419
|
+
if (!eligibility.eligible) {
|
|
420
|
+
return { error: `Task not available: ${eligibility.reason ?? 'Not eligible'}` };
|
|
421
|
+
}
|
|
422
|
+
const planFolder = planDir.split('/').pop() || planPart;
|
|
423
|
+
const planOverrides = getPlanScoringOverrides(planDir, options);
|
|
424
|
+
const weights = mergeScoringWeights(getScoringWeights(config), planOverrides.weights);
|
|
425
|
+
const biases = applyPlanBiasOverride(getScoringBiases(config), planFolder, planOverrides.bias);
|
|
426
|
+
const agentOverrides = getAgentScoringOverrides(target);
|
|
427
|
+
const agentWeights = mergeScoringWeights(weights, agentOverrides.weights);
|
|
428
|
+
const score = scoreTask(target, agents, agentWeights, biases, agentOverrides.bias);
|
|
429
|
+
if (!score) {
|
|
430
|
+
return { error: `Task not available: ${taskId}` };
|
|
431
|
+
}
|
|
432
|
+
const planName = planDir.split('/').pop() || planPart;
|
|
433
|
+
return { planName, task: score };
|
|
434
|
+
}
|
|
209
435
|
/**
|
|
210
436
|
* Get the next best task from a plan.
|
|
211
437
|
*
|
|
@@ -219,7 +445,7 @@ export async function nextTask(config, planId) {
|
|
|
219
445
|
return result.error;
|
|
220
446
|
}
|
|
221
447
|
const { task: best, otherAvailableTasks } = result;
|
|
222
|
-
const weights =
|
|
448
|
+
const weights = best.weights;
|
|
223
449
|
const totalMax = weights.dependency + weights.priority + weights.workload;
|
|
224
450
|
// Format output
|
|
225
451
|
const lines = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-task.js","sourceRoot":"","sources":["../../src/cli/next-task.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"next-task.js","sourceRoot":"","sources":["../../src/cli/next-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
type PlanSignal = 'low' | 'medium' | 'high' | 'critical';
|
|
2
|
+
export interface PlanFrontmatterIssue {
|
|
3
|
+
code: 'missing_frontmatter' | 'malformed_frontmatter' | 'invalid_priority' | 'invalid_severity';
|
|
4
|
+
message: string;
|
|
5
|
+
value?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PlanFrontmatterInspection {
|
|
8
|
+
status: 'valid' | 'needs_repair' | 'no_signals' | 'missing';
|
|
9
|
+
issues: PlanFrontmatterIssue[];
|
|
10
|
+
priority?: PlanSignal;
|
|
11
|
+
severity?: PlanSignal;
|
|
12
|
+
priorityRaw?: string;
|
|
13
|
+
severityRaw?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function inspectPlanFrontmatter(content: string): PlanFrontmatterInspection;
|
|
16
|
+
export type PlanRepairResult = {
|
|
17
|
+
repaired: true;
|
|
18
|
+
priority?: PlanSignal;
|
|
19
|
+
severity?: PlanSignal;
|
|
20
|
+
} | {
|
|
21
|
+
repaired: false;
|
|
22
|
+
reason: 'missing' | 'valid' | 'no-signals';
|
|
23
|
+
};
|
|
24
|
+
export declare function repairPlanFrontmatter(planFilePath: string): PlanRepairResult;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=plan-repair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-repair.d.ts","sourceRoot":"","sources":["../../src/cli/plan-repair.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AA2DzD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,qBAAqB,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;IAChG,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,YAAY,GAAG,SAAS,CAAC;IAC5D,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,yBAAyB,CAqEjF;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;CAAE,GAChE;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAA;CAAE,CAAC;AAEpE,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,CA4B5E"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import { parse as parseYaml } from 'yaml';
|
|
3
|
+
import { FrontmatterHandler } from '../utils/frontmatter.js';
|
|
4
|
+
const frontmatterHandler = new FrontmatterHandler();
|
|
5
|
+
const normalizePlanSignal = (value) => {
|
|
6
|
+
if (typeof value !== 'string') {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const normalized = value.trim().toLowerCase();
|
|
10
|
+
if (normalized === 'low' ||
|
|
11
|
+
normalized === 'medium' ||
|
|
12
|
+
normalized === 'high' ||
|
|
13
|
+
normalized === 'critical') {
|
|
14
|
+
return normalized;
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
};
|
|
18
|
+
const stripFrontmatter = (content) => {
|
|
19
|
+
if (!content.startsWith('---')) {
|
|
20
|
+
return content;
|
|
21
|
+
}
|
|
22
|
+
const endIndex = content.indexOf('\n---', 3);
|
|
23
|
+
if (endIndex === -1) {
|
|
24
|
+
return content;
|
|
25
|
+
}
|
|
26
|
+
return content.slice(endIndex + 4).trim();
|
|
27
|
+
};
|
|
28
|
+
const extractPrioritySeverity = (content) => {
|
|
29
|
+
const priorityMatch = content.match(/^\s*priority\s*:\s*(.+)\s*$/im);
|
|
30
|
+
const severityMatch = content.match(/^\s*severity\s*:\s*(.+)\s*$/im);
|
|
31
|
+
return {
|
|
32
|
+
priority: normalizePlanSignal(priorityMatch?.[1]),
|
|
33
|
+
severity: normalizePlanSignal(severityMatch?.[1]),
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
const extractFrontmatterBlock = (content) => {
|
|
37
|
+
if (!content.startsWith('---')) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const endIndex = content.indexOf('\n---', 3);
|
|
41
|
+
if (endIndex === -1) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
yaml: content.slice(4, endIndex),
|
|
46
|
+
body: content.slice(endIndex + 4).trim(),
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export function inspectPlanFrontmatter(content) {
|
|
50
|
+
const block = extractFrontmatterBlock(content);
|
|
51
|
+
if (!block) {
|
|
52
|
+
return {
|
|
53
|
+
status: 'missing',
|
|
54
|
+
issues: [
|
|
55
|
+
{
|
|
56
|
+
code: 'missing_frontmatter',
|
|
57
|
+
message: 'No frontmatter block found.',
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
let parsed = null;
|
|
63
|
+
try {
|
|
64
|
+
parsed = parseYaml(block.yaml) || {};
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return {
|
|
68
|
+
status: 'needs_repair',
|
|
69
|
+
issues: [
|
|
70
|
+
{
|
|
71
|
+
code: 'malformed_frontmatter',
|
|
72
|
+
message: 'Frontmatter YAML is malformed.',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const priorityRaw = typeof parsed.priority === 'string' ? parsed.priority : undefined;
|
|
78
|
+
const severityRaw = typeof parsed.severity === 'string' ? parsed.severity : undefined;
|
|
79
|
+
const priority = normalizePlanSignal(priorityRaw);
|
|
80
|
+
const severity = normalizePlanSignal(severityRaw);
|
|
81
|
+
const issues = [];
|
|
82
|
+
if (priorityRaw && !priority) {
|
|
83
|
+
issues.push({
|
|
84
|
+
code: 'invalid_priority',
|
|
85
|
+
message: 'Invalid priority value.',
|
|
86
|
+
value: priorityRaw,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (severityRaw && !severity) {
|
|
90
|
+
issues.push({
|
|
91
|
+
code: 'invalid_severity',
|
|
92
|
+
message: 'Invalid severity value.',
|
|
93
|
+
value: severityRaw,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (!priority && !severity) {
|
|
97
|
+
return {
|
|
98
|
+
status: issues.length > 0 ? 'needs_repair' : 'no_signals',
|
|
99
|
+
issues,
|
|
100
|
+
priority,
|
|
101
|
+
severity,
|
|
102
|
+
priorityRaw,
|
|
103
|
+
severityRaw,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
status: issues.length > 0 ? 'needs_repair' : 'valid',
|
|
108
|
+
issues,
|
|
109
|
+
priority,
|
|
110
|
+
severity,
|
|
111
|
+
priorityRaw,
|
|
112
|
+
severityRaw,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export function repairPlanFrontmatter(planFilePath) {
|
|
116
|
+
if (!existsSync(planFilePath)) {
|
|
117
|
+
return { repaired: false, reason: 'missing' };
|
|
118
|
+
}
|
|
119
|
+
const content = readFileSync(planFilePath, 'utf-8');
|
|
120
|
+
try {
|
|
121
|
+
const parsed = frontmatterHandler.parse(content);
|
|
122
|
+
const priority = normalizePlanSignal(parsed.frontmatter.priority);
|
|
123
|
+
const severity = normalizePlanSignal(parsed.frontmatter.severity);
|
|
124
|
+
if (priority || severity) {
|
|
125
|
+
return { repaired: false, reason: 'valid' };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Ignore parse errors and attempt repair below.
|
|
130
|
+
}
|
|
131
|
+
const { priority, severity } = extractPrioritySeverity(content);
|
|
132
|
+
if (!priority && !severity) {
|
|
133
|
+
return { repaired: false, reason: 'no-signals' };
|
|
134
|
+
}
|
|
135
|
+
const body = stripFrontmatter(content);
|
|
136
|
+
const repairedFrontmatter = {};
|
|
137
|
+
if (priority)
|
|
138
|
+
repairedFrontmatter.priority = priority;
|
|
139
|
+
if (severity)
|
|
140
|
+
repairedFrontmatter.severity = severity;
|
|
141
|
+
const repairedContent = frontmatterHandler.stringify(repairedFrontmatter, body);
|
|
142
|
+
writeFileSync(planFilePath, repairedContent, 'utf-8');
|
|
143
|
+
return { repaired: true, priority, severity };
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=plan-repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-repair.js","sourceRoot":"","sources":["../../src/cli/plan-repair.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,9 @@ import { getPackageVersion, getPackageName } from './utils/version.js';
|
|
|
5
5
|
import { startMcpServer } from './server-main.js';
|
|
6
6
|
// Check if running serve command - needs clean stdio, bypass Pastel/Ink
|
|
7
7
|
const args = process.argv.slice(2);
|
|
8
|
-
|
|
8
|
+
const isServeCommand = args[0] === 'serve';
|
|
9
|
+
const wantsHelp = args.includes('--help') || args.includes('-h') || (isServeCommand && args.includes('help'));
|
|
10
|
+
if (isServeCommand && !wantsHelp) {
|
|
9
11
|
// Parse --config option
|
|
10
12
|
const configIndex = args.indexOf('--config');
|
|
11
13
|
const configPath = configIndex !== -1 ? args[configIndex + 1] : undefined;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,wEAAwE;AACxE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,wEAAwE;AACxE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AAC3C,MAAM,SAAS,GACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAE9F,IAAI,cAAc,IAAI,CAAC,SAAS,EAAE,CAAC;IACjC,wBAAwB;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1E,wDAAwD;IACxD,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtD,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;QAC9C,OAAO,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,yDAAyD;IACzD,yEAAyE;IACzE,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,cAAc,EAAE;QACtB,OAAO,EAAE,iBAAiB,EAAE;KAC7B,CAAC;IAEF,cAAc,CAAC;QACb,GAAG;QACH,mBAAmB,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,sBAAsB;KACrE,CAAC,CAAC,MAAM,EAAE,CAAC;IAEZ,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,iBAAiB,EAAE;QAC5B,WAAW,EAAE,uCAAuC;KACrD,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;AAClB,CAAC"}
|