T-519 — pre-flight quota-gate voor de worker-loop. Twee nieuwe MCP-tools: - get_worker_settings (read): retourneert User.min_quota_pct. Worker roept dit elke iteratie aan vóór de quota-probe. - worker_heartbeat (write): worker rapporteert last_quota_pct + last_quota_check_at na een probe. Update ClaudeWorker en emit pg_notify 'worker_heartbeat' op scrum4me_changes-channel zodat NavBar stand-by-badge real-time updatet. requireWriteAccess (demo-blok). Schema-resync: vendor/scrum4me bijgewerkt naar 555ed8f waarmee de M13-velden (User.min_quota_pct, ClaudeWorker.last_quota_pct + last_quota_check_at) beschikbaar zijn voor Prisma client. Bestaande achtergrond-heartbeat (presence/heartbeat.ts, 5s tick op last_seen_at) blijft ongewijzigd. Worker_heartbeat is een aparte expliciete call met quota-info. Versie naar 0.7.0 (minor — twee nieuwe tools). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
// MCP read-tool: lees de worker-instellingen van de geauthenticeerde user.
|
|
//
|
|
// Worker roept dit aan vóór elke wait_for_job iteratie zodat hij weet
|
|
// wanneer hij stand-by moet (pre-flight quota-gate).
|
|
//
|
|
// Auth: api-token; user_id afgeleid uit token. Demo mag.
|
|
|
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
import { prisma } from '../prisma.js'
|
|
import { getAuth } from '../auth.js'
|
|
import { toolError, toolJson, withToolErrors } from '../errors.js'
|
|
|
|
export function registerGetWorkerSettingsTool(server: McpServer) {
|
|
server.registerTool(
|
|
'get_worker_settings',
|
|
{
|
|
title: 'Get worker settings',
|
|
description:
|
|
'Read the authenticated user\'s worker settings (min_quota_pct). Worker should call this each iteration before doing the pre-flight quota probe.',
|
|
inputSchema: {},
|
|
},
|
|
async () =>
|
|
withToolErrors(async () => {
|
|
const auth = await getAuth()
|
|
const user = await prisma.user.findUnique({
|
|
where: { id: auth.userId },
|
|
select: { min_quota_pct: true },
|
|
})
|
|
if (!user) return toolError('User not found')
|
|
return toolJson({ min_quota_pct: user.min_quota_pct })
|
|
}),
|
|
)
|
|
}
|