InkdownInkdown
Start writing

Claude-Code

62 files·4 subfolders

Shared Workspace

Claude-Code
codex

19-cost-tracking-history

Shared from "Claude-Code" on Inkdown

Cost Tracking & Command History

Session cost tracking and command history with paste support.


Cost Tracking

cost-tracker.ts

Tracks and persists all API costs, token usage, and duration metrics.

Key Functions
TypeScript
// Accumulate per-model costs
addToTotalSessionCost(model, usage, costUSD)

// Persist to project config (for session resumption)
saveCurrentSessionCosts()

// Restore costs when resuming a session
restoreCostStateForSession(sessionId)

// Human-readable summary
formatTotalCost()
// → "Total: $0.42 | Input: 50K | Output: 10K | Cache: 200K | Web: 3"
0000_start_here_index_and_recommended_reading_order.md
0100_project_overview_tech_stack_runtime_modes_and_folder_map.md
0200_startup_flow_entry_points_and_cold_start_sequence.md
0300_codebase_modules_layers_state_models_and_schemas.md
0400_system_architecture_and_design_rationale.md
0500_interactive_repl_request_flow_end_to_end.md
0600_headless_sdk_and_print_mode_request_flow_end_to_end.md
0700_mcp_integration_connection_and_tool_call_flow.md
0800_external_services_sdks_storage_and_local_dependencies.md
0900_environment_variables_settings_feature_flags_and_failure_modes.md
1000_non_obvious_patterns_gotchas_and_debugging_traps.md
1100_full_codebase_file_inventory_grouped_by_directory.md
kimi
00-overview.md
01-entrypoints.md
02-state-management.md
03-query-system.md
04-tools-system.md
05-tasks-system.md
06-ui-components.md
07-bridge-remote.md
08-services.md
09-skills-plugins.md
10-commands.md
11-testing-architecture.md
12-permission-system.md
13-build-system.md
14-ink-internals.md
15-git-internals.md
16-context-compaction.md
17-vim-mode.md
18-mailbox-notifications.md
19-session-persistence.md
20-hooks-system.md
21-error-recovery.md
README.md
qwen
00-overview.md
01-entry-points.md
02-query-engine.md
03-tools-and-tasks.md
04-commands-and-skills.md
05-state-management.md
06-ink-rendering.md
07-bridge-remote.md
08-mcp-services.md
09-services-overview.md
10-multi-agent.md
11-system-prompt-constants.md
12-tool-interface.md
13-memory-system.md
14-buddy-companion.md
15-keybindings.md
16-stop-hooks.md
17-vim-mode.md
18-upstreamproxy.md
19-cost-tracking-history.md
20-contexts-styles-onboarding.md
21-hooks.md
22-screens.md
tweets-explain
claude-code-memory-analysis.md
compact
memory-system
agentic-architecture
Per-Model Breakdown
TypeScript
interface ModelUsage {
  input_tokens: number
  output_tokens: number
  cache_creation_input_tokens: number
  cache_read_input_tokens: number
  web_search_requests: number
  cost_usd: number
}
OpenTelemetry Integration

Cost and token counters are exposed as OTel metrics:

TypeScript
const costCounter = getCostCounter()
costCounter.add(costUSD)

const tokenCounter = getTokenCounter()
tokenCounter.add(inputTokens + outputTokens)

costHook.ts

Exit-time cost reporter:

TypeScript
// Registers a process.on('exit') handler
useEffect(() => {
  const handler = () => {
    // Print cost summary to terminal
    console.log(formatTotalCost())
    // Persist to disk
    saveCurrentSessionCosts()
  }
  process.on('exit', handler)
  return () => process.off('exit', handler)
}, [])

Command History (history.ts)

Manages the up-arrow / ctrl+r command history.

Storage
Plain text
~/.claude/history.jsonl

Each line is a JSON object:

JSON
{"text": "/model", "timestamp": 1705312800000, "sessionId": "abc123"}
{"text": "refactor the auth module", "timestamp": 1705312900000, "sessionId": "abc123"}
Features
Pasted Text & Image References

Large pasted content is stored as references:

Plain text
[Pasted text #1]
[Image #2]

The actual content is stored externally via hash references (paste store).

Deduplication

Duplicate entries are removed, keeping the newest:

TypeScript
// Deduplicate by display text
const unique = deduplicateHistory(entries)
Session-Aware Ordering

Current session entries appear first:

Plain text
1. Current session entries (newest first)
2. Other session entries (newest first)
Lock-Based Flushing

Concurrent writes use file locking:

TypeScript
// Atomic append with retry
await flushHistoryWithRetry(entries)
Undo Last Entry
TypeScript
// Used by auto-restore-on-interrupt
removeLastFromHistory()

Files

FilePurpose
src/cost-tracker.tsSession cost tracking
src/costHook.tsExit-time cost reporter
src/history.tsCommand history with paste support