@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.
Files changed (40) hide show
  1. package/README.md +166 -2
  2. package/dist/_virtual/index10.js +2 -2
  3. package/dist/_virtual/index11.js +2 -2
  4. package/dist/_virtual/index8.js +2 -2
  5. package/dist/_virtual/index9.js +2 -2
  6. package/dist/claude/hook-capture.d.ts +209 -0
  7. package/dist/claude/hook-capture.d.ts.map +1 -0
  8. package/dist/claude/hook-capture.js +792 -0
  9. package/dist/claude/hook-capture.js.map +1 -0
  10. package/dist/claude/index.d.ts +15 -0
  11. package/dist/claude/index.d.ts.map +1 -0
  12. package/dist/claude/types.d.ts +1054 -0
  13. package/dist/claude/types.d.ts.map +1 -0
  14. package/dist/claude/types.js +61 -0
  15. package/dist/claude/types.js.map +1 -0
  16. package/dist/cli/commands/analyze.js +3 -3
  17. package/dist/cli/commands/analyze.js.map +1 -1
  18. package/dist/cli/commands/convert.js +1 -1
  19. package/dist/cli/commands/convert.js.map +1 -1
  20. package/dist/cli/commands/hooks.d.ts +11 -0
  21. package/dist/cli/commands/hooks.d.ts.map +1 -0
  22. package/dist/cli/commands/hooks.js +282 -0
  23. package/dist/cli/commands/hooks.js.map +1 -0
  24. package/dist/cli/index.d.ts.map +1 -1
  25. package/dist/cli/index.js +9 -1
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/generators/docs-analyzer.d.ts +2 -2
  28. package/dist/generators/docs-analyzer.d.ts.map +1 -1
  29. package/dist/generators/docs-analyzer.js +1 -1
  30. package/dist/generators/docs-analyzer.js.map +1 -1
  31. package/dist/generators/docs-convert.d.ts +1 -1
  32. package/dist/generators/docs-convert.d.ts.map +1 -1
  33. package/dist/generators/docs-convert.js +1 -1
  34. package/dist/generators/docs-convert.js.map +1 -1
  35. package/dist/node_modules/@typescript-eslint/project-service/dist/index.js +1 -1
  36. package/dist/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/dist/commonjs/index.js +1 -1
  37. package/dist/node_modules/fdir/dist/index.js +1 -1
  38. package/dist/node_modules/tinyglobby/dist/index.js +1 -1
  39. package/dist/node_modules/ts-api-utils/lib/index.js +1 -1
  40. package/package.json +1 -1
package/README.md CHANGED
@@ -10,8 +10,9 @@ A powerful NPM library for creating and managing knowledge graphs for Claude Cod
10
10
  | Category | Features |
11
11
  |----------|----------|
12
12
  | **Core** | Knowledge graph generation, Obsidian integration, CLAUDE.md management |
13
- | **Cultivation** | Codebase analysis, seed generation, deep analysis with claude-flow |
13
+ | **Cultivation** | Codebase analysis, seed generation, deep analysis with claude-flow, doc cultivation |
14
14
  | **Agents** | Multi-agent system, rules engine, workflows, MCP server with 30+ tools |
15
+ | **Claude Hooks** | Capture all interactions, hierarchical storage, sub-agent tracking, swarm tracking |
15
16
  | **Services** | Service management, config migrations, health monitoring |
16
17
  | **Enterprise** | Chunking, backup/recovery, advanced caching, diagnostics |
17
18
  | **Integrations** | Workflow DevKit, RuVector semantic search, Exochain audit trail |
@@ -431,6 +432,110 @@ npx @weavelogic/knowledge-graph-agent mcp start
431
432
 
432
433
  ---
433
434
 
