mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 05:45:51 +00:00
* fix: eliminate 8 as any in MCP handlers, structured output, and stream events - Group A: Add : () => AnyObjectSchema type annotations to MCP notification schema constants (useIdeSelection, useIdeLogging, usePrompts, channelNotification) - Group B: Add isStructuredOutputAttachmentMessage type guard for structured output attachment payloads (execAgentHook) - Group C: Add isMessageDeltaStreamEvent type guard for message_delta stream event usage extraction (forkedAgent) These as any casts also exist in the upstream CCB source — this fix provides real type safety without changing any runtime behavior. * feat: wire mode persona injection — Claude Soul Document distilled into system prompt - prompts.ts: add getModePersonaSection() → injects current mode's systemPrompt as 'mode_persona' dynamic section (first in order, before operational instructions). Previously modes had systemPrompt fields but they were never sent to the model. - modes/personas/claude.ts: 3KB distilled Claude persona from Anthropic's leaked Claude 4.5 Opus Soul Document (70KB → operational extract): core traits, 7 honesty principles, helpfulness/caution balance, collaboration stance, identity stability. - With custom mode YAML (~/.claude/modes/claude.yaml), 7 modes total including the new Claude persona — fully operational at /mode claude. Co-Authored-By: James Feng <47167674+GhostDragon124@users.noreply.github.com> * fix: import path convention + reword persona source comment - prompts.ts: use 'src/modes/store.js' alias instead of relative '../modes/store.js' to match the file's existing import convention - claude.ts: reword JSDoc to say 'based on publicly available reference document' instead of 'leaked', addressing CodeRabbit review concern
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { useEffect } from 'react'
|
|
import { logEvent } from 'src/services/analytics/index.js'
|
|
import { z } from 'zod/v4'
|
|
import type { MCPServerConnection } from '../services/mcp/types.js'
|
|
import { getConnectedIdeClient } from '../utils/ide.js'
|
|
import type { AnyObjectSchema } from '@modelcontextprotocol/sdk/server/zod-compat.js'
|
|
import { lazySchema } from '../utils/lazySchema.js'
|
|
|
|
const LogEventSchema: () => AnyObjectSchema = lazySchema(() =>
|
|
z.object({
|
|
method: z.literal('log_event'),
|
|
params: z.object({
|
|
eventName: z.string(),
|
|
eventData: z.object({}).passthrough(),
|
|
}),
|
|
}),
|
|
)
|
|
|
|
export function useIdeLogging(mcpClients: MCPServerConnection[]): void {
|
|
useEffect(() => {
|
|
// Skip if there are no clients
|
|
if (!mcpClients.length) {
|
|
return
|
|
}
|
|
|
|
// Find the IDE client from the MCP clients list
|
|
const ideClient = getConnectedIdeClient(mcpClients)
|
|
if (ideClient) {
|
|
// Register the log event handler
|
|
ideClient.client.setNotificationHandler(
|
|
LogEventSchema(),
|
|
notification => {
|
|
const { eventName, eventData } = notification.params
|
|
logEvent(
|
|
`tengu_ide_${eventName}`,
|
|
eventData as { [key: string]: boolean | number | undefined },
|
|
)
|
|
},
|
|
)
|
|
}
|
|
}, [mcpClients])
|
|
}
|