chore(task-board): disable feature during refactor

This commit is contained in:
shiyue
2026-08-21 16:59:37 +08:00
parent d234189a86
commit 6c565f0ffe
10 changed files with 305 additions and 12 deletions

View File

@@ -173,6 +173,7 @@ const CODEX_APP_CCWEB_MCP_TRANSPORT = normalizeCodexAppCcwebMcpTransport(process
const CODEX_APP_WORKER_DISABLED = /^(0|false|no|off)$/i.test(String(process.env.CC_WEB_CODEX_APP_WORKER || ''));
const CODEX_APP_WORKER_ENABLED = !CODEX_APP_WORKER_DISABLED;
const USAGE_STATISTICS_ENABLED = !/^(0|false|no|off)$/i.test(String(process.env.CC_WEB_USAGE_STATISTICS || ''));
const TASK_BOARD_ENABLED = /^(1|true|yes|on)$/i.test(String(process.env.CC_WEB_TASK_BOARD_ENABLED || ''));
const CODEX_APP_PROCESS_ENV_STRIP_KEYS = [
'CC_WEB_MCP_URL',
'CC_WEB_MCP_TOKEN',
@@ -2780,6 +2781,7 @@ function listComposerMcpItems(options = {}) {
const seen = new Set();
const push = (item) => {
if (!item?.server && !item?.name) return;
if (!TASK_BOARD_ENABLED && String(item.name || '').startsWith('ccweb_task_')) return;
const key = `${item.kind || ''}:${item.server || ''}:${item.name || item.label || item.insertion || ''}`;
if (seen.has(key)) return;
seen.add(key);
@@ -4574,7 +4576,7 @@ function createProductionTaskBoardService() {
taskBoardService = createProductionTaskBoardService();
taskBoardMcpHandlers = createTaskBoardMcpHandlers(taskBoardService);
taskBoardLifecycle = createTaskBoardLifecycle(taskBoardService, {
taskBoardLifecycle = TASK_BOARD_ENABLED ? createTaskBoardLifecycle(taskBoardService, {
isTrackingEnabled(sessionId) {
try {
return taskBoardService.getTask(sessionId).taskTracking.enabled;
@@ -4585,8 +4587,8 @@ taskBoardLifecycle = createTaskBoardLifecycle(taskBoardService, {
logger(level, event, data) {
plog(String(level || '').toUpperCase() === 'ERROR' ? 'ERROR' : 'WARN', event, data);
},
});
taskStatusClassifier = createTaskStatusClassifier({
}) : null;
taskStatusClassifier = TASK_BOARD_ENABLED ? createTaskStatusClassifier({
taskBoardService,
loadSession,
resolveRuntime: resolveTaskStatusClassifierRuntime,
@@ -4600,10 +4602,10 @@ taskStatusClassifier = createTaskStatusClassifier({
});
broadcastSessionList();
},
});
}) : null;
function enqueueTaskStatusClassification(sessionId, event = {}) {
if (!taskStatusClassifier || !sessionId) return Promise.resolve(null);
if (!TASK_BOARD_ENABLED || !taskStatusClassifier || !sessionId) return Promise.resolve(null);
return taskStatusClassifier.enqueue(sessionId, event).catch((error) => {
plog('WARN', 'task_status_classification_enqueue_failed', {
sessionId: String(sessionId).slice(0, 8),
@@ -4615,7 +4617,7 @@ function enqueueTaskStatusClassification(sessionId, event = {}) {
}
function taskBoardMcpToolDefinitionsForSession(sessionId) {
if (!taskBoardService || !sessionId) return [];
if (!TASK_BOARD_ENABLED || !taskBoardService || !sessionId) return [];
try {
return createTaskBoardMcpToolDefinitions(taskBoardService, {
sourceSessionId: sanitizeId(sessionId),
@@ -5320,7 +5322,7 @@ function broadcastTaskBoardEvent(eventName, subject = null, extra = {}) {
}
function dispatchTaskBoardLifecycle(sessionId, event = {}) {
if (!taskBoardLifecycle || !sessionId || event.trackingEnabled === false) return Promise.resolve(null);
if (!TASK_BOARD_ENABLED || !taskBoardLifecycle || !sessionId || event.trackingEnabled === false) return Promise.resolve(null);
return taskBoardLifecycle.handleEvent(sessionId, event).then((result) => {
if (result?.changed && result.task) {
broadcastTaskBoardEvent(`lifecycle:${event.type || result.eventType || 'updated'}`, result.task, {
@@ -5349,6 +5351,14 @@ function sendTaskBoardWsResult(ws, request, payload = {}) {
}
function handleTaskBoardWsMessage(ws, message = {}) {
if (!TASK_BOARD_ENABLED) {
sendTaskBoardWsResult(ws, message, {
ok: false,
code: 'task_board_disabled',
message: '任务看板正在重构,暂不可用。',
});
return;
}
const actor = { source: 'user', id: 'ccweb-ui' };
try {
switch (message.type) {
@@ -6577,6 +6587,9 @@ function callInternalMcpTool(tool, args, sourceSessionId, sourceHopCount) {
case 'ccweb_prompt_user':
return createCcwebPromptUser(args, sourceSessionId);
case 'ccweb_task_update': {
if (!TASK_BOARD_ENABLED) {
return mcpToolError('task_board_disabled', '任务看板正在重构,暂不可用。');
}
const result = taskBoardMcpHandlers.ccweb_task_update(args, {
sourceSessionId,
actorId: `mcp:${String(sourceSessionId || '').slice(0, 32)}`,
@@ -7717,7 +7730,10 @@ wss.on('connection', (ws, req) => {
token: authToken,
mustChangePassword: !!authConfig.mustChange,
frontendAssetVersion: computeFrontendAssetVersion(),
features: { usageStatistics: USAGE_STATISTICS_ENABLED },
features: {
usageStatistics: USAGE_STATISTICS_ENABLED,
taskBoard: TASK_BOARD_ENABLED,
},
});
sendSessionList(ws);
} else {
@@ -9232,7 +9248,7 @@ function handleNewSession(ws, msg) {
});
}
let { session } = result;
if (request.taskTrackingEnabled === true) {
if (TASK_BOARD_ENABLED && request.taskTrackingEnabled === true) {
try {
const trackedTask = taskBoardService.setTracking(session.id, true, {
source: 'user',