mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-03 09:17:09 +08:00
Removes drive-by duplication that accumulated during the contributor branch's multiple rebases. All runtime-benign (dict last-wins, redefinition last-wins) but left dead source that would confuse reviewers and maintainers. Surgical in-place de-duplication (kept PR's intentional additions, removed only the doubled copy): * hermes_cli/auth.py: duplicate "gmi" + "azure-foundry" ProviderConfig * hermes_cli/models.py: duplicate "gmi" entry in _PROVIDER_MODELS * hermes_cli/config.py: duplicate NOTION/LINEAR/AIRTABLE/TENOR skill env block + duplicate get_custom_provider_context_length definition * hermes_cli/gateway.py: duplicate _setup_yuanbao * gateway/platforms/base.py: duplicate is_host_excluded_by_no_proxy * gateway/platforms/telegram.py: duplicate delete_message * gateway/stream_consumer.py: duplicate _should_send_fresh_final and _try_fresh_final * gateway/run.py: duplicate _parse_reasoning_command_args / _resolve_session_reasoning_config / _set_session_reasoning_override, duplicate "Drain silently when interrupted" interrupt check * run_agent.py: duplicate HERMES_AGENT_HELP_GUIDANCE append, duplicate codex_message_items capture, duplicate custom_providers resolution * tools/approval.py: duplicate HARDLINE_PATTERNS section and duplicate hardline call in check_dangerous_command * tools/mcp_tool.py: duplicate _orphan_stdio_pids module-level decl * cron/scheduler.py: duplicate "not configured/enabled" check — kept the new early-rejection, removed the stale late-path copy Full-file resets to origin/main (all PR additions were duplicates of content already on main): * ui-tui/packages/hermes-ink/index.d.ts * ui-tui/packages/hermes-ink/src/entry-exports.ts * ui-tui/packages/hermes-ink/src/ink/selection.ts * ui-tui/src/app/interfaces.ts * ui-tui/src/app/slash/commands/core.ts * ui-tui/src/components/thinking.tsx * ui-tui/src/lib/memoryMonitor.ts * ui-tui/src/types.ts * ui-tui/src/types/hermes-ink.d.ts * tests/hermes_cli/test_doctor.py * tests/hermes_cli/test_api_key_providers.py * tests/hermes_cli/test_model_validation.py * tests/plugins/memory/test_hindsight_provider.py * tests/run_agent/test_run_agent.py * tests/gateway/test_email.py * tests/tools/test_dockerfile_pid1_reaping.py * hermes_cli/commands.py (slack_native_slashes block — full duplicate)
205 lines
4.3 KiB
TypeScript
205 lines
4.3 KiB
TypeScript
export interface ActiveTool {
|
|
context?: string
|
|
id: string
|
|
name: string
|
|
startedAt?: number
|
|
}
|
|
|
|
export interface TodoItem {
|
|
content: string
|
|
id: string
|
|
status: 'cancelled' | 'completed' | 'in_progress' | 'pending'
|
|
}
|
|
|
|
export interface ActivityItem {
|
|
id: number
|
|
text: string
|
|
tone: 'error' | 'info' | 'warn'
|
|
}
|
|
|
|
export interface SubagentProgress {
|
|
apiCalls?: number
|
|
costUsd?: number
|
|
depth: number
|
|
durationSeconds?: number
|
|
filesRead?: string[]
|
|
filesWritten?: string[]
|
|
goal: string
|
|
id: string
|
|
index: number
|
|
inputTokens?: number
|
|
iteration?: number
|
|
model?: string
|
|
notes: string[]
|
|
outputTail?: SubagentOutputEntry[]
|
|
outputTokens?: number
|
|
parentId: null | string
|
|
reasoningTokens?: number
|
|
startedAt?: number
|
|
status: 'completed' | 'failed' | 'interrupted' | 'queued' | 'running'
|
|
summary?: string
|
|
taskCount: number
|
|
thinking: string[]
|
|
toolCount: number
|
|
tools: string[]
|
|
toolsets?: string[]
|
|
}
|
|
|
|
export interface SubagentOutputEntry {
|
|
isError: boolean
|
|
preview: string
|
|
tool: string
|
|
}
|
|
|
|
export interface SubagentNode {
|
|
aggregate: SubagentAggregate
|
|
children: SubagentNode[]
|
|
item: SubagentProgress
|
|
}
|
|
|
|
export interface SubagentAggregate {
|
|
activeCount: number
|
|
costUsd: number
|
|
descendantCount: number
|
|
filesTouched: number
|
|
hotness: number
|
|
inputTokens: number
|
|
maxDepthFromHere: number
|
|
outputTokens: number
|
|
totalDuration: number
|
|
totalTools: number
|
|
}
|
|
|
|
export interface DelegationStatus {
|
|
active: {
|
|
depth?: number
|
|
goal?: string
|
|
model?: null | string
|
|
parent_id?: null | string
|
|
started_at?: number
|
|
status?: string
|
|
subagent_id?: string
|
|
tool_count?: number
|
|
}[]
|
|
max_concurrent_children?: number
|
|
max_spawn_depth?: number
|
|
paused: boolean
|
|
}
|
|
|
|
export interface ApprovalReq {
|
|
command: string
|
|
description: string
|
|
}
|
|
|
|
export interface ConfirmReq {
|
|
cancelLabel?: string
|
|
confirmLabel?: string
|
|
danger?: boolean
|
|
detail?: string
|
|
onConfirm: () => void
|
|
title: string
|
|
}
|
|
|
|
export interface ClarifyReq {
|
|
choices: string[] | null
|
|
question: string
|
|
requestId: string
|
|
}
|
|
|
|
export interface Msg {
|
|
info?: SessionInfo
|
|
kind?: 'diff' | 'intro' | 'panel' | 'slash' | 'trail'
|
|
panelData?: PanelData
|
|
role: Role
|
|
text: string
|
|
thinking?: string
|
|
thinkingTokens?: number
|
|
toolTokens?: number
|
|
tools?: string[]
|
|
todos?: TodoItem[]
|
|
todoIncomplete?: boolean
|
|
todoCollapsedByDefault?: boolean
|
|
}
|
|
|
|
export type Role = 'assistant' | 'system' | 'tool' | 'user'
|
|
export type DetailsMode = 'hidden' | 'collapsed' | 'expanded'
|
|
export type ThinkingMode = 'collapsed' | 'truncated' | 'full'
|
|
|
|
// Per-section overrides for the agent details accordion. Resolution order
|
|
// at lookup time is: explicit `display.sections.<name>` → built-in
|
|
// SECTION_DEFAULTS → global `details_mode`. Today the built-in defaults
|
|
// expand `thinking`/`tools` and hide `activity`; `subagents` falls through
|
|
// to the global mode. Any explicit value still wins for that one section.
|
|
export type SectionName = 'thinking' | 'tools' | 'subagents' | 'activity'
|
|
export type SectionVisibility = Partial<Record<SectionName, DetailsMode>>
|
|
|
|
export interface McpServerStatus {
|
|
connected: boolean
|
|
name: string
|
|
tools: number
|
|
transport: string
|
|
}
|
|
|
|
export interface SessionInfo {
|
|
cwd?: string
|
|
fast?: boolean
|
|
lazy?: boolean
|
|
mcp_servers?: McpServerStatus[]
|
|
model: string
|
|
reasoning_effort?: string
|
|
release_date?: string
|
|
service_tier?: string
|
|
skills: Record<string, string[]>
|
|
tools: Record<string, string[]>
|
|
update_behind?: number | null
|
|
update_command?: string
|
|
usage?: Usage
|
|
version?: string
|
|
}
|
|
|
|
export interface Usage {
|
|
calls: number
|
|
context_max?: number
|
|
context_percent?: number
|
|
context_used?: number
|
|
cost_usd?: number
|
|
input: number
|
|
output: number
|
|
total: number
|
|
}
|
|
|
|
export interface SudoReq {
|
|
requestId: string
|
|
}
|
|
|
|
export interface SecretReq {
|
|
envVar: string
|
|
prompt: string
|
|
requestId: string
|
|
}
|
|
|
|
export interface PanelData {
|
|
sections: PanelSection[]
|
|
title: string
|
|
}
|
|
|
|
export interface PanelSection {
|
|
items?: string[]
|
|
rows?: [string, string][]
|
|
text?: string
|
|
title?: string
|
|
}
|
|
|
|
export interface SlashCatalog {
|
|
canon: Record<string, string>
|
|
categories: SlashCategory[]
|
|
pairs: [string, string][]
|
|
skillCount: number
|
|
sub: Record<string, string[]>
|
|
}
|
|
|
|
export interface SlashCategory {
|
|
name: string
|
|
pairs: [string, string][]
|
|
}
|