feat: Add version management, session tracking, and commit linking
Phase 1: Version Management - Migration 006: Add git_tag, git_sha columns to versions - New tools: version_add, version_list, version_show, version_update, version_release, version_assign_task - Links versions to git tags for release tracking Phase 2: Session/Task Activity Tracking - Migration 007: Create task_activity table - Track task changes per session (created, updated, status_change, closed) - Session ID from env/cache file (usage-stats format) - New tool: session_tasks to query tasks by session Phase 3: Commit-Task Linking - Migration 008: Create task_commits junction table - New tools: task_commit_add, task_commit_remove, task_commits_list, task_link_commits (batch parsing) - Stores SHA references only (Gitea MCP owns full data) - Commits shown in task_show output 17 new MCP tools total. All migrations applied to docker-host postgres. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
77
src/index.ts
77
src/index.ts
@@ -24,6 +24,8 @@ import { taskLink, checklistAdd, checklistToggle, taskResolveDuplicate } from '.
|
||||
import { epicAdd, epicList, epicShow, epicAssign, epicClose } from './tools/epics.js';
|
||||
import { taskDelegations, taskDelegationQuery } from './tools/delegations.js';
|
||||
import { projectLock, projectUnlock, projectLockStatus, projectContext } from './tools/locks.js';
|
||||
import { versionAdd, versionList, versionShow, versionUpdate, versionRelease, versionAssignTask } from './tools/versions.js';
|
||||
import { taskCommitAdd, taskCommitRemove, taskCommitsList, taskLinkCommits, sessionTasks } from './tools/commits.js';
|
||||
|
||||
// Create MCP server
|
||||
const server = new Server(
|
||||
@@ -189,6 +191,81 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
||||
result = await projectContext();
|
||||
break;
|
||||
|
||||
// Versions
|
||||
case 'version_add':
|
||||
result = await versionAdd({
|
||||
project: a.project,
|
||||
version: a.version,
|
||||
build_number: a.build_number,
|
||||
status: a.status,
|
||||
release_notes: a.release_notes,
|
||||
});
|
||||
break;
|
||||
case 'version_list':
|
||||
result = await versionList({
|
||||
project: a.project,
|
||||
status: a.status,
|
||||
limit: a.limit,
|
||||
});
|
||||
break;
|
||||
case 'version_show':
|
||||
result = await versionShow(a.id);
|
||||
break;
|
||||
case 'version_update':
|
||||
result = await versionUpdate({
|
||||
id: a.id,
|
||||
status: a.status,
|
||||
git_tag: a.git_tag,
|
||||
git_sha: a.git_sha,
|
||||
release_notes: a.release_notes,
|
||||
release_date: a.release_date,
|
||||
});
|
||||
break;
|
||||
case 'version_release':
|
||||
result = await versionRelease({
|
||||
id: a.id,
|
||||
git_tag: a.git_tag,
|
||||
});
|
||||
break;
|
||||
case 'version_assign_task':
|
||||
result = await versionAssignTask({
|
||||
task_id: a.task_id,
|
||||
version_id: a.version_id,
|
||||
});
|
||||
break;
|
||||
|
||||
// Commits
|
||||
case 'task_commit_add':
|
||||
result = await taskCommitAdd({
|
||||
task_id: a.task_id,
|
||||
commit_sha: a.commit_sha,
|
||||
repo: a.repo,
|
||||
source: a.source,
|
||||
});
|
||||
break;
|
||||
case 'task_commit_remove':
|
||||
result = await taskCommitRemove({
|
||||
task_id: a.task_id,
|
||||
commit_sha: a.commit_sha,
|
||||
});
|
||||
break;
|
||||
case 'task_commits_list':
|
||||
result = await taskCommitsList(a.task_id);
|
||||
break;
|
||||
case 'task_link_commits':
|
||||
result = await taskLinkCommits({
|
||||
repo: a.repo,
|
||||
commits: a.commits,
|
||||
dry_run: a.dry_run,
|
||||
});
|
||||
break;
|
||||
case 'session_tasks':
|
||||
result = await sessionTasks({
|
||||
session_id: a.session_id,
|
||||
limit: a.limit,
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new Error(`Unknown tool: ${name}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user