@nahisaho/musubix-neural-search 2.0.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.
Files changed (66) hide show
  1. package/README.md +55 -0
  2. package/dist/errors.d.ts +48 -0
  3. package/dist/errors.d.ts.map +1 -0
  4. package/dist/errors.js +70 -0
  5. package/dist/errors.js.map +1 -0
  6. package/dist/index.d.ts +14 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +16 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/learning/ModelUpdater.d.ts +49 -0
  11. package/dist/learning/ModelUpdater.d.ts.map +1 -0
  12. package/dist/learning/ModelUpdater.js +98 -0
  13. package/dist/learning/ModelUpdater.js.map +1 -0
  14. package/dist/learning/OnlineLearner.d.ts +59 -0
  15. package/dist/learning/OnlineLearner.d.ts.map +1 -0
  16. package/dist/learning/OnlineLearner.js +155 -0
  17. package/dist/learning/OnlineLearner.js.map +1 -0
  18. package/dist/learning/TrajectoryLog.d.ts +52 -0
  19. package/dist/learning/TrajectoryLog.d.ts.map +1 -0
  20. package/dist/learning/TrajectoryLog.js +96 -0
  21. package/dist/learning/TrajectoryLog.js.map +1 -0
  22. package/dist/learning/index.d.ts +10 -0
  23. package/dist/learning/index.d.ts.map +1 -0
  24. package/dist/learning/index.js +8 -0
  25. package/dist/learning/index.js.map +1 -0
  26. package/dist/scorer/BranchScorer.d.ts +70 -0
  27. package/dist/scorer/BranchScorer.d.ts.map +1 -0
  28. package/dist/scorer/BranchScorer.js +161 -0
  29. package/dist/scorer/BranchScorer.js.map +1 -0
  30. package/dist/scorer/ContextEncoder.d.ts +59 -0
  31. package/dist/scorer/ContextEncoder.d.ts.map +1 -0
  32. package/dist/scorer/ContextEncoder.js +149 -0
  33. package/dist/scorer/ContextEncoder.js.map +1 -0
  34. package/dist/scorer/EmbeddingModel.d.ts +39 -0
  35. package/dist/scorer/EmbeddingModel.d.ts.map +1 -0
  36. package/dist/scorer/EmbeddingModel.js +104 -0
  37. package/dist/scorer/EmbeddingModel.js.map +1 -0
  38. package/dist/scorer/index.d.ts +9 -0
  39. package/dist/scorer/index.d.ts.map +1 -0
  40. package/dist/scorer/index.js +8 -0
  41. package/dist/scorer/index.js.map +1 -0
  42. package/dist/search/BeamSearch.d.ts +32 -0
  43. package/dist/search/BeamSearch.d.ts.map +1 -0
  44. package/dist/search/BeamSearch.js +139 -0
  45. package/dist/search/BeamSearch.js.map +1 -0
  46. package/dist/search/BestFirstSearch.d.ts +23 -0
  47. package/dist/search/BestFirstSearch.d.ts.map +1 -0
  48. package/dist/search/BestFirstSearch.js +110 -0
  49. package/dist/search/BestFirstSearch.js.map +1 -0
  50. package/dist/search/PriorityQueue.d.ts +54 -0
  51. package/dist/search/PriorityQueue.d.ts.map +1 -0
  52. package/dist/search/PriorityQueue.js +114 -0
  53. package/dist/search/PriorityQueue.js.map +1 -0
  54. package/dist/search/PruningManager.d.ts +62 -0
  55. package/dist/search/PruningManager.d.ts.map +1 -0
  56. package/dist/search/PruningManager.js +188 -0
  57. package/dist/search/PruningManager.js.map +1 -0
  58. package/dist/search/index.d.ts +10 -0
  59. package/dist/search/index.d.ts.map +1 -0
  60. package/dist/search/index.js +9 -0
  61. package/dist/search/index.js.map +1 -0
  62. package/dist/types.d.ts +416 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +7 -0
  65. package/dist/types.js.map +1 -0
  66. package/package.json +59 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Pruning Manager
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Learning-based pruning for search
5
+ * Traces to: REQ-NS-003 (学習ベースプルーニング)
6
+ */
7
+ import type { IPruningManager, PruningDecision, PruningStatistics, SearchContext, SearchState } from '../types.js';
8
+ /**
9
+ * Pruning configuration
10
+ */
11
+ export interface PruningConfig {
12
+ scoreThreshold: number;
13
+ maxDepth: number;
14
+ enableLearning: boolean;
15
+ }
16
+ /**
17
+ * Pruning manager implementation
18
+ */
19
+ export declare class PruningManager implements IPruningManager {
20
+ private readonly config;
21
+ private readonly seenStates;
22
+ private readonly learnedPatterns;
23
+ private stats;
24
+ constructor(config?: Partial<PruningConfig>);
25
+ /**
26
+ * Decide whether to prune a state
27
+ */
28
+ shouldPrune(state: SearchState, context: SearchContext): PruningDecision;
29
+ /**
30
+ * Learn from pruning outcome
31
+ */
32
+ learn(state: SearchState, outcome: 'correct' | 'incorrect'): void;
33
+ /**
34
+ * Get pruning statistics
35
+ */
36
+ getStatistics(): PruningStatistics;
37
+ /**
38
+ * Get learned patterns count
39
+ */
40
+ getLearnedPatternsCount(): number;
41
+ /**
42
+ * Reset state (for new search)
43
+ */
44
+ reset(): void;
45
+ /**
46
+ * Hash a state for duplicate detection
47
+ */
48
+ private hashState;
49
+ /**
50
+ * Extract pattern from state for learning
51
+ */
52
+ private extractPattern;
53
+ /**
54
+ * Check if state matches learned patterns to prune
55
+ */
56
+ private checkLearnedPatterns;
57
+ /**
58
+ * Check if state is a dead end
59
+ */
60
+ private isDeadEnd;
61
+ }
62
+ //# sourceMappingURL=PruningManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PruningManager.d.ts","sourceRoot":"","sources":["../../src/search/PruningManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AA8BD;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAC9D,OAAO,CAAC,KAAK,CAAoB;gBAErB,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM;IAY/C;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,eAAe;IAgDxE;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,IAAI;IAkCjE;;OAEG;IACH,aAAa,IAAI,iBAAiB;IAIlC;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAIjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,SAAS;CAsBlB"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Pruning Manager
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Learning-based pruning for search
5
+ * Traces to: REQ-NS-003 (学習ベースプルーニング)
6
+ */
7
+ /**
8
+ * Default configuration
9
+ */
10
+ const DEFAULT_CONFIG = {
11
+ scoreThreshold: 0.2,
12
+ maxDepth: 15,
13
+ enableLearning: true,
14
+ };
15
+ /**
16
+ * Pruning manager implementation
17
+ */
18
+ export class PruningManager {
19
+ config;
20
+ seenStates;
21
+ learnedPatterns;
22
+ stats;
23
+ constructor(config = {}) {
24
+ this.config = { ...DEFAULT_CONFIG, ...config };
25
+ this.seenStates = new Set();
26
+ this.learnedPatterns = new Map();
27
+ this.stats = {
28
+ totalDecisions: 0,
29
+ correctPrunes: 0,
30
+ incorrectPrunes: 0,
31
+ accuracy: 1.0,
32
+ };
33
+ }
34
+ /**
35
+ * Decide whether to prune a state
36
+ */
37
+ shouldPrune(state, context) {
38
+ this.stats.totalDecisions++;
39
+ // Check for duplicate
40
+ const stateHash = this.hashState(state);
41
+ if (this.seenStates.has(stateHash)) {
42
+ return {
43
+ prune: true,
44
+ reason: 'duplicate',
45
+ confidence: 1.0,
46
+ };
47
+ }
48
+ this.seenStates.add(stateHash);
49
+ // Check depth limit
50
+ if (state.depth > this.config.maxDepth) {
51
+ return {
52
+ prune: true,
53
+ reason: 'resource_limit',
54
+ confidence: 0.9,
55
+ };
56
+ }
57
+ // Check learned patterns
58
+ if (this.config.enableLearning) {
59
+ const learnedDecision = this.checkLearnedPatterns(state);
60
+ if (learnedDecision) {
61
+ return learnedDecision;
62
+ }
63
+ }
64
+ // Check for dead ends (empty code or obvious failures)
65
+ if (this.isDeadEnd(state, context)) {
66
+ return {
67
+ prune: true,
68
+ reason: 'dead_end',
69
+ confidence: 0.8,
70
+ };
71
+ }
72
+ // Default: don't prune
73
+ return {
74
+ prune: false,
75
+ reason: 'low_score', // Will only be used if prune is true
76
+ confidence: 0.5,
77
+ };
78
+ }
79
+ /**
80
+ * Learn from pruning outcome
81
+ */
82
+ learn(state, outcome) {
83
+ if (!this.config.enableLearning)
84
+ return;
85
+ if (outcome === 'correct') {
86
+ this.stats.correctPrunes++;
87
+ }
88
+ else {
89
+ this.stats.incorrectPrunes++;
90
+ }
91
+ // Update accuracy
92
+ const total = this.stats.correctPrunes + this.stats.incorrectPrunes;
93
+ this.stats.accuracy = total > 0
94
+ ? this.stats.correctPrunes / total
95
+ : 1.0;
96
+ // Learn pattern
97
+ const pattern = this.extractPattern(state);
98
+ const existing = this.learnedPatterns.get(pattern);
99
+ if (existing) {
100
+ existing.sampleCount++;
101
+ existing.pruneRate =
102
+ (existing.pruneRate * (existing.sampleCount - 1) +
103
+ (outcome === 'correct' ? 1 : 0)) /
104
+ existing.sampleCount;
105
+ }
106
+ else {
107
+ this.learnedPatterns.set(pattern, {
108
+ pattern,
109
+ pruneRate: outcome === 'correct' ? 1 : 0,
110
+ sampleCount: 1,
111
+ });
112
+ }
113
+ }
114
+ /**
115
+ * Get pruning statistics
116
+ */
117
+ getStatistics() {
118
+ return { ...this.stats };
119
+ }
120
+ /**
121
+ * Get learned patterns count
122
+ */
123
+ getLearnedPatternsCount() {
124
+ return this.learnedPatterns.size;
125
+ }
126
+ /**
127
+ * Reset state (for new search)
128
+ */
129
+ reset() {
130
+ this.seenStates.clear();
131
+ }
132
+ /**
133
+ * Hash a state for duplicate detection
134
+ */
135
+ hashState(state) {
136
+ return `${state.code}:${state.depth}`;
137
+ }
138
+ /**
139
+ * Extract pattern from state for learning
140
+ */
141
+ extractPattern(state) {
142
+ // Simple pattern: code structure signature
143
+ const codeSignature = state.code
144
+ .replace(/\s+/g, ' ')
145
+ .replace(/[a-z]+/g, 'x')
146
+ .replace(/[0-9]+/g, 'n')
147
+ .substring(0, 50);
148
+ return codeSignature;
149
+ }
150
+ /**
151
+ * Check if state matches learned patterns to prune
152
+ */
153
+ checkLearnedPatterns(state) {
154
+ const pattern = this.extractPattern(state);
155
+ const learned = this.learnedPatterns.get(pattern);
156
+ if (learned && learned.sampleCount >= 3 && learned.pruneRate > 0.7) {
157
+ return {
158
+ prune: true,
159
+ reason: 'learned_pattern',
160
+ confidence: learned.pruneRate,
161
+ };
162
+ }
163
+ return null;
164
+ }
165
+ /**
166
+ * Check if state is a dead end
167
+ */
168
+ isDeadEnd(state, _context) {
169
+ // Empty code
170
+ if (!state.code || state.code.trim().length === 0) {
171
+ return true;
172
+ }
173
+ // Syntax error indicators
174
+ const errorPatterns = [
175
+ 'SyntaxError',
176
+ 'TypeError',
177
+ 'undefined is not',
178
+ 'null is not',
179
+ ];
180
+ for (const pattern of errorPatterns) {
181
+ if (state.code.includes(pattern)) {
182
+ return true;
183
+ }
184
+ }
185
+ return false;
186
+ }
187
+ }
188
+ //# sourceMappingURL=PruningManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PruningManager.js","sourceRoot":"","sources":["../../src/search/PruningManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Search Engine Module
3
+ * @module @nahisaho/musubix-neural-search/search
4
+ */
5
+ export { PriorityQueue } from './PriorityQueue.js';
6
+ export { BeamSearch } from './BeamSearch.js';
7
+ export { BestFirstSearch } from './BestFirstSearch.js';
8
+ export { PruningManager } from './PruningManager.js';
9
+ export type { PruningConfig } from './PruningManager.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Search Engine Module
3
+ * @module @nahisaho/musubix-neural-search/search
4
+ */
5
+ export { PriorityQueue } from './PriorityQueue.js';
6
+ export { BeamSearch } from './BeamSearch.js';
7
+ export { BestFirstSearch } from './BestFirstSearch.js';
8
+ export { PruningManager } from './PruningManager.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,416 @@
1
+ /**
2
+ * Neural Search Types
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Type definitions for neural search engine
5
+ */
6
+ /**
7
+ * Vector embedding representation
8
+ */
9
+ export type Embedding = Float32Array | number[];
10
+ /**
11
+ * Configuration for embedding model
12
+ */
13
+ export interface EmbeddingConfig {
14
+ readonly modelName: string;
15
+ readonly dimension: number;
16
+ readonly maxLength: number;
17
+ readonly poolingStrategy: 'mean' | 'cls' | 'max';
18
+ }
19
+ /**
20
+ * Embedding model interface
21
+ * Traces to: REQ-NS-001 (分岐スコアリング)
22
+ */
23
+ export interface IEmbeddingModel {
24
+ /**
25
+ * Embed source code
26
+ */
27
+ embedCode(code: string): Promise<Embedding>;
28
+ /**
29
+ * Embed specification/requirement
30
+ */
31
+ embedSpec(spec: string): Promise<Embedding>;
32
+ /**
33
+ * Calculate similarity between embeddings
34
+ */
35
+ similarity(a: Embedding, b: Embedding): number;
36
+ /**
37
+ * Batch embed multiple texts
38
+ */
39
+ embedBatch(texts: string[]): Promise<Embedding[]>;
40
+ }
41
+ /**
42
+ * Search state representing a partial synthesis
43
+ */
44
+ export interface SearchState {
45
+ readonly id: string;
46
+ readonly code: string;
47
+ readonly parent?: string;
48
+ readonly depth: number;
49
+ readonly metadata: Record<string, unknown>;
50
+ }
51
+ /**
52
+ * Branch in the search tree
53
+ */
54
+ export interface Branch {
55
+ readonly from: SearchState;
56
+ readonly to: SearchState;
57
+ readonly action: string;
58
+ readonly features: BranchFeatures;
59
+ }
60
+ /**
61
+ * Features extracted from a branch
62
+ */
63
+ export interface BranchFeatures {
64
+ readonly codeEmbedding: Embedding;
65
+ readonly specSimilarity: number;
66
+ readonly syntaxValid: boolean;
67
+ readonly typeChecks: boolean;
68
+ readonly complexity: number;
69
+ readonly novelty: number;
70
+ }
71
+ /**
72
+ * Score result for a branch
73
+ */
74
+ export interface BranchScore {
75
+ readonly branch: Branch;
76
+ readonly score: number;
77
+ readonly confidence: number;
78
+ readonly components: ScoreComponents;
79
+ }
80
+ /**
81
+ * Components of the score
82
+ */
83
+ export interface ScoreComponents {
84
+ readonly specAlignment: number;
85
+ readonly codeQuality: number;
86
+ readonly novelty: number;
87
+ readonly feasibility: number;
88
+ }
89
+ /**
90
+ * Branch scorer interface
91
+ * Traces to: REQ-NS-001 (分岐スコアリング)
92
+ */
93
+ export interface IBranchScorer {
94
+ /**
95
+ * Score a single branch
96
+ */
97
+ score(branch: Branch, context: SearchContext): Promise<BranchScore>;
98
+ /**
99
+ * Score multiple branches
100
+ */
101
+ scoreBatch(branches: Branch[], context: SearchContext): Promise<BranchScore[]>;
102
+ /**
103
+ * Update scorer with feedback
104
+ */
105
+ update(feedback: ScoreFeedback): void;
106
+ }
107
+ /**
108
+ * Context for search scoring
109
+ */
110
+ export interface SearchContext {
111
+ readonly specification: string;
112
+ readonly specEmbedding: Embedding;
113
+ readonly constraints: string[];
114
+ readonly history: SearchState[];
115
+ }
116
+ /**
117
+ * Feedback for score adjustment
118
+ */
119
+ export interface ScoreFeedback {
120
+ readonly branchId: string;
121
+ readonly actualOutcome: 'success' | 'failure' | 'partial';
122
+ readonly reason?: string;
123
+ }
124
+ /**
125
+ * Encoded context representation
126
+ */
127
+ export interface EncodedContext {
128
+ readonly embedding: Embedding;
129
+ readonly features: ContextFeatures;
130
+ readonly tokens: number;
131
+ }
132
+ /**
133
+ * Features extracted from context
134
+ */
135
+ export interface ContextFeatures {
136
+ readonly specLength: number;
137
+ readonly constraintCount: number;
138
+ readonly complexityEstimate: number;
139
+ readonly domainSignals: string[];
140
+ }
141
+ /**
142
+ * Context encoder interface
143
+ */
144
+ export interface IContextEncoder {
145
+ /**
146
+ * Encode full search context
147
+ */
148
+ encode(context: SearchContext): Promise<EncodedContext>;
149
+ /**
150
+ * Encode specification only
151
+ */
152
+ encodeSpec(spec: string): Promise<EncodedContext>;
153
+ /**
154
+ * Update encoder with learned patterns
155
+ */
156
+ updatePatterns(patterns: string[]): void;
157
+ }
158
+ /**
159
+ * Search configuration
160
+ */
161
+ export interface SearchConfig {
162
+ readonly maxDepth: number;
163
+ readonly maxIterations: number;
164
+ readonly timeout: number;
165
+ readonly beamWidth?: number;
166
+ readonly pruneThreshold?: number;
167
+ }
168
+ /**
169
+ * Search result
170
+ */
171
+ export interface SearchResult {
172
+ readonly state: SearchState;
173
+ readonly score: number;
174
+ readonly path: SearchState[];
175
+ readonly iterations: number;
176
+ readonly pruned: number;
177
+ }
178
+ /**
179
+ * Beam search interface
180
+ * Traces to: REQ-NS-002 (探索優先順位付け)
181
+ */
182
+ export interface IBeamSearch {
183
+ /**
184
+ * Execute beam search
185
+ */
186
+ search(initial: SearchState, expand: (state: SearchState) => Promise<Branch[]>, scorer: IBranchScorer, context: SearchContext, config: SearchConfig): Promise<SearchResult[]>;
187
+ /**
188
+ * Get current beam
189
+ */
190
+ getCurrentBeam(): SearchState[];
191
+ /**
192
+ * Get search statistics
193
+ */
194
+ getStatistics(): SearchStatistics;
195
+ }
196
+ /**
197
+ * Best-first search interface
198
+ */
199
+ export interface IBestFirstSearch {
200
+ /**
201
+ * Execute best-first search
202
+ */
203
+ search(initial: SearchState, expand: (state: SearchState) => Promise<Branch[]>, scorer: IBranchScorer, context: SearchContext, config: SearchConfig): Promise<SearchResult>;
204
+ /**
205
+ * Get open list size
206
+ */
207
+ getOpenListSize(): number;
208
+ }
209
+ /**
210
+ * Search statistics
211
+ */
212
+ export interface SearchStatistics {
213
+ readonly totalExpanded: number;
214
+ readonly totalPruned: number;
215
+ readonly maxDepthReached: number;
216
+ readonly averageScore: number;
217
+ readonly timeElapsed: number;
218
+ }
219
+ /**
220
+ * Pruning decision
221
+ */
222
+ export interface PruningDecision {
223
+ readonly prune: boolean;
224
+ readonly reason: PruningReason;
225
+ readonly confidence: number;
226
+ }
227
+ /**
228
+ * Pruning reason
229
+ */
230
+ export type PruningReason = 'low_score' | 'duplicate' | 'dead_end' | 'resource_limit' | 'learned_pattern';
231
+ /**
232
+ * Pruning manager interface
233
+ * Traces to: REQ-NS-003 (学習ベースプルーニング)
234
+ */
235
+ export interface IPruningManager {
236
+ /**
237
+ * Decide whether to prune a state
238
+ */
239
+ shouldPrune(state: SearchState, context: SearchContext): PruningDecision;
240
+ /**
241
+ * Learn from pruning outcome
242
+ */
243
+ learn(state: SearchState, outcome: 'correct' | 'incorrect'): void;
244
+ /**
245
+ * Get pruning statistics
246
+ */
247
+ getStatistics(): PruningStatistics;
248
+ }
249
+ /**
250
+ * Pruning statistics
251
+ */
252
+ export interface PruningStatistics {
253
+ readonly totalDecisions: number;
254
+ readonly correctPrunes: number;
255
+ readonly incorrectPrunes: number;
256
+ readonly accuracy: number;
257
+ }
258
+ /**
259
+ * Search trajectory
260
+ * Traces to: REQ-NS-004 (探索履歴学習)
261
+ */
262
+ export interface SearchTrajectory {
263
+ readonly id: string;
264
+ readonly specification: string;
265
+ readonly path: TrajectoryStep[];
266
+ readonly outcome: TrajectoryOutcome;
267
+ readonly timestamp: Date;
268
+ }
269
+ /**
270
+ * Step in a trajectory
271
+ */
272
+ export interface TrajectoryStep {
273
+ readonly state: SearchState;
274
+ readonly score: number;
275
+ readonly action: string;
276
+ readonly duration: number;
277
+ }
278
+ /**
279
+ * Outcome of a trajectory
280
+ */
281
+ export interface TrajectoryOutcome {
282
+ readonly success: boolean;
283
+ readonly finalScore: number;
284
+ readonly reason?: string;
285
+ readonly userFeedback?: 'accept' | 'reject' | 'modify';
286
+ }
287
+ /**
288
+ * Trajectory log interface
289
+ */
290
+ export interface ITrajectoryLog {
291
+ /**
292
+ * Log a completed trajectory
293
+ */
294
+ log(trajectory: SearchTrajectory): void;
295
+ /**
296
+ * Query trajectories by specification
297
+ */
298
+ queryBySpec(spec: string, limit?: number): SearchTrajectory[];
299
+ /**
300
+ * Get successful trajectories
301
+ */
302
+ getSuccessful(limit?: number): SearchTrajectory[];
303
+ /**
304
+ * Get statistics
305
+ */
306
+ getStatistics(): TrajectoryStatistics;
307
+ }
308
+ /**
309
+ * Trajectory statistics
310
+ */
311
+ export interface TrajectoryStatistics {
312
+ readonly totalTrajectories: number;
313
+ readonly successRate: number;
314
+ readonly averageLength: number;
315
+ readonly averageDuration: number;
316
+ }
317
+ /**
318
+ * Learning update
319
+ */
320
+ export interface LearningUpdate {
321
+ readonly trajectoryId: string;
322
+ readonly gradients: Map<string, number>;
323
+ readonly loss: number;
324
+ }
325
+ /**
326
+ * Online learner interface
327
+ */
328
+ export interface IOnlineLearner {
329
+ /**
330
+ * Learn from a trajectory
331
+ */
332
+ learnFromTrajectory(trajectory: SearchTrajectory): LearningUpdate;
333
+ /**
334
+ * Get current model parameters
335
+ */
336
+ getParameters(): Map<string, number>;
337
+ /**
338
+ * Apply learning update
339
+ */
340
+ applyUpdate(update: LearningUpdate): void;
341
+ /**
342
+ * Get learning statistics
343
+ */
344
+ getStatistics(): LearningStatistics;
345
+ }
346
+ /**
347
+ * Learning statistics
348
+ */
349
+ export interface LearningStatistics {
350
+ readonly totalUpdates: number;
351
+ readonly averageLoss: number;
352
+ readonly learningRate: number;
353
+ readonly convergenceMetric: number;
354
+ }
355
+ /**
356
+ * Model update request
357
+ */
358
+ export interface ModelUpdateRequest {
359
+ readonly updates: LearningUpdate[];
360
+ readonly batchSize: number;
361
+ readonly epoch: number;
362
+ }
363
+ /**
364
+ * Model updater interface
365
+ */
366
+ export interface IModelUpdater {
367
+ /**
368
+ * Queue an update
369
+ */
370
+ queueUpdate(update: LearningUpdate): void;
371
+ /**
372
+ * Flush pending updates
373
+ */
374
+ flushUpdates(): Promise<void>;
375
+ /**
376
+ * Get pending update count
377
+ */
378
+ getPendingCount(): number;
379
+ }
380
+ /**
381
+ * Priority queue item
382
+ */
383
+ export interface PriorityItem<T> {
384
+ readonly item: T;
385
+ readonly priority: number;
386
+ }
387
+ /**
388
+ * Priority queue interface
389
+ */
390
+ export interface IPriorityQueue<T> {
391
+ /**
392
+ * Add item with priority
393
+ */
394
+ push(item: T, priority: number): void;
395
+ /**
396
+ * Remove and return highest priority item
397
+ */
398
+ pop(): T | undefined;
399
+ /**
400
+ * Peek at highest priority item
401
+ */
402
+ peek(): T | undefined;
403
+ /**
404
+ * Get queue size
405
+ */
406
+ size(): number;
407
+ /**
408
+ * Check if empty
409
+ */
410
+ isEmpty(): boolean;
411
+ /**
412
+ * Clear the queue
413
+ */
414
+ clear(): void;
415
+ }
416
+ //# sourceMappingURL=types.d.ts.map