Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
2.2 kB · 76 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677/** * Selectors for deriving computed state from AppState. * Keep selectors pure and simple - just data extraction, no side effects. */
import type { InProcessTeammateTaskState } from '../tasks/InProcessTeammateTask/types.js'import { isInProcessTeammateTask } from '../tasks/InProcessTeammateTask/types.js'import type { LocalAgentTaskState } from '../tasks/LocalAgentTask/LocalAgentTask.js'import type { AppState } from './AppStateStore.js'
/** * Get the currently viewed teammate task, if any. * Returns undefined if: * - No teammate is being viewed (viewingAgentTaskId is undefined) * - The task ID doesn't exist in tasks * - The task is not an in-process teammate task */export function getViewedTeammateTask( appState: Pick<AppState, 'viewingAgentTaskId' | 'tasks'>,): InProcessTeammateTaskState | undefined { const { viewingAgentTaskId, tasks } = appState
// Not viewing any teammate if (!viewingAgentTaskId) { return undefined }
// Look up the task const task = tasks[viewingAgentTaskId] if (!task) { return undefined }
// Verify it's an in-process teammate task if (!isInProcessTeammateTask(task)) { return undefined }
return task}
/** * Return type for getActiveAgentForInput selector. * Discriminated union for type-safe input routing. */export type ActiveAgentForInput = | { type: 'leader' } | { type: 'viewed'; task: InProcessTeammateTaskState } | { type: 'named_agent'; task: LocalAgentTaskState }
/** * Determine where user input should be routed. * Returns: * - { type: 'leader' } when not viewing a teammate (input goes to leader) * - { type: 'viewed', task } when viewing an agent (input goes to that agent) * * Used by input routing logic to direct user messages to the correct agent. */export function getActiveAgentForInput( appState: AppState,): ActiveAgentForInput { const viewedTask = getViewedTeammateTask(appState) if (viewedTask) { return { type: 'viewed', task: viewedTask } }
const { viewingAgentTaskId, tasks } = appState if (viewingAgentTaskId) { const task = tasks[viewingAgentTaskId] if (task?.type === 'local_agent') { return { type: 'named_agent', task } } }
return { type: 'leader' }}