twining-mcp 1.4.0 → 1.4.2
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 +119 -106
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/dashboard/public/app.js +140 -9
- package/dist/dashboard/public/index.html +19 -1
- package/dist/dashboard/public/style.css +123 -3
- package/dist/embeddings/search.d.ts.map +1 -1
- package/dist/embeddings/search.js +5 -2
- package/dist/embeddings/search.js.map +1 -1
- package/dist/engine/archiver.d.ts.map +1 -1
- package/dist/engine/archiver.js +15 -11
- package/dist/engine/archiver.js.map +1 -1
- package/dist/engine/blackboard.d.ts +6 -1
- package/dist/engine/blackboard.d.ts.map +1 -1
- package/dist/engine/blackboard.js +16 -0
- package/dist/engine/blackboard.js.map +1 -1
- package/dist/engine/context-assembler.d.ts +6 -0
- package/dist/engine/context-assembler.d.ts.map +1 -1
- package/dist/engine/context-assembler.js +69 -14
- package/dist/engine/context-assembler.js.map +1 -1
- package/dist/engine/verify.d.ts +8 -2
- package/dist/engine/verify.d.ts.map +1 -1
- package/dist/engine/verify.js +27 -9
- package/dist/engine/verify.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -1
- package/dist/server.js.map +1 -1
- package/dist/storage/decision-store.d.ts.map +1 -1
- package/dist/storage/decision-store.js +8 -18
- package/dist/storage/decision-store.js.map +1 -1
- package/dist/storage/handoff-store.d.ts +1 -1
- package/dist/storage/handoff-store.d.ts.map +1 -1
- package/dist/storage/handoff-store.js +45 -17
- package/dist/storage/handoff-store.js.map +1 -1
- package/dist/tools/blackboard-tools.d.ts.map +1 -1
- package/dist/tools/blackboard-tools.js +4 -1
- package/dist/tools/blackboard-tools.js.map +1 -1
- package/dist/tools/context-tools.d.ts.map +1 -1
- package/dist/tools/context-tools.js +3 -0
- package/dist/tools/context-tools.js.map +1 -1
- package/dist/tools/graph-tools.d.ts.map +1 -1
- package/dist/tools/graph-tools.js +6 -4
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/lifecycle-tools.d.ts.map +1 -1
- package/dist/tools/lifecycle-tools.js +3 -0
- package/dist/tools/lifecycle-tools.js.map +1 -1
- package/dist/utils/types.d.ts +1 -0
- package/dist/utils/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/dashboard/public/app.js +140 -9
- package/src/dashboard/public/index.html +19 -1
- package/src/dashboard/public/style.css +123 -3
|
@@ -168,6 +168,87 @@ main {
|
|
|
168
168
|
font-weight: 700;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
+
.stats-section {
|
|
172
|
+
margin-top: 2rem;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.stats-section-title {
|
|
176
|
+
font-size: 1.125rem;
|
|
177
|
+
font-weight: 600;
|
|
178
|
+
margin-bottom: 1rem;
|
|
179
|
+
color: var(--text);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.activity-breakdown {
|
|
183
|
+
display: grid;
|
|
184
|
+
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
|
185
|
+
gap: 0.75rem;
|
|
186
|
+
margin-bottom: 1.5rem;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.activity-item {
|
|
190
|
+
background: var(--card-bg);
|
|
191
|
+
border: 1px solid var(--card-border);
|
|
192
|
+
border-radius: 6px;
|
|
193
|
+
padding: 0.875rem;
|
|
194
|
+
display: flex;
|
|
195
|
+
justify-content: space-between;
|
|
196
|
+
align-items: center;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.activity-item-label {
|
|
200
|
+
font-size: 0.8125rem;
|
|
201
|
+
color: var(--muted);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.activity-item-count {
|
|
205
|
+
font-size: 1.25rem;
|
|
206
|
+
font-weight: 600;
|
|
207
|
+
color: var(--accent);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.recent-activity {
|
|
211
|
+
background: var(--card-bg);
|
|
212
|
+
border: 1px solid var(--card-border);
|
|
213
|
+
border-radius: 8px;
|
|
214
|
+
padding: 1rem;
|
|
215
|
+
max-height: 400px;
|
|
216
|
+
overflow-y: auto;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.activity-entry {
|
|
220
|
+
padding: 0.75rem;
|
|
221
|
+
border-bottom: 1px solid var(--card-border);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.activity-entry:last-child {
|
|
225
|
+
border-bottom: none;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.activity-entry-header {
|
|
229
|
+
display: flex;
|
|
230
|
+
justify-content: space-between;
|
|
231
|
+
align-items: center;
|
|
232
|
+
margin-bottom: 0.25rem;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.activity-entry-type {
|
|
236
|
+
font-size: 0.75rem;
|
|
237
|
+
font-weight: 600;
|
|
238
|
+
text-transform: uppercase;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.activity-entry-time {
|
|
242
|
+
font-size: 0.6875rem;
|
|
243
|
+
color: var(--muted);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.activity-entry-summary {
|
|
247
|
+
font-size: 0.8125rem;
|
|
248
|
+
color: var(--text);
|
|
249
|
+
margin-top: 0.25rem;
|
|
250
|
+
}
|
|
251
|
+
|
|
171
252
|
.content-area {
|
|
172
253
|
display: grid;
|
|
173
254
|
grid-template-columns: 1fr 380px;
|
|
@@ -617,18 +698,57 @@ footer p {
|
|
|
617
698
|
/* ========== Visualization Containers ========== */
|
|
618
699
|
|
|
619
700
|
#timeline-container {
|
|
620
|
-
height:
|
|
621
|
-
overflow:
|
|
701
|
+
height: 600px;
|
|
702
|
+
overflow: auto;
|
|
622
703
|
border: 1px solid var(--card-border);
|
|
623
704
|
border-radius: 4px;
|
|
624
705
|
background: var(--card-bg);
|
|
625
706
|
}
|
|
626
707
|
|
|
627
708
|
#graph-canvas {
|
|
628
|
-
height:
|
|
709
|
+
height: 700px;
|
|
629
710
|
border: 1px solid var(--card-border);
|
|
630
711
|
border-radius: 4px;
|
|
631
712
|
background: var(--card-bg);
|
|
713
|
+
position: relative;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
.graph-controls {
|
|
717
|
+
position: absolute;
|
|
718
|
+
top: 10px;
|
|
719
|
+
right: 10px;
|
|
720
|
+
z-index: 100;
|
|
721
|
+
display: flex;
|
|
722
|
+
flex-direction: column;
|
|
723
|
+
gap: 6px;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
.graph-controls button {
|
|
727
|
+
width: 36px;
|
|
728
|
+
height: 36px;
|
|
729
|
+
background: var(--card-bg);
|
|
730
|
+
border: 1px solid var(--card-border);
|
|
731
|
+
border-radius: 4px;
|
|
732
|
+
color: var(--text);
|
|
733
|
+
font-size: 18px;
|
|
734
|
+
font-weight: bold;
|
|
735
|
+
cursor: pointer;
|
|
736
|
+
display: flex;
|
|
737
|
+
align-items: center;
|
|
738
|
+
justify-content: center;
|
|
739
|
+
transition: all 0.2s;
|
|
740
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
.graph-controls button:hover {
|
|
744
|
+
background: var(--accent);
|
|
745
|
+
color: white;
|
|
746
|
+
border-color: var(--accent);
|
|
747
|
+
transform: scale(1.05);
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
.graph-controls button:active {
|
|
751
|
+
transform: scale(0.95);
|
|
632
752
|
}
|
|
633
753
|
|
|
634
754
|
/* ========== Graph Legend ========== */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/embeddings/search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY;IAK1D,4EAA4E;IACtE,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IA4EjD,mEAAmE;IAC7D,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;CAmEhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/embeddings/search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY;IAK1D,4EAA4E;IACtE,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IA4EjD,mEAAmE;IAC7D,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;CAmEhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EACrC,KAAK,EAAE,MAAM,GACZ;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAiCjC"}
|
|
@@ -128,9 +128,12 @@ export class SearchEngine {
|
|
|
128
128
|
* simplifies to the dot product.
|
|
129
129
|
*/
|
|
130
130
|
export function cosineSimilarity(a, b) {
|
|
131
|
+
if (a.length !== b.length) {
|
|
132
|
+
console.error(`[twining] Cosine similarity dimension mismatch: ${a.length} vs ${b.length}. Returning 0.`);
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
131
135
|
let sum = 0;
|
|
132
|
-
|
|
133
|
-
for (let i = 0; i < len; i++) {
|
|
136
|
+
for (let i = 0; i < a.length; i++) {
|
|
134
137
|
sum += a[i] * b[i];
|
|
135
138
|
}
|
|
136
139
|
return sum;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/embeddings/search.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/embeddings/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/engine/archiver.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAQnE,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAGjD,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,YAAY,GAAG,IAAI;IAQnC;;;;;OAKG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/engine/archiver.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAQnE,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAGjD,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,YAAY,GAAG,IAAI;IAQnC;;;;;OAKG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IA8GF,0DAA0D;IAC1D,OAAO,CAAC,YAAY;CA8BrB"}
|
package/dist/engine/archiver.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import fs from "node:fs";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import lockfile from "proper-lockfile";
|
|
10
|
-
import {
|
|
10
|
+
import { ensureDir } from "../storage/file-store.js";
|
|
11
11
|
const LOCK_OPTIONS = {
|
|
12
12
|
retries: { retries: 10, factor: 1.5, minTimeout: 50, maxTimeout: 1000 },
|
|
13
13
|
stale: 10000,
|
|
@@ -45,6 +45,7 @@ export class Archiver {
|
|
|
45
45
|
const release = await lockfile.lock(bbPath, LOCK_OPTIONS);
|
|
46
46
|
let toArchive = [];
|
|
47
47
|
let toKeep = [];
|
|
48
|
+
let archiveFile = "";
|
|
48
49
|
try {
|
|
49
50
|
// Read all entries (no lock needed since we hold it)
|
|
50
51
|
const content = fs.readFileSync(bbPath, "utf-8");
|
|
@@ -76,7 +77,19 @@ export class Archiver {
|
|
|
76
77
|
if (toArchive.length === 0) {
|
|
77
78
|
return { archived_count: 0, archive_file: "" };
|
|
78
79
|
}
|
|
79
|
-
//
|
|
80
|
+
// Write archived entries to archive file BEFORE rewriting blackboard.
|
|
81
|
+
// This ensures entries exist in the archive before being removed from
|
|
82
|
+
// the blackboard, preventing data loss on crash.
|
|
83
|
+
const archiveDir = path.join(this.twiningDir, "archive");
|
|
84
|
+
ensureDir(archiveDir);
|
|
85
|
+
const dateStr = cutoff.slice(0, 10); // YYYY-MM-DD
|
|
86
|
+
archiveFile = path.join(archiveDir, `${dateStr}-blackboard.jsonl`);
|
|
87
|
+
// Direct append (no nested lock since we already hold the blackboard lock)
|
|
88
|
+
const archiveContent = toArchive
|
|
89
|
+
.map((e) => JSON.stringify(e))
|
|
90
|
+
.join("\n") + "\n";
|
|
91
|
+
fs.appendFileSync(archiveFile, archiveContent);
|
|
92
|
+
// Now rewrite blackboard with only kept entries
|
|
80
93
|
const keptContent = toKeep.length > 0
|
|
81
94
|
? toKeep.map((e) => JSON.stringify(e)).join("\n") + "\n"
|
|
82
95
|
: "";
|
|
@@ -85,15 +98,6 @@ export class Archiver {
|
|
|
85
98
|
finally {
|
|
86
99
|
await release();
|
|
87
100
|
}
|
|
88
|
-
// Write archived entries to archive file (outside blackboard lock)
|
|
89
|
-
const archiveDir = path.join(this.twiningDir, "archive");
|
|
90
|
-
ensureDir(archiveDir);
|
|
91
|
-
const dateStr = cutoff.slice(0, 10); // YYYY-MM-DD
|
|
92
|
-
const archiveFile = path.join(archiveDir, `${dateStr}-blackboard.jsonl`);
|
|
93
|
-
// Append each archived entry to the archive file
|
|
94
|
-
for (const entry of toArchive) {
|
|
95
|
-
await appendJSONL(archiveFile, entry);
|
|
96
|
-
}
|
|
97
101
|
// Remove archived entry embeddings (best-effort)
|
|
98
102
|
if (this.indexManager) {
|
|
99
103
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.js","sourceRoot":"","sources":["../../src/engine/archiver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"archiver.js","sourceRoot":"","sources":["../../src/engine/archiver.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,16 +4,21 @@
|
|
|
4
4
|
* Generates embeddings on post (Phase 2) with graceful fallback.
|
|
5
5
|
*/
|
|
6
6
|
import { BlackboardStore } from "../storage/blackboard-store.js";
|
|
7
|
-
import type { BlackboardEntry } from "../utils/types.js";
|
|
7
|
+
import type { BlackboardEntry, TwiningConfig } from "../utils/types.js";
|
|
8
8
|
import type { Embedder } from "../embeddings/embedder.js";
|
|
9
9
|
import type { IndexManager } from "../embeddings/index-manager.js";
|
|
10
10
|
import type { SearchEngine, BlackboardSearchResult } from "../embeddings/search.js";
|
|
11
|
+
import type { Archiver } from "./archiver.js";
|
|
11
12
|
export declare class BlackboardEngine {
|
|
12
13
|
private readonly store;
|
|
13
14
|
private readonly embedder;
|
|
14
15
|
private readonly indexManager;
|
|
15
16
|
private readonly searchEngine;
|
|
17
|
+
private archiver;
|
|
18
|
+
private archiveThreshold;
|
|
16
19
|
constructor(store: BlackboardStore, embedder?: Embedder | null, indexManager?: IndexManager | null, searchEngine?: SearchEngine | null);
|
|
20
|
+
/** Inject archiver for threshold-based auto-archiving (spec §6.1.3). */
|
|
21
|
+
setArchiver(archiver: Archiver, config: TwiningConfig): void;
|
|
17
22
|
/** Post a new blackboard entry with validation and defaults. */
|
|
18
23
|
post(input: {
|
|
19
24
|
entry_type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blackboard.d.ts","sourceRoot":"","sources":["../../src/engine/blackboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"blackboard.d.ts","sourceRoot":"","sources":["../../src/engine/blackboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAa,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,gBAAgB,CAAuB;gBAG7C,KAAK,EAAE,eAAe,EACtB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,EAClC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI;IAQpC,wEAAwE;IACxE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAK5D,gEAAgE;IAC1D,IAAI,CAAC,KAAK,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAiE9C,qDAAqD;IAC/C,IAAI,CAAC,OAAO,CAAC,EAAE;QACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,eAAe,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAUhE,oEAAoE;IAC9D,KAAK,CACT,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC;QACT,OAAO,EAAE,sBAAsB,EAAE,CAAC;QAClC,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IAcF,kEAAkE;IAC5D,MAAM,CACV,CAAC,CAAC,EAAE,MAAM,EACV,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC;QAAE,OAAO,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;CAI3C"}
|
|
@@ -11,12 +11,19 @@ export class BlackboardEngine {
|
|
|
11
11
|
embedder;
|
|
12
12
|
indexManager;
|
|
13
13
|
searchEngine;
|
|
14
|
+
archiver = null;
|
|
15
|
+
archiveThreshold = null;
|
|
14
16
|
constructor(store, embedder, indexManager, searchEngine) {
|
|
15
17
|
this.store = store;
|
|
16
18
|
this.embedder = embedder ?? null;
|
|
17
19
|
this.indexManager = indexManager ?? null;
|
|
18
20
|
this.searchEngine = searchEngine ?? null;
|
|
19
21
|
}
|
|
22
|
+
/** Inject archiver for threshold-based auto-archiving (spec §6.1.3). */
|
|
23
|
+
setArchiver(archiver, config) {
|
|
24
|
+
this.archiver = archiver;
|
|
25
|
+
this.archiveThreshold = config.archive.max_blackboard_entries_before_archive;
|
|
26
|
+
}
|
|
20
27
|
/** Post a new blackboard entry with validation and defaults. */
|
|
21
28
|
async post(input) {
|
|
22
29
|
// Validate entry_type
|
|
@@ -57,6 +64,15 @@ export class BlackboardEngine {
|
|
|
57
64
|
console.error("[twining] Embedding generation failed (non-fatal):", error);
|
|
58
65
|
}
|
|
59
66
|
}
|
|
67
|
+
// Auto-archive if threshold exceeded (fire-and-forget, non-fatal) — spec §6.1.3
|
|
68
|
+
if (this.archiver && this.archiveThreshold) {
|
|
69
|
+
const { total_count } = await this.store.read();
|
|
70
|
+
if (total_count >= this.archiveThreshold) {
|
|
71
|
+
this.archiver.archive({ summarize: true }).catch((err) => {
|
|
72
|
+
console.error("[twining] Auto-archive failed (non-fatal):", err);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
60
76
|
return { id: entry.id, timestamp: entry.timestamp };
|
|
61
77
|
}
|
|
62
78
|
/** Read blackboard entries with optional filters. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blackboard.js","sourceRoot":"","sources":["../../src/engine/blackboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"blackboard.js","sourceRoot":"","sources":["../../src/engine/blackboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,12 @@ export declare class ContextAssembler {
|
|
|
40
40
|
* Implements spec section 4.3 (twining_what_changed).
|
|
41
41
|
*/
|
|
42
42
|
whatChanged(since: string, scope?: string): Promise<WhatChangedResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Compute graph connectivity boost for decisions (spec §5.5).
|
|
45
|
+
* Decisions whose affected_files/symbols have more graph relations
|
|
46
|
+
* to the scope get a higher boost (0.0 to 1.0).
|
|
47
|
+
*/
|
|
48
|
+
private computeGraphConnectivity;
|
|
43
49
|
/**
|
|
44
50
|
* Populate related_entities from the knowledge graph.
|
|
45
51
|
* Finds entities matching the scope and gets their immediate neighbors.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-assembler.d.ts","sourceRoot":"","sources":["../../src/engine/context-assembler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EACV,gBAAgB,EAGhB,eAAe,EACf,aAAa,EACb,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAkB3B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAE/C,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;gBAGvD,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAChC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,EACtC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,EAClC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAYhC,0EAA0E;IAC1E,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI3C;;;OAGG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"context-assembler.d.ts","sourceRoot":"","sources":["../../src/engine/context-assembler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EACV,gBAAgB,EAGhB,eAAe,EACf,aAAa,EACb,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAkB3B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAE/C,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;gBAGvD,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAChC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,EACtC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,EAClC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAYhC,0EAA0E;IAC1E,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI3C;;;OAGG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC;IAqW5B;;;OAGG;IACG,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA8EzD;;;OAGG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC;IAuD7B;;;;OAIG;YACW,wBAAwB;IA4DtC;;;;OAIG;YACW,kBAAkB;IA2ChC,qDAAqD;IACrD,OAAO,CAAC,YAAY;IAMpB,sDAAsD;IACtD,OAAO,CAAC,eAAe;CAYxB"}
|
|
@@ -103,17 +103,22 @@ export class ContextAssembler {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
// 5.
|
|
106
|
+
// 5. Compute graph connectivity scores for decisions (spec §5.5)
|
|
107
|
+
const connectivityScores = await this.computeGraphConnectivity(scope, mergedDecisionMap);
|
|
108
|
+
// 6. Score each item
|
|
107
109
|
const scoredItems = [];
|
|
110
|
+
const graphWeight = weights.graph_connectivity ?? 0;
|
|
108
111
|
for (const [id, decision] of mergedDecisionMap) {
|
|
109
112
|
const recency = this.recencyScore(decision.timestamp, now);
|
|
110
113
|
const relevance = decisionRelevance.get(id) ?? 0.5;
|
|
111
114
|
const confidence = this.confidenceScore(decision.confidence);
|
|
112
115
|
const warningBoost = 0;
|
|
116
|
+
const connectivity = connectivityScores.get(id) ?? 0;
|
|
113
117
|
const score = recency * weights.recency +
|
|
114
118
|
relevance * weights.relevance +
|
|
115
119
|
confidence * weights.decision_confidence +
|
|
116
|
-
warningBoost * weights.warning_boost
|
|
120
|
+
warningBoost * weights.warning_boost +
|
|
121
|
+
connectivity * graphWeight;
|
|
117
122
|
const text = `${decision.summary} ${decision.rationale} ${decision.confidence} ${decision.affected_files.join(", ")}`;
|
|
118
123
|
scoredItems.push({
|
|
119
124
|
type: "decision",
|
|
@@ -141,10 +146,12 @@ export class ContextAssembler {
|
|
|
141
146
|
data: entry,
|
|
142
147
|
});
|
|
143
148
|
}
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
|
|
147
|
-
|
|
149
|
+
// 7. Fill token budget in priority order.
|
|
150
|
+
// Warnings get priority access — they fill first from the full budget.
|
|
151
|
+
// Non-warnings fill the remaining budget, but are capped at 90% of the
|
|
152
|
+
// total budget to ensure at least 10% is reserved for warnings.
|
|
153
|
+
const warningReserve = Math.floor(budget * 0.1);
|
|
154
|
+
const nonWarningCap = budget - warningReserve;
|
|
148
155
|
// Separate warnings and non-warnings
|
|
149
156
|
const warnings = scoredItems.filter((i) => i.type === "warning");
|
|
150
157
|
const nonWarnings = scoredItems.filter((i) => i.type !== "warning");
|
|
@@ -152,18 +159,21 @@ export class ContextAssembler {
|
|
|
152
159
|
nonWarnings.sort((a, b) => b.score - a.score);
|
|
153
160
|
const selected = new Set();
|
|
154
161
|
let tokensUsed = 0;
|
|
155
|
-
// First: fill warnings
|
|
162
|
+
// First: fill warnings from the full budget (priority access)
|
|
156
163
|
for (const item of warnings) {
|
|
157
164
|
if (tokensUsed + item.tokenCost <= budget) {
|
|
158
165
|
selected.add(item.id);
|
|
159
166
|
tokensUsed += item.tokenCost;
|
|
160
167
|
}
|
|
161
168
|
}
|
|
162
|
-
// Then: fill non-warnings
|
|
169
|
+
// Then: fill non-warnings, capped so they don't starve warnings
|
|
170
|
+
let nonWarningTokens = 0;
|
|
163
171
|
for (const item of nonWarnings) {
|
|
164
|
-
if (tokensUsed + item.tokenCost <= budget
|
|
172
|
+
if (tokensUsed + item.tokenCost <= budget &&
|
|
173
|
+
nonWarningTokens + item.tokenCost <= nonWarningCap) {
|
|
165
174
|
selected.add(item.id);
|
|
166
175
|
tokensUsed += item.tokenCost;
|
|
176
|
+
nonWarningTokens += item.tokenCost;
|
|
167
177
|
}
|
|
168
178
|
}
|
|
169
179
|
// Also include needs even if low-scored (safety)
|
|
@@ -175,7 +185,7 @@ export class ContextAssembler {
|
|
|
175
185
|
tokensUsed += item.tokenCost;
|
|
176
186
|
}
|
|
177
187
|
}
|
|
178
|
-
//
|
|
188
|
+
// 8. Build AssembledContext
|
|
179
189
|
const activeDecisionResults = [];
|
|
180
190
|
const openNeeds = [];
|
|
181
191
|
const recentFindings = [];
|
|
@@ -244,7 +254,7 @@ export class ContextAssembler {
|
|
|
244
254
|
}
|
|
245
255
|
}
|
|
246
256
|
}
|
|
247
|
-
//
|
|
257
|
+
// 9. Populate related_entities from knowledge graph
|
|
248
258
|
const relatedEntities = await this.getRelatedEntities(scope);
|
|
249
259
|
const result = {
|
|
250
260
|
assembled_at: new Date().toISOString(),
|
|
@@ -258,7 +268,7 @@ export class ContextAssembler {
|
|
|
258
268
|
recent_questions: recentQuestions,
|
|
259
269
|
related_entities: relatedEntities,
|
|
260
270
|
};
|
|
261
|
-
//
|
|
271
|
+
// 10. Integrate planning state from .planning/ directory
|
|
262
272
|
const planningState = this.planningBridge?.readPlanningState() ?? null;
|
|
263
273
|
if (planningState) {
|
|
264
274
|
// Always include planning_state as metadata (not subject to token budget)
|
|
@@ -286,7 +296,7 @@ export class ContextAssembler {
|
|
|
286
296
|
result.token_estimate += planningTokenCost;
|
|
287
297
|
}
|
|
288
298
|
}
|
|
289
|
-
//
|
|
299
|
+
// 11. Include recent handoffs matching scope (HND-03)
|
|
290
300
|
if (this.handoffStore) {
|
|
291
301
|
const handoffEntries = await this.handoffStore.list({ scope, limit: 5 });
|
|
292
302
|
if (handoffEntries.length > 0) {
|
|
@@ -302,7 +312,7 @@ export class ContextAssembler {
|
|
|
302
312
|
}));
|
|
303
313
|
}
|
|
304
314
|
}
|
|
305
|
-
//
|
|
315
|
+
// 12. Include suggested agents with matching capabilities (HND-06)
|
|
306
316
|
if (this.agentStore) {
|
|
307
317
|
const allAgents = await this.agentStore.getAll();
|
|
308
318
|
const thresholds = this.config.agents?.liveness ?? DEFAULT_LIVENESS_THRESHOLDS;
|
|
@@ -428,6 +438,51 @@ export class ContextAssembler {
|
|
|
428
438
|
reconsidered_decisions: reconsideredDecisions,
|
|
429
439
|
};
|
|
430
440
|
}
|
|
441
|
+
/**
|
|
442
|
+
* Compute graph connectivity boost for decisions (spec §5.5).
|
|
443
|
+
* Decisions whose affected_files/symbols have more graph relations
|
|
444
|
+
* to the scope get a higher boost (0.0 to 1.0).
|
|
445
|
+
*/
|
|
446
|
+
async computeGraphConnectivity(scope, decisions) {
|
|
447
|
+
const scores = new Map();
|
|
448
|
+
if (!this.graphEngine)
|
|
449
|
+
return scores;
|
|
450
|
+
try {
|
|
451
|
+
// Find entities matching the scope
|
|
452
|
+
const { entities: scopeEntities } = await this.graphEngine.query(scope, undefined, 20);
|
|
453
|
+
if (scopeEntities.length === 0)
|
|
454
|
+
return scores;
|
|
455
|
+
const scopeEntityIds = new Set(scopeEntities.map((e) => e.id));
|
|
456
|
+
const scopeEntityNames = new Set(scopeEntities.map((e) => e.name));
|
|
457
|
+
for (const [id, decision] of decisions) {
|
|
458
|
+
let connectionCount = 0;
|
|
459
|
+
const targets = [
|
|
460
|
+
...decision.affected_files,
|
|
461
|
+
...decision.affected_symbols,
|
|
462
|
+
];
|
|
463
|
+
for (const target of targets) {
|
|
464
|
+
const { entities: targetEntities } = await this.graphEngine.query(target, undefined, 3);
|
|
465
|
+
for (const te of targetEntities) {
|
|
466
|
+
const { neighbors } = await this.graphEngine.neighbors(te.id, 1);
|
|
467
|
+
for (const n of neighbors) {
|
|
468
|
+
if (scopeEntityIds.has(n.entity.id) ||
|
|
469
|
+
scopeEntityNames.has(n.entity.name)) {
|
|
470
|
+
connectionCount++;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
// Normalize: cap at 1.0, use log scale to avoid domination
|
|
476
|
+
scores.set(id, connectionCount > 0
|
|
477
|
+
? Math.min(1.0, Math.log2(connectionCount + 1) / 3)
|
|
478
|
+
: 0);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
catch {
|
|
482
|
+
// Graph errors should never break scoring
|
|
483
|
+
}
|
|
484
|
+
return scores;
|
|
485
|
+
}
|
|
431
486
|
/**
|
|
432
487
|
* Populate related_entities from the knowledge graph.
|
|
433
488
|
* Finds entities matching the scope and gets their immediate neighbors.
|