435
+ ## Claude Code Hooks
436
+
437
+ Capture all Claude Code interactions and store them in a hierarchical knowledge graph structure.
438
+
439
+ ### Installation
440
+
441
+ ```bash
442
+ # Install hooks to capture all interactions
443
+ kg hooks install
444
+
445
+ # Check hooks status
446
+ kg hooks status
447
+
448
+ # View captured sessions
449
+ kg hooks sessions
450
+ ```
451
+
452
+ ### Features
453
+
454
+ - **Hierarchical Storage**: Sessions → Conversations → Messages → Tool Calls
455
+ - **Sub-Agent Tracking**: Automatically tracks Task tool spawns
456
+ - **Swarm Tracking**: Captures claude-flow swarm operations
457
+ - **Markdown Generation**: Creates documentation for all interactions
458
+ - **Tool Output Separation**: Stores tool outputs in dedicated files
459
+
460
+ ### Hook Events Captured
461
+
462
+ | Event | Description |
463
+ |-------|-------------|
464
+ | `UserPromptSubmit` | All user prompts |
465
+ | `PreToolUse` | Tool invocations with inputs |
466
+ | `PostToolUse` | Tool results and outputs |
467
+ | `Stop` | Session completion |
468
+ | `PreCompact` | Before context compaction |
469
+
470
+ ### Storage Structure
471
+
472
+ ```
473
+ .kg/claude/
474
+ ├── sessions/ # JSON session data
475
+ ├── agents/ # Sub-agent tracking
476
+ ├── tool-outputs/ # Separated tool outputs
477
+ ├── docs/
478
+ │ ├── sessions/ # Session markdown docs
479
+ │ ├── conversations/ # Conversation logs
480
+ │ └── agents/ # Sub-agent markdown docs
481
+ ```
482
+
483
+ ### Programmatic Usage
484
+
485
+ ```typescript
486
+ import { HookCaptureSystem, generateHookConfig } from '@weavelogic/knowledge-graph-agent';
487
+
488
+ // Create capture system
489
+ const capture = new HookCaptureSystem('/project', {
490
+ createMarkdown: true,
491
+ separateToolOutputs: true,
492
+ captureSubAgents: true,
493
+ captureSwarms: true,
494
+ });
495
+
496
+ // Start a session
497
+ const session = capture.startSession('Development Session', 'Feature implementation');
498
+
499
+ // Handle hook events
500
+ capture.handleHookEvent({
501
+ event: 'UserPromptSubmit',
502
+ timestamp: new Date().toISOString(),
503
+ userPrompt: 'Help me implement...',
504
+ });
505
+
506
+ // End session
507
+ const completedSession = capture.endSession();
508
+ ```
509
+
510
+ ---
511
+
512
+ ## Document Cultivation
513
+
514
+ Automatically build out comprehensive documentation using claude-flow swarm orchestration.
515
+
516
+ ### Usage
517
+
518
+ ```bash
519
+ # Cultivate documentation with swarm agents
520
+ kg cultivate --path /project
521
+
522
+ # Include SOP compliance analysis
523
+ kg cultivate --include-sops
524
+
525
+ # Dry run to preview
526
+ kg cultivate --dry-run
527
+ ```
528
+
529
+ ### Features
530
+
531
+ - **7-Phase Cultivation Process**: Structure analysis through completion
532
+ - **Development Planning**: Generates phased development plans
533
+ - **Infrastructure Planning**: Creates dev/staging/production infrastructure plans
534
+ - **SOP Compliance**: Integrates AI-SDLC SOP analysis
535
+ - **Swarm Orchestration**: Uses claude-flow for parallel documentation generation
536
+
537
+ ---
538
+
434
539
  ## Enterprise Features
435
540
 
436
541
  ### Chunker for Large Documents
