@weavelogic/knowledge-graph-agent 0.9.0 → 0.10.1
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.
- package/README.md +166 -2
- package/dist/_virtual/index10.js +2 -2
- package/dist/_virtual/index11.js +2 -2
- package/dist/_virtual/index8.js +2 -2
- package/dist/_virtual/index9.js +2 -2
- package/dist/claude/hook-capture.d.ts +209 -0
- package/dist/claude/hook-capture.d.ts.map +1 -0
- package/dist/claude/hook-capture.js +792 -0
- package/dist/claude/hook-capture.js.map +1 -0
- package/dist/claude/index.d.ts +15 -0
- package/dist/claude/index.d.ts.map +1 -0
- package/dist/claude/types.d.ts +1054 -0
- package/dist/claude/types.d.ts.map +1 -0
- package/dist/claude/types.js +61 -0
- package/dist/claude/types.js.map +1 -0
- package/dist/cli/commands/analyze.js +3 -3
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/convert.js +1 -1
- package/dist/cli/commands/convert.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts +11 -0
- package/dist/cli/commands/hooks.d.ts.map +1 -0
- package/dist/cli/commands/hooks.js +282 -0
- package/dist/cli/commands/hooks.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +9 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/generators/docs-analyzer.d.ts +2 -2
- package/dist/generators/docs-analyzer.d.ts.map +1 -1
- package/dist/generators/docs-analyzer.js +1 -1
- package/dist/generators/docs-analyzer.js.map +1 -1
- package/dist/generators/docs-convert.d.ts +1 -1
- package/dist/generators/docs-convert.d.ts.map +1 -1
- package/dist/generators/docs-convert.js +1 -1
- package/dist/generators/docs-convert.js.map +1 -1
- package/dist/node_modules/@typescript-eslint/project-service/dist/index.js +1 -1
- package/dist/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/dist/commonjs/index.js +1 -1
- package/dist/node_modules/fdir/dist/index.js +1 -1
- package/dist/node_modules/tinyglobby/dist/index.js +1 -1
- package/dist/node_modules/ts-api-utils/lib/index.js +1 -1
- package/package.json +1 -1
|
@@ -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;"}
|
|
@@ -7,7 +7,7 @@ import { analyzeDocs } from "../../generators/docs-analyzer.js";
|
|
|
7
7
|
import { validateProjectRoot } from "../../core/security.js";
|
|
8
8
|
function createAnalyzeCommand() {
|
|
9
9
|
const command = new Command("analyze");
|
|
10
|
-
command.description("Analyze and migrate docs to knowledge graph structure").option("-p, --path <path>", "Project root path", ".").option("-s, --source <dir>", "Source docs directory", "docs").option("-t, --target <dir>", "Target directory", "docs
|
|
10
|
+
command.description("Analyze and migrate docs to knowledge graph structure").option("-p, --path <path>", "Project root path", ".").option("-s, --source <dir>", "Source docs directory", "docs").option("-t, --target <dir>", "Target directory", "docs").option("--use-claude-flow", "Use claude-flow for deep analysis").option("--no-moc", "Skip MOC (Map of Content) generation").option("--no-link-original", "Do not link back to original docs").option("--max-depth <n>", "Maximum analysis depth", "3").option("--dry-run", "Show what would be done without making changes").option("-v, --verbose", "Verbose output").action(async (options) => {
|
|
11
11
|
const spinner = ora("Analyzing documentation...").start();
|
|
12
12
|
try {
|
|
13
13
|
const projectRoot = validateProjectRoot(options.path);
|
|
@@ -119,7 +119,7 @@ function createAnalyzeCommand() {
|
|
|
119
119
|
process.exit(1);
|
|
120
120
|
}
|
|
121
121
|
});
|
|
122
|
-
command.command("deep").description("Deep analysis using claude-flow agents for comprehensive knowledge extraction").option("-p, --path <path>", "Project root path", ".").option("-s, --source <dir>", "Source docs directory", "docs").option("-t, --target <dir>", "Target directory", "docs
|
|
122
|
+
command.command("deep").description("Deep analysis using claude-flow agents for comprehensive knowledge extraction").option("-p, --path <path>", "Project root path", ".").option("-s, --source <dir>", "Source docs directory", "docs").option("-t, --target <dir>", "Target directory", "docs").option("--agents <n>", "Number of parallel agents", "3").action(async (options) => {
|
|
123
123
|
const spinner = ora("Initializing deep analysis with claude-flow...").start();
|
|
124
124
|
try {
|
|
125
125
|
const projectRoot = validateProjectRoot(options.path);
|
|
@@ -184,7 +184,7 @@ function createAnalyzeCommand() {
|
|
|
184
184
|
}
|
|
185
185
|
const result = await analyzeDocs({
|
|
186
186
|
sourceDir,
|
|
187
|
-
targetDir: "docs
|
|
187
|
+
targetDir: "docs",
|
|
188
188
|
projectRoot,
|
|
189
189
|
useClaudeFlow: false,
|
|
190
190
|
createMOC: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.js","sources":["../../../src/cli/commands/analyze.ts"],"sourcesContent":["/**\n * Analyze Command\n *\n * Advanced documentation analyzer using claude-flow for deep analysis\n * and creating proper knowledge graph documentation structure.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { analyzeDocs } from '../../generators/docs-analyzer.js';\nimport { validateProjectRoot } from '../../core/security.js';\n\n/**\n * Create analyze command\n */\nexport function createAnalyzeCommand(): Command {\n const command = new Command('analyze');\n\n command\n .description('Analyze and migrate docs to knowledge graph structure')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --source <dir>', 'Source docs directory', 'docs')\n .option('-t, --target <dir>', 'Target directory', 'docs-nn')\n .option('--use-claude-flow', 'Use claude-flow for deep analysis')\n .option('--no-moc', 'Skip MOC (Map of Content) generation')\n .option('--no-link-original', 'Do not link back to original docs')\n .option('--max-depth <n>', 'Maximum analysis depth', '3')\n .option('--dry-run', 'Show what would be done without making changes')\n .option('-v, --verbose', 'Verbose output')\n .action(async (options) => {\n const spinner = ora('Analyzing documentation...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const sourceDir = options.source;\n const targetDir = options.target;\n\n // Check source exists\n if (!existsSync(join(projectRoot, sourceDir))) {\n spinner.fail(`Source directory not found: ${sourceDir}`);\n console.log(chalk.gray(' Specify source with --source <dir>'));\n process.exit(1);\n }\n\n // Check if target already exists\n if (existsSync(join(projectRoot, targetDir)) && !options.dryRun) {\n spinner.warn(`Target directory exists: ${targetDir}`);\n console.log(chalk.yellow(' Files may be overwritten. Use --dry-run to preview.'));\n }\n\n if (options.dryRun) {\n spinner.text = 'Analyzing documentation (dry run)...';\n }\n\n if (options.useClaudeFlow) {\n spinner.text = 'Analyzing with claude-flow (deep analysis)...';\n }\n\n const result = await analyzeDocs({\n sourceDir,\n targetDir,\n projectRoot,\n useClaudeFlow: options.useClaudeFlow,\n createMOC: options.moc !== false,\n linkOriginal: options.linkOriginal !== false,\n maxDepth: parseInt(options.maxDepth, 10),\n dryRun: options.dryRun,\n verbose: options.verbose,\n });\n\n if (result.success) {\n if (options.dryRun) {\n spinner.succeed('Dry run complete!');\n } else {\n spinner.succeed('Documentation analyzed and migrated!');\n }\n } else {\n spinner.warn('Analysis completed with errors');\n }\n\n // Display results\n console.log();\n console.log(chalk.cyan.bold(' Analysis Results'));\n console.log(chalk.gray(' ─────────────────────────────────────'));\n console.log();\n console.log(chalk.white(' Summary:'));\n console.log(chalk.gray(` Source: ${sourceDir}/`));\n console.log(chalk.gray(` Target: ${targetDir}/`));\n console.log(chalk.green(` Files analyzed: ${result.filesAnalyzed}`));\n console.log(chalk.green(` Files created: ${result.filesCreated}`));\n console.log(chalk.blue(` MOC files: ${result.mocFilesCreated}`));\n\n // Category breakdown\n if (result.structure.size > 0) {\n console.log();\n console.log(chalk.white(' Categories:'));\n for (const [category, docs] of result.structure) {\n console.log(chalk.cyan(` ${category.padEnd(15)}`), chalk.gray(`${docs.length} docs`));\n }\n }\n\n // Show sample analyzed documents\n if (result.analyzed.length > 0 && options.verbose) {\n console.log();\n console.log(chalk.white(' Sample documents:'));\n result.analyzed.slice(0, 5).forEach(doc => {\n console.log(chalk.gray(` ${doc.originalPath}`));\n console.log(chalk.cyan(` → ${doc.newPath}`) + chalk.gray(` [${doc.type}]`));\n if (doc.tags.length > 0) {\n console.log(chalk.gray(` tags: ${doc.tags.slice(0, 5).map(t => `#${t}`).join(' ')}`));\n }\n });\n if (result.analyzed.length > 5) {\n console.log(chalk.gray(` ... and ${result.analyzed.length - 5} more`));\n }\n }\n\n // Show errors\n if (result.errors.length > 0) {\n console.log();\n console.log(chalk.red(' Errors:'));\n result.errors.slice(0, 5).forEach(err => {\n console.log(chalk.gray(` - ${err}`));\n });\n if (result.errors.length > 5) {\n console.log(chalk.gray(` ... and ${result.errors.length - 5} more`));\n }\n }\n\n // Research needed summary\n const researchDocs = result.analyzed.filter(d => d.researchNeeded.length > 0);\n const todoDocs = result.analyzed.filter(d => d.todos.length > 0);\n\n if (researchDocs.length > 0 || todoDocs.length > 0) {\n console.log();\n console.log(chalk.yellow(' Attention Needed:'));\n if (researchDocs.length > 0) {\n console.log(chalk.yellow(` 📚 ${researchDocs.length} docs need research`));\n }\n if (todoDocs.length > 0) {\n console.log(chalk.yellow(` ✏️ ${todoDocs.length} docs have TODOs`));\n }\n }\n\n // Next steps\n if (!options.dryRun && result.filesCreated > 0) {\n console.log();\n console.log(chalk.cyan(' Next steps:'));\n console.log(chalk.white(` 1. Review ${targetDir}/MOC.md (Master Index)`));\n console.log(chalk.white(` 2. Check ${targetDir}/PRIMITIVES.md`));\n console.log(chalk.white(` 3. Run: kg graph --docs ${targetDir}`));\n console.log(chalk.white(` 4. Run: kg stats --docs ${targetDir}`));\n if (researchDocs.length > 0) {\n console.log(chalk.white(` 5. Address research items in flagged docs`));\n }\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Analysis failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Deep analyze subcommand (uses claude-flow agents)\n command\n .command('deep')\n .description('Deep analysis using claude-flow agents for comprehensive knowledge extraction')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --source <dir>', 'Source docs directory', 'docs')\n .option('-t, --target <dir>', 'Target directory', 'docs-nn')\n .option('--agents <n>', 'Number of parallel agents', '3')\n .action(async (options) => {\n const spinner = ora('Initializing deep analysis with claude-flow...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const sourceDir = options.source;\n const targetDir = options.target;\n\n // Check source exists\n if (!existsSync(join(projectRoot, sourceDir))) {\n spinner.fail(`Source directory not found: ${sourceDir}`);\n process.exit(1);\n }\n\n spinner.text = 'Running claude-flow deep analysis...';\n\n // Run deep analysis with claude-flow\n const result = await analyzeDocs({\n sourceDir,\n targetDir,\n projectRoot,\n useClaudeFlow: true,\n createMOC: true,\n linkOriginal: true,\n maxDepth: 5,\n dryRun: false,\n verbose: true,\n });\n\n if (result.success) {\n spinner.succeed('Deep analysis complete!');\n } else {\n spinner.warn('Deep analysis completed with some errors');\n }\n\n console.log();\n console.log(chalk.cyan.bold(' Deep Analysis Results'));\n console.log(chalk.gray(' ─────────────────────────────────────'));\n console.log(chalk.green(` Documents analyzed: ${result.filesAnalyzed}`));\n console.log(chalk.green(` Knowledge docs: ${result.filesCreated}`));\n console.log(chalk.blue(` Index files (MOC): ${result.mocFilesCreated}`));\n console.log(chalk.gray(` Categories: ${result.structure.size}`));\n\n // Research summary\n const totalResearch = result.analyzed.reduce((sum, d) => sum + d.researchNeeded.length, 0);\n const totalTodos = result.analyzed.reduce((sum, d) => sum + d.todos.length, 0);\n\n console.log();\n console.log(chalk.white(' Knowledge extraction:'));\n console.log(chalk.cyan(` Research areas: ${totalResearch}`));\n console.log(chalk.cyan(` TODOs found: ${totalTodos}`));\n console.log(chalk.cyan(` Concepts: ${result.analyzed.reduce((sum, d) => sum + d.concepts.length, 0)}`));\n console.log(chalk.cyan(` Cross-refs: ${result.analyzed.reduce((sum, d) => sum + d.related.length, 0)}`));\n\n console.log();\n console.log(chalk.white(` Output: ${targetDir}/`));\n console.log(chalk.gray(` MOC.md Master index`));\n console.log(chalk.gray(` PRIMITIVES.md Core building blocks`));\n console.log(chalk.gray(` */\\_MOC.md Category indexes`));\n console.log();\n\n } catch (error) {\n spinner.fail('Deep analysis failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Report subcommand\n command\n .command('report')\n .description('Generate analysis report without creating files')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --source <dir>', 'Source docs directory', 'docs')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n const spinner = ora('Generating analysis report...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const sourceDir = options.source;\n\n if (!existsSync(join(projectRoot, sourceDir))) {\n spinner.fail(`Source directory not found: ${sourceDir}`);\n process.exit(1);\n }\n\n const result = await analyzeDocs({\n sourceDir,\n targetDir: 'docs-nn',\n projectRoot,\n useClaudeFlow: false,\n createMOC: false,\n linkOriginal: false,\n dryRun: true,\n verbose: false,\n });\n\n spinner.succeed('Report generated!');\n\n if (options.json) {\n // JSON output\n const report = {\n summary: {\n totalDocs: result.filesAnalyzed,\n categories: Object.fromEntries(result.structure),\n },\n documents: result.analyzed.map(d => ({\n original: d.originalPath,\n target: d.newPath,\n type: d.type,\n category: d.category,\n tags: d.tags,\n concepts: d.concepts,\n researchNeeded: d.researchNeeded,\n todos: d.todos,\n })),\n researchAreas: result.analyzed\n .flatMap(d => d.researchNeeded.map(r => ({ doc: d.title, area: r }))),\n todos: result.analyzed\n .flatMap(d => d.todos.map(t => ({ doc: d.title, todo: t }))),\n };\n console.log(JSON.stringify(report, null, 2));\n } else {\n // Human-readable output\n console.log();\n console.log(chalk.cyan.bold(' Documentation Analysis Report'));\n console.log(chalk.gray(' ─────────────────────────────────────'));\n console.log();\n console.log(chalk.white(` Total documents: ${result.filesAnalyzed}`));\n console.log();\n\n // Type breakdown\n const byType = new Map<string, number>();\n result.analyzed.forEach(d => {\n byType.set(d.type, (byType.get(d.type) || 0) + 1);\n });\n\n console.log(chalk.white(' By Type:'));\n for (const [type, count] of byType) {\n const bar = '█'.repeat(Math.ceil(count / result.filesAnalyzed * 20));\n console.log(chalk.cyan(` ${type.padEnd(12)} ${bar} ${count}`));\n }\n console.log();\n\n // Category breakdown\n console.log(chalk.white(' By Category:'));\n for (const [category, docs] of result.structure) {\n const bar = '█'.repeat(Math.ceil(docs.length / result.filesAnalyzed * 20));\n console.log(chalk.cyan(` ${category.padEnd(12)} ${bar} ${docs.length}`));\n }\n console.log();\n\n // Issues\n const withResearch = result.analyzed.filter(d => d.researchNeeded.length > 0);\n const withTodos = result.analyzed.filter(d => d.todos.length > 0);\n\n console.log(chalk.white(' Areas Needing Attention:'));\n console.log(chalk.yellow(` 📚 Research needed: ${withResearch.length} docs`));\n console.log(chalk.yellow(` ✏️ With TODOs: ${withTodos.length} docs`));\n console.log();\n\n // Top research areas\n if (withResearch.length > 0) {\n console.log(chalk.white(' Top Research Areas:'));\n withResearch.slice(0, 5).forEach(d => {\n console.log(chalk.gray(` ${d.title}:`));\n d.researchNeeded.slice(0, 2).forEach(r => {\n console.log(chalk.yellow(` - ${r.slice(0, 60)}...`));\n });\n });\n console.log();\n }\n\n console.log(chalk.cyan(' Run `kg analyze` to migrate documentation'));\n console.log();\n }\n\n } catch (error) {\n spinner.fail('Report generation failed');\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
|
+
{"version":3,"file":"analyze.js","sources":["../../../src/cli/commands/analyze.ts"],"sourcesContent":["/**\n * Analyze Command\n *\n * Advanced documentation analyzer using claude-flow for deep analysis\n * and creating proper knowledge graph documentation structure.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { analyzeDocs } from '../../generators/docs-analyzer.js';\nimport { validateProjectRoot } from '../../core/security.js';\n\n/**\n * Create analyze command\n */\nexport function createAnalyzeCommand(): Command {\n const command = new Command('analyze');\n\n command\n .description('Analyze and migrate docs to knowledge graph structure')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --source <dir>', 'Source docs directory', 'docs')\n .option('-t, --target <dir>', 'Target directory', 'docs')\n .option('--use-claude-flow', 'Use claude-flow for deep analysis')\n .option('--no-moc', 'Skip MOC (Map of Content) generation')\n .option('--no-link-original', 'Do not link back to original docs')\n .option('--max-depth <n>', 'Maximum analysis depth', '3')\n .option('--dry-run', 'Show what would be done without making changes')\n .option('-v, --verbose', 'Verbose output')\n .action(async (options) => {\n const spinner = ora('Analyzing documentation...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const sourceDir = options.source;\n const targetDir = options.target;\n\n // Check source exists\n if (!existsSync(join(projectRoot, sourceDir))) {\n spinner.fail(`Source directory not found: ${sourceDir}`);\n console.log(chalk.gray(' Specify source with --source <dir>'));\n process.exit(1);\n }\n\n // Check if target already exists\n if (existsSync(join(projectRoot, targetDir)) && !options.dryRun) {\n spinner.warn(`Target directory exists: ${targetDir}`);\n console.log(chalk.yellow(' Files may be overwritten. Use --dry-run to preview.'));\n }\n\n if (options.dryRun) {\n spinner.text = 'Analyzing documentation (dry run)...';\n }\n\n if (options.useClaudeFlow) {\n spinner.text = 'Analyzing with claude-flow (deep analysis)...';\n }\n\n const result = await analyzeDocs({\n sourceDir,\n targetDir,\n projectRoot,\n useClaudeFlow: options.useClaudeFlow,\n createMOC: options.moc !== false,\n linkOriginal: options.linkOriginal !== false,\n maxDepth: parseInt(options.maxDepth, 10),\n dryRun: options.dryRun,\n verbose: options.verbose,\n });\n\n if (result.success) {\n if (options.dryRun) {\n spinner.succeed('Dry run complete!');\n } else {\n spinner.succeed('Documentation analyzed and migrated!');\n }\n } else {\n spinner.warn('Analysis completed with errors');\n }\n\n // Display results\n console.log();\n console.log(chalk.cyan.bold(' Analysis Results'));\n console.log(chalk.gray(' ─────────────────────────────────────'));\n console.log();\n console.log(chalk.white(' Summary:'));\n console.log(chalk.gray(` Source: ${sourceDir}/`));\n console.log(chalk.gray(` Target: ${targetDir}/`));\n console.log(chalk.green(` Files analyzed: ${result.filesAnalyzed}`));\n console.log(chalk.green(` Files created: ${result.filesCreated}`));\n console.log(chalk.blue(` MOC files: ${result.mocFilesCreated}`));\n\n // Category breakdown\n if (result.structure.size > 0) {\n console.log();\n console.log(chalk.white(' Categories:'));\n for (const [category, docs] of result.structure) {\n console.log(chalk.cyan(` ${category.padEnd(15)}`), chalk.gray(`${docs.length} docs`));\n }\n }\n\n // Show sample analyzed documents\n if (result.analyzed.length > 0 && options.verbose) {\n console.log();\n console.log(chalk.white(' Sample documents:'));\n result.analyzed.slice(0, 5).forEach(doc => {\n console.log(chalk.gray(` ${doc.originalPath}`));\n console.log(chalk.cyan(` → ${doc.newPath}`) + chalk.gray(` [${doc.type}]`));\n if (doc.tags.length > 0) {\n console.log(chalk.gray(` tags: ${doc.tags.slice(0, 5).map(t => `#${t}`).join(' ')}`));\n }\n });\n if (result.analyzed.length > 5) {\n console.log(chalk.gray(` ... and ${result.analyzed.length - 5} more`));\n }\n }\n\n // Show errors\n if (result.errors.length > 0) {\n console.log();\n console.log(chalk.red(' Errors:'));\n result.errors.slice(0, 5).forEach(err => {\n console.log(chalk.gray(` - ${err}`));\n });\n if (result.errors.length > 5) {\n console.log(chalk.gray(` ... and ${result.errors.length - 5} more`));\n }\n }\n\n // Research needed summary\n const researchDocs = result.analyzed.filter(d => d.researchNeeded.length > 0);\n const todoDocs = result.analyzed.filter(d => d.todos.length > 0);\n\n if (researchDocs.length > 0 || todoDocs.length > 0) {\n console.log();\n console.log(chalk.yellow(' Attention Needed:'));\n if (researchDocs.length > 0) {\n console.log(chalk.yellow(` 📚 ${researchDocs.length} docs need research`));\n }\n if (todoDocs.length > 0) {\n console.log(chalk.yellow(` ✏️ ${todoDocs.length} docs have TODOs`));\n }\n }\n\n // Next steps\n if (!options.dryRun && result.filesCreated > 0) {\n console.log();\n console.log(chalk.cyan(' Next steps:'));\n console.log(chalk.white(` 1. Review ${targetDir}/MOC.md (Master Index)`));\n console.log(chalk.white(` 2. Check ${targetDir}/PRIMITIVES.md`));\n console.log(chalk.white(` 3. Run: kg graph --docs ${targetDir}`));\n console.log(chalk.white(` 4. Run: kg stats --docs ${targetDir}`));\n if (researchDocs.length > 0) {\n console.log(chalk.white(` 5. Address research items in flagged docs`));\n }\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Analysis failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Deep analyze subcommand (uses claude-flow agents)\n command\n .command('deep')\n .description('Deep analysis using claude-flow agents for comprehensive knowledge extraction')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --source <dir>', 'Source docs directory', 'docs')\n .option('-t, --target <dir>', 'Target directory', 'docs')\n .option('--agents <n>', 'Number of parallel agents', '3')\n .action(async (options) => {\n const spinner = ora('Initializing deep analysis with claude-flow...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const sourceDir = options.source;\n const targetDir = options.target;\n\n // Check source exists\n if (!existsSync(join(projectRoot, sourceDir))) {\n spinner.fail(`Source directory not found: ${sourceDir}`);\n process.exit(1);\n }\n\n spinner.text = 'Running claude-flow deep analysis...';\n\n // Run deep analysis with claude-flow\n const result = await analyzeDocs({\n sourceDir,\n targetDir,\n projectRoot,\n useClaudeFlow: true,\n createMOC: true,\n linkOriginal: true,\n maxDepth: 5,\n dryRun: false,\n verbose: true,\n });\n\n if (result.success) {\n spinner.succeed('Deep analysis complete!');\n } else {\n spinner.warn('Deep analysis completed with some errors');\n }\n\n console.log();\n console.log(chalk.cyan.bold(' Deep Analysis Results'));\n console.log(chalk.gray(' ─────────────────────────────────────'));\n console.log(chalk.green(` Documents analyzed: ${result.filesAnalyzed}`));\n console.log(chalk.green(` Knowledge docs: ${result.filesCreated}`));\n console.log(chalk.blue(` Index files (MOC): ${result.mocFilesCreated}`));\n console.log(chalk.gray(` Categories: ${result.structure.size}`));\n\n // Research summary\n const totalResearch = result.analyzed.reduce((sum, d) => sum + d.researchNeeded.length, 0);\n const totalTodos = result.analyzed.reduce((sum, d) => sum + d.todos.length, 0);\n\n console.log();\n console.log(chalk.white(' Knowledge extraction:'));\n console.log(chalk.cyan(` Research areas: ${totalResearch}`));\n console.log(chalk.cyan(` TODOs found: ${totalTodos}`));\n console.log(chalk.cyan(` Concepts: ${result.analyzed.reduce((sum, d) => sum + d.concepts.length, 0)}`));\n console.log(chalk.cyan(` Cross-refs: ${result.analyzed.reduce((sum, d) => sum + d.related.length, 0)}`));\n\n console.log();\n console.log(chalk.white(` Output: ${targetDir}/`));\n console.log(chalk.gray(` MOC.md Master index`));\n console.log(chalk.gray(` PRIMITIVES.md Core building blocks`));\n console.log(chalk.gray(` */\\_MOC.md Category indexes`));\n console.log();\n\n } catch (error) {\n spinner.fail('Deep analysis failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Report subcommand\n command\n .command('report')\n .description('Generate analysis report without creating files')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --source <dir>', 'Source docs directory', 'docs')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n const spinner = ora('Generating analysis report...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const sourceDir = options.source;\n\n if (!existsSync(join(projectRoot, sourceDir))) {\n spinner.fail(`Source directory not found: ${sourceDir}`);\n process.exit(1);\n }\n\n const result = await analyzeDocs({\n sourceDir,\n targetDir: 'docs',\n projectRoot,\n useClaudeFlow: false,\n createMOC: false,\n linkOriginal: false,\n dryRun: true,\n verbose: false,\n });\n\n spinner.succeed('Report generated!');\n\n if (options.json) {\n // JSON output\n const report = {\n summary: {\n totalDocs: result.filesAnalyzed,\n categories: Object.fromEntries(result.structure),\n },\n documents: result.analyzed.map(d => ({\n original: d.originalPath,\n target: d.newPath,\n type: d.type,\n category: d.category,\n tags: d.tags,\n concepts: d.concepts,\n researchNeeded: d.researchNeeded,\n todos: d.todos,\n })),\n researchAreas: result.analyzed\n .flatMap(d => d.researchNeeded.map(r => ({ doc: d.title, area: r }))),\n todos: result.analyzed\n .flatMap(d => d.todos.map(t => ({ doc: d.title, todo: t }))),\n };\n console.log(JSON.stringify(report, null, 2));\n } else {\n // Human-readable output\n console.log();\n console.log(chalk.cyan.bold(' Documentation Analysis Report'));\n console.log(chalk.gray(' ─────────────────────────────────────'));\n console.log();\n console.log(chalk.white(` Total documents: ${result.filesAnalyzed}`));\n console.log();\n\n // Type breakdown\n const byType = new Map<string, number>();\n result.analyzed.forEach(d => {\n byType.set(d.type, (byType.get(d.type) || 0) + 1);\n });\n\n console.log(chalk.white(' By Type:'));\n for (const [type, count] of byType) {\n const bar = '█'.repeat(Math.ceil(count / result.filesAnalyzed * 20));\n console.log(chalk.cyan(` ${type.padEnd(12)} ${bar} ${count}`));\n }\n console.log();\n\n // Category breakdown\n console.log(chalk.white(' By Category:'));\n for (const [category, docs] of result.structure) {\n const bar = '█'.repeat(Math.ceil(docs.length / result.filesAnalyzed * 20));\n console.log(chalk.cyan(` ${category.padEnd(12)} ${bar} ${docs.length}`));\n }\n console.log();\n\n // Issues\n const withResearch = result.analyzed.filter(d => d.researchNeeded.length > 0);\n const withTodos = result.analyzed.filter(d => d.todos.length > 0);\n\n console.log(chalk.white(' Areas Needing Attention:'));\n console.log(chalk.yellow(` 📚 Research needed: ${withResearch.length} docs`));\n console.log(chalk.yellow(` ✏️ With TODOs: ${withTodos.length} docs`));\n console.log();\n\n // Top research areas\n if (withResearch.length > 0) {\n console.log(chalk.white(' Top Research Areas:'));\n withResearch.slice(0, 5).forEach(d => {\n console.log(chalk.gray(` ${d.title}:`));\n d.researchNeeded.slice(0, 2).forEach(r => {\n console.log(chalk.yellow(` - ${r.slice(0, 60)}...`));\n });\n });\n console.log();\n }\n\n console.log(chalk.cyan(' Run `kg analyze` to migrate documentation'));\n console.log();\n }\n\n } catch (error) {\n spinner.fail('Report generation failed');\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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"}
|
|
@@ -8,7 +8,7 @@ import { validateProjectRoot } from "../../core/security.js";
|
|
|
8
8
|
function createConvertCommand() {
|
|
9
9
|
const command = new Command("convert");
|
|
10
10
|
command.description("Convert existing docs to weave-nn structure");
|
|
11
|
-
command.command("docs").description("Convert existing documentation
|
|
11
|
+
command.command("docs").description("Convert existing documentation with proper structure").option("-p, --path <path>", "Project root path", ".").option("-s, --source <dir>", "Source docs directory", "docs").option("-t, --target <dir>", "Target directory", "docs").option("--no-auto-category", "Disable auto-categorization").option("-f, --force", "Overwrite existing files").option("--dry-run", "Show what would be done without making changes").action(async (options) => {
|
|
12
12
|
const spinner = ora("Converting documentation...").start();
|
|
13
13
|
try {
|
|
14
14
|
const projectRoot = validateProjectRoot(options.path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sources":["../../../src/cli/commands/convert.ts"],"sourcesContent":["/**\n * Convert Command\n *\n * Convert existing documentation to weave-nn structure.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport {\n convertDocs,\n addFrontmatter,\n validateFrontmatter,\n} from '../../generators/docs-convert.js';\nimport { validateProjectRoot, validateDocsPath } from '../../core/security.js';\n\n/**\n * Create convert command\n */\nexport function createConvertCommand(): Command {\n const command = new Command('convert');\n\n command\n .description('Convert existing docs to weave-nn structure');\n\n // Main convert subcommand\n command\n .command('docs')\n .description('Convert existing documentation to docs-nn/ with proper structure')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --source <dir>', 'Source docs directory', 'docs')\n .option('-t, --target <dir>', 'Target directory', 'docs-nn')\n .option('--no-auto-category', 'Disable auto-categorization')\n .option('-f, --force', 'Overwrite existing files')\n .option('--dry-run', 'Show what would be done without making changes')\n .action(async (options) => {\n const spinner = ora('Converting documentation...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const sourceDir = options.source;\n const targetDir = options.target;\n\n // Check source exists\n if (!existsSync(join(projectRoot, sourceDir))) {\n spinner.fail(`Source directory not found: ${sourceDir}`);\n console.log(chalk.gray(' Specify source with --source <dir>'));\n process.exit(1);\n }\n\n if (options.dryRun) {\n spinner.text = 'Analyzing documentation (dry run)...';\n }\n\n const result = await convertDocs({\n sourceDir,\n targetDir,\n projectRoot,\n preserveOriginal: true,\n force: options.force,\n autoCategory: options.autoCategory !== false,\n dryRun: options.dryRun,\n });\n\n if (result.success) {\n if (options.dryRun) {\n spinner.succeed('Dry run complete!');\n } else {\n spinner.succeed('Documentation converted!');\n }\n } else {\n spinner.warn('Conversion completed with errors');\n }\n\n console.log();\n console.log(chalk.white(' Summary:'));\n console.log(chalk.gray(` Source: ${sourceDir}/`));\n console.log(chalk.gray(` Target: ${targetDir}/`));\n console.log(chalk.green(` Converted: ${result.filesConverted}`));\n console.log(chalk.yellow(` Skipped: ${result.filesSkipped}`));\n console.log(chalk.gray(` Total: ${result.filesProcessed}`));\n\n if (result.converted.length > 0 && result.converted.length <= 10) {\n console.log();\n console.log(chalk.white(' Converted files:'));\n result.converted.forEach(({ source, target, type }) => {\n console.log(chalk.gray(` ${source}`));\n console.log(chalk.cyan(` → ${target}`) + chalk.gray(` [${type}]`));\n });\n } else if (result.converted.length > 10) {\n console.log();\n console.log(chalk.white(' Sample conversions:'));\n result.converted.slice(0, 5).forEach(({ source, target, type }) => {\n console.log(chalk.gray(` ${source}`));\n console.log(chalk.cyan(` → ${target}`) + chalk.gray(` [${type}]`));\n });\n console.log(chalk.gray(` ... and ${result.converted.length - 5} more`));\n }\n\n if (result.errors.length > 0) {\n console.log();\n console.log(chalk.red(' Errors:'));\n result.errors.slice(0, 5).forEach(err => {\n console.log(chalk.gray(` - ${err}`));\n });\n if (result.errors.length > 5) {\n console.log(chalk.gray(` ... and ${result.errors.length - 5} more`));\n }\n }\n\n if (!options.dryRun && result.filesConverted > 0) {\n console.log();\n console.log(chalk.cyan('Next steps:'));\n console.log(chalk.white(` 1. Review ${targetDir}/ structure`));\n console.log(chalk.white(' 2. Run: kg graph --docs ' + targetDir));\n console.log(chalk.white(' 3. Run: kg stats'));\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Conversion failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n return command;\n}\n\n/**\n * Create frontmatter command\n */\nexport function createFrontmatterCommand(): Command {\n const command = new Command('frontmatter');\n\n command\n .description('Manage frontmatter in markdown files');\n\n // Add frontmatter\n command\n .command('add [target]')\n .description('Add frontmatter to files missing it')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-t, --type <type>', 'Node type (concept, technical, feature, service, guide, standard, integration)')\n .option('-s, --status <status>', 'Status (draft, active, deprecated, archived)', 'active')\n .option('--tags <tags>', 'Comma-separated tags')\n .option('-f, --force', 'Overwrite existing frontmatter')\n .option('--dry-run', 'Show what would be done')\n .action(async (target, options) => {\n const spinner = ora('Adding frontmatter...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const targetPath = target || 'docs';\n\n const tags = options.tags ? options.tags.split(',').map((t: string) => t.trim()) : [];\n\n const result = await addFrontmatter({\n target: targetPath,\n projectRoot,\n type: options.type,\n status: options.status,\n tags,\n force: options.force,\n dryRun: options.dryRun,\n });\n\n if (result.success) {\n spinner.succeed(options.dryRun ? 'Dry run complete!' : 'Frontmatter added!');\n } else {\n spinner.warn('Completed with errors');\n }\n\n console.log();\n console.log(chalk.white(' Summary:'));\n console.log(chalk.green(` Updated: ${result.filesUpdated}`));\n console.log(chalk.yellow(` Skipped: ${result.filesSkipped}`));\n console.log(chalk.gray(` Total: ${result.filesProcessed}`));\n\n if (result.errors.length > 0) {\n console.log();\n console.log(chalk.red(' Errors:'));\n result.errors.forEach(err => {\n console.log(chalk.gray(` - ${err}`));\n });\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Failed to add frontmatter');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Validate frontmatter\n command\n .command('validate [target]')\n .description('Validate frontmatter in markdown files')\n .option('-p, --path <path>', 'Project root path', '.')\n .action(async (target, options) => {\n const spinner = ora('Validating frontmatter...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const targetPath = target || 'docs';\n\n const result = await validateFrontmatter(targetPath, projectRoot);\n\n spinner.succeed('Validation complete!');\n\n console.log();\n console.log(chalk.white(' Frontmatter Validation:'));\n console.log(chalk.green(` Valid: ${result.valid}`));\n console.log(chalk.red(` Invalid: ${result.invalid}`));\n console.log(chalk.yellow(` Missing: ${result.missing}`));\n\n if (result.issues.length > 0) {\n console.log();\n console.log(chalk.yellow(' Issues found:'));\n result.issues.slice(0, 10).forEach(({ file, issues }) => {\n console.log(chalk.white(` ${file}`));\n issues.forEach(issue => {\n console.log(chalk.gray(` - ${issue}`));\n });\n });\n if (result.issues.length > 10) {\n console.log(chalk.gray(` ... and ${result.issues.length - 10} more files`));\n }\n\n console.log();\n console.log(chalk.cyan('Fix with: ') + chalk.white('kg frontmatter add <target>'));\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Validation failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Update frontmatter (force mode)\n command\n .command('update [target]')\n .description('Update/regenerate frontmatter (overwrites existing)')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-t, --type <type>', 'Force specific node type')\n .option('--dry-run', 'Show what would be done')\n .action(async (target, options) => {\n const spinner = ora('Updating frontmatter...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const targetPath = target || 'docs';\n\n const result = await addFrontmatter({\n target: targetPath,\n projectRoot,\n type: options.type,\n force: true,\n dryRun: options.dryRun,\n });\n\n if (result.success) {\n spinner.succeed(options.dryRun ? 'Dry run complete!' : 'Frontmatter updated!');\n } else {\n spinner.warn('Completed with errors');\n }\n\n console.log();\n console.log(chalk.green(` Updated: ${result.filesUpdated} files`));\n\n if (result.errors.length > 0) {\n console.log(chalk.red(` Errors: ${result.errors.length}`));\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Failed to update frontmatter');\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
|
+
{"version":3,"file":"convert.js","sources":["../../../src/cli/commands/convert.ts"],"sourcesContent":["/**\n * Convert Command\n *\n * Convert existing documentation to weave-nn structure.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport {\n convertDocs,\n addFrontmatter,\n validateFrontmatter,\n} from '../../generators/docs-convert.js';\nimport { validateProjectRoot, validateDocsPath } from '../../core/security.js';\n\n/**\n * Create convert command\n */\nexport function createConvertCommand(): Command {\n const command = new Command('convert');\n\n command\n .description('Convert existing docs to weave-nn structure');\n\n // Main convert subcommand\n command\n .command('docs')\n .description('Convert existing documentation with proper structure')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-s, --source <dir>', 'Source docs directory', 'docs')\n .option('-t, --target <dir>', 'Target directory', 'docs')\n .option('--no-auto-category', 'Disable auto-categorization')\n .option('-f, --force', 'Overwrite existing files')\n .option('--dry-run', 'Show what would be done without making changes')\n .action(async (options) => {\n const spinner = ora('Converting documentation...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const sourceDir = options.source;\n const targetDir = options.target;\n\n // Check source exists\n if (!existsSync(join(projectRoot, sourceDir))) {\n spinner.fail(`Source directory not found: ${sourceDir}`);\n console.log(chalk.gray(' Specify source with --source <dir>'));\n process.exit(1);\n }\n\n if (options.dryRun) {\n spinner.text = 'Analyzing documentation (dry run)...';\n }\n\n const result = await convertDocs({\n sourceDir,\n targetDir,\n projectRoot,\n preserveOriginal: true,\n force: options.force,\n autoCategory: options.autoCategory !== false,\n dryRun: options.dryRun,\n });\n\n if (result.success) {\n if (options.dryRun) {\n spinner.succeed('Dry run complete!');\n } else {\n spinner.succeed('Documentation converted!');\n }\n } else {\n spinner.warn('Conversion completed with errors');\n }\n\n console.log();\n console.log(chalk.white(' Summary:'));\n console.log(chalk.gray(` Source: ${sourceDir}/`));\n console.log(chalk.gray(` Target: ${targetDir}/`));\n console.log(chalk.green(` Converted: ${result.filesConverted}`));\n console.log(chalk.yellow(` Skipped: ${result.filesSkipped}`));\n console.log(chalk.gray(` Total: ${result.filesProcessed}`));\n\n if (result.converted.length > 0 && result.converted.length <= 10) {\n console.log();\n console.log(chalk.white(' Converted files:'));\n result.converted.forEach(({ source, target, type }) => {\n console.log(chalk.gray(` ${source}`));\n console.log(chalk.cyan(` → ${target}`) + chalk.gray(` [${type}]`));\n });\n } else if (result.converted.length > 10) {\n console.log();\n console.log(chalk.white(' Sample conversions:'));\n result.converted.slice(0, 5).forEach(({ source, target, type }) => {\n console.log(chalk.gray(` ${source}`));\n console.log(chalk.cyan(` → ${target}`) + chalk.gray(` [${type}]`));\n });\n console.log(chalk.gray(` ... and ${result.converted.length - 5} more`));\n }\n\n if (result.errors.length > 0) {\n console.log();\n console.log(chalk.red(' Errors:'));\n result.errors.slice(0, 5).forEach(err => {\n console.log(chalk.gray(` - ${err}`));\n });\n if (result.errors.length > 5) {\n console.log(chalk.gray(` ... and ${result.errors.length - 5} more`));\n }\n }\n\n if (!options.dryRun && result.filesConverted > 0) {\n console.log();\n console.log(chalk.cyan('Next steps:'));\n console.log(chalk.white(` 1. Review ${targetDir}/ structure`));\n console.log(chalk.white(' 2. Run: kg graph --docs ' + targetDir));\n console.log(chalk.white(' 3. Run: kg stats'));\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Conversion failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n return command;\n}\n\n/**\n * Create frontmatter command\n */\nexport function createFrontmatterCommand(): Command {\n const command = new Command('frontmatter');\n\n command\n .description('Manage frontmatter in markdown files');\n\n // Add frontmatter\n command\n .command('add [target]')\n .description('Add frontmatter to files missing it')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-t, --type <type>', 'Node type (concept, technical, feature, service, guide, standard, integration)')\n .option('-s, --status <status>', 'Status (draft, active, deprecated, archived)', 'active')\n .option('--tags <tags>', 'Comma-separated tags')\n .option('-f, --force', 'Overwrite existing frontmatter')\n .option('--dry-run', 'Show what would be done')\n .action(async (target, options) => {\n const spinner = ora('Adding frontmatter...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const targetPath = target || 'docs';\n\n const tags = options.tags ? options.tags.split(',').map((t: string) => t.trim()) : [];\n\n const result = await addFrontmatter({\n target: targetPath,\n projectRoot,\n type: options.type,\n status: options.status,\n tags,\n force: options.force,\n dryRun: options.dryRun,\n });\n\n if (result.success) {\n spinner.succeed(options.dryRun ? 'Dry run complete!' : 'Frontmatter added!');\n } else {\n spinner.warn('Completed with errors');\n }\n\n console.log();\n console.log(chalk.white(' Summary:'));\n console.log(chalk.green(` Updated: ${result.filesUpdated}`));\n console.log(chalk.yellow(` Skipped: ${result.filesSkipped}`));\n console.log(chalk.gray(` Total: ${result.filesProcessed}`));\n\n if (result.errors.length > 0) {\n console.log();\n console.log(chalk.red(' Errors:'));\n result.errors.forEach(err => {\n console.log(chalk.gray(` - ${err}`));\n });\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Failed to add frontmatter');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Validate frontmatter\n command\n .command('validate [target]')\n .description('Validate frontmatter in markdown files')\n .option('-p, --path <path>', 'Project root path', '.')\n .action(async (target, options) => {\n const spinner = ora('Validating frontmatter...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const targetPath = target || 'docs';\n\n const result = await validateFrontmatter(targetPath, projectRoot);\n\n spinner.succeed('Validation complete!');\n\n console.log();\n console.log(chalk.white(' Frontmatter Validation:'));\n console.log(chalk.green(` Valid: ${result.valid}`));\n console.log(chalk.red(` Invalid: ${result.invalid}`));\n console.log(chalk.yellow(` Missing: ${result.missing}`));\n\n if (result.issues.length > 0) {\n console.log();\n console.log(chalk.yellow(' Issues found:'));\n result.issues.slice(0, 10).forEach(({ file, issues }) => {\n console.log(chalk.white(` ${file}`));\n issues.forEach(issue => {\n console.log(chalk.gray(` - ${issue}`));\n });\n });\n if (result.issues.length > 10) {\n console.log(chalk.gray(` ... and ${result.issues.length - 10} more files`));\n }\n\n console.log();\n console.log(chalk.cyan('Fix with: ') + chalk.white('kg frontmatter add <target>'));\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Validation failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Update frontmatter (force mode)\n command\n .command('update [target]')\n .description('Update/regenerate frontmatter (overwrites existing)')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-t, --type <type>', 'Force specific node type')\n .option('--dry-run', 'Show what would be done')\n .action(async (target, options) => {\n const spinner = ora('Updating frontmatter...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const targetPath = target || 'docs';\n\n const result = await addFrontmatter({\n target: targetPath,\n projectRoot,\n type: options.type,\n force: true,\n dryRun: options.dryRun,\n });\n\n if (result.success) {\n spinner.succeed(options.dryRun ? 'Dry run complete!' : 'Frontmatter updated!');\n } else {\n spinner.warn('Completed with errors');\n }\n\n console.log();\n console.log(chalk.green(` Updated: ${result.filesUpdated} files`));\n\n if (result.errors.length > 0) {\n console.log(chalk.red(` Errors: ${result.errors.length}`));\n }\n\n console.log();\n\n } catch (error) {\n spinner.fail('Failed to update frontmatter');\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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"}
|
|
@@ -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"}
|