codebaseiq 0.1.0 → 0.2.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 (422) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/augment-vue-worker.js +1 -1
  3. package/dist/{chunk-DQMDCD24.js → chunk-27PHVDKL.js} +2 -2
  4. package/dist/{chunk-ZMI2JSX2.js → chunk-2DMVFAY7.js} +2 -2
  5. package/dist/{chunk-5PUWMSDU.js → chunk-2E6BTWER.js} +2 -2
  6. package/dist/{chunk-YESXMKX3.js → chunk-2F5ERMNI.js} +2 -2
  7. package/dist/chunk-2VKB5CMA.js +60 -0
  8. package/dist/{chunk-NNJ2KZZG.js → chunk-327YK6TB.js} +4 -4
  9. package/dist/chunk-347TXATM.js +2 -0
  10. package/dist/{chunk-VEXUL62T.js → chunk-35YYZD3D.js} +2 -2
  11. package/dist/chunk-36WRYYTE.js +3 -0
  12. package/dist/chunk-37TKC6MB.js +2 -0
  13. package/dist/{chunk-FAJQ7LWY.js → chunk-3AC56WAR.js} +2 -2
  14. package/dist/{chunk-JE3WZ6II.js → chunk-3NUZVLR7.js} +2 -2
  15. package/dist/{chunk-UZGZB3VB.js → chunk-3XFJUWJE.js} +2 -2
  16. package/dist/{chunk-OVTS4DKB.js → chunk-4AOOSCZ7.js} +2 -2
  17. package/dist/{chunk-LU3BMVH2.js → chunk-4IFISPQW.js} +2 -2
  18. package/dist/chunk-4NHWNAWQ.js +11 -0
  19. package/dist/chunk-4O52YNKL.js +5 -0
  20. package/dist/{chunk-HPJRBHVT.js → chunk-54K6556S.js} +2 -2
  21. package/dist/{chunk-HRWGYWRJ.js → chunk-57GCCPLS.js} +2 -2
  22. package/dist/{chunk-J77SU6VA.js → chunk-57KEZDPT.js} +2 -2
  23. package/dist/{chunk-OFBE4NGP.js → chunk-57KFVPVZ.js} +2 -2
  24. package/dist/{chunk-WOQBZPIF.js → chunk-5BDK6QC3.js} +2 -2
  25. package/dist/{chunk-7MGU3HPH.js → chunk-5IO2APSS.js} +2 -2
  26. package/dist/chunk-5NJPH3QZ.js +61 -0
  27. package/dist/{chunk-GW6Z3WGY.js → chunk-5WXOEJ4G.js} +2 -2
  28. package/dist/chunk-5XEVXVTK.js +3 -0
  29. package/dist/{chunk-RR7SX44N.js → chunk-6OVNYYY4.js} +2 -2
  30. package/dist/{chunk-ZV3JV5G5.js → chunk-6SDEQTVY.js} +2 -2
  31. package/dist/{chunk-EF2R3WNQ.js → chunk-6URCE5QY.js} +2 -2
  32. package/dist/{chunk-UCD3H3UZ.js → chunk-6ZV5EDUT.js} +2 -2
  33. package/dist/{chunk-C6SBF2WH.js → chunk-77GHPR2R.js} +2 -2
  34. package/dist/{chunk-YVCIMIOC.js → chunk-7R64XY4Y.js} +2 -2
  35. package/dist/{chunk-VXYS3FZD.js → chunk-7Z7HCZ7J.js} +2 -2
  36. package/dist/{chunk-CO5R3UNA.js → chunk-A67HT5FR.js} +2 -2
  37. package/dist/{chunk-UDS562V4.js → chunk-A7XQT7MH.js} +2 -2
  38. package/dist/{chunk-RDBI2RXU.js → chunk-ACZDU5GK.js} +2 -2
  39. package/dist/{chunk-FETNQCFO.js → chunk-AM5SUGHF.js} +2 -2
  40. package/dist/{chunk-NNOKTMZT.js → chunk-B2E3HZ2A.js} +2 -2
  41. package/dist/{chunk-CVYSU6BX.js → chunk-BH5CE4LN.js} +2 -2
  42. package/dist/chunk-BLKYYQ7C.js +543 -0
  43. package/dist/{chunk-4WKDMDEW.js → chunk-BX2U3QQV.js} +2 -2
  44. package/dist/{chunk-ZKX2FRS6.js → chunk-CANBLFVQ.js} +2 -2
  45. package/dist/{chunk-SMRBZ6EC.js → chunk-CCRZLRWJ.js} +2 -2
  46. package/dist/chunk-CDWSLAPN.js +21 -0
  47. package/dist/chunk-CIVYHK7U.js +22 -0
  48. package/dist/{chunk-L57ZKWVG.js → chunk-CMXW7MFV.js} +2 -2
  49. package/dist/{chunk-T3DGWPXM.js → chunk-CSZOQ7YO.js} +2 -2
  50. package/dist/{chunk-ZZXSWSN6.js → chunk-CWMHWD56.js} +2 -2
  51. package/dist/{chunk-6NW7MU72.js → chunk-CZEIHYMP.js} +2 -2
  52. package/dist/{chunk-DO6WQD2T.js → chunk-D62CTZX6.js} +2 -2
  53. package/dist/{chunk-XWUOUWYI.js → chunk-DFPAZXLU.js} +2 -2
  54. package/dist/{chunk-MOVBWNIP.js → chunk-DKJXK3HA.js} +2 -2
  55. package/dist/{chunk-XMQ23E27.js → chunk-DLC6JDN7.js} +2 -2
  56. package/dist/chunk-DUKHVPU5.js +4 -0
  57. package/dist/{chunk-ID63777H.js → chunk-DVYG3JTA.js} +2 -2
  58. package/dist/{chunk-NE6IU5ZD.js → chunk-EFFMFK7C.js} +2 -2
  59. package/dist/{chunk-I2T2LLK2.js → chunk-EM5UHLAM.js} +2 -2
  60. package/dist/chunk-EN4AHLL3.js +3 -0
  61. package/dist/chunk-EXMVF3JR.js +3 -0
  62. package/dist/{chunk-SWHMHUKF.js → chunk-FEBLLMTL.js} +2 -2
  63. package/dist/chunk-FIXYHQ3W.js +3 -0
  64. package/dist/{chunk-RKEJ6VTF.js → chunk-FLLXYUOL.js} +2 -2
  65. package/dist/{chunk-KWVHSKHK.js → chunk-FPDL2TUB.js} +2 -2
  66. package/dist/chunk-FQA3KIFX.js +17 -0
  67. package/dist/chunk-FWY2PRIF.js +3 -0
  68. package/dist/chunk-FY5V4V4F.js +2 -0
  69. package/dist/chunk-G2XUZCF2.js +88 -0
  70. package/dist/{chunk-QHRNXP3C.js → chunk-GXVDTHFC.js} +2 -2
  71. package/dist/{chunk-6MUIJMVL.js → chunk-H3CKAL6P.js} +2 -2
  72. package/dist/chunk-H5QXP63L.js +2 -0
  73. package/dist/{chunk-VUIYB2V3.js → chunk-HBQGKMM3.js} +2 -2
  74. package/dist/{chunk-PYAB5SM6.js → chunk-HBXZAGY6.js} +2 -2
  75. package/dist/{chunk-NNO6A2PO.js → chunk-HCMQZPEO.js} +2 -2
  76. package/dist/{chunk-Q65CQ4XL.js → chunk-HHBBGWES.js} +2 -2
  77. package/dist/{chunk-GTXSJDCO.js → chunk-HIEXRDJF.js} +2 -2
  78. package/dist/{chunk-4FC325IF.js → chunk-HYKSLTAR.js} +2 -2
  79. package/dist/{chunk-XLQ3GLWZ.js → chunk-I2KP4AGR.js} +2 -2
  80. package/dist/chunk-I5FCDTK2.js +2 -0
  81. package/dist/{chunk-QKPLA6IC.js → chunk-I645ZF75.js} +2 -2
  82. package/dist/{chunk-FDGD5AB5.js → chunk-IBM3F2BJ.js} +2 -2
  83. package/dist/{chunk-Q72QSKXC.js → chunk-IEL6Q5W3.js} +38 -38
  84. package/dist/{chunk-NCZUNH3E.js → chunk-IGQQUENU.js} +12 -12
  85. package/dist/chunk-IGYAZPRX.js +4 -0
  86. package/dist/chunk-IOVPAZWP.js +3 -0
  87. package/dist/{chunk-OL6KJP3N.js → chunk-IVJJNVSX.js} +2 -2
  88. package/dist/{chunk-AKB7V7TV.js → chunk-IWAMYGPN.js} +2 -2
  89. package/dist/chunk-IYBIBMPF.js +90 -0
  90. package/dist/{chunk-IOP6FWIM.js → chunk-J24VICI5.js} +2 -2
  91. package/dist/{chunk-C7QOQX32.js → chunk-JN5LIBT3.js} +2 -2
  92. package/dist/{chunk-O6QTXQPJ.js → chunk-JOALNFY3.js} +2 -2
  93. package/dist/{chunk-GCHRX4YW.js → chunk-JUO3Z644.js} +2 -2
  94. package/dist/{chunk-BJ6SQAEN.js → chunk-JXHLB7TP.js} +2 -2
  95. package/dist/{chunk-IJ4HMYBE.js → chunk-JYX5UZSZ.js} +2 -2
  96. package/dist/chunk-K2O7SBAU.js +2 -0
  97. package/dist/{chunk-OLF4MA5W.js → chunk-K5G7SPAG.js} +2 -2
  98. package/dist/{chunk-YSNONTJ2.js → chunk-KDYQQJ6X.js} +2 -2
  99. package/dist/{chunk-7NVGT435.js → chunk-KM4QRWI5.js} +2 -2
  100. package/dist/{chunk-HKQUXIFO.js → chunk-KNV5VFDV.js} +2 -2
  101. package/dist/chunk-L3YSDLNB.js +2 -0
  102. package/dist/{chunk-EZNMUY67.js → chunk-LAGDJXFY.js} +2 -2
  103. package/dist/{chunk-ENCCHKM6.js → chunk-LY2NB5XR.js} +4 -4
  104. package/dist/chunk-M4EVGA5S.js +14 -0
  105. package/dist/chunk-M7LAIM77.js +127 -0
  106. package/dist/{chunk-BVAJLC5A.js → chunk-MRGTCMDK.js} +2 -2
  107. package/dist/{chunk-OZYRSMSH.js → chunk-MT5W4DUG.js} +2 -2
  108. package/dist/{chunk-VE5AVNMP.js → chunk-MTMF4N7F.js} +2 -2
  109. package/dist/chunk-N3Q3AWGW.js +545 -0
  110. package/dist/{chunk-TXXOEMZJ.js → chunk-NDGTJHQN.js} +2 -2
  111. package/dist/chunk-NIO346UL.js +2 -0
  112. package/dist/chunk-NJA4MMBD.js +2 -0
  113. package/dist/{chunk-7FND7D7N.js → chunk-NK76RSB6.js} +2 -2
  114. package/dist/{chunk-H3LGFZVK.js → chunk-NTRW52UR.js} +2 -2
  115. package/dist/{chunk-JOIRNPPY.js → chunk-OJFLPVBP.js} +2 -2
  116. package/dist/{chunk-KMITESMT.js → chunk-OMBRP7BB.js} +2 -2
  117. package/dist/{chunk-UP3BUZR5.js → chunk-OVKZM2XI.js} +2 -2
  118. package/dist/{chunk-MVB3DAEY.js → chunk-PARCKE3Q.js} +2 -2
  119. package/dist/{chunk-CAUCPUOF.js → chunk-PFPHS4NO.js} +2 -2
  120. package/dist/chunk-PHPQ24UG.js +22 -0
  121. package/dist/chunk-PLZXWZHY.js +77 -0
  122. package/dist/{chunk-34WBMAYK.js → chunk-PNVZIJ57.js} +2 -2
  123. package/dist/{chunk-SYDJMPES.js → chunk-QKVTWODE.js} +2 -2
  124. package/dist/{chunk-FW53T7EB.js → chunk-QLTFXVUI.js} +2 -2
  125. package/dist/{chunk-PBI2LFKH.js → chunk-QMGWSEPL.js} +2 -2
  126. package/dist/{chunk-CQP3THUZ.js → chunk-QVHZB75Z.js} +2 -2
  127. package/dist/{chunk-6BQ3DSPK.js → chunk-QVWDQTMG.js} +2 -2
  128. package/dist/{chunk-ST7V3SKN.js → chunk-RCPZOPV6.js} +2 -2
  129. package/dist/chunk-RJWAB4VR.js +345 -0
  130. package/dist/chunk-RRPK327J.js +20 -0
  131. package/dist/chunk-RVYLJDXC.js +21 -0
  132. package/dist/chunk-RWKEXCHU.js +3 -0
  133. package/dist/{chunk-L4NRUAGJ.js → chunk-S5SKXCND.js} +2 -2
  134. package/dist/{chunk-RBAS5ZHI.js → chunk-S64NCE2Z.js} +2 -2
  135. package/dist/{chunk-WMPRTGH2.js → chunk-SF34QLK2.js} +2 -2
  136. package/dist/{chunk-ANFVSJWQ.js → chunk-SJZQ2PTZ.js} +2 -2
  137. package/dist/{chunk-4XTAUQFD.js → chunk-SRY26ITJ.js} +2 -2
  138. package/dist/chunk-SV2LEFVM.js +2 -0
  139. package/dist/{chunk-7XAN6GKB.js → chunk-T3YFIJ5P.js} +2 -2
  140. package/dist/chunk-T55YPJGB.js +3 -0
  141. package/dist/chunk-TAJ6UGCO.js +21 -0
  142. package/dist/{chunk-PIOMTC27.js → chunk-TUTSO7UZ.js} +2 -2
  143. package/dist/{chunk-FQKZWM4L.js → chunk-U24M5RQM.js} +5 -5
  144. package/dist/{chunk-XME3HPXZ.js → chunk-U2XX3BT4.js} +2 -2
  145. package/dist/{chunk-SZD2KF7Q.js → chunk-UWB5WMC2.js} +2 -2
  146. package/dist/{chunk-6CS3UQTN.js → chunk-VCL7FK3E.js} +2 -2
  147. package/dist/{chunk-N3IQCBCF.js → chunk-VCWAJPXQ.js} +2 -2
  148. package/dist/{chunk-LZYFLFEH.js → chunk-VG55NFXF.js} +2 -2
  149. package/dist/{chunk-PTAWHLVJ.js → chunk-VLTUX4IF.js} +2 -2
  150. package/dist/{chunk-JEJLSICM.js → chunk-VVCBMH5O.js} +2 -2
  151. package/dist/{chunk-JSOYNVWH.js → chunk-VYZQZ4ZN.js} +2 -2
  152. package/dist/chunk-W3FK73MD.js +8 -0
  153. package/dist/{chunk-UNBY47BC.js → chunk-W6C6QTXJ.js} +2 -2
  154. package/dist/chunk-WH5SYOMD.js +2 -0
  155. package/dist/chunk-WJOQC4P7.js +7 -0
  156. package/dist/chunk-WO47BIPY.js +3 -0
  157. package/dist/chunk-WOOTEWQT.js +239 -0
  158. package/dist/{chunk-UBGWN7I4.js → chunk-X5I2BQGX.js} +2 -2
  159. package/dist/{chunk-PX4RYAAK.js → chunk-XNUWRTYM.js} +2 -2
  160. package/dist/{chunk-ICFDQHAM.js → chunk-XUJM6474.js} +2 -2
  161. package/dist/chunk-XYLV727H.js +21 -0
  162. package/dist/{chunk-TRRC4ZJ7.js → chunk-YFQPWKHR.js} +2 -2
  163. package/dist/{chunk-NEDP5RFQ.js → chunk-YIOQJ45A.js} +2 -2
  164. package/dist/{chunk-Y6KHROC3.js → chunk-YXJ4IAHH.js} +2 -2
  165. package/dist/chunk-YYFV32WR.js +3 -0
  166. package/dist/{chunk-BH5F2Q4O.js → chunk-ZB3V5QM7.js} +2 -2
  167. package/dist/chunk-ZJZQ7Q2Q.js +3 -0
  168. package/dist/{chunk-EMNIHCRB.js → chunk-ZNQCR656.js} +2 -2
  169. package/dist/{chunk-TIIC3ZE7.js → chunk-ZOEDRCR4.js} +2 -2
  170. package/dist/cli-context-TSADTXLB.js +2 -0
  171. package/dist/cli-context-XEPPF4RX.js +3 -0
  172. package/dist/cli-program-KJGQEM72.js +7 -0
  173. package/dist/cli.js +1 -1
  174. package/dist/{code-DlqpBDd0.d.ts → code-CDe-mIjx.d.ts} +1 -1
  175. package/dist/code-viewer-YGDON6SY.js +12 -0
  176. package/dist/code-viewer-ZCTHXQ5C.js +11 -0
  177. package/dist/command-descriptors-5VAB2MZX.js +335 -0
  178. package/dist/command-descriptors-EAHKIRAG.js +337 -0
  179. package/dist/{config-types-BNoC96J3.d.ts → config-types-D6X5S68_.d.ts} +50 -0
  180. package/dist/{db-D7sauVFH.d.ts → db-DmRNdCtm.d.ts} +1 -1
  181. package/dist/direct-navigation-B3SGOOBW.js +2 -0
  182. package/dist/direct-navigation-ZL362KXF.js +3 -0
  183. package/dist/{graph-evidence-BIFqyisO.d.ts → graph-evidence-Bs54NWws.d.ts} +1 -1
  184. package/dist/{health-DJaZXg8I.d.ts → health-BnzbSLCE.d.ts} +1 -1
  185. package/dist/index.d.ts +2 -2
  186. package/dist/index.js +1 -1
  187. package/dist/invocation-command-descriptors-CSUGUHTT.js +2 -0
  188. package/dist/invocation-command-descriptors-PPVZOIE5.js +3 -0
  189. package/dist/output-continuation-command-FTVVBVSN.js +2 -0
  190. package/dist/output-continuation-command-ITPRC3YV.js +3 -0
  191. package/dist/project-reindex-7HZSLLLY.js +3 -0
  192. package/dist/project-reindex-NGM3DYBN.js +2 -0
  193. package/dist/queries/affected.d.ts +2 -2
  194. package/dist/queries/affected.js +1 -1
  195. package/dist/queries/anchors.d.ts +2 -2
  196. package/dist/queries/anchors.js +1 -1
  197. package/dist/queries/architecture.d.ts +2 -2
  198. package/dist/queries/architecture.js +1 -1
  199. package/dist/queries/bottlenecks.d.ts +2 -2
  200. package/dist/queries/bottlenecks.js +1 -1
  201. package/dist/queries/by-kind.d.ts +2 -2
  202. package/dist/queries/by-kind.js +1 -1
  203. package/dist/queries/call-graph.d.ts +2 -2
  204. package/dist/queries/call-graph.js +1 -1
  205. package/dist/queries/change-surface.d.ts +2 -2
  206. package/dist/queries/change-surface.js +1 -1
  207. package/dist/queries/cleanup-plan.d.ts +2 -2
  208. package/dist/queries/cleanup-plan.js +1 -1
  209. package/dist/queries/co-change.d.ts +2 -2
  210. package/dist/queries/co-change.js +1 -1
  211. package/dist/queries/code.d.ts +3 -3
  212. package/dist/queries/code.js +1 -1
  213. package/dist/queries/complexity-hotspots.d.ts +2 -2
  214. package/dist/queries/complexity-hotspots.js +1 -1
  215. package/dist/queries/complexity.d.ts +2 -2
  216. package/dist/queries/complexity.js +1 -1
  217. package/dist/queries/context.d.ts +2 -2
  218. package/dist/queries/context.js +1 -1
  219. package/dist/queries/convergence.d.ts +2 -2
  220. package/dist/queries/convergence.js +1 -1
  221. package/dist/queries/coupling.d.ts +2 -2
  222. package/dist/queries/coupling.js +1 -1
  223. package/dist/queries/cycles.d.ts +2 -2
  224. package/dist/queries/cycles.js +1 -1
  225. package/dist/queries/dataflow.d.ts +2 -2
  226. package/dist/queries/dataflow.js +1 -1
  227. package/dist/queries/dead.d.ts +2 -2
  228. package/dist/queries/dead.js +1 -1
  229. package/dist/queries/decorative-checkers.d.ts +2 -2
  230. package/dist/queries/decorative-checkers.js +1 -1
  231. package/dist/queries/deep-chains.d.ts +2 -2
  232. package/dist/queries/deep-chains.js +1 -1
  233. package/dist/queries/dependence-slice.d.ts +3 -3
  234. package/dist/queries/dependence-slice.js +1 -1
  235. package/dist/queries/dependency-depth.d.ts +2 -2
  236. package/dist/queries/dependency-depth.js +1 -1
  237. package/dist/queries/deps.d.ts +2 -2
  238. package/dist/queries/deps.js +1 -1
  239. package/dist/queries/diff-impact.d.ts +2 -2
  240. package/dist/queries/diff-impact.js +1 -1
  241. package/dist/queries/doc-drift.d.ts +2 -2
  242. package/dist/queries/doc-drift.js +1 -1
  243. package/dist/queries/drift.d.ts +2 -2
  244. package/dist/queries/drift.js +1 -1
  245. package/dist/queries/duplicate-bodies.d.ts +2 -2
  246. package/dist/queries/duplicate-bodies.js +1 -1
  247. package/dist/queries/entry-map.d.ts +2 -2
  248. package/dist/queries/entry-map.js +1 -1
  249. package/dist/queries/evidence.d.ts +3 -3
  250. package/dist/queries/evidence.js +1 -1
  251. package/dist/queries/extract-candidates.d.ts +2 -2
  252. package/dist/queries/extract-candidates.js +1 -1
  253. package/dist/queries/fan.d.ts +2 -2
  254. package/dist/queries/fan.js +1 -1
  255. package/dist/queries/files.d.ts +2 -2
  256. package/dist/queries/files.js +1 -1
  257. package/dist/queries/health.d.ts +3 -3
  258. package/dist/queries/health.js +1 -1
  259. package/dist/queries/hierarchy.d.ts +2 -2
  260. package/dist/queries/hierarchy.js +1 -1
  261. package/dist/queries/hotspots.d.ts +2 -2
  262. package/dist/queries/hotspots.js +1 -1
  263. package/dist/queries/imports.d.ts +2 -2
  264. package/dist/queries/imports.js +1 -1
  265. package/dist/queries/incomplete-migration.d.ts +2 -2
  266. package/dist/queries/incomplete-migration.js +1 -1
  267. package/dist/queries/index.d.ts +5 -5
  268. package/dist/queries/index.js +1 -1
  269. package/dist/queries/isolated.d.ts +2 -2
  270. package/dist/queries/isolated.js +1 -1
  271. package/dist/queries/locality-candidates.d.ts +2 -2
  272. package/dist/queries/locality-candidates.js +1 -1
  273. package/dist/queries/members.d.ts +2 -2
  274. package/dist/queries/members.js +1 -1
  275. package/dist/queries/methods.d.ts +2 -2
  276. package/dist/queries/methods.js +1 -1
  277. package/dist/queries/not-implemented.d.ts +2 -2
  278. package/dist/queries/not-implemented.js +1 -1
  279. package/dist/queries/outline.d.ts +2 -2
  280. package/dist/queries/outline.js +1 -1
  281. package/dist/queries/passthrough-candidates.d.ts +2 -2
  282. package/dist/queries/passthrough-candidates.js +1 -1
  283. package/dist/queries/plan-context.d.ts +2 -2
  284. package/dist/queries/plan-context.js +1 -1
  285. package/dist/queries/react-component-duplicates.d.ts +2 -2
  286. package/dist/queries/react-component-duplicates.js +1 -1
  287. package/dist/queries/react-hook-candidates.d.ts +2 -2
  288. package/dist/queries/react-hook-candidates.js +1 -1
  289. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  290. package/dist/queries/react-large-component-pressure.js +1 -1
  291. package/dist/queries/recent-duplicates.d.ts +2 -2
  292. package/dist/queries/recent-duplicates.js +1 -1
  293. package/dist/queries/redundant-reexports.d.ts +2 -2
  294. package/dist/queries/redundant-reexports.js +1 -1
  295. package/dist/queries/reference-neighborhood.d.ts +2 -2
  296. package/dist/queries/reference-neighborhood.js +1 -1
  297. package/dist/queries/reference-reachability.d.ts +2 -2
  298. package/dist/queries/reference-reachability.js +1 -1
  299. package/dist/queries/refs.d.ts +2 -2
  300. package/dist/queries/refs.js +1 -1
  301. package/dist/queries/self-audit.d.ts +2 -2
  302. package/dist/queries/self-audit.js +1 -1
  303. package/dist/queries/similar-chains.d.ts +2 -2
  304. package/dist/queries/similar-chains.js +1 -1
  305. package/dist/queries/similar-files.d.ts +2 -2
  306. package/dist/queries/similar-files.js +1 -1
  307. package/dist/queries/similar-signatures.d.ts +2 -2
  308. package/dist/queries/similar-signatures.js +1 -1
  309. package/dist/queries/similar.d.ts +2 -2
  310. package/dist/queries/similar.js +1 -1
  311. package/dist/queries/slice.d.ts +2 -2
  312. package/dist/queries/slice.js +1 -1
  313. package/dist/queries/source-inspection.d.ts +4 -4
  314. package/dist/queries/source-inspection.js +1 -1
  315. package/dist/queries/source-search.d.ts +2 -2
  316. package/dist/queries/source-search.js +1 -1
  317. package/dist/queries/stale-abstractions.d.ts +2 -2
  318. package/dist/queries/stale-abstractions.js +1 -1
  319. package/dist/queries/stats.d.ts +2 -2
  320. package/dist/queries/surface.d.ts +2 -2
  321. package/dist/queries/surface.js +1 -1
  322. package/dist/queries/symbols.d.ts +2 -2
  323. package/dist/queries/symbols.js +1 -1
  324. package/dist/queries/system-map.d.ts +2 -2
  325. package/dist/queries/system-map.js +1 -1
  326. package/dist/queries/system.d.ts +2 -2
  327. package/dist/queries/system.js +1 -1
  328. package/dist/queries/test-quality.d.ts +2 -2
  329. package/dist/queries/test-quality.js +1 -1
  330. package/dist/queries/trace.d.ts +2 -2
  331. package/dist/queries/trace.js +1 -1
  332. package/dist/queries/twin-ab.d.ts +2 -2
  333. package/dist/queries/twin-ab.js +1 -1
  334. package/dist/queries/twin-drift.d.ts +2 -2
  335. package/dist/queries/twin-drift.js +1 -1
  336. package/dist/queries/unused-imports.d.ts +2 -2
  337. package/dist/queries/unused-imports.js +1 -1
  338. package/dist/queries/unused-params.d.ts +2 -2
  339. package/dist/queries/unused-params.js +1 -1
  340. package/dist/queries/value-flow.d.ts +3 -3
  341. package/dist/queries/value-flow.js +1 -1
  342. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  343. package/dist/queries/vue-component-duplicates.js +1 -1
  344. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  345. package/dist/queries/vue-composable-candidates.js +1 -1
  346. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  347. package/dist/queries/vue-large-view-pressure.js +1 -1
  348. package/dist/queries/wrapper-candidates.d.ts +2 -2
  349. package/dist/queries/wrapper-candidates.js +1 -1
  350. package/dist/reindex-worker.js +1 -1
  351. package/dist/reindex.d.ts +3 -3
  352. package/dist/reindex.js +31 -31
  353. package/dist/runtime.d.ts +24 -4
  354. package/dist/runtime.js +3 -3
  355. package/dist/rust-semantic-session-server.js +1 -1
  356. package/dist/rust-semantic-session-worker.js +1 -1
  357. package/dist/rust-semantic-worker.js +1 -1
  358. package/dist/{scip-cli-B7N3haxa.d.ts → scip-cli-BRFKkHQn.d.ts} +1 -1
  359. package/dist/sentinel-ensure-command-KYYULCFU.js +2 -0
  360. package/dist/sentinel-ensure-command-RIZA3RY7.js +3 -0
  361. package/dist/sentinel-hook.js +39 -0
  362. package/dist/sentinel-worker.js +16 -0
  363. package/dist/typescript-mailbox-worker.js +1 -1
  364. package/dist/watch-server.js +6 -6
  365. package/docs/COMMAND_REFERENCE.md +5 -3
  366. package/docs/schemas/project-config.schema.json +159 -0
  367. package/package.json +9 -5
  368. package/skills/codebaseiq/SKILL.md +1 -1
  369. package/skills/concrete-plan/SKILL.md +1 -1
  370. package/ui/view/api.js +450 -0
  371. package/ui/view/app.js +394 -0
  372. package/ui/view/builder.js +323 -0
  373. package/ui/view/file-panel.js +170 -0
  374. package/ui/view/focus.js +379 -0
  375. package/ui/view/index.html +54 -0
  376. package/ui/view/map.js +424 -0
  377. package/ui/view/styles.css +1125 -0
  378. package/dist/chunk-2X7V4HS4.js +0 -88
  379. package/dist/chunk-3IER7Q6H.js +0 -12
  380. package/dist/chunk-3JSXXYTZ.js +0 -345
  381. package/dist/chunk-476NR5B7.js +0 -2
  382. package/dist/chunk-5VKBFZZU.js +0 -3
  383. package/dist/chunk-ADTBPVUZ.js +0 -21
  384. package/dist/chunk-BFFZDZQV.js +0 -2
  385. package/dist/chunk-BMYOV5GP.js +0 -77
  386. package/dist/chunk-C74PPYLA.js +0 -3
  387. package/dist/chunk-CWONGW6P.js +0 -3
  388. package/dist/chunk-DDZ7VHWV.js +0 -20
  389. package/dist/chunk-DR2LURYU.js +0 -3
  390. package/dist/chunk-ECQBG7PW.js +0 -564
  391. package/dist/chunk-FM5BPL4V.js +0 -60
  392. package/dist/chunk-G6XFR4ZL.js +0 -4
  393. package/dist/chunk-GTIYTDRE.js +0 -562
  394. package/dist/chunk-HOA5YGOH.js +0 -3
  395. package/dist/chunk-KUW32IRO.js +0 -2
  396. package/dist/chunk-LTA3BRZX.js +0 -2
  397. package/dist/chunk-NAUD7LCA.js +0 -2
  398. package/dist/chunk-OGTFJ3XD.js +0 -2
  399. package/dist/chunk-Q5ELPRKQ.js +0 -2
  400. package/dist/chunk-QCN62RTF.js +0 -3
  401. package/dist/chunk-QW7EP6WI.js +0 -21
  402. package/dist/chunk-RU65DDUP.js +0 -215
  403. package/dist/chunk-SELM5MER.js +0 -2
  404. package/dist/chunk-SNNWPCN7.js +0 -4
  405. package/dist/chunk-TFZB6XTM.js +0 -239
  406. package/dist/chunk-UXM43C7T.js +0 -3
  407. package/dist/chunk-VFY6Y2H6.js +0 -61
  408. package/dist/chunk-WE5RZHZ7.js +0 -5
  409. package/dist/chunk-Z54RD7VL.js +0 -3
  410. package/dist/cli-context-3SNLDYBM.js +0 -3
  411. package/dist/cli-context-T3B7W6GG.js +0 -2
  412. package/dist/cli-program-YNOXO72B.js +0 -7
  413. package/dist/command-descriptors-6AOUKWW7.js +0 -346
  414. package/dist/command-descriptors-ZFKJSRUP.js +0 -344
  415. package/dist/direct-navigation-DP4LVMRX.js +0 -3
  416. package/dist/direct-navigation-FLUS3BT6.js +0 -2
  417. package/dist/invocation-command-descriptors-QT2JMY5J.js +0 -3
  418. package/dist/invocation-command-descriptors-YN4QJEAX.js +0 -2
  419. package/dist/output-continuation-command-2V2SL4TD.js +0 -2
  420. package/dist/output-continuation-command-65J5IP3O.js +0 -3
  421. package/dist/project-reindex-5JOKXAXT.js +0 -2
  422. package/dist/project-reindex-UQBIKO4M.js +0 -3
