mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 14:25:51 +00:00
Fix/coderabbit nits (#1259)
* 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
This commit is contained in:
@@ -20,10 +20,14 @@ import {
|
||||
} from '../services/analytics/index.js'
|
||||
import { accumulateUsage, updateUsage } from '../services/api/claude.js'
|
||||
import { EMPTY_USAGE, type NonNullableUsage } from '@ant/model-provider'
|
||||
import type {
|
||||
BetaRawMessageDeltaEvent,
|
||||
BetaRawMessageStreamEvent,
|
||||
} from '@anthropic-ai/sdk/resources/beta/messages/messages.js'
|
||||
import type { ToolUseContext } from '../Tool.js'
|
||||
import type { AgentDefinition } from '@claude-code-best/builtin-tools/tools/AgentTool/loadAgentsDir.js'
|
||||
import type { AgentId } from '../types/ids.js'
|
||||
import type { Message } from '../types/message.js'
|
||||
import type { Message, StreamEvent } from '../types/message.js'
|
||||
import { createChildAbortController } from './abortController.js'
|
||||
import { logForDebugging } from './debug.js'
|
||||
import { cloneFileStateCache } from './fileStateCache.js'
|
||||
@@ -492,6 +496,24 @@ export function createSubagentContext(
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
|
||||
type StreamEventMessage = StreamEvent & {
|
||||
type: 'stream_event'
|
||||
event: BetaRawMessageStreamEvent
|
||||
}
|
||||
|
||||
function isMessageDeltaStreamEvent(
|
||||
message: Message | StreamEvent,
|
||||
): message is StreamEventMessage & { event: BetaRawMessageDeltaEvent } {
|
||||
return (
|
||||
message.type === 'stream_event' &&
|
||||
typeof (message as StreamEventMessage).event === 'object' &&
|
||||
(message as StreamEventMessage).event !== null &&
|
||||
'type' in (message as StreamEventMessage).event &&
|
||||
(message as StreamEventMessage).event.type === 'message_delta'
|
||||
)
|
||||
}
|
||||
|
||||
export async function runForkedAgent({
|
||||
promptMessages,
|
||||
cacheSafeParams,
|
||||
@@ -562,15 +584,8 @@ export async function runForkedAgent({
|
||||
})) {
|
||||
// Extract real usage from message_delta stream events (final usage per API call)
|
||||
if (message.type === 'stream_event') {
|
||||
if (
|
||||
'event' in message &&
|
||||
(message as any).event?.type === 'message_delta' &&
|
||||
(message as any).event.usage
|
||||
) {
|
||||
const turnUsage = updateUsage(
|
||||
{ ...EMPTY_USAGE },
|
||||
(message as any).event.usage,
|
||||
)
|
||||
if (isMessageDeltaStreamEvent(message)) {
|
||||
const turnUsage = updateUsage({ ...EMPTY_USAGE }, message.event.usage)
|
||||
totalUsage = accumulateUsage(totalUsage, turnUsage)
|
||||
}
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user