@folterung/project-memory 0.1.21 → 0.1.22

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 (67) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/coverage/lcov-report/chunking/chunker.ts.html +1 -1
  3. package/packages/cli/coverage/lcov-report/chunking/hash.ts.html +1 -1
  4. package/packages/cli/coverage/lcov-report/chunking/index.html +1 -1
  5. package/packages/cli/coverage/lcov-report/chunking/types.ts.html +1 -1
  6. package/packages/cli/coverage/lcov-report/config/index.html +7 -7
  7. package/packages/cli/coverage/lcov-report/config/load.ts.html +16 -4
  8. package/packages/cli/coverage/lcov-report/config/types.ts.html +35 -5
  9. package/packages/cli/coverage/lcov-report/embedding/index.html +1 -1
  10. package/packages/cli/coverage/lcov-report/embedding/stub.ts.html +1 -1
  11. package/packages/cli/coverage/lcov-report/index.html +21 -21
  12. package/packages/cli/coverage/lcov-report/qdrant/index.html +1 -1
  13. package/packages/cli/coverage/lcov-report/qdrant/upsert.ts.html +1 -1
  14. package/packages/cli/coverage/lcov-report/scope/allowlist.ts.html +1 -1
  15. package/packages/cli/coverage/lcov-report/scope/architecture-anchors.ts.html +529 -0
  16. package/packages/cli/coverage/lcov-report/scope/ignore.ts.html +1 -1
  17. package/packages/cli/coverage/lcov-report/scope/index.html +24 -9
  18. package/packages/cli/coverage/lcov.info +255 -19
  19. package/packages/cli/coverage/tmp/{coverage-24604-1770174821315-0.json → coverage-43283-1770177058833-0.json} +1 -1
  20. package/packages/cli/coverage/tmp/{coverage-24605-1770174821362-0.json → coverage-43284-1770177058881-0.json} +1 -1
  21. package/packages/cli/coverage/tmp/{coverage-24606-1770174821361-0.json → coverage-43285-1770177058878-0.json} +1 -1
  22. package/packages/cli/coverage/tmp/{coverage-24607-1770174821359-0.json → coverage-43286-1770177058876-0.json} +1 -1
  23. package/packages/cli/coverage/tmp/{coverage-24608-1770174821367-0.json → coverage-43287-1770177058882-0.json} +1 -1
  24. package/packages/cli/coverage/tmp/{coverage-24609-1770174821359-0.json → coverage-43288-1770177058880-0.json} +1 -1
  25. package/packages/cli/coverage/tmp/{coverage-24610-1770174821360-0.json → coverage-43289-1770177058879-0.json} +1 -1
  26. package/packages/cli/coverage/tmp/{coverage-24611-1770174821416-0.json → coverage-43290-1770177058933-0.json} +1 -1
  27. package/packages/cli/coverage/tmp/{coverage-24612-1770174821392-0.json → coverage-43291-1770177058905-0.json} +1 -1
  28. package/packages/cli/coverage/tmp/coverage-43292-1770177058903-0.json +1 -0
  29. package/packages/cli/coverage/tmp/{coverage-24613-1770174821380-0.json → coverage-43293-1770177058897-0.json} +1 -1
  30. package/packages/cli/dist/config/load.js +4 -0
  31. package/packages/cli/dist/config/load.js.map +1 -1
  32. package/packages/cli/dist/config/types.d.ts +8 -0
  33. package/packages/cli/dist/config/types.js +2 -0
  34. package/packages/cli/dist/config/types.js.map +1 -1
  35. package/packages/cli/dist/phase2/deep-index.js +39 -5
  36. package/packages/cli/dist/phase2/deep-index.js.map +1 -1
  37. package/packages/cli/dist/scope/architecture-anchors.d.ts +37 -0
  38. package/packages/cli/dist/scope/architecture-anchors.js +125 -0
  39. package/packages/cli/dist/scope/architecture-anchors.js.map +1 -0
  40. package/packages/cli/dist/scope/architecture-anchors.test.d.ts +1 -0
  41. package/packages/cli/dist/scope/architecture-anchors.test.js +58 -0
  42. package/packages/cli/dist/scope/architecture-anchors.test.js.map +1 -0
  43. package/packages/cli/src/config/load.ts +4 -0
  44. package/packages/cli/src/config/types.ts +11 -1
  45. package/packages/cli/src/phase2/deep-index.ts +43 -5
  46. package/packages/cli/src/scope/architecture-anchors.test.ts +83 -0
  47. package/packages/cli/src/scope/architecture-anchors.ts +148 -0
  48. package/packages/mcp-server/dist/system-instructions.md +7 -0
  49. package/packages/mcp-server/system-instructions.md +7 -0
  50. package/packages/server/coverage/lcov-report/api/index.html +5 -5
  51. package/packages/server/coverage/lcov-report/api/points.ts.html +1 -1
  52. package/packages/server/coverage/lcov-report/api/search.ts.html +14 -5
  53. package/packages/server/coverage/lcov-report/api/store.ts.html +1 -1
  54. package/packages/server/coverage/lcov-report/embedding/index.html +1 -1
  55. package/packages/server/coverage/lcov-report/embedding/stub.ts.html +1 -1
  56. package/packages/server/coverage/lcov-report/index.html +7 -7
  57. package/packages/server/coverage/lcov-report/qdrant/client.ts.html +1 -1
  58. package/packages/server/coverage/lcov-report/qdrant/index.html +1 -1
  59. package/packages/server/coverage/lcov.info +20 -17
  60. package/packages/server/coverage/tmp/{coverage-24692-1770174822211-0.json → coverage-43380-1770177059752-0.json} +1 -1
  61. package/packages/server/coverage/tmp/{coverage-24693-1770174822463-0.json → coverage-43381-1770177059983-0.json} +1 -1
  62. package/packages/server/coverage/tmp/{coverage-24694-1770174822454-0.json → coverage-43382-1770177059974-0.json} +1 -1
  63. package/packages/server/coverage/tmp/{coverage-24695-1770174822463-0.json → coverage-43383-1770177059981-0.json} +1 -1
  64. package/packages/server/coverage/tmp/{coverage-24696-1770174822253-0.json → coverage-43384-1770177059795-0.json} +1 -1
  65. package/packages/server/dist/api/search.js +3 -1
  66. package/packages/server/dist/api/search.js.map +1 -1
  67. package/packages/server/src/api/search.ts +4 -1
