@nahisaho/musubix-deep-research 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -0
- package/dist/engine/research-engine.d.ts +97 -0
- package/dist/engine/research-engine.d.ts.map +1 -0
- package/dist/engine/research-engine.js +260 -0
- package/dist/engine/research-engine.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/knowledge-store.d.ts +117 -0
- package/dist/integration/knowledge-store.d.ts.map +1 -0
- package/dist/integration/knowledge-store.js +222 -0
- package/dist/integration/knowledge-store.js.map +1 -0
- package/dist/integration/orchestration-engine.d.ts +102 -0
- package/dist/integration/orchestration-engine.d.ts.map +1 -0
- package/dist/integration/orchestration-engine.js +216 -0
- package/dist/integration/orchestration-engine.js.map +1 -0
- package/dist/integration/vscode-extension.d.ts +161 -0
- package/dist/integration/vscode-extension.d.ts.map +1 -0
- package/dist/integration/vscode-extension.js +319 -0
- package/dist/integration/vscode-extension.js.map +1 -0
- package/dist/integration/workflow-engine.d.ts +128 -0
- package/dist/integration/workflow-engine.d.ts.map +1 -0
- package/dist/integration/workflow-engine.js +239 -0
- package/dist/integration/workflow-engine.js.map +1 -0
- package/dist/knowledge/knowledge-base.d.ts +49 -0
- package/dist/knowledge/knowledge-base.d.ts.map +1 -0
- package/dist/knowledge/knowledge-base.js +91 -0
- package/dist/knowledge/knowledge-base.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools.d.ts +234 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +276 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/performance/caching-layer.d.ts +142 -0
- package/dist/performance/caching-layer.d.ts.map +1 -0
- package/dist/performance/caching-layer.js +229 -0
- package/dist/performance/caching-layer.js.map +1 -0
- package/dist/performance/index.d.ts +8 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +8 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/performance/parallel-executor.d.ts +127 -0
- package/dist/performance/parallel-executor.d.ts.map +1 -0
- package/dist/performance/parallel-executor.js +160 -0
- package/dist/performance/parallel-executor.js.map +1 -0
- package/dist/performance/resource-monitor.d.ts +186 -0
- package/dist/performance/resource-monitor.d.ts.map +1 -0
- package/dist/performance/resource-monitor.js +265 -0
- package/dist/performance/resource-monitor.js.map +1 -0
- package/dist/providers/brave-provider.d.ts +49 -0
- package/dist/providers/brave-provider.d.ts.map +1 -0
- package/dist/providers/brave-provider.js +152 -0
- package/dist/providers/brave-provider.js.map +1 -0
- package/dist/providers/duckduckgo-provider.d.ts +48 -0
- package/dist/providers/duckduckgo-provider.d.ts.map +1 -0
- package/dist/providers/duckduckgo-provider.js +181 -0
- package/dist/providers/duckduckgo-provider.js.map +1 -0
- package/dist/providers/expert-integration.d.ts +55 -0
- package/dist/providers/expert-integration.d.ts.map +1 -0
- package/dist/providers/expert-integration.js +139 -0
- package/dist/providers/expert-integration.js.map +1 -0
- package/dist/providers/jina-provider.d.ts +68 -0
- package/dist/providers/jina-provider.d.ts.map +1 -0
- package/dist/providers/jina-provider.js +219 -0
- package/dist/providers/jina-provider.js.map +1 -0
- package/dist/providers/neural-search-provider.d.ts +63 -0
- package/dist/providers/neural-search-provider.d.ts.map +1 -0
- package/dist/providers/neural-search-provider.js +164 -0
- package/dist/providers/neural-search-provider.js.map +1 -0
- package/dist/providers/provider-factory.d.ts +83 -0
- package/dist/providers/provider-factory.d.ts.map +1 -0
- package/dist/providers/provider-factory.js +176 -0
- package/dist/providers/provider-factory.js.map +1 -0
- package/dist/providers/vscode-lm-provider.d.ts +33 -0
- package/dist/providers/vscode-lm-provider.d.ts.map +1 -0
- package/dist/providers/vscode-lm-provider.js +97 -0
- package/dist/providers/vscode-lm-provider.js.map +1 -0
- package/dist/reasoning/lm-reasoning.d.ts +104 -0
- package/dist/reasoning/lm-reasoning.d.ts.map +1 -0
- package/dist/reasoning/lm-reasoning.js +244 -0
- package/dist/reasoning/lm-reasoning.js.map +1 -0
- package/dist/reporters/report-generator.d.ts +58 -0
- package/dist/reporters/report-generator.d.ts.map +1 -0
- package/dist/reporters/report-generator.js +222 -0
- package/dist/reporters/report-generator.js.map +1 -0
- package/dist/security/content-sanitizer.d.ts +105 -0
- package/dist/security/content-sanitizer.d.ts.map +1 -0
- package/dist/security/content-sanitizer.js +257 -0
- package/dist/security/content-sanitizer.js.map +1 -0
- package/dist/security/secret-manager.d.ts +103 -0
- package/dist/security/secret-manager.d.ts.map +1 -0
- package/dist/security/secret-manager.js +224 -0
- package/dist/security/secret-manager.js.map +1 -0
- package/dist/security/secure-logger.d.ts +136 -0
- package/dist/security/secure-logger.d.ts.map +1 -0
- package/dist/security/secure-logger.js +232 -0
- package/dist/security/secure-logger.js.map +1 -0
- package/dist/test/index.d.ts +2 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +4 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/mocks/index.d.ts +7 -0
- package/dist/test/mocks/index.d.ts.map +1 -0
- package/dist/test/mocks/index.js +7 -0
- package/dist/test/mocks/index.js.map +1 -0
- package/dist/test/mocks/mock-expert-delegation.d.ts +62 -0
- package/dist/test/mocks/mock-expert-delegation.d.ts.map +1 -0
- package/dist/test/mocks/mock-expert-delegation.js +70 -0
- package/dist/test/mocks/mock-expert-delegation.js.map +1 -0
- package/dist/test/mocks/mock-http-client.d.ts +82 -0
- package/dist/test/mocks/mock-http-client.d.ts.map +1 -0
- package/dist/test/mocks/mock-http-client.js +111 -0
- package/dist/test/mocks/mock-http-client.js.map +1 -0
- package/dist/test/mocks/mock-lm-provider.d.ts +45 -0
- package/dist/test/mocks/mock-lm-provider.d.ts.map +1 -0
- package/dist/test/mocks/mock-lm-provider.js +80 -0
- package/dist/test/mocks/mock-lm-provider.js.map +1 -0
- package/dist/test/mocks/mock-search-provider.d.ts +62 -0
- package/dist/test/mocks/mock-search-provider.d.ts.map +1 -0
- package/dist/test/mocks/mock-search-provider.js +101 -0
- package/dist/test/mocks/mock-search-provider.js.map +1 -0
- package/dist/types/errors.d.ts +53 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +79 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +369 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/token-tracker.d.ts +45 -0
- package/dist/utils/token-tracker.d.ts.map +1 -0
- package/dist/utils/token-tracker.js +85 -0
- package/dist/utils/token-tracker.js.map +1 -0
- package/dist/utils/trajectory-logger.d.ts +42 -0
- package/dist/utils/trajectory-logger.d.ts.map +1 -0
- package/dist/utils/trajectory-logger.js +83 -0
- package/dist/utils/trajectory-logger.js.map +1 -0
- package/package.json +74 -0
package/README.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# @nahisaho/musubix-deep-research
|
|
2
|
+
|
|
3
|
+
Deep Research Integration for MUSUBIX - Iterative search-read-reason cycle for AI agents during requirements and design phases.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🔄 **Iterative Research Cycle**: Search → Read → Reason → Reflect loop
|
|
8
|
+
- 🔍 **Multi-Provider Search**: Jina AI (primary), Brave (fallback 1), DuckDuckGo (fallback 2)
|
|
9
|
+
- 🧠 **LM API Integration**: VS Code LM API (GitHub Copilot) for reasoning
|
|
10
|
+
- 📚 **Knowledge Accumulation**: Persistent knowledge base across iterations
|
|
11
|
+
- 💰 **Token Budget Management**: Automatic tracking and limits
|
|
12
|
+
- 📊 **Research Reports**: Markdown/JSON formatted reports with citations
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @nahisaho/musubix-deep-research
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
### CLI
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Start deep research
|
|
26
|
+
npx musubix deep-research "How to implement authentication in TypeScript?"
|
|
27
|
+
|
|
28
|
+
# With options
|
|
29
|
+
npx musubix deep-research "TypeScript decorators" \
|
|
30
|
+
--max-iterations 5 \
|
|
31
|
+
--token-budget 10000 \
|
|
32
|
+
--output report.md
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Programmatic API
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { ResearchEngine, ResearchConfig } from '@nahisaho/musubix-deep-research';
|
|
39
|
+
|
|
40
|
+
const config: ResearchConfig = {
|
|
41
|
+
query: 'How to implement authentication in TypeScript?',
|
|
42
|
+
maxIterations: 10,
|
|
43
|
+
tokenBudget: 15000,
|
|
44
|
+
providers: {
|
|
45
|
+
jinaApiKey: process.env.JINA_API_KEY,
|
|
46
|
+
braveApiKey: process.env.BRAVE_API_KEY,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const engine = new ResearchEngine(config);
|
|
51
|
+
const report = await engine.research();
|
|
52
|
+
|
|
53
|
+
console.log(report.summary);
|
|
54
|
+
console.log(`Found ${report.findings.length} findings`);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Architecture
|
|
58
|
+
|
|
59
|
+
Based on **Template Method Pattern** (ADR-v3.4.0-001):
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
ResearchEngine (Template Method)
|
|
63
|
+
├─ initialize()
|
|
64
|
+
├─ while (!shouldStop())
|
|
65
|
+
│ ├─ generateQuestions() → LMReasoning
|
|
66
|
+
│ ├─ search() → SearchProviderFactory
|
|
67
|
+
│ ├─ read() → JinaProvider.read()
|
|
68
|
+
│ ├─ reason() → LMReasoning
|
|
69
|
+
│ └─ logIteration() → TrajectoryLogger
|
|
70
|
+
└─ generateReport() → ReportGenerator
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Requirements
|
|
74
|
+
|
|
75
|
+
- Node.js >= 20.0.0
|
|
76
|
+
- npm >= 10.0.0
|
|
77
|
+
- VS Code with GitHub Copilot (for LM API)
|
|
78
|
+
- Jina AI API Key (recommended)
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
MIT
|
|
83
|
+
|
|
84
|
+
## Documentation
|
|
85
|
+
|
|
86
|
+
- [Requirements](../../storage/specs/REQ-MUSUBIX-v3.4.0.md)
|
|
87
|
+
- [Design](../../storage/design/DES-DR-v3.4.0.md)
|
|
88
|
+
- [ADRs](../../docs/adr/)
|
|
89
|
+
- [Tasks](../../storage/tasks/TSK-DR-v3.4.0.md)
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { KnowledgeBase } from '../knowledge/knowledge-base.js';
|
|
2
|
+
import { TokenTracker } from '../utils/token-tracker.js';
|
|
3
|
+
import { TrajectoryLogger } from '../utils/trajectory-logger.js';
|
|
4
|
+
import { ReportGenerator } from '../reporters/report-generator.js';
|
|
5
|
+
import type { ResearchConfig, ResearchReport, ReflectiveQuestion, SearchResult, WebContent, KnowledgeItem } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Research Engine - Main orchestrator using Template Method Pattern
|
|
8
|
+
*
|
|
9
|
+
* REQ: REQ-DR-CORE-001 - Iterative search-read-reason cycle
|
|
10
|
+
* ADR: ADR-v3.4.0-001 - Template Method Pattern architecture
|
|
11
|
+
*
|
|
12
|
+
* Flow:
|
|
13
|
+
* 1. initialize()
|
|
14
|
+
* 2. while (!shouldStop())
|
|
15
|
+
* a. generateQuestions()
|
|
16
|
+
* b. search()
|
|
17
|
+
* c. read()
|
|
18
|
+
* d. reason()
|
|
19
|
+
* e. evaluate()
|
|
20
|
+
* 3. generateReport()
|
|
21
|
+
*/
|
|
22
|
+
export declare class ResearchEngine {
|
|
23
|
+
protected knowledge: KnowledgeBase;
|
|
24
|
+
protected tokenTracker: TokenTracker;
|
|
25
|
+
protected logger: TrajectoryLogger;
|
|
26
|
+
protected reportGenerator: ReportGenerator;
|
|
27
|
+
protected config: ResearchConfig;
|
|
28
|
+
protected iteration: number;
|
|
29
|
+
protected startTime: number;
|
|
30
|
+
protected definitiveAnswer: string | null;
|
|
31
|
+
constructor(config: ResearchConfig);
|
|
32
|
+
/**
|
|
33
|
+
* Main research method - Template Method
|
|
34
|
+
*
|
|
35
|
+
* REQ: REQ-DR-CORE-001 - Iterative cycle
|
|
36
|
+
*/
|
|
37
|
+
research(): Promise<ResearchReport>;
|
|
38
|
+
/**
|
|
39
|
+
* Initialize research session
|
|
40
|
+
*/
|
|
41
|
+
protected initialize(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Check if research should stop
|
|
44
|
+
*
|
|
45
|
+
* Stopping conditions:
|
|
46
|
+
* 1. Max iterations reached
|
|
47
|
+
* 2. Token budget exceeded
|
|
48
|
+
* 3. Definitive answer found
|
|
49
|
+
*/
|
|
50
|
+
protected shouldStop(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Hook: Generate reflective questions
|
|
53
|
+
* Override in subclass or use LMReasoning
|
|
54
|
+
*/
|
|
55
|
+
protected generateQuestions(): Promise<ReflectiveQuestion[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Hook: Search for information
|
|
58
|
+
* Override in subclass or use SearchProviderFactory
|
|
59
|
+
*/
|
|
60
|
+
protected search(_questions: ReflectiveQuestion[]): Promise<SearchResult[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Hook: Read web contents
|
|
63
|
+
* Override in subclass or use JinaProvider
|
|
64
|
+
*/
|
|
65
|
+
protected read(_results: SearchResult[]): Promise<WebContent[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Hook: Reason and extract knowledge
|
|
68
|
+
* Override in subclass or use LMReasoning
|
|
69
|
+
*/
|
|
70
|
+
protected reason(contents: WebContent[]): Promise<KnowledgeItem[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Check if answer is definitive
|
|
73
|
+
* Override in subclass or use LMReasoning
|
|
74
|
+
*/
|
|
75
|
+
protected isAnswerDefinitive(): Promise<boolean>;
|
|
76
|
+
/**
|
|
77
|
+
* Generate final research report
|
|
78
|
+
*/
|
|
79
|
+
protected generateFinalReport(): Promise<ResearchReport>;
|
|
80
|
+
/**
|
|
81
|
+
* Validate configuration
|
|
82
|
+
*/
|
|
83
|
+
private validateConfig;
|
|
84
|
+
/**
|
|
85
|
+
* Get current knowledge base (for testing)
|
|
86
|
+
*/
|
|
87
|
+
getKnowledge(): KnowledgeBase;
|
|
88
|
+
/**
|
|
89
|
+
* Get token tracker (for testing)
|
|
90
|
+
*/
|
|
91
|
+
getTokenTracker(): TokenTracker;
|
|
92
|
+
/**
|
|
93
|
+
* Get trajectory logger (for testing)
|
|
94
|
+
*/
|
|
95
|
+
getLogger(): TrajectoryLogger;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=research-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-engine.d.ts","sourceRoot":"","sources":["../../src/engine/research-engine.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,aAAa,EACd,MAAM,mBAAmB,CAAC;AAG3B;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,cAAc;IACzB,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC;IACnC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;IACnC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAE3C,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAK;IAChC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAK;IAChC,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAErC,MAAM,EAAE,cAAc;IAelC;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IA4DzC;;OAEG;IACH,SAAS,CAAC,UAAU,IAAI,IAAI;IAU5B;;;;;;;OAOG;IACH,SAAS,CAAC,UAAU,IAAI,OAAO;IAqB/B;;;OAGG;cACa,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAWlE;;;OAGG;cACa,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAOjF;;;OAGG;cACa,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOrE;;;OAGG;cACa,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAoBxE;;;OAGG;cACa,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IActD;;OAEG;cACa,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;IAuB9D;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,YAAY,IAAI,aAAa;IAI7B;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,SAAS,IAAI,gBAAgB;CAG9B"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// Research Engine - Template Method Pattern
|
|
2
|
+
// TSK-DR-001
|
|
3
|
+
// REQ: REQ-DR-CORE-001
|
|
4
|
+
// ADR: ADR-v3.4.0-001
|
|
5
|
+
import { KnowledgeBase } from '../knowledge/knowledge-base.js';
|
|
6
|
+
import { TokenTracker } from '../utils/token-tracker.js';
|
|
7
|
+
import { TrajectoryLogger } from '../utils/trajectory-logger.js';
|
|
8
|
+
import { ReportGenerator } from '../reporters/report-generator.js';
|
|
9
|
+
import { InvalidConfigurationError } from '../types/errors.js';
|
|
10
|
+
/**
|
|
11
|
+
* Research Engine - Main orchestrator using Template Method Pattern
|
|
12
|
+
*
|
|
13
|
+
* REQ: REQ-DR-CORE-001 - Iterative search-read-reason cycle
|
|
14
|
+
* ADR: ADR-v3.4.0-001 - Template Method Pattern architecture
|
|
15
|
+
*
|
|
16
|
+
* Flow:
|
|
17
|
+
* 1. initialize()
|
|
18
|
+
* 2. while (!shouldStop())
|
|
19
|
+
* a. generateQuestions()
|
|
20
|
+
* b. search()
|
|
21
|
+
* c. read()
|
|
22
|
+
* d. reason()
|
|
23
|
+
* e. evaluate()
|
|
24
|
+
* 3. generateReport()
|
|
25
|
+
*/
|
|
26
|
+
export class ResearchEngine {
|
|
27
|
+
knowledge;
|
|
28
|
+
tokenTracker;
|
|
29
|
+
logger;
|
|
30
|
+
reportGenerator;
|
|
31
|
+
config;
|
|
32
|
+
iteration = 0;
|
|
33
|
+
startTime = 0;
|
|
34
|
+
definitiveAnswer = null;
|
|
35
|
+
constructor(config) {
|
|
36
|
+
this.validateConfig(config);
|
|
37
|
+
this.config = {
|
|
38
|
+
maxIterations: 10,
|
|
39
|
+
tokenBudget: 15000,
|
|
40
|
+
outputFormat: 'markdown',
|
|
41
|
+
...config,
|
|
42
|
+
};
|
|
43
|
+
this.knowledge = new KnowledgeBase();
|
|
44
|
+
this.tokenTracker = new TokenTracker(this.config.tokenBudget);
|
|
45
|
+
this.logger = new TrajectoryLogger();
|
|
46
|
+
this.reportGenerator = new ReportGenerator();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Main research method - Template Method
|
|
50
|
+
*
|
|
51
|
+
* REQ: REQ-DR-CORE-001 - Iterative cycle
|
|
52
|
+
*/
|
|
53
|
+
async research() {
|
|
54
|
+
this.initialize();
|
|
55
|
+
while (!this.shouldStop()) {
|
|
56
|
+
console.log(`\n🔍 === Iteration ${this.iteration + 1}/${this.config.maxIterations} ===`);
|
|
57
|
+
try {
|
|
58
|
+
// Generate reflective questions
|
|
59
|
+
const questions = await this.generateQuestions();
|
|
60
|
+
// Search for information
|
|
61
|
+
const searchResults = await this.search(questions);
|
|
62
|
+
this.logger.logIteration({
|
|
63
|
+
iteration: this.iteration,
|
|
64
|
+
action: {
|
|
65
|
+
type: 'search',
|
|
66
|
+
query: questions[0]?.question || this.config.query,
|
|
67
|
+
resultsCount: searchResults.length,
|
|
68
|
+
},
|
|
69
|
+
tokensUsed: 0,
|
|
70
|
+
knowledgeGained: 0,
|
|
71
|
+
timestamp: Date.now(),
|
|
72
|
+
});
|
|
73
|
+
// Read web contents
|
|
74
|
+
const contents = await this.read(searchResults);
|
|
75
|
+
// Reason and extract knowledge
|
|
76
|
+
const knowledgeItems = await this.reason(contents);
|
|
77
|
+
this.knowledge.addAll(knowledgeItems);
|
|
78
|
+
this.logger.logIteration({
|
|
79
|
+
iteration: this.iteration,
|
|
80
|
+
action: {
|
|
81
|
+
type: 'reason',
|
|
82
|
+
tokensUsed: 0, // Updated by LMReasoning
|
|
83
|
+
knowledgeGained: knowledgeItems.length,
|
|
84
|
+
},
|
|
85
|
+
tokensUsed: 0,
|
|
86
|
+
knowledgeGained: knowledgeItems.length,
|
|
87
|
+
timestamp: Date.now(),
|
|
88
|
+
});
|
|
89
|
+
// Evaluate if answer is definitive
|
|
90
|
+
if (await this.isAnswerDefinitive()) {
|
|
91
|
+
console.log('✅ Definitive answer found');
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
this.iteration++;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(`❌ Error in iteration ${this.iteration}:`, error);
|
|
98
|
+
// Continue to next iteration on non-fatal errors
|
|
99
|
+
this.iteration++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return this.generateFinalReport();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Initialize research session
|
|
106
|
+
*/
|
|
107
|
+
initialize() {
|
|
108
|
+
this.iteration = 0;
|
|
109
|
+
this.startTime = Date.now();
|
|
110
|
+
this.definitiveAnswer = null;
|
|
111
|
+
console.log(`🚀 Starting research: "${this.config.query}"`);
|
|
112
|
+
console.log(` Max iterations: ${this.config.maxIterations}`);
|
|
113
|
+
console.log(` Token budget: ${this.config.tokenBudget}`);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if research should stop
|
|
117
|
+
*
|
|
118
|
+
* Stopping conditions:
|
|
119
|
+
* 1. Max iterations reached
|
|
120
|
+
* 2. Token budget exceeded
|
|
121
|
+
* 3. Definitive answer found
|
|
122
|
+
*/
|
|
123
|
+
shouldStop() {
|
|
124
|
+
// Max iterations
|
|
125
|
+
if (this.iteration >= this.config.maxIterations) {
|
|
126
|
+
console.log('⏹️ Max iterations reached');
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
// Token budget exceeded
|
|
130
|
+
if (this.tokenTracker.isExceeded()) {
|
|
131
|
+
console.log('⏹️ Token budget exceeded');
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
// Definitive answer found
|
|
135
|
+
if (this.definitiveAnswer !== null) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Hook: Generate reflective questions
|
|
142
|
+
* Override in subclass or use LMReasoning
|
|
143
|
+
*/
|
|
144
|
+
async generateQuestions() {
|
|
145
|
+
// Default implementation: return initial query as question
|
|
146
|
+
return [
|
|
147
|
+
{
|
|
148
|
+
question: this.config.query,
|
|
149
|
+
reason: 'Initial research question',
|
|
150
|
+
priority: 5,
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Hook: Search for information
|
|
156
|
+
* Override in subclass or use SearchProviderFactory
|
|
157
|
+
*/
|
|
158
|
+
async search(_questions) {
|
|
159
|
+
// Default implementation: return empty results
|
|
160
|
+
// Will be implemented in TSK-DR-006 (SearchProviderFactory)
|
|
161
|
+
console.log('⚠️ search() not implemented yet, returning empty results');
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Hook: Read web contents
|
|
166
|
+
* Override in subclass or use JinaProvider
|
|
167
|
+
*/
|
|
168
|
+
async read(_results) {
|
|
169
|
+
// Default implementation: return empty contents
|
|
170
|
+
// Will be implemented in TSK-DR-007 (JinaProvider)
|
|
171
|
+
console.log('⚠️ read() not implemented yet, returning empty contents');
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Hook: Reason and extract knowledge
|
|
176
|
+
* Override in subclass or use LMReasoning
|
|
177
|
+
*/
|
|
178
|
+
async reason(contents) {
|
|
179
|
+
// Default implementation: extract basic knowledge
|
|
180
|
+
const knowledgeItems = [];
|
|
181
|
+
for (const content of contents) {
|
|
182
|
+
for (const fact of content.extractedFacts) {
|
|
183
|
+
knowledgeItems.push({
|
|
184
|
+
type: 'fact',
|
|
185
|
+
content: fact,
|
|
186
|
+
sources: [content.url],
|
|
187
|
+
relevance: 0.7,
|
|
188
|
+
iteration: this.iteration,
|
|
189
|
+
timestamp: Date.now(),
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return knowledgeItems;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if answer is definitive
|
|
197
|
+
* Override in subclass or use LMReasoning
|
|
198
|
+
*/
|
|
199
|
+
async isAnswerDefinitive() {
|
|
200
|
+
// Default implementation: check knowledge count
|
|
201
|
+
// Will be enhanced with LM reasoning in TSK-DR-010
|
|
202
|
+
const knowledgeCount = this.knowledge.size();
|
|
203
|
+
// Consider answer definitive if we have 10+ knowledge items
|
|
204
|
+
if (knowledgeCount >= 10) {
|
|
205
|
+
this.definitiveAnswer = this.knowledge.getSummary(5);
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Generate final research report
|
|
212
|
+
*/
|
|
213
|
+
async generateFinalReport() {
|
|
214
|
+
const durationMs = Date.now() - this.startTime;
|
|
215
|
+
const totalTokens = this.tokenTracker.getUsed();
|
|
216
|
+
console.log(`\n📊 Research completed in ${(durationMs / 1000).toFixed(2)}s`);
|
|
217
|
+
console.log(` Iterations: ${this.iteration}`);
|
|
218
|
+
console.log(` Tokens used: ${totalTokens}/${this.config.tokenBudget}`);
|
|
219
|
+
console.log(` Knowledge items: ${this.knowledge.size()}`);
|
|
220
|
+
const report = await this.reportGenerator.generate(this.config.query, this.knowledge, this.logger.getLogs(), {
|
|
221
|
+
totalTokens,
|
|
222
|
+
durationMs,
|
|
223
|
+
iterations: this.iteration,
|
|
224
|
+
});
|
|
225
|
+
return report;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Validate configuration
|
|
229
|
+
*/
|
|
230
|
+
validateConfig(config) {
|
|
231
|
+
if (!config.query || config.query.trim().length === 0) {
|
|
232
|
+
throw new InvalidConfigurationError('Query is required');
|
|
233
|
+
}
|
|
234
|
+
if (config.maxIterations !== undefined && config.maxIterations <= 0) {
|
|
235
|
+
throw new InvalidConfigurationError('maxIterations must be positive');
|
|
236
|
+
}
|
|
237
|
+
if (config.tokenBudget !== undefined && config.tokenBudget <= 0) {
|
|
238
|
+
throw new InvalidConfigurationError('tokenBudget must be positive');
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get current knowledge base (for testing)
|
|
243
|
+
*/
|
|
244
|
+
getKnowledge() {
|
|
245
|
+
return this.knowledge;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get token tracker (for testing)
|
|
249
|
+
*/
|
|
250
|
+
getTokenTracker() {
|
|
251
|
+
return this.tokenTracker;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get trajectory logger (for testing)
|
|
255
|
+
*/
|
|
256
|
+
getLogger() {
|
|
257
|
+
return this.logger;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=research-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-engine.js","sourceRoot":"","sources":["../../src/engine/research-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { ResearchEngine } from './engine/research-engine.js';
|
|
2
|
+
export { KnowledgeBase } from './knowledge/knowledge-base.js';
|
|
3
|
+
export { SearchProviderFactory, createSearchProviderFactory } from './providers/provider-factory.js';
|
|
4
|
+
export type { ProviderConfig } from './providers/provider-factory.js';
|
|
5
|
+
export { JinaProvider, createJinaProvider } from './providers/jina-provider.js';
|
|
6
|
+
export { BraveProvider, createBraveProvider } from './providers/brave-provider.js';
|
|
7
|
+
export { DuckDuckGoProvider, createDuckDuckGoProvider } from './providers/duckduckgo-provider.js';
|
|
8
|
+
export { LMReasoning, createLMReasoning } from './reasoning/lm-reasoning.js';
|
|
9
|
+
export type { LMProvider, LMGenerationOptions } from './reasoning/lm-reasoning.js';
|
|
10
|
+
export { VSCodeLMProvider, createVSCodeLMProvider } from './providers/vscode-lm-provider.js';
|
|
11
|
+
export { ExpertIntegration, createExpertIntegration } from './providers/expert-integration.js';
|
|
12
|
+
export { SecretManager } from './security/secret-manager.js';
|
|
13
|
+
export { ContentSanitizer } from './security/content-sanitizer.js';
|
|
14
|
+
export { SecureLogger } from './security/secure-logger.js';
|
|
15
|
+
export * from './performance/index.js';
|
|
16
|
+
export { TokenTracker } from './utils/token-tracker.js';
|
|
17
|
+
export { TrajectoryLogger } from './utils/trajectory-logger.js';
|
|
18
|
+
export { ReportGenerator } from './reporters/report-generator.js';
|
|
19
|
+
export * from './mcp/index.js';
|
|
20
|
+
export type * from './types/index.js';
|
|
21
|
+
export * from './types/errors.js';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACrG,YAAY,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAGlG,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAG/F,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,cAAc,gBAAgB,CAAC;AAa/B,mBAAmB,kBAAkB,CAAC;AAGtC,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Deep Research Integration - Public API
|
|
2
|
+
// Version: 3.4.0
|
|
3
|
+
// REQ: REQ-DR-CORE-001 through REQ-DR-NFR-006
|
|
4
|
+
// Core Engine
|
|
5
|
+
export { ResearchEngine } from './engine/research-engine.js';
|
|
6
|
+
export { KnowledgeBase } from './knowledge/knowledge-base.js';
|
|
7
|
+
// Providers
|
|
8
|
+
export { SearchProviderFactory, createSearchProviderFactory } from './providers/provider-factory.js';
|
|
9
|
+
export { JinaProvider, createJinaProvider } from './providers/jina-provider.js';
|
|
10
|
+
export { BraveProvider, createBraveProvider } from './providers/brave-provider.js';
|
|
11
|
+
export { DuckDuckGoProvider, createDuckDuckGoProvider } from './providers/duckduckgo-provider.js';
|
|
12
|
+
// Reasoning (TSK-DR-010~012)
|
|
13
|
+
export { LMReasoning, createLMReasoning } from './reasoning/lm-reasoning.js';
|
|
14
|
+
export { VSCodeLMProvider, createVSCodeLMProvider } from './providers/vscode-lm-provider.js';
|
|
15
|
+
export { ExpertIntegration, createExpertIntegration } from './providers/expert-integration.js';
|
|
16
|
+
// Security (TSK-DR-013~015)
|
|
17
|
+
export { SecretManager } from './security/secret-manager.js';
|
|
18
|
+
export { ContentSanitizer } from './security/content-sanitizer.js';
|
|
19
|
+
export { SecureLogger } from './security/secure-logger.js';
|
|
20
|
+
// Performance (TSK-DR-016~018)
|
|
21
|
+
export * from './performance/index.js';
|
|
22
|
+
// Utils
|
|
23
|
+
export { TokenTracker } from './utils/token-tracker.js';
|
|
24
|
+
export { TrajectoryLogger } from './utils/trajectory-logger.js';
|
|
25
|
+
export { ReportGenerator } from './reporters/report-generator.js';
|
|
26
|
+
// MCP Tools (TSK-DR-020)
|
|
27
|
+
export * from './mcp/index.js';
|
|
28
|
+
// Errors
|
|
29
|
+
export * from './types/errors.js';
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,iBAAiB;AACjB,8CAA8C;AAE9C,cAAc;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,YAAY;AACZ,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAErG,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAElG,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAE/F,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,+BAA+B;AAC/B,cAAc,wBAAwB,CAAC;AAEvC,QAAQ;AACR,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,yBAAyB;AACzB,cAAc,gBAAgB,CAAC;AAe/B,SAAS;AACT,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { Entity, Relation, QueryFilter, SearchOptions, TraverseOptions } from '@musubix/knowledge';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for Knowledge Store integration
|
|
4
|
+
*/
|
|
5
|
+
export interface KnowledgeStoreConfig {
|
|
6
|
+
/** Base path for knowledge storage (default: .knowledge) */
|
|
7
|
+
basePath?: string;
|
|
8
|
+
/** Auto-save on updates */
|
|
9
|
+
autoSave?: boolean;
|
|
10
|
+
/** Load on initialization */
|
|
11
|
+
autoLoad?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Knowledge item from research
|
|
15
|
+
*/
|
|
16
|
+
export interface KnowledgeItem {
|
|
17
|
+
content: string;
|
|
18
|
+
type: 'fact' | 'concept' | 'relation' | 'source';
|
|
19
|
+
confidence?: number;
|
|
20
|
+
iteration: number;
|
|
21
|
+
metadata?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Storage result
|
|
25
|
+
*/
|
|
26
|
+
export interface StorageResult {
|
|
27
|
+
entityId: string;
|
|
28
|
+
stored: boolean;
|
|
29
|
+
message?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Query result with context
|
|
33
|
+
*/
|
|
34
|
+
export interface KnowledgeQueryResult {
|
|
35
|
+
entities: Entity[];
|
|
36
|
+
relationCount: number;
|
|
37
|
+
depth: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Knowledge Store Integration
|
|
41
|
+
*
|
|
42
|
+
* Integrates Deep Research with @musubix/knowledge package
|
|
43
|
+
* for persistent knowledge graph storage.
|
|
44
|
+
*
|
|
45
|
+
* Features:
|
|
46
|
+
* - Store research results as entities
|
|
47
|
+
* - Query knowledge graph
|
|
48
|
+
* - Track relations between findings
|
|
49
|
+
* - Git-friendly JSON storage
|
|
50
|
+
* - Export/import knowledge base
|
|
51
|
+
*/
|
|
52
|
+
export declare class KnowledgeStoreIntegration {
|
|
53
|
+
private store;
|
|
54
|
+
private config;
|
|
55
|
+
private entityCounter;
|
|
56
|
+
constructor(config?: KnowledgeStoreConfig);
|
|
57
|
+
/**
|
|
58
|
+
* Initialize the knowledge store
|
|
59
|
+
*/
|
|
60
|
+
initialize(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Check if knowledge store is available
|
|
63
|
+
*/
|
|
64
|
+
isAvailable(): Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* Store a knowledge item from research
|
|
67
|
+
*/
|
|
68
|
+
storeKnowledgeItem(item: KnowledgeItem, query: string): Promise<StorageResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Query knowledge base
|
|
71
|
+
*/
|
|
72
|
+
query(filter: QueryFilter): Promise<Entity[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Search knowledge base by text
|
|
75
|
+
*/
|
|
76
|
+
search(text: string, options?: SearchOptions): Promise<Entity[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Get related entities (graph traversal)
|
|
79
|
+
*/
|
|
80
|
+
getRelated(entityId: string, options?: TraverseOptions): Promise<KnowledgeQueryResult>;
|
|
81
|
+
/**
|
|
82
|
+
* Add relation between entities
|
|
83
|
+
*/
|
|
84
|
+
addRelation(relation: Omit<Relation, 'id'>): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Export knowledge base
|
|
87
|
+
*/
|
|
88
|
+
export(): Promise<string>;
|
|
89
|
+
/**
|
|
90
|
+
* Get statistics
|
|
91
|
+
*/
|
|
92
|
+
getStats(): {
|
|
93
|
+
entityCount: number;
|
|
94
|
+
relationCount: number;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Save knowledge store to disk
|
|
98
|
+
*/
|
|
99
|
+
save(): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Generate entity ID
|
|
102
|
+
*/
|
|
103
|
+
private generateEntityId;
|
|
104
|
+
/**
|
|
105
|
+
* Extract title from content (first 50 chars)
|
|
106
|
+
*/
|
|
107
|
+
private extractTitle;
|
|
108
|
+
/**
|
|
109
|
+
* Load @musubix/knowledge package dynamically
|
|
110
|
+
*/
|
|
111
|
+
private loadKnowledge;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Factory function to create Knowledge Store integration
|
|
115
|
+
*/
|
|
116
|
+
export declare function createKnowledgeStoreIntegration(config?: KnowledgeStoreConfig): KnowledgeStoreIntegration;
|
|
117
|
+
//# sourceMappingURL=knowledge-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../src/integration/knowledge-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EAER,WAAW,EACX,aAAa,EACb,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAWD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,aAAa,CAAK;gBAEd,MAAM,CAAC,EAAE,oBAAoB;IAIzC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAWrC;;OAEG;IACG,kBAAkB,CACtB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC;IA0CzB;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQnD;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQtE;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,oBAAoB,CAAC;IAehC;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAmB/B;;OAEG;IACH,QAAQ,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAQ1D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;YACW,aAAa;CAS5B;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,CAAC,EAAE,oBAAoB,GAC5B,yBAAyB,CAE3B"}
|