@vheins/local-memory-mcp 0.16.1 → 0.16.2
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/dist/{chunk-C5MOQQAU.js → chunk-SXIFTAR7.js} +36 -3
- package/dist/dashboard/public/assets/index-DtO8Q1SV.js +150 -0
- package/dist/dashboard/public/index.html +1 -1
- package/dist/dashboard/server.js +1 -1
- package/dist/mcp/server.js +37 -2
- package/dist/prompts/create-task.md +8 -0
- package/dist/prompts/task-memory-executor.md +2 -1
- package/package.json +4 -2
- package/dist/dashboard/public/assets/index-rb4jB2IX.js +0 -149
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
10
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
11
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-DtO8Q1SV.js"></script>
|
|
12
12
|
<link rel="stylesheet" crossorigin href="/assets/index-wAYh22Zy.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
package/dist/dashboard/server.js
CHANGED
package/dist/mcp/server.js
CHANGED
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
toContextSlug,
|
|
61
61
|
updateSessionFromInitialize,
|
|
62
62
|
updateSessionRoots
|
|
63
|
-
} from "../chunk-
|
|
63
|
+
} from "../chunk-SXIFTAR7.js";
|
|
64
64
|
|
|
65
65
|
// src/mcp/server.ts
|
|
66
66
|
import readline from "readline";
|
|
@@ -2370,24 +2370,57 @@ async function handleTaskGet(args, storage) {
|
|
|
2370
2370
|
throw new Error(`Task not found: ${id || task_code} in repo ${repo}`);
|
|
2371
2371
|
}
|
|
2372
2372
|
const comments = storage.taskComments.getTaskCommentsByTaskId(task.id);
|
|
2373
|
+
const children = storage.tasks.getChildrenByParentId(task.id);
|
|
2374
|
+
const depended_by = storage.tasks.getDependedByTaskId(task.id);
|
|
2373
2375
|
let contentSummary;
|
|
2374
2376
|
if (!isStructuredRequest) {
|
|
2375
2377
|
const lines = [
|
|
2376
2378
|
`Task: ${task.title}`,
|
|
2377
2379
|
`Code: ${task.task_code}`,
|
|
2380
|
+
`Repo: ${task.repo}`,
|
|
2378
2381
|
`Status: ${task.status}`,
|
|
2379
2382
|
`Priority: ${task.priority}`,
|
|
2380
2383
|
`ID: ${task.id}`
|
|
2381
2384
|
];
|
|
2382
2385
|
if (task.phase) lines.push(`Phase: ${task.phase}`);
|
|
2386
|
+
if (task.parent_code) lines.push(`Parent: ${task.parent_code} (${task.parent_id || ""})`);
|
|
2387
|
+
if (task.depends_on_code) lines.push(`Depends On: ${task.depends_on_code} (${task.depends_on || ""})`);
|
|
2388
|
+
if (task.doc_path) lines.push(`Doc Path: ${task.doc_path}`);
|
|
2383
2389
|
if (task.description) lines.push(`Description: ${task.description}`);
|
|
2390
|
+
if (task.tags && task.tags.length > 0) lines.push(`Tags: ${task.tags.join(", ")}`);
|
|
2384
2391
|
if (task.suggested_skills && task.suggested_skills.length > 0)
|
|
2385
2392
|
lines.push(`Suggested Skills: ${task.suggested_skills.join(", ")}`);
|
|
2393
|
+
if (task.est_tokens) lines.push(`Est Tokens: ${task.est_tokens}`);
|
|
2394
|
+
if (task.commit_id) lines.push(`Commit: ${task.commit_id}`);
|
|
2395
|
+
if (task.changed_files && task.changed_files.length > 0)
|
|
2396
|
+
lines.push(`Changed Files: ${task.changed_files.join(", ")}`);
|
|
2386
2397
|
if (task.metadata) lines.push(`Metadata: ${JSON.stringify(task.metadata)}`);
|
|
2398
|
+
if (task.comments_count !== void 0) lines.push(`Comments: ${task.comments_count}`);
|
|
2399
|
+
if (task.coordination) {
|
|
2400
|
+
if (task.coordination.active_claim_count > 0) {
|
|
2401
|
+
lines.push(`Claim: ${task.coordination.active_claim_agent || "?"} (${task.coordination.active_claim_role || ""}) since ${task.coordination.active_claim_claimed_at || ""}`);
|
|
2402
|
+
}
|
|
2403
|
+
if (task.coordination.pending_handoff_count > 0) {
|
|
2404
|
+
lines.push(`Handoff: ${task.coordination.pending_handoff_summary || ""} \u2192 ${task.coordination.pending_handoff_to_agent || "?"}`);
|
|
2405
|
+
}
|
|
2406
|
+
}
|
|
2387
2407
|
lines.push(`Created: ${task.created_at}`);
|
|
2388
2408
|
if (task.updated_at) lines.push(`Updated: ${task.updated_at}`);
|
|
2389
2409
|
if (task.in_progress_at) lines.push(`Started: ${task.in_progress_at}`);
|
|
2390
2410
|
if (task.finished_at) lines.push(`Finished: ${task.finished_at}`);
|
|
2411
|
+
if (task.canceled_at) lines.push(`Canceled: ${task.canceled_at}`);
|
|
2412
|
+
if (children.length > 0) {
|
|
2413
|
+
lines.push("", "--- Children ---");
|
|
2414
|
+
for (const c of children) {
|
|
2415
|
+
lines.push(`- ${c.task_code}: ${c.title} (${c.status})`);
|
|
2416
|
+
}
|
|
2417
|
+
}
|
|
2418
|
+
if (depended_by.length > 0) {
|
|
2419
|
+
lines.push("", "--- Depended By ---");
|
|
2420
|
+
for (const d of depended_by) {
|
|
2421
|
+
lines.push(`- ${d.task_code}: ${d.title} (${d.status})`);
|
|
2422
|
+
}
|
|
2423
|
+
}
|
|
2391
2424
|
if (comments.length > 0) {
|
|
2392
2425
|
lines.push("", "--- History ---");
|
|
2393
2426
|
for (const c of comments) {
|
|
@@ -2400,7 +2433,9 @@ async function handleTaskGet(args, storage) {
|
|
|
2400
2433
|
}
|
|
2401
2434
|
const structuredData = {
|
|
2402
2435
|
...task,
|
|
2403
|
-
comments
|
|
2436
|
+
comments,
|
|
2437
|
+
children,
|
|
2438
|
+
depended_by
|
|
2404
2439
|
};
|
|
2405
2440
|
return createMcpResponse(structuredData, contentSummary || "", {
|
|
2406
2441
|
contentSummary,
|
|
@@ -42,6 +42,14 @@ G2 | sprint? | src=.agents/documents/tasks/sprints/ | → route sprint flow |
|
|
|
42
42
|
|
|
43
43
|
`1=Low` `2=Normal` `3=Medium` `4=High` `5=Critical` (ascending urgency)
|
|
44
44
|
|
|
45
|
+
## 3B. SKILL TRACKING METADATA
|
|
46
|
+
When a task's description references specific skills (e.g., "Load feature-decomposition skill"), set `metadata.required_skills` and `metadata.fsm_gates`:
|
|
47
|
+
|
|
48
|
+
- `metadata.required_skills`: `["skill-name-1", "skill-name-2"]` — array of skill names the task depends on.
|
|
49
|
+
- `metadata.fsm_gates`: `["S0", "S1", "G0"]` — array of FSM step/gate identifiers the skill requires.
|
|
50
|
+
- **Optional**: Only set when the task explicitly references a skill. Most tasks do NOT need skill tracking.
|
|
51
|
+
- **Enforcement**: The `task-memory-executor` G0.5 gate checks `metadata.required_skills` before execution. If a skill is listed but wasn't loaded, the executor blocks the task.
|
|
52
|
+
|
|
45
53
|
## Blueprint Flow (G1→)
|
|
46
54
|
|
|
47
55
|
Root parent → phase parents P0..P10 → child tasks per breakdown row
|
|
@@ -20,7 +20,8 @@ S0 | sync: resolve identity (arg→auto `<runner>-<randomName>`, 1x reuse all lo
|
|
|
20
20
|
S1 | hydrate: task-detail ONCE per task — MUST cache, MUST reuse all steps, NO re-fetch | S0✅ | full task | —
|
|
21
21
|
G0 | readiness: depends_on✅ AND parent_id✅? if all blocked → report blockers + pause | S1✅ | → S2 / skip+pick next | —
|
|
22
22
|
S2 | claim: task-claim(with identity metadata) + task-update→in_progress(agent, role, identity) | G0✅ | ownership | —
|
|
23
|
-
|
|
23
|
+
G0.5 | skill readiness: check task.metadata.required_skills — if present, load each via skill() and verify FSM completed (all gates passed). If skill not loaded or FSM incomplete → ⛔ block with reason. If absent → skip (most tasks don't use skills). Check task-detail for suggested_skills too — if present, load each. | S2✅ | → S3 / ⛔ → blocker | —
|
|
24
|
+
S3 | research: memory-search + standard-search(MANDATORY per task — even sub-agents/decomposed) + hydrate relevant | G0.5✅ | context | —
|
|
24
25
|
S4 | execute: trace logic+callsites+docs — DO NOT infer from file presence; decompose if too broad | S3✅ | changes | —
|
|
25
26
|
S5 | validate: tests + linters + type-check + browser(if UI — MANDATORY: console errors, overflow, responsive, core interactions) + logic audit all paths | S4✅ | verification | —
|
|
26
27
|
S6 | finalize: task-update→completed(evidence: inspected files, verified logic, test results) + memory-store(insights) + standard-store(rules) + handoff(if work remains — with identity) + retrospective + report | S5✅ | completion | —
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vheins/local-memory-mcp",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.2",
|
|
4
4
|
"description": "MCP Local Memory Service for coding copilot agents",
|
|
5
5
|
"mcpName": "io.github.vheins/local-memory-mcp",
|
|
6
6
|
"type": "module",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"better-sqlite3": "^12.9.0",
|
|
51
51
|
"chart.js": "^4.5.1",
|
|
52
52
|
"dompurify": "^3.3.3",
|
|
53
|
+
"esbuild": "0.28.1",
|
|
53
54
|
"express": "^5.2.1",
|
|
54
55
|
"gray-matter": "^4.0.3",
|
|
55
56
|
"marked": "^18.0.0",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
},
|
|
92
93
|
"overrides": {
|
|
93
94
|
"protobufjs": "^7.5.8",
|
|
94
|
-
"brace-expansion": "^5.0.6"
|
|
95
|
+
"brace-expansion": "^5.0.6",
|
|
96
|
+
"esbuild": "0.28.1"
|
|
95
97
|
}
|
|
96
98
|
}
|