@@ -0,0 +1,529 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for scope/architecture-anchors.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">scope</a> architecture-anchors.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">79.72% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>118/148</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">94.33% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>50/53</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">83.33% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>5/6</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">79.72% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>118/148</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line medium'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
215
+ <span class="cline-any cline-yes">1x</span>
216
+ <span class="cline-any cline-yes">1x</span>
217
+ <span class="cline-any cline-yes">1x</span>
218
+ <span class="cline-any cline-yes">1x</span>
219
+ <span class="cline-any cline-yes">1x</span>
220
+ <span class="cline-any cline-yes">1x</span>
221
+ <span class="cline-any cline-yes">1x</span>
222
+ <span class="cline-any cline-yes">1x</span>
223
+ <span class="cline-any cline-yes">1x</span>
224
+ <span class="cline-any cline-yes">1x</span>
225
+ <span class="cline-any cline-yes">1x</span>
226
+ <span class="cline-any cline-yes">1x</span>
227
+ <span class="cline-any cline-yes">1x</span>
228
+ <span class="cline-any cline-yes">1x</span>
229
+ <span class="cline-any cline-yes">1x</span>
230
+ <span class="cline-any cline-yes">1x</span>
231
+ <span class="cline-any cline-yes">1x</span>
232
+ <span class="cline-any cline-yes">1x</span>
233
+ <span class="cline-any cline-yes">1x</span>
234
+ <span class="cline-any cline-yes">1x</span>
235
+ <span class="cline-any cline-yes">1x</span>
236
+ <span class="cline-any cline-yes">1x</span>
237
+ <span class="cline-any cline-yes">1x</span>
238
+ <span class="cline-any cline-yes">1x</span>
239
+ <span class="cline-any cline-yes">1x</span>
240
+ <span class="cline-any cline-yes">1x</span>
241
+ <span class="cline-any cline-yes">1x</span>
242
+ <span class="cline-any cline-yes">1x</span>
243
+ <span class="cline-any cline-yes">1x</span>
244
+ <span class="cline-any cline-yes">1x</span>
245
+ <span class="cline-any cline-yes">1x</span>
246
+ <span class="cline-any cline-yes">1x</span>
247
+ <span class="cline-any cline-yes">1x</span>
248
+ <span class="cline-any cline-yes">1x</span>
249
+ <span class="cline-any cline-yes">1x</span>
250
+ <span class="cline-any cline-yes">1x</span>
251
+ <span class="cline-any cline-yes">1x</span>
252
+ <span class="cline-any cline-yes">1x</span>
253
+ <span class="cline-any cline-yes">1x</span>
254
+ <span class="cline-any cline-yes">1x</span>
255
+ <span class="cline-any cline-yes">1x</span>
256
+ <span class="cline-any cline-yes">24x</span>
257
+ <span class="cline-any cline-yes">24x</span>
258
+ <span class="cline-any cline-yes">24x</span>
259
+ <span class="cline-any cline-yes">24x</span>
260
+ <span class="cline-any cline-yes">24x</span>
261
+ <span class="cline-any cline-yes">24x</span>
262
+ <span class="cline-any cline-yes">3x</span>
263
+ <span class="cline-any cline-yes">3x</span>
264
+ <span class="cline-any cline-yes">21x</span>
265
+ <span class="cline-any cline-yes">24x</span>
266
+ <span class="cline-any cline-yes">24x</span>
267
+ <span class="cline-any cline-yes">24x</span>
268
+ <span class="cline-any cline-yes">1x</span>
269
+ <span class="cline-any cline-yes">24x</span>
270
+ <span class="cline-any cline-yes">24x</span>
271
+ <span class="cline-any cline-yes">24x</span>
272
+ <span class="cline-any cline-yes">24x</span>
273
+ <span class="cline-any cline-yes">24x</span>
274
+ <span class="cline-any cline-yes">1x</span>
275
+ <span class="cline-any cline-yes">1x</span>
276
+ <span class="cline-any cline-yes">21x</span>
277
+ <span class="cline-any cline-yes">21x</span>
278
+ <span class="cline-any cline-yes">21x</span>
279
+ <span class="cline-any cline-yes">21x</span>
280
+ <span class="cline-any cline-yes">21x</span>
281
+ <span class="cline-any cline-yes">21x</span>
282
+ <span class="cline-any cline-yes">21x</span>
283
+ <span class="cline-any cline-yes">16x</span>
284
+ <span class="cline-any cline-yes">21x</span>
285
+ <span class="cline-any cline-yes">21x</span>
286
+ <span class="cline-any cline-yes">21x</span>
287
+ <span class="cline-any cline-yes">12x</span>
288
+ <span class="cline-any cline-yes">12x</span>
289
+ <span class="cline-any cline-yes">1x</span>
290
+ <span class="cline-any cline-yes">138x</span>
291
+ <span class="cline-any cline-yes">138x</span>
292
+ <span class="cline-any cline-yes">441x</span>
293
+ <span class="cline-any cline-yes">441x</span>
294
+ <span class="cline-any cline-yes">129x</span>
295
+ <span class="cline-any cline-yes">129x</span>
296
+ <span class="cline-any cline-yes">1x</span>
297
+ <span class="cline-any cline-yes">1x</span>
298
+ <span class="cline-any cline-yes">12x</span>
299
+ <span class="cline-any cline-yes">12x</span>
300
+ <span class="cline-any cline-yes">12x</span>
301
+ <span class="cline-any cline-yes">12x</span>
302
+ <span class="cline-any cline-yes">12x</span>
303
+ <span class="cline-any cline-yes">12x</span>
304
+ <span class="cline-any cline-yes">12x</span>
305
+ <span class="cline-any cline-yes">11x</span>
306
+ <span class="cline-any cline-yes">12x</span>
307
+ <span class="cline-any cline-yes">12x</span>
308
+ <span class="cline-any cline-yes">1x</span>
309
+ <span class="cline-any cline-yes">1x</span>
310
+ <span class="cline-any cline-yes">10x</span>
311
+ <span class="cline-any cline-yes">12x</span>
312
+ <span class="cline-any cline-yes">12x</span>
313
+ <span class="cline-any cline-yes">12x</span>
314
+ <span class="cline-any cline-yes">12x</span>
315
+ <span class="cline-any cline-yes">12x</span>
316
+ <span class="cline-any cline-yes">12x</span>
317
+ <span class="cline-any cline-yes">12x</span>
318
+ <span class="cline-any cline-yes">2x</span>
319
+ <span class="cline-any cline-yes">2x</span>
320
+ <span class="cline-any cline-yes">1x</span>
321
+ <span class="cline-any cline-yes">1x</span>
322
+ <span class="cline-any cline-yes">1x</span>
323
+ <span class="cline-any cline-yes">1x</span>
324
+ <span class="cline-any cline-yes">1x</span>
325
+ <span class="cline-any cline-yes">1x</span>
326
+ <span class="cline-any cline-yes">1x</span>
327
+ <span class="cline-any cline-yes">1x</span>
328
+ <span class="cline-any cline-yes">1x</span>
329
+ <span class="cline-any cline-yes">1x</span>
330
+ <span class="cline-any cline-yes">1x</span>
331
+ <span class="cline-any cline-yes">1x</span>
332
+ <span class="cline-any cline-no">&nbsp;</span>
333
+ <span class="cline-any cline-no">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-no">&nbsp;</span>
336
+ <span class="cline-any cline-no">&nbsp;</span>
337
+ <span class="cline-any cline-no">&nbsp;</span>
338
+ <span class="cline-any cline-no">&nbsp;</span>
339
+ <span class="cline-any cline-no">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
+ <span class="cline-any cline-no">&nbsp;</span>
342
+ <span class="cline-any cline-no">&nbsp;</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-no">&nbsp;</span>
347
+ <span class="cline-any cline-no">&nbsp;</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import fg from "fast-glob";
363
+ import { join } from "node:path";
364
+ import { statSync } from "node:fs";
365
+ &nbsp;
366
+ /**
367
+ * Architecture anchors: deterministic path rules for tagging entrypoints, routing,
368
+ * DI, bootstrap, and config so they can be retrieved for system-overview queries.
369
+ * Two tiers: hard anchors (explicit paths, always tag) and soft anchors (broader
370
+ * globs restricted to allowed roots and optional file size).
371
+ * Binaries (pdf, images, archives, fonts, etc.) are never considered anchors.
372
+ */
373
+ &nbsp;
374
+ export type ArchitectureAnchorKind = "entrypoint" | "routing" | "bootstrap" | "di" | "config";
375
+ &nbsp;
376
+ /** Extensions that are never considered architecture anchors (binaries / non-code). */
377
+ export const BINARY_EXTENSIONS = new Set([
378
+ "pdf", "png", "jpg", "jpeg", "gif", "ico", "webp", "svg",
379
+ "woff", "woff2", "ttf", "eot", "otf",
380
+ "zip", "tar", "gz", "rar", "7z",
381
+ "exe", "dll", "so", "dylib", "bin",
382
+ ]);
383
+ &nbsp;
384
+ /** Default roots under which soft anchors are allowed (reduces false positives). */
385
+ export const DEFAULT_SOFT_ANCHOR_ROOTS = ["app/", "src/", "public/", "server/", "api/"];
386
+ &nbsp;
387
+ /** Default max file size (bytes) for soft anchors; larger files are not tagged. */
388
+ export const DEFAULT_MAX_SOFT_ANCHOR_FILE_BYTES = 200 * 1024;
389
+ &nbsp;
390
+ export interface GetArchitectureAnchorKindOptions {
391
+ fileSizeBytes?: number;
392
+ allowedRoots?: string[];
393
+ maxSoftAnchorFileBytes?: number;
394
+ }
395
+ &nbsp;
396
+ /**
397
+ * Returns the architecture anchor kind for a relative path, or undefined if not an anchor.
398
+ * Hard anchors (explicit entrypoint/wiring paths) are always tagged when matched.
399
+ * Soft anchors (broader patterns) are only tagged when path is under allowedRoots
400
+ * and (when fileSizeBytes is provided) under maxSoftAnchorFileBytes.
401
+ * Paths with binary extensions are never anchors.
402
+ */
403
+ export function getArchitectureAnchorKind(
404
+ relativePath: string,
405
+ options?: GetArchitectureAnchorKindOptions
406
+ ): ArchitectureAnchorKind | undefined {
407
+ const normalized = relativePath.replace(/\\/g, "/");
408
+ const ext = extFromPath(normalized);
409
+ if (ext &amp;&amp; BINARY_EXTENSIONS.has(ext.toLowerCase())) {
410
+ return undefined;
411
+ }
412
+ &nbsp;
413
+ const kind = matchHardAnchor(normalized) ?? matchSoftAnchor(normalized, options);
414
+ return kind;
415
+ }
416
+ &nbsp;
417
+ function extFromPath(path: string): string {
418
+ const i = path.lastIndexOf(".");
419
+ if (i === -1) <span class="branch-0 cbranch-no" title="branch not covered" >return "";</span>
420
+ return path.slice(i + 1);
421
+ }
422
+ &nbsp;
423
+ /** Hard anchors: explicit, narrow paths. No size/root constraints. */
424
+ function matchHardAnchor(normalized: string): ArchitectureAnchorKind | undefined {
425
+ const entrypointExts = ["ts", "tsx", "js", "jsx", "html", "php"];
426
+ if (pathMatches(normalized, "public/index", entrypointExts)) return "entrypoint";
427
+ if (pathMatches(normalized, "src/index", ["ts", "tsx", "js", "jsx"])) return "entrypoint";
428
+ if (pathMatches(normalized, "server/index", ["ts", "js"])) return "entrypoint";
429
+ if (pathMatches(normalized, "api/index", ["ts", "js"])) return "entrypoint";
430
+ if (pathMatches(normalized, "app/index", ["ts", "tsx", "js", "jsx", "php"])) return "entrypoint";
431
+ &nbsp;
432
+ if (pathMatches(normalized, "app/routes", ["ts", "js"])) return "routing";
433
+ if (pathMatches(normalized, "app/dependencies", ["ts", "js"])) return "di";
434
+ if (pathMatches(normalized, "app/settings", ["ts", "js"])) return "config";
435
+ return undefined;
436
+ }
437
+ &nbsp;
438
+ function pathMatches(normalized: string, prefix: string, exts: string[]): boolean {
439
+ for (const ext of exts) {
440
+ if (normalized === `${prefix}.${ext}`) return true;
441
+ }
442
+ return false;
443
+ }
444
+ &nbsp;
445
+ /** Soft anchors: broader patterns, only under allowed roots and optional size cap. */
446
+ function matchSoftAnchor(
447
+ normalized: string,
448
+ options?: GetArchitectureAnchorKindOptions
449
+ ): ArchitectureAnchorKind | undefined {
450
+ const roots = options?.allowedRoots ?? DEFAULT_SOFT_ANCHOR_ROOTS;
451
+ const underRoot = roots.some((r) =&gt; normalized === r.slice(0, -1) || normalized.startsWith(r));
452
+ if (!underRoot) return undefined;
453
+ &nbsp;
454
+ const maxBytes = options?.maxSoftAnchorFileBytes ?? DEFAULT_MAX_SOFT_ANCHOR_FILE_BYTES;
455
+ if (options?.fileSizeBytes != null &amp;&amp; options.fileSizeBytes &gt; maxBytes) {
456
+ return undefined;
457
+ }
458
+ &nbsp;
459
+ if (normalized.includes("/routes/") || /\/routes\.(ts|js)$/.test(normalized)) <span class="branch-0 cbranch-no" title="branch not covered" >return "routing";</span>
460
+ if (/\/container[\w.-]*\.(ts|js)$/.test(normalized)) return "di";
461
+ if (/\/di[\w.-]*\.(ts|js)$/.test(normalized)) return "di";
462
+ if (/\/middleware[\w.-]*\.(ts|js)$/.test(normalized)) return "bootstrap";
463
+ if (/\/bootstrap[\w.-]*\.(ts|js)$/.test(normalized)) return "bootstrap";
464
+ if (/\/config[\w.-]*\.(ts|js|yml|yaml)$/.test(normalized)) return "config";
465
+ if (/\/settings[\w.-]*\.(ts|js)$/.test(normalized)) <span class="branch-0 cbranch-no" title="branch not covered" >return "config";</span>
466
+ return undefined;
467
+ }
468
+ &nbsp;
469
+ export interface ListArchitectureAnchorPathsOptions {
470
+ allowedRoots?: string[];
471
+ maxSoftAnchorFileBytes?: number;
472
+ }
473
+ &nbsp;
474
+ /**
475
+ * Returns absolute paths of files in the repo that match architecture anchor rules.
476
+ * Used when allowOutsideInclude is true to merge anchor paths into eligible paths.
477
+ * Binary extensions are excluded; soft anchors are restricted to allowedRoots and file size.
478
+ */
479
+ export<span class="fstat-no" title="function not covered" > function listArchitectureAnchorPaths(</span>
480
+ <span class="cstat-no" title="statement not covered" > cwd: string,</span>
481
+ <span class="cstat-no" title="statement not covered" > options?: ListArchitectureAnchorPathsOptions</span>
482
+ <span class="cstat-no" title="statement not covered" >): string[] {</span>
483
+ <span class="cstat-no" title="statement not covered" > const allowedRoots = options?.allowedRoots ?? DEFAULT_SOFT_ANCHOR_ROOTS;</span>
484
+ <span class="cstat-no" title="statement not covered" > const maxBytes = options?.maxSoftAnchorFileBytes ?? DEFAULT_MAX_SOFT_ANCHOR_FILE_BYTES;</span>
485
+ <span class="cstat-no" title="statement not covered" > const files = fg.sync("**/*", {</span>
486
+ <span class="cstat-no" title="statement not covered" > cwd,</span>
487
+ <span class="cstat-no" title="statement not covered" > dot: true,</span>
488
+ <span class="cstat-no" title="statement not covered" > onlyFiles: true,</span>
489
+ <span class="cstat-no" title="statement not covered" > absolute: true,</span>
490
+ <span class="cstat-no" title="statement not covered" > suppressErrors: true,</span>
491
+ <span class="cstat-no" title="statement not covered" > });</span>
492
+ <span class="cstat-no" title="statement not covered" > const result: string[] = [];</span>
493
+ <span class="cstat-no" title="statement not covered" > for (const abs of files) {</span>
494
+ <span class="cstat-no" title="statement not covered" > const rel = abs.slice(cwd.length).replace(/^[/\\]+/, "").replace(/\\/g, "/");</span>
495
+ <span class="cstat-no" title="statement not covered" > let fileSizeBytes: number | undefined;</span>
496
+ <span class="cstat-no" title="statement not covered" > try {</span>
497
+ <span class="cstat-no" title="statement not covered" > fileSizeBytes = statSync(abs).size;</span>
498
+ <span class="cstat-no" title="statement not covered" > } catch {</span>
499
+ <span class="cstat-no" title="statement not covered" > continue;</span>
500
+ <span class="cstat-no" title="statement not covered" > }</span>
501
+ <span class="cstat-no" title="statement not covered" > const kind = getArchitectureAnchorKind(rel, {</span>
502
+ <span class="cstat-no" title="statement not covered" > fileSizeBytes,</span>
503
+ <span class="cstat-no" title="statement not covered" > allowedRoots,</span>
504
+ <span class="cstat-no" title="statement not covered" > maxSoftAnchorFileBytes: maxBytes,</span>
505
+ <span class="cstat-no" title="statement not covered" > });</span>
506
+ <span class="cstat-no" title="statement not covered" > if (kind != null) result.push(abs);</span>
507
+ <span class="cstat-no" title="statement not covered" > }</span>
508
+ <span class="cstat-no" title="statement not covered" > return result;</span>
509
+ <span class="cstat-no" title="statement not covered" >}</span>
510
+ &nbsp;</pre></td></tr></table></pre>
511
+
512
+ <div class='push'></div><!-- for sticky footer -->
513
+ </div><!-- /wrapper -->
514
+ <div class='footer quiet pad2 space-top1 center small'>
515
+ Code coverage generated by
516
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
517
+ at 2026-02-04T03:50:58.973Z
518
+ </div>
519
+ <script src="../prettify.js"></script>
520
+ <script>
521
+ window.onload = function () {
522
+ prettyPrint();
523
+ };
524
+ </script>
525
+ <script src="../sorter.js"></script>
526
+ <script src="../block-navigation.js"></script>
527
+ </body>
528
+ </html>
529
+
@@ -328,7 +328,7 @@ export function getBuiltinIgnores(): string[] {
328
328
  <div class='footer quiet pad2 space-top1 center small'>
329
329
  Code coverage generated by
330
330
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
331
- at 2026-02-04T03:13:41.455Z
331
+ at 2026-02-04T03:50:58.973Z
332
332
  </div>
333
333
  <script src="../prettify.js"></script>
334
334
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
26
+ <span class="strong">88.97% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>124/124</span>
28
+ <span class='fraction'>242/272</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">94.28% </span>
33
+ <span class="strong">94.31% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>33/35</span>
35
+ <span class='fraction'>83/88</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">93.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>9/9</span>
42
+ <span class='fraction'>14/15</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
47
+ <span class="strong">88.97% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>124/124</span>
49
+ <span class='fraction'>242/272</span>
50
50
  </div>
51
51
 
52
52
 
@@ -93,6 +93,21 @@
93
93
  <td data-value="38" class="abs high">38/38</td>
94
94
  </tr>
95
95
 
96
+ <tr>
97
+ <td class="file medium" data-value="architecture-anchors.ts"><a href="architecture-anchors.ts.html">architecture-anchors.ts</a></td>
98
+ <td data-value="79.72" class="pic medium">
99
+ <div class="chart"><div class="cover-fill" style="width: 79%"></div><div class="cover-empty" style="width: 21%"></div></div>
100
+ </td>
101
+ <td data-value="79.72" class="pct medium">79.72%</td>
102
+ <td data-value="148" class="abs medium">118/148</td>
103
+ <td data-value="94.33" class="pct high">94.33%</td>
104
+ <td data-value="53" class="abs high">50/53</td>
105
+ <td data-value="83.33" class="pct high">83.33%</td>
106
+ <td data-value="6" class="abs high">5/6</td>
107
+ <td data-value="79.72" class="pct medium">79.72%</td>
108
+ <td data-value="148" class="abs medium">118/148</td>
109
+ </tr>
110
+
96
111
  <tr>
97
112
  <td class="file high" data-value="ignore.ts"><a href="ignore.ts.html">ignore.ts</a></td>
98
113
  <td data-value="100" class="pic high">
@@ -116,7 +131,7 @@
116
131
  <div class='footer quiet pad2 space-top1 center small'>
117
132
  Code coverage generated by
118
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2026-02-04T03:13:41.455Z
134
+ at 2026-02-04T03:50:58.973Z
120
135
  </div>
121
136
  <script src="../prettify.js"></script>
122
137
  <script>