@@ -592,13 +697,25 @@ const execution = await workflow.start('document-analysis', {
592
697
  | `kg dashboard serve` | Serve production build |
593
698
  | `kg dashboard status` | Check dashboard status |
594
699
 
595
- ### Documentation
700
+ ### Documentation & Cultivation
596
701
 
597
702
  | Command | Description |
598
703
  |---------|-------------|
599
704
  | `kg docs init` | Initialize docs directory |
600
705
  | `kg analyze` | Analyze & migrate to knowledge graph |
601
706
  | `kg convert docs` | Convert docs/ to docs-nn/ |
707
+ | `kg cultivate` | Cultivate docs using swarm orchestration |
708
+ | `kg cultivate --include-sops` | Include SOP compliance analysis |
709
+
710
+ ### Claude Code Hooks
711
+
712
+ | Command | Description |
713
+ |---------|-------------|
714
+ | `kg hooks install` | Install hooks to capture interactions |
715
+ | `kg hooks uninstall` | Remove hooks configuration |
716
+ | `kg hooks status` | Show hooks status |
717
+ | `kg hooks sessions` | List captured sessions |
718
+ | `kg hooks export` | Export captured sessions |
602
719
 
603
720
  ### Configuration
604
721
 
@@ -724,6 +841,53 @@ import {
724
841
 
725
842
  ## Changelog
726
843
 
844
+ ### v0.10.1
845
+
846
+ **Default Directory Fix:**
847
+ - Changed default target directory from `docs-nn` to `docs`
848
+ - `kg analyze`, `kg convert docs`, and related commands now output to `docs/` by default
849
+ - Use `--target docs-nn` if you specifically need the old behavior
850
+ - Updated help text and documentation to reflect the change
851
+
852
+ ### v0.10.0
853
+
854
+ **Claude Code Hooks System:**
855
+ - **Hook Capture System** - Capture all Claude interactions (prompts, responses, tool calls)
856
+ - **Hierarchical Storage** - Sessions → Conversations → Messages → Tool Calls
857
+ - **Sub-Agent Tracking** - Automatically tracks Task tool spawns with full context
858
+ - **Swarm Tracking** - Captures claude-flow swarm operations
859
+ - **Markdown Generation** - Creates documentation for sessions, conversations, agents
860
+ - **Tool Output Separation** - Stores tool outputs in dedicated JSON files
861
+ - **CLI Commands** - `kg hooks install/uninstall/status/sessions/export`
862
+ - Comprehensive type definitions with Zod validation
863
+ - 22 new tests for hook system
864
+
865
+ ### v0.9.0
866
+
867
+ **Document Cultivation System:**
868
+ - **Doc Cultivation Command** - `kg cultivate` for automated documentation buildout
869
+ - **7-Phase Cultivation Process** - Structure → Content → Architecture → Development → Infrastructure → Review → Completion
870
+ - **Development Planning** - Generates phased development plans with tasks
871
+ - **Infrastructure Planning** - Creates dev/staging/production infrastructure plans
872
+ - **SOP Compliance Analysis** - Integrates AI-SDLC SOP requirements
873
+ - **Swarm Orchestration** - Uses claude-flow for parallel documentation generation
874
+ - Support for multi-service projects (api, backend, frontend, admin)
875
+
876
+ ### v0.8.8
877
+
878
+ - Added `src/{service}/docs` directory scanning and copying for doc generation
879
+ - Enhanced service documentation detection
880
+
881
+ ### v0.8.7
882
+
883
+ - Improved Python project detection for doc generation
884
+ - Better handling of `requirements.txt` and `pyproject.toml`
885
+
886
+ ### v0.8.6
887
+
888
+ - Fixed vault-sync.test.ts timeout issues
889
+ - Improved test stability
890
+
727
891
  ### v0.7.4
728
892
 
729
893
  - Fixed repository URL in package.json to match actual GitHub repo name
@@ -1,5 +1,5 @@
1
- var dist = {};
1
+ var lib = {};
2
2
  export {
3
- dist as __exports
3
+ lib as __exports
4
4
  };
5
5
  //# sourceMappingURL=index10.js.map
@@ -1,5 +1,5 @@
1
- var lib = {};
1
+ var dist = {};
2
2
  export {
3
- lib as __exports
3
+ dist as __exports
4
4
  };
5
5
  //# sourceMappingURL=index11.js.map
@@ -1,5 +1,5 @@
1
- var dist = {};
1
+ var commonjs = {};
2
2
  export {
3
- dist as __exports
3
+ commonjs as __exports
4
4
  };
5
5
  //# sourceMappingURL=index8.js.map
@@ -1,5 +1,5 @@
1
- var commonjs = {};
1
+ var dist = {};
2
2
  export {
3
- commonjs as __exports
3
+ dist as __exports
4
4
  };
5
5
  //# sourceMappingURL=index9.js.map
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Hook Capture System
3
+ *
4
+ * Captures all Claude interactions (prompts, responses, tool calls)
5
+ * and stores them in the knowledge graph with hierarchical structure.
6
+ *
7
+ * @module claude/hook-capture
8
+ */
9
+ import { SessionId, ClaudeSession, ClaudeConversation } from './types.js';
10
+ /**
11
+ * Hook event types from Claude Code
12
+ */
13
+ export type HookEventType = 'PreToolUse' | 'PostToolUse' | 'UserPromptSubmit' | 'Stop' | 'PreCompact';
14
+ /**
15
+ * Raw hook event data received from Claude Code
16
+ */
17
+ export interface HookEventData {
18
+ event: HookEventType;
19
+ timestamp: string;
20
+ sessionId?: string;
21
+ toolName?: string;
22
+ toolInput?: Record<string, unknown>;
23
+ toolOutput?: string;
24
+ userPrompt?: string;
25
+ exitCode?: number;
26
+ duration?: number;
27
+ error?: string;
28
+ metadata?: Record<string, unknown>;
29
+ }
30
+ /**
31
+ * Capture configuration options
32
+ */
33
+ export interface CaptureConfig {
34
+ /** Base directory for storing captured data */
35
+ storageDir: string;
36
+ /** Whether to store in knowledge graph format */
37
+ useKnowledgeGraph: boolean;
38
+ /** Whether to create markdown documents */
39
+ createMarkdown: boolean;
40
+ /** Whether to track tool outputs separately */
41
+ separateToolOutputs: boolean;
42
+ /** Maximum content length to store (truncates if exceeded) */
43
+ maxContentLength: number;
44
+ /** Whether to capture sub-agent spawns */
45
+ captureSubAgents: boolean;
46
+ /** Whether to capture swarm operations */
47
+ captureSwarms: boolean;
48
+ /** Whether to capture workflow executions */
49
+ captureWorkflows: boolean;
50
+ /** Tags to add to all captured items */
51
+ defaultTags: string[];
52
+ }
53
+ /**
54
+ * Default configuration
55
+ */
56
+ export declare const DEFAULT_CAPTURE_CONFIG: CaptureConfig;
57
+ /**
58
+ * Hook Capture System
59
+ *
60
+ * Manages the capture and storage of all Claude interactions.
61
+ */
62
+ export declare class HookCaptureSystem {
63
+ private config;
64
+ private state;
65
+ private projectRoot;
66
+ constructor(projectRoot: string, config?: Partial<CaptureConfig>);
67
+ /**
68
+ * Ensure storage directory exists
69
+ */
70
+ private ensureStorageDir;
71
+ /**
72
+ * Create empty token usage
73
+ */
74
+ private createEmptyTokenUsage;
75
+ /**
76
+ * Create empty aggregated token usage
77
+ */
78
+ private createEmptyAggregatedTokenUsage;
79
+ /**
80
+ * Create base metadata
81
+ */
82
+ private createBaseMetadata;
83
+ /**
84
+ * Get current git branch
85
+ */
86
+ private getGitBranch;
87
+ /**
88
+ * Start a new session
89
+ */
90
+ startSession(name?: string, purpose?: string): ClaudeSession;
91
+ /**
92
+ * End the current session
93
+ */
94
+ endSession(): ClaudeSession | null;
95
+ /**
96
+ * Start a new conversation
97
+ */
98
+ startConversation(model?: string, systemPrompt?: string): ClaudeConversation;
99
+ /**
100
+ * Handle hook events
101
+ */
102
+ handleHookEvent(event: HookEventData): void;
103
+ /**
104
+ * Handle user prompt submission
105
+ */
106
+ private handleUserPrompt;
107
+ /**
108
+ * Handle pre-tool use event
109
+ */
110
+ private handlePreToolUse;
111
+ /**
112
+ * Handle post-tool use event
113
+ */
114
+ private handlePostToolUse;
115
+ /**
116
+ * Handle session stop event
117
+ */
118
+ private handleSessionStop;
119
+ /**
120
+ * Handle pre-compact event
121
+ */
122
+ private handlePreCompact;
123
+ /**
124
+ * Handle sub-agent spawn
125
+ */
126
+ private handleSubAgentSpawn;
127
+ /**
128
+ * Handle sub-agent completion
129
+ */
130
+ private handleSubAgentComplete;
131
+ /**
132
+ * Handle swarm operation
133
+ */
134
+ private handleSwarmOperation;
135
+ /**
136
+ * Categorize tool calls
137
+ */
138
+ private categorizeToolCall;
139
+ /**
140
+ * Aggregate session tokens
141
+ */
142
+ private aggregateSessionTokens;
143
+ /**
144
+ * Truncate content to max length
145
+ */
146
+ private truncateContent;
147
+ /**
148
+ * Get storage path for an entity
149
+ */
150
+ private getStoragePath;
151
+ /**
152
+ * Get markdown path for an entity
153
+ */
154
+ private getMarkdownPath;
155
+ /**
156
+ * Save session to storage
157
+ */
158
+ private saveSession;
159
+ /**
160
+ * Save session as markdown
161
+ */
162
+ private saveSessionMarkdown;
163
+ /**
164
+ * Save message to storage
165
+ */
166
+ private saveMessage;
167
+ /**
168
+ * Append message to conversation log
169
+ */
170
+ private appendToConversationLog;
171
+ /**
172
+ * Save tool call to storage
173
+ */
174
+ private saveToolCall;
175
+ /**
176
+ * Save sub-agent to storage
177
+ */
178
+ private saveSubAgent;
179
+ /**
180
+ * Save sub-agent as markdown
181
+ */
182
+ private saveSubAgentMarkdown;
183
+ /**
184
+ * Get current session
185
+ */
186
+ getCurrentSession(): ClaudeSession | null;
187
+ /**
188
+ * Get current conversation
189
+ */
190
+ getCurrentConversation(): ClaudeConversation | null;
191
+ /**
192
+ * Load session from storage
193
+ */
194
+ loadSession(sessionId: SessionId): ClaudeSession | null;
195
+ /**
196
+ * List all stored sessions
197
+ */
198
+ listSessions(): SessionId[];
199
+ }
200
+ /**
201
+ * Process hook event from stdin (for use as CLI hook)
202
+ */
203
+ export declare function processHookEvent(projectRoot: string, eventType: HookEventType, config?: Partial<CaptureConfig>): Promise<void>;
204
+ /**
205
+ * Generate Claude Code hook configuration
206
+ */
207
+ export declare function generateHookConfig(projectRoot: string): Record<string, unknown>;
208
+ export default HookCaptureSystem;
209
+ //# sourceMappingURL=hook-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-capture.d.ts","sourceRoot":"","sources":["../../src/claude/hook-capture.ts"],"names":[],"mappings":"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"}