@weavelogic/knowledge-graph-agent 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/claude/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+ const TokenUsageSchema = z.object({
3
+ inputTokens: z.number().int().nonnegative(),
4
+ outputTokens: z.number().int().nonnegative(),
5
+ cacheReadTokens: z.number().int().nonnegative().optional(),
6
+ cacheWriteTokens: z.number().int().nonnegative().optional(),
7
+ totalTokens: z.number().int().nonnegative(),
8
+ estimatedCostUsd: z.number().nonnegative().optional()
9
+ });
10
+ const BaseMetadataSchema = z.object({
11
+ createdAt: z.coerce.date(),
12
+ updatedAt: z.coerce.date(),
13
+ tags: z.array(z.string()),
14
+ custom: z.record(z.unknown()).optional()
15
+ });
16
+ z.object({
17
+ id: z.string().startsWith("session_"),
18
+ name: z.string().min(1),
19
+ purpose: z.string().optional(),
20
+ startedAt: z.coerce.date(),
21
+ endedAt: z.coerce.date().optional(),
22
+ status: z.enum(["pending", "running", "completed", "failed", "cancelled", "timeout"]),
23
+ conversationIds: z.array(z.string().startsWith("conv_")),
24
+ swarmIds: z.array(z.string().startsWith("swarm_")).optional(),
25
+ workflowIds: z.array(z.string().startsWith("wf_")).optional(),
26
+ tokenUsage: TokenUsageSchema.extend({
27
+ operationCount: z.number().int().nonnegative(),
28
+ byModel: z.record(TokenUsageSchema).optional(),
29
+ byOperationType: z.record(TokenUsageSchema).optional()
30
+ }),
31
+ metadata: BaseMetadataSchema
32
+ });
33
+ function createSessionId() {
34
+ return `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
35
+ }
36
+ function createConversationId() {
37
+ return `conv_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
38
+ }
39
+ function createMessageId() {
40
+ return `msg_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
41
+ }
42
+ function createToolCallId() {
43
+ return `tool_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
44
+ }
45
+ function createSubAgentId() {
46
+ return `agent_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
47
+ }
48
+ function createSwarmId() {
49
+ return `swarm_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
50
+ }
51
+ export {
52
+ BaseMetadataSchema,
53
+ TokenUsageSchema,
54
+ createConversationId,
55
+ createMessageId,
56
+ createSessionId,
57
+ createSubAgentId,
58
+ createSwarmId,
59
+ createToolCallId
60
+ };
61
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../src/claude/types.ts"],"sourcesContent":["/**\n * Claude Interaction Storage Schema\n *\n * Hierarchical storage schema for storing Claude prompts, outputs, and tool calls\n * in a knowledge graph. Supports hierarchical nesting from sessions down to\n * individual tool calls and sub-agent operations.\n *\n * @module claude/types\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Base Identifiers and Enums\n// ============================================================================\n\n/**\n * Unique identifier types for different hierarchy levels\n */\nexport type SessionId = `session_${string}`;\nexport type ConversationId = `conv_${string}`;\nexport type MessageId = `msg_${string}`;\nexport type ToolCallId = `tool_${string}`;\nexport type SubAgentId = `agent_${string}`;\nexport type SwarmId = `swarm_${string}`;\nexport type WorkflowId = `wf_${string}`;\n\n/**\n * Claude model identifiers\n */\nexport type ClaudeModel =\n | 'claude-opus-4-5-20251101'\n | 'claude-sonnet-4-20250514'\n | 'claude-3-5-sonnet-20241022'\n | 'claude-3-opus-20240229'\n | 'claude-3-sonnet-20240229'\n | 'claude-3-haiku-20240307'\n | string; // Allow for future models\n\n/**\n * Message role in conversation\n */\nexport type MessageRole = 'user' | 'assistant' | 'system';\n\n/**\n * Status of a hierarchical node\n */\nexport type ExecutionStatus =\n | 'pending'\n | 'running'\n | 'completed'\n | 'failed'\n | 'cancelled'\n | 'timeout';\n\n/**\n * Agent type classification for sub-agents and swarm members\n */\nexport type ClaudeAgentType =\n | 'researcher'\n | 'coder'\n | 'tester'\n | 'analyst'\n | 'architect'\n | 'reviewer'\n | 'coordinator'\n | 'optimizer'\n | 'documenter'\n | 'planner'\n | 'custom';\n\n/**\n * Swarm topology types from claude-flow\n */\nexport type SwarmTopology = 'mesh' | 'hierarchical' | 'ring' | 'star';\n\n/**\n * Swarm execution strategy\n */\nexport type SwarmStrategy = 'parallel' | 'sequential' | 'adaptive';\n\n// ============================================================================\n// Token Usage Tracking\n// ============================================================================\n\n/**\n * Token usage metrics for cost tracking and optimization\n */\nexport interface TokenUsage {\n /** Input tokens consumed */\n inputTokens: number;\n /** Output tokens generated */\n outputTokens: number;\n /** Cache read tokens (if using prompt caching) */\n cacheReadTokens?: number;\n /** Cache write tokens (if using prompt caching) */\n cacheWriteTokens?: number;\n /** Total tokens (computed) */\n totalTokens: number;\n /** Estimated cost in USD (based on model pricing) */\n estimatedCostUsd?: number;\n}\n\n/**\n * Aggregated token usage across multiple operations\n */\nexport interface AggregatedTokenUsage extends TokenUsage {\n /** Number of operations aggregated */\n operationCount: number;\n /** Breakdown by model if multiple models used */\n byModel?: Record<ClaudeModel, TokenUsage>;\n /** Breakdown by operation type */\n byOperationType?: Record<string, TokenUsage>;\n}\n\n// ============================================================================\n// Base Metadata Interface\n// ============================================================================\n\n/**\n * Common metadata for all hierarchical nodes\n */\nexport interface BaseMetadata {\n /** Creation timestamp */\n createdAt: Date;\n /** Last update timestamp */\n updatedAt: Date;\n /** User-defined tags for categorization */\n tags: string[];\n /** Custom key-value metadata */\n custom?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Session Level (Top of Hierarchy)\n// ============================================================================\n\n/**\n * Session represents a complete interaction session with Claude\n *\n * Sessions are the top level of the hierarchy and contain multiple conversations.\n * They track overall context, purpose, and aggregated metrics.\n *\n * @example\n * ```typescript\n * const session: ClaudeSession = {\n * id: 'session_abc123',\n * name: 'Feature Development Session',\n * purpose: 'Implement user authentication feature',\n * startedAt: new Date('2024-01-15T10:00:00Z'),\n * status: 'running',\n * conversationIds: ['conv_xyz789'],\n * tokenUsage: { inputTokens: 5000, outputTokens: 3000, totalTokens: 8000 },\n * metadata: { tags: ['auth', 'feature'], createdAt: new Date() },\n * };\n * ```\n */\nexport interface ClaudeSession {\n /** Unique session identifier */\n id: SessionId;\n /** Human-readable session name */\n name: string;\n /** Purpose or goal of the session */\n purpose?: string;\n /** When the session started */\n startedAt: Date;\n /** When the session ended (if completed) */\n endedAt?: Date;\n /** Current session status */\n status: ExecutionStatus;\n /** IDs of conversations in this session */\n conversationIds: ConversationId[];\n /** IDs of swarms spawned during this session */\n swarmIds?: SwarmId[];\n /** IDs of workflows executed during this session */\n workflowIds?: WorkflowId[];\n /** Aggregated token usage for the entire session */\n tokenUsage: AggregatedTokenUsage;\n /** Environment context (working directory, git branch, etc.) */\n environment?: SessionEnvironment;\n /** Session metadata */\n metadata: BaseMetadata;\n}\n\n/**\n * Environment context captured at session start\n */\nexport interface SessionEnvironment {\n /** Working directory path */\n workingDirectory: string;\n /** Git branch if in a repository */\n gitBranch?: string;\n /** Git commit hash at session start */\n gitCommit?: string;\n /** Platform (linux, darwin, win32) */\n platform: string;\n /** Node.js version if applicable */\n nodeVersion?: string;\n /** Claude Code version */\n claudeCodeVersion?: string;\n /** Active MCP servers */\n mcpServers?: string[];\n}\n\n// ============================================================================\n// Conversation/Thread Level\n// ============================================================================\n\n/**\n * Conversation represents a single thread of messages with Claude\n *\n * Conversations are contained within sessions and contain ordered messages.\n * They track the flow of interaction including tool calls and responses.\n *\n * @example\n * ```typescript\n * const conversation: ClaudeConversation = {\n * id: 'conv_xyz789',\n * sessionId: 'session_abc123',\n * title: 'Implement login endpoint',\n * model: 'claude-opus-4-5-20251101',\n * messageIds: ['msg_001', 'msg_002'],\n * status: 'completed',\n * tokenUsage: { inputTokens: 2000, outputTokens: 1500, totalTokens: 3500 },\n * metadata: { tags: ['api', 'auth'] },\n * };\n * ```\n */\nexport interface ClaudeConversation {\n /** Unique conversation identifier */\n id: ConversationId;\n /** Parent session ID */\n sessionId: SessionId;\n /** Conversation title or topic */\n title?: string;\n /** Primary model used in this conversation */\n model: ClaudeModel;\n /** System prompt used (if any) */\n systemPrompt?: string;\n /** Ordered list of message IDs */\n messageIds: MessageId[];\n /** Sub-agent IDs spawned from this conversation */\n subAgentIds?: SubAgentId[];\n /** Current conversation status */\n status: ExecutionStatus;\n /** When conversation started */\n startedAt: Date;\n /** When conversation ended */\n endedAt?: Date;\n /** Total token usage for this conversation */\n tokenUsage: TokenUsage;\n /** Conversation context (file paths, topics, etc.) */\n context?: ConversationContext;\n /** Conversation metadata */\n metadata: BaseMetadata;\n}\n\n/**\n * Context information for a conversation\n */\nexport interface ConversationContext {\n /** Primary files being discussed or edited */\n primaryFiles?: string[];\n /** Related knowledge graph node IDs */\n relatedNodeIds?: string[];\n /** Topic keywords extracted from conversation */\n topics?: string[];\n /** User intent classification */\n intent?: 'query' | 'task' | 'debug' | 'refactor' | 'document' | 'review' | 'other';\n}\n\n// ============================================================================\n// Message Level\n// ============================================================================\n\n/**\n * Message represents a single prompt or response in a conversation\n *\n * Messages are the core unit of interaction and contain the actual content\n * exchanged between user and Claude, including any tool calls made.\n *\n * @example\n * ```typescript\n * const message: ClaudeMessage = {\n * id: 'msg_001',\n * conversationId: 'conv_xyz789',\n * role: 'user',\n * content: 'Create a login endpoint with JWT authentication',\n * timestamp: new Date(),\n * tokenUsage: { inputTokens: 50, outputTokens: 0, totalTokens: 50 },\n * metadata: { tags: ['request'] },\n * };\n * ```\n */\nexport interface ClaudeMessage {\n /** Unique message identifier */\n id: MessageId;\n /** Parent conversation ID */\n conversationId: ConversationId;\n /** Message role (user prompt or assistant response) */\n role: MessageRole;\n /** Text content of the message */\n content: string;\n /** Structured content blocks (for complex responses) */\n contentBlocks?: MessageContentBlock[];\n /** Tool calls made in this message (assistant only) */\n toolCallIds?: ToolCallId[];\n /** Tool results included in this message (user only, as tool_result) */\n toolResultIds?: ToolCallId[];\n /** When the message was created */\n timestamp: Date;\n /** Token usage for this message */\n tokenUsage: TokenUsage;\n /** Stop reason (for assistant messages) */\n stopReason?: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use';\n /** Message metadata */\n metadata: BaseMetadata;\n}\n\n/**\n * Content block types for structured message content\n */\nexport type MessageContentBlock =\n | TextContentBlock\n | CodeContentBlock\n | ToolUseContentBlock\n | ToolResultContentBlock\n | ThinkingContentBlock;\n\n/**\n * Plain text content block\n */\nexport interface TextContentBlock {\n type: 'text';\n text: string;\n}\n\n/**\n * Code content block with language identification\n */\nexport interface CodeContentBlock {\n type: 'code';\n language: string;\n code: string;\n /** File path if this code is for a specific file */\n filePath?: string;\n}\n\n/**\n * Tool use content block\n */\nexport interface ToolUseContentBlock {\n type: 'tool_use';\n toolCallId: ToolCallId;\n toolName: string;\n input: Record<string, unknown>;\n}\n\n/**\n * Tool result content block\n */\nexport interface ToolResultContentBlock {\n type: 'tool_result';\n toolCallId: ToolCallId;\n content: string;\n isError?: boolean;\n}\n\n/**\n * Extended thinking content block (for extended thinking mode)\n */\nexport interface ThinkingContentBlock {\n type: 'thinking';\n thinking: string;\n /** Summary of the thinking (for display) */\n summary?: string;\n}\n\n// ============================================================================\n// Tool Call Level\n// ============================================================================\n\n/**\n * Tool call represents a single tool invocation by Claude\n *\n * Tool calls are made by assistant messages and track the full lifecycle\n * from invocation through execution to result.\n *\n * @example\n * ```typescript\n * const toolCall: ClaudeToolCall = {\n * id: 'tool_abc123',\n * messageId: 'msg_002',\n * toolName: 'Edit',\n * toolCategory: 'file',\n * input: { file_path: '/src/auth.ts', old_string: '...', new_string: '...' },\n * output: { success: true },\n * status: 'completed',\n * executionTimeMs: 150,\n * metadata: { tags: ['edit'] },\n * };\n * ```\n */\nexport interface ClaudeToolCall {\n /** Unique tool call identifier */\n id: ToolCallId;\n /** Parent message ID (the assistant message that made this call) */\n messageId: MessageId;\n /** Name of the tool invoked */\n toolName: string;\n /** Category of tool (for grouping and analysis) */\n toolCategory: ToolCategory;\n /** Input parameters passed to the tool */\n input: Record<string, unknown>;\n /** Output/result from the tool */\n output?: unknown;\n /** Error information if tool call failed */\n error?: ToolCallError;\n /** Execution status */\n status: ExecutionStatus;\n /** When the tool call started */\n startedAt: Date;\n /** When the tool call completed */\n completedAt?: Date;\n /** Total execution time in milliseconds */\n executionTimeMs?: number;\n /** Files affected by this tool call */\n affectedFiles?: string[];\n /** Tool call metadata */\n metadata: BaseMetadata;\n}\n\n/**\n * Tool categories for grouping and analysis\n */\nexport type ToolCategory =\n | 'file' // Read, Write, Edit, Glob, Grep\n | 'bash' // Bash command execution\n | 'search' // WebSearch, WebFetch\n | 'mcp' // MCP server tools\n | 'task' // Task tool for sub-agents\n | 'notebook' // NotebookEdit\n | 'todo' // TodoWrite\n | 'skill' // Skill invocations\n | 'other';\n\n/**\n * Error information for failed tool calls\n */\nexport interface ToolCallError {\n /** Error type/code */\n type: string;\n /** Human-readable error message */\n message: string;\n /** Additional error details */\n details?: Record<string, unknown>;\n /** Whether the error is recoverable */\n recoverable?: boolean;\n}\n\n// ============================================================================\n// Sub-Agent Level (Task Tool Spawns)\n// ============================================================================\n\n/**\n * Sub-agent represents an agent spawned via the Task tool\n *\n * Sub-agents are child agents created during a conversation to handle\n * specific tasks. They have their own conversation context and can\n * spawn further sub-agents.\n *\n * @example\n * ```typescript\n * const subAgent: ClaudeSubAgent = {\n * id: 'agent_def456',\n * parentConversationId: 'conv_xyz789',\n * parentMessageId: 'msg_002',\n * agentType: 'coder',\n * name: 'Backend Implementation Agent',\n * task: 'Implement the login endpoint with proper validation',\n * model: 'claude-sonnet-4-20250514',\n * conversationId: 'conv_sub001',\n * status: 'completed',\n * result: { success: true, filesCreated: ['src/auth.ts'] },\n * tokenUsage: { inputTokens: 1000, outputTokens: 800, totalTokens: 1800 },\n * metadata: { tags: ['backend'] },\n * };\n * ```\n */\nexport interface ClaudeSubAgent {\n /** Unique sub-agent identifier */\n id: SubAgentId;\n /** Parent conversation that spawned this agent */\n parentConversationId: ConversationId;\n /** Specific message that spawned this agent */\n parentMessageId: MessageId;\n /** Tool call ID that created this agent */\n toolCallId: ToolCallId;\n /** Agent type/specialization */\n agentType: ClaudeAgentType;\n /** Agent name (for identification) */\n name: string;\n /** Task description given to the agent */\n task: string;\n /** Model used by this sub-agent */\n model: ClaudeModel;\n /** Conversation ID for this agent's work */\n conversationId?: ConversationId;\n /** Child sub-agent IDs spawned by this agent */\n childAgentIds?: SubAgentId[];\n /** Execution status */\n status: ExecutionStatus;\n /** When the agent started */\n startedAt: Date;\n /** When the agent completed */\n completedAt?: Date;\n /** Result/output from the agent */\n result?: SubAgentResult;\n /** Token usage for this agent's work */\n tokenUsage: TokenUsage;\n /** Agent metadata */\n metadata: BaseMetadata;\n}\n\n/**\n * Result from a sub-agent execution\n */\nexport interface SubAgentResult {\n /** Whether the task was successful */\n success: boolean;\n /** Summary of what was accomplished */\n summary?: string;\n /** Files created by the agent */\n filesCreated?: string[];\n /** Files modified by the agent */\n filesModified?: string[];\n /** Files deleted by the agent */\n filesDeleted?: string[];\n /** Error message if failed */\n error?: string;\n /** Structured output data */\n data?: unknown;\n}\n\n// ============================================================================\n// Swarm Level (Claude-Flow Swarms)\n// ============================================================================\n\n/**\n * Swarm represents a claude-flow swarm coordination\n *\n * Swarms are multi-agent orchestrations that coordinate multiple agents\n * working together on complex tasks.\n *\n * @example\n * ```typescript\n * const swarm: ClaudeSwarm = {\n * id: 'swarm_ghi789',\n * sessionId: 'session_abc123',\n * name: 'Full Stack Development Swarm',\n * topology: 'mesh',\n * strategy: 'adaptive',\n * maxAgents: 5,\n * agentIds: ['agent_001', 'agent_002', 'agent_003'],\n * task: 'Implement complete user management module',\n * status: 'running',\n * tokenUsage: { inputTokens: 10000, outputTokens: 8000, totalTokens: 18000, operationCount: 5 },\n * metadata: { tags: ['fullstack'] },\n * };\n * ```\n */\nexport interface ClaudeSwarm {\n /** Unique swarm identifier */\n id: SwarmId;\n /** Parent session ID */\n sessionId: SessionId;\n /** Swarm name */\n name: string;\n /** Network topology */\n topology: SwarmTopology;\n /** Execution strategy */\n strategy: SwarmStrategy;\n /** Maximum agents in the swarm */\n maxAgents: number;\n /** IDs of agents in this swarm */\n agentIds: SubAgentId[];\n /** High-level task for the swarm */\n task: string;\n /** Execution status */\n status: ExecutionStatus;\n /** When the swarm was initialized */\n startedAt: Date;\n /** When the swarm completed */\n completedAt?: Date;\n /** Aggregated result from all agents */\n result?: SwarmResult;\n /** Aggregated token usage */\n tokenUsage: AggregatedTokenUsage;\n /** MCP tool calls made for swarm coordination */\n coordinationCallIds?: ToolCallId[];\n /** Swarm metadata */\n metadata: BaseMetadata;\n}\n\n/**\n * Aggregated result from a swarm execution\n */\nexport interface SwarmResult {\n /** Overall success status */\n success: boolean;\n /** Summary of swarm accomplishments */\n summary?: string;\n /** Individual agent results */\n agentResults: Record<SubAgentId, SubAgentResult>;\n /** Total files affected */\n totalFilesAffected: number;\n /** Metrics about the swarm execution */\n metrics?: SwarmMetrics;\n}\n\n/**\n * Metrics for swarm execution\n */\nexport interface SwarmMetrics {\n /** Number of agents that completed successfully */\n successfulAgents: number;\n /** Number of agents that failed */\n failedAgents: number;\n /** Total execution time in milliseconds */\n totalExecutionTimeMs: number;\n /** Average time per agent */\n avgAgentTimeMs: number;\n /** Coordination overhead time */\n coordinationOverheadMs?: number;\n}\n\n// ============================================================================\n// Workflow Level (Script/Workflow Executions)\n// ============================================================================\n\n/**\n * Workflow represents a script or structured workflow execution\n *\n * Workflows are structured sequences of operations that may involve\n * multiple tools, agents, or manual steps.\n *\n * @example\n * ```typescript\n * const workflow: ClaudeWorkflow = {\n * id: 'wf_jkl012',\n * sessionId: 'session_abc123',\n * name: 'CI/CD Pipeline Setup',\n * type: 'skill',\n * skillName: 'github-workflow-automation',\n * steps: [...],\n * status: 'completed',\n * tokenUsage: { inputTokens: 3000, outputTokens: 2000, totalTokens: 5000, operationCount: 3 },\n * metadata: { tags: ['ci', 'github'] },\n * };\n * ```\n */\nexport interface ClaudeWorkflow {\n /** Unique workflow identifier */\n id: WorkflowId;\n /** Parent session ID */\n sessionId: SessionId;\n /** Workflow name */\n name: string;\n /** Type of workflow */\n type: 'skill' | 'script' | 'manual' | 'automated';\n /** Skill name if type is 'skill' */\n skillName?: string;\n /** Script path if type is 'script' */\n scriptPath?: string;\n /** Workflow steps */\n steps: WorkflowStep[];\n /** Current step index (if running) */\n currentStepIndex?: number;\n /** Execution status */\n status: ExecutionStatus;\n /** When workflow started */\n startedAt: Date;\n /** When workflow completed */\n completedAt?: Date;\n /** Workflow result */\n result?: WorkflowResult;\n /** Aggregated token usage */\n tokenUsage: AggregatedTokenUsage;\n /** Related conversation IDs */\n conversationIds?: ConversationId[];\n /** Related tool call IDs */\n toolCallIds?: ToolCallId[];\n /** Workflow metadata */\n metadata: BaseMetadata;\n}\n\n/**\n * Individual step in a workflow\n */\nexport interface WorkflowStep {\n /** Step index (0-based) */\n index: number;\n /** Step name */\n name: string;\n /** Step description */\n description?: string;\n /** Type of step */\n type: 'tool' | 'agent' | 'manual' | 'condition' | 'loop';\n /** Tool name if type is 'tool' */\n toolName?: string;\n /** Tool call ID if executed */\n toolCallId?: ToolCallId;\n /** Agent ID if type is 'agent' */\n agentId?: SubAgentId;\n /** Step status */\n status: ExecutionStatus;\n /** Step input */\n input?: unknown;\n /** Step output */\n output?: unknown;\n /** Execution time in milliseconds */\n executionTimeMs?: number;\n /** Error if failed */\n error?: string;\n}\n\n/**\n * Result from a workflow execution\n */\nexport interface WorkflowResult {\n /** Overall success */\n success: boolean;\n /** Summary of workflow completion */\n summary?: string;\n /** Number of steps completed */\n stepsCompleted: number;\n /** Total steps in workflow */\n totalSteps: number;\n /** Output data */\n data?: unknown;\n /** Error if failed */\n error?: string;\n}\n\n// ============================================================================\n// Graph Edge Types for Relationships\n// ============================================================================\n\n/**\n * Edge types for hierarchical relationships in the knowledge graph\n */\nexport type ClaudeGraphEdgeType =\n | 'session_contains_conversation'\n | 'session_contains_swarm'\n | 'session_contains_workflow'\n | 'conversation_contains_message'\n | 'conversation_spawns_agent'\n | 'message_contains_tool_call'\n | 'message_has_tool_result'\n | 'agent_has_conversation'\n | 'agent_spawns_child'\n | 'swarm_contains_agent'\n | 'workflow_contains_step'\n | 'workflow_uses_tool'\n | 'workflow_uses_agent'\n | 'references_file'\n | 'references_node'\n | 'related_to';\n\n/**\n * Graph edge for Claude interaction hierarchy\n */\nexport interface ClaudeGraphEdge {\n /** Source node ID */\n source: string;\n /** Target node ID */\n target: string;\n /** Relationship type */\n type: ClaudeGraphEdgeType;\n /** Edge weight (for relevance scoring) */\n weight: number;\n /** Additional context about the relationship */\n context?: string;\n /** When this relationship was created */\n createdAt: Date;\n}\n\n// ============================================================================\n// Query and Filter Types\n// ============================================================================\n\n/**\n * Filter options for querying Claude interactions\n */\nexport interface ClaudeInteractionFilter {\n /** Filter by session IDs */\n sessionIds?: SessionId[];\n /** Filter by conversation IDs */\n conversationIds?: ConversationId[];\n /** Filter by date range */\n dateRange?: {\n start?: Date;\n end?: Date;\n };\n /** Filter by status */\n status?: ExecutionStatus[];\n /** Filter by tags */\n tags?: string[];\n /** Filter by model */\n models?: ClaudeModel[];\n /** Filter by agent type */\n agentTypes?: ClaudeAgentType[];\n /** Filter by tool names */\n toolNames?: string[];\n /** Full-text search query */\n textQuery?: string;\n /** Minimum token count */\n minTokens?: number;\n /** Maximum token count */\n maxTokens?: number;\n}\n\n/**\n * Sort options for query results\n */\nexport interface ClaudeInteractionSort {\n /** Field to sort by */\n field: 'createdAt' | 'updatedAt' | 'tokenUsage' | 'executionTime';\n /** Sort direction */\n direction: 'asc' | 'desc';\n}\n\n/**\n * Pagination options\n */\nexport interface PaginationOptions {\n /** Number of items per page */\n limit: number;\n /** Offset for pagination */\n offset: number;\n}\n\n// ============================================================================\n// Analytics Types\n// ============================================================================\n\n/**\n * Analytics summary for Claude interactions\n */\nexport interface ClaudeAnalyticsSummary {\n /** Total sessions */\n totalSessions: number;\n /** Total conversations */\n totalConversations: number;\n /** Total messages */\n totalMessages: number;\n /** Total tool calls */\n totalToolCalls: number;\n /** Total sub-agents spawned */\n totalSubAgents: number;\n /** Total swarms */\n totalSwarms: number;\n /** Total workflows */\n totalWorkflows: number;\n /** Aggregated token usage */\n tokenUsage: AggregatedTokenUsage;\n /** Breakdown by model */\n byModel: Record<ClaudeModel, { count: number; tokenUsage: TokenUsage }>;\n /** Breakdown by tool category */\n byToolCategory: Record<ToolCategory, { count: number; avgExecutionTimeMs: number }>;\n /** Success rate */\n successRate: number;\n /** Date range of data */\n dateRange: {\n earliest: Date;\n latest: Date;\n };\n}\n\n// ============================================================================\n// Zod Schemas for Validation\n// ============================================================================\n\n/**\n * Zod schema for token usage validation\n */\nexport const TokenUsageSchema = z.object({\n inputTokens: z.number().int().nonnegative(),\n outputTokens: z.number().int().nonnegative(),\n cacheReadTokens: z.number().int().nonnegative().optional(),\n cacheWriteTokens: z.number().int().nonnegative().optional(),\n totalTokens: z.number().int().nonnegative(),\n estimatedCostUsd: z.number().nonnegative().optional(),\n});\n\n/**\n * Zod schema for base metadata validation\n */\nexport const BaseMetadataSchema = z.object({\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n tags: z.array(z.string()),\n custom: z.record(z.unknown()).optional(),\n});\n\n/**\n * Zod schema for session validation\n */\nexport const ClaudeSessionSchema = z.object({\n id: z.string().startsWith('session_'),\n name: z.string().min(1),\n purpose: z.string().optional(),\n startedAt: z.coerce.date(),\n endedAt: z.coerce.date().optional(),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'cancelled', 'timeout']),\n conversationIds: z.array(z.string().startsWith('conv_')),\n swarmIds: z.array(z.string().startsWith('swarm_')).optional(),\n workflowIds: z.array(z.string().startsWith('wf_')).optional(),\n tokenUsage: TokenUsageSchema.extend({\n operationCount: z.number().int().nonnegative(),\n byModel: z.record(TokenUsageSchema).optional(),\n byOperationType: z.record(TokenUsageSchema).optional(),\n }),\n metadata: BaseMetadataSchema,\n});\n\n// ============================================================================\n// Helper Functions for ID Generation\n// ============================================================================\n\n/**\n * Generate a unique session ID\n */\nexport function createSessionId(): SessionId {\n return `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}` as SessionId;\n}\n\n/**\n * Generate a unique conversation ID\n */\nexport function createConversationId(): ConversationId {\n return `conv_${Date.now()}_${Math.random().toString(36).substring(2, 9)}` as ConversationId;\n}\n\n/**\n * Generate a unique message ID\n */\nexport function createMessageId(): MessageId {\n return `msg_${Date.now()}_${Math.random().toString(36).substring(2, 9)}` as MessageId;\n}\n\n/**\n * Generate a unique tool call ID\n */\nexport function createToolCallId(): ToolCallId {\n return `tool_${Date.now()}_${Math.random().toString(36).substring(2, 9)}` as ToolCallId;\n}\n\n/**\n * Generate a unique sub-agent ID\n */\nexport function createSubAgentId(): SubAgentId {\n return `agent_${Date.now()}_${Math.random().toString(36).substring(2, 9)}` as SubAgentId;\n}\n\n/**\n * Generate a unique swarm ID\n */\nexport function createSwarmId(): SwarmId {\n return `swarm_${Date.now()}_${Math.random().toString(36).substring(2, 9)}` as SwarmId;\n}\n\n/**\n * Generate a unique workflow ID\n */\nexport function createWorkflowId(): WorkflowId {\n return `wf_${Date.now()}_${Math.random().toString(36).substring(2, 9)}` as WorkflowId;\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard for ClaudeSession\n */\nexport function isClaudeSession(obj: unknown): obj is ClaudeSession {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'id' in obj &&\n typeof (obj as ClaudeSession).id === 'string' &&\n (obj as ClaudeSession).id.startsWith('session_')\n );\n}\n\n/**\n * Type guard for ClaudeConversation\n */\nexport function isClaudeConversation(obj: unknown): obj is ClaudeConversation {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'id' in obj &&\n typeof (obj as ClaudeConversation).id === 'string' &&\n (obj as ClaudeConversation).id.startsWith('conv_')\n );\n}\n\n/**\n * Type guard for ClaudeMessage\n */\nexport function isClaudeMessage(obj: unknown): obj is ClaudeMessage {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'id' in obj &&\n typeof (obj as ClaudeMessage).id === 'string' &&\n (obj as ClaudeMessage).id.startsWith('msg_')\n );\n}\n\n/**\n * Type guard for ClaudeToolCall\n */\nexport function isClaudeToolCall(obj: unknown): obj is ClaudeToolCall {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'id' in obj &&\n typeof (obj as ClaudeToolCall).id === 'string' &&\n (obj as ClaudeToolCall).id.startsWith('tool_')\n );\n}\n\n/**\n * Type guard for ClaudeSubAgent\n */\nexport function isClaudeSubAgent(obj: unknown): obj is ClaudeSubAgent {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'id' in obj &&\n typeof (obj as ClaudeSubAgent).id === 'string' &&\n (obj as ClaudeSubAgent).id.startsWith('agent_')\n );\n}\n\n/**\n * Type guard for ClaudeSwarm\n */\nexport function isClaudeSwarm(obj: unknown): obj is ClaudeSwarm {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'id' in obj &&\n typeof (obj as ClaudeSwarm).id === 'string' &&\n (obj as ClaudeSwarm).id.startsWith('swarm_')\n );\n}\n\n/**\n * Type guard for ClaudeWorkflow\n */\nexport function isClaudeWorkflow(obj: unknown): obj is ClaudeWorkflow {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'id' in obj &&\n typeof (obj as ClaudeWorkflow).id === 'string' &&\n (obj as ClaudeWorkflow).id.startsWith('wf_')\n );\n}\n"],"names":[],"mappings":";AAs3BO,MAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,aAAa,EAAE,OAAA,EAAS,IAAA,EAAM,YAAA;AAAA,EAC9B,cAAc,EAAE,OAAA,EAAS,IAAA,EAAM,YAAA;AAAA,EAC/B,iBAAiB,EAAE,OAAA,EAAS,MAAM,YAAA,EAAc,SAAA;AAAA,EAChD,kBAAkB,EAAE,OAAA,EAAS,MAAM,YAAA,EAAc,SAAA;AAAA,EACjD,aAAa,EAAE,OAAA,EAAS,IAAA,EAAM,YAAA;AAAA,EAC9B,kBAAkB,EAAE,SAAS,YAAA,EAAc,SAAA;AAC7C,CAAC;AAKM,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,WAAW,EAAE,OAAO,KAAA;AAAA,EACpB,WAAW,EAAE,OAAO,KAAA;AAAA,EACpB,MAAM,EAAE,MAAM,EAAE,QAAQ;AAAA,EACxB,QAAQ,EAAE,OAAO,EAAE,QAAA,CAAS,EAAE,SAAA;AAChC,CAAC;AAKkC,EAAE,OAAO;AAAA,EAC1C,IAAI,EAAE,SAAS,WAAW,UAAU;AAAA,EACpC,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EACtB,SAAS,EAAE,OAAA,EAAS,SAAA;AAAA,EACpB,WAAW,EAAE,OAAO,KAAA;AAAA,EACpB,SAAS,EAAE,OAAO,KAAA,EAAO,SAAA;AAAA,EACzB,QAAQ,EAAE,KAAK,CAAC,WAAW,WAAW,aAAa,UAAU,aAAa,SAAS,CAAC;AAAA,EACpF,iBAAiB,EAAE,MAAM,EAAE,SAAS,WAAW,OAAO,CAAC;AAAA,EACvD,UAAU,EAAE,MAAM,EAAE,OAAA,EAAS,WAAW,QAAQ,CAAC,EAAE,SAAA;AAAA,EACnD,aAAa,EAAE,MAAM,EAAE,OAAA,EAAS,WAAW,KAAK,CAAC,EAAE,SAAA;AAAA,EACnD,YAAY,iBAAiB,OAAO;AAAA,IAClC,gBAAgB,EAAE,OAAA,EAAS,IAAA,EAAM,YAAA;AAAA,IACjC,SAAS,EAAE,OAAO,gBAAgB,EAAE,SAAA;AAAA,IACpC,iBAAiB,EAAE,OAAO,gBAAgB,EAAE,SAAA;AAAA,EAAS,CACtD;AAAA,EACD,UAAU;AACZ,CAAC;AASM,SAAS,kBAA6B;AAC3C,SAAO,WAAW,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAC5E;AAKO,SAAS,uBAAuC;AACrD,SAAO,QAAQ,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AACzE;AAKO,SAAS,kBAA6B;AAC3C,SAAO,OAAO,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AACxE;AAKO,SAAS,mBAA+B;AAC7C,SAAO,QAAQ,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AACzE;AAKO,SAAS,mBAA+B;AAC7C,SAAO,SAAS,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAC1E;AAKO,SAAS,gBAAyB;AACvC,SAAO,SAAS,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAC1E;"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Hooks Command
3
+ *
4
+ * Manage Claude Code hooks for capturing interactions in the knowledge graph.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Create hooks command
9
+ */
10
+ export declare function createHooksCommand(): Command;
11
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDpC;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAsV5C"}
@@ -0,0 +1,282 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ import { validateProjectRoot } from "../../core/security.js";
7
+ import "../../claude/types.js";
8
+ import { generateHookConfig, processHookEvent, HookCaptureSystem } from "../../claude/hook-capture.js";
9
+ function getClaudeSettingsPath(scope) {
10
+ if (scope === "user") {
11
+ const home = process.env.HOME || process.env.USERPROFILE || "";
12
+ return join(home, ".claude", "settings.json");
13
+ }
14
+ return join(process.cwd(), ".claude", "settings.json");
15
+ }
16
+ function loadSettings(path) {
17
+ if (!existsSync(path)) {
18
+ return {};
19
+ }
20
+ try {
21
+ return JSON.parse(readFileSync(path, "utf-8"));
22
+ } catch {
23
+ return {};
24
+ }
25
+ }
26
+ function saveSettings(path, settings) {
27
+ const dir = dirname(path);
28
+ if (!existsSync(dir)) {
29
+ mkdirSync(dir, { recursive: true });
30
+ }
31
+ writeFileSync(path, JSON.stringify(settings, null, 2));
32
+ }
33
+ function createHooksCommand() {
34
+ const command = new Command("hooks");
35
+ command.description("Claude Code hooks for capturing interactions in the knowledge graph");
36
+ command.command("install").description("Install Claude Code hooks to capture all interactions").option("-p, --path <path>", "Project root path", ".").option("-s, --scope <scope>", "Installation scope: project or user", "project").option("-f, --force", "Overwrite existing hooks configuration").option("--no-markdown", "Disable markdown document generation").option("--no-tool-outputs", "Disable separate tool output storage").action(async (options) => {
37
+ const spinner = ora("Installing Claude Code hooks...").start();
38
+ try {
39
+ const projectRoot = validateProjectRoot(options.path);
40
+ const settingsPath = getClaudeSettingsPath(options.scope);
41
+ const settings = loadSettings(settingsPath);
42
+ if (settings.hooks && !options.force) {
43
+ spinner.warn("Hooks already configured. Use --force to overwrite.");
44
+ console.log();
45
+ console.log(chalk.gray(" Current settings:"), chalk.white(settingsPath));
46
+ return;
47
+ }
48
+ const hookConfig = generateHookConfig(projectRoot);
49
+ const newSettings = {
50
+ ...settings,
51
+ ...hookConfig
52
+ };
53
+ saveSettings(settingsPath, newSettings);
54
+ const storageDir = join(projectRoot, ".kg", "claude");
55
+ if (!existsSync(storageDir)) {
56
+ mkdirSync(storageDir, { recursive: true });
57
+ }
58
+ spinner.succeed("Claude Code hooks installed!");
59
+ console.log();
60
+ console.log(chalk.cyan(" Hook Configuration"));
61
+ console.log(chalk.gray(" Settings file:"), chalk.white(settingsPath));
62
+ console.log(chalk.gray(" Storage dir:"), chalk.white(storageDir));
63
+ console.log();
64
+ console.log(chalk.cyan(" Hooks Installed:"));
65
+ console.log(chalk.gray(" - UserPromptSubmit: Captures all user prompts"));
66
+ console.log(chalk.gray(" - PreToolUse: Captures tool invocations"));
67
+ console.log(chalk.gray(" - PostToolUse: Captures tool results"));
68
+ console.log(chalk.gray(" - Stop: Finalizes session on completion"));
69
+ console.log();
70
+ console.log(chalk.green(" All Claude interactions will now be stored in the knowledge graph."));
71
+ console.log();
72
+ } catch (error) {
73
+ spinner.fail("Failed to install hooks");
74
+ console.error(chalk.red(String(error)));
75
+ process.exit(1);
76
+ }
77
+ });
78
+ command.command("uninstall").description("Remove Claude Code hooks").option("-s, --scope <scope>", "Installation scope: project or user", "project").action(async (options) => {
79
+ const spinner = ora("Removing Claude Code hooks...").start();
80
+ try {
81
+ const settingsPath = getClaudeSettingsPath(options.scope);
82
+ const settings = loadSettings(settingsPath);
83
+ if (!settings.hooks) {
84
+ spinner.info("No hooks configured.");
85
+ return;
86
+ }
87
+ delete settings.hooks;
88
+ saveSettings(settingsPath, settings);
89
+ spinner.succeed("Claude Code hooks removed.");
90
+ } catch (error) {
91
+ spinner.fail("Failed to remove hooks");
92
+ console.error(chalk.red(String(error)));
93
+ process.exit(1);
94
+ }
95
+ });
96
+ command.command("capture").description("Capture a hook event (internal use)").option("-e, --event <type>", "Event type", "UserPromptSubmit").option("-p, --path <path>", "Project root path", ".").action(async (options) => {
97
+ try {
98
+ const projectRoot = validateProjectRoot(options.path);
99
+ const eventType = options.event;
100
+ await processHookEvent(projectRoot, eventType);
101
+ } catch (error) {
102
+ console.error(`Hook capture error: ${error}`);
103
+ }
104
+ });
105
+ command.command("status").description("Show hooks status and recent captures").option("-p, --path <path>", "Project root path", ".").option("-s, --scope <scope>", "Check scope: project or user", "project").action(async (options) => {
106
+ try {
107
+ const projectRoot = validateProjectRoot(options.path);
108
+ const settingsPath = getClaudeSettingsPath(options.scope);
109
+ const settings = loadSettings(settingsPath);
110
+ console.log();
111
+ console.log(chalk.cyan(" Claude Code Hooks Status"));
112
+ console.log();
113
+ if (settings.hooks) {
114
+ console.log(chalk.green(" ✓ Hooks installed"));
115
+ console.log(chalk.gray(" Settings:"), chalk.white(settingsPath));
116
+ const hooks = settings.hooks;
117
+ console.log(chalk.gray(" Configured hooks:"));
118
+ for (const [event, handlers] of Object.entries(hooks)) {
119
+ console.log(chalk.gray(` - ${event}:`), chalk.white(`${handlers.length} handler(s)`));
120
+ }
121
+ } else {
122
+ console.log(chalk.yellow(" ✗ Hooks not installed"));
123
+ console.log(chalk.gray(" Run:"), chalk.white("kg hooks install"));
124
+ }
125
+ console.log();
126
+ const storageDir = join(projectRoot, ".kg", "claude");
127
+ if (existsSync(storageDir)) {
128
+ console.log(chalk.green(" ✓ Storage directory exists"));
129
+ console.log(chalk.gray(" Path:"), chalk.white(storageDir));
130
+ const capture = new HookCaptureSystem(projectRoot);
131
+ const sessions = capture.listSessions();
132
+ if (sessions.length > 0) {
133
+ console.log(chalk.gray(" Sessions:"), chalk.white(`${sessions.length} stored`));
134
+ const recent = sessions.slice(-3);
135
+ for (const sessionId of recent) {
136
+ const session = capture.loadSession(sessionId);
137
+ if (session) {
138
+ console.log(
139
+ chalk.gray(` - ${sessionId}:`),
140
+ chalk.white(session.name),
141
+ chalk.gray(`(${session.status})`)
142
+ );
143
+ }
144
+ }
145
+ } else {
146
+ console.log(chalk.gray(" Sessions:"), chalk.white("None yet"));
147
+ }
148
+ } else {
149
+ console.log(chalk.yellow(" ✗ Storage directory not found"));
150
+ console.log(chalk.gray(" Will be created on first capture"));
151
+ }
152
+ console.log();
153
+ } catch (error) {
154
+ console.error(chalk.red("Failed to get status:"), String(error));
155
+ process.exit(1);
156
+ }
157
+ });
158
+ command.command("sessions").description("List captured sessions").option("-p, --path <path>", "Project root path", ".").option("-l, --limit <number>", "Limit number of sessions", "10").option("--json", "Output as JSON").action(async (options) => {
159
+ try {
160
+ const projectRoot = validateProjectRoot(options.path);
161
+ const limit = parseInt(options.limit, 10);
162
+ const capture = new HookCaptureSystem(projectRoot);
163
+ const sessions = capture.listSessions();
164
+ if (options.json) {
165
+ const sessionData = sessions.slice(-limit).map((id) => capture.loadSession(id));
166
+ console.log(JSON.stringify(sessionData, null, 2));
167
+ return;
168
+ }
169
+ console.log();
170
+ console.log(chalk.cyan(" Captured Sessions"));
171
+ console.log();
172
+ if (sessions.length === 0) {
173
+ console.log(chalk.gray(" No sessions captured yet."));
174
+ console.log();
175
+ return;
176
+ }
177
+ const recentSessions = sessions.slice(-limit);
178
+ for (const sessionId of recentSessions) {
179
+ const session = capture.loadSession(sessionId);
180
+ if (session) {
181
+ const statusColor = session.status === "completed" ? chalk.green : chalk.yellow;
182
+ console.log(
183
+ chalk.white(` ${session.id}`),
184
+ chalk.gray("|"),
185
+ chalk.cyan(session.name)
186
+ );
187
+ console.log(
188
+ chalk.gray(" Status:"),
189
+ statusColor(session.status),
190
+ chalk.gray("|"),
191
+ chalk.gray("Conversations:"),
192
+ chalk.white(String(session.conversationIds.length)),
193
+ chalk.gray("|"),
194
+ chalk.gray("Tokens:"),
195
+ chalk.white(String(session.tokenUsage.totalTokens))
196
+ );
197
+ console.log(
198
+ chalk.gray(" Started:"),
199
+ chalk.white(new Date(session.startedAt).toLocaleString())
200
+ );
201
+ console.log();
202
+ }
203
+ }
204
+ if (sessions.length > limit) {
205
+ console.log(chalk.gray(` ... and ${sessions.length - limit} more sessions`));
206
+ console.log();
207
+ }
208
+ } catch (error) {
209
+ console.error(chalk.red("Failed to list sessions:"), String(error));
210
+ process.exit(1);
211
+ }
212
+ });
213
+ command.command("export").description("Export captured sessions").option("-p, --path <path>", "Project root path", ".").option("-o, --output <file>", "Output file path").option("-f, --format <format>", "Output format: json or markdown", "json").option("--session <id>", "Export specific session").action(async (options) => {
214
+ const spinner = ora("Exporting sessions...").start();
215
+ try {
216
+ const projectRoot = validateProjectRoot(options.path);
217
+ const capture = new HookCaptureSystem(projectRoot);
218
+ let sessionsToExport;
219
+ if (options.session) {
220
+ sessionsToExport = [options.session];
221
+ } else {
222
+ sessionsToExport = capture.listSessions();
223
+ }
224
+ if (sessionsToExport.length === 0) {
225
+ spinner.info("No sessions to export.");
226
+ return;
227
+ }
228
+ const exportData = sessionsToExport.map((id) => capture.loadSession(id)).filter(Boolean);
229
+ if (options.format === "json") {
230
+ const output = JSON.stringify(exportData, null, 2);
231
+ if (options.output) {
232
+ writeFileSync(options.output, output);
233
+ spinner.succeed(`Exported ${exportData.length} session(s) to ${options.output}`);
234
+ } else {
235
+ spinner.stop();
236
+ console.log(output);
237
+ }
238
+ } else if (options.format === "markdown") {
239
+ let markdown = "# Claude Interaction Sessions\n\n";
240
+ for (const session of exportData) {
241
+ if (!session) continue;
242
+ markdown += `## ${session.name}
243
+
244
+ `;
245
+ markdown += `- **ID:** ${session.id}
246
+ `;
247
+ markdown += `- **Status:** ${session.status}
248
+ `;
249
+ markdown += `- **Purpose:** ${session.purpose || "N/A"}
250
+ `;
251
+ markdown += `- **Started:** ${new Date(session.startedAt).toISOString()}
252
+ `;
253
+ if (session.endedAt) {
254
+ markdown += `- **Ended:** ${new Date(session.endedAt).toISOString()}
255
+ `;
256
+ }
257
+ markdown += `- **Conversations:** ${session.conversationIds.length}
258
+ `;
259
+ markdown += `- **Tokens:** ${session.tokenUsage.totalTokens}
260
+
261
+ `;
262
+ }
263
+ if (options.output) {
264
+ writeFileSync(options.output, markdown);
265
+ spinner.succeed(`Exported ${exportData.length} session(s) to ${options.output}`);
266
+ } else {
267
+ spinner.stop();
268
+ console.log(markdown);
269
+ }
270
+ }
271
+ } catch (error) {
272
+ spinner.fail("Failed to export sessions");
273
+ console.error(chalk.red(String(error)));
274
+ process.exit(1);
275
+ }
276
+ });
277
+ return command;
278
+ }
279
+ export {
280
+ createHooksCommand
281
+ };
282
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sources":["../../../src/cli/commands/hooks.ts"],"sourcesContent":["/**\n * Hooks Command\n *\n * Manage Claude Code hooks for capturing interactions in the knowledge graph.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { validateProjectRoot } from '../../core/security.js';\nimport {\n HookCaptureSystem,\n processHookEvent,\n generateHookConfig,\n type HookEventType,\n} from '../../claude/index.js';\n\n/**\n * Path to Claude settings\n */\nfunction getClaudeSettingsPath(scope: 'project' | 'user'): string {\n if (scope === 'user') {\n const home = process.env.HOME || process.env.USERPROFILE || '';\n return join(home, '.claude', 'settings.json');\n }\n return join(process.cwd(), '.claude', 'settings.json');\n}\n\n/**\n * Load existing settings or return empty object\n */\nfunction loadSettings(path: string): Record<string, unknown> {\n if (!existsSync(path)) {\n return {};\n }\n try {\n return JSON.parse(readFileSync(path, 'utf-8'));\n } catch {\n return {};\n }\n}\n\n/**\n * Save settings to file\n */\nfunction saveSettings(path: string, settings: Record<string, unknown>): void {\n const dir = dirname(path);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(path, JSON.stringify(settings, null, 2));\n}\n\n/**\n * Create hooks command\n */\nexport function createHooksCommand(): Command {\n const command = new Command('hooks');\n\n command.description('Claude Code hooks for capturing interactions in the knowledge graph');\n\n // Install hooks\n command\n .command('install')\n .description('Install Claude Code hooks to capture all interactions')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --scope <scope>', 'Installation scope: project or user', 'project')\n .option('-f, --force', 'Overwrite existing hooks configuration')\n .option('--no-markdown', 'Disable markdown document generation')\n .option('--no-tool-outputs', 'Disable separate tool output storage')\n .action(async (options) => {\n const spinner = ora('Installing Claude Code hooks...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const settingsPath = getClaudeSettingsPath(options.scope);\n\n // Load existing settings\n const settings = loadSettings(settingsPath);\n\n // Check for existing hooks\n if (settings.hooks && !options.force) {\n spinner.warn('Hooks already configured. Use --force to overwrite.');\n console.log();\n console.log(chalk.gray(' Current settings:'), chalk.white(settingsPath));\n return;\n }\n\n // Generate hook configuration\n const hookConfig = generateHookConfig(projectRoot);\n\n // Merge with existing settings\n const newSettings = {\n ...settings,\n ...hookConfig,\n };\n\n // Save settings\n saveSettings(settingsPath, newSettings);\n\n // Ensure storage directory exists\n const storageDir = join(projectRoot, '.kg', 'claude');\n if (!existsSync(storageDir)) {\n mkdirSync(storageDir, { recursive: true });\n }\n\n spinner.succeed('Claude Code hooks installed!');\n\n console.log();\n console.log(chalk.cyan(' Hook Configuration'));\n console.log(chalk.gray(' Settings file:'), chalk.white(settingsPath));\n console.log(chalk.gray(' Storage dir:'), chalk.white(storageDir));\n console.log();\n console.log(chalk.cyan(' Hooks Installed:'));\n console.log(chalk.gray(' - UserPromptSubmit: Captures all user prompts'));\n console.log(chalk.gray(' - PreToolUse: Captures tool invocations'));\n console.log(chalk.gray(' - PostToolUse: Captures tool results'));\n console.log(chalk.gray(' - Stop: Finalizes session on completion'));\n console.log();\n console.log(chalk.green(' All Claude interactions will now be stored in the knowledge graph.'));\n console.log();\n\n } catch (error) {\n spinner.fail('Failed to install hooks');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Uninstall hooks\n command\n .command('uninstall')\n .description('Remove Claude Code hooks')\n .option('-s, --scope <scope>', 'Installation scope: project or user', 'project')\n .action(async (options) => {\n const spinner = ora('Removing Claude Code hooks...').start();\n\n try {\n const settingsPath = getClaudeSettingsPath(options.scope);\n const settings = loadSettings(settingsPath);\n\n if (!settings.hooks) {\n spinner.info('No hooks configured.');\n return;\n }\n\n // Remove hooks configuration\n delete settings.hooks;\n saveSettings(settingsPath, settings);\n\n spinner.succeed('Claude Code hooks removed.');\n\n } catch (error) {\n spinner.fail('Failed to remove hooks');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Capture event (used by hooks)\n command\n .command('capture')\n .description('Capture a hook event (internal use)')\n .option('-e, --event <type>', 'Event type', 'UserPromptSubmit')\n .option('-p, --path <path>', 'Project root path', '.')\n .action(async (options) => {\n try {\n const projectRoot = validateProjectRoot(options.path);\n const eventType = options.event as HookEventType;\n\n await processHookEvent(projectRoot, eventType);\n\n } catch (error) {\n // Silent failure - hooks should not disrupt Claude Code operation\n console.error(`Hook capture error: ${error}`);\n }\n });\n\n // Status command\n command\n .command('status')\n .description('Show hooks status and recent captures')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --scope <scope>', 'Check scope: project or user', 'project')\n .action(async (options) => {\n try {\n const projectRoot = validateProjectRoot(options.path);\n const settingsPath = getClaudeSettingsPath(options.scope);\n const settings = loadSettings(settingsPath);\n\n console.log();\n console.log(chalk.cyan(' Claude Code Hooks Status'));\n console.log();\n\n // Check installation\n if (settings.hooks) {\n console.log(chalk.green(' ✓ Hooks installed'));\n console.log(chalk.gray(' Settings:'), chalk.white(settingsPath));\n\n const hooks = settings.hooks as Record<string, unknown[]>;\n console.log(chalk.gray(' Configured hooks:'));\n for (const [event, handlers] of Object.entries(hooks)) {\n console.log(chalk.gray(` - ${event}:`), chalk.white(`${(handlers as unknown[]).length} handler(s)`));\n }\n } else {\n console.log(chalk.yellow(' ✗ Hooks not installed'));\n console.log(chalk.gray(' Run:'), chalk.white('kg hooks install'));\n }\n\n console.log();\n\n // Check storage\n const storageDir = join(projectRoot, '.kg', 'claude');\n if (existsSync(storageDir)) {\n console.log(chalk.green(' ✓ Storage directory exists'));\n console.log(chalk.gray(' Path:'), chalk.white(storageDir));\n\n // List sessions\n const capture = new HookCaptureSystem(projectRoot);\n const sessions = capture.listSessions();\n\n if (sessions.length > 0) {\n console.log(chalk.gray(' Sessions:'), chalk.white(`${sessions.length} stored`));\n\n // Show recent sessions\n const recent = sessions.slice(-3);\n for (const sessionId of recent) {\n const session = capture.loadSession(sessionId);\n if (session) {\n console.log(\n chalk.gray(` - ${sessionId}:`),\n chalk.white(session.name),\n chalk.gray(`(${session.status})`)\n );\n }\n }\n } else {\n console.log(chalk.gray(' Sessions:'), chalk.white('None yet'));\n }\n } else {\n console.log(chalk.yellow(' ✗ Storage directory not found'));\n console.log(chalk.gray(' Will be created on first capture'));\n }\n\n console.log();\n\n } catch (error) {\n console.error(chalk.red('Failed to get status:'), String(error));\n process.exit(1);\n }\n });\n\n // List sessions\n command\n .command('sessions')\n .description('List captured sessions')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-l, --limit <number>', 'Limit number of sessions', '10')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const projectRoot = validateProjectRoot(options.path);\n const limit = parseInt(options.limit, 10);\n\n const capture = new HookCaptureSystem(projectRoot);\n const sessions = capture.listSessions();\n\n if (options.json) {\n const sessionData = sessions.slice(-limit).map(id => capture.loadSession(id));\n console.log(JSON.stringify(sessionData, null, 2));\n return;\n }\n\n console.log();\n console.log(chalk.cyan(' Captured Sessions'));\n console.log();\n\n if (sessions.length === 0) {\n console.log(chalk.gray(' No sessions captured yet.'));\n console.log();\n return;\n }\n\n const recentSessions = sessions.slice(-limit);\n for (const sessionId of recentSessions) {\n const session = capture.loadSession(sessionId);\n if (session) {\n const statusColor = session.status === 'completed' ? chalk.green : chalk.yellow;\n console.log(\n chalk.white(` ${session.id}`),\n chalk.gray('|'),\n chalk.cyan(session.name)\n );\n console.log(\n chalk.gray(' Status:'),\n statusColor(session.status),\n chalk.gray('|'),\n chalk.gray('Conversations:'),\n chalk.white(String(session.conversationIds.length)),\n chalk.gray('|'),\n chalk.gray('Tokens:'),\n chalk.white(String(session.tokenUsage.totalTokens))\n );\n console.log(\n chalk.gray(' Started:'),\n chalk.white(new Date(session.startedAt).toLocaleString())\n );\n console.log();\n }\n }\n\n if (sessions.length > limit) {\n console.log(chalk.gray(` ... and ${sessions.length - limit} more sessions`));\n console.log();\n }\n\n } catch (error) {\n console.error(chalk.red('Failed to list sessions:'), String(error));\n process.exit(1);\n }\n });\n\n // Export sessions\n command\n .command('export')\n .description('Export captured sessions')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-o, --output <file>', 'Output file path')\n .option('-f, --format <format>', 'Output format: json or markdown', 'json')\n .option('--session <id>', 'Export specific session')\n .action(async (options) => {\n const spinner = ora('Exporting sessions...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const capture = new HookCaptureSystem(projectRoot);\n\n let sessionsToExport: string[];\n\n if (options.session) {\n sessionsToExport = [options.session];\n } else {\n sessionsToExport = capture.listSessions();\n }\n\n if (sessionsToExport.length === 0) {\n spinner.info('No sessions to export.');\n return;\n }\n\n const exportData = sessionsToExport\n .map(id => capture.loadSession(id as any))\n .filter(Boolean);\n\n if (options.format === 'json') {\n const output = JSON.stringify(exportData, null, 2);\n\n if (options.output) {\n writeFileSync(options.output, output);\n spinner.succeed(`Exported ${exportData.length} session(s) to ${options.output}`);\n } else {\n spinner.stop();\n console.log(output);\n }\n } else if (options.format === 'markdown') {\n let markdown = '# Claude Interaction Sessions\\n\\n';\n\n for (const session of exportData) {\n if (!session) continue;\n markdown += `## ${session.name}\\n\\n`;\n markdown += `- **ID:** ${session.id}\\n`;\n markdown += `- **Status:** ${session.status}\\n`;\n markdown += `- **Purpose:** ${session.purpose || 'N/A'}\\n`;\n markdown += `- **Started:** ${new Date(session.startedAt).toISOString()}\\n`;\n if (session.endedAt) {\n markdown += `- **Ended:** ${new Date(session.endedAt).toISOString()}\\n`;\n }\n markdown += `- **Conversations:** ${session.conversationIds.length}\\n`;\n markdown += `- **Tokens:** ${session.tokenUsage.totalTokens}\\n\\n`;\n }\n\n if (options.output) {\n writeFileSync(options.output, markdown);\n spinner.succeed(`Exported ${exportData.length} session(s) to ${options.output}`);\n } else {\n spinner.stop();\n console.log(markdown);\n }\n }\n\n } catch (error) {\n spinner.fail('Failed to export sessions');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n return command;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAwJnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAgKnC"}
package/dist/cli/index.js CHANGED
@@ -22,6 +22,7 @@ import { createServeCommand } from "./commands/serve.js";
22
22
  import { createDashboardCommand } from "./commands/dashboard.js";
23
23
  import { createPluginCommand } from "./commands/plugin.js";
24
24
  import { createHiveMindCommand } from "./commands/hive-mind/index.js";
25
+ import { createHooksCommand } from "./commands/hooks.js";
25
26
  const VERSION = "0.4.0";
26
27
  function createCLI() {
27
28
  const program = new Command();
@@ -54,6 +55,7 @@ function createCLI() {
54
55
  program.addCommand(createDashboardCommand());
55
56
  program.addCommand(createPluginCommand());
56
57
  program.addCommand(createHiveMindCommand());
58
+ program.addCommand(createHooksCommand());
57
59
  program.action(() => {
58
60
  console.log(chalk.cyan.bold("\n Knowledge Graph Agent\n"));
59
61
  console.log(chalk.gray(" Generate and manage knowledge graphs for Claude Code\n"));
@@ -142,6 +144,12 @@ function createCLI() {
142
144
  console.log(chalk.gray(" $ kg hive-mind find-connections <vault> # Find potential links"));
143
145
  console.log(chalk.gray(" $ kg hive-mind validate-names <vault> # Validate file names"));
144
146
  console.log(chalk.gray(" $ kg hive-mind add-frontmatter <vault> # Add YAML frontmatter\n"));
147
+ console.log(chalk.white(" Claude Code Hooks:"));
148
+ console.log(chalk.gray(" $ kg hooks install # Install hooks to capture interactions"));
149
+ console.log(chalk.gray(" $ kg hooks uninstall # Remove hooks"));
150
+ console.log(chalk.gray(" $ kg hooks status # Show hooks status"));
151
+ console.log(chalk.gray(" $ kg hooks sessions # List captured sessions"));
152
+ console.log(chalk.gray(" $ kg hooks export # Export captured sessions\n"));
145
153
  console.log(chalk.white(" Commands:"));
146
154
  program.commands.forEach((cmd) => {
147
155
  console.log(chalk.cyan(` ${cmd.name().padEnd(20)}`), chalk.gray(cmd.description() || ""));