@@ -0,0 +1,379 @@
1
+ import {
2
+ asArray,
3
+ chip,
4
+ describeCoverage,
5
+ editorLink,
6
+ el,
7
+ expandableList,
8
+ fill,
9
+ formatLocation,
10
+ getSource,
11
+ isAbort,
12
+ normalizeLaneItem,
13
+ normalizeStatements,
14
+ notice,
15
+ pathLabel,
16
+ plural,
17
+ routeLink,
18
+ staleNotice,
19
+ titleCase,
20
+ } from '/assets/api.js';
21
+
22
+ const LOWER_LANES = ['contracts', 'data', 'state', 'runtime'];
23
+ const SOURCE_LINE_CAP = 2000;
24
+ const LANE_TITLES = { callers: 'Callers', callees: 'Callees' };
25
+
26
+ function laneEntries(lanes, name) {
27
+ return asArray(lanes[name]).map(normalizeLaneItem);
28
+ }
29
+
30
+ function laneItem(item, nav) {
31
+ const location = formatLocation(item.file, item.line);
32
+ const title = item.symbol
33
+ ? routeLink(nav, { symbol: item.symbol }, item.label, { class: 'lane-title' })
34
+ : (editorLink(item.editorUri, item.label, 'lane-title') ?? el('span', { class: 'lane-title' }, item.label));
35
+ const place =
36
+ item.symbol && item.editorUri
37
+ ? editorLink(item.editorUri, location, 'lane-place')
38
+ : location && location !== item.label
39
+ ? el('span', { class: 'lane-place' }, location)
40
+ : null;
41
+ return el(
42
+ 'li',
43
+ { class: 'lane-item', data: { strength: item.strength ?? 'unknown' } },
44
+ title,
45
+ el(
46
+ 'div',
47
+ { class: 'lane-meta' },
48
+ place,
49
+ item.subtypes.map((subtype) => chip(subtype)),
50
+ item.reference ? chip('reference', 'subtle') : null,
51
+ item.local ? chip('local', 'subtle') : null,
52
+ item.count !== null ? el('span', { class: 'lane-count', title: 'Count' }, `×${item.count}`) : null,
53
+ item.strength ? el('span', { class: 'lane-strength' }, item.strength) : null,
54
+ ),
55
+ );
56
+ }
57
+
58
+ function lane(name, items, nav, className = '') {
59
+ return el(
60
+ 'section',
61
+ { class: `lane ${className}`.trim(), data: { lane: name } },
62
+ el('h3', null, LANE_TITLES[name] ?? titleCase(name), el('span', { class: 'count' }, items.length)),
63
+ items.length === 0
64
+ ? el('p', { class: 'empty' }, 'None reported')
65
+ : expandableList(items, (item) => laneItem(item, nav), { limit: 25, className: 'lane-list' }),
66
+ );
67
+ }
68
+
69
+ function symbolCard(definition, parent, nav) {
70
+ return el(
71
+ 'section',
72
+ { class: 'symbol-card', 'aria-label': 'Focused symbol' },
73
+ el('strong', { class: 'symbol-card-name' }, definition.name),
74
+ el('div', { class: 'muted' }, formatLocation(definition.file, definition.startLine)),
75
+ parent ? el('div', { class: 'muted' }, 'in ', routeLink(nav, { symbol: parent.symbol }, parent.name)) : null,
76
+ );
77
+ }
78
+
79
+ function lanesGrid(data, nav) {
80
+ const lanes = data.lanes && typeof data.lanes === 'object' ? data.lanes : {};
81
+ const extra = Object.keys(lanes).filter((name) => !['callers', 'callees', ...LOWER_LANES].includes(name));
82
+ return el(
83
+ 'div',
84
+ { class: 'lanes' },
85
+ el(
86
+ 'div',
87
+ { class: 'lanes-main' },
88
+ lane('callers', laneEntries(lanes, 'callers'), nav, 'lane-callers'),
89
+ symbolCard(data.definition, data.parent, nav),
90
+ lane('callees', laneEntries(lanes, 'callees'), nav, 'lane-callees'),
91
+ ),
92
+ el(
93
+ 'div',
94
+ { class: 'lanes-more' },
95
+ [...LOWER_LANES, ...extra].map((name) => lane(name, laneEntries(lanes, name), nav)),
96
+ ),
97
+ );
98
+ }
99
+
100
+ function header(data) {
101
+ const { definition } = data;
102
+ return el(
103
+ 'header',
104
+ { class: 'panel-head' },
105
+ el('p', { class: 'eyebrow' }, 'Symbol'),
106
+ el('h2', { class: 'path-title', tabindex: '-1' }, definition.name),
107
+ definition.signature ? el('pre', { class: 'signature' }, el('code', null, definition.signature)) : null,
108
+ definition.documentation ? el('div', { class: 'documentation' }, definition.documentation) : null,
109
+ el(
110
+ 'div',
111
+ { class: 'head-actions' },
112
+ el('span', { class: 'muted' }, formatLocation(definition.file, definition.startLine)),
113
+ editorLink(definition.editorUri, 'Open in editor'),
114
+ ),
115
+ data.source?.stale === true ? staleNotice() : null,
116
+ );
117
+ }
118
+
119
+ function relatives(data, nav) {
120
+ const members = asArray(data.members);
121
+ if (!data.parent && members.length === 0) return null;
122
+ return el(
123
+ 'section',
124
+ { class: 'block relatives' },
125
+ data.parent
126
+ ? el(
127
+ 'p',
128
+ null,
129
+ el('span', { class: 'muted' }, 'Parent '),
130
+ routeLink(nav, { symbol: data.parent.symbol }, data.parent.name),
131
+ )
132
+ : null,
133
+ members.length > 0
134
+ ? el(
135
+ 'div',
136
+ null,
137
+ el('h3', null, 'Members', el('span', { class: 'count' }, members.length)),
138
+ expandableList(
139
+ members,
140
+ (member) =>
141
+ el(
142
+ 'li',
143
+ null,
144
+ routeLink(nav, { symbol: member.symbol }, member.name, { class: 'path-link' }),
145
+ member.line ? el('span', { class: 'muted' }, `L${member.line}`) : null,
146
+ ),
147
+ { limit: 20, className: 'plain-list columns' },
148
+ ),
149
+ )
150
+ : null,
151
+ );
152
+ }
153
+
154
+ function importsBlock(imports, nav) {
155
+ const paths = asArray(imports).filter((path) => typeof path === 'string');
156
+ if (paths.length === 0) return null;
157
+ return el(
158
+ 'details',
159
+ { class: 'block collapsible' },
160
+ el('summary', null, 'Imports in this file', el('span', { class: 'count' }, paths.length)),
161
+ expandableList(paths, (path) =>
162
+ el('li', null, routeLink(nav, { file: path }, pathLabel(path), { class: 'path-link', title: path })),
163
+ ),
164
+ );
165
+ }
166
+
167
+ function lineCount(text) {
168
+ return text.replace(/\n$/, '').split('\n').length;
169
+ }
170
+
171
+ function sourceBlock(data) {
172
+ const source = data.source;
173
+ if (!source || typeof source.text !== 'string') return null;
174
+ const { definition } = data;
175
+ const gutter = el('pre', { class: 'gutter', 'aria-hidden': 'true' });
176
+ const code = el('code');
177
+ const note = el('span', { class: 'muted', role: 'status' });
178
+ const show = (text, startLine) => {
179
+ gutter.textContent = Array.from({ length: lineCount(text) }, (_, index) => startLine + index).join('\n');
180
+ code.textContent = text;
181
+ };
182
+ const start = source.startLine ?? definition.startLine;
183
+ show(source.text, start);
184
+ const range = `L${start}–${source.endLine ?? definition.endLine}`;
185
+
186
+ const actions = [note];
187
+ if (source.truncated) {
188
+ note.textContent = 'Showing a truncated excerpt.';
189
+ const load = el(
190
+ 'button',
191
+ {
192
+ type: 'button',
193
+ class: 'link-button',
194
+ on: {
195
+ click: async () => {
196
+ load.disabled = true;
197
+ note.textContent = 'Loading full source';
198
+ try {
199
+ const end = Math.min(definition.endLine, start + SOURCE_LINE_CAP - 1);
200
+ const full = await getSource({ file: definition.file, start, end });
201
+ show(full.text, full.startLine ?? start);
202
+ note.textContent = end < definition.endLine ? `Showing the first ${SOURCE_LINE_CAP} lines.` : '';
203
+ load.remove();
204
+ } catch (error) {
205
+ if (isAbort(error)) return;
206
+ note.textContent = error.message;
207
+ load.disabled = false;
208
+ }
209
+ },
210
+ },
211
+ },
212
+ 'Load full definition',
213
+ );
214
+ actions.push(load);
215
+ }
216
+ return el(
217
+ 'details',
218
+ { class: 'block collapsible source', open: true },
219
+ el('summary', null, 'Source', el('span', { class: 'count' }, range)),
220
+ el('div', { class: 'source-actions' }, actions),
221
+ el('div', { class: 'code-view' }, gutter, el('pre', { class: 'code' }, code)),
222
+ );
223
+ }
224
+
225
+ function endpointCell(endpoint, nav) {
226
+ return el(
227
+ 'td',
228
+ null,
229
+ endpoint.symbol
230
+ ? routeLink(nav, { symbol: endpoint.symbol }, endpoint.label, { class: 'lane-title' })
231
+ : el('code', null, endpoint.label),
232
+ endpoint.place ? el('div', { class: 'muted place' }, endpoint.place) : null,
233
+ );
234
+ }
235
+
236
+ function statementsTable(group, nav) {
237
+ return el(
238
+ 'table',
239
+ { class: 'statements' },
240
+ el('caption', null, group.name, el('span', { class: 'count' }, group.rows.length)),
241
+ el(
242
+ 'thead',
243
+ null,
244
+ el(
245
+ 'tr',
246
+ null,
247
+ ['Relationship', 'From', 'To', 'Strength'].map((heading) => el('th', { scope: 'col' }, heading)),
248
+ ),
249
+ ),
250
+ el(
251
+ 'tbody',
252
+ null,
253
+ group.rows.map((row) =>
254
+ el(
255
+ 'tr',
256
+ { data: { strength: row.strength || 'unknown' } },
257
+ el('td', null, row.subtype),
258
+ endpointCell(row.from, nav),
259
+ endpointCell(row.to, nav),
260
+ el('td', null, row.strength),
261
+ ),
262
+ ),
263
+ ),
264
+ );
265
+ }
266
+
267
+ function inventoryTable(inventory) {
268
+ return el(
269
+ 'details',
270
+ { class: 'collapsible' },
271
+ el('summary', null, 'Inventory', el('span', { class: 'count' }, inventory.length)),
272
+ el(
273
+ 'table',
274
+ { class: 'statements' },
275
+ el(
276
+ 'thead',
277
+ null,
278
+ el(
279
+ 'tr',
280
+ null,
281
+ ['Family', 'Subtype', 'Incoming', 'Outgoing', 'Both'].map((heading) => el('th', { scope: 'col' }, heading)),
282
+ ),
283
+ ),
284
+ el(
285
+ 'tbody',
286
+ null,
287
+ inventory.map((row) =>
288
+ el(
289
+ 'tr',
290
+ null,
291
+ el('td', null, row.family),
292
+ el('td', null, row.subtype),
293
+ el('td', { class: 'num' }, row.incoming),
294
+ el('td', { class: 'num' }, row.outgoing),
295
+ el('td', { class: 'num' }, row.both),
296
+ ),
297
+ ),
298
+ ),
299
+ ),
300
+ );
301
+ }
302
+
303
+ function statementsBlock(data, nav, options) {
304
+ const on = options.statements === true;
305
+ const toggle = el(
306
+ 'button',
307
+ {
308
+ type: 'button',
309
+ class: 'toggle',
310
+ 'aria-pressed': String(on),
311
+ data: { focusKey: 'statements' },
312
+ on: { click: () => options.onToggleStatements?.(!on) },
313
+ },
314
+ 'Statements',
315
+ );
316
+ const { inventory, groups } = on ? normalizeStatements(data.statements) : { inventory: [], groups: [] };
317
+ return el(
318
+ 'section',
319
+ { class: 'block' },
320
+ el(
321
+ 'div',
322
+ { class: 'block-head' },
323
+ toggle,
324
+ el('span', { class: 'muted' }, 'Statement-level relationships, grouped by family'),
325
+ ),
326
+ on && groups.length === 0 ? el('p', { class: 'empty' }, 'No statements reported') : null,
327
+ inventory.length > 0 ? inventoryTable(inventory) : null,
328
+ groups.map((group) => statementsTable(group, nav)),
329
+ );
330
+ }
331
+
332
+ /** The detail panel for one matched symbol: header, relatives, evidence lanes, source, and statements. */
333
+ export function renderFocus(container, data, nav, options = {}) {
334
+ const coverage = describeCoverage(data.coverage);
335
+ fill(
336
+ container,
337
+ header(data),
338
+ relatives(data, nav),
339
+ lanesGrid(data, nav),
340
+ coverage ? el('p', { class: 'coverage' }, el('strong', null, 'Coverage '), coverage) : null,
341
+ importsBlock(data.fileImports, nav),
342
+ sourceBlock(data),
343
+ statementsBlock(data, nav, options),
344
+ );
345
+ }
346
+
347
+ /** The picker shown when a focus selector matches several symbols. */
348
+ export function renderCandidates(container, data, nav, selector) {
349
+ const candidates = asArray(data.candidates);
350
+ const total = Number.isFinite(data.total) ? data.total : candidates.length;
351
+ fill(
352
+ container,
353
+ el(
354
+ 'header',
355
+ { class: 'panel-head' },
356
+ el('p', { class: 'eyebrow' }, 'Ambiguous focus'),
357
+ el('h2', { class: 'path-title', tabindex: '-1' }, selector),
358
+ el('p', { class: 'hint' }, `${plural(total, 'symbol')} match. Choose one.`),
359
+ ),
360
+ el(
361
+ 'section',
362
+ { class: 'block' },
363
+ expandableList(
364
+ candidates,
365
+ (candidate) =>
366
+ el(
367
+ 'li',
368
+ { class: 'candidate' },
369
+ routeLink(nav, { symbol: candidate.symbol }, candidate.name, { class: 'lane-title' }),
370
+ el('span', { class: 'muted' }, formatLocation(candidate.file, candidate.line)),
371
+ ),
372
+ { limit: 50 },
373
+ ),
374
+ total > candidates.length
375
+ ? notice('info', `Showing ${candidates.length} of ${total}. Narrow the selector to see the rest.`)
376
+ : null,
377
+ ),
378
+ );
379
+ }
@@ -0,0 +1,54 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="color-scheme" content="light dark" />
7
+ <meta name="codebaseiq-token" content="__CODEBASEIQ_TOKEN__" />
8
+ <title>codebaseiq view</title>
9
+ <link rel="stylesheet" href="/assets/styles.css" />
10
+ <script type="module" src="/assets/app.js"></script>
11
+ </head>
12
+ <body>
13
+ <a class="skip-link" href="#detail">Skip to details</a>
14
+ <header class="topbar">
15
+ <a class="brand" id="project-name" href="/">codebaseiq</a>
16
+ <nav class="crumbs" id="breadcrumbs" aria-label="Breadcrumbs"></nav>
17
+ <div class="tools">
18
+ <div class="segmented" role="group" aria-label="Edge basis">
19
+ <button type="button" data-basis="references" aria-pressed="true">References</button>
20
+ <button type="button" data-basis="imports" aria-pressed="false">Imports</button>
21
+ </div>
22
+ <form class="search" id="search" role="search">
23
+ <input
24
+ id="search-input"
25
+ type="search"
26
+ name="focus"
27
+ placeholder="Focus a symbol"
28
+ aria-label="Focus selector"
29
+ aria-keyshortcuts="/"
30
+ title="Press / to search"
31
+ autocomplete="off"
32
+ spellcheck="false"
33
+ />
34
+ <button type="submit">Focus</button>
35
+ </form>
36
+ <button type="button" id="builder-button" class="accent" aria-expanded="false" aria-controls="builder" hidden>
37
+ Builder
38
+ </button>
39
+ <span class="pill" id="watcher-state" data-state="unknown">Connecting</span>
40
+ </div>
41
+ <div class="progress" aria-hidden="true"></div>
42
+ </header>
43
+ <main class="split" id="split" data-view="scope">
44
+ <section class="pane map-pane" id="map" aria-label="Code map"></section>
45
+ <section class="pane detail-pane" id="detail" aria-label="Details" tabindex="-1">
46
+ <p class="muted pad">Loading</p>
47
+ </section>
48
+ </main>
49
+ <aside class="drawer" id="builder" role="dialog" aria-labelledby="builder-title" hidden></aside>
50
+ <div class="toast" id="toast" role="status" aria-live="polite"></div>
51
+ <div class="visually-hidden" id="announce" role="status" aria-live="polite"></div>
52
+ <noscript><p class="pad">The codebaseiq viewer needs JavaScript. Nothing is loaded from the network.</p></noscript>
53
+ </body>
54
+ </html>