@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,104 @@
1
+ /**
2
+ * Embedding Model
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Neural embedding model for code and specifications
5
+ * Traces to: REQ-NS-001 (分岐スコアリング)
6
+ */
7
+ import { EmbeddingError } from '../errors.js';
8
+ /**
9
+ * Default embedding configuration
10
+ */
11
+ const DEFAULT_CONFIG = {
12
+ modelName: 'simple-hash',
13
+ dimension: 128,
14
+ maxLength: 512,
15
+ poolingStrategy: 'mean',
16
+ };
17
+ /**
18
+ * Simple hash-based embedding model (for testing without ML dependencies)
19
+ */
20
+ export class EmbeddingModel {
21
+ config;
22
+ constructor(config = {}) {
23
+ this.config = { ...DEFAULT_CONFIG, ...config };
24
+ }
25
+ /**
26
+ * Embed source code
27
+ */
28
+ async embedCode(code) {
29
+ if (!code) {
30
+ throw new EmbeddingError('Code cannot be empty');
31
+ }
32
+ return this.hashEmbed(code, 'code');
33
+ }
34
+ /**
35
+ * Embed specification
36
+ */
37
+ async embedSpec(spec) {
38
+ if (!spec) {
39
+ throw new EmbeddingError('Specification cannot be empty');
40
+ }
41
+ return this.hashEmbed(spec, 'spec');
42
+ }
43
+ /**
44
+ * Calculate cosine similarity between embeddings
45
+ */
46
+ similarity(a, b) {
47
+ if (a.length !== b.length) {
48
+ throw new EmbeddingError('Embedding dimensions must match');
49
+ }
50
+ let dotProduct = 0;
51
+ let normA = 0;
52
+ let normB = 0;
53
+ for (let i = 0; i < a.length; i++) {
54
+ const valA = a[i];
55
+ const valB = b[i];
56
+ dotProduct += valA * valB;
57
+ normA += valA * valA;
58
+ normB += valB * valB;
59
+ }
60
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
61
+ if (denominator === 0) {
62
+ return 0;
63
+ }
64
+ return dotProduct / denominator;
65
+ }
66
+ /**
67
+ * Batch embed multiple texts
68
+ */
69
+ async embedBatch(texts) {
70
+ return Promise.all(texts.map((text) => this.hashEmbed(text, 'batch')));
71
+ }
72
+ /**
73
+ * Get configuration
74
+ */
75
+ getConfig() {
76
+ return this.config;
77
+ }
78
+ /**
79
+ * Simple hash-based embedding (deterministic, for testing)
80
+ */
81
+ hashEmbed(text, prefix) {
82
+ const combined = `${prefix}:${text}`;
83
+ const embedding = new Float32Array(this.config.dimension);
84
+ // Simple character-based hashing
85
+ for (let i = 0; i < combined.length && i < this.config.maxLength; i++) {
86
+ const charCode = combined.charCodeAt(i);
87
+ const idx = i % this.config.dimension;
88
+ embedding[idx] += charCode / 256;
89
+ }
90
+ // Normalize
91
+ let norm = 0;
92
+ for (let i = 0; i < embedding.length; i++) {
93
+ norm += embedding[i] * embedding[i];
94
+ }
95
+ norm = Math.sqrt(norm);
96
+ if (norm > 0) {
97
+ for (let i = 0; i < embedding.length; i++) {
98
+ embedding[i] /= norm;
99
+ }
100
+ }
101
+ return embedding;
102
+ }
103
+ }
104
+ //# sourceMappingURL=EmbeddingModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmbeddingModel.js","sourceRoot":"","sources":["../../src/scorer/EmbeddingModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Neural Scorer Module
3
+ * @module @nahisaho/musubix-neural-search/scorer
4
+ */
5
+ export { EmbeddingModel } from './EmbeddingModel.js';
6
+ export { BranchScorer } from './BranchScorer.js';
7
+ export type { ScoreWeights } from './BranchScorer.js';
8
+ export { ContextEncoder } from './ContextEncoder.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scorer/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Neural Scorer Module
3
+ * @module @nahisaho/musubix-neural-search/scorer
4
+ */
5
+ export { EmbeddingModel } from './EmbeddingModel.js';
6
+ export { BranchScorer } from './BranchScorer.js';
7
+ export { ContextEncoder } from './ContextEncoder.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scorer/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Beam Search
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Beam search algorithm for code synthesis
5
+ * Traces to: REQ-NS-002 (探索優先順位付け)
6
+ */
7
+ import type { Branch, IBranchScorer, IBeamSearch, SearchConfig, SearchContext, SearchResult, SearchState, SearchStatistics } from '../types.js';
8
+ /**
9
+ * Beam search implementation
10
+ */
11
+ export declare class BeamSearch implements IBeamSearch {
12
+ private currentBeam;
13
+ private statistics;
14
+ constructor();
15
+ /**
16
+ * Execute beam search
17
+ */
18
+ search(initial: SearchState, expand: (state: SearchState) => Promise<Branch[]>, scorer: IBranchScorer, context: SearchContext, config: SearchConfig): Promise<SearchResult[]>;
19
+ /**
20
+ * Get current beam
21
+ */
22
+ getCurrentBeam(): SearchState[];
23
+ /**
24
+ * Get search statistics
25
+ */
26
+ getStatistics(): SearchStatistics;
27
+ /**
28
+ * Build path from state to root
29
+ */
30
+ private buildPath;
31
+ }
32
+ //# sourceMappingURL=BeamSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BeamSearch.d.ts","sourceRoot":"","sources":["../../src/search/BeamSearch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,UAAU,CAAmB;;IAarC;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,EACjD,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC;IAsG1B;;OAEG;IACH,cAAc,IAAI,WAAW,EAAE;IAI/B;;OAEG;IACH,aAAa,IAAI,gBAAgB;IAIjC;;OAEG;IACH,OAAO,CAAC,SAAS;CAalB"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Beam Search
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Beam search algorithm for code synthesis
5
+ * Traces to: REQ-NS-002 (探索優先順位付け)
6
+ */
7
+ import { SearchTimeoutError } from '../errors.js';
8
+ /**
9
+ * Beam search implementation
10
+ */
11
+ export class BeamSearch {
12
+ currentBeam;
13
+ statistics;
14
+ constructor() {
15
+ this.currentBeam = [];
16
+ this.statistics = {
17
+ totalExpanded: 0,
18
+ totalPruned: 0,
19
+ maxDepthReached: 0,
20
+ averageScore: 0,
21
+ timeElapsed: 0,
22
+ };
23
+ }
24
+ /**
25
+ * Execute beam search
26
+ */
27
+ async search(initial, expand, scorer, context, config) {
28
+ const startTime = Date.now();
29
+ const beamWidth = config.beamWidth ?? 5;
30
+ this.currentBeam = [initial];
31
+ const allResults = [];
32
+ let iteration = 0;
33
+ let totalPruned = 0;
34
+ let totalExpanded = 0;
35
+ let maxDepth = 0;
36
+ const scores = [];
37
+ while (iteration < config.maxIterations &&
38
+ this.currentBeam.length > 0) {
39
+ // Check timeout
40
+ if (Date.now() - startTime > config.timeout) {
41
+ throw new SearchTimeoutError(config.timeout);
42
+ }
43
+ // Check depth - return results instead of throwing
44
+ const maxBeamDepth = Math.max(...this.currentBeam.map((s) => s.depth));
45
+ maxDepth = Math.max(maxDepth, maxBeamDepth);
46
+ if (maxBeamDepth >= config.maxDepth) {
47
+ // Reached max depth, return current results
48
+ break;
49
+ }
50
+ // Expand all states in beam
51
+ const candidates = [];
52
+ for (const state of this.currentBeam) {
53
+ const branches = await expand(state);
54
+ totalExpanded += branches.length;
55
+ // Score all branches
56
+ const scored = await scorer.scoreBatch(branches, context);
57
+ for (const branchScore of scored) {
58
+ // Apply pruning threshold
59
+ if (config.pruneThreshold !== undefined &&
60
+ branchScore.score < config.pruneThreshold) {
61
+ totalPruned++;
62
+ continue;
63
+ }
64
+ const path = this.buildPath(branchScore.branch.to, context.history);
65
+ candidates.push({
66
+ state: branchScore.branch.to,
67
+ score: branchScore.score,
68
+ path,
69
+ });
70
+ scores.push(branchScore.score);
71
+ }
72
+ }
73
+ // Sort by score and keep top beamWidth
74
+ candidates.sort((a, b) => b.score - a.score);
75
+ const nextBeam = candidates.slice(0, beamWidth);
76
+ // Add to results
77
+ for (const candidate of nextBeam) {
78
+ allResults.push({
79
+ state: candidate.state,
80
+ score: candidate.score,
81
+ path: candidate.path,
82
+ iterations: iteration + 1,
83
+ pruned: totalPruned,
84
+ });
85
+ }
86
+ // Update beam
87
+ this.currentBeam = nextBeam.map((c) => c.state);
88
+ iteration++;
89
+ }
90
+ // Update statistics
91
+ this.statistics = {
92
+ totalExpanded,
93
+ totalPruned,
94
+ maxDepthReached: maxDepth,
95
+ averageScore: scores.length > 0
96
+ ? scores.reduce((a, b) => a + b, 0) / scores.length
97
+ : 0,
98
+ timeElapsed: Date.now() - startTime,
99
+ };
100
+ // Return best results (deduplicated by state id)
101
+ const seen = new Set();
102
+ return allResults
103
+ .filter((r) => {
104
+ if (seen.has(r.state.id))
105
+ return false;
106
+ seen.add(r.state.id);
107
+ return true;
108
+ })
109
+ .sort((a, b) => b.score - a.score)
110
+ .slice(0, beamWidth);
111
+ }
112
+ /**
113
+ * Get current beam
114
+ */
115
+ getCurrentBeam() {
116
+ return [...this.currentBeam];
117
+ }
118
+ /**
119
+ * Get search statistics
120
+ */
121
+ getStatistics() {
122
+ return { ...this.statistics };
123
+ }
124
+ /**
125
+ * Build path from state to root
126
+ */
127
+ buildPath(state, history) {
128
+ const path = [state];
129
+ // Add history states
130
+ for (let i = history.length - 1; i >= 0; i--) {
131
+ if (history[i].id === state.parent) {
132
+ path.unshift(history[i]);
133
+ break;
134
+ }
135
+ }
136
+ return path;
137
+ }
138
+ }
139
+ //# sourceMappingURL=BeamSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BeamSearch.js","sourceRoot":"","sources":["../../src/search/BeamSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Best-First Search
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Best-first search algorithm for code synthesis
5
+ */
6
+ import type { Branch, IBranchScorer, IBestFirstSearch, SearchConfig, SearchContext, SearchResult, SearchState } from '../types.js';
7
+ /**
8
+ * Best-first search implementation
9
+ */
10
+ export declare class BestFirstSearch implements IBestFirstSearch {
11
+ private openList;
12
+ private closedSet;
13
+ constructor();
14
+ /**
15
+ * Execute best-first search
16
+ */
17
+ search(initial: SearchState, expand: (state: SearchState) => Promise<Branch[]>, scorer: IBranchScorer, context: SearchContext, config: SearchConfig): Promise<SearchResult>;
18
+ /**
19
+ * Get open list size
20
+ */
21
+ getOpenListSize(): number;
22
+ }
23
+ //# sourceMappingURL=BestFirstSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BestFirstSearch.d.ts","sourceRoot":"","sources":["../../src/search/BestFirstSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAA4E;IAC5F,OAAO,CAAC,SAAS,CAAc;;IAO/B;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,EACjD,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,YAAY,CAAC;IA0GxB;;OAEG;IACH,eAAe,IAAI,MAAM;CAG1B"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Best-First Search
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Best-first search algorithm for code synthesis
5
+ */
6
+ import { SearchDepthExceededError, SearchTimeoutError } from '../errors.js';
7
+ import { PriorityQueue } from './PriorityQueue.js';
8
+ /**
9
+ * Best-first search implementation
10
+ */
11
+ export class BestFirstSearch {
12
+ openList;
13
+ closedSet;
14
+ constructor() {
15
+ this.openList = new PriorityQueue();
16
+ this.closedSet = new Set();
17
+ }
18
+ /**
19
+ * Execute best-first search
20
+ */
21
+ async search(initial, expand, scorer, context, config) {
22
+ const startTime = Date.now();
23
+ // Reset state
24
+ this.openList.clear();
25
+ this.closedSet.clear();
26
+ // Add initial state with neutral score (not a goal yet)
27
+ this.openList.push({ state: initial, score: 0.0, path: [initial] }, 0.0);
28
+ let iteration = 0;
29
+ let totalPruned = 0;
30
+ while (!this.openList.isEmpty() && iteration < config.maxIterations) {
31
+ // Check timeout
32
+ if (Date.now() - startTime > config.timeout) {
33
+ throw new SearchTimeoutError(config.timeout);
34
+ }
35
+ // Get best state
36
+ const current = this.openList.pop();
37
+ if (!current)
38
+ break;
39
+ const { state, score, path } = current;
40
+ // Skip if already visited
41
+ if (this.closedSet.has(state.id)) {
42
+ continue;
43
+ }
44
+ this.closedSet.add(state.id);
45
+ // Check depth (only after at least one expansion)
46
+ if (state.depth > 0 && state.depth >= config.maxDepth) {
47
+ throw new SearchDepthExceededError(config.maxDepth);
48
+ }
49
+ // Check if goal (assume high score = goal, but only for non-initial states)
50
+ if (state.depth > 0 && score >= 0.9) {
51
+ return {
52
+ state,
53
+ score,
54
+ path,
55
+ iterations: iteration + 1,
56
+ pruned: totalPruned,
57
+ };
58
+ }
59
+ // Expand state
60
+ const branches = await expand(state);
61
+ // Check timeout again after expansion (expansion might be slow)
62
+ if (Date.now() - startTime > config.timeout) {
63
+ throw new SearchTimeoutError(config.timeout);
64
+ }
65
+ const scored = await scorer.scoreBatch(branches, context);
66
+ for (const branchScore of scored) {
67
+ const nextState = branchScore.branch.to;
68
+ // Skip if already visited
69
+ if (this.closedSet.has(nextState.id)) {
70
+ continue;
71
+ }
72
+ // Apply pruning
73
+ if (config.pruneThreshold !== undefined &&
74
+ branchScore.score < config.pruneThreshold) {
75
+ totalPruned++;
76
+ continue;
77
+ }
78
+ const nextPath = [...path, nextState];
79
+ this.openList.push({ state: nextState, score: branchScore.score, path: nextPath }, branchScore.score);
80
+ }
81
+ iteration++;
82
+ }
83
+ // Return best found if no goal reached
84
+ const best = this.openList.pop();
85
+ if (best) {
86
+ return {
87
+ state: best.state,
88
+ score: best.score,
89
+ path: best.path,
90
+ iterations: iteration,
91
+ pruned: totalPruned,
92
+ };
93
+ }
94
+ // Return initial if nothing better found
95
+ return {
96
+ state: initial,
97
+ score: 0,
98
+ path: [initial],
99
+ iterations: iteration,
100
+ pruned: totalPruned,
101
+ };
102
+ }
103
+ /**
104
+ * Get open list size
105
+ */
106
+ getOpenListSize() {
107
+ return this.openList.size();
108
+ }
109
+ }
110
+ //# sourceMappingURL=BestFirstSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BestFirstSearch.js","sourceRoot":"","sources":["../../src/search/BestFirstSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Priority Queue
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Max-heap priority queue for search
5
+ */
6
+ import type { IPriorityQueue } from '../types.js';
7
+ /**
8
+ * Max-heap priority queue implementation
9
+ */
10
+ export declare class PriorityQueue<T> implements IPriorityQueue<T> {
11
+ private heap;
12
+ constructor();
13
+ /**
14
+ * Add item with priority
15
+ */
16
+ push(item: T, priority: number): void;
17
+ /**
18
+ * Remove and return highest priority item
19
+ */
20
+ pop(): T | undefined;
21
+ /**
22
+ * Peek at highest priority item
23
+ */
24
+ peek(): T | undefined;
25
+ /**
26
+ * Get queue size
27
+ */
28
+ size(): number;
29
+ /**
30
+ * Check if empty
31
+ */
32
+ isEmpty(): boolean;
33
+ /**
34
+ * Clear the queue
35
+ */
36
+ clear(): void;
37
+ /**
38
+ * Get all items sorted by priority
39
+ */
40
+ toArray(): T[];
41
+ /**
42
+ * Bubble up the element at index
43
+ */
44
+ private bubbleUp;
45
+ /**
46
+ * Bubble down the element at index
47
+ */
48
+ private bubbleDown;
49
+ /**
50
+ * Swap two elements
51
+ */
52
+ private swap;
53
+ }
54
+ //# sourceMappingURL=PriorityQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PriorityQueue.d.ts","sourceRoot":"","sources":["../../src/search/PriorityQueue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAEhE;;GAEG;AACH,qBAAa,aAAa,CAAC,CAAC,CAAE,YAAW,cAAc,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAoB;;IAMhC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKrC;;OAEG;IACH,GAAG,IAAI,CAAC,GAAG,SAAS;IAgBpB;;OAEG;IACH,IAAI,IAAI,CAAC,GAAG,SAAS;IAIrB;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,IAAI,CAAC,EAAE;IAMd;;OAEG;IACH,OAAO,CAAC,QAAQ;IAWhB;;OAEG;IACH,OAAO,CAAC,UAAU;IA+BlB;;OAEG;IACH,OAAO,CAAC,IAAI;CAKb"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Priority Queue
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @description Max-heap priority queue for search
5
+ */
6
+ /**
7
+ * Max-heap priority queue implementation
8
+ */
9
+ export class PriorityQueue {
10
+ heap;
11
+ constructor() {
12
+ this.heap = [];
13
+ }
14
+ /**
15
+ * Add item with priority
16
+ */
17
+ push(item, priority) {
18
+ this.heap.push({ item, priority });
19
+ this.bubbleUp(this.heap.length - 1);
20
+ }
21
+ /**
22
+ * Remove and return highest priority item
23
+ */
24
+ pop() {
25
+ if (this.heap.length === 0) {
26
+ return undefined;
27
+ }
28
+ const top = this.heap[0];
29
+ const last = this.heap.pop();
30
+ if (this.heap.length > 0 && last) {
31
+ this.heap[0] = last;
32
+ this.bubbleDown(0);
33
+ }
34
+ return top.item;
35
+ }
36
+ /**
37
+ * Peek at highest priority item
38
+ */
39
+ peek() {
40
+ return this.heap[0]?.item;
41
+ }
42
+ /**
43
+ * Get queue size
44
+ */
45
+ size() {
46
+ return this.heap.length;
47
+ }
48
+ /**
49
+ * Check if empty
50
+ */
51
+ isEmpty() {
52
+ return this.heap.length === 0;
53
+ }
54
+ /**
55
+ * Clear the queue
56
+ */
57
+ clear() {
58
+ this.heap = [];
59
+ }
60
+ /**
61
+ * Get all items sorted by priority
62
+ */
63
+ toArray() {
64
+ return [...this.heap]
65
+ .sort((a, b) => b.priority - a.priority)
66
+ .map((item) => item.item);
67
+ }
68
+ /**
69
+ * Bubble up the element at index
70
+ */
71
+ bubbleUp(index) {
72
+ while (index > 0) {
73
+ const parentIdx = Math.floor((index - 1) / 2);
74
+ if (this.heap[parentIdx].priority >= this.heap[index].priority) {
75
+ break;
76
+ }
77
+ this.swap(parentIdx, index);
78
+ index = parentIdx;
79
+ }
80
+ }
81
+ /**
82
+ * Bubble down the element at index
83
+ */
84
+ bubbleDown(index) {
85
+ const length = this.heap.length;
86
+ while (true) {
87
+ const leftIdx = 2 * index + 1;
88
+ const rightIdx = 2 * index + 2;
89
+ let largestIdx = index;
90
+ if (leftIdx < length &&
91
+ this.heap[leftIdx].priority > this.heap[largestIdx].priority) {
92
+ largestIdx = leftIdx;
93
+ }
94
+ if (rightIdx < length &&
95
+ this.heap[rightIdx].priority > this.heap[largestIdx].priority) {
96
+ largestIdx = rightIdx;
97
+ }
98
+ if (largestIdx === index) {
99
+ break;
100
+ }
101
+ this.swap(index, largestIdx);
102
+ index = largestIdx;
103
+ }
104
+ }
105
+ /**
106
+ * Swap two elements
107
+ */
108
+ swap(i, j) {
109
+ const temp = this.heap[i];
110
+ this.heap[i] = this.heap[j];
111
+ this.heap[j] = temp;
112
+ }
113
+ }
114
+ //# sourceMappingURL=PriorityQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../src/search/PriorityQueue.ts"],"names":[],"mappings":"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"}