Add session management MCP tools (Phase 3)

Implemented 8 new session management tools:
- session_start: Initialize session with metadata tracking
- session_update: Update session metrics during execution
- session_end: Close session with summary and embedding
- session_list: List sessions with filtering
- session_search: Semantic search across sessions
- session_context: Get complete session context (tasks, commits, builds, memories)
- build_record: Link builds to sessions and versions
- session_commit_link: Link commits to sessions

Enhanced existing tools:
- memory_add: Added session_id and task_id parameters
- Updated all memory queries to use 'memories' table (renamed from session_memories)

Implementation:
- Created src/tools/sessions.ts with all session operations
- Updated src/tools/memories.ts for new schema
- Added 8 session tool definitions to src/tools/index.ts
- Registered all session tools in src/index.ts switch statement
- TypeScript compilation successful

Related: CF-167 (Fix shared session-summary.md file conflict)
This commit is contained in:
Christian Gick
2026-01-17 07:45:14 +02:00
parent 00de7f1299
commit 04395e8403
5 changed files with 640 additions and 27 deletions

View File

@@ -37,6 +37,16 @@ import {
componentGraph,
} from './tools/impact.js';
import { memoryAdd, memorySearch, memoryList, memoryContext } from './tools/memories.js';
import {
sessionStart,
sessionUpdate,
sessionEnd,
sessionList,
sessionSearch,
sessionContext,
buildRecord,
sessionCommitLink,
} from './tools/sessions.js';
// Create MCP server
const server = new Server(
@@ -329,6 +339,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
content: a.content,
context: a.context,
project: a.project,
session_id: a.session_id,
task_id: a.task_id,
});
break;
case 'memory_search':
@@ -350,6 +362,69 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
result = await memoryContext(a.project, a.task_description);
break;
// Sessions
case 'session_start':
result = await sessionStart({
session_id: a.session_id,
project: a.project,
working_directory: a.working_directory,
git_branch: a.git_branch,
initial_prompt: a.initial_prompt,
});
break;
case 'session_update':
result = await sessionUpdate({
session_id: a.session_id,
message_count: a.message_count,
token_count: a.token_count,
tools_used: a.tools_used,
});
break;
case 'session_end':
result = await sessionEnd({
session_id: a.session_id,
summary: a.summary,
status: a.status,
});
break;
case 'session_list':
result = await sessionList({
project: a.project,
status: a.status,
since: a.since,
limit: a.limit,
});
break;
case 'session_search':
result = await sessionSearch({
query: a.query,
project: a.project,
limit: a.limit,
});
break;
case 'session_context':
result = await sessionContext(a.session_id);
break;
case 'build_record':
result = await buildRecord(
a.session_id,
a.version_id,
a.build_number,
a.git_commit_sha,
a.status,
a.started_at
);
break;
case 'session_commit_link':
result = await sessionCommitLink(
a.session_id,
a.commit_sha,
a.repo,
a.commit_message,
a.committed_at
);
break;
default:
throw new Error(`Unknown tool: ${name}`);
}